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
+9 -1
View File
@@ -112,7 +112,10 @@
outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist
job_description = "A Xenobiologist studies esoteric lifeforms, usually in the relative safety of their lab. They attempt to find ways to benefit \
from the byproducts of these lifeforms, and their main subject at present is the Giant Slime."
alt_titles = list("Xenobotanist" = /datum/alt_title/xenobot)
alt_titles = list(
"Xenobotanist" = /datum/alt_title/xenobot,
"Xenofauna Technician" = /datum/alt_title/xenovet
)
// Xenibiologist Alt Titles
/datum/alt_title/xenobot
@@ -120,6 +123,11 @@
title_blurb = "A Xenobotanist grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \
is both safe and beneficial to the station, they may choose to introduce it to the rest of the crew."
/datum/alt_title/xenovet
title = "Xenofauna Technician"
title_blurb = "A Xenofauna Technician works with the alien fauna living in the territory around the station, often out in the field. They are also responsible \
for training and tending to the station's small drake population."
//////////////////////////////////
// Roboticist
//////////////////////////////////
+1
View File
@@ -44,6 +44,7 @@ var/global/const/CHAPLAIN =(1<<10)
var/global/const/ASSISTANT =(1<<11)
var/global/const/BRIDGE =(1<<12)
var/global/const/HERMIT =(1<<13)
var/global/const/DOGGO =(1<<14)
/proc/guest_jobbans(var/job)
return ( (job in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND)) || (job in SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC)) || (job in SSjob.get_job_titles_in_department(DEPARTMENT_SECURITY)) )
@@ -16,7 +16,7 @@
var/datum/species/S = GLOB.all_species[pref.species]
if(!istype(S))
return
if(pref.alternate_languages.len > S.num_alternate_languages)
pref.alternate_languages.len = S.num_alternate_languages // Truncate to allowed length
@@ -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)
@@ -352,6 +352,16 @@
mode = SYRINGE_INJECT
update_icon()
/obj/item/reagent_containers/syringe/bicaridine
name = "Syringe (bicaridine)"
desc = "Contains bicaridine."
/obj/item/reagent_containers/syringe/bicaridine/Initialize()
. = ..()
reagents.add_reagent("bicaridine", 15)
mode = SYRINGE_INJECT
update_icon()
/obj/item/reagent_containers/syringe/antiviral
name = "Syringe (spaceacillin)"
desc = "Contains antiviral agents."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

+46 -39
View File
@@ -11814,14 +11814,10 @@
/turf/simulated/floor/tiled,
/area/surface/station/security/lockerroom)
"fpa" = (
/obj/effect/floor_decal/steeldecal/steel_decals5{
dir = 4
/obj/structure/dogbed,
/obj/effect/landmark/start{
name = "Trained Drake"
},
/obj/effect/floor_decal/steeldecal/steel_decals6,
/obj/effect/floor_decal/steeldecal/steel_decals6{
dir = 4
},
/obj/machinery/recharge_station,
/turf/simulated/floor/tiled/techmaint,
/area/surface/station/garage)
"fpB" = (
@@ -14053,6 +14049,9 @@
/obj/effect/landmark/start{
name = "Survivalist"
},
/obj/effect/landmark/start{
name = "Trained Drake"
},
/turf/simulated/floor/outdoors/mask,
/area/surface/outside/plains/normal)
"gve" = (
@@ -19334,6 +19333,12 @@
},
/turf/simulated/floor/tiled/steel_grid,
/area/surface/station/rnd/hallway/stairwell)
"jaH" = (
/obj/effect/floor_decal/steeldecal/steel_decals5{
dir = 4
},
/turf/simulated/floor/tiled/techmaint,
/area/surface/station/garage)
"jaW" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/door/airlock/external{
@@ -35869,8 +35874,10 @@
/turf/simulated/floor/tiled/milspec/sterile,
/area/shuttle/large_escape_pod1/station)
"qew" = (
/obj/structure/table/steel_reinforced,
/turf/simulated/floor/tiled,
/obj/effect/floor_decal/industrial/danger{
dir = 4
},
/turf/simulated/floor/tiled/techmaint,
/area/surface/station/garage)
"qeP" = (
/obj/machinery/atmospherics/tvalve/mirrored/bypass,
@@ -37181,6 +37188,14 @@
},
/turf/simulated/floor/carpet,
/area/surface/station/library)
"qCU" = (
/obj/structure/dogbed,
/obj/effect/landmark/start{
name = "Trained Drake"
},
/obj/item/reagent_containers/food/snacks/xenomeat/spidermeat,
/turf/simulated/floor/tiled/techmaint,
/area/surface/station/garage)
"qCW" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
@@ -40457,6 +40472,9 @@
/obj/effect/landmark/start{
name = "Survivalist"
},
/obj/effect/landmark/start{
name = "Trained Drake"
},
/turf/simulated/floor/outdoors/dirt/sif,
/area/surface/outpost/checkpoint)
"scm" = (
@@ -42356,18 +42374,6 @@
/turf/simulated/floor/tiled,
/area/surface/station/hallway/primary/groundfloor/east)
"sXq" = (
/obj/effect/floor_decal/borderfloor{
dir = 1
},
/obj/effect/floor_decal/industrial/danger{
dir = 1
},
/obj/effect/floor_decal/borderfloor/corner{
dir = 8
},
/obj/effect/floor_decal/corner/green/bordercorner{
dir = 8
},
/turf/simulated/floor/tiled/techmaint,
/area/surface/station/garage)
"sXx" = (
@@ -51949,9 +51955,10 @@
/turf/simulated/floor/plating,
/area/surface/station/ai/upload)
"xwh" = (
/obj/machinery/mech_recharger,
/obj/effect/landmark/robot_platform/explorer,
/turf/simulated/floor/tiled/dark,
/obj/structure/table/steel_reinforced,
/obj/item/reagent_containers/syringe/bicaridine,
/obj/item/book/manual/drake_handling,
/turf/simulated/floor/tiled/techmaint,
/area/surface/station/garage)
"xxc" = (
/obj/effect/floor_decal/corner/white/diagonal,
@@ -82222,7 +82229,7 @@ nCe
sSy
ufW
fpa
sXq
fDL
kYh
mLL
aOC
@@ -82479,9 +82486,9 @@ nCe
alv
ufW
xwh
kqo
vFY
vFY
sXq
sXq
sXq
lze
aOr
syY
@@ -82735,10 +82742,10 @@ nCe
nCe
cPd
seC
esv
kqo
qBQ
vQG
qCU
sXq
jaH
jaH
qZC
kPd
piz
@@ -82993,9 +83000,9 @@ twu
fIk
xUd
qew
kqo
vFY
vFY
sXq
qBQ
vQG
mbv
kPd
kPd
@@ -83251,8 +83258,8 @@ jmX
seC
uFA
kqo
qBQ
iaO
vFY
vFY
fDL
dzm
huS
@@ -83508,8 +83515,8 @@ fIk
ufW
tdK
kqo
vFY
vFY
qBQ
iaO
mjO
uBH
mtC
+3
View File
@@ -274,6 +274,9 @@
/obj/effect/landmark/start{
name = "Survivalist"
},
/obj/effect/landmark/start{
name = "Trained Drake"
},
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"Mf" = (
+181 -41
View File
@@ -1,5 +1,4 @@
#define CRASH_SURVIVOR_TITLE "Crash Survivor"
#define DRAKE_SURVIVOR_TITLE "Tamed Drake"
// Pilots
@@ -87,11 +86,7 @@ var/global/const/access_explorer = 43
offmap_spawn = TRUE
substitute_announce_title = "Colonist"
banned_job_species = null
announce_arrival_and_despawn = FALSE
alt_titles = list(
CRASH_SURVIVOR_TITLE = /datum/alt_title/crash_survivor,
DRAKE_SURVIVOR_TITLE = /datum/alt_title/working_drake
)
alt_titles = list(CRASH_SURVIVOR_TITLE = /datum/alt_title/crash_survivor)
var/const/SPAWN_DAMAGE_MULT = 0.15
var/const/TOTAL_INJURIES = 3
var/static/list/pod_templates = list(
@@ -111,11 +106,6 @@ var/global/const/access_explorer = 43
title_blurb = "Crashing in the wilderness of Sif's anomalous region is not a recommended holiday activity."
title_outfit = /decl/hierarchy/outfit/job/survivalist/crash_survivor
/datum/alt_title/working_drake
title = DRAKE_SURVIVOR_TITLE
title_outfit = /decl/hierarchy/outfit/siffet
title_blurb = "Some of the bolder colonists in Sif's anomalous region have partially domesticated some of the the local predators as working animals."
/datum/job/survivalist/equip(mob/living/carbon/human/H, alt_title)
. = ..()
if(.)
@@ -209,54 +199,111 @@ var/global/const/access_explorer = 43
existing_points = get_existing_spawn_points()
return existing_points
#undef CRASH_SURVIVOR_TITLE
/datum/job/survivalist/handle_nonhuman_mob(var/mob/living/carbon/human/player, var/alt_title)
/datum/job/trained_animal
title = "Trained Drake"
departments = list(DEPARTMENT_PLANET)
department_flag = CIVILIAN
flag = DOGGO
selection_color = "#6085a8"
total_positions = 2
spawn_positions = 1
faction = "Station"
supervisors = "your conscience"
economic_modifier = 1
access = list()
minimal_access = list()
outfit_type = /decl/hierarchy/outfit/siffet
job_description = "A number of the bolder folks in Sif's anomalous region have partially domesticated some of the local wildlife as working animals."
assignable = FALSE
has_headset = FALSE
account_allowed = FALSE
offmap_spawn = TRUE
announce_arrival_and_despawn = FALSE
banned_job_species = null
if(alt_title == DRAKE_SURVIVOR_TITLE)
alt_titles = list(
"Expedition Drake" = /datum/alt_title/drake/explorer_drake,
"Wild Drake" = /datum/alt_title/drake/wild_drake,
"Wild Hatchling" = /datum/alt_title/drake/wild_hatchling
)
var/mob/living/simple_mob/animal/sif/grafadreka/trained/doggo = new(player.loc)
/datum/alt_title/drake
title = "Trained Drake"
title_blurb = "A number of the bolder folks in Sif's anomalous region have partially domesticated some of the local wildlife as working animals."
var/drake_type = /mob/living/simple_mob/animal/sif/grafadreka/trained
// Copy over some prefs.
if(player.client && player.client.prefs)
/datum/alt_title/drake/explorer_drake
title = "Expedition Drake"
title_blurb = "The Cynosure Xenobiology department has spearheaded an effort to train some of the intelligent local wildlife to assist with Exploration field operations."
drake_type = /mob/living/simple_mob/animal/sif/grafadreka/trained/station
var/datum/preferences/P = player.client.prefs
doggo.gender = P.identifying_gender
doggo.flavor_text = LAZYACCESS(P.flavor_texts, "general")
/datum/alt_title/drake/wild_drake
title = "Wild Drake"
title_blurb = "Several packs of wild grafadreka have been pushed into the Anomalous Region by changing climate and rough weather, and sometimes come into contact with the locals."
drake_type = /mob/living/simple_mob/animal/sif/grafadreka
/datum/alt_title/drake/wild_hatchling
title = "Wild Hatchling"
title_blurb = "Wild grafadreka are not particularly good parents, and their hatchlings often wander away or are abandoned to their own devices."
drake_type = /mob/living/simple_mob/animal/sif/grafadreka/hatchling
/datum/job/trained_animal/handle_nonhuman_mob(var/mob/living/carbon/human/player, var/alt_title)
var/datum/alt_title/drake/drake_setup = alt_titles[alt_title] || /datum/alt_title/drake
var/drake_type = istype(drake_setup) ? drake_setup.drake_type : initial(drake_setup.drake_type)
var/mob/living/critter = new drake_type(player.loc)
// Copy over some prefs.
if(player.client && player.client.prefs)
// Set various strings and preference-loaded values.
var/datum/preferences/P = player.client.prefs
critter.gender = P.identifying_gender
critter.flavor_text = LAZYACCESS(P.flavor_texts, "general")
if(player.mind)
critter.name = player.mind.name
critter.real_name = critter.name
if(istype(critter, /mob/living/simple_mob/animal/sif/grafadreka))
var/mob/living/simple_mob/animal/sif/grafadreka/drake = critter
// Protect against unset defaults creating a drake-shaped void.
var/col = rgb(P.r_eyes, P.g_eyes, P.b_eyes)
if(col != COLOR_BLACK)
doggo.eye_colour = col
drake.eye_colour = col
col = rgb(P.r_facial, P.g_facial, P.b_facial)
if(col != COLOR_BLACK)
doggo.fur_colour = col
drake.fur_colour = col
col = rgb(P.r_hair, P.g_hair, P.b_hair)
if(col != COLOR_BLACK)
doggo.base_colour = col
doggo.update_icon()
drake.base_colour = col
drake.update_icon()
for(var/language in P.alternate_languages)
LAZYDISTINCTADD(drake.understands_languages, language)
var/obj/item/storage/internal/animal_harness/grafadreka/harness = drake.harness
if (istype(harness))
var/obj/item/gps/gps = harness.attached_items[harness.ATTACHED_GPS]
if (gps)
gps.SetTag(drake.name)
// Transfer over key.
if(player.mind)
doggo.name = player.mind.name
doggo.real_name = doggo.name
player.mind.transfer_to(doggo)
doggo.mind.original = doggo
player.mind.transfer_to(critter)
critter.mind.original = critter
else
doggo.key = player.key
critter.key = player.key
qdel(player)
// Pass the mob back.
qdel(player)
prompt_rename(doggo)
var/obj/item/storage/internal/animal_harness/grafadreka/harness = doggo.harness
if (!istype(harness))
return doggo
var/obj/item/gps/gps = harness.attached_items[harness.ATTACHED_GPS]
if (gps)
gps.SetTag(doggo.name)
return doggo
prompt_rename(critter)
return critter
return ..()
/datum/job/survivalist/proc/prompt_rename(var/mob/player)
/datum/job/trained_animal/proc/prompt_rename(var/mob/player)
set waitfor = FALSE
sleep(1 SECOND)
@@ -273,5 +320,98 @@ var/global/const/access_explorer = 43
if(player.mind)
player.mind.name = player.real_name
#undef CRASH_SURVIVOR_TITLE
#undef DRAKE_SURVIVOR_TITLE
/obj/item/card/id/drake_expedition
name = "animal access card"
access = list(access_explorer, access_research)
/obj/item/storage/internal/animal_harness/grafadreka/expedition
name = "expedition harness"
color = null
icon_state = "explorer"
/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)
// 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_ID] = new /obj/item/card/id/drake_expedition (owner)
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)
/mob/living/simple_mob/animal/sif/grafadreka/trained/station
player_msg = {"<b>You are a large Sivian pack predator working with the Science team.</b>
You have been <b>trained by the Xenobiology department</b> to assist with expeditions and field work, and are an official part of the Exploration staff."
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."}
harness = /obj/item/storage/internal/animal_harness/grafadreka/expedition
/obj/item/book/manual/drake_handling
name = "Care And Handling Of The Sivian Snow Drake v0.1.12b"
icon_state = "book3"
author = "Xenoscience Team"
title = "Care And Handling Of The Sivian Snow Drake v0.1.12b"
/obj/item/book/manual/drake_handling/Initialize()
. = ..()
dat = {"<html>
<head>
<style>
h1 {font-size: 18px; margin: 15px 0px 5px;}
h2 {font-size: 15px; margin: 15px 0px 5px;}
li {margin: 2px 0px 2px 15px;}
ul {margin: 5px; padding: 0px;}
ol {margin: 5px; padding: 0px 15px;}
body {font-size: 13px; font-family: Verdana;}
</style>
</head>
<body>
<p><i>This seems to be a notebook full of handwritten notes, loosely organized by topic. There's a crude index scribbled on the inside of the cover, but it's not very useful.</i></p>
<h2>General behavior</h2>
<p>Grafadreka (drakes) are actually pretty timid and easily spooked despite their size and appearance. In the wild, they hunt in groups and will hit and run using their stunning spit, avoiding direct engagement unless given no other option. They seem to have an inherent social structure, with a dominant packmember taking the lead but the pack as a whole working as a team. May be useful for training?</p>
<p>Instinctive aggression towards spiders & smaller Sivian wildlife - can be trained out of them with difficulty. Wild populations can live entirely off spider meat or carrion.</p>
<p>Quite social animals - will seek out humans or other creatures in the absence of packmembers just for company. Very food motivated! Seem to enjoy working with personnel out in the field or hanging out in social areas like the bar.</p>
<p>Egg-layers - nests of 1-3 eggs in caves north of Cynosure - influenced by different environment? <i>Terrible</i> parents, hatchlings always wandering off & getting eaten by spiders.</p>
<h2>Training results</h2>
<p>Signal training very successful - almost every drake responds positively to audible cues like summon whistles, vocal cues like 'up' and 'down' - strong indicators of language understanding.</p>
<p>Can be encouraged to be careful with spitting - related to pack hunting instincts? - not always reliable.</p>
<p>Good visual memory, can be trained to seek out specific kinds of object with vocal cues - implies use of tools could be trainable if they had better manual dexterity.</p>
<p>Can understand buttons/levers, door panels, access cards and automatic doors.</p>
<h2>Medical care</h2>
<ul>
<li>DO NOT TAKE OFFPLANET. Listlessness, faded glow, shedding of skin and lining of innards, death in ~3 days. LEAVE THEM ON SIF.</li>
<li>Per above, Security and Customs are very mad about import/export of controlled species. Don't take them on the shuttle.</li>
<li>Their saliva has a lot of bacteria and Sivian organic chemicals in it. Good for encouraging healing in Sivian wildlife, poisonous to humans (but does stop bleeding).</li>
<li>For minor injuries, they'll probably sort themselves out.</li>
<li>Standard human-compatible bandages, biogels and ointments seem to work fine for them.</li>
<li>Good reactions to bicaridine - use to reduce scarring & promote recovery from serious wounds.</li>
<li>Don't try to feed them a pill, they're worse than cats.</li>
</ul>
</body>
</html>"}
+2 -2
View File
@@ -1,5 +1,5 @@
/datum/spawnpoint/wilderness
restrict_job = list("Survivalist") // Nobody except survivalists.
restrict_job = list("Survivalist", "Trained Drake") // Nobody except survivalists.
/datum/spawnpoint/checkpoint
permit_offsite_job = list("Survivalist") // Survivalists can spawn here but not on the other 'civilized' spawns.
permit_offsite_job = list("Survivalist", "Trained Drake") // Survivalists can spawn here but not on the other 'civilized' spawns.
@@ -2,14 +2,14 @@
"b" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/GrafadrekaDen)
"c" = (/obj/random/junk,/obj/random/medical/pillbottle,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"d" = (/obj/random/junk,/obj/random/humanoidremains,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"e" = (/obj/random/mob/sif/grafadreka,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"e" = (/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"f" = (/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"g" = (/obj/structure/animal_den/ghost_join/grafadreka_hatchling,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"g" = (/obj/structure/animal_den,/obj/random/mob/sif/grafadreka,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"h" = (/obj/random/junk,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"i" = (/obj/random/outcrop,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"j" = (/obj/random/humanoidremains,/obj/random/coin,/obj/random/contraband,/obj/random/projectile/random,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"o" = (/obj/random/humanoidremains,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"D" = (/obj/structure/animal_den/ghost_join/grafadreka,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"D" = (/obj/structure/animal_den,/obj/random/mob/sif/grafadreka,/turf/simulated/mineral/floor/sif,/area/submap/GrafadrekaDen)
"P" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/GrafadrekaDen)
(1,1,1) = {"