Skip to content
This repository was archived by the owner on Oct 14, 2025. It is now read-only.

Commit 8130074

Browse files
authored
fix(content): Big Chompy Bird Hunting fixes (#1003)
1 parent c18907e commit 8130074

File tree

10 files changed

+105
-71
lines changed

10 files changed

+105
-71
lines changed

data/src/scripts/quests/quest_chompybird/configs/quest_chompybird.npc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ param=defend_sound,chompy_bird_hit
9595
param=death_sound,chompy_bird_death
9696
// TODO tbc + missing datas
9797
wanderrange=3
98+
// Hunt range is a guess
99+
// If removed, chompy won't hunt for toads during quest
100+
huntrange=10
98101
// osrs stats and Vislvl match 1:1
99102

100103
[chompy_bird_corpse]

data/src/scripts/quests/quest_chompybird/scripts/bugs.rs2

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,22 @@ switch_int(%chompybird_progress) {
2727
return;
2828
}
2929

30-
if (inv_freespace(inv) < 2) {
31-
// todo what to do?
32-
return;
33-
}
34-
30+
// No inv space check - OSRS drops the feathers on the floor
3531
~doubleobjbox(chisel, coins, "You offer the 10 coins for the tools.", 150);
3632

3733
inv_del(inv, coins, 10);
3834
inv_add(inv, chisel, 1);
3935
inv_add(inv, knife, 1);
4036
~chatnpc("<p,happy>Ok, dat's a good 'un, I got da bright pretties and you got da scratchers!");
4137
case 2 :
42-
// todo mesanim tbc
4338
~chatplayer("<p,neutral>Er, sorry, I can't give you that many...");
4439
~chatnpc("<p,angry>Well, you not have da scratchers den!");
4540
}
4641

42+
case ^chompybird_kids_play_with_toad, ^chompybird_removed_rock_from_chest :
43+
~chatplayer("<p,quiz>Rantz said that you play with the 'fatsy toadies', what are they?");
44+
~chatnpc("<p,neutral>Oh we sometimes use da blower on da toadies but Dad don't let us get in da locked box no more. He, he, it was good fun making da toadies fat on da swamp gas.");
45+
4746
case ^chompybird_shown_toad :
4847
~chatnpc("<p,neutral>You's better talk to Dad, he might have something for you to do.");
4948

@@ -62,11 +61,9 @@ switch_int(%chompybird_progress) {
6261

6362
~chatnpc("<p,neutal>Dad say's you's making da chompy for us! Slurp! Me's|has to have <$chompy_flavour> wiv mine! Chompy is our|favourite yummms!");
6463

65-
case ^chompybird_chompy_cooked :
66-
// todo mesanim TBC
67-
~chatnpc("<p,neutral>Have you talked to Dad, he might have something for you to do.");
64+
case ^chompybird_complete :
65+
~chatnpc("<p,neutral>Thanks for da chompy, it was deloverly!");
6866

6967
case default :
70-
// todo TBC other states
71-
return;
68+
~chatnpc("<p,neutral>Have you talked to Dad, he might have something for you to do.");
7269
}

data/src/scripts/quests/quest_chompybird/scripts/chompy_bird.rs2

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ npc_del;
4848

4949
[apnpc5,chompy_bird]
5050
def_obj $rhand = inv_getobj(worn, ^wearpos_rhand);
51-
5251
// make the player run to the bird if they are unarmed
5352
if ($rhand = null)
5453
{
@@ -147,7 +146,7 @@ if (%damagestyle = ^style_ranged_longrange) {
147146
}
148147

149148
if (($attackrange <= 1 & ~player_in_combat_check = false) | $distance > $attackrange) {
150-
// p_opnpc(2);
149+
p_opnpc(5);
151150
p_aprange($attackrange);
152151
return;
153152
}
@@ -157,7 +156,7 @@ p_stopaction;
157156
// facesquare(npc_coord);
158157

159158
if (%action_delay > map_clock) {
160-
p_opnpc(2);
159+
p_opnpc(5);
161160
return;
162161
}
163162

@@ -178,7 +177,7 @@ if (~player_npc_hit_roll(%damagetype) = true) {
178177
~give_combat_experience(%damagestyle, $damage, %npc_combat_xp_multiplier);
179178
}
180179

181-
def_int $delay = add(~player_ranged_use_weapon($rhand, $ammo), 30); // osrs it seems to be delayed an extra tick
180+
def_int $delay = add(~player_use_ogre_bow($ammo), 30); // osrs it seems to be delayed an extra tick
182181
anim(%com_attackanim, 0);
183182
sound_synth(%com_attacksound, 0, 0);
184183
~npc_retaliate(calc($delay / 30));
@@ -189,8 +188,7 @@ if (npc_param(defend_sound) ! null) {
189188
}
190189

191190
npc_heropoints($damage);
192-
193-
p_opnpc(2);
191+
p_opnpc(5);
194192
if (random(5) ! 0) {
195193
world_delay(calc($delay / 30 - 2));
196194
if (map_blocked(npc_coord) = false) {
@@ -201,6 +199,12 @@ if (random(5) ! 0) {
201199
}
202200
inv_clear(ranged_quiver_inv);
203201

202+
// Ogre arrow launch spotanim is higher than other arrows by default, so we compensate for that here
203+
[proc,player_use_ogre_bow](obj $ammo)(int)
204+
spotanim_pl(oc_param($ammo, proj_launch), 46, 0);
205+
inv_moveitem(worn, ranged_quiver_inv, $ammo, 1);
206+
return(~npc_projectile(coord, npc_uid, oc_param($ammo, proj_travel), 40, 36, 41, 15, 5, 11, 5));
207+
204208
[ai_queue3,chompy_bird]
205209
gosub(npc_death);
206210

data/src/scripts/quests/quest_chompybird/scripts/fycie.rs2

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,7 @@ switch_int(%chompybird_progress) {
2727
return;
2828
}
2929

30-
if (inv_freespace(inv) = 0 & inv_total(inv, feather) = 0) {
31-
// todo what to do?
32-
return;
33-
}
34-
30+
// No inv space check - OSRS drops the feathers on the floor
3531
~doubleobjbox(feather, coins, "You offer the 50 coins for the 25 flufsies.", 150);
3632

3733
inv_del(inv, coins, 50);
@@ -42,8 +38,9 @@ switch_int(%chompybird_progress) {
4238
~chatnpc("<p,angry>Well, you not have da flufsies den!");
4339
}
4440

45-
case ^chompybird_shown_toad :
46-
~chatnpc("<p,neutral>You's better talk to Dad, him chasey sneaky chompy.");
41+
case ^chompybird_kids_play_with_toad, ^chompybird_removed_rock_from_chest :
42+
~chatplayer("<p,quiz>Rantz said that you play with the 'fatsy toadies', what are they?");
43+
~chatnpc("<p,neutral>Oh we sometimes is using blower on da toadies but Dad don't let us get in da locksy bocksy no more. He, he, big chuklees when make da toadies fat on da swampy gas.");
4744

4845
case ^chompybird_told_to_cook_chompy :
4946
def_int $flavour = getbit_range(%chompybird_kills, ^chompybird_varbit_fycie_flavour_start, ^chompybird_varbit_fycie_flavour_end);
@@ -59,12 +56,10 @@ switch_int(%chompybird_progress) {
5956
}
6057

6158
~chatnpc("<p,neutal>Dad say's you's roastling da chompy for us! Slurp!|Me's wants <$chompy_flavour> wiv mine! Yummy, can't wait|to eats it.");
62-
63-
case ^chompybird_chompy_cooked :
64-
// todo mesanim TBC
65-
~chatnpc("<p,neutral>Go talk to Dad, him chasey sneaky chompy.");
59+
60+
case ^chompybird_complete :
61+
~chatnpc("<p,neutral>Thanks for da chompy, it was deloverly!");
6662

6763
case default :
68-
// todo TBC other states
69-
return;
64+
~chatnpc("<p,neutral>You's better talk to Dad, him chasey sneaky chompy.");
7065
}

data/src/scripts/quests/quest_chompybird/scripts/rantz.rs2

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,19 @@ switch_int(%chompybird_progress) {
1111
~chatplayer("<p,quiz>I think I understand. You want me to make some arrows for you?");
1212
~chatnpc("<p,neutral>Yeah, is what Rantz sayed, make da stabbers for da stabby chucker!");
1313

14-
// todo this dialogue isn't in OSRS, try to find an old video
1514
switch_int(~p_choice2("OK, I'll make you some 'stabbers'.", 1, "Er, make you're own 'stabbers'!", 2)) {
1615
case 1 :
1716
~chatplayer("<p,neutral>OK, I'll make you some 'stabbers'.");
1817
~chatnpc("<p,neutral>Good you creature, you need sticksies from achey tree and stabbies from dog bones.");
1918
%chompybird_progress = ^chompybird_started;
2019
~send_quest_progress(questlist:chompybird, %chompybird_progress, ^chompybird_complete);
2120
case 2 :
22-
// todo text and mesanims TBC
2321
~chatplayer("<p,neutral>Er, make you're own 'stabbers'!");
2422
~chatnpc("<p,angry>When I make 'stabbers', I pretend you chompy and practice on you!");
2523
}
2624
case ^chompybird_started :
2725
@return_to_rantz;
28-
case ^chompybird_given_arrows :
26+
case ^chompybird_given_arrows, ^chompybird_kids_play_with_toad, ^chompybird_removed_rock_from_chest :
2927
~chatnpc("<p,quiz>Hey you creature, you still here?");
3028
~chatnpc("<p,neutral>Da chompy still not coming! We need da fatsy toady to get da chompy, do you got it? Do you got da fatsy toady? Then we can sneaky, sneaky stick da chompy.");
3129

@@ -39,15 +37,15 @@ switch_int(%chompybird_progress) {
3937
}
4038
case ^chompybird_shown_toad :
4139
@where_to_put_toadies;
42-
case ^chompybird_dropped_toad :
40+
// Maybe chompy_ate_toad has a separate set of dialogue, but in normal circumstances the stage
41+
// advances to rantz_tried_to_shoot_chompy too quickly to tell.
42+
case ^chompybird_dropped_toad, ^chompybird_chompy_ate_toad :
4343
// todo mesanim TBC
4444
~chatplayer("<p,neutral>There you go, I've placed the bait.");
4545
~chatnpc("<p,neutral>Goodz, me now waits for da chompy! It shouldn't be long now. Sneaky... sneaky...");
4646
~chatplayer("<p,neutral>Yes, I know... stick da chompy!");
4747
~chatnpc("<p,neutral>Hey, you's creature, is da fatsy toady still dere? Go get more fatsy toadies if dey all gone!");
4848
~chatplayer("<p,neutral>What? I have to get more bait if there's none there? Does this Chompy Bird even exist I wonder?");
49-
case ^chompybird_chompy_ate_toad :
50-
mes("[debug] currently unimplemented");
5149
case ^chompybird_rantz_tried_to_shoot_chompy :
5250
~chatplayer("<p,neutral>Hey there, you keep missing the chompy bird.");
5351
~chatnpc("<p,angry>I knows, I keeps missing... because your stabbers are|worserer at flying than a dead dog.");
@@ -86,7 +84,9 @@ switch_int(%chompybird_progress) {
8684
~chatnpc("<p,angry>Well hurry up and get some, we is hungry!");
8785
case ^chompybird_player_killed_chompy :
8886
if (inv_total(inv, raw_chompy) = 0) {
89-
mes("[debug] todo currently unimplemented");
87+
~chatnpc("<p,neutral>Hey You! Got da chompy yet?");
88+
~chatplayer("<p,neutral>Not yet!");
89+
~chatnpc("<p,angry>Well hurry up and get some, we is hungry!");
9090
} else {
9191
// todo mesanim TBC
9292
~chatnpc("<p,neutral>Hey You! Got da chompy yet?");
@@ -99,8 +99,8 @@ switch_int(%chompybird_progress) {
9999
// todo what if the player no longer has the seasoned chompy? Does it still auto-hand in?
100100
@hand_chompy_to_rantz;
101101
case ^chompybird_complete :
102-
// todo message tbc
103-
~chatnpc("<p,neutral>Tank's very much for da chompy...|Fycie an Bugs like very much da chompy yumms!");
102+
~chatnpc("<p,neutral>Hey deyr, t'anks for da chompy, it was scrumbly!");
103+
// No chompy bird hats yet
104104

105105
// todo dialog to buy ogre bow back from Rantz
106106
}
@@ -183,8 +183,8 @@ switch_obj(last_useitem) {
183183

184184
~chatnpc("<p,neutral>Hey you creature..you made da stabbers|Dat's good creature!");
185185

186-
if (%chompybird_progress = ^chompybird_started) {
187-
// todo mesanim TBC
186+
if (%chompybird_progress = ^chompybird_started & testbit(%chompybird_kills, ^chompybird_varbit_made_arrows) = false) {
187+
// todo mesanim TBC
188188
~chatnpc("<p,neutral>Hey, deese stabbers no good... did you make dem you's self? You go make dem stabbers for me creature! Don't get old ones or from other creatures.");
189189

190190
@no_arrows_choice;
@@ -245,20 +245,17 @@ switch_int(~p_choice2("How do I make the 'stabbers' again?", 1, "Ok, I'll make t
245245
[label,attempt_give_rantz_arrows]
246246
~chatplayer("<p,angry>Well, yes actually, as you asked so nicely. Here you go! Here's your 'stabbers'.");
247247

248-
if (inv_total(inv, ogre_arrow) < 6) {
249-
// todo mesanim tbc
248+
// This check runs first, then quantity
249+
if (testbit(%chompybird_kills, ^chompybird_varbit_made_arrows) = false) {
250+
~chatnpc("<p,angry>Hey, 'dee'se stabbers no good! Did you make dem you's self? YOU go make dem arrows for ME creature!");
251+
}
252+
else if (inv_total(inv, ogre_arrow) < 6) {
250253
~chatnpc("<p,neutral>Dat's not enough, me's an good shot, but need some for practice. Bring more than fingers on hand...");
251-
return;
252254
}
253-
254-
if (testbit(%chompybird_kills, ^chompybird_varbit_made_arrows) = true) {
255-
// todo mesanim tbc
256-
~chatnpc("<p,neutral>Hey, 'dee'se stabbers no good! Did you make dem you's self? YOU go make dem arrows for ME creature!");
257-
return;
255+
else {
256+
@give_rantz_arrows;
258257
}
259258

260-
@give_rantz_arrows;
261-
262259
[label,give_rantz_arrows]
263260
inv_del(inv, ogre_arrow, 6);
264261
%chompybird_progress = ^chompybird_given_arrows;
@@ -274,7 +271,9 @@ switch_int(~p_choice5("How do we make the chompys come?", 1, "What are 'fatsy to
274271
case 1 :
275272
~chatplayer("<p,neutral>How do we make the chompys come?");
276273
~chatnpc("<p,neutral>Chompys love da fatsy toadies. Toadies get big on der swamp gas and der chompys are licking der lips for em as me is licking lips for da chompy. Da chompys don't like da smaller toadies from nearby swampy.");
277-
%chompybird_progress = ^chompybird_kids_play_with_toad;
274+
if (%chompybird_progress < ^chompybird_kids_play_with_toad) {
275+
%chompybird_progress = ^chompybird_kids_play_with_toad;
276+
}
278277
~chatnpc("<p,happy>Dey's fussie eaters just like Rantz. Fycie an' Bugs play with toadies and blower dey's all times making fatsy toadies.");
279278
@toadies_questions;
280279
case 2 :
@@ -341,21 +340,18 @@ while (.npc_findnext = true) {
341340
if (p_finduid(.%quest_chompybird_baiter) = true) {
342341
// we only run this logic for players in the right quest state
343342
if (%chompybird_progress = ^chompybird_chompy_ate_toad) {
344-
// todo fix the delays in this section
345-
346343
// todo send mesbox if player is close?
347344
// not sure which one was in 04
348345
mes("Rantz: Hey, dere's da chompy, I's gonna shoot it.");
349346
npc_facesquare(.npc_coord);
350347

351-
// npc_delay(1);
348+
npc_delay(1);
352349

353350
npc_anim(ogre_attackbow, 0);
354351
spotanim_npc(ogre_arrow_launch, 50, 0);
355352
def_int $duration = ~npc_projectile(npc_coord, .npc_uid, ogre_arrow_travel, 40, 36, 41, 15, 5, 11, 5);
356-
// def_int $delay = add(sub(divide($duration, 30), 1), 2);
357-
358-
// npc_delay($delay);
353+
def_int $delay = add(sub(divide($duration, 30), 1), 2);
354+
npc_delay($delay);
359355

360356
if (p_finduid(.%quest_chompybird_baiter) = true) {
361357
%chompybird_progress = ^chompybird_rantz_tried_to_shoot_chompy;
@@ -364,6 +360,7 @@ while (.npc_findnext = true) {
364360
mes("Rantz keeps missing the chompy bird...");
365361
mes("Rantz: Grrr...de'ese arrows are rubbish.");
366362
}
363+
return;
367364
}
368365
}
369366
}

data/src/scripts/quests/quest_chompybird/scripts/raw_chompy.rs2

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ if (last_useitem ! raw_chompy)
1818
~displaymessage(^dm_default);
1919
return;
2020
}
21+
if (stat(cooking) < 30) {
22+
// Guess
23+
~mesbox("You need a Cooking level of 30 to cook chompy birds.");
24+
return;
25+
}
2126

2227
// todo allow cooking after quest
2328
if (%chompybird_progress < ^chompybird_told_to_cook_chompy)
@@ -29,10 +34,9 @@ if (%chompybird_progress < ^chompybird_told_to_cook_chompy)
2934

3035
if (%chompybird_progress = ^chompybird_told_to_cook_chompy)
3136
{
32-
@cook_chompy_quest;
37+
@cook_chompy_quest(loc_coord);
3338
return;
3439
}
35-
3640
if (%chompybird_progress = ^chompybird_chompy_cooked)
3741
{
3842
// todo what if the player no longer has the original chompy? Does it still auto-hand in?
@@ -51,7 +55,7 @@ if (%chompybird_progress = ^chompybird_chompy_cooked)
5155
// todo handle non-quest cooking
5256
~displaymessage(^dm_default);
5357

54-
[label,cook_chompy_quest]
58+
[label,cook_chompy_quest](coord $loc_coord)
5559
def_int $bugs_ingredient = getbit_range(%chompybird_kills, ^chompybird_varbit_bugs_flavour_start, ^chompybird_varbit_bugs_flavour_end);
5660
def_int $fycie_ingredient = getbit_range(%chompybird_kills, ^chompybird_varbit_fycie_flavour_start, ^chompybird_varbit_fycie_flavour_end);
5761

@@ -136,12 +140,46 @@ if ($has_rantz_ingredient = false | $has_bugs_ingredient = false | $has_fycie_in
136140
return;
137141
}
138142

139-
// todo in OSRS this takes some time, and the spit is animated
140-
%chompybird_progress = ^chompybird_chompy_cooked;
141-
mes("You carefully place the chompy bird on the spit-roast.");
142-
inv_del(inv, raw_chompy, 1);
143+
if (loc_find($loc_coord, ogre_spitroast) = true) {
144+
%chompybird_progress = ^chompybird_chompy_cooked;
145+
146+
mes("You carefully place the chompy bird on the spit-roast.");
147+
inv_del(inv, raw_chompy, 1);
148+
loc_change(ogre_spitroast_raw_chompy, 4);
149+
loc_anim(spit_anim);
150+
anim(human_cooking, 0);
151+
sound_synth(spit_roast, 0, 0);
152+
p_delay(2);
153+
154+
def_boolean $passes_roll = stat_random(stat(cooking), 200, 255);
155+
if ($passes_roll = true) {
156+
mes("You add the other ingredients and cook the food.");
157+
~delete_chompy_ingredients($rantz_ingredient, $bugs_ingredient, $fycie_ingredient);
158+
loc_change(ogre_spitroast_cooked_chompy, 4);
159+
loc_anim(spit_anim);
160+
anim(human_cooking, 0);
161+
p_delay(2);
162+
anim(human_pickuptable, 0);
163+
mes("Eventually the chompy is cooked.");
164+
inv_add(inv, seasoned_chompy, 1);
165+
stat_advance(cooking, 142);
166+
p_delay(1);
167+
~objbox(seasoned_chompy, "You use the <$rantz_ingredient_name>, <$bugs_ingredient_name> and the <$fycie_ingredient_name>|with the chompy bird to make a seasoned chompy.", 250, 0, divide(^objbox_height, 2));
168+
}
169+
else {
170+
mes("You accidentally burn the chompy.");
171+
~delete_chompy_ingredients($rantz_ingredient, $bugs_ingredient, $fycie_ingredient);
172+
loc_change(ogre_spitroast_burnt_chompy, 4);
173+
loc_anim(spit_anim);
174+
anim(human_cooking, 0);
175+
p_delay(2);
176+
anim(human_pickuptable, 0);
177+
inv_add(inv, ruined_chompy, 1);
178+
p_delay(1);
179+
}
180+
}
143181

144-
mes("You add the other ingredients and cook the food.");
182+
[proc,delete_chompy_ingredients](int $rantz_ingredient, int $bugs_ingredient, int $fycie_ingredient)
145183
if ($rantz_ingredient = 0)
146184
{
147185
inv_del(inv, potato, 1);
@@ -167,8 +205,4 @@ if ($fycie_ingredient = 1)
167205
else if ($fycie_ingredient = 2)
168206
{
169207
inv_del(inv, doogle_leaves, 1);
170-
}
171-
172-
mes("Eventually the chompy is cooked.");
173-
inv_add(inv, seasoned_chompy, 1);
174-
~objbox(seasoned_chompy, "You use the <$rantz_ingredient_name>, <$bugs_ingredient_name> and the <$fycie_ingredient_name>|with the chompy bird to make a seasoned chompy.", 250, 0, divide(^objbox_height, 2));
208+
}

0 commit comments

Comments
 (0)