problem with a verb routine

Hugo programming discussion. http://www.generalcoffee.com/hugo
Hugo By Example: http://hugo.gerynarsabode.org/index.php?title=Main_Page
Roody Yogurt's Hugo Blog: http://notdeadhugo.blogspot.com

Moderators: Ice Cream Jonsey, AArdvark, Kent

Post Reply
misterman83
Posts: 4
Joined: Thu Feb 18, 2016 8:45 am
Location: Out There in Internet Land

problem with a verb routine

Post by misterman83 » Thu Apr 28, 2016 12:44 pm

I'm working on a tactical combat system, slightly based on Necrotic Drift. For some reason, my DoHit replacement isn't working: Either the verb messages aren't printing, or the verb routine isn't running when I type "attack x".
The verb routine calls an external routine to calculate attack and damage rolls, as well as deal damage.
The external routine calls yet another external routine to print combat messages.
I don't think the problem lies in the external routine: it works perfectly when enemies attack the player, but not for when the player attacks an enemy.
Any help is appreciated.
Official promoter of the
Hugo Interactive Fiction Language
a Better TADS than TADS;
a Better Inform than Inform

misterman83
Posts: 4
Joined: Thu Feb 18, 2016 8:45 am
Location: Out There in Internet Land

Post by misterman83 » Thu Apr 28, 2016 12:47 pm

Whoops. I think I posted the topic twice.
Official promoter of the
Hugo Interactive Fiction Language
a Better TADS than TADS;
a Better Inform than Inform

Roody_Yogurt
Posts: 1993
Joined: Mon Apr 29, 2002 6:23 pm
Location: Milwaukee

Post by Roody_Yogurt » Fri Apr 29, 2016 7:51 am

I'd probably have to see the code to track it down. Does your external routine have an argument for the attacker, like:

AttackSystem(attacker, victim)

Then you'd have your replacement DoHit call it with:

AttackSystem(player, object)

(so then your code can check if the attacker is the player for player-optimised messages)

misterman83
Posts: 4
Joined: Thu Feb 18, 2016 8:45 am
Location: Out There in Internet Land

Post by misterman83 » Thu May 05, 2016 12:49 pm

Yes it does.
Here's my external attack routine:
routine fight(attacker, target)
{
AttackRoll = random(20)
if AttackRoll < target.armor_class: print CombatMessage(attacker, target, 1)
else {
print CombatMessage(attacker, target, 2)
DamageRoll = random(attacker.damage)
target.health -= (DamageRoll)
}
}

and Here's my combatMessages routine:
routine CombatMessage(attacker, target, num)
{
select num
case 1
{
print CThe(attacker);
print MatchPlural(attacker, "misses", "miss");
"!"
}
case 2
{
print CThe(attacker);
print MatchPlural(attacker, "hits", "hit");
print CThe(target);
" for ";
print number DamageRoll;
" damage!"
}
}
Official promoter of the
Hugo Interactive Fiction Language
a Better TADS than TADS;
a Better Inform than Inform

Roody_Yogurt
Posts: 1993
Joined: Mon Apr 29, 2002 6:23 pm
Location: Milwaukee

Post by Roody_Yogurt » Thu May 05, 2016 3:24 pm

First off, you want to be sure that your DoHit replacement is somewhere after roodylib is included (assuming you're using Roodylib), as that also replaces DoHit.

Then, you'd want your replacement to look something like this:

replace DoHit
{
if object is not living
VMessage(&DoHit)
elseif object = player
RlibMessage(&DoHit)
else
return fight(player, object)
}

Also, in your code, don't you want to set DamageRoll before you call the attack message?

Post Reply