problem with a verb routine

This is a discussion / support forum for the Hugo programming language by Kent Tessman. Hugo is a powerful programming language for making text games / interactive fiction with multimedia support.

Hugo download links: https://www.generalcoffee.com/hugo
Roody Yogurt's Hugo Blog: https://notdeadhugo.blogspot.com
The Hugor interpreter by RealNC: http://ifwiki.org/index.php/Hugor

Moderators: Ice Cream Jonsey, joltcountry

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 »

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 »

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: 2179
Joined: Mon Apr 29, 2002 6:23 pm
Location: Milwaukee

Post by Roody_Yogurt »

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 »

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: 2179
Joined: Mon Apr 29, 2002 6:23 pm
Location: Milwaukee

Post by Roody_Yogurt »

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