diff --git a/code/datums/components/crafting/recipes/weapons.dm b/code/datums/components/crafting/recipes/weapons.dm index 6baa4b5e9bf..b8fe974e056 100644 --- a/code/datums/components/crafting/recipes/weapons.dm +++ b/code/datums/components/crafting/recipes/weapons.dm @@ -48,3 +48,11 @@ time = 40 category = CAT_WEAPONRY subcategory = CAT_AMMO + +/datum/crafting_recipe/primitive_shield + name = "Primitive Shield" + result = /obj/item/weapon/shield/primitive + reqs = list(list(/obj/item/stack/material/wood = 2), list(/obj/item/weapon/reagent_containers/glass/bucket/wood =1), list(/obj/item/stack/material/cloth = 5)) + time = 120 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON diff --git a/code/datums/outfits/costumes/halloween.dm b/code/datums/outfits/costumes/halloween.dm index 76b510807aa..35f4aa238d5 100644 --- a/code/datums/outfits/costumes/halloween.dm +++ b/code/datums/outfits/costumes/halloween.dm @@ -25,8 +25,8 @@ var/obj/item/weapon/storage/briefcase/new_briefcase = new(H) for(var/obj/item/briefcase_item in new_briefcase) qdel(briefcase_item) - new_briefcase.contents += new /obj/item/toy/crossbow - new_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/capgun + new_briefcase.contents += new /obj/item/weapon/gun/projectile/pistol/toy + new_briefcase.contents += new /obj/item/ammo_magazine/mfoam_dart/pistol new_briefcase.contents += new /obj/item/clothing/mask/gas/clown_hat H.equip_to_slot_or_del(new_briefcase, slot_l_hand) @@ -102,7 +102,7 @@ suit = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless shoes = /obj/item/clothing/shoes/boots/jackboots gloves = /obj/item/clothing/gloves/fingerless - l_pocket = /obj/item/toy/crossbow + l_pocket = /obj/item/weapon/gun/projectile/revolver/toy/crossbow/halloween r_pocket = /obj/item/device/flashlight/color/red /decl/hierarchy/outfit/costume/pirate @@ -119,4 +119,12 @@ shoes = /obj/item/clothing/shoes/white suit = /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout gloves = /obj/item/clothing/gloves/white - mask = /obj/item/clothing/mask/surgical \ No newline at end of file + mask = /obj/item/clothing/mask/surgical + +/decl/hierarchy/outfit/costume/marine + name = OUTFIT_COSTUME("Ruin Marine") + uniform = /obj/item/clothing/under/color/grey + shoes = /obj/item/clothing/shoes/brown + head = /obj/item/clothing/head/marine + suit = /obj/item/clothing/suit/marine + r_hand = /obj/item/weapon/gun/projectile/revolver/toy/sawnoff \ No newline at end of file diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index a3b6ad30d59..ba6a33d48cb 100644 --- a/code/datums/supplypacks/recreation.dm +++ b/code/datums/supplypacks/recreation.dm @@ -1,7 +1,7 @@ /* -* Here is where any supply packs -* related to recreation live. -*/ + * Here is where any supply packs + * related to recreation live. + */ /datum/supply_pack/recreation @@ -23,6 +23,25 @@ containertype = /obj/structure/closet/crate/allico containername = "foam weapon crate" +/datum/supply_pack/recreation/donksoftweapons + name = "Donk-Soft Weapon Crate" + contains = list( + /obj/item/ammo_magazine/ammo_box/foam = 2, + /obj/item/weapon/gun/projectile/shotgun/pump/toy = 2, + /obj/item/weapon/gun/projectile/pistol/toy = 2, + /obj/item/ammo_magazine/mfoam_dart/pistol = 2 + ) + cost = 50 + containertype = /obj/structure/closet/crate/allico + containername = "foam weapon crate" + +/datum/supply_pack/recreation/donksoftvend + name = "Donk-Soft Vendor Crate" + contains = list() + cost = 75 + containertype = /obj/structure/largecrate/donksoftvendor + containername = "\improper Donk-Soft vendor crate" + /datum/supply_pack/recreation/lasertag name = "Lasertag equipment" contains = list( diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 9919fc3ee46..b4f85da77db 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -8,8 +8,8 @@ /obj/item/toy/blink = 2, /obj/item/clothing/under/syndicate/tacticool = 2, /obj/item/toy/sword = 2, - /obj/item/weapon/gun/projectile/revolver/capgun = 2, - /obj/item/toy/crossbow = 2, + /obj/item/weapon/storage/box/capguntoy = 2, + /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 2, /obj/item/clothing/suit/syndicatefake = 2, /obj/item/weapon/storage/fancy/crayons = 2, /obj/item/toy/spinningtoy = 2, diff --git a/code/game/machinery/computer/arcade_vr.dm b/code/game/machinery/computer/arcade_vr.dm index 210f31360f7..cc5bd8fe749 100644 --- a/code/game/machinery/computer/arcade_vr.dm +++ b/code/game/machinery/computer/arcade_vr.dm @@ -3,8 +3,8 @@ /obj/item/toy/blink = 2, /obj/item/clothing/under/syndicate/tacticool = 2, /obj/item/toy/sword = 2, - /obj/item/weapon/gun/projectile/revolver/capgun = 2, - /obj/item/toy/crossbow = 2, + /obj/item/weapon/storage/box/capguntoy = 2, + /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 2, /obj/item/clothing/suit/syndicatefake = 2, /obj/item/weapon/storage/fancy/crayons = 2, /obj/item/toy/spinningtoy = 2, diff --git a/code/game/objects/items/toys/mech_toys.dm b/code/game/objects/items/toys/mech_toys.dm index a8dd875f30b..3fdb9c66598 100644 --- a/code/game/objects/items/toys/mech_toys.dm +++ b/code/game/objects/items/toys/mech_toys.dm @@ -2,7 +2,7 @@ * Mech toys (previously labeled prizes, but that's unintuitive) * Mech toy combat */ - + // Mech battle special attack types. #define SPECIAL_ATTACK_HEAL 1 #define SPECIAL_ATTACK_DAMAGE 2 @@ -17,7 +17,7 @@ icon_state = "ripleytoy" drop_sound = 'sound/mecha/mechstep.ogg' reach = 2 // So you can battle across the table! - + // Mech Battle Vars var/timer = 0 // Timer when it'll be off cooldown var/cooldown = 1.5 SECONDS // Cooldown between play sessions (and interactions) @@ -34,7 +34,7 @@ var/special_attack_cooldown = 0 // Current cooldown of their special attack var/wins = 0 // This mech's win count in combat var/losses = 0 // ...And their loss count in combat - + /obj/item/toy/mecha/Initialize() . = ..() desc = "Mini-Mecha action figure! Collect them all! Attack your friends or another mech with one to initiate epic mech combat! [desc]." @@ -58,7 +58,7 @@ return 0 //not in range and not telekinetic /** - * this proc combines "sleep" while also checking for if the battle should continue + * 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). @@ -112,7 +112,7 @@ // 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) @@ -130,15 +130,15 @@ attack_self(user) /** - * If you attack a mech with a mech, initiate combat between them + * 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)) + if(istype(user_toy, /obj/item/toy/mecha)) var/obj/item/toy/mecha/M = user_toy if(check_battle_start(user, M)) mecha_brawl(M, user) ..() - + /** * Attack is called from the user's toy, aimed at target(another human), checking for target's toy. */ @@ -241,9 +241,9 @@ sleep(1 SECONDS) //--THE BATTLE BEGINS-- - while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH) + 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 + break //before we do anything - deal with charged attacks if(special_attack_charged) @@ -269,7 +269,7 @@ attacker.special_attack_charged = TRUE attacker_controller.visible_message(" [attacker] begins charging its special attack!! ", \ " You begin charging [attacker]'s special attack! ") - else //just attack + else //just attack attacker.SpinAnimation(5, 0) playsound(attacker, 'sound/mecha/mechstep.ogg', 30, TRUE) combat_health-- @@ -322,7 +322,7 @@ special_attack_charged = TRUE src_controller.visible_message(" [src] begins charging its special attack!! ", \ " You begin charging [src]'s special attack! ") - else //just attack + else //just attack SpinAnimation(5, 0) playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE) attacker.combat_health-- @@ -333,12 +333,12 @@ attacker.combat_health-- playsound(attacker, 'sound/effects/meteorimpact.ogg', 20, TRUE) src_controller.visible_message(" ...and lands a CRIPPLING BLOW! ", \ - " ...and you land a CRIPPLING blow on [attacker]! ", null) + " ...and you land a CRIPPLING blow on [attacker]! ", null) else attacker_controller.visible_message(" [src] and [attacker] stand around awkwardly.", \ - " You don't know what to do next.") + " You don't know what to do next.") - battle_length++ + battle_length++ sleep(0.5 SECONDS) /// Lines chosen for the winning mech @@ -347,7 +347,7 @@ if(attacker.combat_health <= 0 && combat_health <= 0) //both lose playsound(src, 'sound/machines/warning-buzzer.ogg', 20, TRUE) attacker_controller.visible_message(" MUTUALLY ASSURED DESTRUCTION!! [src] and [attacker] both end up destroyed!", \ - " Both [src] and [attacker] are destroyed!") + " Both [src] and [attacker] are destroyed!") else if(attacker.combat_health <= 0) //src wins wins++ attacker.losses++ @@ -359,7 +359,7 @@ " You raise up [src] victoriously over [attacker]!") else if (combat_health <= 0) //attacker wins attacker.wins++ - losses++ + losses++ playsound(src, 'sound/effects/light_flicker.ogg', 20, TRUE) src_controller.visible_message(" [src] collapses!", \ " [src] collapses!", null) @@ -374,7 +374,7 @@ in_combat = FALSE attacker.in_combat = FALSE - combat_health = max_combat_health + combat_health = max_combat_health attacker.combat_health = attacker.max_combat_health return @@ -382,49 +382,49 @@ /** * 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) 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 + * * 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) - var/datum/gender/T +/obj/item/toy/mecha/proc/check_battle_start(mob/living/carbon/user, obj/item/toy/mecha/attacker, mob/living/carbon/target) + var/datum/gender/T if(target) T = gender_datums[target.get_visible_gender()] // Doing this because Polaris Code has shitty gender datums and it's clunkier than FUCK. if(attacker && attacker.in_combat) to_chat(user, "[target ? T.His : "Your" ] [attacker.name] is in combat.") - if(target) + if(target) to_chat(target, "Your [attacker.name] is in combat.") - return FALSE + return FALSE if(in_combat) to_chat(user, "Your [name] is in combat.") - if(target) + if(target) to_chat(target, "[T.His] [name] is in combat.") - return FALSE + return FALSE if(attacker && attacker.timer > world.time) to_chat(user, "[target?T.His : "Your" ] [attacker.name] isn't ready for battle.") - if(target) + if(target) to_chat(target, "Your [attacker.name] isn't ready for battle.") - return FALSE + return FALSE if(timer > world.time) to_chat(user, "Your [name] isn't ready for battle.") - if(target) + if(target) to_chat(target, "[T.His] [name] isn't ready for battle.") - return FALSE + return FALSE return TRUE /** - * Processes any special attack moves that happen in the battle (called in the mechaBattle proc). + * 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) +/obj/item/toy/mecha/proc/special_attack_move(obj/item/toy/mecha/victim) visible_message(special_attack_cry + "!!") special_attack_charged = FALSE @@ -447,15 +447,15 @@ visible_message("I FORGOT MY SPECIAL ATTACK...") /** - * Base proc for 'other' special attack moves. + * Base proc for 'other' special attack moves. * - * This one is only for inheritance, each mech with an 'other' type move has their procs below. + * 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) +/obj/item/toy/mecha/proc/super_special_attack(obj/item/toy/mecha/victim) visible_message(" [src] does a cool flip.") - + /obj/random/mech_toy name = "Random Mech Toy" desc = "This is a random mech toy." @@ -488,8 +488,8 @@ 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) + +/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. visible_message("EXECUTE!!") @@ -522,7 +522,7 @@ 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) +/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++ @@ -577,7 +577,7 @@ 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) +/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. diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index dc5a811a0e6..0b1343d63e6 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -3,8 +3,6 @@ * Balloons * Fake telebeacon * Fake singularity - * Toy gun - * Toy crossbow * Toy swords * Toy bosun's whistle * Snap pops @@ -145,127 +143,6 @@ icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" -/* - * Toy crossbow - */ - -/obj/item/toy/crossbow - name = "foam dart crossbow" - desc = "A weapon favored by many overactive children. Ages 8 and up." - icon = 'icons/obj/gun.dmi' - icon_state = "crossbow" - item_icons = list( - icon_l_hand = 'icons/mob/items/lefthand_guns.dmi', - icon_r_hand = 'icons/mob/items/righthand_guns.dmi', - ) - slot_flags = SLOT_HOLSTER - w_class = ITEMSIZE_SMALL - attack_verb = list("attacked", "struck", "hit") - var/bullets = 5 - drop_sound = 'sound/items/drop/gun.ogg' - -/obj/item/toy/crossbow/examine(mob/user) - . = ..() - if(bullets && get_dist(user, src) <= 2) - . += "It is loaded with [bullets] foam darts!" - -/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/toy/ammo/crossbow)) - if(bullets <= 4) - user.drop_item() - qdel(I) - bullets++ - to_chat(user, "You load the foam dart into the crossbow.") - else - to_chat(usr, "It's already fully loaded.") - - -/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!isturf(target.loc) || target == user) return - if(flag) return - - if (locate (/obj/structure/table, src.loc)) - return - else if (bullets) - var/turf/trg = get_turf(target) - var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src)) - bullets-- - D.icon_state = "foamdart" - D.name = "foam dart" - playsound(src, 'sound/items/syringeproj.ogg', 50, 1) - - for(var/i=0, i<6, i++) - if (D) - if(D.loc == trg) break - step_towards(D,trg) - - for(var/mob/living/M in D.loc) - if(!istype(M,/mob/living)) continue - if(M == user) continue - for(var/mob/O in viewers(world.view, D)) - O.show_message(text("\The [] was hit by the foam dart!", M), 1) - new /obj/item/toy/ammo/crossbow(M.loc) - qdel(D) - return - - for(var/atom/A in D.loc) - if(A == user) continue - if(A.density) - new /obj/item/toy/ammo/crossbow(A.loc) - qdel(D) - - sleep(1) - - spawn(10) - if(D) - new /obj/item/toy/ammo/crossbow(D.loc) - qdel(D) - - return - else if (bullets == 0) - user.Weaken(5) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\The [] realized they were out of ammo and starting scrounging for some!", user), 1) - - -/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) - src.add_fingerprint(user) - -// ******* Check - - if (src.bullets > 0 && M.lying) - - for(var/mob/O in viewers(M, null)) - if(O.client) - O.show_message(text("\The [] casually lines up a shot with []'s head and pulls the trigger!", user, M), 1, "You hear the sound of foam against skull", 2) - O.show_message(text("\The [] was hit in the head by the foam dart!", M), 1) - - playsound(src, 'sound/items/syringeproj.ogg', 50, 1) - new /obj/item/toy/ammo/crossbow(M.loc) - src.bullets-- - else if (M.lying && src.bullets == 0) - for(var/mob/O in viewers(M, null)) - if (O.client) O.show_message(text("\The [] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", user, M), 1, "You hear someone fall", 2) - user.Weaken(5) - return - -/obj/item/toy/ammo/crossbow - name = "foam dart" - desc = "It's nerf or nothing! Ages 8 and up." - icon = 'icons/obj/toy.dmi' - icon_state = "foamdart" - w_class = ITEMSIZE_TINY - slot_flags = SLOT_EARS - drop_sound = 'sound/items/drop/food.ogg' - -/obj/effect/foam_dart_dummy - name = "" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "null" - anchored = TRUE - density = FALSE - /* * Toy swords */ @@ -394,7 +271,6 @@ /* * Bosun's whistle */ - /obj/item/toy/bosunwhistle name = "bosun's whistle" desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow." @@ -1526,7 +1402,7 @@ name = "black king" desc = "A black king chess piece." description_info = "The King can move exactly one square horizontally, vertically, or diagonally. If your opponent captures this piece, you lose." - icon_state = "black_king" + icon_state = "black_king" /// Balloon structures diff --git a/code/game/objects/items/toys/toys_vr.dm b/code/game/objects/items/toys/toys_vr.dm index 21f2f1cc071..a13046dc63c 100644 --- a/code/game/objects/items/toys/toys_vr.dm +++ b/code/game/objects/items/toys/toys_vr.dm @@ -1,9 +1,42 @@ +/* Virgo Toys! + * Contains: + * Mistletoe + * Plushies + * Pet rocks + * Chew toys + * Cat toys + * Fake flash + * Big red button + * Garden gnome + * Toy AI + * Hand buzzer + * Toy cuffs + * Toy nuke + * Toy gibber + * Toy xeno + * Russian revolver + * Trick revolver + * Toy chainsaw + * Random miniature spawner + * Snake popper + * Professor Who universal ID + * Professor Who sonic driver + * Action figures + */ + + +/* + * Mistletoe + */ /obj/item/toy/mistletoe name = "mistletoe" desc = "You are supposed to kiss someone under these" icon = 'icons/obj/toy_vr.dmi' icon_state = "mistletoe" +/* + * Plushies + */ // HEY FUTURE PLUSHIE CODERS: IF YOU'RE ADDING A SNOWFLAKE PLUSH ITEM USE PATH /obj/item/toy/plushie/fluff // the loadout entry shouldn't be able to grab those if everything goes right /obj/item/toy/plushie/lizardplushie @@ -103,38 +136,6 @@ /obj/item/toy/plushie/vox/proc/cooldownreset() cooldown = 0 -/* -* 4/9/21 * -* IPC Plush -* Toaster plush -* Snake plush -* Cube plush -* Pip plush -* Moth plush -* Crab plush -* Possum plush -* Goose plush -* White mouse plush -* Pet rock -* Pet rock (m) -* Pet rock (f) -* Chew toys -* Cat toy * 2 -* Toy flash -* Toy button -* Gnome -* Toy AI -* Buzzer ring -* Fake handcuffs -* Nuke toy -* Toy gibber -* Toy xeno -* Fake gun * 2 -* Toy chainsaw -* Random tabletop miniature spawner -* snake popper -*/ - /obj/item/toy/plushie/ipc name = "IPC plushie" desc = "A pleasing soft-toy of a monitor-headed robot. Toaster functionality included." @@ -174,7 +175,6 @@ else return ..() - /obj/item/toy/plushie/ipc/attack_self(mob/user as mob) if(!cooldown) playsound(user, 'sound/machines/ping.ogg', 10, 0) @@ -276,7 +276,9 @@ /obj/item/toy/plushie/goose name = "goose plushie" - desc = "An adorable likeness of a terrifying beast. It's simple existance chills you to the bone and compells you to hide any loose objects it might steal." + desc = "An adorable likeness of a terrifying beast. \ + It's simple existance chills you to the bone and \ + compells you to hide any loose objects it might steal." icon = 'icons/obj/toy_vr.dmi' icon_state = "goose" attack_verb = list("honked") @@ -286,9 +288,54 @@ icon_state = "mouse" icon = 'icons/obj/toy_vr.dmi' +/obj/item/toy/plushie/susred + name = "red spaceman plushie" + desc = "A suspicious looking red spaceman plushie. Why does it smell like the vents?" + icon = 'icons/obj/toy_vr.dmi' + icon_state = "sus_red" + attack_verb = list("stabbed", "slashed") + +/obj/item/toy/plushie/ipc/toaster/attack_self(mob/user as mob) + if(!cooldown) + playsound(user, 'sound/weapons/slice.ogg', 10, 0) + src.visible_message("Stab!") + cooldown = 1 + addtimer(CALLBACK(src, .proc/cooldownreset), 50) + return ..() + +/obj/item/toy/plushie/susblue + name = "blue spaceman plushie" + desc = "A dapper looking blue spaceman plushie. Looks very intuitive." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "sus_blue" + +/obj/item/toy/plushie/suswhite + name = "white spaceman plushie" + desc = "A whiny looking white spaceman plushie. Looks like it could cry at any moment." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "sus_white" + +/obj/item/toy/plushie/bigcat + name = "big cat plushie" + desc = "A big, fluffy looking cat that just looks very huggable." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "big_cat" + +/obj/item/toy/plushie/basset + name = "basset plushie" + desc = "A sleepy looking basset hound plushie." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "basset" + +/* + * Pet rocks + */ /obj/item/toy/rock name = "pet rock" - desc = "A stuffed version of the classic pet. The soft ones were made after kids kept throwing them at each other. It has a small piece of soft plastic that you can draw on if you wanted." + desc = "A stuffed version of the classic pet. \ + The soft ones were made after kids kept throwing \ + them at each other. It has a small piece of soft \ + plastic that you can draw on if you wanted." icon = 'icons/obj/toy_vr.dmi' icon_state = "rock" attack_verb = list("grug'd", "unga'd") @@ -309,6 +356,9 @@ to_chat(user, "You draw a face on the rock and pull aside the plastic slightly, revealing a small pink bow.") return +/* + * Chew toys + */ /obj/item/toy/chewtoy name = "chew toy" desc = "A red hard-rubber chew toy shaped like a bone. Perfect for your dog! You wouldn't want to chew on it, right?" @@ -332,6 +382,9 @@ playsound(loc, 'sound/items/drop/plushie.ogg', 50, 1) user.visible_message("\The [user] gnaws on [src]!","You gnaw on [src]!") +/* + * Cat toys + */ /obj/item/toy/cat_toy name = "toy mouse" desc = "A colorful toy mouse!" @@ -351,6 +404,9 @@ slot_r_hand_str = 'icons/mob/items/righthand_material.dmi', ) +/* + * Fake flash + */ /obj/item/toy/flash name = "toy flash" desc = "FOR THE REVOLU- Oh wait, that's just a toy." @@ -376,6 +432,9 @@ /obj/item/toy/flash/proc/cooldownreset() cooldown = 0 +/* + * Big red button + */ /obj/item/toy/redbutton name = "big red button" desc = "A big, plastic red button. Reads 'From HonkCo Pranks?' on the back." @@ -396,12 +455,18 @@ else to_chat(user, "Nothing happens.") +/* + * Garden gnome + */ /obj/item/toy/gnome name = "garden gnome" desc = "It's a gnome, not a gnelf. Made of weak ceramic." icon = 'icons/obj/toy_vr.dmi' icon_state = "gnome" +/* + * Toy AI + */ /obj/item/toy/AI name = "toy AI" desc = "A little toy model AI core with real law announcing action!" @@ -436,6 +501,9 @@ /obj/item/toy/AI/proc/cooldownreset() cooldown = 0 +/* + * Hand buzzer + */ /obj/item/clothing/gloves/ring/buzzer/toy name = "steel ring" desc = "Torus shaped finger decoration. It has a small piece of metal on the palm-side." @@ -462,6 +530,9 @@ return 0 +/* + * Toy cuffs + */ /obj/item/weapon/handcuffs/fake name = "plastic handcuffs" desc = "Use this to keep plastic prisoners in line." @@ -486,6 +557,9 @@ foldable = null can_hold = list(/obj/item/weapon/handcuffs/fake, /obj/item/weapon/handcuffs/legcuffs/fake) +/* + * Toy nuke + */ /obj/item/toy/nuke name = "\improper Nuclear Fission Explosive toy" desc = "A plastic model of a Nuclear Fission Explosive." @@ -512,6 +586,9 @@ if(istype(I, /obj/item/weapon/disk/nuclear)) to_chat(user, "Nice try. Put that disk back where it belongs.") +/* + * Toy gibber + */ /obj/item/toy/minigibber name = "miniature gibber" desc = "A miniature recreation of NanoTrasen's famous meat grinder. Equipped with a special interlock that prevents insertion of organic material." @@ -549,6 +626,9 @@ else ..() +/* + * Toy xeno + */ /obj/item/toy/toy_xeno icon = 'icons/obj/toy_vr.dmi' icon_state = "xeno" @@ -573,6 +653,9 @@ to_chat(user, "The string on [src] hasn't rewound all the way!") return +/* + * Russian revolver + */ /obj/item/toy/russian_revolver name = "russian revolver" desc = "For fun and games!" @@ -643,6 +726,9 @@ to_chat(user, "[src] needs to be reloaded.") return FALSE +/* + * Trick revolver + */ /obj/item/toy/russian_revolver/trick_revolver name = "\improper .357 revolver" desc = "A suspicious revolver. Uses .357 ammo." @@ -670,6 +756,9 @@ sleep(5) icon_state = "[initial(icon_state)]" +/* + * Toy chainsaw + */ /obj/item/toy/chainsaw name = "Toy Chainsaw" desc = "A toy chainsaw with a rubber edge. Ages 8 and up" @@ -692,6 +781,9 @@ /obj/item/toy/chainsaw/proc/cooldownreset() cooldown = 0 +/* + * Random miniature spawner + */ /obj/random/miniature name = "Random miniature" desc = "This is a random miniature." @@ -701,6 +793,9 @@ /obj/random/miniature/item_to_spawn() return pick(typesof(/obj/item/toy/character)) +/* + * Snake popper + */ /obj/item/toy/snake_popper name = "bread tube" desc = "Bread in a tube. Chewy...and surprisingly tasty." @@ -777,3 +872,93 @@ real = 2 to_chat(user, "You short out the bluespace refill system of [src].") +/* + * Professor Who universal ID + */ +/obj/item/clothing/under/universalid + name = "identification card" + desc = "A novelty identification card based on Professor Who's Universal ID." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "universal_id" + w_class = ITEMSIZE_TINY + slot_flags = SLOT_ID | SLOT_EARS + body_parts_covered = 0 + equip_sound = null + + sprite_sheets = null + + item_state = "golem" //This is dumb and hacky but was here when I got here. + worn_state = "golem" //It's basically just a coincidentally black iconstate in the file. + +/* + * Professor Who sonic driver + */ +/obj/item/weapon/tool/screwdriver/sdriver + name = "sonic driver" + desc = "A novelty screwdriver that uses tiny magnets to manipulate screws." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "sonic_driver" + item_state = "screwdriver_black" + usesound = 'sound/items/sonic_driver.ogg' + toolspeed = 1 + random_color = FALSE + +/* + * Professor Who time capsule + */ +/obj/item/weapon/storage/box/timecap + name = "action time capsule" + desc = "A toy recreation of the Time Capsule from Professor Who. Can hold up to two action figures." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "time_cap" + can_hold = list(/obj/item/toy/figure) + max_w_class = ITEMSIZE_TINY + max_storage_space = ITEMSIZE_COST_TINY * 2 + use_sound = 'sound/machines/click.ogg' + drop_sound = 'sound/items/drop/accessory.ogg' + pickup_sound = 'sound/items/pickup/accessory.ogg' + +/* + * Action figures + */ +/obj/item/toy/figure/ranger + name = "Space Ranger action figure" + desc = "A \"Space Life\" brand Space Ranger action figure." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "ranger" + toysay = "To the Fontier and beyond!" + +/obj/item/toy/figure/leadbandit + name = "Bandit Leader action figure" + desc = "A \"Space Life\" brand Bandit Leader action figure." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "bandit_lead" + toysay = "Give us yer bluespace crystals!" + +/obj/item/toy/figure/bandit + name = "Bandit action figure" + desc = "A \"Space Life\" brand Bandit action figure." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "bandit" + toysay = "Stick em' up!" + +/obj/item/toy/figure/abe + name = "Action Abe action figure" + desc = "A \"Space Life\" brand Action Abe action figure." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "action_abe" + toysay = "Four score and seven decades ago..." + +/obj/item/toy/figure/profwho + name = "Professor Who action figure" + desc = "A \"Space Life\" brand Professor Who action figure." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "prof_who" + toysay = "Smells like... bad wolf..." + +/obj/item/toy/figure/prisoner + name = "prisoner action figure" + desc = "A \"Space Life\" brand prisoner action figure." + icon = 'icons/obj/toy_vr.dmi' + icon_state = "prisoner" + toysay = "I did not hit her! I did not!" diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 285fba5bfda..d7fcb01fce9 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -85,8 +85,8 @@ /obj/item/weapon/beach_ball/holoball, /obj/item/toy/balloon, /obj/item/toy/blink, - /obj/item/toy/crossbow, - /obj/item/weapon/gun/projectile/revolver/capgun, + /obj/item/weapon/gun/projectile/revolver/toy/crossbow, + /obj/item/weapon/storage/box/capguntoy, /obj/item/toy/katana, /obj/item/toy/mecha/deathripley, /obj/item/toy/mecha/durand, diff --git a/code/game/objects/items/weapons/shields_vr.dm b/code/game/objects/items/weapons/shields_vr.dm index 514ecd15c92..a311a740891 100644 --- a/code/game/objects/items/weapons/shields_vr.dm +++ b/code/game/objects/items/weapons/shields_vr.dm @@ -92,3 +92,11 @@ icon_state = "explorer_shield_P_lighted" else icon_state = "explorer_shield_P" + +/obj/item/weapon/shield/primitive + name = "primitive shield" + desc = "A defensive object that is little more than planks strapped your arm" + icon = 'icons/obj/weapons.dmi' + icon_state = "buckler" + w_class = ITEMSIZE_LARGE + base_block_chance = 30 diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 9e82b6f434b..96d03266544 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -123,11 +123,11 @@ ) /obj/item/weapon/storage/belt/utility/holding - name = "tool-belt of holding" + name = "tool-belt of holding" desc = "A belt that uses localized bluespace pockets to hold more items than expected!" icon_state = "utility_holding" storage_slots = 14 //twice the amount as a normal belt - max_storage_space = ITEMSIZE_COST_NORMAL * 14 + max_storage_space = ITEMSIZE_COST_NORMAL * 14 can_hold = list( /obj/item/weapon/tool/crowbar, /obj/item/weapon/tool/screwdriver, @@ -164,7 +164,7 @@ /obj/item/stack/material/steel, /obj/item/stack/material/glass, /obj/item/device/lightreplacer, - /obj/item/weapon/pickaxe/plasmacutter + /obj/item/weapon/pickaxe/plasmacutter ) @@ -207,11 +207,11 @@ icon_state = "ems" /obj/item/weapon/storage/belt/medical/holding - name = "medical belt of holding" + name = "medical belt of holding" desc = "A belt that uses localized bluespace pockets to hold more items than expected!" icon_state = "med_holding" storage_slots = 14 //twice the amount as a normal belt - max_storage_space = ITEMSIZE_COST_NORMAL * 14 + max_storage_space = ITEMSIZE_COST_NORMAL * 14 /obj/item/weapon/storage/belt/security name = "security belt" @@ -530,3 +530,12 @@ desc = "The fancy utility-belt holding the tools, cuffs and gadgets of the Go Go ERT-Rangers. The belt buckle is not real phoron, but it is still surprisingly comfortable to wear." icon = 'icons/obj/clothing/ranger.dmi' icon_state = "ranger_belt" + +/obj/item/weapon/storage/belt/dbandolier + name = "\improper Donk-Soft bandolier" + desc = "A Donk-Soft bandolier! Carry your spare darts anywhere! Ages 8 and up." + icon_state = "dbandolier" + storage_slots = 8 + can_hold = list( + /obj/item/ammo_casing/afoam_dart + ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 2f293ddde9b..4eac505ebf0 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -568,3 +568,17 @@ name = "ambrosia deus seeds box" desc = "Contains the seeds you need to get a proper healthy high." starts_with = list(/obj/item/seeds/ambrosiadeusseed = 7) + +/obj/item/weapon/storage/box/capguntoy + name = "\improper AlliCo \"Zipper\" Cap Gun" + icon = 'icons/obj/gun_toy.dmi' + icon_state = "cap_gun_box" + desc = "This box is shaped on the inside so that only the \"Zipper\" Capgun and extra caps can fit." + item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") + storage_slots = 2 + max_w_class = ITEMSIZE_NORMAL + can_hold = list(/obj/item/weapon/gun/projectile/revolver/capgun, /obj/item/ammo_magazine/ammo_box/cap) + starts_with = list( + /obj/item/weapon/gun/projectile/revolver/capgun = 1, + /obj/item/ammo_magazine/ammo_box/cap = 1 + ) diff --git a/code/game/objects/random/gradient.dm b/code/game/objects/random/gradient.dm new file mode 100644 index 00000000000..e69de29bb2d diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index ef1584fb573..ac7d0457046 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -734,7 +734,7 @@ /obj/item/toy/snappop, /obj/item/toy/sword, /obj/item/toy/balloon, - /obj/item/toy/crossbow, + /obj/item/weapon/gun/projectile/revolver/toy/crossbow, /obj/item/toy/blink, /obj/item/weapon/reagent_containers/spray/waterflower, /obj/item/toy/eight_ball, diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 2a626c52c9d..6b338895e30 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -32,7 +32,7 @@ if(AM.simulated) AM.forceMove(T) //VOREStation Add Start - if(isanimal(AM)) + if(isanimal(AM)) var/mob/living/simple_mob/AMBLINAL = AM if(!AMBLINAL.mind) AMBLINAL.ghostjoin = 1 @@ -65,6 +65,11 @@ ME.attach(H) ..() +/obj/structure/largecrate/donksoftvendor + name = "\improper Donk-Soft vendor crate" + desc = "A hefty wooden crate displaying the logo of Donk-Soft. It's rather heavy." + starts_with = list(/obj/machinery/vending/donksoft) + /obj/structure/largecrate/vehicle name = "vehicle crate" desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 0351e16fcaf..d299396f79d 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -529,4 +529,27 @@ /obj/item/clothing/head/wheat name = "straw hat" desc = "It's a hat made from synthetic straw. Brought to you by \"Country Girls LLC.\" the choice brand for the galaxy's working class." - icon_state = "wheat" \ No newline at end of file + icon_state = "wheat" + +//Ruin Marine (Doom Marine) +/obj/item/clothing/head/marine + name = "marine helmet" + desc = "A marine helmet prop from the popular game 'Ruin'." + icon_state = "marine" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES + +//Laser Tag Helmets +/obj/item/clothing/head/bluetag + name = "blue laser tag helmet" + desc = "Blue Pride, Station Wide." + icon_state = "bluetag" + flags_inv = HIDEEARS|BLOCKHEADHAIR + body_parts_covered = HEAD|EYES + +/obj/item/clothing/head/redtag + name = "red laser tag helmet" + desc = "Reputed to go faster." + icon_state = "redtag" + flags_inv = HIDEEARS|BLOCKHEADHAIR + body_parts_covered = HEAD|EYES \ No newline at end of file diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 3d44c893fe1..61825a6e5dd 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -13,7 +13,7 @@ */ /obj/item/clothing/suit/bluetag - name = "blue laser tag armour" + name = "blue laser tag armor" desc = "Blue Pride, Station Wide." icon_state = "bluetag" item_state_slots = list(slot_r_hand_str = "tdblue", slot_l_hand_str = "tdblue") @@ -22,8 +22,13 @@ allowed = list (/obj/item/weapon/gun/energy/lasertag/blue) siemens_coefficient = 3.0 +/obj/item/clothing/suit/bluetag/sub + name = "Brigader Armor" + desc = "Repilca rmor commonly worn by Spacer Union Brigade members from the hit series Spacer Trail. Modified for Laser Tag (Blue Team)." + icon_state = "bluetag2" + /obj/item/clothing/suit/redtag - name = "red laser tag armour" + name = "red laser tag armor" desc = "Reputed to go faster." icon_state = "redtag" item_state_slots = list(slot_r_hand_str = "tdred", slot_l_hand_str = "tdred") @@ -32,6 +37,11 @@ allowed = list (/obj/item/weapon/gun/energy/lasertag/red) siemens_coefficient = 3.0 +/obj/item/clothing/suit/redtag/dom + name = "Mu'tu'bi Armor" + desc = "Repilca rmor commonly worn by Dominion Of Mu'tu'bi soldiers from the hit series Spacer Trail. Modified for Laser Tag (Red Team)." + icon_state = "redtag2" + /* * Costume */ @@ -984,4 +994,13 @@ src.icon_state = "caution" src.item_state = "caution" usr.show_message("You turn the wet floor sign off.") - update_clothing_icon() \ No newline at end of file + update_clothing_icon() + +//Ruin Marine (Doom Marine) +/obj/item/clothing/suit/marine + name = "marine armor" + desc = "A set of marine prop armor from the popular game 'Ruin'." + icon_state = "marine" + body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER + item_state_slots = list(slot_r_hand_str = "green_labcoat", slot_l_hand_str = "green_labcoat") \ No newline at end of file diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index 9d61eed47e7..dc0939fdf61 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -1132,6 +1132,46 @@ idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. vending_sound = "machines/vending/vending_cans.ogg" +///////////////////////Donk-Soft!/////////////////////////////////////// + +/obj/machinery/vending/donksoft + name = "Donk-Soft!" + desc = "A toy vendor owned by Donk-Soft, a NanoTrasen sub-company." + description_fluff = "Donk-Soft is a sub-company owned by NanoTrasen that distribute replica weapons that shoot squishy foam darts. \ + They've been a staple of personal entertainment for decades but their buisness has only just moved to the fringes of the galaxy." + icon_state = "donksoft" + product_slogans = "Get your cool toys today!;Quality toy weapons for cheap prices!" + product_ads = "Express your inner child today!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" + products = list(/obj/item/ammo_magazine/ammo_box/foam = 20, + /obj/item/weapon/storage/belt/dbandolier = 5, + /obj/item/ammo_magazine/mfoam_dart/pistol = 10, + /obj/item/ammo_magazine/mfoam_dart/smg = 10, + /obj/item/weapon/gun/projectile/shotgun/pump/toy = 5, + /obj/item/weapon/gun/projectile/revolver/toy/sawnoff = 5, + /obj/item/weapon/gun/projectile/pistol/toy = 5, + /obj/item/weapon/gun/projectile/pistol/toy/n99 = 5, + /obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun = 5, + /obj/item/weapon/gun/projectile/revolver/toy = 5, + /obj/item/weapon/gun/projectile/revolver/toy/big_iron = 5, + /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 5, + /obj/item/weapon/gun/projectile/automatic/toy = 5 + ) + contraband = list() + prices = list(/obj/item/ammo_magazine/ammo_box/foam = 50, + /obj/item/weapon/storage/belt/dbandolier = 100, + /obj/item/ammo_magazine/mfoam_dart/pistol = 25, + /obj/item/ammo_magazine/mfoam_dart/smg = 25, + /obj/item/weapon/gun/projectile/shotgun/pump/toy = 250, + /obj/item/weapon/gun/projectile/revolver/toy/sawnoff = 150, + /obj/item/weapon/gun/projectile/pistol/toy = 100, + /obj/item/weapon/gun/projectile/pistol/toy/n99 = 175, + /obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun = 250, + /obj/item/weapon/gun/projectile/revolver/toy = 100, + /obj/item/weapon/gun/projectile/revolver/toy/big_iron = 175, + /obj/item/weapon/gun/projectile/revolver/toy/crossbow = 75, + /obj/item/weapon/gun/projectile/automatic/toy = 300) + vending_sound = "machines/vending/vending_cans.ogg" + /* * Department/job vendors to sit in place of lockers taking up space */ diff --git a/code/modules/games/cah_black_cards.dm b/code/modules/games/cah_black_cards.dm index 0bc5cc6d0f8..c2c32b99482 100644 --- a/code/modules/games/cah_black_cards.dm +++ b/code/modules/games/cah_black_cards.dm @@ -1,4 +1,6 @@ -// Black cards. +/* + * Black CAH cards + */ /obj/item/weapon/deck/cah/black/card_text_list = list( "Why am I itchy?", "Today, Security shot ____.", diff --git a/code/modules/games/cah_white_cards.dm b/code/modules/games/cah_white_cards.dm index 5c8e592b7ec..3ab0df883a9 100644 --- a/code/modules/games/cah_white_cards.dm +++ b/code/modules/games/cah_white_cards.dm @@ -1,4 +1,6 @@ -// White cards. +/* + * White CAH cards + */ /obj/item/weapon/deck/cah/var/list/card_text_list = list( "Those motherfucking carp", "Having sex in the maintenance tunnels", diff --git a/code/modules/games/cardemon.dm b/code/modules/games/cardemon.dm index a99e656add0..0345cf0d189 100644 --- a/code/modules/games/cardemon.dm +++ b/code/modules/games/cardemon.dm @@ -1,3 +1,6 @@ +/* + * Cardmon trading card game + */ /obj/item/weapon/pack/cardemon name = "cardemon booster pack" desc = "Finally! A children's card game in space!" diff --git a/code/modules/games/spaceball_cards.dm b/code/modules/games/spaceball_cards.dm index d9c932908cc..48c54077596 100644 --- a/code/modules/games/spaceball_cards.dm +++ b/code/modules/games/spaceball_cards.dm @@ -1,3 +1,6 @@ +/* + * Spaceball collectable cards + */ /obj/item/weapon/pack/spaceball name = "spaceball booster pack" desc = "Officially licensed to take your money." diff --git a/code/modules/games/tarot.dm b/code/modules/games/tarot.dm index 7c49f7ec435..df5fb73b23c 100644 --- a/code/modules/games/tarot.dm +++ b/code/modules/games/tarot.dm @@ -1,6 +1,6 @@ -/* this is a playing card deck based off of the Rider-Waite Tarot Deck. -*/ - +/* + * This is a playing card deck based off of the Rider-Waite Tarot Deck. + */ /obj/item/weapon/deck/tarot name = "deck of tarot cards" desc = "For all your occult needs!" diff --git a/code/modules/games/wizoff.dm b/code/modules/games/wizoff.dm new file mode 100644 index 00000000000..11cf1797352 --- /dev/null +++ b/code/modules/games/wizoff.dm @@ -0,0 +1,57 @@ +/* It's Wiz-Off, the wizard themed card game! + * Each player draws 5 cards. There are five rounds. Each round, + * a player selects a card to play, and the winner is selected + * based on the following rules: + * -Defensive (D) beats Offensive (O)! + * -Offensive (O) beats Utility (U)! + * -Utility (U) beats Defensive (D)! + * -If both players play the same type of spell, the higher number wins! + * The player who wins the most of the 5 rounds wins the game! + * Now get ready to battle for the fate of the universe: Wiz-Off! + */ + +/obj/item/weapon/deck/wizoff + name = "\improper Wiz-Off deck" + desc = "A Wiz-Off deck. Fight an arcane battle for the fate of the universe: Draw 5! Play 5! Best of 5!" + icon_state = "wizoff" + +/obj/item/weapon/deck/wizoff/New() + ..() + var/datum/playingcard/P + for(var/cardtext in card_wiz_list) + P = new() + P.name = "[cardtext]" + P.card_icon = "[icon_state]_card" + P.back_icon = "[icon_state]_card_back" + cards += P + +/obj/item/weapon/deck/wizoff/var/list/card_wiz_list = list( + "O1: Spell Cards", + "O2: Summon Bees", + "O3: Polymorph", + "O4: Tesla Blast", + "O5: Rod Form", + "O6: Mutate", + "O7: Fireball", + "O8: Mjolnir", + "O9: Smite", + "D1: Smoke", + "D2: Battlemage Armor", + "D3: Repulse", + "D4: Magic Missile", + "D5: Disable Technology", + "D6: Spell Trap", + "D7: Forcewall", + "D8: Arcane Heal", + "D9: Stop Time", + "U1: Shapechange", + "U2: Spacetime Distortion", + "U3: Scrying Orb", + "U4: Blink", + "U5: Knock", + "U6: Teleport", + "U7: Bind Soul", + "U8: Warp Whistle", + "U9: Jaunt" + ) + diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm index fa6d2b8314d..1622321c526 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm @@ -283,6 +283,21 @@ log_admin("[key_name_admin(src)] offered [M] to swap bodies as a morph.") if(tgui_alert(M, "\The [src] has elected to attempt to take over your body and control you. Is this something you will allow to happen?", "Allow Morph To Take Over",list("No","Yes")) == "Yes") if(tgui_alert(M, "Are you sure? The only way to undo this on your own is to OOC Escape.", "Allow Morph To Take Over",list("No","Yes")) == "Yes") + if(buckled) + buckled.unbuckle_mob() + if(M.buckled) + M.buckled.unbuckle_mob() + if(LAZYLEN(buckled_mobs)) + for(var/buckledmob in buckled_mobs) + riding_datum.force_dismount(buckledmob) + if(LAZYLEN(M.buckled_mobs)) + for(var/p_buckledmob in M.buckled_mobs) + M.riding_datum.force_dismount(p_buckledmob) + if(pulledby) + pulledby.stop_pulling() + if(M.pulledby) + M.pulledby.stop_pulling() + stop_pulling() original_ckey = ckey log_and_message_admins("[key_name_admin(src)] has swapped bodies with [key_name_admin(M)] as a morph at [get_area(src)] - [COORD(src)].") new /mob/living/simple_mob/vore/hostile/morph/dominated_prey(M.vore_selected, M.ckey, src, M) @@ -327,6 +342,22 @@ prey_body = null /mob/living/simple_mob/vore/hostile/morph/dominated_prey/proc/undo_prey_takeover(ooc_escape) + if(buckled) + buckled.unbuckle_mob() + if(prey_body.buckled) + prey_body.buckled.unbuckle_mob() + if(LAZYLEN(buckled_mobs)) + for(var/buckledmob in buckled_mobs) + riding_datum.force_dismount(buckledmob) + if(LAZYLEN(prey_body.buckled_mobs)) + for(var/p_buckledmob in prey_body.buckled_mobs) + prey_body.riding_datum.force_dismount(p_buckledmob) + if(pulledby) + pulledby.stop_pulling() + if(prey_body.pulledby) + prey_body.pulledby.stop_pulling() + stop_pulling() + if(ooc_escape) prey_body.forceMove(get_turf(src)) parent_morph.forceMove(get_turf(src)) diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 67524ac86c6..46736474b7e 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -246,3 +246,39 @@ magazine_icondata_keys[M.type] = icon_keys magazine_icondata_states[M.type] = ammo_states +/* + * Ammo Boxes + */ + +/obj/item/ammo_magazine/ammo_box + name = "ammo box" + desc = "A box that holds some kind of ammo." + icon = 'icons/obj/ammo_boxes.dmi' + icon_state = "pistol" + slot_flags = null //You can't fit a box on your belt + item_state = "paper" + matter = null + throwforce = 3 + throw_speed = 5 + throw_range = 12 + preserve_item = 1 + caliber = ".357" + drop_sound = 'sound/items/drop/matchbox.ogg' + pickup_sound = 'sound/items/pickup/matchbox.ogg' + +/obj/item/ammo_magazine/ammo_box/AltClick(mob/user) + if(can_remove_ammo) + if(isliving(user) && Adjacent(user)) + if(stored_ammo.len) + var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len] + stored_ammo-=C + user.put_in_hands(C) + user.visible_message("\The [user] removes \a [C] from [src].", "You remove \a [C] from [src].") + update_icon() + return + ..() + +/obj/item/ammo_magazine/ammo_box/examine(mob/user) + . = ..() + + . += to_chat(usr, "Alt-click to extract contents") \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/ammo_boxes.dm b/code/modules/projectiles/ammunition/ammo_boxes.dm new file mode 100644 index 00000000000..332b634a0f7 --- /dev/null +++ b/code/modules/projectiles/ammunition/ammo_boxes.dm @@ -0,0 +1,58 @@ +/************************************************************************/ +/* +# An explaination of the naming format for guns and ammo: +# +# a = Ammo, as in individual rounds of ammunition. +# b = Box, intended to have ammo taken out one at a time by hand. +# c = Clips, intended to reload magazines or guns quickly. +# m = Magazine, intended to hold rounds of ammo. +# s = Speedloaders, intended to reload guns quickly. +# +# Use this format, followed by the caliber. For example, a shotgun's caliber +# variable is "12g" as a result. Ergo, a shotgun round's path would have "a12g", +# or a magazine with shotgun shells would be "m12g" instead. To avoid confusion +# for developers and in-game admins spawning these items, stick to this format. +# Likewise, when creating new rounds, the caliber variable should match whatever +# the name says. +# +# This comment is copied in rounds.dm and magazines.dm as well. +# +# Also, to remove bullets from ammo boxes, use Alt-Click on the box. +*/ +/************************************************************************/ + +/* + * Foam + */ + +/obj/item/ammo_magazine/ammo_box/foam + name = "\improper Donk-Soft ammo box" + desc = "Contains Donk-Soft foam darts. It's Donk or Don't! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "foambox" + caliber = "foam" + ammo_type = /obj/item/ammo_casing/afoam_dart + matter = list(MAT_PLASTIC = 1800) + max_ammo = 30 + multiple_sprites = null + +/obj/item/ammo_magazine/ammo_box/foam/riot + name = "\improper Donk-Soft riot ammo box" + desc = "Contains Donk-Soft riot darts. It's Donk or Don't! Ages 18 and up." + icon_state = "foambox_riot" + matter = list(MAT_STEEL = 5040, MAT_PLASTIC = 1800) + +/* + * Cap + */ + +/obj/item/ammo_magazine/ammo_box/cap + name = "\improper AlliCo SNAP! Caps" + desc = "A box of spare caps for capguns. Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "capbox" + caliber = "caps" + ammo_type = /obj/item/ammo_casing/cap + matter = list(MAT_STEEL = 2040) + max_ammo = 24 + multiple_sprites = null \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 41b000d82f6..aa43a547922 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -22,7 +22,42 @@ */ /************************************************************************/ +///////// Foam ///////// +/obj/item/ammo_magazine/mfoam_dart/pistol + name = "\improper Donk-Soft pistol magazine" + icon = 'icons/obj/gun_toy.dmi' + icon_state = "toy" + mag_type = MAGAZINE + ammo_type = /obj/item/ammo_casing/afoam_dart + matter = list(MAT_PLASTIC = 250) + caliber = "foam" + max_ammo = 9 + multiple_sprites = 1 + +/obj/item/ammo_magazine/mfoam_dart/pistol/riot + ammo_type = /obj/item/ammo_casing/afoam_dart/riot + +/obj/item/ammo_magazine/mfoam_dart/pistol/empty + initial_ammo = 0 + +/obj/item/ammo_magazine/mfoam_dart/smg + name = "\improper Donk-Soft smg magazine" + icon = 'icons/obj/gun_toy.dmi' + icon_state = "toysmg" + mag_type = MAGAZINE + ammo_type = /obj/item/ammo_casing/afoam_dart + matter = list(MAT_PLASTIC = 250) + caliber = "foam" + max_ammo = 20 + multiple_sprites = 1 + +/obj/item/ammo_magazine/mfoam_dart/smg/riot + ammo_type = /obj/item/ammo_casing/afoam_dart/riot + matter = list(MAT_PLASTIC = 1260, MAT_PLASTIC = 250) + +/obj/item/ammo_magazine/mfoam_dart/smg/empty + initial_ammo = 0 ///////// .357 ///////// diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm index c10cf8f7b35..0ea73396f89 100644 --- a/code/modules/projectiles/ammunition/rounds.dm +++ b/code/modules/projectiles/ammunition/rounds.dm @@ -19,6 +19,26 @@ */ /************************************************************************/ +/* + * Foam + */ + +/obj/item/ammo_casing/afoam_dart + name = "foam dart" + desc = "It's Donk or Don't! Ages 8 and up." + projectile_type = /obj/item/projectile/bullet/foam_dart + matter = list(MAT_PLASTIC = 60) + caliber = "foam" + icon = 'icons/obj/gun_toy.dmi' + icon_state = "foamdart" + caseless = 1 + +/obj/item/ammo_casing/afoam_dart/riot + name = "riot foam dart" + desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." + matter = list(MAT_STEEL = 210, MAT_PLASTIC = 60) + icon_state = "foamdart_riot" + /* * .357 */ @@ -427,12 +447,13 @@ /obj/item/ammo_casing/cap name = "cap" - desc = "A cap for children toys." + desc = "A cap for children toys. Ages 8 and up." caliber = "caps" - icon_state = "r-casing" - color = "#FF0000" - projectile_type = /obj/item/projectile/bullet/pistol/cap + icon = 'icons/obj/gun_toy.dmi' + icon_state = "cap" + projectile_type = /obj/item/projectile/bullet/cap matter = list(MAT_STEEL = 85) + caseless = 1 /obj/item/ammo_casing/spent // For simple hostile mobs only, so they don't cough up usable bullets when firing. This is for literally nothing else. icon_state = "s-casing-spent" diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index e0f4b936b8e..e4cd464663e 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -278,41 +278,6 @@ accuracy = 0 scoped_accuracy = 20 -////////Laser Tag//////////////////// - -/obj/item/weapon/gun/energy/lasertag - name = "laser tag gun" - item_state = "laser" - desc = "Standard issue weapon of the Imperial Guard" - origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2) - matter = list(MAT_STEEL = 2000) - projectile_type = /obj/item/projectile/beam/lasertag/blue - cell_type = /obj/item/weapon/cell/device/weapon/recharge - battery_lock = 1 - var/required_vest - -/obj/item/weapon/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M) - if(ishuman(M)) - if(!istype(M.wear_suit, required_vest)) - to_chat(M, "You need to be wearing your laser tag vest!") - return 0 - return ..() - -/obj/item/weapon/gun/energy/lasertag/blue - icon_state = "bluetag" - item_state = "bluetag" - projectile_type = /obj/item/projectile/beam/lasertag/blue - required_vest = /obj/item/clothing/suit/bluetag - -/obj/item/weapon/gun/energy/lasertag/red - icon_state = "redtag" - item_state = "redtag" - projectile_type = /obj/item/projectile/beam/lasertag/red - required_vest = /obj/item/clothing/suit/redtag - -/obj/item/weapon/gun/energy/lasertag/omni - projectile_type = /obj/item/projectile/beam/lasertag/omni - // Laser scattergun, proof of concept. /obj/item/weapon/gun/energy/lasershotgun diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 5d158e5d0ae..678146eb182 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -148,18 +148,6 @@ flick("deckard-reload",src) ..() -/obj/item/weapon/gun/projectile/revolver/capgun - name = "cap gun" - desc = "Looks almost like the real thing! Ages 8 and up." - icon_state = "revolver" - item_state = "revolver" - caliber = "caps" - origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) - handle_casings = CYCLE_CASINGS - max_shells = 7 - ammo_type = /obj/item/ammo_casing/cap - projectile_type = /obj/item/projectile/bullet/pistol/strong - /obj/item/weapon/gun/projectile/revolver/judge name = "\"The Judge\"" desc = "A revolving hand-shotgun by Jindal Arms that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12g rounds." diff --git a/code/modules/projectiles/guns/toy.dm b/code/modules/projectiles/guns/toy.dm new file mode 100644 index 00000000000..e3b90bd1be0 --- /dev/null +++ b/code/modules/projectiles/guns/toy.dm @@ -0,0 +1,251 @@ +/* Toys Guns! + * + * Contains: + * Cap Gun + * Shotgun + * Pistol + * N99 Pistol + * Levergun + * Revolver + * Big Iron + * Crossbow + * Crossbow (Halloween) + * Sawn Off + * SMG + * Laser Tag + */ + +/* + * Cap Gun + */ +/obj/item/weapon/gun/projectile/revolver/capgun + name = "cap gun" + desc = "Looks almost like the real thing! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "cap_gun" + item_state = "revolver" + caliber = "caps" + origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) + ammo_type = /obj/item/ammo_casing/cap + projectile_type = /obj/item/projectile/bullet/cap + matter = list(MAT_STEEL = 1000) + handle_casings = null + recoil = 1 //it's a toy + +/* + * Shotgun + */ +/obj/item/weapon/gun/projectile/shotgun/pump/toy + name = "\improper Donk-Soft shotgun" + desc = "Donk-Soft foam shotgun! It's Donk or Don't! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "shotgun" + item_state = "shotgun" + max_shells = 6 + w_class = ITEMSIZE_LARGE + force = 2 + slot_flags = null + caliber = "foam" + origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) + load_method = SINGLE_CASING + ammo_type = /obj/item/ammo_casing/afoam_dart + projectile_type = /obj/item/projectile/bullet/foam_dart + matter = list(MAT_PLASTIC = 2000) + handle_casings = null + recoil = null //it's a toy + +/* + * Pistol + */ +/obj/item/weapon/gun/projectile/pistol/toy + name = "\improper Donk-Soft pistol" + desc = "Donk-Soft foam pistol! It's Donk or Don't! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "pistol" + item_state = "gun" + magazine_type = /obj/item/ammo_magazine/mfoam_dart/pistol + allowed_magazines = list(/obj/item/ammo_magazine/mfoam_dart/pistol) + projectile_type = /obj/item/projectile/bullet/foam_dart + caliber = "foam" + origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) + load_method = MAGAZINE + matter = list(MAT_PLASTIC = 1000) + recoil = null //it's a toy + +/obj/item/weapon/gun/projectile/pistol/toy/update_icon() + if(ammo_magazine) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]-e" + +/* + * N99 Pistol + */ +/obj/item/weapon/gun/projectile/pistol/toy/n99 + name = "\improper Donk-Soft commemorative pistol" + desc = "A special made Donk-Soft pistol to promote 'Radius: Legend of the Demon Core', a popular post-apocolyptic TV series." + icon_state = "n99" + item_state = "gun" + +/obj/item/weapon/gun/projectile/pistol/toy/n99/update_icon() + if(ammo_magazine) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]-e" + +/* + * Levergun + */ +/obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun + name = "\improper Donk-Soft levergun" + desc = "Donk-Soft foam levergun! Time to cowboy up! Ages 8 and up." + icon_state = "leveraction" + item_state = "leveraction" + max_shells = 5 + pump_animation = "leveraction-cycling" + +/* + * Revolver + */ +/obj/item/weapon/gun/projectile/revolver/toy + name = "\improper Donk-Soft revolver" + desc = "Donk-Soft foam revolver! Time to cowboy up! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "revolver" + item_state = "revolver" + caliber = "foam" + ammo_type = /obj/item/ammo_casing/afoam_dart + projectile_type = /obj/item/projectile/bullet/foam_dart + origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) + load_method = SINGLE_CASING + max_shells = 6 + matter = list(MAT_PLASTIC = 1000) + handle_casings = null + recoil = null //it's a toy + +/* + * Big Iron + */ +/obj/item/weapon/gun/projectile/revolver/toy/big_iron + name = "\improper Donk-Soft big iron" + desc = "A special made Donk-Soft pistol to promote 'A Fistful of Phoron', a popular frontier novel series." + icon_state = "big_iron" + item_state = "revolver" + +/* + * Crossbow + */ +/obj/item/weapon/gun/projectile/revolver/toy/crossbow + name = "\improper Donk-Soft crossbow" + desc = "Donk-Soft foam crossbow! It's Donk or Don't! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "foamcrossbow" + item_state = "foamcrossbow" + max_shells = 5 + +/* + * Crossbow (Halloween) + */ +/obj/item/weapon/gun/projectile/revolver/toy/crossbow/halloween + name = "\improper Donk-Soft special edition crossbow" + desc = "A special edition Donk-Soft crossbow! Made special for your Halloween cosplay. It's Donk or Don't! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "foamcrossbow_halloween" + item_state = "foamcrossbow_halloween" + max_shells = 5 + +/* + * Sawn Off + */ +/obj/item/weapon/gun/projectile/revolver/toy/sawnoff //revolver code just because it's easier + name = "\improper Donk-Soft sawn off shotgun" + desc = "Donk-Soft foam sawn off! It's Donk or Don't! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "sawnshotgun" + item_state = "dshotgun" + max_shells = 2 + w_class = ITEMSIZE_NORMAL + matter = list(MAT_PLASTIC = 1500) + +/* + * SMG + */ +/obj/item/weapon/gun/projectile/automatic/toy + name = "\improper Donk-Soft SMG" + desc = "Donk-Soft foam SMG! It's Donk or Don't! Ages 8 and up." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "smg" + caliber = "foam" + w_class = ITEMSIZE_NORMAL + load_method = MAGAZINE + origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) + slot_flags = SLOT_BELT + magazine_type = /obj/item/ammo_magazine/mfoam_dart/smg + allowed_magazines = list(/obj/item/ammo_magazine/mfoam_dart/smg) + projectile_type = /obj/item/projectile/bullet/foam_dart + matter = list(MAT_PLASTIC = 1500) + recoil = null //it's a toy + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=2, burst_accuracy=list(0,-2,-2), dispersion=null) + ) + +/obj/item/weapon/gun/projectile/automatic/toy/riot + magazine_type = /obj/item/ammo_magazine/mfoam_dart/smg/riot + +/obj/item/weapon/gun/projectile/automatic/toy/update_icon() + if(ammo_magazine) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]-e" + +/* + * Laser Tag + */ +/obj/item/weapon/gun/energy/lasertag + name = "laser tag gun" + desc = "Standard issue weapon of the Imperial Guard" + icon = 'icons/obj/gun_toy.dmi' + item_state = "omnitag" + item_state = "retro" + origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2) + matter = list(MAT_STEEL = 2000) + projectile_type = /obj/item/projectile/beam/lasertag/blue + cell_type = /obj/item/weapon/cell/device/weapon/recharge + battery_lock = 1 + var/required_vest + +/obj/item/weapon/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M) + if(ishuman(M)) + if(!istype(M.wear_suit, required_vest)) + to_chat(M, "You need to be wearing your laser tag vest!") + return 0 + return ..() + +/obj/item/weapon/gun/energy/lasertag/blue + icon_state = "bluetag" + item_state = "bluetag" + projectile_type = /obj/item/projectile/beam/lasertag/blue + required_vest = /obj/item/clothing/suit/bluetag + +/obj/item/weapon/gun/energy/lasertag/blue/sub + name = "Brigader Sidearm" + desc = "A laser tag replica of the standard issue weapon for the Spacer Union Brigade from the hit series Spacer Trail (Blue Team)." + icon_state = "bluetwo" + item_state = "retro" + +/obj/item/weapon/gun/energy/lasertag/red + icon_state = "redtag" + item_state = "redtag" + projectile_type = /obj/item/projectile/beam/lasertag/red + required_vest = /obj/item/clothing/suit/redtag + +/obj/item/weapon/gun/energy/lasertag/red/dom + name = "Mu'tu'bi sidearm" + desc = "A laser tag replica of the Mu'tu'bi sidearm from the hit series Spacer Trail (Red Team)." + icon_state = "redtwo" + item_state = "retro" + +/obj/item/weapon/gun/energy/lasertag/omni + projectile_type = /obj/item/projectile/beam/lasertag/omni \ No newline at end of file diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 84e6674020f..5941b7f4c62 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -321,10 +321,6 @@ embed_chance = 0 sharp = FALSE -/obj/item/projectile/bullet/blank/cap/process() - loc = null - qdel(src) - /* BB Rounds */ /obj/item/projectile/bullet/bb // Generic single BB name = "BB" @@ -332,7 +328,7 @@ agony = 0 embed_chance = 0 sharp = FALSE - silenced = TRUE + silenced = TRUE /obj/item/projectile/bullet/pellet/shotgun/bb // Shotgun name = "BB" @@ -343,4 +339,54 @@ pellets = 6 range_step = 1 spread_step = 10 - silenced = TRUE \ No newline at end of file + silenced = TRUE + +/* toy projectiles */ +/obj/item/projectile/bullet/cap + name = "cap" + desc = "SNAP!" + damage = 0 // It's a damn toy. + embed_chance = 0 + nodamage = TRUE + sharp = FALSE + damage_type = HALLOSS + impact_effect_type = null + fire_sound = 'sound/effects/snap.ogg' + combustion = FALSE + +/obj/item/projectile/bullet/cap/process() + loc = null + qdel(src) + +/obj/item/projectile/bullet/foam_dart + name = "foam dart" + desc = "I hope you're wearing eye protection." + damage = 0 // It's a damn toy. + embed_chance = 0 + nodamage = TRUE + sharp = FALSE + damage_type = HALLOSS + impact_effect_type = null + fire_sound = 'sound/items/syringeproj.ogg' + combustion = FALSE + icon = 'icons/obj/gun_toy.dmi' + icon_state = "foamdart_proj" + range = 15 + +/obj/item/projectile/bullet/foam_dart/on_impact(var/atom/A) + . = ..() + var/turf/T = get_turf(loc) + if(istype(T)) + new /obj/item/ammo_casing/afoam_dart(get_turf(loc)) + +/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A) + . = ..() + var/turf/T = get_turf(loc) + if(istype(T)) + new /obj/item/ammo_casing/afoam_dart(get_turf(loc)) + +/obj/item/projectile/bullet/foam_dart/riot + name = "riot foam dart" + desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." + agony = 50 + icon_state = "foamdart_riot_proj" \ No newline at end of file diff --git a/icons/inventory/belt/item.dmi b/icons/inventory/belt/item.dmi index 8c32c4552bc..bde59b458b2 100644 Binary files a/icons/inventory/belt/item.dmi and b/icons/inventory/belt/item.dmi differ diff --git a/icons/inventory/belt/mob.dmi b/icons/inventory/belt/mob.dmi index 25de9748581..a8e2aaacd75 100644 Binary files a/icons/inventory/belt/mob.dmi and b/icons/inventory/belt/mob.dmi differ diff --git a/icons/inventory/head/item.dmi b/icons/inventory/head/item.dmi index bfdea47a734..76b81184092 100644 Binary files a/icons/inventory/head/item.dmi and b/icons/inventory/head/item.dmi differ diff --git a/icons/inventory/head/mob.dmi b/icons/inventory/head/mob.dmi index 17728e25f67..0917a414bd5 100644 Binary files a/icons/inventory/head/mob.dmi and b/icons/inventory/head/mob.dmi differ diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi index 4e8e3f86576..e5d75cd19ea 100644 Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi index 9aa489853fb..0eb7b2b6e13 100644 Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ diff --git a/icons/obj/ammo_boxes.dmi b/icons/obj/ammo_boxes.dmi new file mode 100644 index 00000000000..37069700416 Binary files /dev/null and b/icons/obj/ammo_boxes.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index c94a289290b..9de92931db4 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/gun_toy.dmi b/icons/obj/gun_toy.dmi new file mode 100644 index 00000000000..bee6bcc49d6 Binary files /dev/null and b/icons/obj/gun_toy.dmi differ diff --git a/icons/obj/playing_cards.dmi b/icons/obj/playing_cards.dmi index 04e7af96fea..0195f8e6f47 100644 Binary files a/icons/obj/playing_cards.dmi and b/icons/obj/playing_cards.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index b7235b7e581..98519ef6592 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/icons/obj/toy_vr.dmi b/icons/obj/toy_vr.dmi index 3ad106945b6..9b3ca4d9d02 100644 Binary files a/icons/obj/toy_vr.dmi and b/icons/obj/toy_vr.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index a1fbfc9479c..91285fd3a12 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index cb9f6904ed4..f658a6da072 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -33290,7 +33290,7 @@ "gWO" = ( /obj/structure/table/rack, /obj/effect/floor_decal/rust, -/obj/item/toy/crossbow, +/obj/item/weapon/gun/projectile/revolver/toy/crossbow, /turf/simulated/floor/plating, /area/tether/surfacebase/funny/hideyhole) "gYx" = ( @@ -36719,8 +36719,8 @@ /area/maintenance/lower/trash_pit) "qhs" = ( /obj/structure/table/rack, -/obj/item/toy/crossbow, /obj/item/weapon/coin/silver, +/obj/item/weapon/gun/projectile/revolver/toy/crossbow, /turf/simulated/floor/plating, /area/tether/surfacebase/funny/hideyhole) "qjE" = ( diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 61598a61f48..5a9fd154e5c 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -32172,7 +32172,6 @@ /obj/item/weapon/soap/nanotrasen, /obj/item/weapon/soap/deluxe, /obj/item/weapon/staff/gentcane, -/obj/item/toy/crossbow, /obj/item/toy/eight_ball/conch, /obj/item/weapon/cell/potato, /obj/structure/cable/green{ @@ -32182,6 +32181,7 @@ }, /obj/item/device/megaphone, /obj/random/cutout, +/obj/item/weapon/gun/projectile/revolver/toy/crossbow, /turf/simulated/floor/lino, /area/tether/surfacebase/entertainment/backstage) "bcV" = ( diff --git a/sound/items/sonic_driver.ogg b/sound/items/sonic_driver.ogg new file mode 100644 index 00000000000..d02a2b67098 Binary files /dev/null and b/sound/items/sonic_driver.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 43e5fe19f7f..c03aab5deb8 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3487,6 +3487,7 @@ #include "code\modules\projectiles\dnalocking.dm" #include "code\modules\projectiles\gun.dm" #include "code\modules\projectiles\projectile.dm" +#include "code\modules\projectiles\ammunition\ammo_boxes.dm" #include "code\modules\projectiles\ammunition\magazines.dm" #include "code\modules\projectiles\ammunition\magazines_vr.dm" #include "code\modules\projectiles\ammunition\magnetic.dm" @@ -3501,6 +3502,7 @@ #include "code\modules\projectiles\guns\magic.dm" #include "code\modules\projectiles\guns\modular_guns.dm" #include "code\modules\projectiles\guns\projectile.dm" +#include "code\modules\projectiles\guns\toy.dm" #include "code\modules\projectiles\guns\vox.dm" #include "code\modules\projectiles\guns\energy\bsharpoon_vr.dm" #include "code\modules\projectiles\guns\energy\crestrose_vr.dm"