Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions scripts/_test/scripts/engine/debug_addobj.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ if (p_finduid(uid) = true) {
@please_finish;
}

// Drops a pile of 20 cowhides on the player's own tile for spam-click
// interaction testing (MoveClick/OpObj packet-split repro).
[debugproc,dropcowhides]
obj_add(coord, cow_hide, 20, ^lootdrop_duration);
mes("Dropped 20 cowhides on your tile.");

[debugproc,addobj2](int $size)
def_int $half = calc(($size / 2) * -1);

Expand Down
2 changes: 1 addition & 1 deletion scripts/areas/area_desert/scripts/desert_heat.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ if(inv_total(inv, water_skin0) > 0) {
mes("You should get a waterskin for any travelling in the desert.");
}
mes("You start dying of thirst while you're in the desert.");
queue(damage_player, 0, ~random_range(1, 10));
~queue_damage_player(0, ~random_range(1, 10));
~calculate_desertheat_timer;

[mapzoneexit,0_49_46] ~clear_desertheat_timer;
Expand Down
2 changes: 1 addition & 1 deletion scripts/areas/area_draynor/scripts/manor_vines.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ if(inzone(0_48_52_40_8, movecoord(0_48_52_40_8, 9, 0, 9), coord) = false) {
mes("A vine whips out and attacks you!");
spotanim_map(whippingplant_attack, coord, 0, 0);
sound_synth(nasty_tree_attack, 0, 0);
queue(damage_player, 0, 1);
~queue_damage_player(0, 1);
6 changes: 3 additions & 3 deletions scripts/areas/area_kalphite/scripts/kalphite_queen.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ if ($duration = 0) { // first target
}
// mes("Distance: <tostring($total_distance)>, delay: <tostring($queue_delay)>");
anim(%com_defendanim, $duration);
queue(combat_damage_player, $queue_delay, $damage);
~queue_combat_damage_player($queue_delay, $damage);
queue*(playerhit_n_retaliate, $queue_delay)(npc_uid);
return(coord, $duration, $total_distance);

Expand Down Expand Up @@ -142,7 +142,7 @@ while (huntnext = true & $i < 5) { // up to 5? https://youtu.be/ZHaxxMq3nVI?list
}

$duration = ~player_projectile(movecoord(npc_coord, 2, 0, 2), coord, uid, kalphite_spine, 30, 31, 0, 20, 0, 11, 5);
queue(combat_damage_player, divide($duration, 30), $damage);
~queue_combat_damage_player(divide($duration, 30), $damage);
queue*(playerhit_n_retaliate, divide($duration, 30))(npc_uid);
sound_synth(kalphite_queen_spines, 0, 0);
$i = add($i, 1);
Expand Down Expand Up @@ -221,7 +221,7 @@ while (huntnext = true & $i < 5) { // up to 5? https://youtu.be/ZHaxxMq3nVI?list
}

$duration = ~player_projectile(movecoord(npc_coord, 2, 0, 2), coord, uid, kalphite_queen_spine, 30, 31, 0, 20, 0, 11, 5);
queue(combat_damage_player, divide($duration, 30), $damage);
~queue_combat_damage_player(divide($duration, 30), $damage);
queue*(playerhit_n_retaliate, divide($duration, 30))(npc_uid);
sound_synth(kalphite_queen_spines, 0, 0);
$i = add($i, 1);
Expand Down
2 changes: 1 addition & 1 deletion scripts/areas/area_mortmyre/scripts/vampire.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,4 @@ if (npc_stat(hitpoints) = 0) {

~npc_set_attack_vars;
queue*(playerhit_n_retaliate, 0)(npc_uid);
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);
2 changes: 1 addition & 1 deletion scripts/areas/area_mortmyre/scripts/vampire_leech.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ if (npc_stat(hitpoints) = 0) {

~npc_set_attack_vars;
queue*(playerhit_n_retaliate, 0)(npc_uid);
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);

[proc,leech_reduce_stats]
if (random(5) = 0) {
Expand Down
10 changes: 5 additions & 5 deletions scripts/areas/area_wilderness/scripts/king_black_dragon.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ if (randominc($attack_roll) > randominc($defence_roll)) {
mes("You're horribly burnt by the dragon's fiery breath!"); // https://youtu.be/R3ozXHcQkgs?list=PLn23LiLYLb1bYAFU3Vdk3N9niuHs-b-4-&t=78
}
}
queue(combat_damage_player, calc($duration / 30), $damage);
~queue_combat_damage_player(calc($duration / 30), $damage);
queue*(playerhit_n_retaliate, calc($duration / 30))(npc_uid);
~npc_set_attack_vars;
// ------------
Expand All @@ -190,7 +190,7 @@ if (randominc($attack_roll) > randominc($defence_roll)) {
}

}
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);
queue*(playerhit_n_retaliate, 0)(npc_uid);
~npc_set_attack_vars;

Expand Down Expand Up @@ -221,7 +221,7 @@ if (randominc($attack_roll) > randominc($defence_roll)) {
queue(poison_player, 0, 36); // poison the player starting at 8 damage
}
}
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);
queue*(playerhit_n_retaliate, 0)(npc_uid);
~npc_set_attack_vars;

Expand Down Expand Up @@ -263,7 +263,7 @@ if (randominc($attack_roll) > randominc($defence_roll)) {
}
}
}
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);
queue*(playerhit_n_retaliate, 0)(npc_uid);
~npc_set_attack_vars;
// ------------
Expand Down Expand Up @@ -298,7 +298,7 @@ if (randominc($attack_roll) > randominc($defence_roll)) {
queue(kbd_freeze_player, 0, 10); // freeze the player
}
}
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);
queue*(playerhit_n_retaliate, 0)(npc_uid);
~npc_set_attack_vars;

Expand Down
2 changes: 1 addition & 1 deletion scripts/general_use/scripts/haybales.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ anim(human_pickupfloor, 0);
p_delay(2);
def_int $rand = random(100);
if ($rand < 2) {
queue(damage_player, 0, 1);
~queue_damage_player(0, 1);
~chatplayer("<p,angry>Ow! There's something sharp in there!");
} else if ($rand < 12) {
inv_add(inv, needle, 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,5 +107,5 @@ if (randominc($attack_roll) > randominc($defence_roll)) {
}
if_close; // close the player interface when taking a hit.
anim(%com_defendanim, 60);
queue(combat_damage_player, 1, $damage);
~queue_combat_damage_player(1, $damage);
queue*(playerhit_n_retaliate, 1)(npc_uid);
2 changes: 1 addition & 1 deletion scripts/macro events/scripts/mining/macro_event_gas.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ if (%macro_gas_counter < 4) {
anim(null, 0);
sound_synth(gas_explosion, 0, 0);
spotanim_map(firewave_impact, loc_coord, 92, 0);
queue(damage_player, 0, 10);
~queue_damage_player(0, 10);
%macro_gas_counter = 0;

mes("A spark from your pickaxe ignites the gas!"); // https://imgur.com/Rjj4JqR
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ if (randominc($attack_roll) > randominc($defence_roll)) {
if (~check_protect_prayer(^melee_style) = true) {
$damage = 0;
}
queue(combat_damage_player, calc($delay/60), $damage);
~queue_combat_damage_player(calc($delay/60), $damage);
queue*(playerhit_n_retaliate, calc($delay/60))(npc_uid);
%npc_action_delay = add(map_clock, 4);
~npc_set_attack_vars;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ if (loc_find(%macro_event_target_coord, chest_macro_gas) = true) { // set active
// todo: figure out the mes for this thing
sound_synth(gas_hiss, 0, 0);
def_int $random_poison_damage = ~random_range(2, 3);
queue(poison_damage, 0, $random_poison_damage); // poison damage doesnt actually poison, its just a green hitsplat
queue(poison_damage, 0, ~clamp_hit($random_poison_damage)); // poison damage doesnt actually poison, its just a green hitsplat
}
settimer(poison_gas, 4);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ else if(coordx($dest) < coordx(coord)) $dir = ^exact_east;
mes("You were hit by the saw blade!");
anim(human_stumble_back, 30);
p_exactmove(coord, $dest, 30, 56, $dir);
queue(damage_player, 0, calc((stat(hitpoints) * 5 / 100) + 2));
~queue_damage_player(0, calc((stat(hitpoints) * 5 / 100) + 2));

[proc,random_fixed_bridge]()(loc)
switch_int(random(3)) {
Expand Down
2 changes: 1 addition & 1 deletion scripts/minigames/game_gnomeball/scripts/gnome_baller.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ npc_changetype_keepall(npc_param(gnome_hasball), ^max_32bit_int); // perm?
npc_anim(midget_human_tackle, 0);

p_stopaction;
queue(damage_player, 0, add(random(2), 1));
~queue_damage_player(0, add(random(2), 1));
anim(human_tackled, 0);

inv_delslot(worn, ^wearpos_rhand);
Expand Down
2 changes: 1 addition & 1 deletion scripts/minigames/game_mortton/scripts/mortton_shades.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ if (~check_protect_prayer(^melee_style) = true) {
//OSRS moved this to inside the hit check at some point after ~2021?
//In all old videos it always shows the hitsplat, even if the player does not actively start combat / retaliate because the attack missed.
//https://youtu.be/Cgfa0ebrSac?si=zvUg4j1hTfAje3Bb&t=73
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);

if ($damage > 0) {
spotanim_pl(shade_attack, 0, 0);
Expand Down
2 changes: 1 addition & 1 deletion scripts/minigames/game_trawler/scripts/trawler_sink.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ cam_reset;
if_close;
p_teleport(^trawler_escape);
~update_all(null);
queue(damage_player, 0, 2);
~queue_damage_player(0, 2);
mes("You make it to the shore tired and weary."); // rs3 is mes. Also https://youtu.be/sl6i7lK_re0?t=78


Expand Down
2 changes: 1 addition & 1 deletion scripts/npc/scripts/dragon.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ if (map_clock < %dragonresist) {
}

def_int $damage = randominc(max($maxhit, 0));
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);
queue*(playerhit_n_retaliate, 0)(npc_uid);
%npc_action_delay = add(map_clock, 4);
~npc_set_attack_vars;
2 changes: 1 addition & 1 deletion scripts/player/scripts/consumption/nightshade.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
inv_delslot(inv, last_slot);
mes("You eat the nightshade...");
mes("The nightshade was highly poisonous.");
queue(damage_player, 0, 15);
~queue_damage_player(0, 15);
~chatplayer("<p,angry>Ahhhh! What have I done!");
20 changes: 20 additions & 0 deletions scripts/player/scripts/damage.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,26 @@ if (stat(hitpoints) = 0){
[queue,damage_player](int $amount)
~damage_self($amount);

// Clamps an incoming hit to the target's current hitpoints at ENQUEUE time.
// This is what enables "tick eating": the damage is frozen to the victim's hp
// the moment the hit is rolled, so healing before it lands lets them survive.
// Must be called at the enqueue site (not inside the queue handler, which runs
// at land time). ~clamp_hit operates on the active player; ~.clamp_hit on the
// secondary (for player-vs-player and other .queue'd hits).
[proc,clamp_hit](int $damage)(int)
return(min($damage, stat(hitpoints)));

[proc,.clamp_hit](int $damage)(int)
return(min($damage, .stat(hitpoints)));

// Enqueue helpers for the generic self-damage queue, clamped at enqueue time.
// Prefer these over a raw queue(damage_player, ...) so the clamp can't be forgotten.
[proc,queue_damage_player](int $delay, int $amount)
queue(damage_player, $delay, ~clamp_hit($amount));

[proc,.queue_damage_player](int $delay, int $amount)
.queue(damage_player, $delay, ~.clamp_hit($amount));

[proc,human_hit_sound]
def_int $rand;
def_synth $sound;
Expand Down
4 changes: 2 additions & 2 deletions scripts/quests/quest_ball/scripts/quest_ball.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ if($leaving ! true & (%ballquest < ^ball_started | %ballquest = ^ball_complete))

[oploc1,_ball_irongate]
if(inv_total(worn, leather_gloves) = 0) {
queue(damage_player, 0, calc((stat(hitpoints) / 10) + 1));
~queue_damage_player(0, calc((stat(hitpoints) / 10) + 1));
~mesbox("As your bare hands touch the gate you feel a shock.");
return;
}
Expand Down Expand Up @@ -188,7 +188,7 @@ while (npc_findnext = true) {
stat_sub(attack, 1, 5);
stat_sub(defence, 1, 5);
~npc_retaliate(0);
queue(damage_player, 0, calc(1 + ((stat(hitpoints) * 5) / 100)));
~queue_damage_player(0, calc(1 + ((stat(hitpoints) * 5) / 100)));
return;
}
}
Expand Down
2 changes: 1 addition & 1 deletion scripts/quests/quest_chompybird/scripts/bloated_toad.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -126,5 +126,5 @@ while (.huntnext = true) {

.sound_synth(toad_burst, 0, 20);
// is damage random per-player or per-toad?
.queue(damage_player, calc(random(1) + 1), 0);
~.queue_damage_player(calc(random(1) + 1), 0);
}
4 changes: 2 additions & 2 deletions scripts/quests/quest_dragon/scripts/elvarg.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def_int $damage = randominc($maxhit);
// not sure if this was a thing, but this video has it https://youtu.be/ucaYfz3ihWs?list=PLn23LiLYLb1aqrojPTi1_Np81LJku2Nd0&t=130
stat_drain(prayer, 0, 10); // 10%

queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);
queue*(playerhit_n_retaliate, 0)(npc_uid);
~npc_set_attack_vars;

Expand All @@ -100,7 +100,7 @@ def_int $damage = randominc($maxhit);
// not sure if this was a thing, but this video has it https://youtu.be/ucaYfz3ihWs?list=PLn23LiLYLb1aqrojPTi1_Np81LJku2Nd0&t=130
stat_drain(prayer, 0, 10); // 10%

queue(combat_damage_player, calc($duration / 30), $damage);
~queue_combat_damage_player(calc($duration / 30), $damage);
queue*(playerhit_n_retaliate, calc($duration / 30))(npc_uid);
~npc_set_attack_vars;

Expand Down
2 changes: 1 addition & 1 deletion scripts/quests/quest_dragon/scripts/melzar_the_mad.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ if (~npc_player_hit_roll(^magic_style) = true & ~check_protect_prayer(^magic_sty
$damage = randominc($maxhit);
}
if ($damage > 0) {
queue(combat_damage_player, 0, $damage);
~queue_combat_damage_player(0, $damage);
queue*(playerhit_n_retaliate, 0)(npc_uid);
}
%npc_action_delay = add(map_clock, $attackspeed);
Expand Down
2 changes: 1 addition & 1 deletion scripts/quests/quest_druidspirit/scripts/ghast.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ if($rand < 3) {
npc_say("Oouuaarrr!");
if(~ghast_check_food = false) {
mes("A supernatural force draws energy from you.");
queue(damage_player, 0, ~random_range(1,3)); // this doesnt put you in combat
~queue_damage_player(0, ~random_range(1,3)); // this doesnt put you in combat
}
} else {
npc_say("OOooooohhh");
Expand Down
2 changes: 1 addition & 1 deletion scripts/quests/quest_hero/scripts/objs/fire_feather.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ if (%heroquest = ^hero_not_started) {
return;
}
if (inv_total(worn, ice_gloves) = 0) {
queue(damage_player, 0, calc((stat(hitpoints) / 8) + 1)); // OSRS wiki says "about 1/8 of current hp damage"
~queue_damage_player(0, calc((stat(hitpoints) / 8) + 1)); // OSRS wiki says "about 1/8 of current hp damage"
p_delay(1);
mes("It is too hot to take. You need something cold to pick it up with.");
say("Ouch!");
Expand Down
4 changes: 2 additions & 2 deletions scripts/quests/quest_horror/scripts/horror_dagannoth.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ if (~check_protect_prayer(^ranged_style) = true) {
$damage2 = 0;
}
anim(%com_defendanim, $duration);
queue(combat_damage_player, calc($duration / 30), $damage);
if($double_roll = ^true) queue(combat_damage_player, calc($duration / 30), $damage2);
~queue_combat_damage_player(calc($duration / 30), $damage);
if($double_roll = ^true) ~queue_combat_damage_player(calc($duration / 30), $damage2);
queue*(playerhit_n_retaliate, calc($duration / 30))(npc_uid);
~npc_set_attack_vars;

Expand Down
2 changes: 1 addition & 1 deletion scripts/quests/quest_itwatchtower/scripts/ogre_shaman.rs2
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[opnpc1,ogre_shaman]
mes("A magic blast comes from the shaman.");
mes("You are badly injured by the blast.");
queue(damage_player, 0, 20); // this is strongqueued on osrs for some reason
~queue_damage_player(0, 20); // this is strongqueued on osrs for some reason
~chatnpc("<p,angry>Grr! How dare you talk to us.|We will destroy you!");

[ai_queue2,ogre_shaman]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ sound_synth(climb_wall, 0, 0);
mes("You feel strangely heavier...");
inv_del(inv, rockcake, 1);
// on OSRS if you have 5 HP or less it will do hp / 2 instead to prevent death
queue(damage_player, 0, 4);
~queue_damage_player(0, 4);
~chatplayer("<p,shock>Ow! I nearly broke a tooth!");

[oploc1,shuttanothchest1]
Expand Down
2 changes: 1 addition & 1 deletion scripts/quests/quest_legends/scripts/nezikchened.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ if(inzone(0_37_73_0_0, 0_37_73_63_63, coord) = true & %legendsquest = ^legends_r
mes("But you neatly manage to dodge the attack.");
} else {
mes("The dagger hits you with an agonising blow.");
queue(damage_player, 0, random(19)); // TODO: how much damage can this do?
~queue_damage_player(0, random(19)); // TODO: how much damage can this do?
npc_say("Ha, ha, ha... feel my power!");
}
%npc_int = 1;
Expand Down
2 changes: 1 addition & 1 deletion scripts/quests/quest_legends/scripts/quest_legends.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -1603,7 +1603,7 @@ if(testbit(%legends_bits, ^legends_drank_bravery_potion) = ^true) {
mes("You slip off the rope and fall...");
p_delay(1);
say("Ahhhhhhhhhhhh!");
queue(damage_player, 0, calc(stat_base(hitpoints) / 3));
~queue_damage_player(0, calc(stat_base(hitpoints) / 3));
} else {
mes("And although fear stabs at your heart.");
say("Gulp!");
Expand Down
4 changes: 2 additions & 2 deletions scripts/quests/quest_regicide/scripts/quest_regicide.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,8 @@ if(.loc_find($trap4, regicide_trap_arrowtrip) = true) {
~coord_projectile(.loc_coord, coord, iron_arrow_travel, 4, 35, 0, 45, 40, 0, 0);
}
sound_synth(tripwire_with_arrows, 0, 0);
queue(damage_player, 0, 5);
queue(damage_player, 0, 5);
~queue_damage_player(0, 5);
~queue_damage_player(0, 5);

[oploc1,regicide_pitfall_corner]
p_delay(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ mes("You've already caught this scorpion");

[label,scorpion_sting]
mes("The scorpion stings you!");
queue(damage_player, 0, 3);
~queue_damage_player(0, 3);

[label,catch_scorp](namedobj $next_cage)
inv_del(inv, last_useitem, 1);
Expand Down
4 changes: 2 additions & 2 deletions scripts/quests/quest_upass/scripts/upass_obstacles.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -179,11 +179,11 @@ if(coordx(coord) > coordx(loc_coord)) {
if (loc_find(coord, upass_speartrap) = true | loc_find(movecoord(coord, 0, 0, -1), upass_speartrap) = true) {
loc_anim(speartrap_release);
say("Ouch!");
queue(damage_player, 0, calc(((stat(hitpoints) * 10) / 100) + 1));
~queue_damage_player(0, calc(((stat(hitpoints) * 10) / 100) + 1));
} else if (loc_find(coord, upass_double_springtrap_trigger) = true) {
if(loc_find(movecoord(loc_coord, -1, 0, 0), upass_double_springtrap) = true | loc_find(movecoord(loc_coord, 0, 0, -1), upass_double_springtrap) = true) loc_anim(double_springtrap_release);
say("Ouch!");
queue(damage_player, 0, calc(((stat_base(hitpoints) * 8) / 100) + 1));
~queue_damage_player(0, calc(((stat_base(hitpoints) * 8) / 100) + 1));
world_delay(1);
loc_anim(double_springtrap_reset);
}
Expand Down
2 changes: 1 addition & 1 deletion scripts/quests/quest_viking/scripts/viking_reveller.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ mes("The strange object you lit earlier explodes in your inventory!");
say("Ow!");
inv_del(inv, viking_firecracker_lit, $count);
if($count > 1) inv_add(inv, viking_firecracker, sub($count, 1));
queue(damage_player, 0, max(2, divide(stat(hitpoints), 25)));
~queue_damage_player(0, max(2, divide(stat(hitpoints), 25)));

[oplocu,viking_pipe_end_longhall]
if(last_useitem = viking_firecracker_lit) {
Expand Down
Loading