another one IVAN fork (build: 2025, Apr 18)

Feb 20, 11:53 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
SCREENSHOT REMOVED. SEE LATER POST.

minimap, small mode. i cannot decide which is better, so let's support both!
Feb 20, 5:32 pm
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 854
The small mode looks more like a map and I like it.

BTW, what if you used for background the coloured noise that IVAN can generate (what is used for borders/background of the GUI), rather than solid colour brown field? IMHO that would look better.
Feb 20, 11:34 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
i like both. 4x4 pixel tiles is "more map", but with 8x8 it is possible to see items and such. it's fun to play in 8x8 mode, btw. also, 4x4 map is a noticable CPU hog: on my box CPU usage for normal play is 1-2%, but it raises to 7-8% with 4x4 minimap. this is because it is full-sized bitmap internally, and it is HUGE. but this is the only sane way to do it. trying to follow IVAN rendering routines and recreate them for other tile sizes is… just no. that's why i HAET OOP: it's virtual method calling virtual method calling virtual method calling… no central point, no way to trace it without remembering the whole class hierarchy.

and thank you for the noise idea! i'll definitely try it. that brown is not even something consciously choosen: i simply typed in RGB numbers without thinking at all. that was the first minimap — empty brown rectangle. i decided to think about it later… which usually means "never".


i wanted minimap for a long time simply because "Look" is too boring to use. i added "ctrl+arrows" to move by 10 squares (accidentally, to all cursor selections , but it's still far from good map view tool.

also, i always wanted to hack in some code to visualise level building. i want to see the animation of IVAN placing rooms, digging tunnels, and so on. dunno it if is possible without too much efforts, tho. so i decided to start with minimap first.

p.s.: i remember about console command for vanilla. i even started it, but then got distracted by reading git log.
Feb 21, 5:11 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
new minimap look: normal and small.

minimap basically works like "Look" — you can move the cursor around, and press "l" to look at the square. i will prolly add map markers later, and maybe something else.

p.s.: if anybody wonders why paperdoll is not at the top… because in the top right corner of my display is usually sits the videoplayer. which covers that top part of the game window, and i cannot see the paperdoll. this is the only reason why there is the option to move it down.
Feb 21, 8:36 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 854
Yeah, these look nice!
Feb 21, 9:47 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
fun fact: it is possible to turn on minimap overlay from the console, and play in this mode. that wasn't planned, it just happened.
Feb 22, 12:24 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: 43
I think my brain stroked and is skipping a number of posts but: are a small store added to the first town and a doctor added to the second and other settlements in the books? I know priests can heal leprosy but I like the doctor lol
Feb 22, 2:01 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
SPOILER ALERT. Click here to see text.
there is Lady Decora, shining knight of Legifer in Attnam. she seats near the fountain, which is at the left paw of the frog, and she is a priestess.

but adding doctors is a good idea too, i think.

as for stores… New Attnam has enough. but i'm thinking about making Black Market easier to reach. PC prolly should be able to buy a map with BM location from rebel quartermeister, or something like that.
Feb 23, 4:04 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
extended keybind mechanics a little. now any command can have any number of keys bound (except the movement commands: they are hardcoded for now , and it is possible to bind F1-F10 and Tab, with optional modifiers. so keyboard help is F1 now, and minimaps are Tab and Shift+Tab.

also, "Press <KEY> for a list of commands" is not hardcoded now: the game knows which key to press, and shows it.

there is no way to rebind commands in-game, but "k8ivan_keys.rc" file is editable. it is written on the first start, and can be deleted to restore default keybindings.

movement keys should be editable too, and it should be possible to bind commands to Alt+<char> and Ctrl+<char>. maybe i'll implement it later.
Feb 23, 6:29 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
so why not? it is now possible to use modifiers with chars, and configure movement keys.
Feb 23, 2:17 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
btw. is there any reason to not fully open city maps from the beginning? i mean, we definitely know how New Attnam looks, and there is no much reason to explore Attnam or Aslona too — they're not that different each time. i think that adding "FullyExplored" flag would be useful. it prolly won't show NPCs, but i see no reason to hide items. some special items might be marked as "hidden" with yet another flag, and we prolly can introduce per-room flag to hide room interiors too.

also, maybe add very rare "cartography scroll", which will reveal full level map on reading?

…which we already have implemented at least partially, with "AutoReveal" property. oops.
Feb 23, 3:57 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
but i also found that global rain was hard-coded. i partially un-hardcoded it:
GlobalRainLiquid = SNOW;
GlobalRainSpeed = -64, 128;
GlobalRainVolume = -1; // random; >0: volume
still, only 3 types of rain is allowed (WATER, SNOW, BLOOD), no randomization, no random rain speed variations. this need to be implemented too.
Feb 24, 4:01 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
implemented minimap markers. they are very-very simple for now (just "x" with small text which is shown when the cursor is over the mark), but hey! it is better than no map markers at all!
Feb 24, 4:34 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
i finally implemented saving to SQLite database. no, nothing fancy, the db is used as a simple file archive with the good old binary blobs. but! but there is a huge difference: SQLite supports transactions. this is important, because most broken saves are due to crashes on generating new maps.

on going to the new map, the game is removing the player character, then saves the map (and only the map) w/o player, then generates a new map, then puts PC on it, then autosaves. if the game crashes on new map generation, the save is broken — because there is no PC anywhere. the easiest way to fix this is transactions: open the save BEFORE leaving the area, start the transaction, remove PC, save the map, generate new map, put pc, and peform autosave. the transaction is closed only when autosave is perfomed. this way if the game crashes, SQLite will automatically rollback everything, and our save will not be broken.

currently no compression is implemented, so saves are huge again. i will prolly implement compression later, it's not that hard. i just wanted to make SQLite code work first.
Feb 25, 7:08 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
and the compression is back! our saves are of sane sizes again (usually about 10 times smaller than uncompressed saves). SQLite archive saves now has all the features of vwad saves, and more, so i see no reason to keep vwad saving even as an option (it is still possible to turn it off with compile-time define, though). of course, this is breaking change, but save format is changed too, so you've lost your saves and bones anyway. sorry.
Feb 25, 9:54 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
stopped using SDL_TEXTINPUT events for keyboard handling. trying to sort out KEYDOWN and TEXTINPUT is a mess, and the source of various bugs.

this may cause some problems with non-standard keyboard layouts, but… eh. just stop using them. this is the best solution i know.

in exchange we can bind any key with any modifier to any command. and if the player don't like default binding, F1 shows config file location, so the player will know that it is editable.
Feb 25, 3:17 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
changed ectoplasm to liquid. let's see what will break.

also, sometimes Kenny is spawned as skeleton puppy. just for fun.
Feb 25, 5:37 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
i think we're close to the new build. "release early, release often."
Feb 25, 7:50 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
just for fun, compression ratios:
| packtype |         fname          | filesize |  pksize  | ratio |
|----------|------------------------|----------|----------|-------|
| 1        | worldmap/worldmap.dat  |   722495 |    43459 |    6% |
| 1        | screenshot.raw         |   305296 |    60761 |   19% |
| 0        | info.txt               |      152 |      152 |  100% |
| 1        | game.dat               |   457024 |    56703 |   12% |
| 1        | dungeons/level_4_0.dat |  1361811 |    91157 |    6% |
| 1        | dungeons/level_4_1.dat |  2779963 |   188622 |    6% |
| 1        | dungeons/level_4_2.dat |  1326764 |    98693 |    7% |
| 1        | dungeons/level_2_0.dat |  5089335 |   266273 |    5% |
| 1        | dungeons/level_1_0.dat |  2313521 |   156394 |    6% |
| 1        | dungeons/level_1_1.dat |  4463024 |   230913 |    5% |
| 1        | dungeons/level_1_2.dat |  2429108 |   164699 |    6% |
| 1        | dungeons/level_1_3.dat |  1722983 |    59984 |    3% |
compression is fast, and it is definitely worth the efforts.
total uncompressed size: 22,971,476 bytes.
total compressed size (with SQLite overhead): 1,445,888 bytes.
Feb 25, 9:49 pm
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
i wonder if it is possible to finish all Aslona quests without pets and prayers.
SPOILER ALERT. Click here to see text.
i managed to do GF and FC. it was a lucky run, though: 2 lamps with 2 wishes (belt of levitation, flaming katana), and found arcanite chain mail. no SoCM, but used SoHM and asked tailor/smith to harden my things too. lucky me, found Merka on GC2, and a lot of gem stones. as in k8I it is possible to enter GC without giving encrypted scroll to anybody, i left it in smith house, and after some GC decided to go to Aslona. bought full helmet and managed to kill most sirens. also found a shield of magic resistance, and buffed it a lot. so it was katana+shield run.

2 rings of electricity resistance, managed to kill a wizard in FC quite fast. took the prize and run away.

died trying to kill the floating eye. silly me. sirens gathered around while i was unconscious, took my helmet and other equipment, and i was done.

i also found that anti-siren full helmets seems to work rather good. one siren is mostly harmless this way (not fully harmless, they managed to steal some of my gear; lucky me, not a helmet). two sirens is a threat, three sirens is usually death. i think it's ok.
Feb 25, 10:12 pm
Joined: Dec 19, 2018
Occupation: Pharmacy Tech
Location: USA
Interests: ZZT, Roleplaying,
Posts: 84
vasiliy wrote
i think we're close to the new build. "release early, release often."

What you've got already is awesome and there's still plenty for 0.61
Energizer - you are invincible
ZZT @narchists unite! Turn off the dark, get free money, defeat death itself!
Feb 26, 3:01 am
Joined: Apr 2, 2014
Occupation: Navastating
Location: Aslona
Posts: 854
vasiliy wrote
i wonder if it is possible to finish all Aslona quests without pets and prayers.

Well, that is kinda a challenge run. But I see no reason why it should be impossible, especially when you have access to GC too. Though defeating the castle or rebels with no pets and no gods might be quite a task.

vasiliy wrote
i also found that anti-siren full helmets seems to work rather good. one siren is mostly harmless this way (not fully harmless, they managed to steal some of my gear; lucky me, not a helmet). two sirens is a threat, three sirens is usually death. i think it's ok.

Yeah, I think this is a good feature.

BTW (and this is pure speculation), do shields of resistance work correctly in k8? In vanilla, they rely on the fact that shields give their defence bonuses to all body parts, both AV and elemental. But if k8 has a different handling of shield defences, Aegis and shields of reistance might not work as expected.
Feb 26, 7:15 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
red_kangaroo wrote
Well, that is kinda a challenge run. But I see no reason why it should be impossible, especially when you have access to GC too.
btw, this (free GC) still bothers me. it feels like a game breaker. but hiding GC until Petrus takes away encrypted scroll doesn't feel right too.

red_kangaroo wrote
Though defeating the castle or rebels with no pets and no gods might be quite a task.
i can't even imagine how to catch royal wizard, tbh. detect, telecontrol, teleport and luck, i guess.

red_kangaroo wrote
Yeah, I think this is a good feature.
tbh, i simply couldn't find anything else to use as protection, it was a desperate shot. because i think sirens are way too overpowered without a way to protect yourself somehow. if you cannot one-shot her, it usually means death: either you will be killed while unconscious, or she will steal your weapon and armor, and you're done again.

also, i made skulls wearable too ("too" — i mean, i shamelessly stole it from vanilla), and it seems that one siren managed to wear the skull. i guess that one was a death metal fan.

red_kangaroo wrote
BTW (and this is pure speculation), do shields of resistance work correctly in k8? In vanilla, they rely on the fact that shields give their defence bonuses to all body parts, both AV and elemental. But if k8 has a different handling of shield defences, Aegis and shields of reistance might not work as expected.
you pointed me to `humanoid::GetGlobalResistance()` in vanilla somewhere in this thread, so i took that part. shields added to global defence — that's why i buffed my shield several times. the only change i made is divided physical bonus by 2.

i also made humaniods to block with the shield first (see `humanoid::CheckForBlock()`), and blocking with the shield uses less stamina (see`character::CheckForBlockWithArm()`). this way shields are useful even in midgame: buffed shield can absorb good amount of damage for smaller stamina penalty.

btw, `character::GetRandomNeighbour()` should check for visibility, i believe: i can't see why magpies are able to steal from invisible player. either i illuminated as a christmas tree and NOT invisible, or they should not be able to see my valuables. the exception is mind worms: they don't care.

also skunks, rogues, fruit bats… they all use this method to find a victim. so it is logical to check for visibility there.
Feb 26, 7:38 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
Dark-Star2018 wrote
What you've got already is awesome and there's still plenty for 0.61
thank you! tbh, new builds are not really "releases" per se: it's just a way for other people to try new features. there is no schedule, new build pushed away when i believe that it is stable enought for others to play (and i am often wrong, lol).

i am bumping "n" in "v0.666.n" just for convenience, it is more like a timestamp.

also, i really hope to start working on random encounters soon. this is somewhat scary part: while i know what to do, it is more like "ok, i need to touch it somewhere in that area" knowledge. it is still little scary to dive into mostly unknown code parts, so i keep pushing this to "next time". need to stop doing that, and do the real thing instead.
Feb 26, 8:09 am
Joined: Sep 5, 2010
Interests: make more ivans!
Posts: 430
btw, my lucky character. ESP from floating eyes (that's how i died: tried to buff it to permanent). telecontrol from blink dogs, hasted from mushrooms (lucky bastard! yep, the amulet of speed helps too, but i got it much later). i have several other rings in the inventory, and switching them. SPOILER ALERT. Click here to see text.
killed giant mushroom in FC with earthquake (from the scroll): poor thing had nowhere to move, and was smashed by a falling boulder.
proud atheist, never prayed to any god. explored Salty Cave just for fun.

that's me savescumming to the moment where i trying to get the kid. due to the number of monsters in prison the easiest way is SPOILER ALERT. Click here to see text.
to get him killed, and resurrect the body in some calmer place. sorry, kid, it was not the prettiest escape plan, i know.


killed white unicorn, and found that i cannot can its flesh. why? need to find out yet. (upd: because i'm dumb, and forgot to remove that flag.)

also, i feel that we need the easier way to access BM. i mean, i could farm a lot of money, but there's nothing to do with them.
Jump to