SamuKata
splendidostrich
splendidostrich

patreon


Newlife 0.7.1

Hi all!

Here's the newest version of Newlife. Unlike most releases, there's not much in terms of new content. Instead, this version has focused on two big changes.

First, save files and saved templates are now completely different, in json format. This involved some major internal changes and took up the bulk of the work, but I think it'll prove to be a real improvement. It has three main advantages:

First, it should fix an issue some people had experienced with loading games using the latest version of Java.

Second, save files and character templates should now work across versions unless the internal data structures change.

Third, the save files are now in json format which means that players can (carefully!) edit them in a text editor. When doing so, I recommend using something with a plugin that will format the json: the save files are initially created as walls-of-text, but when I ran tests I was able to use the json-viewer plugin for notepad++ to make them nicely readable. Do back up your save files before making changes though, as it'd be easy to break something.


The second change is the addition of hairstyles, but only internally. This is because the new save system did not play well at all with Newlife's build process so fixing that took up the time I'd been hoping to use for a stylist scene.

Still, Hairstyles are technically in the game, although in a very basic way where men all have either bald, shaven-headed or short hair and women all have long hair.

I'm thinking of putting out a mini-update early in May which adds a stylist scene and a bunch of hairstyles, and then jumping into lesbian content for a larger release to come at the end of the month.  

As such, I'd like to hear your suggestions for hairstyles you want for your character or for NPCs. 

If you're suggesting a hairstyle, it'd be interesting to know where you think it should lie on the cute-sexy and elegant-casual axes, as hairstyles in Newlife do have an effect on the player's stats. They also have a length (none/short/shoulder-length/long) which can be important - for example the various hair-pulling actions generally need long or shoulder-length hair.


Beyond this optimistic talk about hairstyles, I also should ask you to report any errors you find. There were a lot of problems with the new save system at first and I've been bugfixing today pretty much since I woke up. It's possible that there may be bugs left, so if you find that a game refuses to load then please let me know!


Major changes & additions:

Completely replaced the way Newlife saves games (and templates), along with some significant internal reworks to remove bloat from the files. 

Added support for hairstyles internally, although it currently isn't possible to change them except for save-editing and the values are largely placeholders.

Changes for user-submitted content:

Added a getHairstyle() method to characters in custom scenes.

Bugfixes:

Fixes to text issues. Thanks to  and  for reporting some of these.

Fixed a bug with the new error logging added in 0.7.0e. Thanks to DGF for finding this!

Comments

Thanks! This was the same underlying problem as the ClothesComparator error reported by Dunan and John. Getting a different view on it did help track it down. It's fixed in the bugfix version.

Splendid Ostrich

Thanks! This should be working in the bugfix version.

Splendid Ostrich

Thanks! This should be working in the bugfix version.

Splendid Ostrich

Style is an enumerated type, and length is one of its properties, so there can be multiple styles which share a length. The lengths are NONE, SHORT, SHOULDERS and LONG. As for the cute/sexy thing, perhaps "provocative" would be a better description, or maybe "naughty".

Splendid Ostrich

I'm getting an error whenever I attempt to load a save I've just made on this new version: Error loading game. Are you using a newer version of Newlife? Saves are not guaranteed to be compatible between versions. Error was: Cannot construct instance of `i.e`, problem: `java.lang.NullPointerException` at[Source: (sun.awt.shell.Win32ShellFolder2); line: 1, column:1925] (through reference chain: uk.co.blogspot.spendidostrich.newlifegame.a["player"]->c.w["wardrobe"]->k.a["outfits"]->java.util.HashMap["GOING_OUT"]->java.util.ArrayList[0]->h.e["legwear"]) This is with the Relax Outfit Restrictions setting enabled - unticking it in Options allows me to load saves again (but obviously, I'd like to keep it ticked). Edit: this also seems to have broken my ability to open the Manage Outfits menu at all.

BRobort

I believe I've found an issue related to save editing. I am using notepad++ to open the save files, and I have discovered that any attempt to save the file—even when saving the file without making any changes—results in the file being corrupted. Upon being loaded, the manage wardrobe button stops working, and trying to shop for clothes results in the following error: Exception was: java.lang.NullPointerException: null g.c.a(ClothesComparator.java:29) g.c.compare(ClothesComparator.java:1019) java.base/java.util.TimSort.binarySort(TimSort.java:296) java.base/java.util.TimSort.sort(TimSort.java:221) java.base/java.util.Arrays.sort(Arrays.java:1441) l.m.b(WardrobeUI.java:243) l.m.b(WardrobeUI.java:218) l.m$27.actionPerformed(WardrobeUI.java:627) java.desktop/javax.swing.JComboBox.fireActionEvent(JComboBox.java:1264) java.desktop/javax.swing.JComboBox.setSelectedItem(JComboBox.java:589) l.m.a(WardrobeUI.java:166) l.i.a(NewlifeUI.java:156) ak.k.a(ShopEvent.java:40) ac.a.a(Activity.java:1079) ab.k.a(WeekActivities.java:41) ab.k.a(WeekActivities.java:55) ac.a.a(Activity.java:91) ag.a.a(AbstractEvent.java:53) n.a.b(AbstractScene.java:83) l.l.actionPerformed(ScenePanel.java:349) java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967) java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308) java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) java.desktop/java.awt.Component.processMouseEvent(Component.java:6632) java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342) java.desktop/java.awt.Component.processEvent(Component.java:6397) java.desktop/java.awt.Container.processEvent(Container.java:2263) java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008) java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) java.desktop/java.awt.Component.dispatchEvent(Component.java:4840) java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918) java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547) java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488) java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307) java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772) java.desktop/java.awt.Component.dispatchEvent(Component.java:4840) java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) java.base/java.security.AccessController.doPrivileged(Native Method) java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743) java.base/java.security.AccessController.doPrivileged(Native Method) java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

John Jimmson

Error when attempting to finish scene T.g. Please report this to the developer as a bug including the text of the message below. Exception was: java.lang.NullPointerException: null g.c.a(ClothesComparator.java:29) g.c.compare(ClothesComparator.java:1019) java.util.TimSort.countRunAndMakeAscending(Unknown Source) java.util.TimSort.sort(Unknown Source) java.util.Arrays.sort(Unknown Source) l.m.b(WardrobeUI.java:243) l.m.b(WardrobeUI.java:218) l.m$27.actionPerformed(WardrobeUI.java:627) javax.swing.JComboBox.fireActionEvent(Unknown Source) javax.swing.JComboBox.setSelectedItem(Unknown Source) l.m.a(WardrobeUI.java:166) l.i.a(NewlifeUI.java:156) ak.k.a(ShopEvent.java:40) ac.a.a(Activity.java:1079) ab.k.a(WeekActivities.java:41) ab.k.a(WeekActivities.java:55) ac.a.a(Activity.java:91) ag.d.a(NothingHappensEvent.java:21) ac.a.a(Activity.java:1079) ab.k.a(WeekActivities.java:41) ab.k.a(WeekActivities.java:55) ac.a.a(Activity.java:91) ag.a.a(AbstractEvent.java:53) n.a.b(AbstractScene.java:83) l.l.actionPerformed(ScenePanel.java:349) javax.swing.AbstractButton.fireActionPerformed(Unknown Source) javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) javax.swing.DefaultButtonModel.setPressed(Unknown Source) javax.swing.AbstractButton.doClick(Unknown Source) javax.swing.AbstractButton.doClick(Unknown Source) l.l$1.actionPerformed(ScenePanel.java:84) javax.swing.SwingUtilities.notifyAction(Unknown Source) javax.swing.JComponent.processKeyBinding(Unknown Source) javax.swing.KeyboardManager.fireBinding(Unknown Source) javax.swing.KeyboardManager.fireKeyboardAction(Unknown Source) javax.swing.JComponent.processKeyBindingsForAllComponents(Unknown Source) javax.swing.JComponent.processKeyBindings(Unknown Source) javax.swing.JComponent.processKeyEvent(Unknown Source) java.awt.Component.processEvent(Unknown Source) java.awt.Container.processEvent(Unknown Source) java.awt.Component.dispatchEventImpl(Unknown Source) java.awt.Container.dispatchEventImpl(Unknown Source) java.awt.Component.dispatchEvent(Unknown Source) java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) java.awt.Component.dispatchEventImpl(Unknown Source) java.awt.Container.dispatchEventImpl(Unknown Source) java.awt.Window.dispatchEventImpl(Unknown Source) java.awt.Component.dispatchEvent(Unknown Source) java.awt.EventQueue.dispatchEventImpl(Unknown Source) java.awt.EventQueue.access$500(Unknown Source) java.awt.EventQueue$3.run(Unknown Source) java.awt.EventQueue$3.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) java.awt.EventQueue$4.run(Unknown Source) java.awt.EventQueue$4.run(Unknown Source) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) java.awt.EventQueue.dispatchEvent(Unknown Source) java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) java.awt.EventDispatchThread.pumpEvents(Unknown Source) java.awt.EventDispatchThread.pumpEvents(Unknown Source) java.awt.EventDispatchThread.run(Unknown Source)

Dunan Rayne

"Cute" isn't necessarily something aiming to be innocent or shy, or something like that. The game already has "shy" as a different trait than cute anyway. I think you could very easily have a lowcut dress with a thong, and also have that outfit be cute. A cute outfit would tend to have like bright colors (pink, yellow, lighter blues, white), frills, and bows, which are also things that could definitely be put on a sexy piece of lingerie.

Sentenal

i think it makes sense that they are opposites. what i think your saying is both can be attractive. for me sexy is things are like thongs, lowcut dresses and things that are deliberately trying to evoke sexual energy. whereas the cute angle is aiming for a more innocent and shy. trying to evoke a more nurturing and caring aspect of the mate they seek. i damn near started a tangent that was off topic. that's what i get for thinking about it way too deeply.

Fox McQwerty

Would length and style be two different variables? If thats the case, then Length would obviously be short, medium, and long. Maybe length could coorespond to the Elegant-Casual axis, with short being more casual and long being more elegant. I think it probably makes sense to not go too crazy with the amount of styles, so like straight, wavy, ponytail, twintail. TBH I don't really agree with the whole concept that 'cute' and 'sexy' are opposed traits on an axis (since I think something can be both cute AND sexy), so its hard for me to contribute there.

Sentenal

sloppy bun could be good for casual/cute and shoulder-length bob might work for...mm...elegant/cute? i wouldnt really say theyre sexy all on their own

robin


More Creators