SI: exp gain?
Forum rules
NOTICE: This forum is archived as read only.
Please use the Github Discussions at https://github.com/exult/exult/discussions
NOTICE: This forum is archived as read only.
Please use the Github Discussions at https://github.com/exult/exult/discussions
SI: exp gain?
I've just started playing U7 II. So far it's great, but there is something I wonder about:
Since the beginning I don't have gotten almost any exp.
The Avatar has gained 108 exp, the companions none.
I think the Avatar may have gained those by killing the first enemies before entering Monitor. But since then I have not seen a single point of exp.
I have gained Knighthood in Monitor, confronted the tatoo lady, returned the ring to this girl in Fawn... but no exp. Killing creatures likewise does not give any exp.
Is this intended? It surely worked different in U7.
I feel like I stumbled upon a nasty bug here.
Since the beginning I don't have gotten almost any exp.
The Avatar has gained 108 exp, the companions none.
I think the Avatar may have gained those by killing the first enemies before entering Monitor. But since then I have not seen a single point of exp.
I have gained Knighthood in Monitor, confronted the tatoo lady, returned the ring to this girl in Fawn... but no exp. Killing creatures likewise does not give any exp.
Is this intended? It surely worked different in U7.
I feel like I stumbled upon a nasty bug here.
-
- Posts: 246
- Joined: Thu May 14, 2020 1:34 pm
Re: SI: exp gain?
This is probably the only thing Ive ever disliked about the Ultima series.
The only person that gets XP is the person that actually does the kill shot on the enemy. If you sat there whittling away a dragon's 100+ hp by yourself, and Iolo finally manages to make an arrow contact (and not hit one of your party) and takes that last hp from that dragon, you're out of luck and Iolo just got all that xp for it.
I know in IV/V/VI/etc., the Avatar is the only one that ever really 'needed' to get to level 8 but come on.
Share that XP like they do in D&D rules so I don't have to spend an extra month grinding with just each individual companion fighting so he can catch up!!
And lets not forget Ultima 3 where it was important the whole party actually level up..
The only person that gets XP is the person that actually does the kill shot on the enemy. If you sat there whittling away a dragon's 100+ hp by yourself, and Iolo finally manages to make an arrow contact (and not hit one of your party) and takes that last hp from that dragon, you're out of luck and Iolo just got all that xp for it.
I know in IV/V/VI/etc., the Avatar is the only one that ever really 'needed' to get to level 8 but come on.
Share that XP like they do in D&D rules so I don't have to spend an extra month grinding with just each individual companion fighting so he can catch up!!
And lets not forget Ultima 3 where it was important the whole party actually level up..
Morbius Dragon
-==(UDIC)==-
Since 1992!
-==(UDIC)==-
Since 1992!
Re: SI: exp gain?
Yeah, but my problem here is that NOBODY gets any exp. Not for killing, not for quests.
-
- Posts: 246
- Joined: Thu May 14, 2020 1:34 pm
Re: SI: exp gain?
Oh dur I missed that whole part about you not getting anymore after Trinsic haha (don't read the forums when drunk!).
Yeah thats definitely not right!
Yeah thats definitely not right!
Morbius Dragon
-==(UDIC)==-
Since 1992!
-==(UDIC)==-
Since 1992!
Re: SI: exp gain?
sounds like a bug...
not much help I know...I almost found I gained experience more quickly than I would have liked, although I think I was getting the intended progression.
not much help I know...I almost found I gained experience more quickly than I would have liked, although I think I was getting the intended progression.
Re: SI: exp gain?
Ok, I started a new game now carefully watching exp gains.
After two tests it appears the Avatar gains exp through killing up until the last part of the Knights Test. That means I dont gain exp for killing the "invisible" soldier, the totem animal or Shmed.
Since this is repeatable this seem like SERIOUS bug (and really demotivates me from playing).
I'm using the 1.49 version, the latest no-snapshot.
Any help?
After two tests it appears the Avatar gains exp through killing up until the last part of the Knights Test. That means I dont gain exp for killing the "invisible" soldier, the totem animal or Shmed.
Since this is repeatable this seem like SERIOUS bug (and really demotivates me from playing).
I'm using the 1.49 version, the latest no-snapshot.
Any help?
-
- Site Admin
- Posts: 985
- Joined: Thu May 14, 2020 1:34 pm
Re: SI: exp gain?
The invisible man. Shmed, and totem animal don't give experience in the original dos engine.
Edit. Sorry I edited out some info but not before someone posted
Edit. Sorry I edited out some info but not before someone posted
Re: SI: exp gain?
Hm, do the Goblins at Fawn Tower count as NPC as well?
That would explain why I got no exp for them.
Ah well, good to know that it works "like intended" albeit a bit unexpected.
That would explain why I got no exp for them.
Ah well, good to know that it works "like intended" albeit a bit unexpected.
-
- Site Admin
- Posts: 985
- Joined: Thu May 14, 2020 1:34 pm
Re: SI: exp gain?
Actually the xp listing in Exult Studio doesn't seem right or isn't listed properly. Tattoo lady gives 20. I'm not sure what the xp formula is offhand and what the exceptions are. It seems stupid that killing innocents and your companions give xp but not these enemies.
Edit: I had momentary stupidity. XP listing for npcs is for how much they have which is relevant if they can join your party.
Edit: I had momentary stupidity. XP listing for npcs is for how much they have which is relevant if they can join your party.
-
- Posts: 1241
- Joined: Thu May 14, 2020 1:34 pm
Re: SI: exp gain?
SI's experience curve in general is very convoluted. It's not very intuitive and a lot of things you would expect to give good XP dont, and a good few things you think wouldn't, do. It was one of the problems I had with the mechanics of SI (the other being trying to place things very specifically on slots or pedestals, which we had to do a suspicious amount of...)
Cheers,
Peter M Dodge,
aka Wizardry Dragon
www.thefeudallands.ca
Cheers,
Peter M Dodge,
aka Wizardry Dragon
www.thefeudallands.ca
Cheers, Wizardry Dragon
Lead Designer, Ultima VII: The Feudal Lands
www.thefeudallands.ca
Lead Designer, Ultima VII: The Feudal Lands
www.thefeudallands.ca
-
- Site Admin
- Posts: 985
- Joined: Thu May 14, 2020 1:34 pm
Re: SI: exp gain?
It's because of the tournament flag. The code for the npc or shape kills it and says not to award xp. It can be changed with usecode. Maybe Marzo can add this to SI Fixes. This probably happens with more npcs. The code below is untested.
EDIT: Schmed code should be fixed now.
Code: Select all
// Wolf totem allows xp on death patch
void Wolf shape#(0x219) ()
{
if (event == DEATH) {
UI_clear_item_flag(item, SI_TOURNAMENT);
UI_reduce_health(item, 55, 1);
}
else
return;
}
// Shmed allows xp on death patch
extern void delayedBark 0x97F (var npc, var bark, var delay);
void Shmed object#(0x44B)()
{
if (event == DEATH && UI_get_item_flag(SCHMED, SI_TOURNAMENT) {
UI_clear_item_say(SCHMED);
if (!gflags[0xC5]) {
SCHMED.say("\"But I don't understand. How didst thou survive the Knight's Test? We fixed the place with traps to be absolutely fatal!\"");
SCHMED.say("\"I did not want to do it. She seduced me into trying to kill thee! Yet even now, I cannot betray her...\"");
}
UI_clear_item_flag(SCHMED, SI_TOURNAMENT);
delayedBark(SCHMED, "@My love!@", 1);
delayedBark(AVATAR, "@Die with dishonor!@", 5);
UI_reduce_health(SCHMED, 55, 1);
abort; // unneeded?
}
else
Shmed.original();
}
// Exult xp calculations
if (defeated && exp)
{
// Verified: No experience for killing sleeping people.
if (!get_flag(Obj_flags::asleep))
{
int expval = 0;
// Except for 2 details mentioned below, this formula
// is an exact match to what the originals give.
// We also have to do this *here*, before we kill the
// NPC, because the equipment is deleted (spells) or
// transferred to the dead body it leaves.
int combval = properties[static_cast(combat)];
expval = properties[static_cast(strength)] + combval +
(properties[static_cast(dexterity)]+1)/3 +
properties[static_cast(intelligence)]/5;
Monster_info *minf = get_info().get_monster_info();
int immune = minf ? minf->get_immune() : 0;
int vuln = minf ? minf->get_vulnerable() : 0;
if (minf)
expval += minf->get_base_xp_value();
if (!objects.is_empty())
{
Game_object_vector vec; // Get list of all possessions.
vec.reserve(50);
get_objects(vec, c_any_shapenum, c_any_qual, c_any_framenum);
for (Game_object_vector::const_iterator it = vec.begin();
it != vec.end(); ++it)
{
Game_object *obj = *it;
// This matches the original, but maybe
// we should iterate through all items.
// After all, a death bolt in the backpack
// can still be dangerous...
if (obj->get_owner() != this)
continue;
Shape_info& inf = obj->get_info();
expval += inf.get_armor();
// Strictly speaking, the original does not give
// XP for armor immunities; but I guess this is
// mostly because very few armors give immunities
// (ethereal ring, cadellite helm) and no monsters
// use them anyway.
// I decided to have them give a (non-cumulative)
// increase in experience.
immune |= inf.get_armor_immunity();
Weapon_info *winf = inf.get_weapon_info();
if (!winf)
continue;
expval += winf->get_base_xp_value();
// This was tough to figure out, but figured out it was;
// it is a perfect match to what the original does.
switch (winf->get_uses())
{
case Weapon_info::melee:
{
int range = winf->get_range();
expval += range > 5 ? 2 : (range > 3 ? 1 : 0);
break;
}
case Weapon_info::poor_thrown:
expval += combval/5; break;
case Weapon_info::good_thrown:
expval += combval/3; break;
case Weapon_info::ranged:
expval += winf->get_range()/2; break;
}
}
}
// Originals don't do this, but hey... they *should*.
// Also, being vulnerable to something you are immune
// should not matter because immunities are checked first;
// the originals don't do this check, but neither do they
// have a monster vulnerable and immune to the same thing.
vuln &= ~immune;
expval += bitcount(immune);
expval -= bitcount(vuln);
// And the final touch (verified).
expval /= 2;
*exp = expval;
}
Re: SI: exp gain?
FYI, I stand by the exp calculations; I did a painstaking job of reverse engineering them; in SI, those NPCs with the tournament flag set only give XP in the originals if their death usecode explicitly gives it.
Adding these to SI fixes certainly match the vision I have of it; when my new computer is full configured, I will include those fixes in it. Moreover, if there are any other NPCs that also fail to give XP for this reason, I would appreciate knowing so they can be fixed too.
Adding these to SI fixes certainly match the vision I have of it; when my new computer is full configured, I will include those fixes in it. Moreover, if there are any other NPCs that also fail to give XP for this reason, I would appreciate knowing so they can be fixed too.
------
Marzo Sette Torres Junior
aka Geometrodynamic Dragon
[url=http://www.catb.org/~esr/faqs/smart-questions.html]How To Ask Questions The Smart Way[/url]
Marzo Sette Torres Junior
aka Geometrodynamic Dragon
[url=http://www.catb.org/~esr/faqs/smart-questions.html]How To Ask Questions The Smart Way[/url]
-
- Site Admin
- Posts: 985
- Joined: Thu May 14, 2020 1:34 pm
Re: SI: exp gain?
I just included the formula to demonstrate the reason and for xp calculation to be more easily available.