Official IVAN Continuation thread Sticky

May 2, 2014, 9:17 pm
Joined: Feb 20, 2012
Posts: 232
I updated the repo with a fix for the bug that caused the game to always say that the player had "never prayed" to Valpurus and Mortifer (they have separate prayer functions from the other gods, and their prayer functions failed to set the counter). I also fixed a couple of typos ("comfort" was always spelled as "confort", which caused resting on the supposedly relaxing couches to be anything but).
May 8, 2014, 1:17 pm
Joined: Feb 20, 2012
Posts: 232
So far, all updates have been bugfixes, or minor balancing tweaks. As far as actually adding new content goes, we should probably have some organization.

I believe that, before any completely new features are added, any unfinished/unimplemented content should be completed. For example, Lobh-Se, mind worms, punishers, the Catacombs, etc.

I've been making a list of unfinished/unbalanced features that I was planning to work on for personal use if not official. Feedback/additions would be appreciated.

~ Proper implementation of Lobh-Se, as described by unused dialogue: 
	(Kaethos in char.dat)"Oh, you're going to Attnam through the tunnel? I don't envy you. There's a dreadful monster 
	dwelling in the its forbidden depths: Lobh-Se, the misbegotten daughter of Scabies, who exists 
	only to devour any man or beast she senses. Through the millenia she has gained every imaginable
	disease and bitten by every existing poisonous creature; now she is practically invulnerable to all damage.
        Beware and avoid Lobh-Se at all costs! Fortunately, this is rather easy, as she only leaves her lair in the 
	heart of the night and even then does not venture far, since nutrition is plenty there and she returns promptly 
	when satiated."
		*Lobh-Se will appear in UT2/4 late at night, while remaining in UT5 during the rest of the day.
		*Alternatively, no UT5 (Lobh-Se has no accessible lair), and Lobh-Se appears in UT4 for an 
		 hour or so each night. She will "return to her lair" (disappear) after that time unless she is 
		 engaged in battle.
		*On her own team; will fight and eat any *living* creatures (ie. ignore golems in UT4) -- make sure enemies
		do not team up and take her down too easily (set them to run from her? - another reason for her not 
		to fight the golems).
		*Eating SICK_SPIDER_FLESH should give player all negative status effects, similar to black unicorn flesh 
		(but much worse - eating a fair amount should trigger perma-everything-bad).
	
~ Taming formula for Wand of Resurrection
	* The ability to get free allies such as Sherry and Izzy is a bit overpowered...
		- However, if you managed to kill them, then you are likely powerful enough that you should be 
		close to the taming requirements, so slightly decreased requirements are reasonable.
	
	Candidates:
	* TamingDifficulty/2 <= CHA
		- Simple, but high CHA requirements may require excessive discussion with NPCs, which would be tedious.
	* (1.5*TamingDifficulty) <= CHA+(INT+WIS)/2 
		- Allows high INT/WIS characters to tame higher difficulty creatures without relying on Charisma as much.

~ Remove all remnants of unused Willpower stat (even when not displayed, fountains can increase WIL, which is a waste).
	- Is there anything in the scattered .txt files in /Doc that mentions what Willpower was going to be for? 
	Rather than getting rid of it, it could be properly finished and implemented.

~ Add actual effect for Boots of Kicking.

~ Finish the Catacombs
    * I believe dialog.txt has something about the Punishers being down there?

~ Other unused/unfinished enemies
    * Mind Worms
    * Large Dragon, Mammoth, and Tank in char.pcx (among other unused graphics)

~The child tourist in NA asks you to catch him a demon spider as one of his friendly responses.
(bring back tamed spider => spider joins tourist team => receive reward?)
	*This one doesnt really fall under "unfinished" content, but the tourists dialogue does hint at it in a way
         (I was disappointed when bringing him a spider didnt do anything).
		- I actually already coded this quest because of my aforementioned disappointment, and felt I should at least mention it.


The (albeit cryptic) Bugs.txt file in /Doc/Work also has several bugs listed that may be worth investigating.
May 8, 2014, 2:20 pm
red_kangaroo's avatar
elder dark mage


Joined: Apr 2, 2014
Location: North Tyris
Posts: 578
I would pretty much like to know what have the devs intended to do with that Lenin's Mummy (name from CLIVAN for that figurine in Items.PCX). And with the nuclear bomb in top right corner of that file.
May 8, 2014, 4:13 pm
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
Pent wrote
I believe that, before any completely new features are added, any unfinished/unimplemented content should be completed. For example, Lobh-Se, mind worms, punishers, the Catacombs, etc.

Ok I agree.

Pent wrote
I've been making a list of unfinished/unbalanced features that I was planning to work on for personal use if not official. Feedback/additions would be appreciated.

I've read the list and I like everything you mentioned so just put it on the main branch. It is all stuff the devs left us, so it's a good starting point.

Can I work on the boots?
May 8, 2014, 4:18 pm
Joined: Feb 20, 2012
Posts: 232
Sounds good. You work on the boots, and I'll merge the spider retrieval quest onto the main branch then get to work on the wand of resurrection taming.

EDIT: Also as a side note, I always thought light green Valpurium (like in LIVAN) looked much better than the gold Valpurium in 0.50. What does everyone else think?
May 9, 2014, 2:56 am
Joined: Dec 3, 2007
Occupation: Chaos Weaver
Location: Standing between all life and death
Posts: 2,825
I am going to assume you still have no access to the development section and give you a brief run-down. Lots of simple copy-paste, half of it isn't me. Half.

(anyone feel like following in Lenox's footsteps and try porting IVAN to linux?)

I've compiled ideas from here and some from greatboards to a single file. These are greatly unbalanced and this is definetely not a to-do list at this point. It's something to get inspiration from, in case you have time to kill and want to do some scripting... For now, it's open for discussion.
http://www.attnam.com/forum/attachment?id=301

We were told that the next quest to be implemented was one where you must rescue your child. Some aspects are already in the game, such as the child, and the ability to give rings and amulets to Petrus' wives.
To me, it sounds like you steal one of Petrus' wives, start a family life, have sex, have a kid, then something happens, your child is kidnapped and you have to go rescue your kid.
Well, one thing is for sure. Someone needs to code sex. Who's up for it? (It must be CHA related, as stated by Kahvi in the quotes thread)

When he came around last time (it was on jconserv, you'll find no record of it here) Ighalli let us play with an experimental god system. The DEVs have acknowledged it, and it is to be in IVAN (eventually). It did two things:
1. Let you choose what effect/gift to get when you pray to a god, the list getting longer with better things as you gain favour
2. A timer for prayers
What appears to be the code for the timer is here:
http://ivan.13.forumer.com/viewtopic.php?t=75
Your challenge is to try and recreate the system based on the information above.

I got ahold of Ighalli. He gave me this:
festring god::GetCompleteDescription() const
  114 {
  115   festring Desc(game::GetAlignment(GetAlignment()));
  116   Desc.Resize(4);
  117   Desc << GetName();
  118   Desc.Resize(20);
  119 
  120   if(game::WizardModeIsActive()) {
  121     Desc << "Timer: " << Timer << " Relation: " << Relation;
  122     return Desc;
  123   }
  124   else
  125     Desc << "You have ";
  126   if (LastPray>-1)
  127   {
  128     int Hour = LastPray / 2000;
  129     int Day = Hour / 24;
  130     Hour %= 24;
  131     int Min = LastPray % 2000 * 60 / 2000;
  132     Desc << "last prayed ";
  133     if (Day>=7)
  134       Desc << "over a week ago.";
  135     else
  136     {
  137       if (Day>1)
  138 	Desc << Day << " days, ";
  139       else if (Day)
  140 	Desc << "one day, ";
  141       if (Hour>1)
  142 	Desc << Hour << " hours, ";
  143       else if (Hour)
  144 	Desc << "one hour, ";
  145       if (Day || Hour)
  146 	Desc << "and " << Min << " minutes ago.";
  147       else
  148 	Desc << Min << " minutes ago.";
  149     }
  150   }
  151   else
  152     Desc << "never prayed to this god.";
  153   return Desc;
  154 }
I suspect it belongs in gods.cpp.

http://ivan.cvs.sourceforge.net/viewvc/ivan/ivan/Doc/Work/
http://ivan.cvs.sourceforge.net/viewvc/ivan/ivan/Doc/Obsolet...
Dunno what the obsolete ones are though, there's plenty of stuff there. Kahvi's looking into it.
May 9, 2014, 1:25 pm
Joined: Feb 20, 2012
Posts: 232
Thanks for the info, Chao. The prayer timer is already implemented in CVS, and some code for Ighalli's god system can be found here (as well as in the other god/gods.cpp/h files in that repo), which can be built upon.

I'll look through /Doc/ again and try to compile a list of usable ideas. Unfortunately, a fair amount of the files in there are in Finnish, and Google Translate can only get me so far; does anyone here know any Finnish who could help translate some of that stuff?

Also, I had some trouble opening the attachment link in your post, so in case it's useful to anyone, I'm attaching a .pdf version.
May 10, 2014, 2:35 am
Joined: Dec 3, 2007
Occupation: Chaos Weaver
Location: Standing between all life and death
Posts: 2,825
Erno, Bored and JoKe speak Finnish, but I don't know how often they come around these days.
May 10, 2014, 4:16 am
Ernomouse's avatar
Master mine stomper


Joined: Dec 16, 2007
Occupation: Pouring molten bronze in sand
Location: In the cold end
Posts: 2,047
I check daily, comment every now and then... But I've got serious timetable issues. (No, I haven't forgotten, just been busy, Chaostrom)
May 10, 2014, 10:35 am
Joined: Sep 22, 2008
Posts: 631
I had a look at the files in Work/, only HexWork.txt seems to be relevant out of the ones not marked as dead. Small Ideas fully includes the translated points from Pikkuideat.txt (and are probably all implemented).

" wrote
Packing algorithm
Savefiles now reach tens of MB, hundreds after leveling the world map. Luckily hexediting shows that some bytes (e.g. 0 and 255) and some groups (e.g. transparent color = 0xF81F) repeat often. Create a packing algorithm, which takes advantage of this. It doesn't need to be very complex, as it needs to be both quick (I recommend the autosaves are not packed, only those after leaving level/game). For example you could make an array of used bytes and combinations and replace those with shorter sequences and/or use RLE-packing on them. I think that std::map/std::set could be useful here. Using FeLib's file classes is possible but not required, as the packing is a distinct operation. You may test it on your own program or build it straight into the save system.

[I believe the above is no longer relevant / is already implemented?]

Name generation algorithm
For this one you'll be creating a separate program called Intelligent Random Imitation Name Assembler (IRINA). It analyzes a file containing names and creates a database based on it. This database can then be used to quickly create new similar ones. IVAN will then load that database. IRINA should probably be capable of printing out those new names straight into a command line, so that you can test it before adding it to IVAN. You may decide the algorithms used by yourself. If you can't find anything better, I suggest Markov chains, i.e. some particular character follows a specific N-letter row with a certain probability. N is given by the user or random. Creating a database can be slow, but loading and creating names should be fairly efficient. Main algorithms should be in FeLib so that both users can use them.

16x16 -> 32x32 tile converter

A separate command-line program that transforms a 256-colour pcx-picture four times larger and smoothes the resulting file. You can use FeLib's rawbitmap-class and its saving and loading routines if you can't think of any better. No elegance is required, as the routine is single-use.

I'll take a closer look at Obsolete/ at some point. Do you have any specific files you need translated?
May 10, 2014, 10:47 am
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
Ok I did some number crunching on boots of kicking, which turned out to be a highly non-linear use of my day. To summarise:
- The main cause of difference is the form modifier (20 for normal boots, 50 for boots of kicking (30 for broken boots!)).
- At the moment, enchanting a boot will improve the inflicted damage of the leg due to that boot, by exactly 1 point per enchantment level, regardless of config.

So this means that the effect of the enchantment is not so noticeable, especially in comparison to simply training your kicking skills and leg strength. You could say the enchantment acts like a kind of fine-tuning, which is the idea I think. The key to optimizing kicking is down to these factors (in no particular order):
- Leg Strength
- Weapon skill category training, specifically improving your "Level"
- Changing the boot material into something stronger and heavier
- Being born with higher base unarmed strength (it's always 150)
- Increasing your boot enchantment

My earlier research mistakes gave me the idea to allow the added damage to exponentiate by adding the enchantment of a boots of kicking to the leg strength attribute in the damage caculation.

What I can do is replace in bodypart.cpp:

  double Base = sqrt(5e-5 * WeaponStrength);

  if(Boot)
    Base += Boot->GetDamageBonus();

  KickDamage = Base * sqrt(1e-7 * GetAttribute(LEG_STRENGTH)) * GetHumanoidMaster()->GetCWeaponSkill(KICK)->GetBonus();

The following:

  double Base = sqrt(5e-5 * WeaponStrength);
	double BootOfKickingBonus = 0;

  if(Boot)
  {
    Base += Boot->GetDamageBonus();
		BootOfKickingBonus += ((Boot->GetConfig() == BOOT_OF_KICKING) && (Boot->GetDamageBonus() > 0)) ? (Boot->GetDamageBonus()) : 0;
  }

  KickDamage = Base * sqrt(1e-7 * (GetAttribute(LEG_STRENGTH) + BootOfKickingBonus)) * GetHumanoidMaster()->GetCWeaponSkill(KICK)->GetBonus();


Which should give the player a bigger boost toward the end. I don't know how this will affect the game balance. Negatively enchanted boots give a linear negative contribution for all types of boots otherwise there would be a crash. All other boots provide a linear gain in added damage. Feast your eyes on the figure below.

EDIT: I was right the first time, GetAttribute includes leg strength bonus by default... sigh.
May 10, 2014, 12:43 pm
Joined: Feb 20, 2012
Posts: 232
EDIT/REDO: Having removed my ranting from before, see the below MSPaint sketch for the gist of it and why BoS should still be taken into consideration while reworking the BoK.

What the sketch doesn't show is that the BoS, while being comparable to BoK kicking-damage-wise at the same enchantment level, give the other massive benefit of carry weight, making BoK kind of useless. Boots of Kicking should be in some way exceptional at kicking, so as to make them a viable alternative to BoS.
May 10, 2014, 5:38 pm
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
It's funny though. At the moment we've been looking at cruddy leather boots. As soon as you change the materials to Mithril or Valpurium, the material strength and density interacts with the form modifier, and you get different results. I could spend ages plotting curves in four or five spaces.

Attached is yet another plot. I'll post code here tomorrow.
May 10, 2014, 5:55 pm
Joined: Feb 20, 2012
Posts: 232
Not to mention that by default Boots of Kicking spawn as iron, rather than leather. That damped square-root one looks pretty nice; by the end-game it's comparable to the exponential one, but it gets the early-game bonus of the square-root one. As I recall, BoK tend to spawn with 0 enchantment, unlike other special gear with usually spawns as +1. I suggest we fix that so that early-game players can see some benefit from the BoK immediately without having to waste a SoEA early on. It shouldn't be too bad for balance either; I tried running through the UT with the code for the original square-root formula with some BoK+1, and kicking really wasn't a viable weapon choice (it did prove effective against the plants once I gained a few levels, taking out even some of the Greater ones in a single kick, but it didn't do much damage to Jenny, and had a tough time hitting/damaging most other enemies).

All of the proposed formulas so far max out around the same point, so what we ought to decide is: do we want kicking to be a viable primary form of combat? If so, then we can probably give the BoK a massive boost, so that their damage is comparable to that of regular weapons. I'll look into some of the numbers later if I'm not feeling too tired.

Also, Unarmed combat seems to have the same damage formula with gauntlets. Spiked gauntlets/caestus could be easily implemented once we figure out the boots of kicking.

JoKe, thanks for translating that. The name generation algorithm sounds interesting; I'm curious as to what its intended use in IVAN was. From what I could glean via Google translate, the stuff in Obsolete doesn't seem too important (hence its placement in the Obsolete folder), so don't worry much about that unless you're bored and have nothing else to do.
May 11, 2014, 12:34 am
Joined: Dec 3, 2007
Occupation: Chaos Weaver
Location: Standing between all life and death
Posts: 2,825
Don't forget, unlike with your hands you only get one kick per attack. This plus the fact BoK needs to be a viable alternative to BoS which grants multiple bonuses means you don't need to fine-slice too much. Worry about it only if you break it.

As to that last bit about spiked gauntlets/caestus, the alien mod has claw weapons designed to use unarmed skill. You might want to take a look at that.
May 11, 2014, 3:42 pm
Joined: Feb 20, 2012
Posts: 232
I noticed one of the things in Small Ideas.txt was "Cube-like screenshot system" which reminded me that IVAN's screenshot system sucks. So, I modified it for proper screenshot functionality; now pressing print screen will save a screenshot in the Scrshot/ directory, as "Scrshot000.bmp", "Scrshot001.bmp", and so on, instead of overwriting the same "Scrshot.bmp" file every time.
May 12, 2014, 5:27 am
[Eire]MadHatter's avatar
mutant ass


Joined: Feb 5, 2014
Occupation: Sysnet Tech Support
Location: Dublin, Ireland
Interests: Computers
Posts: 59
I've always liked the unarmed or hand-to-hand attack style.

And theres lots of unarmed type weapons that "Could" be implemented:

metal knuckle dusters known as brass knuckles. [iron,steel, metals]
spiked knuckles. [iron,steel, metals]
spiked gaunlets
wrist blades
caestus
claws
ballits....no not ballistic fist. [fallout new vegas huehue...in a nutshell a shotgun attached to the users wrist...you punch and....ka-boom]
boxing gloves...[ughh god....knockout then damage? increased chance to knockout? attacks knockout enemies easier?]
mutated arms?
blades mounted to wrist?
May 12, 2014, 8:43 am
Joined: Dec 3, 2007
Occupation: Chaos Weaver
Location: Standing between all life and death
Posts: 2,825
I like that boxing glove idea. Higher KO chance for less damage.
May 12, 2014, 9:51 am
Joined: Nov 22, 2008
Interests: IVAN
Posts: 1,163
I'd love to see "Fists of Steel".
Quote
According to Shrrgnien, who had Ascûdgamln, they were made by putting the would-be bearer into a 'deep sleep', drilling holes through their finger joints, embedding metal sockets into the holes, and sealing them in place with magic. Then various-sized spikes could be threaded through the sockets. Afterward, the dwarf could remove and replace them by screwing them out.
Replace magic with superglue/divine intervention at will.
It would have a chance of hurting your hands, both at first "fitting" (a whole lot of hurting) and with every strike (a little bit of hurting), but with the advantage of <insert metal> knuckles while keeping full use of your hands (maybe a dex penalty).
May 12, 2014, 11:27 am
Joined: Dec 17, 2007
Occupation: Taking Names, Formerly Kicking Ass
Location: New Jersey
Posts: 886
Pent wrote
I noticed one of the things in Small Ideas.txt was "Cube-like screenshot system" which reminded me that IVAN's screenshot system sucks. So, I modified it for proper screenshot functionality; now pressing print screen will save a screenshot in the Scrshot/ directory, as "Scrshot000.bmp", "Scrshot001.bmp", and so on, instead of overwriting the same "Scrshot.bmp" file every time.

i think this warrants immediate induction to the Attnam hall of fame. greatest feature update ever!!
May 14, 2014, 7:47 pm
Joined: Feb 20, 2012
Posts: 232
In my ongoing crusade against all grammatical imperfections, I've been compiling a list of typos and other textual errors in IVAN to be fixed. I'll start a separate thread (so as not to clutter this one) asking people to report any typos they notice.

EDIT: Here it is.
May 16, 2014, 6:17 am
red_kangaroo's avatar
elder dark mage


Joined: Apr 2, 2014
Location: North Tyris
Posts: 578
Eagle V wrote
I'd love to see "Fists of Steel".

Actually, the UC damage should depend on your limb material - iron arms definitely hit harder than normal ones.

Also, what about allowing your artificial limbs (not the natural fleshy ones?) to be enchanted with SoEW? That would raise their damage as well as durability.
May 16, 2014, 6:39 am
Joined: Nov 22, 2008
Interests: IVAN
Posts: 1,163
But wouldn't it be possible to implement the "fists" as a weapon, that requires you to undergo some painful surgery first? (Of course, drilling holes in an iron hand shouldn't hurt that much)
May 16, 2014, 6:49 am
Joined: Feb 20, 2012
Posts: 232
Well, it would be easy enough to make weapons that use the Unarmed combat skill (it's just a line in the script). The whole surgery thing would be a lot more complicated.

I'm not sure artificial limbs should be enchant-able, since they're so powerful anyways once the materials get stronger, but they could certainly use some sort of tweaking, since currently many people just avoid them entirely for being so strong.
May 16, 2014, 11:47 am
Joined: Sep 8, 2010
Occupation: Petty Functionary
Location: Drinking pea soup in the world map
Interests: Mangoes
Posts: 1,113
I wonder if we could make hands and feet into separate body parts? And I wonder why wooden legs never got implemented. I think developing that subsystem further was one of our dev goals at some stage.
Jump to