Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ combat_def = "guard"

[khazard_warlord_underground_pass]
id = 477
respawn_delay = 50
hitpoints = 1700
att = 75
str = 78
Expand All @@ -141,7 +142,7 @@ examine = "He looks real nasty, smells bad too."
drop_table = "khazard_warlord"
max_hit_crush = 100
combat_def = "khazard_warlord"
hunt_mode = "cowardly"
hunt_mode = "tree_gnome_village_warlord"

[child_underground_pass_3]
id = 6334
Expand Down
6 changes: 0 additions & 6 deletions data/area/kandarin/battlefield/battlefield.drops.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,6 @@
type = "all"
drops = [
{ id = "bones" },
{ table = "khazard_commander_tertiary" },
]

[khazard_commander_tertiary]
drops = [
{ id = "orb_of_protection" },
]

[gnome_drop_table]
Expand Down
6 changes: 6 additions & 0 deletions data/area/kandarin/battlefield/battlefield.npcs.toml
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,17 @@ examine = "A battle mage of the gnomish variety."

[lieutenant_schepbur_battlefield]
id = 3817
dialogue = "child"
examine = "The battle tortoise commander. Sir!"

[commander_montai_battlefield]
id = 470
dialogue = "child"
examine = "It's a tree gnome."

[khazard_commander_battlefield]
id = 478
respawn_delay = 50
drop_table = "khazard_commander"
examine = "It's one of General Khazard's commanders."
hitpoints = 220
Expand All @@ -126,14 +129,17 @@ combat_def = "khazard_commander"

[tracker_gnome_1_battlefield]
id = 481
dialogue = "child"
examine = "It's a gnome who specialises in covert operations."

[tracker_gnome_2_battlefield]
id = 482
dialogue = "child"
examine = "It's a gnome who specialises in covert operations."

[tracker_gnome_3_battlefield]
id = 483
dialogue = "child"
examine = "It's a gnome who specialises in covert operations."

[mounted_terrorbird_gnome_battlefield]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,37 +1,46 @@
[king_bolren_tree_gnome_village]
id = 469
dialogue = "child"
examine = "It's a gnome. He looks important."

[bolkoy_tree_gnome_village]
id = 471
dialogue = "child"
examine = "It's a tree gnome."

[remsai_tree_gnome_village]
id = 472
dialogue = "child"
examine = "It's a tree gnome."

[elkoy_tree_gnome_village]
id = 473
dialogue = "child"

[elkoy_tree_gnome_village_2]
id = 474
dialogue = "child"

[local_gnome_tree_gnome_village]
id = 485
dialogue = "child"
examine = "It's a young tree gnome."

[kalron_tree_gnome_village]
id = 486
dialogue = "child"
examine = "He looks lost."

[evil_creature_tree_gnome_village]
id = 6333

[elkoy_tree_gnome_village_3]
id = 5179
dialogue = "child"

[elkoy_tree_gnome_village_4]
id = 5182
dialogue = "child"

[evil_creature]
id = 4615
Expand Down
9 changes: 9 additions & 0 deletions data/entity/npc/hunt_modes.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@ check_not_combat_self = true
check_not_too_strong = true
check_not_busy = true

[tree_gnome_village_warlord]
type = "player"
check_visual = "line_of_sight"
check_not_too_strong = false
check_not_combat = true
check_not_combat_self = true
check_not_busy = true
check_afk = false

# Rum Deal zombie swabs; they lose interest once the quest is over, filtered in ZombieSwab
[zombie_swab]
type = "player"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[tree_gnome_village_ballista_fire]
id = 730

[tree_gnome_village_chant]
id = 197

[tree_gnome_village_cast_orbs]
id = 198

[tree_gnome_village_tree_orbs]
id = 333

[tree_gnome_village_tree_idle]
id = 332
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[tree_gnome_village_orbs]
id = 79
height = 124
20 changes: 20 additions & 0 deletions data/quest/members/tree_gnome_village/tree_gnome_village.objs.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[tree_gnome_village_ballista]
id = 2181

[tree_gnome_village_chest_open]
id = 2182

[tree_gnome_village_chest]
id = 2183

[tree_gnome_village_railing]
id = 2186

[tree_gnome_village_crumbled_wall]
id = 12762

[tree_gnome_village_stronghold_ladder]
id = 40359

[tree_gnome_village_stronghold_ladder_top]
id = 40360
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[tree_gnome_village_stronghold_ladder]
option = "Climb-up"
tile = { x = 2503, y = 3252 }
delta = { level = 1 }

[tree_gnome_village_stronghold_ladder_top]
option = "Climb-down"
tile = { x = 2503, y = 3252, level = 1 }
delta = { level = -1 }
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ id = 111
persist = true
format = "map"
default = "unstarted"
values = { unstarted = 0, completed = 9 }
# Intermediate names are implementation milestones pending transcript verification.
values = { unstarted = 0, started = 1, logs_delivered = 2, coordinates_obtained = 3, stronghold_open = 4, orb_recovered = 5, hunt_warlord = 6, warlord_defeated = 7, orbs_recovered = 8, completed = 9 }
24 changes: 24 additions & 0 deletions data/quest/members/tree_gnome_village/tree_gnome_village.vars.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[tree_gnome_village_trackers]
persist = true
format = "int"

[tree_gnome_village_coordinate]
persist = true
format = "int"

[tree_gnome_village_montai_met]
persist = true
format = "boolean"

[tree_gnome_village_briefed]
persist = true
format = "boolean"

# 0 = orbs not handed in, 1 = ceremony can be resumed, 2 = reward ready.
[tree_gnome_village_ceremony]
persist = true
format = "int"

[tree_gnome_village_commander_met]
persist = true
format = "boolean"
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package content.area.kandarin.battlefield

import content.entity.player.dialogue.Neutral
import content.entity.player.dialogue.type.npc
import content.entity.player.dialogue.type.player
import world.gregs.voidps.engine.Script

class LieutenantSchepbur : Script {
init {
npcOperate("Talk-to", "lieutenant_schepbur_battlefield") {
npc<Neutral>("Move into position lads! eh? Who are you and what do you want?")
player<Neutral>("Who are you then?")
npc<Neutral>("Lieutenant Shepbur, commanding officer of the new Armoured Tortoise Regiment.")
player<Neutral>("There's only two tortoises here, that's hardly a regiment.")
npc<Neutral>("This is just the beginning! Gnome breeders and trainers are already working to expand the number of units. Soon we'll have hundreds of these beauties, nay thousands! And they will not only carry mages and")
npc<Neutral>("archers but other fiendish weapons of destruction of gnome devising. An army of giant tortoises will march upon this battlefield and rain the fire of our wrath upon all our enemies! Nothing will be able to stop us!")
player<Neutral>("Oooookayy...... I'll leave you to it then....")
}
}
}
13 changes: 13 additions & 0 deletions game/src/main/kotlin/content/entity/obj/Crates.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package content.entity.obj

import world.gregs.voidps.engine.Script
import world.gregs.voidps.engine.client.message

class Crates : Script {

init {
objectOperate("Search", "crate_307") {
message("You search the crates but find nothing.")
}
}
}
1 change: 1 addition & 0 deletions game/src/main/kotlin/content/quest/Quest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ val quests = setOf(
"rum_deal",
"lost_city",
"tears_of_guthix",
"tree_gnome_village",
"the_golem",
"zogre_flesh_eaters",
// mini-quests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,12 @@ import java.util.concurrent.TimeUnit
class SpiritTree : Script {

init {
objectOperate("Talk-to", "spirit_tree,spirit_tree_fullygrown,spirit_tree_gnome,spirit_tree_stronghold") {
if (!questCompleted("the_grand_tree")) {
objectOperate("Talk-to", "spirit_tree,spirit_tree_fullygrown,spirit_tree_gnome,spirit_tree_stronghold") { (target) ->
if (!canTravel(this, target.id)) {
statement("The tree doesn't feel like talking.")
if (target.id == "spirit_tree_fullygrown") {
statement("The tree won't transport you until you've completed the Tree Gnome Village quest.")
}
return@objectOperate
}
npc<Neutral>(
Expand Down Expand Up @@ -74,8 +77,9 @@ class SpiritTree : Script {
}
}

objectOperate("Teleport", "spirit_tree*") {
if (!questCompleted("the_grand_tree")) {
objectOperate("Teleport", "spirit_tree*") { (target) ->
if (!canTravel(this, target.id)) {
statement(if (target.id == "spirit_tree_fullygrown") "The tree won't transport you until you've completed the Tree Gnome Village quest." else "The tree doesn't feel like talking.")
return@objectOperate
}
updatePosition(this)
Expand All @@ -87,6 +91,9 @@ class SpiritTree : Script {
}

interfaceOption(id = "spirit_tree:text") { (_, itemSlot) ->
if (!questCompleted("tree_gnome_village") || !questCompleted(get("spirit_tree_required_quest", "tree_gnome_village"))) {
return@interfaceOption
}
val enum = EnumDefinitions.get("spirit_tree_destination_tiles")
val map = enum.map ?: return@interfaceOption
var count = 0
Expand Down Expand Up @@ -116,6 +123,12 @@ class SpiritTree : Script {
}
}

private fun canTravel(player: Player, tree: String): Boolean {
val requiredQuest = if (tree == "spirit_tree_stronghold") "the_grand_tree" else "tree_gnome_village"
player["spirit_tree_required_quest"] = requiredQuest
return player.questCompleted("tree_gnome_village") && player.questCompleted(requiredQuest)
}

/**
* How long until the next evil tree sprouts, in plain english.
*/
Expand Down
Loading