another one IVAN fork

Jan 17, 4:09 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
also, i am pretty sure that you should be able to rest when paniced if the surroindings seem to be safe. previously you was able to rest in dead ends (long-time k8ivan feature). now i implemented more of it: you will be able to rest in the corridor, or in `[`-shaped place, if there are no hostile monsters around. this is because everybody just keep "." pressed until panic passes anyway (in case there are no other means to remove the state, of course), and to do that the player will find a "safe" space. so let the game help us here a little!
Jan 17, 7:41 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
implemented long-time-awaited feature: it is now possible to chat through windows and bar walls. in the future we might have bars with bartenders, for example.

p.s.: also, it is possible to rest when paniced in small rooms with all doors closed and nobody inside.
Jan 17, 12:18 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
some k8ivan trivia, lost in the depth of the thead.

do you know that k8ivan has new array syntax?
arr := { … }
the difference is `:=`, and you don't need any counter, the game is able to count items on its own.

do you know that it is not only possible to include .dat files with `Include` command, but you can extend existing classes AND overworld terrains?
Extend owterrain
{
  Config ASLONA_CASTLE;
  {
    Probability = 100;
    CanBeSkipped = false;
    //NameSingular = "Alien Vessel";
    BitmapPos = 96, 128;
    NameStem = "mighty seaside castle";
    UsesLongArticle = false;
    AttachedDungeon = ASLONA_CASTLE;
    CanBeGenerated = true;
    NativeGTerrainType = LEAFY_FOREST;
    WantContinentWith = ATTNAM;

    RevealEnvironmentInitially = true; //for debug
  }

  Config REBEL_CAMP;
  {
    Probability = 100;
    BitmapPos = 16, 64;
    NameStem = "hidden camp";
    UsesLongArticle = false;
    AttachedDungeon = REBEL_CAMP;
    CanBeGenerated = true;
    NativeGTerrainType = STEPPE;
    WantContinentWith = ATTNAM;

    RevealEnvironmentInitially = true; //for debug
  }
}
this creates two new POIs for Alsona and Rebels. you still need C++ code to actually implement quests, but the dungeons are accessible with wizard mode.

and some new configurations too:
Extend smith
{
  Config ASLONA_CASTLE;
  {
    DefaultName = "Khalybs";
    TorsoBitmapPos = 48, 192;
    HeadBitmapPos = 112, 480;
    ArmBitmapPos = 64, 64;
    LegBitmapPos = 0, 96;
    HairColor = rgb16(44, 34, 43);
    ClothColor = rgb16(100, 100, 100);
    TotalVolume = 90000;
    TotalSize = 200;
    Cloak = SELKIE_SKIN cloak(CLOAK_OF_FIRE_RESISTANCE) { Enchantment = 1; }
    RightGauntlet = SELKIE_SKIN gauntlet(GAUNTLET_OF_DEXTERITY) { Enchantment = 4; }
    RightWielded = CHROME MAHOGANY_WOOD meleeweapon(HAMMER);
    LeftWielded = CHROME MAHOGANY_WOOD meleeweapon(HAMMER);
    Sex = FEMALE;
  }
}

k8ivan includes "Alien Mod", and it is competely optional. you can comment `Module "zone69";` in "scripts/module.dat", and there will be no Alien Nest dungeon. note that Alien Nest has unique monsters which never appears in other dungeons. there are some new features to support this: you can not only restrict monsters to some dungeons (which is possible in mainline too), but you can assign a "tag" to any level, and restrict monsters to levels with that tag. that's how Alien Queen is done. also, Enner Beast uses this system too.

this was already done 7 years ago, and while this won't allow you to create new quests and new monster classes (because doing that still requires C++ support code), you can extend existing classes, and easily design new optional dungeons, all without ever touching C++ compiler!
Jan 17, 4:32 pm
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 837
vasiliy wrote
implemented long-time-awaited feature: it is now possible to chat through windows and bar walls. in the future we might have bars with bartenders, for example.

Jan 17, 5:33 pm
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: 32
Would it be possible to pour gunpowder from the backpack on to the floor? Which could be used to like, make a wall of fire or a fuse or something.
Jan 17, 8:04 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
red_kangaroo wrote
actually, there is nothing really complicated there:
character *character::CheckWindowInDir (int dir) const {
  if (dir < 0 || dir >= 8) return 0;

  v2 pos = GetPos() + game::GetMoveVector(dir);
  if (!GetLevel()->IsValidPos(pos)) return 0;

  lsquare *lsq = GetNaturalNeighbourLSquare(dir);
  if (!lsq) return 0;
  if (!lsq->IsTransparent()) return 0;

  // if it is a window, check if there is somebody over there
  pos += game::GetMoveVector(dir);
  if (!GetLevel()->IsValidPos(pos)) return 0;
  lsq = GetLevel()->GetLSquare(pos);
  if (!lsq) return 0;

  return lsq->GetCharacter();
}
what this does is check if the square in the given direction is transparent (i.e. the player can see through it), and if it is, then check next square in the same direction to find a char. and Talk command becomes:
COMMAND(Talk) {
  if (!Char->CheckTalk()) return false;
  character *ToTalk = 0;
  int Characters = 0;
  for (int d = 0; d < 8; ++d) {
    lsquare *Square = Char->GetNaturalNeighbourLSquare(d);
    if (Square) {
      character *Dude = Square->GetCharacter();
      if (!Dude) Dude = Char->CheckWindowInDir(d);
      if (Dude) {
        ToTalk = Dude;
        ++Characters;
      }
    }
  }

  if (!Characters) {
    ADD_MESSAGE("Find yourself someone to talk to first!");
    return false;
  }

  if (Characters == 1) {
    return ToTalk->ChatMenu();
  }

  int Dir = game::DirectionQuestion(CONST_S("To whom do you wish to talk to? [press a direction key]"), false, true);
  if (Dir == DIR_ERROR || !Char->GetArea()->IsValidPos(Char->GetPos()+game::GetMoveVector(Dir))) {
    return false;
  }

  character *Dude = Char->GetNearSquare(Char->GetPos()+game::GetMoveVector(Dir))->GetCharacter();
  if (!Dude) Dude = Char->CheckWindowInDir(Dir);

  if (Dude == Char) {
    ADD_MESSAGE("You talk to yourself for some time.");
    Char->EditExperience(WISDOM, -50, 1<<7);
    Char->EditAP(-1000);
    return true;
  }

  if (Dude) return Dude->ChatMenu();

  ADD_MESSAGE("You get no response.");
  return false;
}
i just added two calls to the new method. that's it.

p.s.: side-effect: it is possible to chat while standing one square away from any character. i consider this as a good feature, but it is possible to check for windows specifically:
character *character::CheckWindowInDir (int dir) const {
  if (dir < 0 || dir >= 8) return 0;

  v2 pos = GetPos() + game::GetMoveVector(dir);
  if (!GetLevel()->IsValidPos(pos)) return 0;

  lsquare *lsq = GetNaturalNeighbourLSquare(dir);
  if (!lsq) return 0;
  if (!lsq->IsTransparent()) return 0;

  // if it is a window, check if there is somebody over there
  // >>>HERE<<<
  olterrain *terra = lsq->GetOLTerrain();
  if (!terra) return 0;
  if (!(terra->GetConfig() & WINDOW)) return 0;

  pos += game::GetMoveVector(dir);
  if (!GetLevel()->IsValidPos(pos)) return 0;
  lsq = GetLevel()->GetLSquare(pos);
  if (!lsq) return 0;

  return lsq->GetCharacter();
}
Jan 17, 8:10 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
Yancakes wrote
Would it be possible to pour gunpowder from the backpack on to the floor? Which could be used to like, make a wall of fire or a fuse or something.
it's great idea! but sadly, k8ivan has no fire system at all. i'd really like to see a wall of fire, though, so maybe i will hack something for it in the future. thank you!
Jan 17, 8:18 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
as for "distant chating": priests should prolly check if the player is in adjacent square before healing him. or maybe not. tbh, i implemented it because i wanted to talk with prisoners in Attnam prison cells: it is strange that i cannot talk to them through bars. i haven't decided if "distant chats" should be limited to science talks only. for now any interaction is possible. also, it looks quite natural for me to talk with the smith standing in front the anvil, not on it!
Jan 18, 12:32 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
meanwhile, ported new beams (magic effects) from comm. fork, and most characters related to Aslona. so Aslona Castle is fully populated now. it is not possible to start main Aslona quest, though, and no Fungi Cave/Dwarf Fort/Pyramid yet. but we are close now. i prolly finish all new dungeons first, and then start looking for quest parts in the source.

i wonder if other continents should contain something interesting too, as we have a ship now…
Jan 18, 1:04 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
also, i wonder if with high Int the player should be able to target wands onto characters, not only in 8 directions?

it's not that hard to implement (i already have stupid and slow code to scan for nearby characters for Resting), and drawing an imaginary line on a tilemap is easy too. my biggest concern is "gameplay lore": i always had the idea that the player is Just Another Peasant, so he simply cannot use magic items properly; that's why only 8 directions. letting the player to aim in the early game simply doesn't feel right. or maybe he would, but will miss most of the time?

the same mechanics could be used for bows, btw. yet i'm not sure if i want bows in the game. besides, we already have kind of ranged weapons — we can throw daggers, for example. it is surprisingly effective (i always carry a bunch of daggers with me for that purpose). maybe simply use aiming code for throwing?
Jan 18, 1:25 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: 32
I've always found the lack of bows/crossbows/slings etc part of the charm of ivan. While reading your thoughts on targeting with wands I felt unsure because of that- but looks like your thinking is along the same lines lol.

Our hero is a schlub! A fast learning one, but a schlub nonetheless.
Jan 18, 1:53 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
Yancakes wrote
I've always found the lack of bows/crossbows/slings etc part of the charm of ivan. While reading your thoughts on targeting with wands I felt unsure because of that- but looks like your thinking is along the same lines lol.

Our hero is a schlub! A fast learning one, but a schlub nonetheless.

yeah, this reflects my thoughts too. i love it that in IVAN we are not on The Quest To Save The World, or something. it's just a nobody carrying a stupid letter, and i bet even Decos forgot about the player the very same moment the player moved out of his sight.

but! what if we polymorphed into some wizard? wizards should be able to use magic wands properly. at least trained wizards, i believe. as the player gets the stats of the creature he polimorphed into, i think that he should get at least some other traits too. apprentices are lame, but elder wizards…

so aiming prolly should be locked both with Int, and with character type. i have to think about it some more…
Jan 18, 1:58 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: 32
I'll give you that.

Potentially one of the towns has a wizard in it? You become his apprentice, you get to target spells. Gives a more consistent buff than polymorph (though polymorphing into a wizard it makes sense you'd be able to target since you get their stats).
Jan 18, 2:07 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
hm. interesting idea! there is a wizard in Aslona, and he prolly could have some more sidequests. prove yourself, and the wizard will make you his apprentice.

this should be something simple, though, because a huge quest will make the player overpowered. maybe yet another route to finish the game? i.e. instead of doing favors to Aslona officials, screw them, and go learning magic?
Jan 18, 4:57 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
ported almost all new items from comm. fork (except several which have no use in k8ivan), and some more characters. basically, 6 or so new characters left to port. it's not hard, just very tedious copypasta work.

of course, it doesn't mean that everything will magically start working properly: there are a lot of subtle changes over various places in comm. fork, and i have to go through the source code, comparing things. sadly, comm. fork inherited the original code as is, so everything is thrown into several huge files, without much sense or order. i spent a lot of time splitting that to "one source file for each class" in k8ivan to make everything manageable, but i lost the tools i wrote for that. so i prolly have to recreate the tools first.

still, i hope to have the playable version with most community content done in several weeks. and then i can resume working on the database, and prolly on some other support tools. and start fixing bugs i introduced during the port, of course.
Jan 18, 6:46 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
also, i always wanted to know, but constantly forget to check… now i checked it, and yes, Sherry can single-handedly (ok, with two hands clear the game of everybody. basically, the only two places where she dies is wizard's lair (she couldn't get to them fast enough), and Oree's Lair entry, where she slaughtered almost all golems, but was broght down by several critical hits.
Jan 18, 8:02 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
hm. i just realised how badly i need playtesters. in almost two decades i NEVER (no exaggeration!) ever played as heavy weapon warrior. i mean, no, i never used two-handed swords, or halberds. the game says they are "inaccurate", and that was enough for me to ignore them completely. i was also throwing away shields the moment i found the second sword. my build is always dual-wielder, and it is usually two short swords, or gauche and short sword, or katana and… you got the idea. maximum dexterety, no heavy armors, and all that. i never even realised starting spears as a weapon.

i know that "inaccurate" doesn't mean "you will miss each time", and that big weapons are better at blocking than small ones, but… that knowledge lives in some separate part of my brain. "me grow bananas. me fear things much longer than banana."
Jan 18, 11:11 pm
Joined: Dec 3, 2007
Occupation: Chaos Weaver
Location: Standing between all life and death
Posts: 2,913
vasiliy wrote
hm. interesting idea! there is a wizard in Aslona, and he prolly could have some more sidequests. prove yourself, and the wizard will make you his apprentice.

this should be something simple, though, because a huge quest will make the player overpowered. maybe yet another route to finish the game? i.e. instead of doing favors to Aslona officials, screw them, and go learning magic?

As far as this goes, why not? Maybe the player needs to become relatively overpowered in order to face Ischaldirh who's the boss of his own dungeon, like Xinroch in his tomb.
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
Jan 19, 4:03 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: 32
vasiliy wrote
hm. i just realised how badly i need playtesters. in almost two decades i NEVER (no exaggeration!) ever played as heavy weapon warrior. i mean, no, i never used two-handed swords, or halberds. the game says they are "inaccurate", and that was enough for me to ignore them completely. i was also throwing away shields the moment i found the second sword. my build is always dual-wielder, and it is usually two short swords, or gauche and short sword, or katana and… you got the idea. maximum dexterety, no heavy armors, and all that. i never even realised starting spears as a weapon.

i know that "inaccurate" doesn't mean "you will miss each time", and that big weapons are better at blocking than small ones, but… that knowledge lives in some separate part of my brain. "me grow bananas. me fear things much longer than banana."

Consider posting on the roguelike subreddit? There are a couple of us who mention IVAN at every opportunity lol.
Jan 19, 4:14 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
chaostrom wrote
As far as this goes, why not? Maybe the player needs to become relatively overpowered in order to face Ischaldirh who's the boss of his own dungeon, like Xinroch in his tomb.

that's right. recruit Sherry, and cast some protection spells on her. and forget about Izzy, he is no more. or basically anybody else in the game.

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.
Jan 19, 4:23 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
Yancakes wrote
Consider posting on the roguelike subreddit? There are a couple of us who mention IVAN at every opportunity lol.

tbh, i am still really far from being ready even for pre-beta playtesting. besides many bugs to fix, i need at least proper in-game command console, and some way to dissect saves. maybe even store all moves and actions in save games, so i'll be able to replay everything.

btw, "action replay" would be a killer feature by itself. it could be very small (we only need to save player actions), and people will be able to pass around their winning records.

of couse, making the game deterministic will take some efforts: it is using PRNG in a lot of places, and in some places we should use "throwaway PRNG" which doesn't affect the game (like for various visual fx).
Jan 19, 5:44 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
implemented option to use outlined items. not quite happy with the result, but i believe i'll get used to it. not all items are outlined, though: food and some other items aren't.

also, once i decided to go with heavy weapons, the game started to spawn various enchanted short swords and such. and i found bones with light weapons arsenal. tell me what you want, "this is not in the code" and such, but i really believe that this game is sentient, and it has very twisted sense of humor.
Jan 19, 6:24 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 312
…and i just remembered why i never used heavy weapons. for dual-wielder UT is a toy, Jenny doesn't stand a chance, and i can run around farming the plants to no end. but tried the same with long swords, and… killed by a hedgehogs. or plants. or Jenny. with more training heavy weapons will prolly perform better, but i never lived long enough to see that.
Jan 19, 3:41 pm
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 837
vasiliy wrote
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.

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.
Jan 19, 3:44 pm
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 837
vasiliy wrote
…and i just remembered why i never used heavy weapons. for dual-wielder UT is a toy, Jenny doesn't stand a chance, and i can run around farming the plants to no end. but tried the same with long swords, and… killed by a hedgehogs. or plants. or Jenny. with more training heavy weapons will prolly perform better, but i never lived long enough to see that.

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. 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.
Jump to