Final Fixes Reborn

Very nice descriptions of the future gameplay of guilds.
For the units, I need to see it in action, but it sounds cool.

One thing I would like to see also are improvements to the pathetic AI. Is there a possibility to add 'Better Naval AI' also, the AI is clueless with ships and will do even less with them than with land units.
 
I've already started to merge some parts of MNAI, mainly the magical stuff at the moment. I'll finish that and move on to the naval when i get some time. If you see specific behaviors that are causing issues ( like the project thing you mentioned or the elf start), mention them.

As for the tier 4 units, the Good and Evil ones are mirror of each others. Disciple units that also servess as the toughest melee units in the normal roster. The Disciple part gives access to Medic, and they have bonuses against the opposite alignment.

For chaotic, the berserker is a purely offensive melee unit that's **** at defending, but is the only melee unit with collateral damage. I'm feeling a Polearm unit with defensive striked as its opposite. I'm more at doubt for both the neutral units.
 
I've already started to merge some parts of MNAI, mainly the magical stuff at the moment. I'll finish that and move on to the naval when i get some time. If you see specific behaviors that are causing issues ( like the project thing you mentioned or the elf start), mention them.

As for the tier 4 units, the Good and Evil ones are mirror of each others. Disciple units that also servess as the toughest melee units in the normal roster. The Disciple part gives access to Medic, and they have bonuses against the opposite alignment.

For chaotic, the berserker is a purely offensive melee unit that's **** at defending, but is the only melee unit with collateral damage. I'm feeling a Polearm unit with defensive striked as its opposite. I'm more at doubt for both the neutral units.

I would think it would be easiest to keep the Druid as the Neutral unit on the Good/Evil axis and then come up with something for the Neutral unit on the Lawful/Chaotic axis, although I'm not sure offhand what that would be.

From my long-ago D&D playing days I remember that Monks had to be Lawful, but if you made the Lawful Tier 4 unit a Monk, that would be yet another Disciple unit, plus you'd have to give the Elohim something new to replace that. I think a defensive Melee unit, such as you suggest, might work, balancing the offensive Berserker; if it's going to be a Polearm unit, then maybe call it a Halberdier, and obviously differentiate it from the regular Tier 4 polearm unit, the Phalanx.

For a Neutral (on the Law/Chaos axis) Tier 4 unit, do you want yet another Melee unit? If so, you could consider bringing back the old Shield Wall that we had in early versions of FfH. Or maybe something rather different would be better, just as Druids are quite different from both Paladins and Eidolons.
 
I would think it would be easiest to keep the Druid as the Neutral unit on the Good/Evil axis and then come up with something for the Neutral unit on the Lawful/Chaotic axis, although I'm not sure offhand what that would be.

From my long-ago D&D playing days I remember that Monks had to be Lawful, but if you made the Lawful Tier 4 unit a Monk, that would be yet another Disciple unit, plus you'd have to give the Elohim something new to replace that. I think a defensive Melee unit, such as you suggest, might work, balancing the offensive Berserker; if it's going to be a Polearm unit, then maybe call it a Halberdier, and obviously differentiate it from the regular Tier 4 polearm unit, the Phalanx.

For a Neutral (on the Law/Chaos axis) Tier 4 unit, do you want yet another Melee unit? If so, you could consider bringing back the old Shield Wall that we had in early versions of FfH. Or maybe something rather different would be better, just as Druids are quite different from both Paladins and Eidolons.
What bothers me with druids is that we have at least six civilizations with druids unique units that are alignment free. It matches reasonable well with civilizations that do not have access to normal magic (dwarves, archos, orcs,...) and it feels reasonable to see that unit as the final upgrade to a shaman unitline.

As for the default druid, it's really a sucellus-aligned unit, so seeing it as neutral is already problematic.

That's the general reasoning to move it from the Alignment slot.

For the rest, i'm really tempted to get the Polearm unit for the Lawful alignment. Halberdier could be a good name.

it'd be good to keep the disciple part for the neutral, and probably do something different for the ethical neutral.
So i'd say Arcane/Disciple for one ( Theurgist ? ) and Rogue or Cavalry for the other ?
 
For chaotic, the berserker is a purely offensive melee unit that's **** at defending, but is the only melee unit with collateral damage. I'm feeling a Polearm unit with defensive striked as its opposite. I'm more at doubt for both the neutral units.
What about guardsman. Like maybe you could even go all out and give it that spell the mechanos have to instantly dig the stack in. But that may be too powerful.
 
Sorry about the delay on this. Still mired in Harvey. This is the save that predictably loses the interface (just did it again to be sure).

* Game loads with interface
* Interestingly, you need to move units around. If you just end turn, UI is retained. If you do move stuff around (doesn't seem to matter what, and there are only about 4 things to do), then end turn, ...
* CRASH
* Reload, no interface.

HTH.
 

Attachments

Sorry, one more thing: once the interface goes away, I've only been able to get it back by unloading the mod, restarting the game, PLAYNOW in vanilla, reload mod. Just PLAYNOW in mod doesn't change anything.
 
Have gotten this 3 times in previous 4 turns on new game (on turn 26, total). The "double option" event is turned on.

upload_2017-9-9_11-50-9.png
 
If you did it honestly, yes. But you don't have to be honest. I assume that the game uses a RNG to draw events from a stack, kind of like rolling off a random table in D&D. So you'll end up with a function that looks like this:

Code:
function for events()
{
     eventID = random.next();
     display event to player (eventID);
}

What you can do to cheat that a bit is have an external variable, or array of say 3-4 elements which stores the last 3-4 ID's and than check against that when drawing. So you'd get something like:


Code:
int oldIDs[4];

function for events()
{
      eventID = random.next();
      while(oldIDs contains eventID)
      {
            eventID = random.next();
      }
/*
      The while loop basically makes sure you draw until you
      hit a brand new one no matter how long that takes.
*/

      oldIDs[0] = oldIDs[1]
      oldIDs[1] = oldIDs[2]
      oldIDs[2] = oldIDs[3]
      oldIDs[3] = eventID;

/*
      This bit shifts ALL of the event IDs back by one, erasing the
      oldest one in the process and than pastes the new ID at the far end of the array.
*/

      display event to player (eventID);

That's a quick and dirty way to make sure random numbers don't repeat them self all too often. Assuming of course that you have access to the function in question.

You'll still get into trouble with large maps and large number of players experiencing multiple events each per turn. But you can fix that by messing with the size of the memory array. Or if you feel like being really sneaky just adding a check so that the conditional only applies to events cast on the player and ignores the AI since players don't really care and probably won't even notice if such odd strings of events happen to an AI across the map.
 
Last edited:
That's a possibility, yes. The good way of doing it is to add more event with next to no prereqs to increase the starting pool ^^Note that those two aren't incompatible. I'll see what i can do.
 
And a third way can be to add a flag to the event class/struct that remembers when it was last triggered, for which player (or both) and do a check against that. So you have something like: If( event[eventID].lastTriggered - current turn > limit) trigger();

The possibilities are countless. Also, I know this sounds odd to you guys but just writing a bit of suggestion code like that feels really refreshing to me. Like, it reminds me of why I became a programmer in the first place. The fun of just throwing ideas off the top of my head and coding them to fix a problem that came out of left field. I really need to finish up more units so I can start work on that big project I've been meaning to do.
 
that third way ain't possible, events don't have a dynamic class, just the data from the xml ^^

Welcome back to fun coding ^^
So wait, the program reads directly from the XML on the fly as opposed to loading it all into memory and creating a class representation of in a list somewhere? I would have expected there to be a reader->parser->event class-> list of events style arrangement.
 
If I wanted to create a bunch of these for you to pick and choose from, what data would you need for each?
At the minimum, initial text and prereq of the event, options with text, prereqs and effects. Ideally, the xml for the eventtrigger and the events.

So wait, the program reads directly from the XML on the fly as opposed to loading it all into memory and creating a class representation of in a list somewhere? I would have expected there to be a reader->parser->event class-> list of events style arrangement.
It is loaded in memory, but everything that's in xml is loaded in static Info classes that can not be modified after load, just accessed.
 
Back
Top Bottom