another one IVAN fork

Yesterday, 8:05 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
red_kangaroo wrote
If you've ported the shield changes from vanilla, it's actually rather fun going full turtle, since shields now give AV to all body parts, in addition to their block chance.

wow. thank you for pointing that! i haven't compared the whole code yet (it is HUGE! , only took the parts related to new items, characters and magic effects. so i'll take a look now!

i thought about doing something with shields myself. there is the thread here, where you proposing several changes, including adding shield bashing. that is something i am thinking about too.

currently (no changes to shields yet), i tried to go with a light shield and a short sword, and… meh. throwed the shield into some kobold soon enough, and picked up the second sword.

red_kangaroo wrote
It doesn't work well in end-game (crits and magic everywhere), but early to mid game can be quite successfully turtled with a good heavy armour and shield.

tbh, i never ever reached Oree without wiz mode. this prolly has something to do with my preferred playstyle: i HAET pets and praying! i am starting to think that the game should take a note that the player never prayed to anyone despite seeing altars and reading the books (or maybe forbid reading books too), and never tamed anyone, and spawn some better gears and stat raising fluids in this case. it should be subtle, and nothing in the game should hint at it, but it would be fun hidden mechanics, i believe. and maybe will give me a chance (still no, because of danger level .
Yesterday, 9:15 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
hm. i checked it, and the shield code is exactly the same in k8ivan as in comm. fork (ok, let's call it "vanilla" from now on, because this is The Definitive Edition now .

i mean, i checked all places where `IsShield()` is checked.
Yesterday, 11:29 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
implemented the dialog with Aslona emissary, so it is now possible to properly start the quest.

also, having the stupid encrypted scroll with you after accepting the quest doesn't seem right to me. so the player now asks the emissary if he can read what is written in the scroll, and the emissary takes the scroll away, promising to send it to Aslona wizard to decipher. this way the player will know for sure that Petrus' quest is no more.

now i have to implement "not on the same continent" flag for POIs.
Today, 12:00 am
Joined: Dec 3, 2007
Occupation: Chaos Weaver
Location: Standing between all life and death
Posts: 2,900
vasiliy wrote
but i'm more about making various "end game routes" mutually exclusive, because OP player will prolly wipe the floor with Oree and his minions, for example. it might be fun to show everybody who's The Boss, of course, but… i don't feel like it plays good with "the spirit of IVAN". also, this adds some strategy too: should i go for Elpuri and Petrus? or help Aslona officials? or rebels? or became a wizard? choosing one of those should close other routes. at least that's how i envision the game.

red_kangaroo wrote
Yup, that's the way it works in vanilla and I think it works well. Getting the loot from several dungeons quickly makes the player way too powerful. CLIVAN had this problems and it's also the only variant where I killed Oree.

This was previously discussed in various places. I don't know if it was actually implemented (since I haven't played any IVAN in years) but the solution was to enable only a single dungeon per game. You could also lock the magic-learning behind the generation of Ischaldirh's dungeon, if you go that route.
Uchuudonge wrote
creating stable chaos
making patterns where there should be none
sewing order into the chaos
you spit in the face of random numbers, of chaos
Today, 12:20 am
Joined: Sep 3, 2024
Occupation: Childcare Provider
Location: Victoria, British Columbia
Interests: Retro gaming, retro computers, TTRPGS, painting and crafting miniatures and terrain, wargames
Posts: 14
I just noticed that typing G and pushing a direction only moves me one square.
Today, 3:07 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
Yancakes wrote
I just noticed that typing G and pushing a direction only moves me one square.

movement aborts when there is a dangerous square nearby, or some unseen item/door, or a monster. some of that could be changed in options. check if there are nothing like that around. dangerous squares incluedes vomit, broken bottles, banana peels and such.
Today, 3:18 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
chaostrom wrote
This was previously discussed in various places. I don't know if it was actually implemented (since I haven't played any IVAN in years) but the solution was to enable only a single dungeon per game. You could also lock the magic-learning behind the generation of Ischaldirh's dungeon, if you go that route.

at least in k8ivan, GC can be found by just wandering around the map. but other quest dungeons only placed on the map by the respective quest giver, and most of them will take away the encrypted scroll. and you either require a scroll, or you should not start another quest to… well, take a quest.

so you still can go and slay Oree and Elpuri while being overpowered (and Petrus, because Attnam is here too), but you can only take one alternate quest.

if i'll add a wizard quest in Aslona, this will prolly require some way to block other Aslona "activities". maybe some kind of "wizard academy" or such, surrounded by impassable mountains and magic force field, so you won't be able to escape. so your only way will be to train yourself and face Izzy.
Today, 3:48 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 786
vasiliy wrote
hm. i checked it, and the shield code is exactly the same in k8ivan as in comm. fork (ok, let's call it "vanilla" from now on, because this is The Definitive Edition now .

i mean, i checked all places where `IsShield()` is checked.

Here it is: https://github.com/Attnam/ivan/blob/master/Main/Source/human...

SPOILER ALERT. Click here to see text.
int humanoid::GetGlobalResistance(int Type) const
{
  int Resistance = GetResistance(Type);

  if(GetCloak())
    Resistance += GetCloak()->GetResistance(Type);

  if(GetRightWielded())
  {
    if(GetRightWielded()->IsShield(this))
      Resistance += GetRightWielded()->GetResistance(Type);
  }

  if(GetLeftWielded())
  {
    if(GetLeftWielded()->IsShield(this))
      Resistance += GetLeftWielded()->GetResistance(Type);
  }

  if(!(Type & PHYSICAL_DAMAGE))
  {
    if(GetAmulet())
      Resistance += GetAmulet()->GetResistance(Type);

    if(GetRightRing())
      Resistance += GetRightRing()->GetResistance(Type);

    if(GetLeftRing())
      Resistance += GetLeftRing()->GetResistance(Type);
  }

  return Resistance;
}
Today, 3:49 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 786
vasiliy wrote
implemented the dialog with Aslona emissary, so it is now possible to properly start the quest.

also, having the stupid encrypted scroll with you after accepting the quest doesn't seem right to me. so the player now asks the emissary if he can read what is written in the scroll, and the emissary takes the scroll away, promising to send it to Aslona wizard to decipher. this way the player will know for sure that Petrus' quest is no more.

now i have to implement "not on the same continent" flag for POIs.

In vanilla, you first have to talk to Petrus (who takes your scroll away) before you can talk to the emissary. Or to the necromancer, for that matter.

Basically you give the scroll to Petrus, thus ending the "give scroll to Petrus" quest, and only then can you choose your following quest: GC/Aslona/Tomb.
Today, 3:51 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 786
chaostrom wrote
This was previously discussed in various places. I don't know if it was actually implemented (since I haven't played any IVAN in years) but the solution was to enable only a single dungeon per game. You could also lock the magic-learning behind the generation of Ischaldirh's dungeon, if you go that route.

Yeah, you can only choose one quest/dungeon in vanilla and all the others become unavailable.
Today, 7:45 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
@red_kangaroo, wow! somehow i missed that part. thank you!

i ported most new dungeons now, and they seem to work. at least they don't crash the game outright, i consider this "working state".

in k8ivan, you have to give the scroll either to the necromancer, or to Petrus. (or to the emissary now.) i like it more this way. and the emissary will give the quest only of you haven't talked to Petrus yet. my idea is that there is That Main Quest most people will follow, but for those who are willing to explore Attnam first, there is a bonus (necromancer's quest). also, the player will prolly meet the emissary on his way to Petrus, and Aslona quest is a bonus for those who like to talk with people.

that is, i prefer the game to have more "hidden content". the player have to do something unusual (well… "something unusual" is IVAN motto anyway to find that the game is bigger than he thought. if i'll ever write "dungeon editor tool", i will prolly sneak more hidden quests in the same manner.
Today, 8:28 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
added new shield code, and the game immediately spawned the zombie with broken meteoritic steel acid shield on UT1. now tell me again that the game is not sentient!
Today, 10:58 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
by the way: Kaethos has 75% probability of science talk. and `BeTalkedTo()` is called only when science talk failed. as the player should came to liberate New Attnam with relatively high stats, it is quite hard to get the quest from him.

i believe that `BeTalkedTo()` should not be used for quests, healing, etc. we need a new method, like `truth QuestTalk()`, which will be called before trying a scitalk. currently this is workarounded with a hack: all quest NPCs have very low (or zero) scitalk probability — except Kaethos.

for now i lowered his scitalk probability to 25, but i don't like this solution at all.
Today, 10:42 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
also, Goblin Fort level generation often fails. it struggles to put living quarters, and sometimes even forge room. for now i workarouned it by increasing level sizes a little — the crashes are still there, but they are less frequent. i also added `FailureIsNotFailure` flag to room definitions (creative name, i know), which indicates that failing to place this room should not lead to ABORT. this flag leaks memory, of course, and is prone to crashes itself, but meh… (it mostly works for rooms without monsters, and with little objects… and it works only sometimes.)

i know what exactly IVAN struggles to place because k8ivan records source file and line for all scripts, and prints which room script failed. the better solution would be something akin to worldmap generation: abandon current efforts, and start over, but i don't know how to properly implement that. i can throw exception instead of aborting, but at this time the level is in "half-backed" state, and i have absolutely no idea how to clean up the things.

i mean, ok, we can leave half-generated map alone and accept memory leaks (better than sudden crashes), yet at this stage we already have some entities created and registered in the game, without a way to properly unwind what we've done. at least i don't know the way.

saving and reloading the game (as an easy rewinding solution) is problematic too: at the time level generator is called, we are deep inside command handler, and have various pointers to objects lying around. they all will be invalidated on reload, leading to memory corruption and crashes.

if i'll ever find a way to properly unwind everything, this will not only make the game more stable, but will allow to better dungeon scripts testing. if we could rewind (or stop cleanly with half-generated level), we could show what the game already have (i.e. put the player there). so you'll be able to see how cramped the level is, what was generated so far, and so on. i believe that this will help with dungeon tweaking a lot.
Today, 10:52 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 159
and two screenshots, to make the thread less boring.

the first is "world teleport" wizard command, which will automatically teleport the player to the given worldmap location, revealing it if necessary. hidden locations are marked with orange.

and the second in improved IGOR — it allows moving things around, copy-pasting tiles, and even rudimentary tile editing (as shown on the screenshot).
Jump to