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.
problem with a verb routine
Moderators: Ice Cream Jonsey, joltcountry
-
- Posts: 4
- Joined: Thu Feb 18, 2016 8:45 am
- Location: Out There in Internet Land
problem with a verb routine
Official promoter of the
Hugo Interactive Fiction Language
a Better TADS than TADS;
a Better Inform than Inform
Hugo Interactive Fiction Language
a Better TADS than TADS;
a Better Inform than Inform
-
- Posts: 4
- Joined: Thu Feb 18, 2016 8:45 am
- Location: Out There in Internet Land
-
- Posts: 2256
- Joined: Mon Apr 29, 2002 6:23 pm
- Location: Milwaukee
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)
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)
-
- Posts: 4
- Joined: Thu Feb 18, 2016 8:45 am
- Location: Out There in Internet Land
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!"
}
}
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
Hugo Interactive Fiction Language
a Better TADS than TADS;
a Better Inform than Inform
-
- Posts: 2256
- Joined: Mon Apr 29, 2002 6:23 pm
- Location: Milwaukee
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?
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?