From dc085501626d4f1d84068ab581b6a7595335f6ec Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sun, 25 Aug 2024 04:38:03 -0300 Subject: [PATCH] push --- .../RandomZLevels/away_mission/SnowCabin.dmm | 2 +- _maps/map_files/CogStation/CogStation.dmm | 2 +- _maps/map_files/MetaStation/MetaStation.dmm | 2 +- _maps/map_files/generic/CentCom.dmm | 2 +- code/datums/elements/series.dm | 35 + code/datums/elements/toy_talk.dm | 28 + .../machinery/computer/arcade/orion_trail.dm | 2 +- code/game/objects/items/AI_modules.dm | 2 +- code/game/objects/items/eightball.dm | 2 +- code/game/objects/items/storage/boxes.dm | 4 +- code/game/objects/items/toy_mechs.dm | 654 ++++++++++++++++++ code/game/objects/items/toys.dm | 118 +--- code/modules/cargo/packs/costumes_toys.dm | 32 +- code/modules/clothing/head/collectable.dm | 5 + code/modules/events/holiday/vday.dm | 2 +- code/modules/games/cas.dm | 2 +- code/modules/games/unum.dm | 2 +- code/modules/holiday/easter.dm | 9 +- code/modules/holodeck/holo_effect.dm | 2 +- code/modules/jobs/job_types/roboticist.dm | 6 +- code/modules/mining/abandoned_crates.dm | 2 +- .../living/simple_animal/guardian/guardian.dm | 2 +- code/modules/pool/pool_noodles.dm | 2 +- .../modules/projectiles/guns/ballistic/toy.dm | 2 +- .../reagents/reagent_containers/rags.dm | 2 +- .../research/designs/autoylathe_designs.dm | 115 ++- code/modules/spells/spell_types/wizard.dm | 2 +- icons/obj/toy.dmi | Bin 37317 -> 0 bytes icons/obj/toys/toy.dmi | Bin 0 -> 46357 bytes tgstation.dme | 2 + 30 files changed, 870 insertions(+), 172 deletions(-) create mode 100644 code/datums/elements/series.dm create mode 100644 code/datums/elements/toy_talk.dm create mode 100644 code/game/objects/items/toy_mechs.dm delete mode 100644 icons/obj/toy.dmi create mode 100644 icons/obj/toys/toy.dmi diff --git a/_maps/RandomZLevels/away_mission/SnowCabin.dmm b/_maps/RandomZLevels/away_mission/SnowCabin.dmm index 7de2ed53f1..fea4130184 100644 --- a/_maps/RandomZLevels/away_mission/SnowCabin.dmm +++ b/_maps/RandomZLevels/away_mission/SnowCabin.dmm @@ -3166,7 +3166,7 @@ }, /area/awaymission/cabin/caves/sovietcave) "il" = ( -/obj/item/toy/prize/deathripley{ +/obj/item/toy/mecha/deathripley{ desc = "The mining mecha of the exploration team."; name = "exploraton squad Ripley"; pixel_y = 15 diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 5fbbc1d401..fcd4949a27 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -16856,7 +16856,7 @@ /turf/open/floor/plating, /area/command/heads_quarters/hos) "aLb" = ( -/obj/item/toy/prize/honk, +/obj/item/toy/mecha/honk, /obj/structure/disposalpipe/segment{ dir = 4 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index cd48e318bf..d70bb9d9b4 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -47411,7 +47411,7 @@ "dmL" = ( /obj/machinery/light/small, /obj/item/toy/dummy, -/obj/item/toy/prize/honk{ +/obj/item/toy/mecha/honk{ pixel_y = 12 }, /obj/structure/table/wood, diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index e5f5a9c6b7..208bca6705 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -17971,7 +17971,7 @@ /area/syndicate_mothership) "Sb" = ( /obj/structure/table/wood, -/obj/item/toy/prize/mauler{ +/obj/item/toy/mecha/mauler{ pixel_y = 12 }, /turf/open/floor/plasteel/dark, diff --git a/code/datums/elements/series.dm b/code/datums/elements/series.dm new file mode 100644 index 0000000000..0b34b24ae5 --- /dev/null +++ b/code/datums/elements/series.dm @@ -0,0 +1,35 @@ +/** + * ## series element! + * + * bespoke element that assigns a series number to toys on examine, and shows their series name! + * used for mechas and rare collectable hats, should totally be used for way more ;) + */ +/datum/element/series + element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH // Detach for turfs + id_arg_index = 2 + var/list/subtype_list + var/series_name + +/datum/element/series/Attach(datum/target, subtype, series_name) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + if(!subtype) + stack_trace("series element without subtype given!") + return ELEMENT_INCOMPATIBLE + subtype_list = subtypesof(subtype) + src.series_name = series_name + var/atom/attached = target + RegisterSignal(attached, COMSIG_PARENT_EXAMINE, PROC_REF(on_examine)) + +/datum/element/series/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_PARENT_EXAMINE) + +///signal called examining +/datum/element/series/proc/on_examine(datum/target, mob/user, list/examine_list) + SIGNAL_HANDLER + + var/series_number = subtype_list.Find(target.type) + examine_list += span_boldnotice("[target] is part of the \"[series_name]\" series!") + examine_list += span_notice("Collect them all: [series_number]/[length(subtype_list)].") diff --git a/code/datums/elements/toy_talk.dm b/code/datums/elements/toy_talk.dm new file mode 100644 index 0000000000..8061eafaeb --- /dev/null +++ b/code/datums/elements/toy_talk.dm @@ -0,0 +1,28 @@ +/** + * Allows people to talk via the item with .l or .r + * + * Be sure to override [/atom/movable/proc/GetVoice] if you want the item's "voice" to not default to itself + */ +/datum/element/toy_talk + +/datum/element/toy_talk/Attach(datum/target) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ITEM_TALK_INTO, PROC_REF(do_talk)) + +/datum/element/toy_talk/Detach(datum/source, ...) + . = ..() + UnregisterSignal(source, COMSIG_ITEM_TALK_INTO) + +/datum/element/toy_talk/proc/do_talk(obj/item/source, mob/speaker, message, channel, list/spans, language, list/message_mods) + SIGNAL_HANDLER + + if(!ismob(speaker) || message_mods[MODE_HEADSET] || message_mods[MODE_RELAY]) + return NONE + + message_mods[MODE_RELAY] = TRUE // Redundant (given NOPASS) but covers our bases + speaker.log_talk(message, LOG_SAY, tag = "toy talk ([source])") + source.say(message, language = language, sanitize = FALSE, message_mods = list(MODE_RELAY = TRUE)) + return NOPASS diff --git a/code/game/machinery/computer/arcade/orion_trail.dm b/code/game/machinery/computer/arcade/orion_trail.dm index 8894d53a21..21481b3755 100644 --- a/code/game/machinery/computer/arcade/orion_trail.dm +++ b/code/game/machinery/computer/arcade/orion_trail.dm @@ -869,7 +869,7 @@ /obj/item/orion_ship name = "model settler ship" desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "ship" w_class = WEIGHT_CLASS_SMALL var/active = 0 //if the ship is on diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index 7492f5779f..1906f85a6f 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -525,7 +525,7 @@ AI MODULES /obj/item/ai_module/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw name = "toy AI" desc = "A little toy model AI core with real law uploading action!" //Note: subtle tell - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "AI" laws = list("") diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index ff15511092..a189c1a9ba 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -2,7 +2,7 @@ name = "magic eightball" desc = "A black ball with a stenciled number eight in white on the side. It seems full of dark liquid.\nThe instructions state that you should ask your question aloud, and then shake." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "eightball" w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index a935a55ecf..1fed9a6d4c 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -621,7 +621,7 @@ /obj/item/storage/box/snappops name = "snap pop box" desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "spbox" illustration = null @@ -870,7 +870,7 @@ /obj/item/storage/box/mechfigures/PopulateContents() for(var/i in 1 to 4) - var/randomFigure = pick(subtypesof(/obj/item/toy/prize/)) + var/randomFigure = pick(subtypesof(/obj/item/toy/mecha)) new randomFigure(src) diff --git a/code/game/objects/items/toy_mechs.dm b/code/game/objects/items/toy_mechs.dm new file mode 100644 index 0000000000..efcd7862ef --- /dev/null +++ b/code/game/objects/items/toy_mechs.dm @@ -0,0 +1,654 @@ +/** + * Mech prizes + MECHA COMBAT!! + */ + +/// Mech battle special attack types. +#define SPECIAL_ATTACK_HEAL 1 +#define SPECIAL_ATTACK_DAMAGE 2 +#define SPECIAL_ATTACK_UTILITY 3 +#define SPECIAL_ATTACK_OTHER 4 + +/// Max length of a mech battle +#define MAX_BATTLE_LENGTH 50 + +/obj/item/toy/mecha + icon = 'icons/obj/toys/toy.dmi' + icon_state = "fivestarstoy" + verb_say = "beeps" + verb_ask = "beeps" + verb_exclaim = "beeps" + verb_yell = "beeps" + w_class = WEIGHT_CLASS_SMALL + /// Timer when it'll be off cooldown + var/timer = 0 + /// Cooldown between play sessions + var/cooldown = 1.5 SECONDS + /// Cooldown multiplier after a battle (by default: battle cooldowns are 30 seconds) + var/cooldown_multiplier = 20 + /// If it makes noise when played with + var/quiet = FALSE + /// TRUE = Offering battle to someone || FALSE = Not offering battle + var/wants_to_battle = FALSE + /// TRUE = in combat currently || FALSE = Not in combat + var/in_combat = FALSE + /// The mech's health in battle + var/combat_health = 0 + /// The mech's max combat health + var/max_combat_health = 0 + /// TRUE = the special attack is charged || FALSE = not charged + var/special_attack_charged = FALSE + /// What type of special attack they use - SPECIAL_ATTACK_DAMAGE, SPECIAL_ATTACK_HEAL, SPECIAL_ATTACK_UTILITY, SPECIAL_ATTACK_OTHER + var/special_attack_type = 0 + /// What message their special move gets on examining + var/special_attack_type_message = "" + /// The battlecry when using the special attack + var/special_attack_cry = "*flip" + /// Current cooldown of their special attack + var/special_attack_cooldown = 0 + /// This mech's win count in combat + var/wins = 0 + /// ...And their loss count in combat + var/losses = 0 + +/obj/item/toy/mecha/Initialize(mapload) + . = ..() + AddElement(/datum/element/series, /obj/item/toy/mecha, "Mini-Mecha action figures") + //AddElement(/datum/element/toy_talk) + combat_health = max_combat_health + switch(special_attack_type) + if(SPECIAL_ATTACK_DAMAGE) + special_attack_type_message = "an aggressive move, which deals bonus damage." + if(SPECIAL_ATTACK_HEAL) + special_attack_type_message = "a defensive move, which grants bonus healing." + if(SPECIAL_ATTACK_UTILITY) + special_attack_type_message = "a utility move, which heals the user and damages the opponent." + if(SPECIAL_ATTACK_OTHER) + special_attack_type_message = "a special move, which [special_attack_type_message]" + else + special_attack_type_message = "a mystery move, even I don't know." + +/** + * this proc combines "sleep" while also checking for if the battle should continue + * + * this goes through some of the checks - the toys need to be next to each other to fight! + * if it's player vs themself: They need to be able to "control" both mechs (either must be adjacent or using TK) + * if it's player vs player: Both players need to be able to "control" their mechs (either must be adjacent or using TK) + * if it's player vs mech (suicide): the mech needs to be in range of the player + * if all the checks are TRUE, it does the sleeps, and returns TRUE. Otherwise, it returns FALSE. + * Arguments: + * * delay - the amount of time the sleep at the end of the check will sleep for + * * attacker - the attacking toy in the battle. + * * attacker_controller - the controller of the attacking toy. there should ALWAYS be an attacker_controller + * * opponent - (optional) the defender controller in the battle, for PvP + */ +/obj/item/toy/mecha/proc/combat_sleep(delay, obj/item/toy/mecha/attacker, mob/living/carbon/attacker_controller, mob/living/carbon/opponent) + if(!attacker_controller) + return FALSE + + if(!attacker) //if there's no attacker, then attacker_controller IS the attacker + if(!in_range(src, attacker_controller)) + attacker_controller.visible_message(span_suicide("[attacker_controller] is running from [src]! The coward!")) + return FALSE + else // if there's an attacker, we can procede as normal + if(!in_range(src, attacker)) //and the two toys aren't next to each other, the battle ends + attacker_controller.visible_message(span_notice("[attacker] and [src] separate, ending the battle."), \ + span_notice("[attacker] and [src] separate, ending the battle.")) + return FALSE + + //dead men tell no tales, incapacitated men fight no fights + if(attacker_controller.incapacitated()) + return FALSE + //if the attacker_controller isn't next to the attacking toy (and doesn't have telekinesis), the battle ends + if(!in_range(attacker, attacker_controller) && !(attacker_controller.dna.check_mutation(/datum/mutation/human/telekinesis))) + attacker_controller.visible_message(span_notice("[attacker_controller.name] separates from [attacker], ending the battle."), \ + span_notice("You separate from [attacker], ending the battle.")) + return FALSE + + //if it's PVP and the opponent is not next to the defending(src) toy (and doesn't have telekinesis), the battle ends + if(opponent) + if(opponent.incapacitated()) + return FALSE + if(!in_range(src, opponent) && !(opponent.dna.check_mutation(/datum/mutation/human/telekinesis))) + opponent.visible_message(span_notice("[opponent.name] separates from [src], ending the battle."), \ + span_notice("You separate from [src], ending the battle.")) + return FALSE + //if it's not PVP and the attacker_controller isn't next to the defending toy (and doesn't have telekinesis), the battle ends + else + if (!in_range(src, attacker_controller) && !(attacker_controller.dna.check_mutation(/datum/mutation/human/telekinesis))) + attacker_controller.visible_message(span_notice("[attacker_controller.name] separates from [src] and [attacker], ending the battle."), \ + span_notice("You separate [attacker] and [src], ending the battle.")) + return FALSE + + //if all that is good, then we can sleep peacefully + sleep(delay) + return TRUE + +//all credit to skasi for toy mech fun ideas +/obj/item/toy/mecha/attack_self(mob/user) + if(timer < world.time) + to_chat(user, span_notice("You play with [src].")) + timer = world.time + cooldown + if(!quiet) + playsound(user, 'sound/mecha/mechstep.ogg', 20, TRUE) + else + . = ..() + +/obj/item/toy/mecha/attack_hand(mob/user, list/modifiers) + . = ..() + if(.) + return + if(loc == user) + attack_self(user) + +/** + * If you attack a mech with a mech, initiate combat between them + */ +/obj/item/toy/mecha/attackby(obj/item/user_toy, mob/living/user) + if(istype(user_toy, /obj/item/toy/mecha)) + var/obj/item/toy/mecha/P = user_toy + if(check_battle_start(user, P)) + mecha_brawl(P, user) + ..() + +/** + * Attack is called from the user's toy, aimed at target(another human), checking for target's toy. + */ +/obj/item/toy/mecha/attack(mob/living/carbon/human/target, mob/living/carbon/human/user) + if(target == user) + to_chat(user, span_notice("Target another toy mech if you want to start a battle with yourself.")) + return + else if(user.a_intent != INTENT_HARM) + if(wants_to_battle) //prevent spamming someone with offers + to_chat(user, span_notice("You already are offering battle to someone!")) + return + if(!check_battle_start(user)) //if the user's mech isn't ready, don't bother checking + return + + for(var/obj/item/I in target.held_items) + if(istype(I, /obj/item/toy/mecha)) //if you attack someone with a mech who's also holding a mech, offer to battle them + var/obj/item/toy/mecha/P = I + if(!P.check_battle_start(target, null, user)) //check if the attacker mech is ready + break + + //slap them with the metaphorical white glove + if(P.wants_to_battle) //if the target mech wants to battle, initiate the battle from their POV + mecha_brawl(P, target, user) //P = defender's mech / SRC = attacker's mech / target = defender / user = attacker + P.wants_to_battle = FALSE + return + + //extend the offer of battle to the other mech + to_chat(user, span_notice("You offer battle to [target.name]!")) + to_chat(target, span_notice("[user.name] wants to battle with [user.p_their()] [name]! Attack them with a toy mech to initiate combat.")) + wants_to_battle = TRUE + addtimer(CALLBACK(src, PROC_REF(withdraw_offer), user), 6 SECONDS) + return + + ..() + +/** + * Overrides attack_tk - Sorry, you have to be face to face to initiate a battle, it's good sportsmanship + */ +/obj/item/toy/mecha/attack_tk(mob/user) + if(timer < world.time) + to_chat(user, span_notice("You telekinetically play with [src].")) + timer = world.time + cooldown + if(!quiet) + playsound(user, 'sound/mecha/mechstep.ogg', 20, TRUE) + return STOP_ATTACK_PROC_CHAIN + + +/** + * Resets the request for battle. + * + * For use in a timer, this proc resets the wants_to_battle variable after a short period. + * Arguments: + * * user - the user wanting to do battle + */ +/obj/item/toy/mecha/proc/withdraw_offer(mob/living/carbon/user) + if(wants_to_battle) + wants_to_battle = FALSE + to_chat(user, span_notice("You get the feeling they don't want to battle.")) +/** + * Starts a battle, toy mech vs player. Player... doesn't win. + */ +/obj/item/toy/mecha/suicide_act(mob/living/carbon/user) + if(in_combat) + to_chat(user, span_notice("[src] is in battle, let it finish first.")) + return + + user.visible_message(span_suicide("[user] begins a fight [user.p_they()] can't win with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + + in_combat = TRUE + sleep(1.5 SECONDS) + for(var/i in 1 to 4) + switch(i) + if(1, 3) + SpinAnimation(5, 0) + playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE) + user.adjustBruteLoss(25) + user.adjustStaminaLoss(50) + if(2) + user.SpinAnimation(5, 0) + playsound(user, 'sound/weapons/smash.ogg', 20, TRUE) + combat_health-- //we scratched it! + if(4) + say(special_attack_cry + "!!") + user.adjustStaminaLoss(25) + + if(!combat_sleep(1 SECONDS, null, user)) + say("PATHETIC.") + combat_health = max_combat_health + in_combat = FALSE + return SHAME + + sleep(0.5 SECONDS) + user.adjustBruteLoss(450) + + in_combat = FALSE + say("AN EASY WIN. MY POWER INCREASES.") // steal a soul, become swole + add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY) + max_combat_health = round(max_combat_health*1.5 + 0.1) + combat_health = max_combat_health + wins++ + return BRUTELOSS + +/obj/item/toy/mecha/examine() + . = ..() + . += span_notice("This toy's special attack is [special_attack_cry], [special_attack_type_message]") + if(in_combat) + . += span_notice("This toy has a maximum health of [max_combat_health]. Currently, it's [combat_health].") + . += span_notice("Its special move light is [special_attack_cooldown? "flashing red." : "green and is ready!"]") + else + . += span_notice("This toy has a maximum health of [max_combat_health].") + + if(wins || losses) + . += span_notice("This toy has [wins] wins, and [losses] losses.") + +/obj/item/toy/mecha/can_speak(allow_mimes) + return !quiet && ..() + +/** + * The 'master' proc of the mech battle. Processes the entire battle's events and makes sure it start and finishes correctly. + * + * src is the defending toy, and the battle proc is called on it to begin the battle. + * After going through a few checks at the beginning to ensure the battle can start properly, the battle begins a loop that lasts + * until either toy has no more health. During this loop, it also ensures the mechs stay in combat range of each other. + * It will then randomly decide attacks for each toy, occasionally making one or the other use their special attack. + * When either mech has no more health, the loop ends, and it displays the victor and the loser while updating their stats and resetting them. + * Arguments: + * * attacker - the attacking toy, the toy in the attacker_controller's hands + * * attacker_controller - the user, the one who is holding the toys / controlling the fight + * * opponent - optional arg used in Mech PvP battles: the other person who is taking part in the fight (controls src) + */ +/obj/item/toy/mecha/proc/mecha_brawl(obj/item/toy/mecha/attacker, mob/living/carbon/attacker_controller, mob/living/carbon/opponent) + //A GOOD DAY FOR A SWELL BATTLE! + attacker_controller.visible_message(span_danger("[attacker_controller.name] collides [attacker] with [src]! Looks like they're preparing for a brawl!"), \ + span_danger("You collide [attacker] into [src], sparking a fierce battle!"), \ + span_hear("You hear hard plastic smacking into hard plastic."), COMBAT_MESSAGE_RANGE) + + /// Who's in control of the defender (src)? + var/mob/living/carbon/src_controller = (opponent)? opponent : attacker_controller + /// How long has the battle been going? + var/battle_length = 0 + + in_combat = TRUE + attacker.in_combat = TRUE + + //1.5 second cooldown * 20 = 30 second cooldown after a fight + timer = world.time + cooldown*cooldown_multiplier + attacker.timer = world.time + attacker.cooldown*attacker.cooldown_multiplier + + sleep(1 SECONDS) + //--THE BATTLE BEGINS-- + while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH) + if(!combat_sleep(0.5 SECONDS, attacker, attacker_controller, opponent)) //combat_sleep checks everything we need to have checked for combat to continue + break + + //before we do anything - deal with charged attacks + if(special_attack_charged) + src_controller.visible_message(span_danger("[src] unleashes its special attack!!"), \ + span_danger("You unleash [src]'s special attack!")) + special_attack_move(attacker) + else if(attacker.special_attack_charged) + + attacker_controller.visible_message(span_danger("[attacker] unleashes its special attack!!"), \ + span_danger("You unleash [attacker]'s special attack!")) + attacker.special_attack_move(src) + else + //process the cooldowns + if(special_attack_cooldown > 0) + special_attack_cooldown-- + if(attacker.special_attack_cooldown > 0) + attacker.special_attack_cooldown-- + + //combat commences + switch(rand(1,8)) + if(1 to 3) //attacker wins + if(attacker.special_attack_cooldown == 0 && attacker.combat_health <= round(attacker.max_combat_health/3)) //if health is less than 1/3 and special off CD, use it + attacker.special_attack_charged = TRUE + attacker_controller.visible_message(span_danger("[attacker] begins charging its special attack!!"), \ + span_danger("You begin charging [attacker]'s special attack!")) + else //just attack + attacker.SpinAnimation(5, 0) + playsound(attacker, 'sound/mecha/mechstep.ogg', 30, TRUE) + combat_health-- + attacker_controller.visible_message(span_danger("[attacker] devastates [src]!"), \ + span_danger("You ram [attacker] into [src]!"), \ + span_hear("You hear hard plastic smacking hard plastic."), COMBAT_MESSAGE_RANGE) + if(prob(5)) + combat_health-- + playsound(src, 'sound/effects/meteorimpact.ogg', 20, TRUE) + attacker_controller.visible_message(span_boldwarning("...and lands a CRIPPLING BLOW!"), \ + span_boldwarning("...and you land a CRIPPLING blow on [src]!"), null, COMBAT_MESSAGE_RANGE) + + if(4) //both lose + attacker.SpinAnimation(5, 0) + SpinAnimation(5, 0) + combat_health-- + attacker.combat_health-- + do_sparks(2, FALSE, src) + do_sparks(2, FALSE, attacker) + if(prob(50)) + attacker_controller.visible_message(span_danger("[attacker] and [src] clash dramatically, causing sparks to fly!"), \ + span_danger("[attacker] and [src] clash dramatically, causing sparks to fly!"), \ + span_hear("You hear hard plastic rubbing against hard plastic."), COMBAT_MESSAGE_RANGE) + else + src_controller.visible_message(span_danger("[src] and [attacker] clash dramatically, causing sparks to fly!"), \ + span_danger("[src] and [attacker] clash dramatically, causing sparks to fly!"), \ + span_hear("You hear hard plastic rubbing against hard plastic."), COMBAT_MESSAGE_RANGE) + if(5) //both win + playsound(attacker, 'sound/weapons/parry.ogg', 20, TRUE) + if(prob(50)) + attacker_controller.visible_message(span_danger("[src]'s attack deflects off of [attacker]."), \ + span_danger("[src]'s attack deflects off of [attacker]."), \ + span_hear("You hear hard plastic bouncing off hard plastic."), COMBAT_MESSAGE_RANGE) + else + src_controller.visible_message(span_danger("[attacker]'s attack deflects off of [src]."), \ + span_danger("[attacker]'s attack deflects off of [src]."), \ + span_hear("You hear hard plastic bouncing off hard plastic."), COMBAT_MESSAGE_RANGE) + + if(6 to 8) //defender wins + if(special_attack_cooldown == 0 && combat_health <= round(max_combat_health/3)) //if health is less than 1/3 and special off CD, use it + special_attack_charged = TRUE + src_controller.visible_message(span_danger("[src] begins charging its special attack!!"), \ + span_danger("You begin charging [src]'s special attack!")) + else //just attack + SpinAnimation(5, 0) + playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE) + attacker.combat_health-- + src_controller.visible_message(span_danger("[src] smashes [attacker]!"), \ + span_danger("You smash [src] into [attacker]!"), \ + span_hear("You hear hard plastic smashing hard plastic."), COMBAT_MESSAGE_RANGE) + if(prob(5)) + attacker.combat_health-- + playsound(attacker, 'sound/effects/meteorimpact.ogg', 20, TRUE) + src_controller.visible_message(span_boldwarning("...and lands a CRIPPLING BLOW!"), \ + span_boldwarning("...and you land a CRIPPLING blow on [attacker]!"), null, COMBAT_MESSAGE_RANGE) + else + attacker_controller.visible_message(span_notice("[src] and [attacker] stand around awkwardly."), \ + span_notice("You don't know what to do next.")) + + battle_length++ + sleep(0.5 SECONDS) + + /// Lines chosen for the winning mech + var/list/winlines = list("YOU'RE NOTHING BUT SCRAP!", "I'LL YIELD TO NONE!", "GLORY IS MINE!", "AN EASY FIGHT.", "YOU SHOULD HAVE NEVER FACED ME.", "ROCKED AND SOCKED.") + + if(attacker.combat_health <= 0 && combat_health <= 0) //both lose + playsound(src, 'sound/machines/warning-buzzer.ogg', 20, TRUE) + attacker_controller.visible_message(span_boldnotice("MUTUALLY ASSURED DESTRUCTION!! [src] and [attacker] both end up destroyed!"), \ + span_boldnotice("Both [src] and [attacker] are destroyed!")) + else if(attacker.combat_health <= 0) //src wins + wins++ + attacker.losses++ + playsound(attacker, 'sound/effects/light_flicker.ogg', 20, TRUE) + attacker_controller.visible_message(span_notice("[attacker] falls apart!"), \ + span_notice("[attacker] falls apart!"), null, COMBAT_MESSAGE_RANGE) + say("[pick(winlines)]") + src_controller.visible_message(span_notice("[src] destroys [attacker] and walks away victorious!"), \ + span_notice("You raise up [src] victoriously over [attacker]!")) + else if (combat_health <= 0) //attacker wins + attacker.wins++ + losses++ + playsound(src, 'sound/effects/light_flicker.ogg', 20, TRUE) + src_controller.visible_message(span_notice("[src] collapses!"), \ + span_notice("[src] collapses!"), null, COMBAT_MESSAGE_RANGE) + attacker.say("[pick(winlines)]") + attacker_controller.visible_message(span_notice("[attacker] demolishes [src] and walks away victorious!"), \ + "[span_notice("You raise up [attacker] proudly over [src]")]!") + else //both win? + say("NEXT TIME.") + //don't want to make this a one sided conversation + quiet? attacker.say("I WENT EASY ON YOU.") : attacker.say("OF COURSE.") + + in_combat = FALSE + attacker.in_combat = FALSE + + combat_health = max_combat_health + attacker.combat_health = attacker.max_combat_health + + return + +/** + * This proc checks if a battle can be initiated between src and attacker. + * + * Both SRC and attacker (if attacker is included) timers are checked if they're on cooldown, and + * both SRC and attacker (if attacker is included) are checked if they are in combat already. + * If any of the above are true, the proc returns FALSE and sends a message to user (and target, if included) otherwise, it returns TRUE + * Arguments: + * * user: the user who is initiating the battle + * * attacker: optional arg for checking two mechs at once + * * target: optional arg used in Mech PvP battles (if used, attacker is target's toy) + */ +/obj/item/toy/mecha/proc/check_battle_start(mob/living/carbon/user, obj/item/toy/mecha/attacker, mob/living/carbon/target) + if(attacker?.in_combat) + to_chat(user, span_notice("[target?target.p_their() : "Your" ] [attacker.name] is in combat.")) + to_chat(target, span_notice("Your [attacker.name] is in combat.")) + return FALSE + if(in_combat) + to_chat(user, span_notice("Your [name] is in combat.")) + to_chat(target, span_notice("[user.p_their()] [name] is in combat.")) + return FALSE + if(attacker && attacker.timer > world.time) + to_chat(user, span_notice("[target?target.p_their() : "Your" ] [attacker.name] isn't ready for battle.")) + to_chat(target, span_notice("Your [attacker.name] isn't ready for battle.")) + return FALSE + if(timer > world.time) + to_chat(user, span_notice("Your [name] isn't ready for battle.")) + to_chat(target, span_notice("[user.p_their()] [name] isn't ready for battle.")) + return FALSE + + return TRUE + +/** + * Processes any special attack moves that happen in the battle (called in the mechaBattle proc). + * + * Makes the toy shout their special attack cry and updates its cooldown. Then, does the special attack. + * Arguments: + * * victim - the toy being hit by the special move + */ +/obj/item/toy/mecha/proc/special_attack_move(obj/item/toy/mecha/victim) + say(special_attack_cry + "!!") + + special_attack_charged = FALSE + special_attack_cooldown = 3 + + switch(special_attack_type) + if(SPECIAL_ATTACK_DAMAGE) //+2 damage + victim.combat_health-=2 + playsound(src, 'sound/weapons/marauder.ogg', 20, TRUE) + if(SPECIAL_ATTACK_HEAL) //+2 healing + combat_health+=2 + playsound(src, 'sound/mecha/mech_shield_raise.ogg', 20, TRUE) + if(SPECIAL_ATTACK_UTILITY) //+1 heal, +1 damage + victim.combat_health-- + combat_health++ + playsound(src, 'sound/mecha/mechmove01.ogg', 30, TRUE) + if(SPECIAL_ATTACK_OTHER) //other + super_special_attack(victim) + else + say("I FORGOT MY SPECIAL ATTACK...") + +/** + * Base proc for 'other' special attack moves. + * + * This one is only for inheritance, each mech with an 'other' type move has their procs below. + * Arguments: + * * victim - the toy being hit by the super special move (doesn't necessarily need to be used) + */ +/obj/item/toy/mecha/proc/super_special_attack(obj/item/toy/mecha/victim) + visible_message(span_notice("[src] does a cool flip.")) + +/obj/item/toy/mecha/ripley + name = "toy Ripley MK-I" + icon_state = "ripleytoy" + max_combat_health = 4 //200 integrity + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "CLAMP SMASH" + +/obj/item/toy/mecha/ripleymkii + name = "toy Ripley MK-II" + icon_state = "ripleymkiitoy" + max_combat_health = 5 //250 integrity + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "GIGA DRILL BREAK" + +/obj/item/toy/mecha/hauler + name = "toy Hauler" + icon_state = "haulertoy" + max_combat_health = 3 //100 integrity? + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "HAUL AWAY" + +/obj/item/toy/mecha/clarke + name = "toy Clarke" + icon_state = "clarketoy" + max_combat_health = 4 //200 integrity + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "ROLL OUT" + +/obj/item/toy/mecha/odysseus + name = "toy Odysseus" + icon_state = "odysseustoy" + max_combat_health = 4 //120 integrity + special_attack_type = SPECIAL_ATTACK_HEAL + special_attack_cry = "MECHA BEAM" + +/obj/item/toy/mecha/gygax + name = "toy Gygax" + icon_state = "gygaxtoy" + max_combat_health = 5 //250 integrity + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "SUPER SERVOS" + +/obj/item/toy/mecha/durand + name = "toy Durand" + icon_state = "durandtoy" + max_combat_health = 6 //400 integrity + special_attack_type = SPECIAL_ATTACK_HEAL + special_attack_cry = "SHIELD OF PROTECTION" + +/obj/item/toy/mecha/savannahivanov + name = "toy Savannah-Ivanov" + icon_state = "savannahivanovtoy" + max_combat_health = 7 //450 integrity + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "SKYFALL!! IVANOV STRIKE" + +/obj/item/toy/mecha/phazon + name = "toy Phazon" + icon_state = "phazontoy" + max_combat_health = 6 //200 integrity + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "NO-CLIP" + +/obj/item/toy/mecha/honk + name = "toy H.O.N.K." + icon_state = "honktoy" + max_combat_health = 4 //140 integrity + special_attack_type = SPECIAL_ATTACK_OTHER + special_attack_type_message = "puts the opposing mech's special move on cooldown and heals this mech." + special_attack_cry = "MEGA HORN" + +/obj/item/toy/mecha/honk/super_special_attack(obj/item/toy/mecha/victim) + playsound(src, 'sound/machines/honkbot_evil_laugh.ogg', 20, TRUE) + victim.special_attack_cooldown += 3 //Adds cooldown to the other mech and gives a minor self heal + combat_health++ + +/obj/item/toy/mecha/darkgygax + name = "toy Dark Gygax" + icon_state = "darkgygaxtoy" + max_combat_health = 6 //300 integrity + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "ULTRA SERVOS" + +/obj/item/toy/mecha/mauler + name = "toy Mauler" + icon_state = "maulertoy" + max_combat_health = 7 //500 integrity + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "BULLET STORM" + +/obj/item/toy/mecha/darkhonk + name = "toy Dark H.O.N.K." + icon_state = "darkhonktoy" + max_combat_health = 5 //300 integrity + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "BOMBANANA SPREE" + +/obj/item/toy/mecha/deathripley + name = "toy Death-Ripley" + icon_state = "deathripleytoy" + max_combat_health = 5 //250 integrity + special_attack_type = SPECIAL_ATTACK_OTHER + special_attack_type_message = "instantly destroys the opposing mech if its health is less than this mech's health." + special_attack_cry = "KILLER CLAMP" + +/obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim) + playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 20, TRUE) + if(victim.combat_health < combat_health) //Instantly kills the other mech if it's health is below our's. + say("EXECUTE!!") + victim.combat_health = 0 + else //Otherwise, just deal one damage. + victim.combat_health-- + +/obj/item/toy/mecha/reticence + name = "toy Reticence" + icon_state = "reticencetoy" + quiet = TRUE + max_combat_health = 4 //100 integrity + special_attack_type = SPECIAL_ATTACK_OTHER + special_attack_type_message = "has a lower cooldown than normal special moves, increases the opponent's cooldown, and deals damage." + special_attack_cry = "*wave" + +/obj/item/toy/mecha/reticence/super_special_attack(obj/item/toy/mecha/victim) + special_attack_cooldown-- //Has a lower cooldown... + victim.special_attack_cooldown++ //and increases the opponent's cooldown by 1... + victim.combat_health-- //and some free damage. + +/obj/item/toy/mecha/marauder + name = "toy Marauder" + icon_state = "maraudertoy" + max_combat_health = 7 //500 integrity + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "BEAM BLAST" + +/obj/item/toy/mecha/seraph + name = "toy Seraph" + icon_state = "seraphtoy" + max_combat_health = 8 //550 integrity + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "ROCKET BARRAGE" + +/obj/item/toy/mecha/firefighter //rip + name = "toy Firefighter" + icon_state = "firefightertoy" + max_combat_health = 5 //250 integrity? + special_attack_type = SPECIAL_ATTACK_HEAL + special_attack_cry = "FIRE SHIELD" + +#undef SPECIAL_ATTACK_HEAL +#undef SPECIAL_ATTACK_DAMAGE +#undef SPECIAL_ATTACK_UTILITY +#undef SPECIAL_ATTACK_OTHER +#undef MAX_BATTLE_LENGTH diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index b05abdc49a..3ea05d3fbd 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -7,7 +7,6 @@ * Toy swords * Crayons * Snap pops - * Mech prizes * AI core prizes * Toy codex gigas * Skeleton toys @@ -24,7 +23,6 @@ * Toy Daggers */ - /obj/item/toy throwforce = 0 throw_speed = 3 @@ -39,7 +37,7 @@ /obj/item/toy/balloon name = "water balloon" desc = "A translucent balloon. There's nothing in it." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "waterballoon-e" item_state = "balloon-empty" @@ -379,7 +377,7 @@ /obj/item/toy/foamblade name = "foam armblade" desc = "It says \"Sternside Changs #1 fan\" on it." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "foamblade" item_state = "arm_blade" lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' @@ -508,7 +506,7 @@ /obj/item/toy/snappop name = "snap pop" desc = "Wow!" - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "snappop" w_class = WEIGHT_CLASS_TINY var/ash_type = /obj/effect/decal/cleanable/ash @@ -544,7 +542,7 @@ ash_type = /obj/effect/decal/cleanable/ash/snappop_phoenix /obj/effect/decal/cleanable/ash/snappop_phoenix - var/respawn_time = 300 + var/respawn_time = 30 SECONDS /obj/effect/decal/cleanable/ash/snappop_phoenix/New() . = ..() @@ -554,96 +552,10 @@ new /obj/item/toy/snappop/phoenix(get_turf(src)) qdel(src) - -/* - * Mech prizes - */ -/obj/item/toy/prize - icon = 'icons/obj/toy.dmi' - icon_state = "ripleytoy" - var/timer = 0 - var/cooldown = 30 - var/quiet = 0 - -//all credit to skasi for toy mech fun ideas -/obj/item/toy/prize/attack_self(mob/user) - if(timer < world.time) - to_chat(user, "You play with [src].") - timer = world.time + cooldown - if(!quiet) - playsound(user, 'sound/mecha/mechstep.ogg', 20, 1) - else - . = ..() - -/obj/item/toy/prize/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - if(loc == user) - attack_self(user) - -/obj/item/toy/prize/ripley - name = "toy Ripley" - desc = "Mini-Mecha action figure! Collect them all! 1/12." - -/obj/item/toy/prize/fireripley - name = "toy firefighting Ripley" - desc = "Mini-Mecha action figure! Collect them all! 2/12." - icon_state = "fireripleytoy" - -/obj/item/toy/prize/deathripley - name = "toy deathsquad Ripley" - desc = "Mini-Mecha action figure! Collect them all! 3/12." - icon_state = "deathripleytoy" - -/obj/item/toy/prize/gygax - name = "toy Gygax" - desc = "Mini-Mecha action figure! Collect them all! 4/12." - icon_state = "gygaxtoy" - -/obj/item/toy/prize/durand - name = "toy Durand" - desc = "Mini-Mecha action figure! Collect them all! 5/12." - icon_state = "durandprize" - -/obj/item/toy/prize/honk - name = "toy H.O.N.K." - desc = "Mini-Mecha action figure! Collect them all! 6/12." - icon_state = "honkprize" - -/obj/item/toy/prize/marauder - name = "toy Marauder" - desc = "Mini-Mecha action figure! Collect them all! 7/12." - icon_state = "marauderprize" - -/obj/item/toy/prize/seraph - name = "toy Seraph" - desc = "Mini-Mecha action figure! Collect them all! 8/12." - icon_state = "seraphprize" - -/obj/item/toy/prize/mauler - name = "toy Mauler" - desc = "Mini-Mecha action figure! Collect them all! 9/12." - icon_state = "maulerprize" - -/obj/item/toy/prize/odysseus - name = "toy Odysseus" - desc = "Mini-Mecha action figure! Collect them all! 10/12." - icon_state = "odysseusprize" - -/obj/item/toy/prize/phazon - name = "toy Phazon" - desc = "Mini-Mecha action figure! Collect them all! 11/12." - icon_state = "phazonprize" - -/obj/item/toy/prize/reticence - name = "toy Reticence" - desc = "Mini-Mecha action figure! Collect them all! 12/12." - icon_state = "reticenceprize" - quiet = 1 - - /obj/item/toy/talking name = "talking action figure" desc = "A generic action figure modeled after nothing in particular." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "owlprize" w_class = WEIGHT_CLASS_SMALL var/cooldown = FALSE @@ -772,7 +684,7 @@ /obj/item/toy/cards/deck name = "deck of cards" desc = "A deck of space-grade playing cards." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' deckstyle = "nanotrasen" icon_state = "deck_nanotrasen_full" w_class = WEIGHT_CLASS_SMALL @@ -903,7 +815,7 @@ /obj/item/toy/cards/cardhand name = "hand of cards" desc = "A number of cards not in a deck, customarily held in ones hand." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "none" w_class = WEIGHT_CLASS_TINY var/list/currenthand = list() @@ -1000,7 +912,7 @@ /obj/item/toy/cards/singlecard name = "card" desc = "a card" - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "singlecard_down_nanotrasen" w_class = WEIGHT_CLASS_TINY var/cardname = null @@ -1124,7 +1036,7 @@ /obj/item/toy/nuke name = "\improper Nuclear Fission Explosive toy" desc = "A plastic model of a Nuclear Fission Explosive." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "nuketoyidle" w_class = WEIGHT_CLASS_SMALL var/cooldown = 0 @@ -1151,7 +1063,7 @@ /obj/item/toy/minimeteor name = "\improper Mini-Meteor" desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "minimeteor" w_class = WEIGHT_CLASS_SMALL @@ -1194,7 +1106,7 @@ /obj/item/toy/snowball name = "snowball" desc = "A compact ball of snow. Good for throwing at people." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "snowball" throwforce = 12 //pelt your enemies to death with lumps of snow damtype = STAMINA @@ -1268,7 +1180,7 @@ */ /obj/item/toy/toy_xeno - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "toy_xeno" name = "xenomorph action figure" desc = "MEGA presents the new Xenos Isolated action figure! Comes complete with realistic sounds! Pull back string to use." @@ -1297,7 +1209,7 @@ /obj/item/toy/cattoy name = "toy mouse" desc = "A colorful toy mouse!" - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "toy_mouse" w_class = WEIGHT_CLASS_SMALL var/cooldown = 0 @@ -1311,7 +1223,7 @@ /obj/item/toy/figure name = "Non-Specific Action Figure action figure" desc = null - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "nuketoy" var/cooldown = 0 var/toysay = "What the fuck did you do?" @@ -1518,7 +1430,7 @@ /obj/item/toy/dummy name = "ventriloquist dummy" desc = "It's a dummy, dummy." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "assistant" item_state = "doll" var/doll_name = "Dummy" diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm index 6a37ef80a9..542ba29d14 100644 --- a/code/modules/cargo/packs/costumes_toys.dm +++ b/code/modules/cargo/packs/costumes_toys.dm @@ -150,24 +150,30 @@ /obj/item/toy/talking/AI, /obj/item/toy/talking/codex_gigas, /obj/item/clothing/under/syndicate/tacticool, - /obj/item/toy/sword , + /obj/item/toy/sword, /obj/item/toy/gun, /obj/item/gun/ballistic/shotgun/toy/crossbow, /obj/item/storage/box/fakesyndiesuit, /obj/item/storage/crayons, /obj/item/toy/spinningtoy, - /obj/item/toy/prize/ripley, - /obj/item/toy/prize/fireripley, - /obj/item/toy/prize/deathripley, - /obj/item/toy/prize/gygax, - /obj/item/toy/prize/durand, - /obj/item/toy/prize/honk, - /obj/item/toy/prize/marauder, - /obj/item/toy/prize/seraph, - /obj/item/toy/prize/mauler, - /obj/item/toy/prize/odysseus, - /obj/item/toy/prize/phazon, - /obj/item/toy/prize/reticence, + /obj/item/toy/mecha/ripley, + /obj/item/toy/mecha/ripleymkii, + /obj/item/toy/mecha/hauler, + /obj/item/toy/mecha/clarke, + /obj/item/toy/mecha/odysseus, + /obj/item/toy/mecha/gygax, + /obj/item/toy/mecha/durand, + /obj/item/toy/mecha/savannahivanov, + /obj/item/toy/mecha/phazon, + /obj/item/toy/mecha/honk, + /obj/item/toy/mecha/darkgygax, + /obj/item/toy/mecha/mauler, + /obj/item/toy/mecha/darkhonk, + /obj/item/toy/mecha/deathripley, + /obj/item/toy/mecha/reticence, + /obj/item/toy/mecha/marauder, + /obj/item/toy/mecha/seraph, + /obj/item/toy/mecha/firefighter, /obj/item/toy/cards/deck, /obj/item/toy/nuke, /obj/item/toy/minimeteor, diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 20cb7cc824..5c63905d5c 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -4,6 +4,11 @@ /obj/item/clothing/head/collectable name = "collectable hat" desc = "A rare collectable hat." + icon_state = null + +/obj/item/clothing/head/collectable/Initialize() + . = ..() + AddElement(/datum/element/series, /obj/item/clothing/head/collectable, "Super duper collectable hats") /obj/item/clothing/head/collectable/petehat name = "ultra rare Pete's hat!" diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm index 16d51337f1..e1a81d6ea6 100644 --- a/code/modules/events/holiday/vday.dm +++ b/code/modules/events/holiday/vday.dm @@ -40,7 +40,7 @@ /obj/item/valentine name = "valentine" desc = "A Valentine's card! Wonder what it says..." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "sc_Ace of Hearts_syndicate" // shut up var/message = "A generic message of love or whatever." resistance_flags = FLAMMABLE diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm index 77db8dbe3f..5261887b73 100644 --- a/code/modules/games/cas.dm +++ b/code/modules/games/cas.dm @@ -12,7 +12,7 @@ /obj/item/toy/cards/deck/cas name = "\improper CAS deck (white)" desc = "A deck for the game Cards Against Spess, still popular after all these centuries. Warning: may include traces of broken fourth wall. This is the white deck." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "deck_caswhite_full" deckstyle = "caswhite" var/card_face = "cas_white" diff --git a/code/modules/games/unum.dm b/code/modules/games/unum.dm index 9820fa6754..3cd043e050 100644 --- a/code/modules/games/unum.dm +++ b/code/modules/games/unum.dm @@ -2,7 +2,7 @@ /obj/item/toy/cards/deck/unum name = "\improper UNUM deck" desc = "A deck of unum cards. House rules to argue over not included." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "deck_unum_full" deckstyle = "unum" original_size = 108 diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 9c538f4bde..89b1944ae0 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -118,7 +118,7 @@ var/eggcolor = pick("blue","green","mime","orange","purple","rainbow","red","yellow") icon_state = "egg-[eggcolor]" /obj/item/reagent_containers/food/snacks/egg/proc/dispensePrize(turf/where) - var/won = pick(/obj/item/clothing/head/bunnyhead, + var/prize_list = list(/obj/item/clothing/head/bunnyhead, /obj/item/clothing/suit/bunnysuit, /obj/item/reagent_containers/food/snacks/grown/carrot, /obj/item/reagent_containers/food/snacks/chocolateegg, @@ -126,13 +126,12 @@ /obj/item/toy/gun, /obj/item/toy/sword, /obj/item/toy/foamblade, - /obj/item/toy/prize/ripley, - /obj/item/toy/prize/honk, /obj/item/toy/plush/carpplushie, /obj/item/toy/redbutton, - /obj/item/clothing/head/collectable/rabbitears) + /obj/item/clothing/head/collectable/rabbitears) + subtypesof(/obj/item/toy/mecha) + var/won = pick(prize_list) new won(where) - new/obj/item/reagent_containers/food/snacks/chocolateegg(where) + new /obj/item/reagent_containers/food/snacks/chocolateegg(where) /obj/item/reagent_containers/food/snacks/egg/attack_self(mob/user) ..() diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index 5d6259d9c2..6585ca39a5 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -26,7 +26,7 @@ // Generates a holodeck-tracked card deck /obj/effect/holodeck_effect/cards - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "deck_nanotrasen_full" var/obj/item/toy/cards/deck/D diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 097023e643..906285a5c8 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -27,7 +27,7 @@ threat = 1 family_heirlooms = list( - /obj/item/toy/figure/borg + /obj/item/toy/figure/borg, ) mail_goodies = list( @@ -36,6 +36,10 @@ /obj/item/modular_computer/tablet/preset/advanced = 5 ) +/datum/job/roboticist/New() + . = ..() + family_heirlooms += subtypesof(/obj/item/toy/mecha) + /datum/outfit/job/roboticist name = "Roboticist" jobtype = /datum/job/roboticist diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 3f213eb934..24b5ce4052 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -61,7 +61,7 @@ if(53 to 54) new /obj/item/toy/balloon(src) if(55 to 56) - var/newitem = pick(subtypesof(/obj/item/toy/prize)) + var/newitem = pick(subtypesof(/obj/item/toy/mecha)) new newitem(src) if(57 to 58) new /obj/item/toy/syndicateballoon(src) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 4c8872ffbf..6170dfdb68 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -512,7 +512,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians /obj/item/guardiancreator name = "deck of tarot cards" desc = "An enchanted deck of tarot cards, rumored to be a source of unimaginable power." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "deck_syndicate_full" var/used = FALSE var/theme = "magic" diff --git a/code/modules/pool/pool_noodles.dm b/code/modules/pool/pool_noodles.dm index 6118354792..6ecb6b30b1 100644 --- a/code/modules/pool/pool_noodles.dm +++ b/code/modules/pool/pool_noodles.dm @@ -1,7 +1,7 @@ //Pool noodles /obj/item/toy/poolnoodle - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "noodle" name = "pool noodle" desc = "A strange, bulky, bendable toy that can annoy people." diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index cd3473f8fc..238e5770c4 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -69,7 +69,7 @@ /obj/item/gun/ballistic/shotgun/toy/crossbow name = "foam force crossbow" desc = "A weapon favored by many overactive children. Ages 8 and up." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "foamcrossbow" item_state = "crossbow" mag_type = /obj/item/ammo_box/magazine/internal/shot/toy/crossbow diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm index 4982571a3b..6273088453 100644 --- a/code/modules/reagents/reagent_containers/rags.dm +++ b/code/modules/reagents/reagent_containers/rags.dm @@ -2,7 +2,7 @@ name = "damp rag" desc = "For cleaning up messes, you suppose." w_class = WEIGHT_CLASS_TINY - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "rag" item_flags = NOBLUDGEON reagent_flags = REFILLABLE | DRAINABLE diff --git a/code/modules/research/designs/autoylathe_designs.dm b/code/modules/research/designs/autoylathe_designs.dm index 6db9755585..95eb469102 100644 --- a/code/modules/research/designs/autoylathe_designs.dm +++ b/code/modules/research/designs/autoylathe_designs.dm @@ -81,76 +81,129 @@ category = list("initial", "Toys") /datum/design/autoylathe/mech/model1 - name = "Toy Ripley" + name = "Toy Ripley MK-I" id = "toymech1" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/ripley + build_path = /obj/item/toy/mecha/ripley + category = list("hacked", "Figurines") /datum/design/autoylathe/mech/model2 - name = "Toy Firefighter Ripley" + name = "Toy Ripley MK-II" id = "toymech2" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/fireripley + build_path = /obj/item/toy/mecha/ripleymkii + category = list("hacked", "Figurines") -/datum/design/autoylathe/mech/contraband/model3 - name = "Toy Deathsquad fireripley " +/datum/design/autoylathe/mech/model3 + name = "Toy Hauler" id = "toymech3" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/deathripley + build_path = /obj/item/toy/mecha/hauler + category = list("hacked", "Figurines") /datum/design/autoylathe/mech/model4 - name = "Toy Gygax" + name = "Toy Clarke" id = "toymech4" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/gygax + build_path = /obj/item/toy/mecha/clarke + category = list("hacked", "Figurines") /datum/design/autoylathe/mech/model5 - name = "Toy Durand" + name = "Toy Odysseus" id = "toymech5" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/durand + build_path = /obj/item/toy/mecha/odysseus + category = list("hacked", "Figurines") -/datum/design/autoylathe/mech/contraband/model6 - name = "Toy H.O.N.K." +/datum/design/autoylathe/mech/model6 + name = "Toy Gygax" id = "toymech6" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/honk + build_path = /obj/item/toy/mecha/gygax + category = list("hacked", "Figurines") -/datum/design/autoylathe/mech/contraband/model7 - name = "Toy Marauder" +/datum/design/autoylathe/mech/model7 + name = "Toy Durand" id = "toymech7" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/marauder + build_path = /obj/item/toy/mecha/durand + category = list("hacked", "Figurines") -/datum/design/autoylathe/mech/contraband/model8 - name = "Toy Seraph" +/datum/design/autoylathe/mech/model8 + name = "Toy Savannah-Ivanov" id = "toymech8" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/seraph + build_path = /obj/item/toy/mecha/savannahivanov + category = list("hacked", "Figurines") -/datum/design/autoylathe/mech/contraband/model9 - name = "Toy Mauler" +/datum/design/autoylathe/mech/model9 + name = "Toy Phazon" id = "toymech9" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/mauler + build_path = /obj/item/toy/mecha/phazon + category = list("hacked", "Figurines") -/datum/design/autoylathe/mech/model10 - name = "Toy Odysseus" +/datum/design/autoylathe/mech/contraband/model10 + name = "Toy H.O.N.K" id = "toymech10" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/odysseus + build_path = /obj/item/toy/mecha/honk + category = list("hacked", "Figurines") -/datum/design/autoylathe/mech/model11 - name = "Toy Phazon" +/datum/design/autoylathe/mech/contraband/model11 + name = "Toy Dark Gygax" id = "toymech11" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/phazon + build_path = /obj/item/toy/mecha/darkgygax + category = list("hacked", "Figurines") /datum/design/autoylathe/mech/contraband/model12 - name = "Toy Reticence" + name = "Toy Mauler" id = "toymech12" materials = list(/datum/material/plastic = 250) - build_path = /obj/item/toy/prize/reticence + build_path = /obj/item/toy/mecha/mauler + category = list("hacked", "Figurines") + +/datum/design/autoylathe/mech/contraband/model13 + name = "Toy Dark H.O.N.K" + id = "toymech13" + materials = list(/datum/material/plastic = 250) + build_path = /obj/item/toy/mecha/darkhonk + category = list("hacked", "Figurines") + +/datum/design/autoylathe/mech/contraband/model14 + name = "Toy Death-Ripley" + id = "toymech14" + materials = list(/datum/material/plastic = 250) + build_path = /obj/item/toy/mecha/deathripley + category = list("hacked", "Figurines") + +/datum/design/autoylathe/mech/contraband/model15 + name = "Toy Reticence" + id = "toymech15" + materials = list(/datum/material/plastic = 250) + build_path = /obj/item/toy/mecha/reticence + category = list("hacked", "Figurines") + +/datum/design/autoylathe/mech/contraband/model16 + name = "Toy Marauder" + id = "toymech16" + materials = list(/datum/material/plastic = 250) + build_path = /obj/item/toy/mecha/marauder + category = list("hacked", "Figurines") + +/datum/design/autoylathe/mech/contraband/model17 + name = "Toy Seraph" + id = "toymech17" + materials = list(/datum/material/plastic = 250) + build_path = /obj/item/toy/mecha/seraph + category = list("hacked", "Figurines") + +/datum/design/autoylathe/mech/model18 + name = "Toy Firefighter" + id = "toymech18" + materials = list(/datum/material/plastic = 250) + build_path = /obj/item/toy/mecha/firefighter category = list("hacked", "Figurines") /datum/design/autoylathe/talking/AI diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index 0be8cb9196..774f1820ea 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -333,7 +333,7 @@ /obj/item/spellpacket/lightningbolt name = "\improper Lightning bolt Spell Packet" desc = "Some birdseed wrapped in cloth that somehow crackles with electricity." - icon = 'icons/obj/toy.dmi' + icon = 'icons/obj/toys/toy.dmi' icon_state = "snappop" w_class = WEIGHT_CLASS_TINY diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi deleted file mode 100644 index e8106905b7c89cee345dc878fc00fd505afd8980..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37317 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 diff --git a/icons/obj/toys/toy.dmi b/icons/obj/toys/toy.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8a4826d411ae6e44e1283f7053fad5edb0ba281b GIT binary patch literal 46357 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