another one IVAN fork

Jan 19, 8:05 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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 .
Jan 19, 9:15 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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.
Jan 19, 11:29 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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.
Yesterday, 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
Yesterday, 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.
Yesterday, 3:07 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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.
Yesterday, 3:18 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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.
Yesterday, 3:48 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 788
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;
}
Yesterday, 3:49 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 788
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.
Yesterday, 3:51 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 788
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.
Yesterday, 7:45 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
@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.
Yesterday, 8:28 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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!
Yesterday, 10:58 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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.
Yesterday, 10:42 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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.
Yesterday, 10:52 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
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).
Today, 1:23 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
i cannot stop thinking that the shields are overpowered with that change. like, i was fighting Jenny with oak shield, and she barely scratches me. she managed to hit me quite hard once, but most of the time she was harmless. i will prolly nerf the physical protection with `/2` at least. because with my current stats my physical resistense is 2, and shiled has 3, so i get 5. way too much. with `/2` the new total is `3`, which looks way more reasonable for me.
Today, 3:25 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 788
vasiliy wrote
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.

This doesn't happen in vanilla, but I think it has the "abandon and try again on failed dungeon generation" implemented. maybe try to steal the code from there?

See here: https://github.com/Attnam/ivan/pull/597
Today, 3:28 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 788
vasiliy wrote
i cannot stop thinking that the shields are overpowered with that change. like, i was fighting Jenny with oak shield, and she barely scratches me. she managed to hit me quite hard once, but most of the time she was harmless. i will prolly nerf the physical protection with `/2` at least. because with my current stats my physical resistense is 2, and shiled has 3, so i get 5. way too much. with `/2` the new total is `3`, which looks way more reasonable for me.

They are great in the early game, but fall off quickly afterwards. I think they are fine, because otherwise everyone will default to the "two attacks per round via dual-wielding" setup.
Today, 4:32 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
red_kangaroo wrote
This doesn't happen in vanilla, but I think it has the "abandon and try again on failed dungeon generation" implemented. maybe try to steal the code from there?

See here: https://github.com/Attnam/ivan/pull/597
wow! thank you, i'll take a look. if Aquarius managed to untangle that code, i will definitely steal it!


red_kangaroo wrote
They are great in the early game, but fall off quickly afterwards. I think they are fine, because otherwise everyone will default to the "two attacks per round via dual-wielding" setup.
dunno, this may be the personal preference, but i feel that they are overpowered exactly in early game. no, really, i don't think that i could be sitting besides Jenny smoking a cigar and watching her hopeless attempts to bite me.

new shields will make people default to "shield and short sword" most of the time this way, because why choose something else? you're almost invincible with a shield in UT. ok, hedgehogs still bite, but…

dunno, i will prolly leave shields nerfed in k8ivan. that's why we have forks, after all — to allow everybody realise their visions!
Today, 4:46 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
oh. that commit is about generating bad items, actually. but there are changes in `level::MakeRoom()` — it doesn't have `ABORT()` anymore, and there are some new tile flags. i have to investigate the whole code: looks like i've missed a lot of improvements there.
Today, 5:03 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 163
ah! i realised why GF generation failing! it is not about room placement, it is about populating the room with items (square script). sometimes the game generates living quarters not big enough to place all the beds there. that is, a living quarter of 3x5 size (including borders), for example. this leaves only 3 squares for beds, but `Times` can be as big as 6. of course, room generating code cannot place that much.

this is prolly some bug in my script copypasta: living quarters should never be that small, i guess.
Jump to