Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
76c8c79
Add random event system and maze event
HarleyGilpin Jul 8, 2026
1814320
Add in-place random event framework
HarleyGilpin Jul 8, 2026
db2b25e
Add Freaky Forester random event
HarleyGilpin Jul 8, 2026
676a16b
Drop the raw pheasant to the floor instead of the inventory
HarleyGilpin Jul 8, 2026
ab4a8af
Add Sandwich Lady random event
HarleyGilpin Jul 8, 2026
e1361f6
Sandwich Lady reacts to the tray choice
HarleyGilpin Jul 8, 2026
f126a11
Give the Sandwich Lady knockout its animation and dialogue
HarleyGilpin Jul 8, 2026
172d744
Add Drill Demon random event
HarleyGilpin Jul 8, 2026
9bea6d1
Fix Drill Demon signs and mat positioning
HarleyGilpin Jul 8, 2026
4732881
Polish Drill Demon exercise and sign-change effects
HarleyGilpin Jul 8, 2026
ed71edf
Play the sign-change puff on the sign tile (mat y + 2)
HarleyGilpin Jul 8, 2026
68336f5
Sweep the Drill Demon sign puffs half a tick apart (Option B)
HarleyGilpin Jul 8, 2026
d1ab2c4
Use the large chathead for Sergeant Damien's dialogue
HarleyGilpin Jul 8, 2026
36e58de
Show the sign item dialogue after Drill Demon's order
HarleyGilpin Jul 8, 2026
97e7cc2
Make Drill Demon wait before the first order
HarleyGilpin Jul 8, 2026
4fdf45c
Add Certer random event
HarleyGilpin Jul 8, 2026
f0b2ee8
Rework Certer to use the item box and a choice menu
HarleyGilpin Jul 8, 2026
c5b9e99
Use interface 184 for Certer with the real 634 layout
HarleyGilpin Jul 8, 2026
0c6bab3
Render Certer option items with sendModel
HarleyGilpin Jul 8, 2026
5004418
Fix Certer interface: item model in the box, text on the options
HarleyGilpin Jul 8, 2026
9031e21
Drive Certer's interface 184 via its varbits
HarleyGilpin Jul 8, 2026
82a3ff9
Point Certer's option clicks at the right components
HarleyGilpin Jul 8, 2026
89831ff
Add Mime random event
HarleyGilpin Jul 8, 2026
f0af174
Teleport the mime event player to 2008, 4762
HarleyGilpin Jul 8, 2026
5fcd24a
Add Evil Bob random event
HarleyGilpin Jul 8, 2026
4cc0d4d
Add Evil Bob random event
HarleyGilpin Jul 8, 2026
86c5721
Face Evil Bob and pause before the raspberry send-off
HarleyGilpin Jul 8, 2026
efd18c7
Face Evil Bob and pause before the raspberry send-off
HarleyGilpin Jul 8, 2026
79be784
Fix Evil Bob's spawn posiiton.
HarleyGilpin Jul 8, 2026
a885458
Use the cat chathead expressions for Evil Bob's dialogue
HarleyGilpin Jul 8, 2026
8f16db2
Add Quiz Master random event
HarleyGilpin Jul 8, 2026
cdd428a
Make the Quiz Master answer models clickable
HarleyGilpin Jul 8, 2026
ece58e6
Wire the Quiz Master answers to the interface's real buttons
HarleyGilpin Jul 8, 2026
985bcf2
Handle Quiz Master answers as dialogue continues
HarleyGilpin Jul 8, 2026
9113579
Add Pillory random event
HarleyGilpin Jul 8, 2026
7cbb7de
Add Pillory random event
HarleyGilpin Jul 8, 2026
1e1d8bb
Add Surprise Exam random event
HarleyGilpin Jul 8, 2026
1ad8443
Handle Surprise Exam answers as dialogue continues
HarleyGilpin Jul 8, 2026
b293bd6
Open the Surprise Exam quiz in the main game window
HarleyGilpin Jul 8, 2026
0a0cd8e
Send the access mask for the Surprise Exam answer buttons
HarleyGilpin Jul 8, 2026
4ed7e40
Unlock Surprise Exam answer buttons over their item slot
HarleyGilpin Jul 8, 2026
5ece6d8
Dispatch clicks on the Surprise Exam item icons
HarleyGilpin Jul 8, 2026
db639e4
Dispatch clicks on the Surprise Exam item icons
HarleyGilpin Jul 8, 2026
109ca73
Use the large chathead for Mr Mordaut's dialogue
HarleyGilpin Jul 8, 2026
023822c
Address review: clear random events on reload, reuse addOrDrop
HarleyGilpin Jul 8, 2026
276410e
Rework the Mime event around interface 188 and the theatre
HarleyGilpin Jul 8, 2026
813e8dd
Run the Mime event in the real theatre instead of an instance
HarleyGilpin Jul 8, 2026
a2a5d3c
Show Mime prompts as chatbox dialogue
HarleyGilpin Jul 8, 2026
faae829
Drop the Mime 'Correct!' text down a line
HarleyGilpin Jul 8, 2026
8995b57
Bump the Mime 'Watch the Mime' prompt down a line too
HarleyGilpin Jul 8, 2026
1a688d3
Animate the Mime spotlights on and off
HarleyGilpin Jul 8, 2026
462563c
Let the Mime spotlight finish before the emote
HarleyGilpin Jul 8, 2026
d7e3ace
Teleport the Mime player out with the modern teleport
HarleyGilpin Jul 8, 2026
5240bf8
Use the modern teleport helper for the Mime exit
HarleyGilpin Jul 8, 2026
4e16f02
Add Kiss the Frog random event
HarleyGilpin Jul 9, 2026
970f847
Fix frog chatheads and face-before-kiss in Kiss the Frog
HarleyGilpin Jul 9, 2026
baa892a
Rework Kiss the Frog fail/escape flow and fix royal detection
HarleyGilpin Jul 9, 2026
e340761
Seat the player during the Quiz Master show
HarleyGilpin Jul 9, 2026
9d0d1eb
Add Pinball random event
HarleyGilpin Jul 9, 2026
4ed2a89
Add Prison Pete random event
HarleyGilpin Jul 9, 2026
04a992e
Add Lost and Found random event
HarleyGilpin Jul 9, 2026
f1fcaed
Add Cap'n Arnav's Chest random event
HarleyGilpin Jul 9, 2026
f30ab07
Add Beekeeper random event
HarleyGilpin Jul 10, 2026
94e6438
Add Evil Twin random event
HarleyGilpin Jul 10, 2026
ab8546d
Add Gravedigger random event
HarleyGilpin Jul 10, 2026
0c6ef61
Reward all random events with a random event gift
HarleyGilpin Jul 10, 2026
54d4621
Add Mystery box random event reward
HarleyGilpin Jul 10, 2026
7952c24
Add Casket treasure
HarleyGilpin Jul 10, 2026
c5b47e5
Add Iffie's costume store
HarleyGilpin Jul 10, 2026
8ee2579
Remove dead code and unnecessary comments from random events
HarleyGilpin Jul 10, 2026
1895287
Exile without noting items on sandwich lady knockout
HarleyGilpin Jul 10, 2026
cf039a1
Allow players to disable random events with ::randomevents
HarleyGilpin Jul 10, 2026
00c639d
Skip already-noted items in the random event ignore penalty
HarleyGilpin Jul 10, 2026
45aae8b
Guard the maze shrine and reset the chest cap between mazes
HarleyGilpin Jul 10, 2026
598740c
Only unlock Prison Pete's locks when keys are handed over
HarleyGilpin Jul 10, 2026
cb1b01f
Exile the player when the beekeeper's hive build fails
HarleyGilpin Jul 10, 2026
a7b6bcd
Let the Quiz Master resume an interrupted quiz
HarleyGilpin Jul 10, 2026
9c7985c
Clean up Kiss the Frog royals on logout and resume on relog
HarleyGilpin Jul 10, 2026
5e53da3
Resume random event progress on relog and clean up leftover state
HarleyGilpin Jul 10, 2026
d5d1be8
Add Pinball random event tests
HarleyGilpin Jul 10, 2026
5aaa37c
Organise random event NPC definitions into per-event configs
HarleyGilpin Jul 10, 2026
2bd9fef
Fix the unreachable home teleport cooldown handler
HarleyGilpin Jul 10, 2026
2b0fd88
Move random event settings to game.properties
GregHib Jul 11, 2026
3070542
Reuse String.an for MysteryBox.kt
GregHib Jul 11, 2026
e6c1de3
Add random event exception areas
GregHib Jul 11, 2026
4a8464f
Include morphing rings/transforms in random event eligibility
GregHib Jul 11, 2026
dd210d9
Trigger random events on a timer instead of experience drop
GregHib Jul 11, 2026
a696583
Disable random events in integration tests to avoid issues
GregHib Jul 11, 2026
b916a25
Fix random event trigger tests
GregHib Jul 11, 2026
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
33 changes: 33 additions & 0 deletions data/activity/event/random/beekeeper/beekeeper.ifaces.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
[beehive_build]
id = 420
type = "main_screen"

[.part_1]
id = 12

[.part_2]
id = 13

[.part_3]
id = 14

[.part_4]
id = 15

[.slot_1]
id = 16

[.slot_2]
id = 17

[.slot_3]
id = 18

[.slot_4]
id = 19

[.close]
id = 38

[.build]
id = 39
3 changes: 3 additions & 0 deletions data/activity/event/random/beekeeper/beekeeper.npcs.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[bee_keeper]
id = 8649
examine = "He looks after all these bees."
37 changes: 37 additions & 0 deletions data/activity/event/random/beekeeper/beekeeper.varbits.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Varp 805 drives the beehive-build interface: the client renders each source and frame slot's
# hive part (1-4) from these varbits; 0 is an empty slot.
[beekeeper_part_1]
id = 5893
format = "int"

[beekeeper_part_2]
id = 5894
format = "int"

[beekeeper_part_3]
id = 5895
format = "int"

[beekeeper_part_4]
id = 5896
format = "int"

[beekeeper_slot_1]
id = 5897
format = "int"

[beekeeper_slot_2]
id = 5898
format = "int"

[beekeeper_slot_3]
id = 5899
format = "int"

[beekeeper_slot_4]
id = 5900
format = "int"

[beekeeper_tries]
id = 5901
format = "int"
3 changes: 3 additions & 0 deletions data/activity/event/random/beekeeper/beekeeper.vars.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[beekeeper_intro]
format = "boolean"
persist = true
27 changes: 27 additions & 0 deletions data/activity/event/random/capn_arnav/capn_arnav.ifaces.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[capn_arnav_lock]
id = 185
type = "main_screen"

[.down_1]
id = 2

[.up_1]
id = 3

[.down_2]
id = 9

[.up_2]
id = 10

[.down_3]
id = 16

[.up_3]
id = 17

[.unlock]
id = 28

[.close]
id = 30
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
spawns = [
# 6480
{ id = "capn_arnav", x = 1625, y = 5163, direction = "EAST" },
]
3 changes: 3 additions & 0 deletions data/activity/event/random/capn_arnav/capn_arnav.npcs.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[capn_arnav]
id = 2308
examine = "Distinctly piratical."
9 changes: 9 additions & 0 deletions data/activity/event/random/capn_arnav/capn_arnav.objs.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[capn_arnav_chest]
id = 42337
examine = "Cap'n Arnav's treasure chest."

[capn_arnav_chest_open]
id = 42338

[capn_arnav_exit_portal]
id = 11369
13 changes: 13 additions & 0 deletions data/activity/event/random/capn_arnav/capn_arnav.varbits.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Client script 2112 repositions each cylinder's four models from these varbits:
# 0 = coins centred, 1 = bowl, 2 = bar, 3 = ring.
[arnav_lock_1]
id = 693
format = "int"

[arnav_lock_2]
id = 694
format = "int"

[arnav_lock_3]
id = 695
format = "int"
11 changes: 11 additions & 0 deletions data/activity/event/random/capn_arnav/capn_arnav.vars.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[arnav_target]
format = "string"
persist = true

[arnav_tries]
format = "int"
persist = true

[arnav_solved]
format = "boolean"
persist = true
17 changes: 17 additions & 0 deletions data/activity/event/random/certer/certer.ifaces.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Certer's identify interface (184). Its load script builds the three option rows and the item
# model from varbits, so we set those and open it. The clickable option rows are components 4-6
# (A/B/C, top to bottom); their "Select" action is declared here so clicks validate.
[certer_identify]
id = 184

[.option_1]
id = 4
options = { Select = 0 }

[.option_2]
id = 5
options = { Select = 0 }

[.option_3]
id = 6
options = { Select = 0 }
3 changes: 3 additions & 0 deletions data/activity/event/random/certer/certer.npcs.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[giles]
id = 2538
examine = "One of the certificate brothers."
30 changes: 30 additions & 0 deletions data/activity/event/random/certer/certer.varbits.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Read by interface 184's load script (cs2 2136).
# The three option descriptions (keys into enum 2224):
[certer_desc_1]
id = 5856

[certer_desc_2]
id = 5858

[certer_desc_3]
id = 5860

# The item model: enum selector (2225-2228) + key into it.
[certer_model_enum]
id = 5857

[certer_model_key]
id = 5862

# Model display: rotation, scale and spin.
[certer_rotation_x]
id = 5855

[certer_rotation_y]
id = 5859

[certer_scale]
id = 5861

[certer_spin]
id = 5863
2 changes: 2 additions & 0 deletions data/activity/event/random/certer/certer.vars.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[certer_answer]
format = "int"
11 changes: 11 additions & 0 deletions data/activity/event/random/drill_demon/drill_demon.anims.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[drill_demon_jog]
id = 2764

[drill_demon_situp]
id = 2763

[drill_demon_pushup]
id = 2762

[drill_demon_starjump]
id = 2761
3 changes: 3 additions & 0 deletions data/activity/event/random/drill_demon/drill_demon.gfx.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Puff shown on a sign tile as its exercise changes.
[drill_demon_sign_change]
id = 2000
13 changes: 13 additions & 0 deletions data/activity/event/random/drill_demon/drill_demon.objs.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# The four exercise mats. Each mat's sign shows an exercise via its varbit
# (drill_demon_sign_1..4); the player uses the mat matching the sergeant's order.
[drill_demon_mat_1]
id = 10076

[drill_demon_mat_2]
id = 10077

[drill_demon_mat_3]
id = 10078

[drill_demon_mat_4]
id = 10079
11 changes: 11 additions & 0 deletions data/activity/event/random/drill_demon/drill_demon.sounds.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[drill_demon_jog]
id = 2484

[drill_demon_situp]
id = 2486

[drill_demon_pushup]
id = 2481

[drill_demon_starjump]
id = 2492
16 changes: 16 additions & 0 deletions data/activity/event/random/drill_demon/drill_demon.varbits.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Each mat's sign display: 1 jog, 2 sit-ups, 3 push-ups, 4 star jumps (0 = no sign shown).
[drill_demon_sign_1]
id = 1335
format = "int"

[drill_demon_sign_2]
id = 1336
format = "int"

[drill_demon_sign_3]
id = 1337
format = "int"

[drill_demon_sign_4]
id = 1338
format = "int"
11 changes: 11 additions & 0 deletions data/activity/event/random/drill_demon/drill_demon.vars.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[drill_demon_task]
format = "int"
persist = true

[drill_demon_correct]
format = "int"
persist = true

# Set once the sergeant has given the first order; using a mat before then is a wasted attempt.
[drill_demon_ready]
format = "boolean"
12 changes: 12 additions & 0 deletions data/activity/event/random/evil_bob/evil_bob.npcs.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[evil_bob_cat]
id = 2478
examine = "It's a cat with an evil glint in its eye."

[evil_bob]
id = 2479
dialogue = "cat"
examine = "An evil incarnation of Bob the cat."

[evil_bob_servant]
id = 2481
examine = "A terrified human servant."
11 changes: 11 additions & 0 deletions data/activity/event/random/evil_bob/evil_bob.objs.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[evil_bob_fishing_spot]
id = 8986
examine = "You could catch a fish-like thing here."

[evil_bob_uncooking_pot]
id = 8985
examine = "A cold fire for uncooking fish."

[evil_bob_exit_portal]
id = 8987
examine = "A portal leading away from this dreadful place."
26 changes: 26 additions & 0 deletions data/activity/event/random/evil_bob/evil_bob.vars.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
[evil_bob_npc]
format = "int"

[evil_bob_zone]
format = "int"
persist = true

[evil_bob_complete]
format = "boolean"
persist = true

[evil_bob_attentive]
format = "boolean"
persist = true

[evil_bob_new_spot]
format = "boolean"
persist = true

[evil_bob_seen_intro]
format = "boolean"
persist = true

[evil_bob_servant_helped]
format = "boolean"
persist = true
14 changes: 14 additions & 0 deletions data/activity/event/random/evil_twin/evil_twin.anims.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[evil_twin_claw_grab]
id = 4000

[evil_twin_lifted]
id = 4001

[evil_twin_claw_lower]
id = 4003

[evil_twin_operate]
id = 4004

[evil_twin_jailed]
id = 859
2 changes: 2 additions & 0 deletions data/activity/event/random/evil_twin/evil_twin.gfx.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[evil_twin_lifted]
id = 666
28 changes: 28 additions & 0 deletions data/activity/event/random/evil_twin/evil_twin.ifaces.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Evil Twin crane controls (240). The arrow buttons move the claw one tile per click and the
# red button lowers it onto whoever is standing on the glowing mark. The buttons' option names
# ("Up", "Grab"...) come from the interface definition in the cache; the camera looks south over
# the pen, so screen-up is south.
[evil_twin_crane]
id = 240
type = "inventory_tab"

[.tries]
id = 27

[.grab]
id = 28

[.up]
id = 29

[.down]
id = 30

[.left]
id = 31

[.right]
id = 32

[.close]
id = 33
Loading
Loading