Files
Bubberstation/code/datums/dog_fashion.dm
John Willard b97f3779b2 Re-adds the Dragoon tomb ruin & Spear (#90781)
It was removed in https://github.com/tgstation/tgstation/pull/27799
because the spear was broken and the Flans' AI sucked with not-great
sprites and was all just one big reference. Original addition:
https://github.com/tgstation/tgstation/pull/22270

This re-adds it, updates the map (now using airless turfs) with extra
ambiance, using ash whelps (lavaland variation of ice whelps) instead of
Flans, re-adds the spear, and adds armor as well this time around.

The spear gives you a jump ability to crash down upon a player below
you, rather than teleporting to wherever you throw the spear at. You
can't attack while mid-air, you can go through tables but not
walls/doors, and you also can't un-dualwield or drop the spear mid-jump.
Landing on a mob deals double damage to them (36 to unarmored people),
while landing on objects deals 150 damage to them (taken from savannah's
jump ability, which was in turn taken from hulk's punching)
It's also got some extra throw force (24 compared to default spear's 20)

The armor has basic security-level armor but covers your whole body.
Does not include space protection, and can be worn by Ian.

Video demonstration

https://github.com/user-attachments/assets/a77c3a0d-17d2-4e8d-88b6-cdbca8b1f2c3

New sprites demonstration

https://github.com/user-attachments/assets/0e465351-5484-406f-8adc-ffa1ac180daf

Armor demonstration

https://github.com/user-attachments/assets/abdfcac6-65bf-443c-bde2-27d157ee3a80

Map

![436285657-104a555f-60dc-46f0-8283-a92db2ca5352](https://github.com/user-attachments/assets/a1677c9a-7157-4562-9703-5ad44c923e8d)

With the changes in https://github.com/tgstation/tgstation/pull/90771 I
had to mess with ash whelp abilities a bit, I decided to make them use
cold fire instead of hardcoding blue color on top of the fire sprites,
and it now acts accordingly too

https://github.com/user-attachments/assets/cfca0d70-d13d-4c73-996d-2d4a7519866d

The jump was taken from Savannah Ivanov, and Goof's bunny jumping.

This Re-implements a old spear that got removed for its buggyness/bad
mapping and on the authors request as well not wanting to deal with it.

Re-introduces the SkyBulge as a space ruin, referencing Dragoons from
Final Fantasy. this just like any normal spear, but using the savannah
jump mechanic, this allows you to close distances with the spear
avoiding ranged projectiles in the jump, and if you directly land on
your target you will do double the damage.

🆑 Ezel/Improvedname, Toriate, JohnFulpWillard
add: Re-added the Dragoon Tomb lair, now has a Skybulge spear and
Drachen armor.
balance: Ice whelps now spit out cold fire.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2025-06-05 18:50:51 -04:00

265 lines
9.6 KiB
Plaintext

/datum/dog_fashion
///Name modifier for the dog that we're dressing up
var/name = null
///Description modifier for the dog that we're dressing up
var/desc = null
///Hearable emotes modifier for the dog that we're dressing up
var/list/emote_hear = list()
///Visible emotes modifier for the dog that we're dressing up
var/list/emote_see = list()
///Speech modifier for the dog that we're dressing up
var/list/speak = list()
///Speech verb modifier for the dog that we're dressing up
var/list/speak_emote = list()
// This isn't applied to the dog, but stores the icon_state of the
// sprite that the associated item uses
///Icon path for the fashion item
var/icon_file = null
///Icon state for the fashion item
var/obj_icon_state = null
///Alpha level (opacity) modifier of the fashion item
var/obj_alpha
///Color modifier of the fasion item
var/obj_color
/datum/dog_fashion/New(mob/fashionable_mob)
//replace the placeholder for the real unmodified name in the name of the dog
name = replacetext(name, "%REAL_NAME%", fashionable_mob.real_name)
//replace the placeholder for the capitalized real unmodified name in the name of the dog
name = replacetext(name, "%CAPITAL_REAL_NAME%", capitalize(fashionable_mob.real_name))
//replace the placeholder for the current full name, which includes our name modifiers
desc = replacetext(desc, "%NAME%", name)
//replace the placeholder for the real unmodified name in the description of the dog
desc = replacetext(desc, "%REAL_NAME%", fashionable_mob.real_name)
//replace the placeholder for the capitalized real unmodified name in the description of the dog
desc = replacetext(desc, "%CAPITAL_REAL_NAME%", capitalize(fashionable_mob.real_name))
///Applies the name, description and speak emote modifiers to the dog
/datum/dog_fashion/proc/apply(mob/living/basic/pet/dog/dressup_doggy)
if(name)
dressup_doggy.name = name
if(desc)
dressup_doggy.desc = desc
if(length(speak_emote))
dressup_doggy.speak_emote = string_list(speak_emote)
///Applies random speech modifiers to the dog
/datum/dog_fashion/proc/apply_to_speech(datum/ai_planning_subtree/random_speech/speech)
if(length(emote_see))
speech.emote_see = string_list(emote_see)
if(length(emote_hear))
speech.emote_hear = string_list(emote_hear)
if(length(speak))
speech.speak = string_list(speak)
/**
* Generates the icon overlay for the equipped item
* dir: passed direction for the sprite, e.g. to apply to a dead dog, we use the EAST dir and just flip it 180.
*/
/datum/dog_fashion/proc/get_overlay(dir)
if(icon_file && obj_icon_state)
var/image/corgI = image(icon_file, icon_state = obj_icon_state, dir = dir)
corgI.alpha = obj_alpha
corgI.color = obj_color
return corgI
/datum/dog_fashion/head
icon_file = 'icons/mob/simple/corgi_head.dmi'
/datum/dog_fashion/back
icon_file = 'icons/mob/simple/corgi_back.dmi'
/datum/dog_fashion/back/armorvest
obj_icon_state = "armor"
/datum/dog_fashion/back/deathsquad
name = "Trooper %REAL_NAME%"
desc = "That's not red paint. That's real corgi blood."
/datum/dog_fashion/head/helmet
name = "Sergeant %REAL_NAME%"
desc = "The ever-loyal, the ever-vigilant."
/datum/dog_fashion/head/chef
name = "Sous chef %REAL_NAME%"
desc = "Your food will be taste-tested. All of it."
/datum/dog_fashion/head/captain
name = "Captain %REAL_NAME%"
desc = "Probably better than the last captain."
/datum/dog_fashion/head/dragoon
name = "Dragoon %REAL_NAME%"
desc = "The last living Dragon Knight."
/datum/dog_fashion/head/kitty
name = "Runtime"
desc = "They're a cute little kitty-cat! ... wait ... what the hell?"
emote_see = list("coughs up a furball", "stretches")
emote_hear = list("purrs")
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
/datum/dog_fashion/head/rabbit
name = "Hoppy"
desc = "This is Hoppy. They're a corgi-...urmm... bunny rabbit."
emote_see = list("twitches their nose", "hops around a bit")
/datum/dog_fashion/head/beret
name = "Yann"
desc = "Mon dieu! C'est un chien!"
speak = list("le woof!", "le bark!", "JAPPE!!")
emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of them.")
/datum/dog_fashion/head/detective
name = "Detective %REAL_NAME%"
desc = "%NAME% sees through your lies..."
emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.","takes a candycorn from the hat.")
/datum/dog_fashion/head/nurse
name = "Nurse %REAL_NAME%"
desc = "%NAME% needs 100cc of beef jerky... STAT!"
/datum/dog_fashion/head/pirate
name = "Pirate-title Pirate-name"
desc = "Yaarghh!! Thar' be a scurvy dog!"
emote_see = list("hunts for treasure.","stares coldly...","gnashes their tiny corgi teeth!")
emote_hear = list("growls ferociously!", "snarls.")
speak = list("Arrrrgh!!","Grrrrrr!")
/datum/dog_fashion/head/pirate/New(mob/M)
. = ..()
name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
/datum/dog_fashion/head/ushanka
name = "Communist-title Realname"
desc = "A follower of Karl Barx."
emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.")
/datum/dog_fashion/head/ushanka/New(mob/M)
name = "[pick("Comrade","Commissar","Glorious Leader")] %REAL_NAME%"
return ..()
/datum/dog_fashion/head/warden
name = "Officer %REAL_NAME%"
desc = "Stop right there criminal scum!"
emote_see = list("drools.","looks for donuts.")
/datum/dog_fashion/head/warden_red
name = "Officer %REAL_NAME%"
desc = "Stop right there criminal scum!"
emote_see = list("drools.","looks for donuts.")
/datum/dog_fashion/head/blue_wizard
name = "Grandwizard %REAL_NAME%"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
/datum/dog_fashion/head/red_wizard
name = "Pyromancer %REAL_NAME%"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!")
/datum/dog_fashion/head/cardborg
name = "Borgi"
desc = "Result of robotics budget cuts."
speak = list("Ping!","Beep!","Woof!")
emote_see = list("goes rogue.", "sniffs out non-humans.")
/datum/dog_fashion/head/ghost
name = "\improper Ghost"
desc = "Spooky!"
obj_icon_state = "sheet"
speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
emote_see = list("stumbles around.", "shivers.")
emote_hear = list("howls!","groans.")
/datum/dog_fashion/head/santa
name = "Santa's Corgi Helper"
desc = "They're very fond of milk and cookies."
emote_hear = list("barks Christmas songs.", "yaps merrily!")
emote_see = list("looks for presents.", "checks their list.")
/datum/dog_fashion/head/cargo_tech
name = "Corgi Tech %REAL_NAME%"
desc = "The reason your yellow gloves have chew-marks."
/datum/dog_fashion/head/reindeer
name = "%REAL_NAME% the red-nosed Corgi"
desc = "They have a very shiny nose."
emote_hear = list("lights the way!", "illuminates.", "yaps!")
/datum/dog_fashion/head/sombrero
name = "Segnor %REAL_NAME%"
desc = "You must respect Elder %REAL_NAME%."
/datum/dog_fashion/head/hop
name = "Lieutenant %REAL_NAME%"
desc = "Can actually be trusted to not run off on their own."
/datum/dog_fashion/head/deathsquad
name = "Trooper %REAL_NAME%"
desc = "That's not red paint. That's real corgi blood."
/datum/dog_fashion/head/clown
name = "%REAL_NAME% the Clown"
desc = "Honkman's best friend."
speak = list("HONK!", "Honk!")
emote_see = list("plays tricks.", "slips.")
/datum/dog_fashion/head/festive
name = "Festive %REAL_NAME%"
desc = "Ready to party!"
obj_icon_state = "festive"
/datum/dog_fashion/head/pumpkin/unlit
name = "Headless HoP-less %REAL_NAME%"
desc = "A spooky dog spirit of a beloved pet who lost their owner."
obj_icon_state = "pumpkin0"
speak = list("BOO!", "AUUUUUUU", "RAAARGH!")
emote_see = list("shambles around.", "yaps ominously.", "shivers.")
emote_hear = list("howls at the Moon.", "yaps at the crows!")
/datum/dog_fashion/head/pumpkin/lit
obj_icon_state = "pumpkin1"
/datum/dog_fashion/head/blumpkin/unlit
name = "Hue-less Headless HoP-less %REAL_NAME%"
desc = "An evil dog spirit of a beloved pet that haunts your treats pantries!"
obj_icon_state = "blumpkin0"
speak = list("BOO!", "AUUUUUUU", "RAAARGH!")
emote_see = list("shambles around.", "yaps ominously.", "shivers.")
emote_hear = list("howls at the Moon.", "yaps at the crows!", "growls eerily!")
/datum/dog_fashion/head/blumpkin/lit
obj_icon_state = "blumpkin1"
/datum/dog_fashion/head/butter
name = "Butter %REAL_NAME%"
desc = "%NAME%. %CAPITAL_REAL_NAME% with the butter. %NAME%. %CAPITAL_REAL_NAME% with a butter on 'em."
obj_icon_state = "butter"
speak = list() //they're very patient and focused on holding the butter on 'em
emote_see = list("shakes a little.", "looks around.")
emote_hear = list("licks a trickle of the butter up.", "smiles.")
/datum/dog_fashion/head/eyepatch
name = "Punished %REAL_NAME%"
desc = "%REAL_NAME% has really been going through it today."
obj_icon_state = "eyepatch"
emote_hear = list("sighs gruffly.", "groans.")
emote_see = list("considers their own mortality.", "stares bleakly into the middle distance.", "ponders the horrors of warfare.")
/datum/dog_fashion/head/watermelon
name = "Watermelon Warrior %REAL_NAME%"
desc = "5% safer than normal and ready to take on advantage!"
obj_icon_state = "watermelon"
/datum/dog_fashion/head/holymelon
name = "Holymelon Paladin %REAL_NAME%"
desc = "Extraterrestrial powers beware, %NAME% is here to smite you down!"
obj_icon_state = "holymelon"
/datum/dog_fashion/head/barrelmelon
name = "Barrelmelon Berserk %REAL_NAME%"
desc = "Either the sturdiness of the helmet gave %REAL_NAME% a confidence boost, or its bit tight on their head..."
obj_icon_state = "barrelmelon"