Skip to content
Open
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
9 changes: 0 additions & 9 deletions data/area/morytania/canifis/canifis.teles.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,3 @@ option = "Climb-down"
tile = { x = 3422, y = 3484 }
to = { x = 3440, y = 9888 }

[canifis_tavern_trapdoor]
option = "Open"
tile = { x = 3495, y = 3465 }
to = { x = 3477, y = 9845 }

[canifis_tavern_ladder]
option = "Climb-up"
tile = { x = 3477, y = 9846 }
to = { x = 3495, y = 3466 }
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ examine = "Looks like the leader of the Myreque."

[sani_piliu_meiyerditch_tunnels]
id = 1570
hitpoints = 300
examine = "A pretty young rogue."

[harold_evans_meiyerditch_tunnels]
id = 1571
hitpoints = 300
examine = "Hot headed, big built youth, who trained in the militia."

[ivan_strom_meiyerditch_tunnels]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,8 @@ tags = ["no_cannon", "no_cannon_damp"]
[filliman_grotto]
x = [3433, 3447]
y = [3331, 3343]

# The rope bridge over the Hollows, from the tile the southern tree lands on up to the top rung
[mort_myre_rope_bridge]
x = [3502, 3502]
y = [3427, 3430]
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
[squeeze_past_stalagmite]
id = 3278

# Curpile's warning jab, and the punch that puts the player out cold
[curpile_punch]
id = 422

[curpile_knockout_punch]
id = 390

# Also used for Sani and Harold going down in Vanstrom's ambush
[myreque_knockout]
id = 837

# Vanstrom's ambush in the hideout
[vanstrom_transform]
id = 8594

[vanstrom_hover] #9855 in 667
id = 1500

[vanstrom_summon]
id = 4707

# Vanstrom's pet shares the hellhound skeleton's attack, block and death
[skeleton_hellhound_attack]
id = 6562

[skeleton_hellhound_defend]
id = 6563

[skeleton_hellhound_death]
id = 6564
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[skeleton_hellhound]
defend_anim = "skeleton_hellhound_defend"
death_anim = "skeleton_hellhound_death"
death_sound = "skeleton_hellhound_death"

[skeleton_hellhound.melee]
range = 1
anim = "skeleton_hellhound_attack"
sound = "skeleton_hellhound_attack"
target_sound = "skeleton_hellhound_hit"
target_hit = { offense = "crush", max = 120 }
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[skeleton_hellhound_drop_table]
type = "all"
drops = [
{ id = "big_bones", amount = 4 },
{ id = "uncut_ruby", amount = 2 },
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[vanstrom_transform_graphic]
id = 785

[vanstrom_summon_graphic]
id = 731

[curpile_knockout_stars]
id = 245

[skeleton_hellhound_summon]
id = 86
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,26 @@ str = 110
def = 100
style = "crush"
max_hit_melee = 120
combat_def = "skeleton_hellhound"
attack_speed = 4
hunt_mode = "cowardly"
slayer_xp = 55.0
categories = ["hellhounds"]
drop_table = "skeleton_hellhound"
examine = "A creature summoned by Vanstrom to kill the remaining Myreque."

# Vanstrom's forms during the Myreque hideout cutscene
[route_vanstrom_vampire_misty]
id = 1578
dialogue = "old"

[route_vanstrom]
id = 1579

[route_vanstrom_vampire]
id = 1580
dialogue = "old"

[route_vanstrom_vampire_flying]
id = 1581
dialogue = "old"
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[swamp_bridge1]
id = 5002

[spooky_tree_base_forbridge]
id = 5003

[route_cavewalltunnel]
id = 5046

[route_stalagmite_cave_entrace]
id = 5050

[freedomfighterundergrounddooropenl]
id = 30263

[freedomfighterundergrounddooropenr]
id = 30264
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[vanstrom_mist]
id = 1186

[vanstrom_appear]
id = 1190

[vanstrom_vampire]
id = 1194

[skeleton_hellhound_attack]
id = 1187

[skeleton_hellhound_hit]
id = 1185

[skeleton_hellhound_death]
id = 1188
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
[routequestionscorrect]
id = 173
persist = true
format = "int"

[routequestionsanswered]
id = 174
persist = true
format = "int"

[roomnum]
id = 175
persist = true
format = "boolean"

# The three rungs of the rope bridge over the Hollows, south to north
[bridgerung1]
id = 176
persist = true
format = "boolean"

[bridgerung2]
id = 177
persist = true
format = "boolean"

[bridgerung3]
id = 178
persist = true
format = "boolean"

# Swaps the stranger in the 'Hair of the Dog' between Vanstrom Klause and a plain stranger
[thsfm_vanstrom_hide]
id = 396
persist = true
format = "boolean"

[thsfm_spoken_allmyreque]
id = 2496
persist = true
format = "boolean"

[route_bridgecomplete]
id = 3928
persist = true
format = "boolean"
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ id = 387
persist = true
format = "map"
default = "unstarted"
values = { unstarted = 0, started = 1 }
values = { unstarted = 0, agreed_to_help = 5, refused_delivery = 10, persuaded_boatman = 15, gave_planks = 20, reached_hollows = 25, questioned_by_curpile = 52, answered_questions = 55, entered_hideout = 60, met_veliaf = 65, weapons_accepted = 67, delivered_weapons = 70, hellhound_summoned = 80, killed_hellhound = 85, shown_way_out = 90, in_inn_basement = 95, escaped_to_canifis = 97, completed = 105 }
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Which members of the Myreque the player has introduced themselves to
[met_sani]
persist = true
format = "boolean"

[met_harold]
persist = true
format = "boolean"

[met_ivan]
persist = true
format = "boolean"

[met_radigad]
persist = true
format = "boolean"

[met_polmafi]
persist = true
format = "boolean"
2 changes: 1 addition & 1 deletion data/quest/quests.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1958,7 +1958,7 @@ req_items = "Steel longsword, 2 steel short swords, steel mace, steel warhammer,
req_combat = "You will need to defeat a level 44 enemy."
points = 2
reward = "Access to the Hair of the Dog's cellar<br>Swamp boat shortcut from Mort'ton to The Hollows<br>Access to 2 uncut rubies and 4 big bones"
xp = "600 Attack XP lamp<br>600 Strength XP lamp<br>600 Crafting XP lamp"
xp = "600 Attack XP<br>600 Defence XP<br>600 Strength XP<br>600 Constitution XP<br>600 Crafting XP"

[jungle_potion]
id = 66
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,25 @@ class DynamicZones(
update = true
}

/**
* Copies a block of zones, for content that only needs part of a region - a room to stage a
* cutscene in, say - rather than all sixty four zones of one.
* @param from The south west zone of the block to copy
* @param to The south west zone the block is copied to
* @param width How many zones wide the block is
* @param height How many zones high the block is
* @param levels How many levels of it to copy, counting up from the level of [from] and [to]
*/
fun copy(from: Zone, to: Zone, width: Int, height: Int, levels: Int = 1) {
for (x in 0 until width) {
for (y in 0 until height) {
for (level in 0 until levels) {
copy(Zone(from.x + x, from.y + y, from.level + level), Zone(to.x + x, to.y + y, to.level + level))
}
}
}
}

/**
* @param from The region to be copied
* @param to The region to be replaced
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,27 @@ internal class DynamicZonesTest {
assertEquals(131140, zones.dynamicZone(zone))
}

@Test
fun `Copy a block of zones to another`() {
val from = Zone(4, 4)
val to = Zone(8, 8)
zones.copy(from, to, width = 2, height = 3, levels = 2)

assertTrue(zones.dynamic(to.region))
for (x in 0 until 2) {
for (y in 0 until 3) {
for (level in 0 until 2) {
assertNotNull(
zones.dynamicZone(Zone(to.x + x, to.y + y, level)),
"zone $x, $y, $level of the block",
)
}
}
}
assertNull(zones.dynamicZone(Zone(to.x + 2, to.y, 0)), "nothing outside the block is copied")
assertNull(zones.dynamicZone(Zone(to.x, to.y, 2)), "and no levels above it")
}

@Test
fun `Copy one region to another`() {
val from = Region(8, 8)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
package content.area.morytania.canifis

import content.entity.obj.door.DoubleDoor
import content.entity.obj.door.enterDoor
import world.gregs.voidps.engine.Script
import world.gregs.voidps.engine.entity.character.move.tele
import world.gregs.voidps.engine.entity.character.sound
import world.gregs.voidps.engine.entity.obj.replace

class CanifisTavern : Script {
init {
objectOperate("Search", "canifis_fake_wall_closed") { (target) ->
enterDoor(target)
}

objectOperate("Open", "canifis_wooden_door_left_closed,canifis_wooden_door_right_closed") { (target) ->
anim("take")
sound("locked")
Expand Down
Loading