Nightgames Mod (v2.5.1.2) updated 2/11/17

dndw

Well-Known Member
Aug 27, 2015
456
20
Yes, I am aware. I probably haven't tested enough with he so far. I'll probably have some time to fix the remaining bugs this weekend, but no promises on that.
 

12centDime

Active Member
Mar 16, 2017
41
5
I'm a fan of whatever's good the the NPCs is good for the PC, and giving back what you get is very satisfying.
We'll see if/when we get to it I suppose. I really don't think they are that easy to balance for both NPCs and PCs in a game like this, but I could be wrong. I just think that sort of power should be behind debug menus, or different game modes, or heavy requirements and costs, or something. That way, they can still be balanced for the NPCs and still be not too overwhelming or pigeonholing on PCs.
That said, I will admit that it would be satisfying to use addictions too though. And...
One thing we could do is make additional addictions which requires high numbers in at least two attributes to unlock. That would be a fair amount of work, though. Even better would be some kind of modular, build-your-own-addiction system.
Addictions that don't leave out particular build paths and that don't have to be somehow tuned such that they are good for both enemies and PCs at the same time?
Yes. This. 100% this. I love this.
Did I mention this? xD
 
Last edited:

dndw

Well-Known Member
Aug 27, 2015
456
20
I tired around a bit yesterday, but did anyone manage to run it on an android tablet?
Unlikely. If someone has some spare hosting space we might (very big *might*) get it online using Webswing. Otherwise, no, just maintaining the desktop version is plenty of work already.

Because I am terrible at prioritizing and had a spare fifteen minutes, I wrote up an example illustrating the modular addiction system I thought of. For your consideration:
{
"name": "test",
"display": "Test Modular Addiction",
"description": "Description for test",
"requirements": { "attribute": { "att": "Seduction", "amount": 20 } },
"triggers": [
{
"name": "trigger",
"display": "Test Trigger",
"description": "Slightly increases addiction when 20+ temptation damage is dealt.",
"type": "nightgames.status.addiction.modules.DamageTypeTrigger",
"damageType": "TEMPTATION",
"threshold": 20,
"triggerWeight": "LOW",
"message": "{other:SUBJECT-ACTION:tempt} {self:name-do}!"
},{
"name": "ootrigger",
"display": "On Orgasm Trigger",
"description": "Increases addiction if target cums while Charmed",
"type": "nightgames.status.addiction.modules.OnOrgasmTrigger",
"orgasmOf": "TARGET", //as opposed to SELF or EITHER
"requirements": { "status": "charmed" },
"triggerWeight": "MEDIUM",
"message": "{self:SUBJECT} came while charmed by {other:name-do}!"
}
],
"activeEffects": [
{
"name": "charmedEffect",
"display": "Cause Charmed",
"description": "A 20 * combatMagnitude% chance to cause Charmed",
"type": "nightgamesmod.status.addiction.modules.CauseStatusEffect",
"status": "nightgamesmod.status.Charmed",
"duration": 2,
"baseChance": 0.2,
"scalesWith": "COMBAT", // or REGULAR
"message": "{self:NAME-POSSESSIVE} addiction caused {self:direct-object} to be Charmed!"
}
// similar for other mental effects...
],
"withdrawalEffects": [
{
"name": "capMojo",
"display": "Mojo Cap Effect",
"description": "Reduces maximum mojo by (50 * magnitude)%",
"type": "nightgamesmod.status.addiction.modules.CapStatEffect",
"stat": "MOJO", // or STAMINA, AROUSAL, WILLPOWER
"baseAmount": -0.5,
"scalesWith": "REGULAR",
"message": "{self:NAME-POSSESSIVE} mojo is limited!"
}
],
"beneficialEffects": [
{
"name": "tempResist",
"display": "Temptation Resistance",
"description": "Provides a resistance to temptation when it's not caused by the player",
"type": "nightgamesmod.status.addiction.modules.DamageTypeScaleEffect",
"damageType": "TEMPTATION",
"baseFactor": -0.2,
"scalesWith": "REGULAR",
"message": "Having been tempted so much by {other:subject}, {self:subject} is less affected by others' efforts.}"
}
],
"increaseDescription": {
"LOW": "Just got the addiction",
"MEDIUM": "Addiction is getting worse",
"HIGH": "Addiction is very strong now"
},
"descreaseDescription": {
"NONE": "The addiction is gone",
"LOW": "The addiction is getting very weak",
"MEDIUM": "The addiction is waning a bit"
},
"combatIncreaseDescription": {
"LOW": "In-combat effects are starting to appear",
"MEDIUM": "In-combat effects are getting worrisome",
"HIGH": "In-combat effects are now probably debilitating"
},
"combatDecreaseDescription": {
"NONE": "In-combat effects are gone. phew.",
"LOW": "In-combat effects are probably negligible now",
"MEDIUM": "In-combat effects aren't quite as bad now"
}
}
 
Last edited:

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
@dndw

It's missing the ability to add and remove traits?
It's also missing the means to manage its own addiction strength or removal via decay, overload, and safe removal.

Following the line of discussion - player addictions can be done as their own versions, but I'm sure we walk away with a stronger program and game if we modularize everything and design it better.
 

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
Quick grammatical error:

Her should be she - wrong tag used.

"Your mind is completely preoccupied by Angel. You didn't worship today! Will her be angry? What will you do if she is? You aren't going to be able to focus on much else tonight."

EDIT:

What follows is a bit presumptuous, but I wanted to do a complete pass on the trait list. I copied and delimited the entire trait list then commented on any that I thought needed some work.

Addictive Fluids
Fluid addiction should subside quickly as it's very common.

Affectionate (Kat daytime sex)
Should be something the player can get – playing the Daytime should be a thing.

Beguiling Breasts (Cassie Breasts focus)
Not sure how long 50 turns is, but a bit much unless Cunning can mitigate it.

Biting Words (unavailable?)
I like this, it should be implemented.

Breeder (Kat Addiction)
Bite might require a rename to breeding bite?

CeilingStalker (Airi Mimicry focus)
Would a Slime attribute user be able to use this, too?

Clingy (unavailable)
Might be nice to have this in.

Confident Dom (Jewel Physical focus)
Perhaps this should have a cap?

Cute
Would like to see this as a tag for Mara and starting trait for player.

Deft Hands
Perhaps this should have a negative trait called Clumsy?

Devotee Fervor (Angel Followers focus)
With double pets this totally screws the action economy of the game.

Divinity
Divine Charge isn't very clear to me, but I think expanding on this might make divinity more fun.

Dominatrix (Jewel Addiction)
Maybe doing the opposite to Jewel should reduce this addiction?

Draining Ass (Jewel Anal focus)
Might require Rename to not confuse Drain?

Edger (Jewel Martial+Physical focus)
Temptation damage is really something – I like this trait but it might be one tempt source that needs a nerf.

Enthralling Juices
This can cause a Obey and Nothing Loop that's incredibly sadface.

Erophage (Angel Nymphomania focus)
Perhaps rename this trait? I like it a lot.

Expert Googler
I'm not sure how well this scales.

Fetish Trainer (unavailable?)
It gets much harder to inflict fetishes yourself as a player later on – this might be good to develop.

Fitness Nut
Same situation as Expert Googler.

Hair Trigger (Starting Weakness)
Might require rebalance after other things - a low priority pass.

Inebriating Toxins (Airi Parasite focus)
This was pretty funny. I'll have to test it more.

Last Stand (Angel Nymphomania focus)
Moves might be too good?
 
Last edited:

12centDime

Active Member
Mar 16, 2017
41
5
Following the line of discussion - player addictions can be done as their own versions, but I'm sure we walk away with a stronger program and game if we modularize everything and design it better.
Being better designed is always an upside, but why is the game automatically better if the enemies' addictions are generalized like the players? Isn't the only thing that matters that they are easy to understand with minimal effort?

The enemies are pre-created and any synergies are well known and don't have to take factors like player choice into consideration as much, allowing them to just have more power within whatever they do. Too, AI is wonky. Even at its best, it still probably won't function exactly as intended. Their addictions help mitigate this, or can even be overtuned to help make up for it or other weaknesses inherent in their level-up kits.

In contrast, players can, given a set of choices, consistently choose the right choice. Players can also choose exceedingly better complimentary traits, using that addiction far better than an NPC would. But if player's and NPCs have exactly the same addictions, the NPC addictions have to take all this into account and can no longer be customized and appropriately powered to fit their characters.

I just don't see why it would necessarily be better to have their addictions be exactly the same as the player's. A player's addiction has to take so many more factors into account that it should be weaker than/different from the enemies' I think.

Affectionate (Kat daytime sex)
Should be something the player can get – playing the Daytime should be a thing.
//This is something the Player can get. Its a Daytime Sex trait given by Kat.

Beguiling Breasts (Cassie Breasts focus)
Not sure how long 50 turns is, but a bit much unless Cunning can mitigate it.
//Both Cassie and the Player can't get this until Lvl 47. Seems to be an auto-orgasm trait unless you resist? I'm...actually not sure how important that is that late in the game, especially since the Player should be able to block it with blindfolds. That level requirement should be a consideration though.

Biting Words (unavailable?)
I like this, it should be implemented.
//Atm, I think only Sarah gets this? I could see this being something the Player could get too, yeah.

Clingy (unavailable)
Might be nice to have this in.
//Available as Airi Daytime Sex activity.

Cute
Would like to see this as a tag for Mara and starting trait for player.
//Don't agree. Innocent Appearance cuts damage by a pretty large chunk and is probably too strong in the beginning of the game where everyone is far more prone to physical action I think.

Fetish Trainer (unavailable?)
It gets much harder to inflict fetishes yourself as a player later on – this might be good to develop.
//Available at Fetish 15, Player lvl 20. I haven't ever noticed it getting hard to land fetishes, but maybe I just haven't played far enough? Always get bored at about Level 30, since inflicting any Fetish with a value over 1 wins the match effectively.

Last Stand (Angel Nymphomania focus)
Moves might be too good?
//Players get this with Seduction 25, alwaysready, sexTraining1, and Player Lvl 10. You're able to play around the fact Angel has it so I don't think it's too strong there. It seems silly with Animism(like alot of things), but is otherwise fine I would think. Enemies tend to have more Willpower than the Player unless the player starts actually putting points into Willpower(In which case, they deserve to be rewarded with better use of this trait, I think), or starts losing matches on purpose. I believe having more incentive to actually win matches and fixing Animism are better ways of balancing this than actually changing it. Also possibly nerfing Strong-Willed somewhat.
As for the pseudocode: ...I need to actually look at the addiction code for a better background on what that means apparently. xD Too many questions with answers that are probably obvious if I just check. Will come back later when I have time to enlighten myself.
 

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
@12centDime
The reason I say that is that more generalized design creates systems that can handle additions or extensions without rewrites or janky-awkward implementation.

Look at how flags, traits, and effects are processed. They all have similar roles in how characters grow and change but they are all implemented differently and across so many classes. Examine how several things are currently implemented in code. With at least 2 people working on things on top of something someone else designed years ago - without proper documentation or plans for expansion - the mod has several things implemented across many classes.

Not without reason - there's good reason why some things are the way they are. but no one can look me in the eye and say that nightgames can't be cleaned up and have several things rearranged and ordered, including the core mechanics.

At the end of the day - there's a lot of bugs, not enough narrative or content functionality, several game and program elements are obsolescent, and it's very hard to contribute new stuff.

If you're not convinced about addictions - that's fine - no big deal arguing about it. I just want to be able to engage and respond to the other characters more than spamming the same sequence of abilities against them during the games. More scenes, more narrative possibilities, more giving back what the player gets.

This is why I've been trying to contribute content - but whoever's working on Rosea, Samantha, and Especially Eve need to get back to it and finish them out. Eve doesn't even have a portrait and it bugs the game.
 
Last edited:

12centDime

Active Member
Mar 16, 2017
41
5
Oh. Ok, I see what I'm missing here. Most notably, I somehow thought you were also talking about giving PCs the same addictions as NPCs, and

Following the line of discussion - player addictions can be done as their own versions, but I'm sure we walk away with a stronger program and game if we modularize everything and design it better.
that is very much -not- what you said. Sorry!

Looked at the addiction codes and looked back at the proposed pseudocode. Yeah, I would say these are similar enough to generalize the bases of all the addictions without sacrificing NPC addiction flexibility. I still think the Player shouldn't have the same addictions as the NPCs, but that wasn't the argument.

Sadly, I'm unsure on what to say about the pseudocode now that I have a general grasp on what it all does and how it might interact. It looks promising and DarkSinfulMage's suggestions sound helpful, but not personally sure on how to contribute here.

It does beg some questions though. If you add addictions and withdrawal effects to enemies, are you going to allow the enemies to have more interruption-style mid-daytime cutscenes with the Player to assuage the craving? Do you think the Player should be able to turn them down if the opponent chooses to come to them? If the Player gains this power, do you think the NPCs should too(defeating them too much might cause it, not helping them in an ambush when you have the option maybe, other quests or activities you might think of)? Should the addiction change how they move on the map during the night(Like, Eve hunts and Cassie retreats. I haven't actually checked that those stipulations do anything, but assuming they do)? If so, you may or may not need some more in there.
 
Last edited:

dndw

Well-Known Member
Aug 27, 2015
456
20
I agree that generalizing everything would make the code a lot cleaner, but on some point that ship has sailed long ago. Traits, for example, are so varied that to make them modular you'd need a thousand possible triggers and effects, and then check for those trigger pretty much every other line of code. Addictions are more confined, so it may be possible to overhaul the existing ones. Not sure how Reyka's will fit in, but the others should be doable.

@12centDime Having the NPCs approach the player during the day sounds great. It'd be a lot of writing, which, well... But it shouldn't be very difficult to fit in mechanically. Turning down NPCs and having them turn down the player seems like a good idea as well, for when their affection is low. Maybe you could even bargain with them; get your fix in exchange for some negative effect during the next night... Plenty of room to expand.
 

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
I agree that generalizing everything would make the code a lot cleaner, but on some point that ship has sailed long ago. Traits, for example, are so varied that to make them modular you'd need a thousand possible triggers and effects, and then check for those trigger pretty much every other line of code. Addictions are more confined, so it may be possible to overhaul the existing ones. Not sure how Reyka's will fit in, but the others should be doable.

I disagree - That's because of the existing variety of traits and the way they are processed. Assuming that two characters check for the effects of a used skill in the same way - you don't need to abstract method those - they can be coded in fewer places. Traits have grown to share functionality with character flags and effects. If we strictly enforce what flags and traits are for, then they can be streamlined. Yes, it's work.

Use skill -> Skill checks for traits -> resolve

I'll work on something myself to see if I can get the same range of functionality with cleaner code. Ideally, there should be a folder of trait files just like skills and characters and effects. You can work on them at the same level and they carry their own stuff with them for use.

@12centDime Having the NPCs approach the player during the day sounds great. It'd be a lot of writing, which, well... But it shouldn't be very difficult to fit in mechanically. Turning down NPCs and having them turn down the player seems like a good idea as well, for when their affection is low. Maybe you could even bargain with them; get your fix in exchange for some negative effect during the next night... Plenty of room to expand.

I'm not familiar enough with combatscene and other types, but I like the idea of getting a fix before combat? You know, like being approached before the challenge is given.

This also requires knowledge of the day-night cycle and battle setup - I haven't looked.
 

mddesigner

New Member
May 7, 2017
2
0
27
Hello ,
I tried to play the game , so I launched the terminal (mac ) then run the code : java -jar <file name .jar>
then I got this :
Could not find file data/clothing/defaults.json

java.io.FileNotFoundException: data/clothing/defaults.json (No such file or directory)

at java.io.FileInputStream.open0(Native Method)

at java.io.FileInputStream.open(FileInputStream.java:195)

at java.io.FileInputStream.<init>(FileInputStream.java:138)

at nightgames.Resources.ResourceLoader.getFileResourceAsStream(ResourceLoader.java:48)

at nightgames.Resources.ResourceLoader.getFileResourceAsStream(ResourceLoader.java:43)

at nightgames.items.clothing.Clothing.buildClothingTable(Clothing.java:32)

at nightgames.global.Global.<init>(Global.java:178)

at nightgames.global.Global.main(Global.java:1316)

Current active directory is /Users/maliohammad

java.lang.NullPointerException

at java.io.Reader.<init>(Reader.java:78)

at java.io.InputStreamReader.<init>(InputStreamReader.java:72)

at nightgames.items.clothing.Clothing.buildClothingTable(Clothing.java:32)

at nightgames.global.Global.<init>(Global.java:178)

at nightgames.global.Global.main(Global.java:1316)
any idea about this ?
thanks , and sorry for my first post to be like this (I found this forum just today ) :D
 

dndw

Well-Known Member
Aug 27, 2015
456
20
@mddesigner The game is complaining about not being able to find its data files. You probably
  1. Did not extract all files from the archive,
  2. Moved the jar away from the other files, or vice versa,
  3. Are not invoking the terminal command from the game directory (this should be a possible cause, but I'm not 100% sure since it's OSX), or
  4. Don't have read permission on the files. Which would be weird, unless you manually granted yourself permission to the jar and then run it through a proxy user or some such black magic.
 

mddesigner

New Member
May 7, 2017
2
0
27
@dndw thank you very much !
at first I just run the java code , without getting into the directory , so after using cd (folder path ) every thing worked fine
 

MotoKuchoma

Well-Known Member
Nov 3, 2015
288
59
I havent been in the loop since the update in the topic title, has there been any progress so far and what was done?
 

dndw

Well-Known Member
Aug 27, 2015
456
20
@MotoKuchoma This is the changelog for RC1:
dndw:

Major new features:
- Flexible Match system
This is mainly behind-the-scenes stuff. It's a major overhaul of the match system which will allow us to implement new match types much more easily. Of course, since I was the one who made it, it also completely broke everything. It's somewhat less broken by now, but still the main reason for the test release
- Team Matches
The first new match type using the new system!
- Players are grouped into teams of two or three.
- One of the team members is the captain. The captain moves around on the (reduced) map and leads during fights. The other(s) function like pets.
- Everyone on the winning team gets a point, not just the captain.
- Team matches have a 20% chance of triggering when the player is at least level 15.

Other new stuff:
- Tutorial
It's a lot like The Silver Bard's, but with different text. It also additionally covers the basics of transformative items. You'll be prompted to watch/play (there are minor choices) the tutorial when you start a new (non-advanced start) game. The tutorial offers no benefit whatsoever aside from information, so you're not mising out on free XP or something by skipping it.
- Focus Skills
Not Focus, that was already there. There are three new ones: Focus: Foreplay, Focus: Sex and Focus: Recovery. Each confers upon the player a 10-turn, unremovable status.
- Foreplay focus: Better at foreplay skills (anything which causes pleasure but isn't fucking), meaning you deal more pleasure but sustain less, does the opposite to fucking skills (and more strongly, at that) and reduces mojo gain.
- Sex focus: Basically the opposite of Foreplay focus, but more extreme in its modifiers and doesn't affect mojo.
- Recovery focus: Increases pleasure from all sources, and decreases all pleasure output. In return, it doubles mojo gain, halves mojo use, restores 10% of your maximum stamina per turn, and lowers arousal by 20% of max per turn.
Naturally, only one focus can be active at any one time. The AI is not particularly smart about these new skills yet, but it does know that the Sex focus is good when it's trying to fuck you.
- Added a variant of Drain Energy for the Oral Pin position. It's funny, because Drain Energy is actually Suck Neck, so Suck Neck can now be used from Oral Pin...
Bug fixes:
- NPCs now actually fight each other again. This got broken when the fight system (not the match system, it's different) got overhauled and no one noticed for months. Since then, they only got XP from fighting the player and through threesomes. Oops.
- You now get properly Flatfooted when ambushed in the dorm showers.
- Frottage is no longer usable from the Facesit position
- Embrace (Reyka's new position) no longer gets body parts mixed up when using a tail on the sub's pussy.
-

Logical Kink:

- Added a brand new Quest system. These are persistent challenges which remain across multiple matches. The actual effects are completely generic, so without further ado:
- Added the Buttslut Quest. If this is active, the other characters will try to make the player a, well, butt slut. There is no way to actually active the quest yet in-game, but you can add the "ButtslutQuesting" flag to your save file (all the way down at the bottom). In Logical Kink's own words:
If you win a fight, you get an attribute point depending on who you beat.
If you lose a fight by being assfucked, you gain a point for one of eight effects (each effect has a separate point count), depending on who beat you.
//Airi: increases ass size by floor(sqrt(points)), increases struggle difficulty when penetrated by 1.0*points
//Angel: Causes player to have a chance each turn to present ass to a visible cock equal to 0.05*points
//Cassie: Causes player to be enthralled on initial anal penetration for a number of turns equal to 1.0*points
//Eve: For a cock in the player's ass, the chance of fetish formation is increased by 5%*points, and any cock fetish magnitude increases while anally penetrated are increased by 0.01*points
//Jewel: increases the dominance of stances where the player is anally penetrated by 0.2*points
//Kat: Each turn while anally penetrated causes 3.0*points of your stats to turn into submissive (like corruption)
//Mara: Increases anal sensitivity by 0.25*points
//Reyka: Receiving cum in ass increases lust by 30*points
- Added some (HUGE) new victory scenes. These will be a bit tough to trigger, though. They require that the opponent (Cassie or Angel, so far) wins by fucking the player's pussy, not with a strapon, and that they have done so at least 10 times before.
- Added another, more easily accessible victory scene to Mara. She needs to have her level 10 class, and she needs to win by fucking you. It's almost the same conditions as the other two, but without the 10 prior wins.
- Added a new daytime scene for Cassie. You need to have over 10 points in Arcane, and Cassie needs at least double what you've got. She also needs a dick. Sensing a theme here? I am.
- Added the heatedsemen trait. It drains stamina when coming into contact with the opponent's skin.
- Made it possible to set the player's name, font size, default starting strength and weakness, and XP rate in custom starts.
- Made the font size in skill buttons scale along with everything else
- Made Shamed not removed on orgasm (not sure how I feel about this one...)
- Added a new variation to the Behind Footjob position, which adds assfucking to the mix.
- New skill: Growl. It unlocks at 15 Animism, and can only be used against players afflicted with Kat's Breeder addiction. It maneuvers the combatants so Kat can initiate sex soon after. It's geared towards Kat having a dick and fucking the player, but it works the other way around as well.
- New skill: Kneel. It only transitions to the Kneeling stance. You get it at 10 points in Submissive.
- New skill: Offer Ass. I'll let you guess what it does. You need 10 points in Submissive and a pussy (that last bit is probably a bug).
- Some new fetish stuff:
- The fetishCharmer trait gives a character a chance of inflicting the Charmed status when increasing a fetish.
- The new Manipulate Fetish skill allows one to exploit a powerful fetish in one's opponent. It will cause Enthralled, but also lowers the fetish magnitude by a full point. You need 25+ of the Fetish attribute, and whatever body part your opponent happens to be craving.
- Fixed some text issues
- Added a bunch of futa-related images.

witchlook:

- Prevented one of Jewel's defeat scenes blocking another. They now have a 50/50 chance of being displayed.
- Genderized some of the random comments, also some small fixes
- Genderized match modifiers
- Actually, genderized lots of stuff
- Typo corrections
- Cleaned up some code

Add to that approximately 1.32 shittons of bugs. Then for RC2, just half the bug count. The third version SacredFerro uploaded contains two extra starts, one of which is unstable and the other unreasonably difficult.
 

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
Been working on code ideas to clean up or extend nightgames and ended up re-engineering the whole game out of some older engine I wrote. Took about 2 weeks.
You can currently navigate the daytime and nighttime map AND cycle correctly between day and night. Combat structure and mechanics aren't in yet but it's coming along.
Everything being constructed of screens/scenes really does clean up the narrative. Implementing features from nightgamesmod in my own engine is pretty fun because it's not straightforward and copying it outright doesn't work because it's very different. The daytime runs on the same stuff as the nighttime, so you have two equal parts of the day game and strategy wise if you truly wanted. Inline scenes are gone - everything is scenes, so both transitions and additions and packaging of them save a lot of space and make them much MUCH easier to make without invading different classes.

Pretty proud of myself, right now. I haven't programmed this much since lewdchaos.

As for the mod - provided I can add XML save support, I'd like to suggest we rewrite Characters and Scenes so that characters carry their own defined common set of shit with them in completion, with abstract methods so they can just implement things themselves. (Part of this is that the girls have definitely evolved past the original feature set, so the question of "What is a Character?" has grown out of control) I've not written individual scenes for my test character, but all the functional lines are similarly abstract as it is here, but I think eventually I will be able to have both implementation and content separated and packaged, making it way easier to make a character and not touch all sorts of files to implement their features. The same goes for skills, flags, and traits. There's also greater support for some things I like about the mod. :D

It's not gonna be easy to tear it down to rebuild it.
 
Last edited:
  • Like
Reactions: kuschelpuh

dndw

Well-Known Member
Aug 27, 2015
456
20
Wow, that certainly sounds intriguing. I'd love to have a look, if that's possible. It's quite obvious that the code really needed some cleaning (the 'engine' was, I believe, designed and written by a first-year CS student, and it shows), and as scary as a total conversion sounds, that might well be the only way to tackle it. It sounds like your setup is very modular, which would also be great.

Not much I can say on a technical level at this point, other than that as long as the data model hasn't changed too much the save conversion should be pretty easy. I'm sure there are dozens of JSON<->Xml conversion libraries. Just don't use IBM's JSONx. That stuff is so horrendously ugly I'm pretty sure any decent virus scanner would delete it and then overwrite the space 32 times for good measure.
 

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
The key is in how you use things extended via Scene. It's an abstract class, meaning that you will need to create scenes that play(), but the power in that is as so:

Scenes can play scenes.
Every screen in the game is a scene.
Scenes load their own buttons and options (OR you can define them yourself!).
Areas in the game are scenes that have their own information.
Traveling through areas is just traveling through scenes.
Moving things around is just a matter of processing each area, which are ALL SCENES.

There is tremendous narrative and programmatic power in doing it this way.

The way it's done in my version is:

Scene -> NightArea and Daytime Scenes (easily replaceable with Daytime Scenes so you can have a daytime map). When a scene changes another scene is called.T

1. The nightgame map gets set up and tokens placed. The timer starts. you play until it counts down. Every area checks the countdown before playing out or continuing the game. Each area finds moves/makes buttons based on the same method and state of the tokens in the area.
2. An outro is played, the scene has a button that takes you to the daytime. the same process happens. various things take various time. Countdown to night.
3. Night's intro scene is played. Map is set up, Intro places the player and then plays the NightArea's scene where the player token was place. Play from there and repeat.

HOW we could get this to work in nightgamesmod:

It'd be a whole new game...If I were to apply what I got here to nightgamesmod, I would do a few things:

- Much better use of OOP - through OOP you can leverage Serializable to export and import them. AI strategies, Effects, Traits, Skills - all of em carry their work with them by themselves.
- Restructure the GUI and programflow into different instances of scenes.
- Characters and Skills carry their own data and implementations with them. Combat should just be two characters using skills on each other - everything is resolved inside the onUse() of the skill used instead of diving into the classes of other mechanics.
- Strongly define various mechanics and types - Characters have a well-define set of features common to all to be implemented or skipped.

If this is okay to be done - there's a few steps to be done in this process:

1. JavaDoc pass on all abstract classes.
2. Redesign of Program Flow, redesign of where data will be and how it's saved and loaded. Save that for later.
3. Replace many bits and pieces with Objects. (Status effects easy target.)
4. After consolidating Status effects, traits, and Skills, start working on program flow.
 
Last edited:

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
The following is the ADT layout for various classes I wrote that will clean up several sprawling parts of nightgames:

By converting all these bits and pieces into status effects and storing them in each character, this is made much easier to access, evaluate, and customize:

Each one has Individual effects inherited, but can adhere strictly or not to types.

StatusEffect would eliminate a lot of sprawl in how statuses are made, built, and processed.

Code:
public abstract class StatusEffect {
protected String m_Name;
   protected String m_Description;
   protected String m_Cause;
   protected int m_TurnsRemaining;
   protected int m_Magnitude;
   protected boolean m_IsStackable;
   protected boolean m_StackCount;
 
   public enum StatusType{
               AttributeBuff, AttributeDebuff,
               Exhausted, Stunned, Unconscious,
               StanceFire, StanceWater, StanceWind, StanceStone, StanceVoid,
               Alluring, Protected, Shielded,
               Enthralled, Horny, Frenzied, Tranced
   }
   protected StatusType St_Type;
 
   abstract public void check_Start();
   abstract public void sayEffectStart();
   abstract public void doEffectStart();
 
   abstract public void check_Continue();
   abstract public void sayEffectContinuing();
   abstract public void doEffectContinue();
 
   abstract public void check_End();
   abstract public void sayEffectEnd();
   abstract public void doEffectEnd();

}

I'm in the process of working on GameAI, which will be self-contained in each Character.

This is not complete, but this is what I have so far given what the game requires:
Code:
public class GameAI {

   protected String m_Name;
   protected String m_Description;
   public enum Character_Mood {
       NONE,                //default mood.
       confident,            //Will attack.
       dominant,            //Will humiliate.
       sad,                //Will be submissive and not attack.
       angry,                //Will be reckless and not consider risks
       scared,            //Not attacking, will avoid anything.
       nervous,            //increased chance of waiting.
       desperate,            //Will take great risks
       horny               //??? 
   }

   public Strategy m_MainStrategy;
   public Strategy m_BackupStrategy;
      
   //MAP RELATED
   public void decide_Destination(){}
 
   /***/
   public void decide_Movement(){
 
}
 
   //DAYTIME RELATED
   public void decide_Purchase(){}
   public void purchase(Character Self, Item I){   Self.getM_Inventory().add(I);   System.out.println("DEBUG: " + Self.m_Name + " just bought a " + I.getM_Name()); }
 
 
   //COMBAT RELATED
   public void decide_Skill(){}
   public void parse_Possible_Skills(){}

   public void update_Mood(){
     
   }


Here's a question:

How closely related are Stances and Effects in Nightgames in terms of fucntionality? My implementation right now is that every character has a CurrentStance, but functionally these could be combined as some Stances are temporary (Like effects) and may stack.

Just a reminder: A few pages back I submitted some alternate descriptions for characters - still would like those implemented. :D
 

kuschelpuh

Member
Mar 23, 2017
17
1
33
to "facefuck" you need
15 points or more in fetish
you need a dick or strapon
you need to be naked (bottom)
not inserted, not behind, need to stand in a stance that is flagged as in front, also in a dominant stance. Also not bound/winded/stunned or whatever

public FaceFuck(Character self) {
super("Face Fuck", self);
}

@Override
public boolean requirements(Combat c, Character user, Character target) {
return user.get(Attribute.Fetish) >= 15;
}

@Override
public boolean usable(Combat c, Character target) {
return getSelf().canAct() && c.getStance().dom(getSelf()) && c.getStance().prone(target)
&& (getSelf().crotchAvailable() && getSelf().hasDick() || getSelf().has(Trait.strapped))
&& !c.getStance().inserted(getSelf()) && c.getStance().front(getSelf())
&& !c.getStance().behind(target);
 

dndw

Well-Known Member
Aug 27, 2015
456
20
There's not much I can say about that bit of code other than that I'm interested to see where it goes. Please try to use the regular Java naming conventions, though. And be consistent: I count three different naming schemes just in those snippets.

About stances and effects, do you mean you want to make stances into a sort of status effects? I suppose that would be possible, but I don't really see the benefit. There is always a stance, so you might as well keep a seperate reference to it. (While you're at it, maybe you can see if you can add in support for multiple simultaneous positions for use with pets?)
 

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
There's not much I can say about that bit of code other than that I'm interested to see where it goes. Please try to use the regular Java naming conventions, though. And be consistent: I count three different naming schemes just in those snippets.

About stances and effects, do you mean you want to make stances into a sort of status effects? I suppose that would be possible, but I don't really see the benefit. There is always a stance, so you might as well keep a seperate reference to it. (While you're at it, maybe you can see if you can add in support for multiple simultaneous positions for use with pets?)

I guess we all have our little messes! hah! You're right about styles - I'll get rid of the underscored methods. I really don't need to that with the thisThat convention. Most of those are easy to rename via refactor.

I was thinking about it- there's always a currentStance as far as the game's concerned, but it's strange - how does CowGirlReverse relate or stack with Fire Stance? If you allow multiple stances you have to create a method of rooting out and starting, continuing, and ending stances WHILE making sure the options to the play make sense. That's a lot of work and not much added gameplay.

What would be nice with pets right now would be if they better understood the options available to them and their summoner. The problem is that they act somewhat randomly and without any coordination from the summoner. Either you make pets that are to be ordered around using an action (which is really bad for action economy) or not.

That's a game design decision, and I'd say that Pets should act randomly but with fairly predicable actions given the state of the enemy.

In my game - I can support pets in the scheme of they may go at some point during a combatant's turn, but if the pets were to be part of combat as they are in NGMod, I'd need to support multiple combatants for each side, each going at different points in the turn order and capable of interrupting each other's actions when everyone chooses what to do at the round start. It's a big mess and really fucks with the action economy of the game.

Right now in NGMod, you basically take up to 6 turns during a round by choosing one choice and rely on random things to happen. Pets don't always sense what you wish to do or avoid doing in combat. As well, they are too simple to kill (NG) or they are extra characters in a team fight in their own right (NGMod)/ In the meantime, you have both autonomous parts as well as extra benefits from Traits like Raw Sexuality, Addictions from combatants not even present in the fight, Fetishes that have developed that night, and many sources of arousal and damage.

Honestly, I think we should do some some strawpolls about how some things should work and where the biggest gameplay and mechanical problems/priorities are. There's been a lot of discussion but time and resources are clearly thin. We just want a good mod of the game, but ambitious goals of a REALLY good game mean a rewrite or a TC, which we are certainly capable of but not 100% agreed about.

By the way; I'm finally on github - is it better to fork from dndw or nergantre?
 
Last edited:

Milkman

Well-Known Member
Aug 28, 2015
730
324
to "facefuck" you need
15 points or more in fetish
you need a dick or strapon
you need to be naked (bottom)
not inserted, not behind, need to stand in a stance that is flagged as in front, also in a dominant stance. Also not bound/winded/stunned or whatever

public FaceFuck(Character self) {
super("Face Fuck", self);
}

@Override
public boolean requirements(Combat c, Character user, Character target) {
return user.get(Attribute.Fetish) >= 15;
}

@Override
public boolean usable(Combat c, Character target) {
return getSelf().canAct() && c.getStance().dom(getSelf()) && c.getStance().prone(target)
&& (getSelf().crotchAvailable() && getSelf().hasDick() || getSelf().has(Trait.strapped))
&& !c.getStance().inserted(getSelf()) && c.getStance().front(getSelf())
&& !c.getStance().behind(target);


Ah hey thanks hehe I sorta figured it out shortly after posting hence why I deleted the original comment but the details you've provided about the specifics have been quite insightful actually.
 

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
Began Commentary and Javadoc work on Character.
What a headache.
Targets for me are Character, Global, Combat, Trait, and whatever else I find time for.

Did a test commit and push - added my own alternate descriptions from before. Hope that matching the way it's done for Angel works.

Check me at:
https://github.com/DarkSinfulMage/nightgamesmod
 
Last edited:

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
I discovered this one while playing with Reyka's double hard choices. It's a nullpointerexception that happens when you exit a battle, walk around and map and other combats are resolving. Took a LOT of loops through tick() for it to happen - presumably Rekya must have gotten Jewel addicted...

Marked it on my branch but tracing it is hard since my brain is very soupy today due to RL.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at nightgames.status.addiction.Addiction.tick(Addiction.java:56)
at nightgames.characters.Character.lambda$9(Character.java:1368)
at java.util.ArrayList.forEach(Unknown Source)
at nightgames.characters.Character.tick(Character.java:1368)
at nightgames.characters.Character.upkeep(Character.java:2781)
at nightgames.characters.NPC.upkeep(NPC.java:936)
at nightgames.match.Match.round(Match.java:219)
at nightgames.match.Match.resume(Match.java:443)
at nightgames.gui.ActionButton.lambda$0(ActionButton.java:18)
at nightgames.gui.RunnableButton.lambda$0(RunnableButton.java:15)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

BTW: No leveldrain messages for Maya, Kat, Samantha, Eve, or Rosea. Any guidance on these characters? Want me to try to add their messages?
 

nox bellua

Well-Known Member
May 23, 2016
104
75
I really like this mod but I am barely able to make it through a match as the mod ends up locking up throughout the match. Is there a specific reason my game might be locking up? Other than that I find the game enjoyable albeit quite buggy but I guess I can start listing the bugs as they arise.
 

DarkSinfulMage

Well-Known Member
Nov 18, 2016
253
44
42
I really like this mod but I am barely able to make it through a match as the mod ends up locking up throughout the match. Is there a specific reason my game might be locking up? Other than that I find the game enjoyable albeit quite buggy but I guess I can start listing the bugs as they arise.

@nox bellua
It's likely that one of the girls' addictions are causing your error. It can happen as any fight on the map is occurring. I flagged it on my fork but haven't had time to hunt it down.

In other news, I'm working on my own combat loop but discovered that controlling the flow in combat requires something special. NGMod uses listeners as part of the Next Button system, but after pouring over the options tonight I'm wondering if reverse engineering this is a good idea.

Currently, my own combat loop lacks controls because there's no simple "wait for input" as I make buttons and place them on the screen.

If I can somehow implement these listeners to "wait" for input before continuing down the code by myself, I'd have solved something I was trying to find for years and I'd have a super powerful tool.

I'd need something akin to a linear or loop condition version of :

displaytextline();
displaytextline();
displaytextline();
listenforinput();
displaytextline();
displaytextline();
displaytextline();
 
Last edited:
  • Like
Reactions: nox bellua

nox bellua

Well-Known Member
May 23, 2016
104
75
@DarkSinfulMage That makes sense because it seems like the game freezes as I am making a choice to move rooms. I have also had the game slow down from moving so it seems possible that me moving while the addiction is triggered is causing some sort of conflict. I wonder what could cause the error to arise in the coding.