Donk Co. Toys

This commit is contained in:
Casey
2022-02-18 23:26:48 -05:00
committed by CHOMPStation2
parent a1f480932b
commit 3d6510f3ea
45 changed files with 967 additions and 287 deletions

View File

@@ -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
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

View File

@@ -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(

View File

@@ -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,

View File

@@ -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,

View File

@@ -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("<span class='danger'> [attacker] begins charging its special attack!! </span>", \
"<span class='danger'> You begin charging [attacker]'s special attack! </span>")
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("<span class='danger'> [src] begins charging its special attack!! </span>", \
"<span class='danger'> You begin charging [src]'s special attack! </span>")
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("<span class='boldwarning'> ...and lands a CRIPPLING BLOW! </span>", \
"<span class='boldwarning'> ...and you land a CRIPPLING blow on [attacker]! </span>", null)
"<span class='boldwarning'> ...and you land a CRIPPLING blow on [attacker]! </span>", null)
else
attacker_controller.visible_message("<span class='notice'> [src] and [attacker] stand around awkwardly.</span>", \
"<span class='notice'> You don't know what to do next.</span>")
"<span class='notice'> You don't know what to do next.</span>")
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("<span class='boldnotice'> MUTUALLY ASSURED DESTRUCTION!! [src] and [attacker] both end up destroyed!</span>", \
"<span class='boldnotice'> Both [src] and [attacker] are destroyed!</span>")
"<span class='boldnotice'> Both [src] and [attacker] are destroyed!</span>")
else if(attacker.combat_health <= 0) //src wins
wins++
attacker.losses++
@@ -359,7 +359,7 @@
"<span class='notice'> You raise up [src] victoriously over [attacker]!</span>")
else if (combat_health <= 0) //attacker wins
attacker.wins++
losses++
losses++
playsound(src, 'sound/effects/light_flicker.ogg', 20, TRUE)
src_controller.visible_message("<span class='notice'> [src] collapses!</span>", \
"<span class='notice'> [src] collapses!</span>", 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, "<span class='notice'>[target ? T.His : "Your" ] [attacker.name] is in combat.</span>")
if(target)
if(target)
to_chat(target, "<span class='notice'>Your [attacker.name] is in combat.</span>")
return FALSE
return FALSE
if(in_combat)
to_chat(user, "<span class='notice'>Your [name] is in combat.</span>")
if(target)
if(target)
to_chat(target, "<span class='notice'>[T.His] [name] is in combat.</span>")
return FALSE
return FALSE
if(attacker && attacker.timer > world.time)
to_chat(user, "<span class='notice'>[target?T.His : "Your" ] [attacker.name] isn't ready for battle.</span>")
if(target)
if(target)
to_chat(target, "<span class='notice'>Your [attacker.name] isn't ready for battle.</span>")
return FALSE
return FALSE
if(timer > world.time)
to_chat(user, "<span class='notice'>Your [name] isn't ready for battle.</span>")
if(target)
if(target)
to_chat(target, "<span class='notice'>[T.His] [name] isn't ready for battle.</span>")
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("<span class='notice'> [src] does a cool flip.</span>")
/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.

View File

@@ -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)
. += "<span class='notice'>It is loaded with [bullets] foam darts!</span>"
/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, "<span class='notice'>You load the foam dart into the crossbow.</span>")
else
to_chat(usr, "<span class='warning'>It's already fully loaded.</span>")
/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("<span class='warning'>\The [] was hit by the foam dart!</span>", 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("<span class='warning'>\The [] realized they were out of ammo and starting scrounging for some!</span>", 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("<span class='danger'>\The [] casually lines up a shot with []'s head and pulls the trigger!</span>", user, M), 1, "<span class='warning'>You hear the sound of foam against skull</span>", 2)
O.show_message(text("<span class='warning'>\The [] was hit in the head by the foam dart!</span>", 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("<span class='danger'>\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!</span>", user, M), 1, "<span class='warning'>You hear someone fall</span>", 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

View File

@@ -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
*/
/obj/item/toy/plushie/lizardplushie
name = "lizard plushie"
desc = "An adorable stuffed toy that resembles a lizardperson."
@@ -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)
@@ -278,7 +278,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")
@@ -288,9 +290,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("<span class='danger'>Stab!</span>")
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")
@@ -311,6 +358,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?"
@@ -334,6 +384,9 @@
playsound(loc, 'sound/items/drop/plushie.ogg', 50, 1)
user.visible_message("<span class='notice'><b>\The [user]</b> gnaws on [src]!</span>","<span class='notice'>You gnaw on [src]!</span>")
/*
* Cat toys
*/
/obj/item/toy/cat_toy
name = "toy mouse"
desc = "A colorful toy mouse!"
@@ -353,6 +406,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."
@@ -378,6 +434,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."
@@ -398,12 +457,18 @@
else
to_chat(user, "<span class='alert'>Nothing happens.</span>")
/*
* 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!"
@@ -438,6 +503,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."
@@ -464,6 +532,9 @@
return 0
/*
* Toy cuffs
*/
/obj/item/weapon/handcuffs/fake
name = "plastic handcuffs"
desc = "Use this to keep plastic prisoners in line."
@@ -488,6 +559,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."
@@ -514,6 +588,9 @@
if(istype(I, /obj/item/weapon/disk/nuclear))
to_chat(user, "<span class='alert'>Nice try. Put that disk back where it belongs.</span>")
/*
* 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."
@@ -551,6 +628,9 @@
else ..()
/*
* Toy xeno
*/
/obj/item/toy/toy_xeno
icon = 'icons/obj/toy_vr.dmi'
icon_state = "xeno"
@@ -575,6 +655,9 @@
to_chat(user, "<span class='warning'>The string on [src] hasn't rewound all the way!</span>")
return
/*
* Russian revolver
*/
/obj/item/toy/russian_revolver
name = "russian revolver"
desc = "For fun and games!"
@@ -645,6 +728,9 @@
to_chat(user, "<span class='warning'>[src] needs to be reloaded.</span>")
return FALSE
/*
* Trick revolver
*/
/obj/item/toy/russian_revolver/trick_revolver
name = "\improper .357 revolver"
desc = "A suspicious revolver. Uses .357 ammo."
@@ -672,6 +758,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"
@@ -694,6 +783,9 @@
/obj/item/toy/chainsaw/proc/cooldownreset()
cooldown = 0
/*
* Random miniature spawner
*/
/obj/random/miniature
name = "Random miniature"
desc = "This is a random miniature."
@@ -703,6 +795,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."
@@ -779,3 +874,93 @@
real = 2
to_chat(user, "<span class='notice'>You short out the bluespace refill system of [src].</span>")
/*
* 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!"

View File

@@ -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,

View File

@@ -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
)

View File

@@ -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
)

View File

View File

@@ -745,7 +745,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,

View File

@@ -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?"

View File

@@ -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"
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

View File

@@ -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
*/
@@ -985,3 +995,15 @@
src.item_state = "caution"
usr.show_message("You turn the wet floor sign off.")
update_clothing_icon()
<<<<<<< HEAD
=======
//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")
>>>>>>> 1432ca2b223... Merge pull request #12253 from GhostActual/Donk-Co.-Toys

View File

@@ -1144,6 +1144,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
*/

View File

@@ -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 ____.",

View File

@@ -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",

View File

@@ -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!"

View File

@@ -1,3 +1,6 @@
/*
* Spaceball collectable cards
*/
/obj/item/weapon/pack/spaceball
name = "spaceball booster pack"
desc = "Officially licensed to take your money."

View File

@@ -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!"

View File

@@ -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"
)

View File

@@ -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].", "<span class='notice'>You remove \a [C] from [src].</span>")
update_icon()
return
..()
/obj/item/ammo_magazine/ammo_box/examine(mob/user)
. = ..()
. += to_chat(usr, "<span class='notice'>Alt-click to extract contents</span>")

View File

@@ -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

View File

@@ -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 /////////

View File

@@ -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"

View File

@@ -261,41 +261,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, "<span class='warning'>You need to be wearing your laser tag vest!</span>")
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

View File

@@ -149,18 +149,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."

View File

@@ -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, "<span class='warning'>You need to be wearing your laser tag vest!</span>")
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

View File

@@ -322,10 +322,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"
@@ -344,4 +340,54 @@
pellets = 6
range_step = 1
spread_step = 10
silenced = TRUE
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"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 618 KiB

After

Width:  |  Height:  |  Size: 624 KiB

BIN
icons/obj/ammo_boxes.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
icons/obj/gun_toy.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

After

Width:  |  Height:  |  Size: 426 KiB

View File

@@ -33527,7 +33527,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" = (
@@ -36697,8 +36697,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" = (

View File

@@ -32593,7 +32593,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{
@@ -32602,6 +32601,11 @@
icon_state = "1-2"
},
/obj/item/device/megaphone,
<<<<<<< HEAD
=======
/obj/random/cutout,
/obj/item/weapon/gun/projectile/revolver/toy/crossbow,
>>>>>>> 1432ca2b223... Merge pull request #12253 from GhostActual/Donk-Co.-Toys
/turf/simulated/floor/lino,
/area/tether/surfacebase/entertainment/backstage)
"bcV" = (

Binary file not shown.

View File

@@ -3750,7 +3750,11 @@
#include "code\modules\projectiles\gun.dm"
#include "code\modules\projectiles\gun_ch.dm"
#include "code\modules\projectiles\projectile.dm"
<<<<<<< HEAD
#include "code\modules\projectiles\projectile_ch.dm"
=======
#include "code\modules\projectiles\ammunition\ammo_boxes.dm"
>>>>>>> 1432ca2b223... Merge pull request #12253 from GhostActual/Donk-Co.-Toys
#include "code\modules\projectiles\ammunition\magazines.dm"
#include "code\modules\projectiles\ammunition\magazines_vr.dm"
#include "code\modules\projectiles\ammunition\magazines_yw.dm"
@@ -3771,7 +3775,11 @@
#include "code\modules\projectiles\guns\magic.dm"
#include "code\modules\projectiles\guns\modular_guns.dm"
#include "code\modules\projectiles\guns\projectile.dm"
<<<<<<< HEAD
#include "code\modules\projectiles\guns\projectile_ch.dm"
=======
#include "code\modules\projectiles\guns\toy.dm"
>>>>>>> 1432ca2b223... Merge pull request #12253 from GhostActual/Donk-Co.-Toys
#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"