From d2dffab508b2b88366f8f0db2639bbb9a51771ac Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Wed, 9 Nov 2022 23:43:54 +1100 Subject: [PATCH] Splitting drakes out into their own job, which replaces the joinable version. --- code/game/jobs/job/science.dm | 10 +- code/game/jobs/jobs.dm | 1 + .../preference_setup/general/02_language.dm | 2 +- .../subtypes/animal/_animal_harness.dm | 2 + .../simple_mob/subtypes/animal/animal.dm | 1 + .../animal/sif/grafadreka/grafadreka.dm | 13 +- .../sif/grafadreka/grafadreka_harness.dm | 39 +-- .../sif/grafadreka/grafadreka_hatchling.dm | 5 + .../animal/sif/grafadreka/grafadreka_misc.dm | 11 - .../sif/grafadreka/grafadreka_trained.dm | 35 ++- .../reagents/reagent_containers/syringes.dm | 10 + icons/mob/drake_adult.dmi | Bin 12561 -> 11482 bytes icons/mob/drake_harness.dmi | Bin 0 -> 1674 bytes maps/cynosure/cynosure-2.dmm | 85 ++++--- maps/cynosure/cynosure-7.dmm | 3 + maps/cynosure/cynosure_jobs.dm | 222 ++++++++++++++---- maps/cynosure/datums/spawn.dm | 4 +- .../wilderness/grafadreka_den.dmm | 6 +- 18 files changed, 294 insertions(+), 155 deletions(-) create mode 100644 icons/mob/drake_harness.dmi diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 71fad0750b..ac2fb4b174 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -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 ////////////////////////////////// diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 0ef50a6875..4368837344 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -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)) ) diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index faadc6e514..366e006fc7 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -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 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/_animal_harness.dm b/code/modules/mob/living/simple_mob/subtypes/animal/_animal_harness.dm index 856055b7f7..2833c3caf9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/_animal_harness.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/_animal_harness.dm @@ -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 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm b/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm index b37b5da8ea..5074c18622 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm @@ -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" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka.dm index 4a118ddb84..0f9ae20ca7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka.dm @@ -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 ranged spitting attack and poisonous bite (on harm intent), as well as healing saliva \ - (on help intent).
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 = {"You are a large Sivian pack predator. +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 ranged spitting attack and poisonous bite (on harm intent), as well as healing saliva (on help intent)."} 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) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_harness.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_harness.dm index 8f2c7a92af..039e29964a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_harness.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_harness.dm @@ -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) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_hatchling.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_hatchling.dm index 99297698de..8d21001ccf 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_hatchling.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_hatchling.dm @@ -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 = {"You are a very small Sivian pack predator. +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 ranged spitting attack and poisonous bite (on harm intent), as well as healing saliva (on help intent)."} + is_baby = TRUE offset_compiled_icon = null diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_misc.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_misc.dm index 0b6668009e..f3e05ded4a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_misc.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_misc.dm @@ -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) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_trained.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_trained.dm index a0e834c60d..5002a5307c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_trained.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka/grafadreka_trained.dm @@ -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 ranged spitting attack and poisonous bite (on harm intent), as well as healing saliva \ - (on help intent).
Using grab intent you can pick up and drop items on by clicking them or yourself, \ - and can interact with some simple machines like buttons and levers.
Unlike your wild kin, you are trained 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 = {"You are a large Sivian pack predator. +Unlike your wild kin, you are trained and work happily with your two-legged packmates. +You can eat glowing tree fruit to fuel your ranged spitting attack and poisonous bite (on harm intent), as well as healing saliva (on help intent). +Using grab intent 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) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 6b0a01e89c..abe757b16a 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -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." diff --git a/icons/mob/drake_adult.dmi b/icons/mob/drake_adult.dmi index 4d797a9c4141fe45ead4b493590b53f8e7f06465..9a21b50bbc42a1248b2bcef562e66486f212bf4f 100644 GIT binary patch literal 11482 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 are a large Sivian pack predator working with the Science team. +You have been trained by the Xenobiology department 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 ranged spitting attack and poisonous bite (on harm intent), as well as healing saliva (on help intent). +Using grab intent 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 = {" + + + + +

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.

+

General behavior

+

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?

+

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.

+

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.

+

Egg-layers - nests of 1-3 eggs in caves north of Cynosure - influenced by different environment? Terrible parents, hatchlings always wandering off & getting eaten by spiders.

+

Training results

+

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.

+

Can be encouraged to be careful with spitting - related to pack hunting instincts? - not always reliable.

+

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.

+

Can understand buttons/levers, door panels, access cards and automatic doors.

+

Medical care

+
    +
  • DO NOT TAKE OFFPLANET. Listlessness, faded glow, shedding of skin and lining of innards, death in ~3 days. LEAVE THEM ON SIF.
  • +
  • Per above, Security and Customs are very mad about import/export of controlled species. Don't take them on the shuttle.
  • +
  • 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).
  • +
  • For minor injuries, they'll probably sort themselves out.
  • +
  • Standard human-compatible bandages, biogels and ointments seem to work fine for them.
  • +
  • Good reactions to bicaridine - use to reduce scarring & promote recovery from serious wounds.
  • +
  • Don't try to feed them a pill, they're worse than cats.
  • +
+ + "} diff --git a/maps/cynosure/datums/spawn.dm b/maps/cynosure/datums/spawn.dm index 8d91a40810..d61caf7204 100644 --- a/maps/cynosure/datums/spawn.dm +++ b/maps/cynosure/datums/spawn.dm @@ -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. diff --git a/maps/submaps/surface_submaps/wilderness/grafadreka_den.dmm b/maps/submaps/surface_submaps/wilderness/grafadreka_den.dmm index 26d49be779..d7ba9e7f8f 100644 --- a/maps/submaps/surface_submaps/wilderness/grafadreka_den.dmm +++ b/maps/submaps/surface_submaps/wilderness/grafadreka_den.dmm @@ -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) = {"