Search Results
Searched for posts by Pent in all forums

Showing results 111 - 120 out of 217 total
Modify your search
Posted by Pent, Aug 2, 2014 at 7:45 pm
This single-line page has been on the wiki for years, but I've seen people ask about it a couple of times in the shoutbox with no response. Does anyone know anything about a variant called 'VLAD', and if not, should the page really stay up?

And 4zb4, according to their gear.h entries:

ITEM(sunsword, meleeweapon)
{
};

ITEM(rescuethepeasant, meleeweapon)
{
};

ITEM(vormav, meleeweapon)
{
};

ITEM(cronus, meleeweapon)
{
};

ITEM(defender, meleeweapon)
{
};

ITEM(aethier, meleeweapon)
{
};

ITEM(aegis, shield)
{
};

ITEM(phoenixshield, shield)
{
};

ITEM(belderiver, meleeweapon)
{
 public:
  virtual truth AllowAlphaEverywhere() const { return true; }
 protected:
  virtual int GetClassAnimationFrames() const { return 32; }
  virtual col16 GetOutlineColor(int) const;
  virtual alpha GetOutlineAlpha(int) const;
};

ITEM(loricatushammer, meleeweapon)
{
 public:
  virtual truth AllowAlphaEverywhere() const { return true; }
 protected:
  virtual int GetClassAnimationFrames() const { return 32; }
  virtual col16 GetOutlineColor(int) const;
  virtual alpha GetOutlineAlpha(int) const;
};

ITEM(goldenjaguarshirt, bodyarmor)
{
 public:
  virtual truth IsConsumable() const { return false; }
  virtual truth AllowAlphaEverywhere() const { return true; }
 protected:
  virtual int GetClassAnimationFrames() const { return 32; }
  virtual col16 GetOutlineColor(int) const;
  virtual alpha GetOutlineAlpha(int) const;
};

ITEM(demonhead, meleeweapon)
{
 public:
  virtual truth AllowAlphaEverywhere() const { return true; }
 protected:
  virtual int GetClassAnimationFrames() const { return 32; }
  virtual col16 GetOutlineColor(int) const;
  virtual alpha GetOutlineAlpha(int) const;
};

ITEM(smite, meleeweapon)
{
 public:
  virtual truth HitEffect(character*, character*, v2, int, int, truth);
  virtual int GetSpecialFlags() const;
  virtual truth ReceiveDamage(character*, int, int, int);
};

ITEM(muramasa, meleeweapon)
{
 public:
  virtual truth HitEffect(character*, character*, v2, int, int, truth);
  virtual truth AllowAlphaEverywhere() const { return true; }
 protected:
  virtual int GetClassAnimationFrames() const { return 32; }
  virtual col16 GetOutlineColor(int) const;
  virtual alpha GetOutlineAlpha(int) const;
};

ITEM(masamune, meleeweapon)
{
 public:
  virtual truth HitEffect(character*, character*, v2, int, int, truth);
  virtual truth AllowAlphaEverywhere() const { return true; }
 protected:
  virtual int GetClassAnimationFrames() const { return 32; }
  virtual col16 GetOutlineColor(int) const;
  virtual alpha GetOutlineAlpha(int) const;
};

ITEM(zulfiqar, meleeweapon)
{
 public:
  virtual truth HitEffect(character*, character*, v2, int, int, truth);
};

ITEM(tipswordofpenetration, meleeweapon)
{
 public:
  virtual truth HitEffect(character*, character*, v2, int, int, truth);
};

ITEM(maingauche, meleeweapon)
{
};

ITEM(lynslag, meleeweapon)
{
};

ITEM(thievesgirdle, belt)
{
 public:
  virtual truth HitEffect(character*, character*, v2, int, int, truth);
 protected:
  virtual truth CleptiaHelps(ccharacter*, ccharacter*) const;
};


most of those weapons have no special properties. The ones with entries like demonhead or the loricatushammer just have those glowing outlines, but no special combat properties. The ones with HitEffect functions have the fancy stuff like Smite's lightning attack, or, apparently, CLIVAN's Thieves' Girdle's whip of thievery effect (which I had no idea existed until just now).
Muramasa drains health like Neerc Se'Ulb, and the rest seem to just do some bonus damage.
Posted by Pent, Jul 31, 2014 at 2:09 pm
From a quick wizard mode test, it seems that unique NPCs (including Oree) cannot be cloned, and cloning any other monsters/generic NPCs does not create tamed clones (the clones will be on the same team as the original).
Posted by Pent, Jul 27, 2014 at 1:23 pm
Got my first completely legitimate, natural limbed High Priest victory last night (the only other one was in CLIVAN with phoenix feather limbs and banana/library exploits, and was pretty much pure luck as I blindly hacked away at everything). I also patched out the perma-state bug for extra fun.

Prayed to chaotic gods, from Mellis to Cruentus. At one point Scabies gave me 5 cans of school food, which I didn't know could happen.

Took out all the named baddies except for Sherry (who never showed up), and of course Izzy (who thankfully didn't show up). I tamed Ur-Khan with a wand of resurrection after I killed him on GC9, but he didn't follow me through the portal even though he was standing next to me, I guess because the room it spawned me in in GC10 didn't have room for my whole party. GC11 had the mage and golem rooms, and as such was the only floor that I rushed through without exploring.

It was the first time I managed to defeat Oree and make it back to Attnam without losing my chest full of goodies, thanks in large part to a mistress torturing chief that Nefas gave me early on, who by the end could probably have taken on Sherry had she spawned. Sadly she died to the mages in Oree's lair, and I didn't have any wands of resurrection left.


Good thing you can't accidentally turn these mistresses against you...


Once I got back to Attnam I went and picked up Ur-Khan, on the way running across Guugzamesh (poor guy always spawns too late, when he doesn't stand a chance), and as I was leaving GC9 got lucky and ran into ZQ-29, giving me some cloning charges which I used to make extra wands to take on Attnam.

Petrus wasn't too bad; he got close to killing me a couple times, but I had an AoLS, which I didn't end up needing. The only other ones who could have been a problem were Galladon and Inlux, but Galladon got killed in the crossfire while I was fighting Petrus, and by the time I got to Inlux she had no weapon for some reason. None of the rest of my party (Ur-Khan, the mystic light frogs, the 4 elite guards, a mystic dark frog, and the floating eye, which I always tame now) survived the battle.

I got a wish from one of the lamps in the treasury, but I didn't need it at that point so I just took an AoLS, then went and summoned a pair of mithril golems to keep me company as I took the throne.

Final gear:


My only regrets are the fact that whips are indestructible (feels a bit cheap since they're so fast and accurate; I've added in breakable whips for future playthroughs), and that I didn't drink my bottle of Valdemar before sitting on the throne.

Final score: 933105
Posted by Pent, Jul 21, 2014 at 8:35 pm
chaostrom wrote
I'm not going to pretend I completely understood that, but mayhaps you could have a variety of ConsumeType flags for different rates of burning?

Spoilable materials have a SpoilModifier variable in material.dat, so a BurnModifier could be used in a similar way.
Posted by Pent, Jul 15, 2014 at 7:49 pm
I don't know if any of you guys have been compiling the IVAN source at all, but if you have (or if you've played pretty much any variant that isn't the 0.50 binary from sourceforge), you may have noticed that the resultant .exe has no icon. For those interested:

~~~~~~~IVAN Resource compilation documentation~~~~~~~
~~"Because everyone loves the banana-pickaxe logo!"~~

1. Compile Ivan.res with following MinGW command (from /Main/Resource)
	> windres Ivan.rc -O coff -o Ivan.res
	
2. add filepath to last line of ivanmgw.mak:
	> $(IVANBIN) : $(FeLibGCH) $(FeLibOBJ) $(IVANGCH) $(IVANOBJ)
	> 	@echo Compiling $(IVANBIN)...
	> 	@$(CC) $(IVANBIN) $(FeLibOBJ) $(IVANOBJ) $(FLAGS) $(LIBS) C:\ivan\Main\Resource\Ivan.res
	
3. Compile IVAN with mingw32-make as usual and IVAN.exe will have the beloved icon.


**Note: This is a temporary fix; the above steps should be entirely incorporated into the makefile, though my initial attempts at this have failed.
Posted by Pent, Jul 13, 2014 at 9:46 am
Warheck wrote
then I can either create a pull request (preferable), or just push the changes to "master" myself (lucky admin guy).

As the lucky admin guys, wouldn't we be the ones approving the pull requests anyways? (Not to say we should skip them, as it gives people a chance to discuss changes before adding them; I'd say the only things that should be directly pushed to master are small bug fixes.)

Now, time to play with some fire.
Posted by Pent, Jul 4, 2014 at 10:28 pm
Warheck wrote
Good researching! Pent, your link from post #8 (chao's quote) provides some tantalizing clues as to the workings of the danger system. Holybanana hints at the fact that activated states are taken into account during monster generation. I wonder what else is taken into account?
I intended to respond to this with a short message pointing you in the direction of possible information, but my curiosity got the better of me, and rather than write a 30 second response as I originally planned, I've spent the last 4-5 hours searching through and poring over the code and compiling a document on what I've discovered.

It isn't nearly complete, but I need a break (and sleep), so here's what I've got (attached as .txt as well, for those who want to read it without the wonky colors):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       Danger System
            of 
   Iter Vehemens ad Necem
~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Organization is (ideally) from the ground up, such that the document can be read straight
through without having to skip around for definitions.

For simplicity's sake, when possible, in character:: member functions, the calling character shall 
be assumed to be the player (a note will be made upon each necessary suspension of this assumption).


~ GetTimeToDie
char.cpp, line 5702:
double character::GetTimeToDie(ccharacter* Enemy, int Damage, double ToHitValue, truth AttackIsBlockable, truth UseMaxHP) const
bodypart.cpp, line 1507:
double bodypart::GetTimeToDie(int Damage, double ToHitValue, double DodgeValue, truth AttackIsBlockable, truth UseMaxHP) const

Various damage calculations are performed. Returns minimum hits required to kill character.


~ GetTimeToKill
nonhuman.cpp, line 349:
double nonhumanoid::GetTimeToKill(ccharacter* Enemy, truth UseMaxHP) const
human.cpp, line 1924:
double humanoid::GetTimeToKill(ccharacter* Enemy, truth UseMaxHP) const

/* Returns the average number of APs required to kill Enemy */

TimeToKill = AttackStyles / Effectivity

AttackStyles is incremented for each type of attack the enemy has: Arm-based attacks,
Leg-based attacks, and Head-based attacks. For each AttackStyle an addition to Effectivity is 
calculated in part by GetTimeToDie(), which seems to be where equipment actually factors
into danger calculations (as GetTimeToDie() performs various damage calculations). 

If character is hasted Effectivity is doubled.
If character is slowed Effectivity is halved.

Should AttackStyles be equal to 0, a value of 10,000,000 will be returned instead of AttackStyles/Effectivity.


~ Limit
felibdef.h, line 68:
inline type Limit(type Value, type Minimum, type Maximum)
{ return Value >= Minimum ? Value <= Maximum ? Value : Maximum : Minimum; }

If I interpret this properly, then this is equivalent to:
if (Value >= Minimum) {
	if (Value <= Maximum) 
		return Value; 
	else
		return Maximum;
}
	else
		return Minimum;
   
or, more simply:

if (Value < Minimum)
	return Minimum;
if (Value > Maximum)
	return Maximum;
else
	return Value;

In essence, if the result is below the minimum, it returns the minimum, and the same should 
the result be over the maximum. Should the value be within the limits it is returned intact.


~ Relative Danger
char.cpp, live 5732:
double character::GetRelativeDanger(ccharacter* Enemy, truth UseMaxHP) const
/*calculates relative danger of Enemy*/

TimeToKill is used to calculate the initial Danger, via dividing the enemy's time to
kill the player by the player's time to kill the enemy.

If Enemy's movement AP requirement is greater than that of the player, Danger is multiplied by 1.25.
In the opposite case, Danger is multiplied by 0.80.

If the Enemy is not visible, Danger is halved (if Enemy is the player it is multiplied by 0.2).
If the Player is not visible to the Enemy, Danger is multiplied by 5 (if the caller is a non-player, Danger is doubled).
##This doesn't make sense; shouldn't the opposite be the case? GetTimeToDie may be the key here, 
##since being invisible to the other party should heavily affect the ToHitValue.

If the caller is NOT the player, and has an INT of less than 10, Danger is multiplied by 0.80.
If the Enemy has an intelligence of less than 10 (and is NOT the player), Danger is multiplied by 1.25.

Returns Limit fuction of Danger with a minimum of 0.001, and maximum of 1000.


~ Danger Map
Map containing danger values of characters

~ Naked Danger
Component of Danger Map

~ Equipped Danger
Component of Danger Map


~ Knowledge of the Ancients
Option D (Character Danger Values) displays three stats for each character:
Danger (Relative Danger (to player)*1000), NGM (Naked Danger*1000), and EGM (Equipped Danger*1000)

~ InitDangerMap
?
~ CalculateNextDanger
?
~ Danger Iterator
?

~ GetMinDifficulty


~ BalancedCreateMonster
proto.cpp, line 22:
character* protosystem::BalancedCreateMonster()

This is the most interesting part: the part where the game actually determines what critters to spawn!


I'm too tired to sort it out mentally at the moment, but you can take a look at BalancedCreateMonster() in proto.cpp for reference. Also just below it is BalancedCreateItem(), which I haven't looked at at all, but may contain some interesting stuff as well.

Attached files
danger.txt ()
Posted by Pent, Jul 4, 2014 at 6:27 am
Here we go:

holybanana wrote
Nah, I think we are going to leave it. I see nothing bad about it. We might modify that number 65535 though, it's so arbitrary. I don't remember why it was chosen, probably because at some point we allocated only 16 bits for state counters and 65535 is the highest number you can represent this way (2^16-1).
Posted by Pent, Jul 3, 2014 at 11:58 pm
Warheck wrote
I vote to keep it the way it is. I don't know to what degree this feature is intentional. What I'd really like to know first is how state activation affects the danger level and what the danger system does to increase the difficulty of the game.

Here's a little bit of information on this from holybanana. He didn't seem to convey any intention of changing it; I'm not sure if anyone has the original source of those comments or if there was any more info there.

In any case, I too would love to know the inner workings of the danger system. I suppose that's a code-diving project for another day.
Posted by Pent, Jul 3, 2014 at 1:21 pm
One of my recent characters was perma-confused because I was on the verge of starvation and drank all of the vodka from the cellar.