Splitting drakes out into their own job, which replaces the joinable version.

This commit is contained in:
MistakeNot4892
2023-01-30 10:03:44 +11:00
parent db2e4847ed
commit d2dffab508
18 changed files with 294 additions and 155 deletions
@@ -4,6 +4,8 @@
color = COLOR_BEASTY_BROWN
max_w_class = ITEMSIZE_LARGE
max_storage_space = INVENTORY_STANDARD_SPACE
icon_state = "harness"
icon = 'icons/mob/drake_harness.dmi'
/// Null, or a list of (/obj/item/foo = "item key"), or (/path = ("item key", proc/handler)).
var/list/attachable_types
@@ -35,6 +35,7 @@
/mob/living/simple_mob/animal/get_examine_desc()
return flavor_text || desc
/mob/living/simple_mob/animal/verb/set_flavour_text()
set name = "Set Flavour Text"
set category = "IC"
@@ -1,10 +1,9 @@
/mob/living/simple_mob/animal/sif/grafadreka
name = "grafadreka"
desc = "A large, sleek snow drake with heavy claws, powerful jaws and many pale spines along its body."
player_msg = "You are a large Sivian pack predator in symbiosis with the local bioluminescent bacteria. You can eat glowing \
tree fruit to fuel your <b>ranged spitting attack</b> and <b>poisonous bite</b> (on <span class = 'danger'>harm intent</span>), as well as <b>healing saliva</b> \
(on <b><font color = '#009900'>help intent</font></b>).<br>There are humans moving through your territory; whether you help them get home safely, or treat them as a snack, \
is up to you."
player_msg = {"<b>You are a large Sivian pack predator.</b>
There are humans moving through your territory; whether you help them get home safely, or treat them as a snack, is up to you.
You can eat glowing tree fruit to fuel your <b>ranged spitting attack</b> and <b>poisonous bite</b> (on <span class = 'danger'>harm intent</span>), as well as <b>healing saliva</b> (on <b><font color = '#009900'>help intent</font></b>)."}
color = "#608894"
icon = 'icons/mob/drake_adult.dmi'
catalogue_data = list(/datum/category_item/catalogue/fauna/grafadreka)
@@ -96,7 +95,13 @@
/// A convenience value for whether this drake is the trained subtype.
var/trained_drake = FALSE
var/list/understands_languages
// universal_understand is buggy and produces double lines, so we'll just do this hack instead.
/mob/living/simple_mob/animal/sif/grafadreka/say_understands(mob/other, datum/language/speaking)
if (!speaking || (speaking.name in understands_languages))
return TRUE
return ..()
/mob/living/simple_mob/animal/sif/grafadreka/Initialize()
charisma = rand(5, 15)
@@ -8,6 +8,7 @@
var/const/ATTACHED_RADIO = "radio"
var/const/ATTACHED_ARMOR = "armor plate"
var/const/ATTACHED_LIGHT = "light"
var/const/ATTACHED_ID = "access card"
/// An attachable_types list shared between drake harness instances.
var/static/list/grafadreka_attachable_types = list(
@@ -21,9 +22,14 @@
ATTACHED_ARMOR,
/obj/item/storage/internal/animal_harness/grafadreka/proc/UpdateArmor
),
/obj/item/card/id = ATTACHED_ID,
/obj/item/flashlight = ATTACHED_LIGHT
)
/obj/item/storage/internal/animal_harness/grafadreka/GetIdCard()
return attached_items[ATTACHED_ID]
/obj/item/storage/internal/animal_harness/grafadreka/Destroy()
attachable_types = null
return ..()
@@ -60,36 +66,3 @@
/obj/item/storage/mre/menu13
))
new mre_type (src)
// Station/Science drake harness contents on spawn
/obj/item/storage/internal/animal_harness/grafadreka/expedition/CreateAttachments()
var/mob/living/owner = loc
if (!istype(owner))
return
attached_items[ATTACHED_RADIO] = new /obj/item/radio (owner)
new /obj/item/stack/medical/bruise_pack (src)
new /obj/item/stack/medical/ointment (src)
new /obj/item/storage/mre/menu13 (src) // The good stuff
var/obj/item/gps/explorer/on/gps = new (owner)
gps.SetTag(owner.name)
attached_items[ATTACHED_GPS] = gps
attached_items[ATTACHED_LIGHT] = new /obj/item/flashlight/glowstick/grafadreka (owner)
/obj/item/flashlight/glowstick/grafadreka
name = "high duration glowstick"
action_button_name = null
/obj/item/flashlight/glowstick/grafadreka/Initialize()
. = ..()
var/obj/item/flashlight/glowstick/archetype = pick(typesof(/obj/item/flashlight/glowstick) - type)
flashlight_colour = initial(archetype.flashlight_colour)
icon_state = initial(archetype.icon_state)
item_state = initial(archetype.item_state)
fuel = rand(3200, 4800)
on = TRUE
update_icon()
START_PROCESSING(SSobj, src)
@@ -3,6 +3,11 @@
icon = 'icons/mob/drake_baby.dmi'
mob_size = MOB_SMALL
desc = "An immature snow drake, not long out of the shell."
player_msg = {"<b>You are a very small Sivian pack predator.</b>
The Sivian forest is dark and full of terrors, and you are young and weak. Try to stay alive.
You can eat glowing tree fruit to fuel your <b>ranged spitting attack</b> and <b>poisonous bite</b> (on <span class = 'danger'>harm intent</span>), as well as <b>healing saliva</b> (on <b><font color = '#009900'>help intent</font></b>)."}
is_baby = TRUE
offset_compiled_icon = null
@@ -106,17 +106,6 @@ Field studies suggest analytical abilities on par with some species of cepholapo
weaken = 0
eyeblur = 2
/obj/structure/animal_den/ghost_join/grafadreka
name = "drake den"
critter = /mob/living/simple_mob/animal/sif/grafadreka
/obj/structure/animal_den/ghost_join/grafadreka_hatchling
name = "drake hatchling den"
critter = /mob/living/simple_mob/animal/sif/grafadreka/hatchling
/mob/living/simple_mob/animal/sif/grafadreka/rainbow/setup_colours()
glow_colour = get_random_colour(TRUE)
fur_colour = get_random_colour(TRUE)
@@ -1,9 +1,9 @@
/mob/living/simple_mob/animal/sif/grafadreka/trained
desc = "A large, sleek snow drake with heavy claws, powerful jaws and many pale spines along its body. This one is wearing some kind of harness; maybe it belongs to someone."
player_msg = "You are a large Sivian pack predator in symbiosis with the local bioluminescent bacteria. You can eat glowing \
tree fruit to fuel your <b>ranged spitting attack</b> and <b>poisonous bite</b> (on <span class = 'danger'>harm intent</span>), as well as <b>healing saliva</b> \
(on <b><font color = '#009900'>help intent</font></b>).<br>Using <font color='#e0a000'>grab intent</font> you can pick up and drop items on by clicking them or yourself, \
and can interact with some simple machines like buttons and levers.<br>Unlike your wild kin, you are <b>trained</b> and work happily with your two-legged packmates."
desc = "A sleek snow drake with heavy claws, powerful jaws and many sharp spines along its body. This one is wearing some kind of harness; maybe it belongs to someone."
player_msg = {"<b>You are a large Sivian pack predator.</b>
Unlike your wild kin, you are <b>trained</b> and work happily with your two-legged packmates.
You can eat glowing tree fruit to fuel your <b>ranged spitting attack</b> and <b>poisonous bite</b> (on <span class = 'danger'>harm intent</span>), as well as <b>healing saliva</b> (on <b><font color = '#009900'>help intent</font></b>).
Using <font color='#e0a000'>grab intent</font> you can pick up and drop items by clicking them or yourself, and can interact with some simple machines like buttons and levers."}
faction = "station"
ai_holder_type = null // These guys should not exist without players.
gender = PLURAL // Will take gender from prefs = set to non-NEUTER here to avoid randomizing in Initialize().
@@ -11,6 +11,10 @@
dexterity = MOB_DEXTERITY_SIMPLE_MACHINES
harness = /obj/item/storage/internal/animal_harness/grafadreka/trained
trained_drake = TRUE
understands_languages = list(
LANGUAGE_GALCOM,
LANGUAGE_SIVIAN
)
/// On clicking with an item, stuff that should use behaviors instead of being placed in storage.
var/static/list/allow_type_to_pass = list(
@@ -19,23 +23,21 @@
/obj/item/reagent_containers/syringe
)
var/static/list/trained_drake_languages = list(
LANGUAGE_GALCOM,
LANGUAGE_SIVIAN
)
/mob/living/simple_mob/animal/sif/grafadreka/trained/Destroy()
if (istype(harness))
QDEL_NULL(harness)
return ..()
/mob/living/simple_mob/animal/sif/grafadreka/trained/GetIdCard()
return harness?.GetIdCard()
/mob/living/simple_mob/animal/sif/grafadreka/trained/add_glow()
. = ..()
if (. && harness)
var/image/I = .
I.icon_state = "[I.icon_state]-pannier"
I.icon_state = "[I.icon_state]-[harness.icon_state]"
/mob/living/simple_mob/animal/sif/grafadreka/trained/Logout()
@@ -61,17 +63,10 @@
return harness.handle_attack_hand(user)
// universal_understand is buggy and produces double lines, so we'll just do this hack instead.
/mob/living/simple_mob/animal/sif/grafadreka/trained/say_understands(mob/other, datum/language/speaking)
if (!speaking || (speaking.name in trained_drake_languages))
return TRUE
return ..()
/mob/living/simple_mob/animal/sif/grafadreka/trained/update_icon()
. = ..()
if (harness)
var/image/I = image(icon, "[current_icon_state]-pannier")
var/image/I = image(harness.icon, "[current_icon_state]-[harness.icon_state]")
I.color = harness.color
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE|KEEP_APART)
if (offset_compiled_icon)