Merge pull request #1253 from Yawn-Wider/izac

Voreupdate [MDB IGNORE] [IDB IGNORE]
This commit is contained in:
Izac Joof Forsgren
2022-03-07 17:06:42 +01:00
committed by GitHub
127 changed files with 2192 additions and 759 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ var/datum/category_collection/underwear/global_underwear = new()
//Backpacks
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag", "Sports Bag")
var/global/list/pdachoicelist = list("Default", "Slim", "Old", "Rugged", "Holographic", "Wrist-Bound")
var/global/list/pdachoicelist = list("Default", "Slim", "Old", "Rugged", "Holographic", "Wrist-Bound", "Slider")
var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg)
// Visual nets
+5
View File
@@ -453,6 +453,11 @@ Turf and target are seperate in case you want to teleport some distance from a t
moblist.Add(M)
for(var/mob/living/simple_mob/M in sortmob)
moblist.Add(M)
//VOREStation Addition Start
for(var/mob/living/dominated_brain/M in sortmob)
moblist.Add(M)
//VOREStation Addition End
// for(var/mob/living/silicon/hivebot/M in sortmob)
// mob_list.Add(M)
// for(var/mob/living/silicon/hive_mainframe/M in sortmob)
-6
View File
@@ -411,12 +411,6 @@
category = list("Arms and Ammunition")
hidden = 1
/datum/category_item/autolathe/arms/pistol_clip_10mm
name = "ammo clip (10mm)"
path =/obj/item/ammo_magazine/clip/c10mm
category = list("Arms and Ammunition")
hidden = 1
/datum/category_item/autolathe/arms/pistol_clip_50
name = "ammo clip (.44)"
path =/obj/item/ammo_magazine/clip/c50
+1 -1
View File
@@ -29,7 +29,7 @@
/obj/item/weapon/reagent_containers/food/snacks/berrymuffin,
/obj/item/weapon/reagent_containers/food/snacks/bunbun,
/obj/item/weapon/reagent_containers/food/snacks/cherrypie,
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack,
/obj/item/weapon/reagent_containers/food/snacks/cookie,
/obj/item/weapon/reagent_containers/food/snacks/croissant,
/obj/item/weapon/reagent_containers/food/snacks/donut/normal,
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
+6 -6
View File
@@ -38,7 +38,7 @@
/obj/item/weapon/gun/projectile/sec/flash,
/obj/item/ammo_magazine/m45/flash,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare,
/obj/item/weapon/storage/box/flashshells
/obj/item/ammo_magazine/ammo_box/b12g/flash
)
cost = 25
containertype = /obj/structure/closet/crate/secure/gear
@@ -66,8 +66,8 @@
/datum/supply_pack/munitions/shotgun
name = "Weapons - Shotgun crate"
contains = list(
/obj/item/weapon/storage/box/shotgunammo,
/obj/item/weapon/storage/box/shotgunshells,
/obj/item/ammo_magazine/ammo_box/b12g,
/obj/item/ammo_magazine/ammo_box/b12g/pellet,
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 2
)
cost = 50
@@ -198,8 +198,8 @@
/datum/supply_pack/munitions/shotgunammo
name = "Ammunition - Shotgun shells"
contains = list(
/obj/item/weapon/storage/box/shotgunammo = 2,
/obj/item/weapon/storage/box/shotgunshells = 2
/obj/item/ammo_magazine/ammo_box/b12g = 2,
/obj/item/ammo_magazine/ammo_box/b12g/pellet = 2
)
cost = 25
containertype = /obj/structure/closet/crate/secure/weapon
@@ -208,7 +208,7 @@
/datum/supply_pack/munitions/beanbagammo
name = "Ammunition - Beanbag shells"
contains = list(/obj/item/weapon/storage/box/beanbags = 3)
contains = list(/obj/item/ammo_magazine/ammo_box/b12g/beanbag = 3)
cost = 25
containertype = /obj/structure/closet/crate
containername = "Ballistic ammunition crate"
+1 -1
View File
@@ -256,7 +256,7 @@
/obj/item/weapon/shield/riot = 3,
/obj/item/weapon/handcuffs = 3,
/obj/item/weapon/storage/box/flashbangs,
/obj/item/weapon/storage/box/beanbags,
/obj/item/ammo_magazine/ammo_box/b12g/beanbag,
/obj/item/weapon/storage/box/handcuffs
)
cost = 40
+7 -7
View File
@@ -63,11 +63,11 @@
/datum/uplink_item/item/ammo/sniperammo
name = "Anti-Materiel Rifle ammo box (14.5mm)"
path = /obj/item/weapon/storage/box/sniperammo
path = /obj/item/ammo_magazine/ammo_box/b145
/datum/uplink_item/item/ammo/sniperammo_highvel
name = "Anti-Materiel Rifle ammo box (14.5mm sabot)"
path = /obj/item/weapon/storage/box/sniperammo/highvel
path = /obj/item/ammo_magazine/ammo_box/b145/highvel
/datum/uplink_item/item/ammo/c545
name = "Rifle Magazine (5.45mm)"
@@ -107,25 +107,25 @@
/datum/uplink_item/item/ammo/g12
name = "12g Shotgun Ammo Box (Slug)"
path = /obj/item/weapon/storage/box/shotgunammo
path = /obj/item/ammo_magazine/ammo_box/b12g
/datum/uplink_item/item/ammo/g12/beanbag
name = "12g Shotgun Ammo Box (Beanbag)"
path = /obj/item/weapon/storage/box/beanbags
path = /obj/item/ammo_magazine/ammo_box/b12g/beanbag
item_cost = 10 // Discount due to it being LTL.
/datum/uplink_item/item/ammo/g12/pellet
name = "12g Shotgun Ammo Box (Pellet)"
path = /obj/item/weapon/storage/box/shotgunshells
path =/obj/item/ammo_magazine/ammo_box/b12g/pellet
/datum/uplink_item/item/ammo/g12/stun
name = "12g Shotgun Ammo Box (Stun)"
path = /obj/item/weapon/storage/box/stunshells
path = /obj/item/ammo_magazine/ammo_box/b12g/stunshell
item_cost = 10 // Discount due to it being LTL.
/datum/uplink_item/item/ammo/g12/flash
name = "12g Shotgun Ammo Box (Flash)"
path = /obj/item/weapon/storage/box/flashshells
path = /obj/item/ammo_magazine/ammo_box/b12g/flash
item_cost = 10 // Discount due to it being LTL.
/datum/uplink_item/item/ammo/cell
@@ -9,8 +9,13 @@
throw_range = 15
throw_speed = 3
//matter = list(MAT_STEEL = 50,MAT_GLASS = 50)
//matter = list(MAT_STEEL = 50, MAT_GLASS = 50)
/obj/item/device/binoculars/attack_self(mob/user)
zoom()
/obj/item/device/binoculars/spyglass
name = "spyglass"
desc = "It's a hand-held telescope, useful for star-gazing, peeping, and recon."
icon_state = "spyglass"
slot_flags = SLOT_BELT
@@ -72,7 +72,8 @@
/obj/item/device/integrated_electronics/wirer,
/obj/item/device/integrated_electronics/debugger, //Vorestation edit adding debugger to toolbelt can hold list
/obj/item/weapon/shovel/spade, //VOREStation edit. If it can hold minihoes and hatchers, why not the gardening spade?
/obj/item/stack/nanopaste //VOREStation edit. Think of it as a tube of superglue. Belts hold that all the time.
/obj/item/stack/nanopaste, //VOREStation edit. Think of it as a tube of superglue. Belts hold that all the time.
/obj/item/device/geiger //VOREStation edit. Engineers work with rad-slinging stuff sometimes too
)
/obj/item/weapon/storage/belt/utility/full
@@ -102,7 +103,9 @@
/obj/item/weapon/tool/wrench,
/obj/item/weapon/weldingtool,
/obj/item/weapon/tool/crowbar,
/obj/item/weapon/tool/wirecutters
/obj/item/weapon/tool/wirecutters,
/obj/item/device/analyzer, //Vorestation edit. Gives atmos techs a few extra tools fitting their job from the start
/obj/item/weapon/extinguisher/mini //Vorestation edit. As above, the mini's much more handy to have rather than lugging a big one around
)
/obj/item/weapon/storage/belt/utility/chief
@@ -538,4 +541,4 @@
storage_slots = 8
can_hold = list(
/obj/item/ammo_casing/afoam_dart
)
)
@@ -142,126 +142,6 @@
/obj/item/weapon/dnainjector/m2h = 3
)
/obj/item/weapon/storage/box/blanks
name = "box of blank shells"
desc = "It has a picture of a gun and several warning symbols on the front."
icon_state = "blankshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/blank = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/blanks/large
starts_with = list(/obj/item/ammo_casing/a12g/blank = 16)
/obj/item/weapon/storage/box/beanbags
name = "box of beanbag shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "beanshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/beanbag = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/beanbags/large
starts_with = list(/obj/item/ammo_casing/a12g/beanbag = 16)
/obj/item/weapon/storage/box/shotgunammo
name = "box of shotgun slugs"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "lethalshellshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/shotgunammo/large
starts_with = list(/obj/item/ammo_casing/a12g = 16)
/obj/item/weapon/storage/box/shotgunshells
name = "box of shotgun shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "lethalslug_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/pellet = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/shotgunshells/large
starts_with = list(/obj/item/ammo_casing/a12g/pellet = 16)
/obj/item/weapon/storage/box/flashshells
name = "box of illumination shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "illumshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/flash = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/flashshells/large
starts_with = list(/obj/item/ammo_casing/a12g/flash = 16)
/obj/item/weapon/storage/box/stunshells
name = "box of stun shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "stunshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/stunshell = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/stunshells/large
starts_with = list(/obj/item/ammo_casing/a12g/stunshell = 16)
/obj/item/weapon/storage/box/practiceshells
name = "box of practice shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "blankshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/practice = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/practiceshells/large
starts_with = list(/obj/item/ammo_casing/a12g/practice = 16)
/obj/item/weapon/storage/box/empshells
name = "box of emp shells"
desc = "It has a picture of a gun and several warning symbols on the front."
icon_state = "empshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/emp = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/empshells/large
starts_with = list(/obj/item/ammo_casing/a12g/emp = 16)
/obj/item/weapon/storage/box/flechetteshells
name = "box of shotgun flechettes"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "lethalslug_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/flechette = 8)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/flechetteshells/large
starts_with = list(/obj/item/ammo_casing/a12g/flechette = 16)
/obj/item/weapon/storage/box/sniperammo
name = "box of 14.5mm shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
starts_with = list(/obj/item/ammo_casing/a145 = 7)
drop_sound = 'sound/items/drop/ammobox.ogg'
pickup_sound = 'sound/items/pickup/ammobox.ogg'
/obj/item/weapon/storage/box/sniperammo/highvel
name = "box of 14.5mm sabot shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
starts_with = list(/obj/item/ammo_casing/a145/highvel = 7)
/obj/item/weapon/storage/box/flashbangs
name = "box of flashbangs (WARNING)"
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.</B>"
+8 -8
View File
@@ -154,10 +154,10 @@
icon_state = "ammo"
/obj/random/ammo/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,
prob(2);/obj/item/weapon/storage/box/shotgunammo,
prob(4);/obj/item/weapon/storage/box/shotgunshells,
prob(1);/obj/item/weapon/storage/box/stunshells,
return pick(prob(6);/obj/item/ammo_magazine/ammo_box/b12g/beanbag,
prob(2);/obj/item/ammo_magazine/ammo_box/b12g,
prob(4);/obj/item/ammo_magazine/ammo_box/b12g/pellet,
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/stunshell,
prob(2);/obj/item/ammo_magazine/m45,
prob(4);/obj/item/ammo_magazine/m45/rubber,
prob(4);/obj/item/ammo_magazine/m45/flash,
@@ -315,8 +315,8 @@
),
prob(1);list(
/obj/item/weapon/gun/projectile/garand,
/obj/item/ammo_magazine/m762garand,
/obj/item/ammo_magazine/m762garand
/obj/item/ammo_magazine/m762enbloc,
/obj/item/ammo_magazine/m762enbloc
),
prob(1);list(
/obj/item/weapon/gun/projectile/revolvingrifle,
@@ -489,11 +489,11 @@
),
prob(3);list(
/obj/item/weapon/gun/projectile/shotgun/pump/slug,
/obj/item/weapon/storage/box/shotgunammo
/obj/item/ammo_magazine/ammo_box/b12g
),
prob(1);list(
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
/obj/item/weapon/storage/box/shotgunammo
/obj/item/ammo_magazine/ammo_box/b12g
)
)
+2 -2
View File
@@ -351,8 +351,8 @@
/obj/item/clothing/suit/armor/vest,
/obj/item/weapon/gun/projectile/garand,
/obj/item/weapon/gun/projectile/garand,
/obj/item/ammo_magazine/m762garand,
/obj/item/ammo_magazine/m762garand,
/obj/item/ammo_magazine/m762enbloc,
/obj/item/ammo_magazine/m762enbloc,
/obj/structure/closet/crate/plastic
),
prob(2);list(
+1 -1
View File
@@ -854,7 +854,7 @@
/obj/item/weapon/reagent_containers/food/snacks/donut/plain,
/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly,
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack)
/obj/item/weapon/reagent_containers/food/snacks/cookie)
/obj/random/mre/dessert/vegan
name = "random vegan MRE dessert"
+9 -8
View File
@@ -96,8 +96,8 @@
icon = 'icons/obj/ammo.dmi'
icon_state = "666"
/obj/random/ammo_all/item_to_spawn()
return pick(prob(5);/obj/item/weapon/storage/box/shotgunammo,\
prob(5);/obj/item/weapon/storage/box/shotgunshells,\
return pick(prob(5);/obj/item/ammo_magazine/ammo_box/b12g,\
prob(5);/obj/item/ammo_magazine/ammo_box/b12g/pellet,\
prob(5);/obj/item/ammo_magazine/clip/c762,\
prob(5);/obj/item/ammo_magazine/m380,\
prob(5);/obj/item/ammo_magazine/m45,\
@@ -111,24 +111,25 @@
prob(4);/obj/item/ammo_magazine/m9mmp90,\
prob(4);/obj/item/ammo_magazine/m10mm,\
prob(4);/obj/item/ammo_magazine/m545/small,\
prob(3);/obj/item/ammo_magazine/clip/c10mm,\
prob(3);/obj/item/ammo_magazine/clip/c44,\
prob(3);/obj/item/ammo_magazine/ammo_box/b10mm/emp,\
prob(3);/obj/item/ammo_magazine/ammo_box/b10mm,\
prob(3);/obj/item/ammo_magazine/s44,\
prob(3);/obj/item/ammo_magazine/m762,\
prob(3);/obj/item/ammo_magazine/m545,\
prob(3);/obj/item/weapon/cell/device/weapon,\
prob(2);/obj/item/ammo_magazine/m44,\
prob(2);/obj/item/ammo_magazine/s357,\
prob(2);/obj/item/ammo_magazine/m762m,\
prob(2);/obj/item/ammo_magazine/m762/ext,\
prob(2);/obj/item/ammo_magazine/clip/c12g,
prob(2);/obj/item/ammo_magazine/clip/c12g/pellet,\
prob(1);/obj/item/ammo_magazine/m45tommy,\
/* prob(1);/obj/item/ammo_magazine/m95,\ */
prob(1);/obj/item/ammo_casing/rocket,\
prob(1);/obj/item/weapon/storage/box/sniperammo,\
prob(1);/obj/item/weapon/storage/box/flashshells,\
prob(1);/obj/item/weapon/storage/box/beanbags,\
prob(1);/obj/item/weapon/storage/box/stunshells,\
prob(1);/obj/item/ammo_magazine/ammo_box/b145,\
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/flash,\
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/beanbag,\
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/stunshell,\
prob(1);/obj/item/ammo_magazine/mtg,\
prob(1);/obj/item/ammo_magazine/m12gdrum,\
prob(1);/obj/item/ammo_magazine/m12gdrum/pellet,\
+18 -2
View File
@@ -336,6 +336,7 @@
var/persistence_id
var/loaded = FALSE
var/curator = "nobody! Report bug if you see this."
var/static/list/art_appreciators = list()
//Presets for art gallery mapping, for paintings to be shared across stations
/obj/structure/sign/painting/public
@@ -406,11 +407,12 @@
if(current_canvas)
current_canvas.tgui_interact(user)
. += "<span class='notice'>Use wirecutters to remove the painting.</span>"
. += "<span class='notice'>Paintings hung here are curated based on interest. The more often someone EXAMINEs the painting, the longer it will stay in rotation.</span>"
// Painting loaded and persistent frame, give a hint about removal safety
if(persistence_id)
if(loaded)
. += "<span class='notice'>Don't worry, the currently framed painting has already been entered into the archives and can be safely removed. It will still be used on future shifts.</span>"
. += "<span class='warning'>Don't worry, the currently framed painting has already been entered into the archives and can be safely removed. It will still be used on future shifts.</span>"
back_of_the_line(user)
else
. += "<span class='warning'>This painting has not been entered into the archives yet. Removing it will prevent that from happening.</span>"
@@ -554,6 +556,20 @@
"ckey" = current_canvas.author_ckey
))
/obj/structure/sign/painting/proc/back_of_the_line(mob/user)
if(user.ckey in art_appreciators)
return
if(!persistence_id || !current_canvas || current_canvas.no_save)
return
var/data = current_canvas.get_data_string()
var/md5 = md5(lowertext(data))
for(var/list/entry in SSpersistence.all_paintings)
if(entry["md5"] == md5 && entry["persistence_id"] == persistence_id)
SSpersistence.all_paintings.Remove(list(entry))
SSpersistence.all_paintings.Add(list(entry))
art_appreciators += user.ckey
to_chat(user, "<span class='notice'>Showing interest in this painting renews its position in the curator database.</span>")
/obj/structure/sign/painting/vv_get_dropdown()
. = ..()
VV_DROPDOWN_OPTION("removepainting", "Remove Persistent Painting")
@@ -112,14 +112,14 @@
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
/obj/item/device/radio/headset/headset_eng,
/obj/item/device/radio/headset/headset_eng/alt,
/obj/item/clothing/suit/storage/hazardvest,
/obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own
/obj/item/clothing/mask/gas,
/obj/item/weapon/cartridge/atmos,
/obj/item/taperoll/atmos,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos,
/obj/item/clothing/shoes/boots/winter/atmos,
/obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/storage/belt/utility) //VOREStation Add
/obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already?
/obj/structure/closet/secure_closet/atmos_personal/Initialize()
if(prob(50))
+4 -4
View File
@@ -300,8 +300,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
uncommon_loot = list(
/obj/item/weapon/storage/box/sinpockets,
/obj/item/weapon/storage/box/practiceshells,
/obj/item/weapon/storage/box/blanks,
/obj/item/ammo_magazine/ammo_box/b12g/practice,
/obj/item/ammo_magazine/ammo_box/b12g/blank,
/obj/item/weapon/storage/box/smokes,
/obj/item/weapon/storage/box/metalfoam,
/obj/item/weapon/storage/box/handcuffs,
@@ -311,8 +311,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
rare_loot = list(
/obj/item/weapon/storage/box/flashbangs,
/obj/item/weapon/storage/box/empslite,
/obj/item/weapon/storage/box/flashshells,
/obj/item/weapon/storage/box/stunshells,
/obj/item/ammo_magazine/ammo_box/b12g/flash,
/obj/item/ammo_magazine/ammo_box/b12g/stunshell,
/obj/item/weapon/storage/box/teargas
)
+10 -10
View File
@@ -554,7 +554,7 @@
jobs += "</tr><tr align='center'>"
counter = 0
jobs += "</tr></table>"
jobs += "</tr></table>"
//VOREstation Edit End
//Civilian (Grey)
@@ -635,7 +635,7 @@
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[entry];jobban4=\ref[M]'><font color=red>[entry]</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[entry];jobban4=\ref[M]'>[entry]</a></td>"
if(++counter >= 5) //So things dont get squiiiiished!
jobs += "</tr><tr align='center'>"
counter = 0
@@ -1417,10 +1417,10 @@
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
return
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookiesnack(H), slot_l_hand )
if(!(istype(H.l_hand,/obj/item/weapon/reagent_containers/food/snacks/cookiesnack)))
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookiesnack(H), slot_r_hand )
if(!(istype(H.r_hand,/obj/item/weapon/reagent_containers/food/snacks/cookiesnack)))
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookie(H), slot_l_hand )
if(!(istype(H.l_hand,/obj/item/weapon/reagent_containers/food/snacks/cookie)))
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookie(H), slot_r_hand )
if(!(istype(H.r_hand,/obj/item/weapon/reagent_containers/food/snacks/cookie)))
log_admin("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].")
message_admins("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].")
return
@@ -1558,7 +1558,7 @@
var/mob/M = locate(href_list["jumpto"])
if(!M)
return
var/turf/T = get_turf(M)
if(isturf(T))
usr.on_mob_jump()
@@ -1597,16 +1597,16 @@
var/mob/M = locate(href_list["sendmob"])
if(!M)
return
var/list/areachoices = return_sorted_areas()
var/choice = tgui_input_list(usr, "Pick an area:", "Send Mob", areachoices)
if(!choice)
return
var/area/A = areachoices[choice]
if(!A)
return
M.on_mob_jump()
M.forceMove(pick(get_area_turfs(A)))
var/msg = "[key_name_admin(usr)] teleported [ADMIN_LOOKUPFLW(M)]"
+14 -14
View File
@@ -145,7 +145,6 @@
prob(8);/obj/item/weapon/gun/projectile/automatic/c20r,\
prob(8);/obj/item/weapon/gun/projectile/automatic/stg,\
prob(8);/obj/item/weapon/melee/energy/sword,\
/* prob(8);/obj/item/weapon/gun/projectile/automatic/m41a,\ */
prob(7);/obj/item/weapon/gun/energy/captain,\
prob(7);/obj/item/weapon/gun/energy/sniperrifle,\
prob(7);/obj/item/weapon/gun/projectile/automatic/p90,\
@@ -176,8 +175,8 @@
new new_gun(C)
if(prob(50))
var/new_ammo = pick( // Copied from Random.dm
prob(5);/obj/item/weapon/storage/box/shotgunammo,\
prob(5);/obj/item/weapon/storage/box/shotgunshells,\
prob(5);/obj/item/ammo_magazine/ammo_box/b12g,\
prob(5);/obj/item/ammo_magazine/ammo_box/b12g/pellet,\
prob(5);/obj/item/ammo_magazine/s357,\
prob(5);/obj/item/ammo_magazine/clip/c762,\
prob(5);/obj/item/ammo_magazine/m45,\
@@ -197,12 +196,13 @@
prob(4);/obj/item/ammo_magazine/m9mmt/rubber,\
prob(4);/obj/item/ammo_magazine/m10mm,\
prob(4);/obj/item/ammo_magazine/m9mmp90,\
/* prob(4);/obj/item/ammo_magazine/m14,\
prob(4);/obj/item/ammo_magazine/m14/large,\*/
prob(4);/obj/item/ammo_magazine/m545/ext,
prob(4);/obj/item/ammo_magazine/m762,\
prob(4);/obj/item/ammo_magazine/ammo_box/b762/surplus/hunter,\
prob(4);/obj/item/ammo_magazine/ammo_box/b762/surplus,\
prob(4);/obj/item/ammo_magazine/m545/ext,\
prob(3);/obj/item/ammo_magazine/clip/c10mm,\
prob(3);/obj/item/ammo_magazine/ammo_box/b10mm/emp,\
prob(3);/obj/item/ammo_magazine/ammo_box/b10mm,\
prob(3);/obj/item/ammo_magazine/clip/c44,\
prob(3);/obj/item/ammo_magazine/m545,\
prob(2);/obj/item/ammo_magazine/m44,\
@@ -210,12 +210,12 @@
prob(1);/obj/item/weapon/storage/box/frags,\
/* prob(1);/obj/item/ammo_magazine/m95,\ */
prob(1);/obj/item/ammo_casing/rocket,\
prob(1);/obj/item/weapon/storage/box/sniperammo,\
prob(1);/obj/item/weapon/storage/box/flashshells,\
prob(1);/obj/item/weapon/storage/box/beanbags,\
prob(1);/obj/item/weapon/storage/box/practiceshells,\
prob(1);/obj/item/weapon/storage/box/stunshells,\
prob(1);/obj/item/weapon/storage/box/blanks,\
prob(1);/obj/item/ammo_magazine/ammo_box/b145,\
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/flash,\
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/beanbag,\
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/practice,\
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/stunshell,\
prob(1);/obj/item/ammo_magazine/ammo_box/b12g/blank,\
prob(1);/obj/item/ammo_magazine/mtg,\
prob(1);/obj/item/ammo_magazine/m45tommydrum,\
prob(1);/obj/item/ammo_magazine/m45tommy)
@@ -267,7 +267,7 @@
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen, \
/obj/item/weapon/reagent_containers/food/snacks/candiedapple, \
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar, \
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack, \
/obj/item/weapon/reagent_containers/food/snacks/cookie, \
/obj/item/weapon/reagent_containers/food/snacks/meatball, \
/obj/item/weapon/reagent_containers/food/snacks/plump_pie, \
/obj/item/weapon/reagent_containers/food/snacks/liquidfood)
@@ -286,7 +286,7 @@
else if(prob(50))
if(live_cargo) // Something else very much alive and angry.
var/spawn_type = pick(/mob/living/simple_mob/animal/space/alien, /mob/living/simple_mob/animal/space/alien/drone, /mob/living/simple_mob/animal/space/alien/sentinel)
new spawn_type(C)
new spawn_type(C)
else // Just a costume.
new /obj/item/clothing/head/xenos(C)
new /obj/item/clothing/suit/xenos(C)
@@ -42,7 +42,7 @@
pref.backbag = 2 //Same as above
character.backbag = pref.backbag
if(pref.pdachoice > 6 || pref.pdachoice < 1)
if(pref.pdachoice > 7 || pref.pdachoice < 1)
pref.pdachoice = 1
character.pdachoice = pref.pdachoice
@@ -156,4 +156,4 @@
return TOPIC_REFRESH //End of YW EDIT
return ..()
return ..()
@@ -47,6 +47,10 @@
display_name = "Glasses, hipster"
path = /obj/item/clothing/glasses/regular/hipster
/datum/gear/eyes/glasses/threedglasses
display_name = "Glasses, 3D"
path = /obj/item/clothing/glasses/threedglasses
/datum/gear/eyes/glasses/monocle
display_name = "monocle"
path = /obj/item/clothing/glasses/monocle
@@ -13,6 +13,18 @@
display_name = "tourist, green"
path = /obj/item/clothing/shoes/tourist_2
/datum/gear/shoes/sneakerspurple
display_name = "sneakers, purple"
path = /obj/item/clothing/shoes/sneakerspurple
/datum/gear/shoes/sneakersblue
display_name = "sneakers, blue"
path = /obj/item/clothing/shoes/sneakersblue
/datum/gear/shoes/sneakersred
display_name = "sneakers, red"
path = /obj/item/clothing/shoes/sneakersred
/datum/gear/shoes/jackboots
display_name = "jackboots"
path = /obj/item/clothing/shoes/boots/jackboots
@@ -199,6 +199,18 @@
path = /obj/item/clothing/suit/cyberpunk
cost = 2
/datum/gear/suit/puffycoat/blue
display_name = "puffy coat, blue"
path = /obj/item/clothing/suit/storage/puffyblue
/datum/gear/suit/puffycoat/red
display_name = "puffy coat, red"
path = /obj/item/clothing/suit/storage/puffyred
/datum/gear/suit/puffycoat/purple
display_name = "puffy coat, purple"
path = /obj/item/clothing/suit/storage/puffypurple
/datum/gear/suit/poncho
display_name = "poncho selection"
path = /obj/item/clothing/accessory/poncho
@@ -228,7 +240,6 @@
)
gear_tweaks += new/datum/gear_tweak/path(ponchos)
/datum/gear/suit/roles/cloak
display_name = "cloak selection, departments"
path = /obj/item/clothing/accessory/poncho/roles/cloak/cargo
@@ -119,3 +119,8 @@ Talon winter coat
display_name = "knight, Field Medic"
path = /obj/item/clothing/suit/armor/combat/crusader_explo/FM
allowed_roles = list ("Field Medic")
//Atmos-coloured hazard vest
display_name = "hazard vest, atmospherics"
path = /obj/item/clothing/suit/storage/hazardvest/atmos
allowed_roles = list("Chief Engineer","Atmospheric Technician", "Engineer")
@@ -699,6 +699,26 @@
display_name = "heavy utility, galactic survey"
path = /obj/item/clothing/under/gsa_work
/*
* 80s
*/
/datum/gear/uniform/tropical_outfit/black
display_name = "tropical outfit, animal style"
path = /obj/item/clothing/under/tropical
/datum/gear/uniform/tropical_outfit/green
display_name = "tropical outfit, tropico-puke"
path = /obj/item/clothing/under/tropical/green
/datum/gear/uniform/tropical_outfit/pink
display_name = "tropical outfit, 3005 vintage"
path = /obj/item/clothing/under/tropical/pink
/datum/gear/uniform/tropical_outfit/blue
display_name = "tropical outfit, miami vice"
path = /obj/item/clothing/under/tropical/blue
/*
* Branded Uniforms
*/
@@ -237,3 +237,31 @@ Talon jumpsuit
"red and white" = /obj/item/clothing/under/summerdress/red
)
gear_tweaks += new/datum/gear_tweak/path(dresses)
// undersuits
/datum/gear/uniform/undersuit
display_name = "undersuit selection"
path = /obj/item/clothing/under/undersuit
/datum/gear/uniform/undersuit/New()
..()
var/list/suits = list()
var/list/blacklisted_types = list(/obj/item/clothing/under/undersuit/sec, /obj/item/clothing/under/undersuit/sec/hos, /obj/item/clothing/under/undersuit/hazard, /obj/item/clothing/under/undersuit/command, /obj/item/clothing/under/undersuit/centcom)
for(var/obj/item/clothing/under/undersuit/undersuit_type as anything in typesof(/obj/item/clothing/under/undersuit) - blacklisted_types)
suits[initial(undersuit_type.name)] = undersuit_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(suits))
/datum/gear/uniform/undersuit_sec
display_name = "undersuit, security (Security)"
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
path = /obj/item/clothing/under/undersuit/sec
/datum/gear/uniform/undersuit_hos
display_name = "undersuit, security command (HoS)"
allowed_roles = list("Head of Security")
path = /obj/item/clothing/under/undersuit/sec/hos
/datum/gear/uniform/undersuit_com
display_name = "undersuit, command (SM/HoP)"
allowed_roles = list("Site Manager", "Head of Personnel")
path = /obj/item/clothing/under/undersuit/command
+2
View File
@@ -232,6 +232,8 @@
persist_storable = FALSE
/obj/item/weapon/melee/cursedblade
persist_storable = FALSE
/obj/item/weapon/circuitboard/mecha/imperion
persist_storable = FALSE
/obj/item/device/paicard
persist_storable = FALSE
/obj/item/organ
+23 -1
View File
@@ -233,4 +233,26 @@
icon_state = "rag"
force = 0
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
/*
* 80s
*/
/obj/item/clothing/shoes/sneakerspurple
name = "purple sneakers"
desc = "A stylish, expensive pair of purple sneakers."
icon_state = "sneakerspurple"
item_state = "sneakerspurple"
/obj/item/clothing/shoes/sneakersblue
name = "blue sneakers"
desc = "A stylish, expensive pair of blue sneakers."
icon_state = "sneakersblue"
item_state = "sneakersblue"
/obj/item/clothing/shoes/sneakersred
name = "red sneakers"
desc = "A stylish, expensive pair of red sneakers."
icon_state = "sneakersred"
item_state = "sneakersred"
+2 -2
View File
@@ -173,7 +173,7 @@
blood_overlay_type = "armor"
allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner,
/obj/item/weapon/tool/crowbar, /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen,
/obj/item/clothing/mask/gas, /obj/item/taperoll/engineering)
/obj/item/clothing/mask/gas, /obj/item/taperoll/engineering, /obj/item/taperoll/atmos, /obj/item/device/analyzer, /obj/item/weapon/extinguisher/mini) //VOREStation edit. Few more tools that can be put on vests
body_parts_covered = UPPER_TORSO
/obj/item/clothing/suit/storage/hazardvest/blue
@@ -259,4 +259,4 @@
/obj/item/clothing/suit/suspenders/grey
name = "grey suspenders"
icon_state = "suspenders_grey"
icon_state = "suspenders_grey"
+14 -1
View File
@@ -15,4 +15,17 @@
icon = 'icons/inventory/suit/item_vr.dmi'
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
icon_state = "qm_coat"
//Atmos-coloured hazard vest
/obj/item/clothing/suit/storage/hazardvest/atmos
name = "light blue hazard vest"
desc = "A high-visibility vest used in work zones. This one is in the colors of atmospherics!"
icon = 'icons/inventory/suit/item_vr.dmi'
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
icon_state = "hazard_a"
item_state = "hazard_a"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_vr.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_vr.dmi',
)
@@ -42,6 +42,46 @@
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"
/*
* 80s
*/
/obj/item/clothing/suit/storage/puffyblue
name = "blue puffy coat"
desc = "A stylish, shiny, very blue puffer coat."
icon_state = "puffycoatblue"
item_state = "puffycoatblue"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
flags_inv = HIDEHOLSTER
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.7
item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat")
/obj/item/clothing/suit/storage/puffypurple
name = "purple puffy coat"
desc = "A stylish, shiny, very purple puffer coat."
icon_state = "puffycoatpurple"
item_state = "puffycoatpurple"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
flags_inv = HIDEHOLSTER
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.7
item_state_slots = list(slot_r_hand_str = "purple_labcoat", slot_l_hand_str = "purple_labcoat")
/obj/item/clothing/suit/storage/puffyred
name = "crimson puffy coat"
desc = "A stylish, shiny, very crimson puffer coat."
icon_state = "puffycoatred"
item_state = "puffycoatred"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
flags_inv = HIDEHOLSTER
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.7
item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat")
/*
* Costume
*/
@@ -103,6 +103,44 @@
prob(2);/obj/item/clothing/accessory/hawaiian/yellow
)
/*
* 80s
*/
/obj/item/clothing/accessory/tropical
name = "black tropical shirt"
desc = "A classic themed neosilk tropical shirt. This one makes you feel like an animal."
icon_state = "animalstyle"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING | SLOT_TIE
body_parts_covered = UPPER_TORSO|LOWER_TORSO
siemens_coefficient = 0.9
w_class = ITEMSIZE_NORMAL
slot = ACCESSORY_SLOT_OVER
/obj/item/clothing/accessory/tropical/green
name = "puke-green tropical shirt"
desc = "A classic themed neosilk tropical shirt. This one makes you look like puke."
icon_state = "tropicopuke"
/obj/item/clothing/accessory/tropical/pink
name = "pink tropical shirt"
desc = "A classic themed neosilk tropical shirt. This one makes you feel nostalgic."
icon_state = "3005vintage"
/obj/item/clothing/accessory/tropical/blue
name = "blue tropical shirt"
desc = "A classic themed neosilk tropical shirt. This one makes you feel out of touch."
icon_state = "miamivice"
/obj/item/clothing/accessory/tropical_random/New()
return pick(
prob(2);/obj/item/clothing/accessory/tropical,
prob(2);/obj/item/clothing/accessory/tropical/green,
prob(2);/obj/item/clothing/accessory/tropical/pink,
prob(2);/obj/item/clothing/accessory/tropical/blue
)
/*
* Chaps
*/
@@ -1270,6 +1270,38 @@
icon_state = "curator"
worn_state = "curator"
/*
* 80s
*/
/obj/item/clothing/under/tropical
name = "black tropical oufit"
desc = "A classic themed outfit. This one makes you feel like an animal."
icon_state = "animalstyle"
worn_state = "animalstyle"
starting_accessories = list(/obj/item/clothing/accessory/tropical)
/obj/item/clothing/under/tropical/green
name = "puke-green tropical oufit"
desc = "A classic themed outfit. This one makes you look like puke."
icon_state = "tropicopuke"
worn_state = "tropicopuke"
starting_accessories = list(/obj/item/clothing/accessory/tropical/green)
/obj/item/clothing/under/tropical/pink
name = "pink tropical oufit"
desc = "A classic themed outfit. This one makes you feel nostalgic."
icon_state = "3005vintage"
worn_state = "3005vintage"
starting_accessories = list(/obj/item/clothing/accessory/tropical/pink)
/obj/item/clothing/under/tropical/blue
name = "pink tropical oufit"
desc = "A classic themed outfit. This one makes you feel out of touch."
icon_state = "miamivice"
worn_state = "miamivice"
starting_accessories = list(/obj/item/clothing/accessory/tropical/blue)
/*
* Modern
*/
@@ -308,4 +308,72 @@
item_state = "lewdcap"
rolled_sleeves = -1
rolled_down = -1
body_parts_covered = UPPER_TORSO // frankly this thing's a fucking embarassment
body_parts_covered = UPPER_TORSO // frankly this thing's a fucking embarassment
/obj/item/clothing/under/undersuit // undersuits! intended for wearing under hardsuits or for being too lazy to not wear anything other than it
name = "undersuit"
desc = "A nondescript undersuit, intended for wearing under a voidsuit or other EVA equipment. Breathable, yet sleek."
icon = 'icons/inventory/uniform/item_vr.dmi'
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
rolled_down_icon = 'icons/inventory/uniform/mob_vr_rolled_down.dmi'
icon_state = "bodysuit"
item_state = "bodysuit"
rolled_sleeves = -1
rolled_down_icon_override = FALSE
/obj/item/clothing/under/undersuit/eva
name = "EVA undersuit"
desc = "A nondescript undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for EVA usage, but differs little from the standard."
icon_state = "bodysuit_eva"
item_state = "bodysuit_eva"
/obj/item/clothing/under/undersuit/command
name = "command undersuit"
desc = "A fancy undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for those in Command, and comes with a swanky gold trim and navy blue inlay."
icon_state = "bodysuit_com"
item_state = "bodysuit_com"
/obj/item/clothing/under/undersuit/sec
name = "security undersuit"
desc = "A reinforced undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for those in Security, and has slight protective capabilities against simple melee attacks."
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
icon_state = "bodysuit_sec"
item_state = "bodysuit_sec"
/obj/item/clothing/under/undersuit/sec/hos
name = "security command undersuit"
desc = "A reinforced undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for the Head of Security or equivalent, and has slight protective capabilities against simple melee attacks."
icon_state = "bodysuit_seccom"
item_state = "bodysuit_seccom"
/obj/item/clothing/under/undersuit/hazard
name = "hazard undersuit"
desc = "An undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for Engineering crew, and comes with slight radiation absorption capabilities. Not a lot, but it's there."
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
icon_state = "bodysuit_haz"
item_state = "bodysuit_haz"
/obj/item/clothing/under/undersuit/mining
name = "mining undersuit"
desc = "An undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for Mining crew, and comes with an interestingly colored trim."
icon_state = "bodysuit_min"
item_state = "bodysuit_min"
/obj/item/clothing/under/undersuit/emt
name = "medical technician undersuit"
desc = "An undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for Medical response crew, and comes with a distinctive coloring scheme."
icon_state = "bodysuit_emt"
item_state = "bodysuit_emt"
/obj/item/clothing/under/undersuit/explo
name = "exploration undersuit"
desc = "An undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for Exploration crew, for hazardous environments."
icon_state = "bodysuit_exp"
item_state = "bodysuit_exp"
/obj/item/clothing/under/undersuit/centcom
name = "Central Command undersuit"
desc = "A very descript undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for NanoTrasen Central Command officers, and comes with a swanky gold trim and other fancy markings."
icon_state = "bodysuit_cent"
item_state = "bodysuit_cent"
+1 -1
View File
@@ -615,7 +615,7 @@
// Cookies and Candies //
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack
/obj/item/weapon/reagent_containers/food/snacks/cookie
price_tag = 1
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
+37 -7
View File
@@ -218,7 +218,7 @@
/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake = 10,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake = 10,
/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich = 15,
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 15,
/obj/item/weapon/reagent_containers/food/snacks/cookie = 15,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies = 10,
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 10,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece = 20
@@ -415,7 +415,10 @@
/obj/item/clothing/shoes/boots/workboots/toeless = 5,
/obj/item/clothing/shoes/boots/winter = 5,
/obj/item/clothing/shoes/boots/workboots = 5,
/obj/item/clothing/shoes/footwraps = 5)
/obj/item/clothing/shoes/footwraps = 5,
/obj/item/clothing/shoes/sneakerspurple = 5,
/obj/item/clothing/shoes/sneakersblue = 5,
/obj/item/clothing/shoes/sneakersred = 5)
prices = list(/obj/item/clothing/gloves/evening = 50,
/obj/item/clothing/gloves/fingerless = 50,
/obj/item/clothing/gloves/black = 50,
@@ -473,7 +476,10 @@
/obj/item/clothing/shoes/boots/workboots/toeless = 50,
/obj/item/clothing/shoes/boots/winter = 50,
/obj/item/clothing/shoes/boots/workboots = 50,
/obj/item/clothing/shoes/footwraps = 50)
/obj/item/clothing/shoes/footwraps = 50,
/obj/item/clothing/shoes/sneakerspurple = 50,
/obj/item/clothing/shoes/sneakersblue = 50,
/obj/item/clothing/shoes/sneakersred = 50)
premium = list(/obj/item/clothing/gloves/rainbow = 1,
/obj/item/clothing/shoes/rainbow = 1,)
contraband = list(/obj/item/clothing/shoes/syndigaloshes = 1,
@@ -539,6 +545,10 @@
/obj/item/clothing/accessory/hawaiian/pink = 5,
/obj/item/clothing/accessory/hawaiian/red = 5,
/obj/item/clothing/accessory/hawaiian/yellow = 5,
/obj/item/clothing/accessory/tropical = 5,
/obj/item/clothing/accessory/tropical/green = 5,
/obj/item/clothing/accessory/tropical/pink = 5,
/obj/item/clothing/accessory/tropical/blue = 5,
/obj/item/clothing/accessory/locket = 5,
/obj/item/weapon/storage/backpack/purse = 1,
/obj/item/clothing/accessory/sash = 5,
@@ -652,6 +662,10 @@
/obj/item/clothing/accessory/hawaiian/pink = 50,
/obj/item/clothing/accessory/hawaiian/red = 50,
/obj/item/clothing/accessory/hawaiian/yellow = 50,
/obj/item/clothing/accessory/tropical = 50,
/obj/item/clothing/accessory/tropical/green = 50,
/obj/item/clothing/accessory/tropical/pink = 50,
/obj/item/clothing/accessory/tropical/blue = 50,
/obj/item/clothing/accessory/locket = 50,
/obj/item/weapon/storage/backpack/purse = 50,
/obj/item/clothing/accessory/sash = 50,
@@ -918,7 +932,11 @@
/obj/item/clothing/under/wedding/bride_white = 5,
/obj/item/weapon/storage/backpack/ = 5,
/obj/item/weapon/storage/backpack/messenger = 5,
/obj/item/weapon/storage/backpack/satchel = 5)
/obj/item/weapon/storage/backpack/satchel = 5,
/obj/item/clothing/under/tropical = 5,
/obj/item/clothing/under/tropical/green = 5,
/obj/item/clothing/under/tropical/pink = 5,
/obj/item/clothing/under/tropical/blue = 5)
prices = list(/obj/item/clothing/under/bathrobe = 50,
/obj/item/clothing/under/dress/black_corset = 50,
/obj/item/clothing/under/blazer = 50,
@@ -1089,7 +1107,11 @@
/obj/item/clothing/under/wedding/bride_white = 50,
/obj/item/weapon/storage/backpack/ = 50,
/obj/item/weapon/storage/backpack/messenger = 50,
/obj/item/weapon/storage/backpack/satchel = 50)
/obj/item/weapon/storage/backpack/satchel = 50,
/obj/item/clothing/under/tropical = 50,
/obj/item/clothing/under/tropical/green = 50,
/obj/item/clothing/under/tropical/pink = 50,
/obj/item/clothing/under/tropical/blue = 50)
premium = list(/obj/item/clothing/under/color/rainbow = 1)
contraband = list(/obj/item/clothing/under/rank/clown = 1)
@@ -1217,7 +1239,10 @@
/obj/item/clothing/suit/varsity/brown = 5,
/obj/item/clothing/suit/storage/hooded/wintercoat = 5,
/obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 5,
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 5)
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 5,
/obj/item/clothing/suit/storage/puffyred = 5,
/obj/item/clothing/suit/storage/puffypurple = 5,
/obj/item/clothing/suit/storage/puffyblue = 5)
prices = list(/obj/item/clothing/suit/storage/apron = 100,
/obj/item/clothing/suit/storage/flannel/aqua = 100,
/obj/item/clothing/suit/storage/toggle/bomber = 100,
@@ -1306,7 +1331,10 @@
/obj/item/clothing/suit/varsity/brown = 100,
/obj/item/clothing/suit/storage/hooded/wintercoat = 100,
/obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 100,
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 100)
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 100,
/obj/item/clothing/suit/storage/puffyred = 100,
/obj/item/clothing/suit/storage/puffypurple = 100,
/obj/item/clothing/suit/storage/puffyblue = 100)
premium = list(/obj/item/clothing/suit/imperium_monk = 3,
/obj/item/clothing/suit/storage/hooded/wintercoat/cosmic = 1)
contraband = list(/obj/item/toy/katana = 1)
@@ -2516,6 +2544,7 @@
/obj/item/weapon/reagent_containers/food/snacks/clownstears = 10,
/obj/item/weapon/reagent_containers/food/snacks/coldchili = 10,
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 10,
/obj/item/weapon/reagent_containers/food/snacks/cookie = 10,
/obj/item/weapon/reagent_containers/food/snacks/corn_dog = 10,
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice = 10,
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled = 10,
@@ -3000,6 +3029,7 @@
/obj/item/weapon/reagent_containers/food/snacks/clownstears = 10,
/obj/item/weapon/reagent_containers/food/snacks/coldchili = 10,
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 10,
/obj/item/weapon/reagent_containers/food/snacks/cookie = 10,
/obj/item/weapon/reagent_containers/food/snacks/corn_dog = 10,
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice = 10,
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled = 10,
+15 -1
View File
@@ -9,9 +9,10 @@
var/one_shot = 0 // If true, then the event will not be re-added to the list of available events
var/add_to_queue= 1 // If true, add back to the queue of events upon finishing.
var/list/role_weights = list()
var/list/min_job_count = list()
var/datum/event/event_type
/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0, var/add_to_queue = 1)
/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0, var/add_to_queue = 1, var/list/min_jobs)
name = event_name
severity = event_severity
event_type = type
@@ -22,6 +23,9 @@
src.add_to_queue = add_to_queue
if(job_weights)
role_weights = job_weights
if(min_jobs)
min_job_count = min_jobs
/datum/event_meta/proc/get_weight(var/list/active_with_role)
if(!enabled)
@@ -40,6 +44,16 @@
return total_weight
/datum/event_meta/proc/minimum_active(var/list/active_with_role)
var/can_fire = TRUE
for(var/role in min_job_count)
if(role in active_with_role)
if(active_with_role[role] < min_job_count[role])
can_fire = FALSE
break
return can_fire
/datum/event_meta/no_overmap/get_weight() //these events have overmap equivalents, and shouldn't fire randomly if overmap is used
return global.using_map.use_overmap ? 0 : ..()
+3
View File
@@ -78,6 +78,9 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
if(!EM.enabled)
return 0
if(!(EM.minimum_active(active_with_role)))
return 0
var/weight = EM.get_weight(active_with_role)
var/last_time = last_event_time[EM]
if(last_time)
+14 -14
View File
@@ -2,7 +2,7 @@
#define ASSIGNMENT_AI "AI"
#define ASSIGNMENT_CYBORG "Cyborg"
#define ASSIGNMENT_ENGINEER "Engineer"
#define ASSIGNMENT_GARDENER "Gardener"
#define ASSIGNMENT_GARDENER "Botanist"
#define ASSIGNMENT_JANITOR "Janitor"
#define ASSIGNMENT_MEDICAL "Medical"
#define ASSIGNMENT_SCIENTIST "Scientist"
@@ -30,11 +30,11 @@
// Severity level, event name, even type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 400),
// Bluescreens APCs, but they still work
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence, 0, list(ASSIGNMENT_ENGINEER = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Canister Leak", /datum/event/canister_leak, 10, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 20), min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence, 0, list(ASSIGNMENT_ENGINEER = 10), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 20), min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Canister Leak", /datum/event/canister_leak, 10, list(ASSIGNMENT_ENGINEER = 20), min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50, min_jobs = list(ASSIGNMENT_ENGINEER = 2)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Spiders", /datum/event/spider_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1), //YW EDIT
@@ -65,26 +65,26 @@
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Atmos Leak", /datum/event/atmos_leak, 30, list(ASSIGNMENT_ENGINEER = 25), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Lost Spiders", /datum/event/spider_migration, 0, list(ASSIGNMENT_SECURITY = 30), 1), //YW EDIT
// Just disables comms for a short while.
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 100, ASSIGNMENT_SECURITY = 50), 1),
// Just blows out a few lights
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 70, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150), 1),
// This one is just too fun.
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravity Failure", /datum/event/gravity, 75, list(ASSIGNMENT_ENGINEER = 60), 1),
// Temporary power failure, but mitigatead by subgrids
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 0, list(ASSIGNMENT_ENGINEER = 25), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 0, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
// Pure RP fun, no mechanical effects.
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 80, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 80, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5), min_jobs = list(ASSIGNMENT_AI = 1)),
// Opens doors in brig. So just RP fun
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 10, list(ASSIGNMENT_SECURITY = 100), 1),
// Radiation, but only in space.
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 0, list(ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 0, list(ASSIGNMENT_SECURITY = 20), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 30, list(ASSIGNMENT_ENGINEER = 40, ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 1, 0, 50),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 1, 0, 50, min_jobs = list(ASSIGNMENT_ENGINEER = 3)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
//Evil grubs that drain station power slightly
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_ENGINEER = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_ENGINEER = 30), 1, min_jobs = list(ASSIGNMENT_SECURITY = 1, ASSIGNMENT_ENGINEER = 1)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 10, list(ASSIGNMENT_SCIENTIST = 40), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1), //YW EDIT, Readded
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_ANY = 5), 1), // YW EDIT single shot
@@ -110,7 +110,7 @@
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 20, list(ASSIGNMENT_ENGINEER = 25), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 15), 1), //YW EDIT
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 7, ASSIGNMENT_GARDENER = 2), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ANY = 5), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Virus Outbreak", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 30), 2), //yw addition (Trial run)
+3 -3
View File
@@ -186,7 +186,7 @@ var/list/event_last_fired = list()
active_with_role["AI"] = 0
active_with_role["Cyborg"] = 0
active_with_role["Janitor"] = 0
active_with_role["Gardener"] = 0
active_with_role["Botanist"] = 0
for(var/mob/M in player_list)
if(!M.mind || !M.client || M.client.is_afk(10 MINUTES)) // longer than 10 minutes AFK counts them as inactive
@@ -227,7 +227,7 @@ var/list/event_last_fired = list()
if(M.mind.assigned_role == "Janitor")
active_with_role["Janitor"]++
if(M.mind.assigned_role == "Gardener")
active_with_role["Gardener"]++
if(M.mind.assigned_role == "Botanist")
active_with_role["Botanist"]++
return active_with_role
+48 -2
View File
@@ -6,10 +6,25 @@ var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/sna
/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza/filled,
/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza/filled,
/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza/filled,
/obj/item/weapon/reagent_containers/food/snacks/pineappleslice/filled,
/obj/item/weapon/reagent_containers/food/snacks/tastybread,
/obj/item/weapon/reagent_containers/food/snacks/bagelplain,
/obj/item/weapon/reagent_containers/food/snacks/bagelsunflower,
/obj/item/weapon/reagent_containers/food/snacks/bagelcheese,
/obj/item/weapon/reagent_containers/food/snacks/bagelraisin,
/obj/item/weapon/reagent_containers/food/snacks/bagelpoppy,
/obj/item/weapon/reagent_containers/food/snacks/croissant,
/obj/item/weapon/reagent_containers/food/snacks/corn_dog,
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
/obj/item/weapon/reagent_containers/food/snacks/liquidprotein,
/obj/item/weapon/reagent_containers/food/snacks/liquidvitamin,
/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry,
/obj/item/weapon/reagent_containers/food/snacks/tossedsalad,
/obj/item/weapon/reagent_containers/food/snacks/rosesalad,
/obj/item/weapon/reagent_containers/food/snacks/boiledegg,
/obj/item/weapon/reagent_containers/food/snacks/locust_cooked,
/obj/item/weapon/reagent_containers/food/snacks/spicedmeatbun,
/obj/item/weapon/reagent_containers/food/snacks/quicheslice/filled,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose)
var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly,
@@ -39,19 +54,50 @@ var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snac
/obj/item/weapon/reagent_containers/food/snacks/watermelonslice,
/obj/item/weapon/reagent_containers/food/snacks/slice/applecake/filled,
/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie/filled,
/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks)
/obj/item/weapon/reagent_containers/food/snacks/keylimepieslice/filled,
/obj/item/weapon/reagent_containers/food/snacks/browniesslice/filled,
/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks,
/obj/item/weapon/reagent_containers/food/snacks/mint/admints,
/obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts,
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie,
/obj/item/weapon/reagent_containers/food/snacks/eggroll,
/obj/item/weapon/reagent_containers/food/snacks/fruitsalad,
/obj/item/weapon/reagent_containers/food/snacks/honeybun,
/obj/item/weapon/reagent_containers/food/snacks/custardbun,
/obj/item/weapon/reagent_containers/food/snacks/honeytoast,
/obj/item/weapon/reagent_containers/food/snacks/cookie,
/obj/item/weapon/reagent_containers/food/snacks/fruitbar,
/obj/item/weapon/reagent_containers/food/snacks/semki,
/obj/item/weapon/reagent_containers/food/snacks/salo,
/obj/item/weapon/reagent_containers/food/snacks/weebonuts,
/obj/item/weapon/reagent_containers/food/snacks/ricecake,
/obj/item/weapon/reagent_containers/food/snacks/packaged/lunacake,
/obj/item/weapon/reagent_containers/food/snacks/packaged/darklunacake,
/obj/item/weapon/reagent_containers/food/snacks/packaged/mochicake,
/obj/item/weapon/reagent_containers/food/snacks/packaged/spacetwinkie
)
var/list/lunchables_drinks_ = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola,
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,
/obj/item/weapon/reagent_containers/food/drinks/cans/decaf_cola,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet,
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist,
/obj/item/weapon/reagent_containers/food/drinks/cans/starkistdecaf,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up,
/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime,
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea,
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice,
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic,
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater)
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater,
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale,
/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer,
/obj/item/weapon/reagent_containers/food/drinks/cans/sarsaparilla,
/obj/item/weapon/reagent_containers/food/drinks/cans/straw_cola,
/obj/item/weapon/reagent_containers/food/drinks/cans/apple_cola,
/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_cola
)
// This default list is a bit different, it contains items we don't want
var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing,
+33 -68
View File
@@ -1594,16 +1594,6 @@
nutriment_desc = list("noodles" = 2)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
name = "Fortune cookie"
desc = "A true prophecy in each cookie!"
icon_state = "fortune_cookie"
filling_color = "#E8E79E"
center_of_mass = list("x"=15, "y"=14)
nutriment_amt = 3
nutriment_desc = list("fortune cookie" = 2)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/badrecipe
name = "Burned mess"
desc = "Someone should be demoted from chef for this."
@@ -2163,14 +2153,6 @@
. = ..()
reagents.add_reagent("slimejelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/mint
name = "mint"
desc = "it is only wafer thin."
icon_state = "mint"
filling_color = "#F2F2F2"
center_of_mass = list("x"=16, "y"=14)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
name = "plump helmet biscuit"
desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour."
@@ -4109,7 +4091,7 @@
/obj/item/weapon/reagent_containers/food/snacks/liquidprotein
name = "\improper LiquidProtein Ration"
desc = "A variant of the liquidfood ration, designed for obligate carnivore species. Only barely more appealing than regular liquidfood. Should this be crunchy?"
desc = "A variant of the liquidfood ration, designed for more carnivorous species. Only barely more appealing than regular liquidfood. Should this be crunchy?"
icon_state = "liquidprotein"
trash = /obj/item/trash/liquidprotein
filling_color = "#A8A8A8"
@@ -4232,6 +4214,15 @@
. = ..()
reagents.add_reagent("bean_protein", 6)
/obj/item/weapon/reagent_containers/food/snacks/cookie
name = "chocolate chip cookie"
desc = "Just like your mother used to make."
filling_color = "#DBC94F"
icon_state = "cookie"
nutriment_amt = 5
nutriment_desc = list("sweetness" = 2, "cookie" = 1, "chocolate" = 2)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie
name = "sugar cookie"
desc = "Just like your little sister used to make."
@@ -4241,6 +4232,16 @@
nutriment_desc = list("sweetness" = 4, "cookie" = 1)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
name = "Fortune cookie"
desc = "A true prophecy in each cookie!"
icon_state = "fortune_cookie"
filling_color = "#E8E79E"
center_of_mass = list("x"=15, "y"=14)
nutriment_amt = 3
nutriment_desc = list("fortune cookie" = 2)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/berrymuffin
name = "berry muffin"
desc = "A delicious and spongy little cake, with berries."
@@ -5888,32 +5889,6 @@
//////////////////////////////Candy Vend Items//////////////////////////////
////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/snacks/mint/Initialize()
. = ..()
reagents.add_reagent("mint", 1)
/obj/item/weapon/reagent_containers/food/snacks/mint/admints
desc = "Spearmint, peppermint's non-festive cousin."
icon = 'icons/obj/food_snacks.dmi'
icon_state = "admint"
/obj/item/weapon/storage/box/admints
name = "Ad-mints"
desc = "A pack of air fresheners for your mouth."
description_fluff = "Ad-mints earned their name, and reputation when a Major Bill's senior executive attended a meeting at a large a marketing firm and was so astounded by the quality of their complimentary mints, that he immediately bought the company - the mints company, not the ad agency - and began providing 'Ad-mints' on every MBT flight."
icon = 'icons/obj/food_snacks.dmi'
icon_state = "admint_pack"
item_state = "candy"
slot_flags = SLOT_EARS
w_class = 1
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/mint/admints = 6)
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/mint/admints)
use_sound = 'sound/items/drop/paper.ogg'
drop_sound = 'sound/items/drop/wrapper.ogg'
max_storage_space = 6
foldable = null
trash = /obj/item/trash/admints
/obj/item/weapon/reagent_containers/food/snacks/mint
name = "mint"
desc = "it is only wafer thin."
@@ -5933,12 +5908,11 @@
/obj/item/weapon/storage/box/admints
name = "Ad-mints"
desc = "A pack of air fresheners for your mouth."
description_fluff = "Ad-mints earned their name, and reputation when a Major Bill's senior executive attended a meeting at a large a marketing firm and was so astounded by the quality of their complimentary mints, that he immediately bought the company - the mints company, not the ad agency - and began providing 'Ad-mints' on every MBT flight."
icon = 'icons/obj/food_snacks.dmi'
icon_state = "admint_pack"
item_state = "candy"
desc = "A pack of air fresheners for your mouth."
description_fluff = "Ad-mints earned their name, and reputation when a Major Bill's senior executive attended a meeting at a large a marketing firm and was so astounded by the quality of their complimentary mints, that he immediately bought the company - the mints company, not the ad agency - and began providing 'Ad-mints' on every MBT flight."
trash = /obj/item/trash/admints
slot_flags = SLOT_EARS
w_class = 1
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/mint/admints = 6)
@@ -5947,11 +5921,12 @@
drop_sound = 'sound/items/drop/wrapper.ogg'
max_storage_space = 6
foldable = null
trash = /obj/item/trash/admints
/obj/item/weapon/reagent_containers/food/snacks/candy
name = "\improper Grandma Ellen's Candy Bar"
desc = "Now without nuts!"
description_fluff = "Hard candies were banned from many early human colony ships due to the tendency for brittle, sticky chunks to find their way inside vital equipment in zero-G conditions. This only made them all the more popular to new arrivees, and the Grandma Ellen's brand was Tau Ceti's answer to that demand."
description_fluff = "Hard candies were banned from many early human colony ships due to the tendency for brittle, sticky chunks to find their way inside vital equipment in zero-G conditions. This only made them all the more popular to new arrivees, and the Grandpa Elliot's brand was Tau Ceti's answer to that demand."
icon = 'icons/obj/food_snacks.dmi'
icon_state = "candy"
trash = /obj/item/trash/candy
@@ -5965,7 +5940,7 @@
. = ..()
reagents.add_reagent("sugar", 3)
/obj/item/weapon/reagent_containers/food/snacks/namagashi //ADDITION 04/14/2021
/obj/item/weapon/reagent_containers/food/snacks/namagashi
name = "\improper Ryo-kucha Namagashi"
desc = "Sweet Japanese gummy like candy that are just bursting with flavor!"
icon = 'icons/obj/food_snacks.dmi'
@@ -6035,7 +6010,7 @@
nutriment_desc = list("apricot" = 2, "sugar" = 2, "dates" = 2, "cranberry" = 2, "apple" = 2)
bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar/Initialize()
/obj/item/weapon/reagent_containers/food/snacks/fruitbar/Initialize()
. = ..()
reagents.add_reagent("sugar", 4)
@@ -6459,7 +6434,7 @@
. = ..()
reagents.add_reagent("doctorsdelight", 5)
////////////////////sol_vend (Mars Mart) (ADDED 04/11/2021)////////////////////////////////////////////////////
////////////////////sol_vend (Mars Mart)////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/snacks/triton
name = "\improper Tidal Gobs"
@@ -6594,7 +6569,7 @@
nutriment_amt = 4
bitesize = 1
////////////////////weeb_vend (Nippon-tan!) (ADDED 04/11/2021)////////////////////////////////////////////////////
////////////////////weeb_vend (Nippon-tan!)////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/snacks/ricecake
name = "rice cake"
@@ -6605,7 +6580,7 @@
nutriment_amt = 5
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/dorayaki //ADDITION 04/14/2021
/obj/item/weapon/reagent_containers/food/snacks/dorayaki
name = "dorayaki"
icon = 'icons/obj/food_snacks.dmi'
icon_state = "dorayaki"
@@ -6614,7 +6589,7 @@
nutriment_amt = 6
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/daifuku //ADDITION 04/14/2021
/obj/item/weapon/reagent_containers/food/snacks/daifuku
name = "daifuku"
icon = 'icons/obj/food_snacks.dmi'
icon_state = "daifuku"
@@ -6623,16 +6598,6 @@
nutriment_amt = 6
bitesize = 2
///obj/item/weapon/reagent_containers/food/snacks/pocky (Moved to chewables)
// name = "pockys"
// icon = 'icons/obj/food_snacks.dmi'
// icon_state = "pockys"
// desc = "A bundle of chocolate-coated bisquit sticks."
// trash = /obj/item/trash/pocky
// nutriment_desc = list("chocolate" = 4, "biscuit" = 1)
// nutriment_amt = 5
// bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/weebonuts
name = "\improper Red Alert Nuts!"
icon = 'icons/obj/food_snacks.dmi'
@@ -6675,7 +6640,7 @@
.=..()
reagents.add_reagent("sprinkles", 10)
/obj/item/weapon/reagent_containers/food/snacks/goma_dango //ADDITION 04/14/2021
/obj/item/weapon/reagent_containers/food/snacks/goma_dango
name = "\improper Goma dango"
icon = 'icons/obj/food_snacks.dmi'
icon_state = "goma_dango"
@@ -6685,7 +6650,7 @@
nutriment_amt = 5
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/hanami_dango //ADDITION 04/14/2021
/obj/item/weapon/reagent_containers/food/snacks/hanami_dango
name = "\improper Hanami dango"
icon = 'icons/obj/food_snacks.dmi'
icon_state = "hanami_dango"
@@ -6696,7 +6661,7 @@
nutriment_amt = 5
bitesize = 2
////////////////////ancient_vend (Hot Food - Old) (ADDED 04/11/2021)////////////////////////////////////////////////////
////////////////////ancient_vend (Hot Food - Old)////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/snacks/old
name = "master old-food"
+2 -2
View File
@@ -631,11 +631,11 @@
/obj/item/weapon/reagent_containers/food/snacks/grub_pink
name = "pink candy grub"
desc = "A thoroughly candied grub, it smells of raspberry."
desc = "A thoroughly candied grub, it smells of cherry."
icon = 'icons/obj/food_vr.dmi'
icon_state = "grub_pink"
nutriment_amt = 5
nutriment_desc = list("raspberry" = 4, "goo" = 1)
nutriment_desc = list("cherry" = 4, "goo" = 1)
/obj/item/weapon/reagent_containers/food/snacks/grub_pink/Initialize()
. = ..()
+1 -1
View File
@@ -160,7 +160,7 @@
result = /obj/item/weapon/storage/box/wings/bucket
/datum/recipe/grub_pink
fruit = list("cherry" = 1)
fruit = list("cherries" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/grub
)
+1 -2
View File
@@ -299,7 +299,7 @@
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
)
result = /obj/item/weapon/reagent_containers/food/snacks/cookiesnack
result = /obj/item/weapon/reagent_containers/food/snacks/cookie
result_quantity = 4
reagent_mix = RECIPE_REAGENT_REPLACE
@@ -319,7 +319,6 @@
result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel
result_quantity = 2
/datum/recipe/cracker
appliance = OVEN
reagents = list("sodiumchloride" = 1)
@@ -1,6 +1,7 @@
/mob/living/carbon/human/gib()
//Drop the NIF, they're expensive, why not recover them?
release_vore_contents(silent = TRUE)
if(nif)
var/obj/item/device/nif/deadnif = nif //Unimplant removes the reference on the mob
if(!deadnif.gib_nodrop)
@@ -335,11 +335,6 @@
log_runtime(EXCEPTION("Warning: human/Topic was called with item [href_list["item"]], but the item Topic is deprecated!"))
// handle_strip(href_list["item"],usr)
// VOREStation Start
if(href_list["ooc_notes"])
src.Examine_OOC()
// VOREStation End
if (href_list["criminal"])
if(hasHUD(usr,"security"))
@@ -545,3 +545,23 @@ YW CHANGE STOP*/
/datum/trait/neutral/thinner/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
/datum/trait/neutral/dominate_predator
name = "Dominate Predator"
desc = "Allows you to attempt to take control of a predator while inside of their belly."
cost = 0
custom_only = FALSE
/datum/trait/neutral/dominate_predator/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.verbs |= /mob/proc/dominate_predator
/datum/trait/neutral/dominate_prey
name = "Dominate Prey"
desc = "Connect to and dominate the brain of your prey."
cost = 0
custom_only = FALSE
/datum/trait/neutral/dominate_predator/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.verbs |= /mob/living/proc/dominate_prey
@@ -16,7 +16,7 @@
melee_damage_upper = 5
meat_amount = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cookiesnack
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cookie
say_list_type = /datum/say_list/cookiegirl
ai_holder_type = /datum/ai_holder/simple_mob/passive/cookiegirl
@@ -0,0 +1,538 @@
///// A mob that gets used when prey dominate predators. Will automatically delete itself if it's not inside a mob.
/mob/living/dominated_brain
name = "dominated brain"
desc = "Someone who has taken a back seat within their own body."
icon = 'icons/obj/surgery.dmi'
icon_state = "brain1"
var/mob/living/prey_body //The body of the person who dominated the brain
var/prey_ckey //The ckey of the person who dominated the brain
var/prey_name //In case the body is missing. ;3c
var/list/prey_langs = list()
var/mob/living/pred_body //The body of the person who was dominated
var/pred_ckey //The ckey of the person who was dominated
var/pred_ooc_notes
var/prey_ooc_notes
/mob/living/dominated_brain/New(loc, var/mob/living/pred, preyname, var/mob/living/prey)
. = ..()
prey_name = preyname
if(prey)
prey_body = prey
pred_body = pred
/mob/living/dominated_brain/Initialize()
if(!isliving(loc))
qdel(src)
return
. = ..()
lets_register_our_signals()
verbs |= /mob/living/dominated_brain/proc/resist_control
/mob/living/dominated_brain/Life()
. = ..()
if(!isliving(loc))
qdel(src)
if(!ckey)
qdel(src)
/mob/living/dominated_brain/say_understands(var/mob/other, var/datum/language/speaking = null)
if(pred_body.say_understands(other, speaking))
return TRUE
else return FALSE
/mob/living/dominated_brain/proc/lets_register_our_signals()
if(prey_body)
RegisterSignal(prey_body, COMSIG_PARENT_QDELETING, .proc/prey_was_deleted, TRUE)
RegisterSignal(pred_body, COMSIG_PARENT_QDELETING, .proc/pred_was_deleted, TRUE)
/mob/living/dominated_brain/proc/lets_unregister_our_signals()
prey_was_deleted()
pred_was_deleted()
/mob/living/dominated_brain/proc/prey_was_deleted()
if(prey_body)
UnregisterSignal(prey_body, COMSIG_PARENT_QDELETING)
prey_body = null
/mob/living/dominated_brain/proc/pred_was_deleted()
if(pred_body)
UnregisterSignal(pred_body, COMSIG_PARENT_QDELETING)
pred_body = null
/mob/living/dominated_brain/Destroy()
if(pred_body)
var/P = FALSE
for(var/I in pred_body)
if(I == src)
continue
if(istype(I, /mob/living/dominated_brain))
P = TRUE
if(!P)
pred_body.verbs -= /mob/proc/psay
pred_body.verbs -= /mob/proc/pme
lets_unregister_our_signals()
. = ..()
/mob/living/dominated_brain/say(var/message, var/datum/language/speaking = null, var/whispering = 0)
if (src.client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "<font color='red'>You cannot speak in IC (muted).</font>")
return
if(loc == pred_body)
message = sanitize(message)
if (!message)
return
log_say(message,src)
if (stat == 2)
return say_dead(message)
to_chat(src, "<span class='changeling'>You think, \"[message]\"</span>")
to_chat(pred_body, "<span class='changeling'>The captive mind of \the [src] thinks, \"[message]\"</span>")
for(var/I in pred_body.contents)
if(istype(I, /mob/living/dominated_brain) && I != src)
var/mob/living/dominated_brain/db = I
to_chat(db, "<span class='changeling'>The captive mind of \the [src] thinks, \"[message]\"</span>")
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
to_chat(M, "The captive mind of [src] whispers, \"[message]\"")
/mob/living/dominated_brain/me_verb(message as text)
if (src.client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
return
if(loc == pred_body)
message = sanitize(message)
if (!message)
return
log_emote(message,src)
if (stat == 2)
return say_dead(message)
to_chat(src, "<span class='changeling'><i>\The [src] [message]</i></span>")
to_chat(pred_body, "<span class='changeling'><i>\The [src] [message]</i></span>")
for(var/I in pred_body.contents)
if(istype(I, /mob/living/dominated_brain) && I != src)
var/mob/living/dominated_brain/db = I
to_chat(db, "<span class='changeling'><i>\The [src] [message]</i></span>")
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
to_chat(M, "<span class='changeling'><i>\The [src] [message]</i></span>")
return
/mob/living/dominated_brain/emote(var/message)
if (src.client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
return
if(loc == pred_body)
message = sanitize(message)
if (!message)
return
log_emote(message,src)
if (stat == 2)
return say_dead(message)
to_chat(src, "<span class='changeling'><i>\The [src] [message]</i></span>")
to_chat(pred_body, "<span class='changeling'><i>\The [src] [message]</i></span>")
for(var/I in pred_body.contents)
if(istype(I, /mob/living/dominated_brain) && I != src)
var/mob/living/dominated_brain/db = I
to_chat(db, "<span class='changeling'><i>\The [src] [message]</i></span>")
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
to_chat(M, "<span class='changeling'><i>\The [src] [message]</i></span>")
return
/mob/living/dominated_brain/process_resist()
//Resisting control by an alien mind.
if(pred_body.ckey == pred_ckey)
dominate_predator()
return
if(pred_ckey == ckey && pred_body.prey_controlled)
if(tgui_alert(src, "Do you want to wrest control over your body back from \the [prey_name]?", "Regain Control",list("No","Yes")) != "Yes")
return
to_chat(src, "<span class='danger'>You begin to resist \the [prey_name]'s control!!!</span>")
to_chat(pred_body, "<span class='danger'>You feel the captive mind of [src] begin to resist your control.</span>")
if(do_after(src, 10 SECONDS, exclusive = TRUE))
restore_control()
else
to_chat(src, "<span class='notice'>Your attempt to regain control has been interrupted...</span>")
to_chat(pred_body, "<span class='notice'>The dominant sensation fades away...</span>")
else
to_chat(src, "<span class='warning'>\The [pred_body] is already dominated, and cannot be controlled at this time.</span>")
..()
/mob/living/dominated_brain/proc/restore_control(ask = TRUE)
if(ask && disconnect_time || client && ((client.inactivity / 10) / 60 > 10))
if(tgui_alert(src, "Your predator's mind does not seem to be active presently. Releasing control in this state may leave you stuck in whatever state you find yourself in. Are you sure?", "Release Control",list("No","Yes")) != "Yes")
return
var/mob/living/prey_goes_here
if(prey_body && prey_body.loc.loc == pred_body) //The prey body exists and is here, let's handle the prey!
prey_goes_here = prey_body
else if(prey_body) //It exists, but it's not here, let's spawn them a temporary home.
var/mob/living/dominated_brain/ndb = new /mob/living/dominated_brain(pred_body, pred_body, prey_name, prey_body)
ndb.name = prey_name
ndb.prey_ckey = src.prey_ckey
ndb.pred_ckey = src.pred_ckey
ndb.pred_body.verbs |= /mob/proc/pme
ndb.pred_body.verbs |= /mob/proc/psay
prey_goes_here = ndb
prey_goes_here.real_name = src.prey_name
src.languages -= src.temp_languages
prey_goes_here.languages |= src.prey_langs
prey_goes_here.ooc_notes = prey_ooc_notes
prey_goes_here.verbs |= /mob/living/dominated_brain/proc/cease_this_foolishness
else //The prey body does not exist, let's put them in the back seat instead!
var/mob/living/dominated_brain/ndb = new /mob/living/dominated_brain(pred_body, pred_body, prey_name)
ndb.name = prey_name
ndb.prey_ckey = src.prey_ckey
ndb.pred_ckey = src.pred_ckey
ndb.pred_body.verbs |= /mob/proc/pme
ndb.pred_body.verbs |= /mob/proc/psay
prey_goes_here = ndb
src.languages -= src.temp_languages
prey_goes_here.languages |= src.prey_langs
prey_goes_here.real_name = src.prey_name
prey_goes_here.ooc_notes = prey_ooc_notes
///////////////////
// Handle Pred
pred_body.verbs -= /mob/proc/release_predator
//Now actually put the people in the mobs
prey_goes_here.ckey = src.prey_ckey
pred_body.ckey = src.pred_ckey
pred_body.ooc_notes = pred_ooc_notes
log_and_message_admins("[pred_body] is now controlled by [pred_body.ckey]. They were restored to control through prey domination, and had been controlled by [prey_ckey].")
handle_langs(src)
pred_body.prey_controlled = FALSE
qdel(src)
/mob/living/dominated_brain/proc/handle_langs(var/mob/M)
var/list/langlist = list()
pred_body.languages -= pred_body.temp_languages
LAZYCLEARLIST(pred_body.temp_languages)
pred_body.temp_languages = list()
for(var/i in loc)
if(i == M)
continue
if(istype(i,/mob/living/dominated_brain))
var/mob/living/dominated_brain/db = i
langlist |= db.languages
langlist |= db.prey_langs
langlist -= pred_body.languages
pred_body.temp_languages |= langlist
pred_body.languages |= langlist
//Welcome to the adapted borer code.
/mob/proc/dominate_predator()
set category = "Abilities"
set name = "Dominate Predator"
set desc = "Connect to and dominate the brain of your predator."
var/mob/living/pred
var/mob/living/prey = src
if(isbelly(prey.loc))
pred = loc.loc
else if(isliving(prey.loc))
pred = loc
else
to_chat(prey, "<span class='notice'>You are not inside anyone.</span>")
return
if(prey.stat == DEAD)
to_chat(prey, "<span class='warning'>You cannot do that in your current state.</span>")
return
if(!pred.ckey)
to_chat(prey, "<span class='notice'>\The [pred] isn't able to be dominated.</span>")
return
if(prey.prey_controlled)
to_chat(prey, "<span class='warning'>You are already controlling someone, you can't control anyone else at this time.</span>")
return
if(pred.prey_controlled)
to_chat(prey, "<span class='warning'>\The [pred] is already dominated, and cannot be controlled at this time.</span>")
return
if(ishuman(pred))
var/mob/living/carbon/human/h = pred
if(h.resleeve_lock && ckey != h.resleeve_lock)
to_chat(src, "<span class='warning'>\The [h] cannot be impersonated!</span>")
return
if(tgui_alert(prey, "You are attempting to take over [pred], are you sure? Ensure that their preferences align with this kind of play.", "Take Over Predator",list("No","Yes")) != "Yes")
return
to_chat(prey, "<span class='notice'>You attempt to exert your control over \the [pred]...</span>")
log_admin("[key_name_admin(prey)] attempted to take over [pred].")
if(tgui_alert(pred, "\The [prey] has elected to attempt to take control of you. Is this something you will allow to happen?", "Allow Prey Domination",list("No","Yes")) != "Yes")
to_chat(prey, "<span class='warning'>\The [pred] declined your request for control.</span>")
return
if(tgui_alert(pred, "Are you sure? If you should decide to revoke this, you will have the ability to do so in your 'Abilities' tab.", "Allow Prey Domination",list("No","Yes")) != "Yes")
return
to_chat(pred, "<span class='warning'>You can feel the will of another overwriting your own, control of your body being sapped away from you...</span>")
to_chat(prey, "<span class='warning'>You can feel the will of your host diminishing as you exert your will over them!</span>")
if(!do_after(prey, 10 SECONDS, exclusive = TRUE))
to_chat(prey, "<span class='notice'>Your attempt to regain control has been interrupted...</span>")
to_chat(pred, "<span class='notice'>The dominant sensation fades away...</span>")
return
to_chat(prey, "<span class='danger'>You plunge your conciousness into \the [pred], assuming control over their very body, leaving your own behind within \the [pred]'s [loc].</span>")
to_chat(pred, "<span class='danger'>You feel your body move on its own, as you are pushed to the background, and an alien consciousness displaces yours.</span>")
var/mob/living/dominated_brain/pred_brain
var/delete_source = FALSE
if(istype(prey, /mob/living/dominated_brain))
var/mob/living/dominated_brain/punished_prey = prey
if(punished_prey.prey_body)
pred_brain = new /mob/living/dominated_brain(pred, pred, name, punished_prey.prey_body)
else
pred_brain = new /mob/living/dominated_brain(pred, pred, name) //We have to play musical chairs with 3 bodies, or everyone gets d/ced
delete_source = TRUE
else
pred_brain = new /mob/living/dominated_brain(pred, pred, name, prey)
pred.verbs |= /mob/proc/pme
pred.verbs |= /mob/proc/psay
pred_brain.prey_ooc_notes = prey.ooc_notes
pred_brain.pred_ooc_notes = pred.ooc_notes
pred_brain.name = pred.name
var/list/preylangs = list()
preylangs |= prey.languages
preylangs -= prey.temp_languages
pred_brain.prey_langs |= preylangs
pred_brain.prey_ckey = prey.ckey
pred_brain.pred_ckey = pred.ckey
pred_brain.handle_langs()
pred.ooc_notes = pred_brain.prey_ooc_notes
pred.verbs |= /mob/proc/release_predator
//Now actually put the people in the mobs
pred_brain.ckey = pred_brain.pred_ckey
pred_brain.real_name = pred.real_name
pred.ckey = pred_brain.prey_ckey
pred.prey_controlled = TRUE
log_and_message_admins("[pred] is now controlled by [pred.ckey], they were taken over via prey domination, and were originally controlled by [pred_brain.pred_ckey].")
if(delete_source)
qdel(prey)
/mob/proc/release_predator()
set category = "Abilities"
set name = "Restore Control"
set desc = "Release control of your predator's body."
for(var/I in contents)
if(istype(I, /mob/living/dominated_brain))
var/mob/living/dominated_brain/db = I
if(db.ckey == db.pred_ckey)
to_chat(src, "<span class='notice'>You ease off of your control, releasing \the [db].</span>")
to_chat(db, "<span class='notice'>You feel the alien presence fade, and restore control of your body to you of their own will...</span>")
db.restore_control()
return
else
continue
to_chat(src, "<span class='danger'>You haven't been taken over, and shouldn't have this verb. I'll clean that up for you. Report this on the github, it is a bug.</span>")
verbs -= /mob/proc/release_predator
/mob/living/dominated_brain/proc/resist_control()
set category = "Abilities"
set name = "Resist Control"
set desc = "Attempt to resist control."
if(pred_body.ckey == pred_ckey)
dominate_predator()
return
if(pred_ckey == ckey && pred_body.prey_controlled)
to_chat(src, "<span class='danger'>You begin to resist \the [prey_name]'s control!!!</span>")
to_chat(pred_body, "<span class='danger'>You feel the captive mind of [src] begin to resist your control.</span>")
if(do_after(src, 10 SECONDS, exclusive = TRUE))
restore_control()
else
to_chat(src, "<span class='notice'>Your attempt to regain control has been interrupted...</span>")
to_chat(pred_body, "<span class='notice'>The dominant sensation fades away...</span>")
else
to_chat(src, "<span class='warning'>\The [pred_body] is already dominated, and cannot be controlled at this time.</span>")
/mob/proc/psay(message as text|null)
set category = "Abilities"
set name = "Prey Say (psay)"
set desc = "Emote to a dominated predator/prey."
if (src.client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
return
message = sanitize(message)
if (!message)
message = input(usr, "Type a message to emote.","Emote to prey") as text|null
if (!message)
return
var/f = FALSE
for(var/I in contents)
if(istype(I, /mob/living/dominated_brain))
var/mob/living/dominated_brain/db = I
to_chat(db, "<span class='changeling'>\The [src] thinks, \"[message]\"</span>")
f = TRUE
if(f)
to_chat(src, "<span class='changeling'>You think \"[message]\"</span>")
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
to_chat(M, "<span class='changeling'>\The [src] thinks, \"[message]\"</span>")
log_say(message,src)
else
to_chat(src, "<span class='warning'>There is no one inside you to talk to...</span>")
return
/mob/proc/pme(message as text|null)
set category = "Abilities"
set name = "Prey Emote (pme)"
set desc = "Emote to a dominated predator/prey."
if (src.client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
return
message = sanitize(message)
if (!message)
message = input(usr, "Type a message to emote.","Emote to prey") as text|null
if (!message)
return
var/f = FALSE
for(var/I in contents)
if(istype(I, /mob/living/dominated_brain))
var/mob/living/dominated_brain/db = I
to_chat(db, "<span class='changeling'><i>\The [src] [message]</i></span>")
f = TRUE
if(f)
to_chat(src, "<span class='changeling'><i>\The [src] [message]</i></span>")
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
to_chat(M, "<span class='changeling'><i>\The [src] [message]</i></span>")
log_emote(message,src)
else
to_chat(src, "<span class='warning'>There is no one inside you to talk to...</span>")
return
/mob/living/proc/dominate_prey()
set category = "Abilities"
set name = "Dominate Prey"
set desc = "Connect to and dominate the brain of your prey."
var/list/possible_mobs = list()
for(var/obj/belly/B in src.vore_organs)
for(var/mob/living/L in B)
if(isliving(L) && L.ckey)
possible_mobs += L
else
continue
var/mob/living/M
var/input = tgui_input_list(src, "Select a mob to dominate:", "Dominate Prey", possible_mobs)
if(!input)
to_chat(src, "<span class='warning'>There are no valid targets inside of you.</span>")
return
M = input
if(!M)
return
if(tgui_alert(src, "You selected [M] to attempt to dominate. Are you sure?", "Dominate Prey",list("No","Yes")) != "Yes")
return
log_admin("[key_name_admin(src)] offered to use dominate prey on [M] ([M.ckey]).")
to_chat(src, "<span class='warning'>Attempting to dominate and gather \the [M]'s mind...</span>")
if(tgui_alert(M, "\The [src] has elected collect your mind into their own. Is this something you will allow to happen?", "Allow Dominate Prey",list("No","Yes")) != "Yes")
return
if(tgui_alert(M, "Are you sure? You can only undo this while your body is inside of [src]. (You can resist, or use the resist verb in the abilities tab)", "Allow Dominate Prey",list("No","Yes")) != "Yes")
return
to_chat(M, "<span class='warning'>You can feel the will of another pulling you away from your body...</span>")
to_chat(src, "<span class='warning'>You can feel the will of your prey diminishing as you gather them!</span>")
if(!do_after(src, 10 SECONDS, exclusive = TRUE))
to_chat(M, "<span class='notice'>The alien presence fades, and you are left along in your body...</span>")
to_chat(src, "<span class='notice'>Your attempt to gather [M]'s mind has been interrupted.</span>")
return
if(!isbelly(M.loc))
to_chat(M, "<span class='notice'>The alien presence fades, and you are left along in your body...</span>")
to_chat(src, "<span class='notice'>Your attempt to gather [M]'s mind has been interrupted.</span>")
return
var/mob/living/dominated_brain/db = new /mob/living/dominated_brain(src, src, M.name, M)
verbs |= /mob/proc/pme
verbs |= /mob/proc/psay
db.name = M.name
db.prey_ckey = M.ckey
db.pred_ckey = src.ckey
db.real_name = M.real_name
M.languages -= M.temp_languages
db.languages |= M.languages
db.handle_langs()
db.ooc_notes = M.ooc_notes
db.verbs |= /mob/living/dominated_brain/proc/cease_this_foolishness
db.ckey = db.prey_ckey
log_admin("[db] ([db.ckey]) has agreed to [src]'s dominate prey attempt, and so no longer occupies their body.")
to_chat(src, "<span class='notice'>You feel your mind expanded as [M] is incorporated into you.</span>")
to_chat(M, "<span class='warning'>Your mind is gathered into \the [src], becoming part of them...</span>")
/mob/living/dominated_brain/proc/cease_this_foolishness()
set category = "Abilities"
set name = "Return to Body"
set desc = "If your body is inside of your predator still, attempts to re-insert yourself into it."
if(prey_body && prey_body.loc.loc == pred_body)
to_chat(src, "<span class='notice'>You exert your will and attempt to return to yout body!!!</span>")
to_chat(pred_body, "<span class='warning'>\The [src] resists your hold and attempts to return to their body!</span>")
if(do_after(src, 10 SECONDS, exclusive = TRUE))
if(prey_body && prey_body.loc.loc == pred_body)
prey_body.ckey = prey_ckey
handle_langs(src)
to_chat(src, "<span class='warning'>Your connection to [pred_body] fades, and you awaken back in your own body!</span>")
to_chat(pred_body, "<span class='warning'>You feel as though a piece of yourself is missing, as \the [src] returns to their body.</span>")
log_admin("[src] ([src.ckey]) has returned to their body, [prey_body].")
qdel(src)
else
to_chat(src, "<span class='warning'>Your attempt to regain your body has been interrupted...</span>")
else
to_chat(src, "<span class='warning'>Your attempt to regain your body has been interrupted...</span>")
else if(prey_body)
to_chat(src, "<span class='warning'>You can sense your body... but it is not contained within [pred_body]... You cannot return to it at this time.</span>")
else
to_chat(src, "<span class='warning'>Your body seems to no longer exist, so, you cannot return to it.</span>")
verbs -= /mob/living/dominated_brain/proc/cease_this_foolishness
@@ -264,8 +264,8 @@
return
var/list/possible_mobs = list()
for(var/obj/belly/B in src.vore_organs)
for(var/mob/living/carbon/human/H in B)
if(ishuman(H) && H.ckey)
for(var/mob/living/H in B)
if( (ishuman(H) || isrobot(H)) && H.ckey )
possible_mobs += H
else
continue
@@ -276,9 +276,11 @@
M = input
if(!M)
return
if(M.resleeve_lock && ckey != M.resleeve_lock)
to_chat(src, "<span class='warning'>\The [M] cannot be impersonated!</span>")
return
// Adding a ishuman check here, since silicon mobs don't have a resleeve_lock from what I can tell.
if(ishuman(M))
if(M.resleeve_lock && ckey != M.resleeve_lock)
to_chat(src, "<span class='warning'>\The [M] cannot be impersonated!</span>")
return
if(tgui_alert(src, "You selected [M] to attempt to take over. Are you sure?", "Take Over Prey",list("No","Yes")) == "Yes")
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")
@@ -30,7 +30,7 @@
backbag = rand(1,6)
pdachoice = rand(1,5)
pdachoice = rand(1,7)
age = rand(current_species.min_age, current_species.max_age)
b_type = RANDOM_BLOOD_TYPE
if(H)
+8 -3
View File
@@ -6,7 +6,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda
name = "\improper PDA"
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
icon = 'icons/obj/pda.dmi'
icon = 'icons/obj/pda_vr.dmi' //VOREStation edit
icon_state = "pda"
item_state = "electronic"
w_class = ITEMSIZE_SMALL
@@ -127,7 +127,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
new /obj/item/weapon/pen(src)
pdachoice = isnull(H) ? 1 : (ishuman(H) ? H.pdachoice : 1)
switch(pdachoice)
if(1) icon = 'icons/obj/pda.dmi'
if(1) icon = 'icons/obj/pda_vr.dmi' //VOREStation edit
if(2) icon = 'icons/obj/pda_slim.dmi'
if(3) icon = 'icons/obj/pda_old.dmi'
if(4) icon = 'icons/obj/pda_rugged.dmi'
@@ -146,6 +146,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
SPECIES_TESHARI = 'icons/mob/species/teshari/pda_wrist.dmi',
SPECIES_VR_TESHARI = 'icons/mob/species/teshari/pda_wrist.dmi',
)
if(7) icon = 'icons/obj/pda_clam.dmi' //VOREStation edit
else
icon = 'icons/obj/pda_old.dmi'
log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.")
@@ -277,6 +278,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
playsound(src, 'sound/machines/id_swipe.ogg', 100, 1)
else
id.loc = get_turf(src)
cut_overlay("pda-id")
id = null
/obj/item/device/pda/proc/remove_pen()
@@ -287,6 +289,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(M.get_active_hand() == null)
M.put_in_hands(O)
to_chat(usr, "<span class='notice'>You remove \the [O] from \the [src].</span>")
cut_overlay("pda-pen")
return
O.loc = get_turf(src)
else
@@ -420,6 +423,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
if(id_check(user, 2))
to_chat(user, "<span class='notice'>You put the ID into \the [src]'s slot.</span>")
add_overlay("pda-id")
updateSelfDialog()//Update self dialog on success.
return //Return in case of failed check or when successful.
updateSelfDialog()//For the non-input related code.
@@ -437,6 +441,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
user.drop_item()
C.loc = src
to_chat(user, "<span class='notice'>You slot \the [C] into \the [src].</span>")
add_overlay("pda-pen")
return
/obj/item/device/pda/attack(mob/living/C as mob, mob/living/user as mob)
@@ -473,7 +478,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/weapon/storage/box/PDAs
name = "box of spare PDAs"
desc = "A box of spare PDA microcomputers."
icon = 'icons/obj/pda.dmi'
icon = 'icons/obj/pda_vr.dmi' //VOREStation edit
icon_state = "pdabox"
/obj/item/weapon/storage/box/PDAs/New()
+3 -3
View File
@@ -15,12 +15,12 @@
/obj/item/device/pda/pathfinder
default_cartridge = /obj/item/weapon/cartridge/explorer
icon_state = "pda-lawyer-old"
icon_state = "pda-transp" //Might as well let this sprite actually get seen, otherwise it's going to be hidden forever.
/obj/item/device/pda/explorer
default_cartridge = /obj/item/weapon/cartridge/explorer
icon_state = "pda-det"
icon_state = "pda-lawyer-old" //Explorer's can get the PF's old style instead, rather than re-using the detective PDA
/obj/item/device/pda/sar
default_cartridge = /obj/item/weapon/cartridge/sar
icon_state = "pda-h"
icon_state = "pda-gene" //Gives FM's a distinct PDA of their own, rather than sharing with the bridge-secretary & CCO's.
+4
View File
@@ -10,6 +10,10 @@
name = fon ? "Disable Flashlight" : "Enable Flashlight"
pda.update_shortcuts()
pda.set_light(fon ? f_lum : 0)
if(fon)
pda.add_overlay("light-o")
else
pda.cut_overlay("light-o")
/datum/data/pda/utility/honk
name = "Honk Synthesizer"
+22 -6
View File
@@ -1,6 +1,7 @@
/datum/persistent/paintings
name = "paintings"
entries_expire_at = 1000 // Basically forever
//entries_expire_at = 1000 // Basically forever
var/max_entries = 1000 //1000 paintings is a lot, and will take a long time to cycle through.
/datum/persistent/paintings/SetFilename()
filename = "data/persistent/paintings.json"
@@ -14,7 +15,7 @@
token["age"]++ // Increment age!
if(!CheckTokenSanity(token))
tokens -= token
SSpersistence.unpicked_paintings = SSpersistence.all_paintings.Copy()
for(var/obj/structure/sign/painting/P in SSpersistence.painting_frames)
@@ -24,14 +25,29 @@
var/png_filename = "data/paintings/[token["persistence_id"]]/[token["md5"]].png"
if(!fexists(png_filename))
return FALSE
if(token["age"] > entries_expire_at)
fdel(png_filename)
return FALSE
// if(token["age"] > entries_expire_at)
// fdel(png_filename)
// return FALSE
/datum/persistent/paintings/Shutdown()
for(var/obj/structure/sign/painting/P in SSpersistence.painting_frames)
P.save_persistent()
if(SSpersistence.all_paintings.len > max_entries)
var/this_many = SSpersistence.all_paintings.len
var/over = this_many - max_entries
log_admin("There are [over] more painting(s) stored than the maximum allowed.")
while(over > 0)
var/list/d = SSpersistence.all_paintings[1]
var/png_filename = "data/paintings/[d["persistence_id"]]/[d["md5"]].png"
fdel(png_filename)
if(SSpersistence.all_paintings.Remove(list(d)))
log_admin("A painting was deleted")
else
log_and_message_admins("Attempted to delete a painting, but failed.")
over --
if(fexists(filename))
fdel(filename)
to_file(file(filename), json_encode(SSpersistence.all_paintings))
to_file(file(filename), json_encode(SSpersistence.all_paintings))
@@ -55,4 +55,500 @@
ammo_type = /obj/item/ammo_casing/cap
matter = list(MAT_STEEL = 2040)
max_ammo = 24
multiple_sprites = null
multiple_sprites = null
/*
* .357
*/
/obj/item/ammo_magazine/ammo_box/b357
name = "ammo box (.357)"
desc = "A box of .357 rounds"
icon_state = "magnum"
caliber = ".357"
ammo_type = /obj/item/ammo_casing/a357
matter = list(MAT_STEEL = 5040)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b357/rubber
name = "ammo box (.357 rubber)"
desc = "A box of .357 rubber rounds"
icon_state = "magnum_r"
caliber = ".357"
ammo_type = /obj/item/ammo_casing/a357/rubber
matter = list(MAT_STEEL = 5040)
max_ammo = 24
multiple_sprites = 1
/*
* .38
*/
/obj/item/ammo_magazine/ammo_box/b38
name = "ammo box (.38)"
desc = "A box of .38 rounds"
icon_state = "pistol"
caliber = ".38"
ammo_type = /obj/item/ammo_casing/a38
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b38/rubber
name = "ammo box (.38 rubber)"
desc = "A box of .38 rubber rounds"
icon_state = "pistol_p"
caliber = ".38"
ammo_type = /obj/item/ammo_casing/a38/rubber
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/*
* 10mm
*/
/obj/item/ammo_magazine/ammo_box/b10mm
name = "ammo box (10mm)"
desc = "A box of 10mm rounds"
icon_state = "box10mm"
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm
matter = list(MAT_STEEL = 3000)
max_ammo = 40
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b10mm/practice
name = "ammo box (10mm practice)"
desc = "A box of 10mm practice rounds"
icon_state = "box10mm-practice"
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm/practice
matter = list(MAT_STEEL = 2400)
max_ammo = 40
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b10mm/rubber
name = "ammo box (10mm rubber)"
desc = "A box of 10mm rubber rounds"
icon_state = "box10mm-rubber"
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm/rubber
matter = list(MAT_STEEL = 2400)
max_ammo = 40
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b10mm/emp
name = "ammo box (10mm haywire)"
desc = "A box of 10mm haywire rounds"
icon_state = "box10mm-hw"
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm/emp
matter = list(MAT_STEEL = 5200, MAT_URANIUM = 4000)
max_ammo = 40
multiple_sprites = 1
/*
* .44
*/
/obj/item/ammo_magazine/ammo_box/b44
name = "ammo box (.44)"
desc = "A box of .44 rounds"
icon_state = "box44"
caliber = ".44"
ammo_type = /obj/item/ammo_casing/a44
matter = list(MAT_STEEL = 5040)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b44/rubber
name = "ammo box (.44 rubber)"
desc = "A box of .44 rubber rounds"
icon_state = "box44-rubber"
caliber = ".44"
ammo_type = /obj/item/ammo_casing/a44/rubber
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/*
* .45
*/
/obj/item/ammo_magazine/ammo_box/b45
name = "ammo box (.45)"
desc = "A box of .45 rounds"
icon_state = "pistol_s"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45
matter = list(MAT_STEEL = 1800)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/practice
name = "ammo box (.45 practice)"
desc = "A box of .45 practice rounds"
icon_state = "pistol_p"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/practice
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/ap
name = "ammo box (.45 AP)"
desc = "A box of .45 armor-piercing rounds"
icon_state = "pistol_ap"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/ap
matter = list(MAT_STEEL = 1200, MAT_PLASTEEL = 600)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/hp
name = "ammo box (.45 HP)"
desc = "A box of .45 hollow-point rounds"
icon_state = "pistol_hp"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/hp
matter = list(MAT_STEEL = 1440, MAT_PLASTIC = 360)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/rubber
name = "ammo box (.45 rubber)"
desc = "A box of .45 rubber rounds"
icon_state = "pistol_r"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/rubber
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/emp
name = "ammo box (.45 haywire)"
desc = "A box of .45 haywire rounds"
icon_state = "pistol_hw"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/emp
matter = list(MAT_STEEL = 3120, MAT_URANIUM = 2400)
max_ammo = 24
multiple_sprites = 1
/*
* 12g (aka shotgun ammo)
*/
/obj/item/ammo_magazine/ammo_box/b12g
name = "ammo box (12 gauge slug)"
desc = "A box of 12 gauge slug rounds"
icon_state = "slug"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g
matter = list(MAT_STEEL = 2880)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/pellet
name = "ammo box (12 gauge buckshot)"
desc = "A box of 12 gauge buckshot rounds"
icon_state = "buckshot"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/pellet
matter = list(MAT_STEEL = 2880)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/beanbag
name = "ammo box (12 gauge beanbag)"
desc = "A box of 12 gauge beanbag rounds"
icon_state = "bean"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/beanbag
matter = list(MAT_STEEL = 1440)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/stunshell
name = "ammo box (12 gauge stun)"
desc = "A box of 12 gauge stun rounds"
icon_state = "stunslug"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/stunshell
matter = list(MAT_STEEL = 2880, MAT_GLASS = 5760)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/emp
name = "ammo box (12 gauge EMP)"
desc = "A box of 12 gauge EMP rounds"
icon_state = "emp"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/emp
matter = list(MAT_STEEL = 2880, MAT_URANIUM = 1920)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/flechette
name = "ammo box (12 gauge flechette)"
desc = "A box of 12 gauge flechette rounds"
icon_state = "bean"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/flechette
matter = list(MAT_STEEL = 2880, MAT_PLASTEEL = 800)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/practice
name = "ammo box (12 gauge practice)"
desc = "A box of 12 gauge practice rounds"
icon_state = "practice"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/practice
matter = list(MAT_STEEL = 480)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/blank
name = "ammo box (12 gauge blank)"
desc = "A box of 12 gauge blank rounds"
icon_state = "blank"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/blank
matter = list(MAT_STEEL = 720)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/flash
name = "ammo box (12 gauge flash)"
desc = "A box of 12 gauge flash rounds"
icon_state = "flash"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/flash
matter = list(MAT_STEEL = 720, MAT_GLASS = 720)
max_ammo = 8
multiple_sprites = 1
/*
* 14.5mm (anti-materiel rifle round)
*/
/obj/item/ammo_magazine/ammo_box/b145
desc = "ammo box (14.5mm)"
desc = "A box of 14.5mm rounds"
icon_state = "sniper"
caliber = "14.5mm"
ammo_type = /obj/item/ammo_casing/a145
matter = list(MAT_STEEL = 8750)
max_ammo = 7
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b145/highvel
desc = "ammo box (14.5mm sabot)"
desc = "A box of 14.5mm sabot rounds"
icon_state = "sniper"
caliber = "14.5mm"
ammo_type = /obj/item/ammo_casing/a145
matter = list(MAT_STEEL = 8750)
max_ammo = 7
multiple_sprites = 1
/*
* 7.62mm
*/
/obj/item/ammo_magazine/ammo_box/b762
name = "ammo box (7.62mm)"
desc = "A box of 7.62mm rounds"
icon_state = "rifle"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762
matter = list(MAT_STEEL = 6000)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/hp
name = "ammo box (7.62mm HP)"
desc = "A box of 7.62mm hollow-point rounds"
icon_state = "rifle_hp"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/hp
matter = list(MAT_STEEL = 9000)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/ap
name = "ammo box (7.62mm AP)"
desc = "A box of 7.62mm armor-piercing rounds"
icon_state = "rifle_ap"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/ap
matter = list(MAT_STEEL = 9000)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/practice
name = "ammo box (7.62mm practice)"
desc = "A box of 7.62mm practice rounds"
icon_state = "rifle_p"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/practice
matter = list(MAT_STEEL = 2700)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/hunter
name = "ammo box (7.62mm hunter)"
desc = "A box of 7.62mm hunter rounds"
icon_state = "rifle_hunter"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/hunter
matter = list(MAT_STEEL = 6000)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/surplus
name = "ammo wrap (7.62mm)"
desc = "A paper wrap of 7.62mm rounds"
icon_state = "paper_wrap"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762
matter = list(MAT_STEEL = 1600)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/surplus/blank
name = "ammo wrap (7.62mm blank)"
desc = "A paper wrap of 7.62mm blank rounds"
icon_state = "paper_wrap"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/blank
matter = list(MAT_STEEL = 720)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/surplus/hunter
name = "ammo wrap (7.62mm hunter)"
desc = "A paper wrap of 7.62mm hunter rounds"
icon_state = "paper_wrap"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/hunter
matter = list(MAT_STEEL = 1600)
max_ammo = 8
multiple_sprites = 1
/*
* 5.45mm
*/
/obj/item/ammo_magazine/ammo_box/b545
name = "ammo box (5.45mm)"
desc = "A box of 5.45mm rounds"
icon_state = "hrifle"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545
matter = list(MAT_STEEL = 5400)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/ap
name = "ammo box (5.45mm AP)"
desc = "A box of 5.45mm armor-piercing rounds"
icon_state = "hrifle-ap"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/ap
matter = list(MAT_STEEL = 8100)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/hp
name = "ammo box (5.45mm HP)"
desc = "A box of 5.45mm hollow-point rounds"
icon_state = "hrifle-hp"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/hp
matter = list(MAT_STEEL = 5400)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/practice
name = "ammo box (5.45mm practice)"
desc = "A box of 5.45mm practice rounds"
icon_state = "hrifle-practice"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/practice
matter = list(MAT_STEEL = 2700)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/hunter
name = "ammo box (5.45mm hunter)"
desc = "A box of 5.45mm hunter rounds"
icon_state = "hrifle-hunter"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/hunter
matter = list(MAT_STEEL = 5400)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/blank
name = "ammo box (5.45mm blank)"
desc = "A box of 5.45mm blank rounds"
icon_state = "hrifle-practice"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/blank
matter = list(MAT_STEEL = 2700)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large
name = "ammo box (5.45mm)"
desc = "A steel box of 5.45mm rounds"
icon_state = "boxhrifle"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545
matter = list(MAT_STEEL = 18000)
max_ammo = 100
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large/ap
name = "ammo box (5.45mm AP)"
desc = "A steel box of 5.45mm armor-piercing rounds"
icon_state = "boxhrifle-ap"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/ap
matter = list(MAT_STEEL = 27000)
max_ammo = 100
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large/hp
name = "ammo box (5.45mm HP)"
desc = "A steel box of 5.45mm hollow-point rounds"
icon_state = "boxhrifle-hp"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/hp
matter = list(MAT_STEEL = 18000)
max_ammo = 100
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large/practice
name = "ammo box (5.45mm practice)"
desc = "A steel box of 5.45mm practice rounds"
icon_state = "boxhrifle-practice"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/practice
matter = list(MAT_STEEL = 9000)
max_ammo = 100
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large/hunter
name = "ammo box (5.45mm hunter)"
desc = "A steel box of 5.45mm hunter rounds"
icon_state = "boxhrifle-hunter"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/hunter
matter = list(MAT_STEEL = 18000)
max_ammo = 100
multiple_sprites = 1
+119 -96
View File
@@ -3,7 +3,7 @@
# 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. Really obsolete. Don't use this.
# 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.
@@ -15,7 +15,7 @@
# Likewise, when creating new rounds, the caliber variable should match whatever
# the name says.
#
# This comment is copied in rounds.dm as well.
# This comment is copied in rounds.dm and ammo_boxes.dm as well.
#
# Also, if a magazine is only meant for a specific gun, include the name
# of the specific gun in the path. Example: m45uzi is only for the Uzi.
@@ -35,12 +35,13 @@
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/pistol/riot
ammo_type = /obj/item/ammo_casing/afoam_dart/riot
// SMG
/obj/item/ammo_magazine/mfoam_dart/smg
name = "\improper Donk-Soft smg magazine"
icon = 'icons/obj/gun_toy.dmi'
@@ -52,13 +53,13 @@
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/mfoam_dart/smg/empty
initial_ammo = 0
/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 /////////
/obj/item/ammo_magazine/s357
@@ -71,6 +72,21 @@
max_ammo = 6
multiple_sprites = 1
/obj/item/ammo_magazine/s357/stun
name = "speedloader (.357 stun)"
icon_state = "T38"
ammo_type = /obj/item/ammo_casing/a357/stun
/obj/item/ammo_magazine/s357/rubber
name = "speedloader (.357 rubber)"
icon_state = "T38"
ammo_type = /obj/item/ammo_casing/a357/rubber
/obj/item/ammo_magazine/s357/flash
name = "speedloader (.357 flash)"
icon_state = "S38"
ammo_type = /obj/item/ammo_casing/a357/flash
///////// .38 /////////
/obj/item/ammo_magazine/s38
@@ -131,6 +147,7 @@
name = "ammunition box (.45 haywire)"
ammo_type = /obj/item/ammo_casing/a45/emp
// Uzi
/obj/item/ammo_magazine/m45uzi
name = "stick magazine (.45)"
icon_state = "uzi45"
@@ -144,14 +161,16 @@
/obj/item/ammo_magazine/m45uzi/empty
initial_ammo = 0
// Tommy Gun
/obj/item/ammo_magazine/m45tommy
name = "Tommy Gun magazine (.45)"
icon_state = "tommy-mag"
icon_state = "tomstick"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/a45
matter = list(MAT_STEEL = 1500)
caliber = ".45"
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/m45tommy/ap
name = "Tommy Gun magazine (.45 AP)"
@@ -162,21 +181,23 @@
/obj/item/ammo_magazine/m45tommydrum
name = "Tommy Gun drum magazine (.45)"
icon_state = "tommy-drum"
icon_state = "tomdrum"
w_class = ITEMSIZE_NORMAL // Bulky ammo doesn't fit in your pockets!
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/a45
matter = list(MAT_STEEL = 3750)
caliber = ".45"
max_ammo = 50
multiple_sprites = 1
/obj/item/ammo_magazine/m45tommydrum/empty
initial_ammo = 0
/obj/item/ammo_magazine/m45tommydrum/ap
name = "Tommy Gun drum magazine (.45 AP)"
ammo_type = /obj/item/ammo_casing/a45/ap
/obj/item/ammo_magazine/m45tommydrum/empty
initial_ammo = 0
// Stripper Clip
/obj/item/ammo_magazine/clip/c45
name = "ammo clip (.45)"
icon_state = "clip_pistol"
@@ -199,13 +220,14 @@
name = "ammo clip (.45 flash)"
ammo_type = /obj/item/ammo_casing/a45/flash
// Speedloader
/obj/item/ammo_magazine/s45
name = "speedloader (.45)"
icon_state = "45s"
ammo_type = /obj/item/ammo_casing/a45
matter = list(MAT_STEEL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
caliber = ".45"
max_ammo = 7
max_ammo = 6
multiple_sprites = 1
/obj/item/ammo_magazine/s45/empty
@@ -238,6 +260,9 @@
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/m5mmcaseless/empty
initial_ammo = 0
/obj/item/ammo_magazine/m5mmcaseless/stun
icon_state = "caseless-mag-alt"
ammo_type = /obj/item/ammo_casing/a5mmcaseless/stun
@@ -246,7 +271,7 @@
/obj/item/ammo_magazine/m9mm
name = "magazine (9mm)"
icon_state = "9x19p_fullsize"
icon_state = "m91"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
matter = list(MAT_STEEL = 600)
@@ -255,15 +280,6 @@
max_ammo = 10
multiple_sprites = 1
/obj/item/ammo_magazine/m9mm/large
desc = "\"FOR LAW ENFORCEMENT/MILITARY USE ONLY\" is clearly etched on the magazine. This is probably illegal for you to have." // Remember, Security is not Law Enforcement, so it's illegal for Security to use as well.
icon_state = "9x19p_highcap"
max_ammo = 17
origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
/obj/item/ammo_magazine/m9mm/large/preban // Sold by traders.
desc = "A large capacity magazine that was built before the SolGov Assault Weapons Ban, so it's legal to own."
/obj/item/ammo_magazine/m9mm/empty
initial_ammo = 0
@@ -279,10 +295,33 @@
name = "magazine (9mm practice)"
ammo_type = /obj/item/ammo_casing/a9mm/practice
// Extended
/obj/item/ammo_magazine/m9mm/large
name = "extended magazine (9mm)"
desc = "\"FOR LAW ENFORCEMENT/MILITARY USE ONLY\" is clearly etched on the magazine. This is probably illegal for you to have." // Remember, Security is not Law Enforcement, so it's illegal for Security to use as well.
icon_state = "m93"
origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
mag_type = MAGAZINE
matter = list(MAT_STEEL = 1000)
caliber = "9mm"
ammo_type = /obj/item/ammo_casing/a9mm
max_ammo = 17
multiple_sprites = 1
/obj/item/ammo_magazine/m9mm/large/empty
initial_ammo = 0
/obj/item/ammo_magazine/m9mm/large/preban // Sold by traders.
desc = "A large capacity magazine that was built before the SolGov Assault Weapons Ban, so it's legal to own."
/obj/item/ammo_magazine/m9mm/large/preban/hp // Hollow Point version
name = "magazine (9mm hollow-point)"
ammo_type = /obj/item/ammo_casing/a9mm/hp
// Compact
/obj/item/ammo_magazine/m9mm/compact
name = "compact magazine (9mm)"
icon_state = "9x19p"
icon_state = "m92"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
matter = list(MAT_STEEL = 480)
@@ -337,6 +376,7 @@
ammo_type = /obj/item/ammo_casing/a9mm/ap
matter = list(MAT_STEEL = 1000, MAT_PLASTEEL = 2000)
// P90
/obj/item/ammo_magazine/m9mmp90
name = "large capacity top mounted magazine (9mm armor-piercing)"
icon_state = "p90"
@@ -350,6 +390,7 @@
/obj/item/ammo_magazine/m9mmp90/empty
initial_ammo = 0
// Stripper Clip
/obj/item/ammo_magazine/clip/c9mm
name = "ammo clip (9mm)"
icon_state = "clip_pistol"
@@ -372,6 +413,7 @@
name = "ammo clip (.45 flash)"
ammo_type = /obj/item/ammo_casing/a9mm/flash
// Advanced SMG
/obj/item/ammo_magazine/m9mmAdvanced
desc = "A very high capacity double stack magazine made specially for the Advanced SMG. Filled with 21 9mm bullets."
icon_state = "S9mm"
@@ -408,20 +450,6 @@
/obj/item/ammo_magazine/m10mm/empty
initial_ammo = 0
/obj/item/ammo_magazine/clip/c10mm
name = "ammo clip (10mm)"
icon_state = "clip_pistol"
desc = "A stripper clip for reloading 5mm rounds into magazines."
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm
matter = list(MAT_STEEL = 675) // metal costs are very roughly based around one 10mm casing = 75 metal
max_ammo = 9
multiple_sprites = 1
/obj/item/ammo_magazine/box/emp/b10
name = "ammunition box (10mm haywire)"
ammo_type = /obj/item/ammo_casing/a10mm/emp
///////// 5.45mm /////////
/obj/item/ammo_magazine/m545
@@ -435,41 +463,43 @@
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/m545/ext
name = "extended magazine (5.45mm)"
matter = list(MAT_STEEL = 2700)
max_ammo = 30
/obj/item/ammo_magazine/m545/empty
initial_ammo = 0
/obj/item/ammo_magazine/m545/ext/empty
initial_ammo = 0
/obj/item/ammo_magazine/m545/practice
name = "magazine (5.45mm practice)"
ammo_type = /obj/item/ammo_casing/a545/practice
/obj/item/ammo_magazine/m545/practice/ext
name = "extended magazine (5.45mm practice)"
max_ammo = 30
/obj/item/ammo_magazine/m545/ap
name = "magazine (5.45mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a545/ap
/obj/item/ammo_magazine/m545/ap/ext
name = "extended magazine (5.45mm armor-piercing)"
max_ammo = 30
/obj/item/ammo_magazine/m545/hunter
name = "magazine (5.45mm hunting)"
ammo_type = /obj/item/ammo_casing/a545/hunter
// Extended
/obj/item/ammo_magazine/m545/ext
name = "extended magazine (5.45mm)"
matter = list(MAT_STEEL = 2700)
max_ammo = 30
/obj/item/ammo_magazine/m545/ext/empty
initial_ammo = 0
/obj/item/ammo_magazine/m545/practice/ext
name = "extended magazine (5.45mm practice)"
max_ammo = 30
/obj/item/ammo_magazine/m545/ap/ext
name = "extended magazine (5.45mm armor-piercing)"
max_ammo = 30
/obj/item/ammo_magazine/m545/hunter/ext
name = "extended magazine (5.45mm hunting)"
max_ammo = 30
// Reduced
/obj/item/ammo_magazine/m545/small
name = "reduced magazine (5.45mm)"
icon_state = "m545-small"
@@ -491,6 +521,7 @@
name = "magazine (5.45mm hunting)"
ammo_type = /obj/item/ammo_casing/a545/hunter
// Stripper Clip
/obj/item/ammo_magazine/clip/c545
name = "ammo clip (5.45mm)"
icon_state = "clip_rifle"
@@ -512,6 +543,7 @@
name = "rifle clip (5.45mm practice)"
ammo_type = /obj/item/ammo_casing/a545
// SAW
/obj/item/ammo_magazine/m545saw
name = "magazine box (5.45mm)"
icon_state = "a545"
@@ -524,6 +556,9 @@
max_ammo = 50
multiple_sprites = 1
/obj/item/ammo_magazine/m545saw/empty
initial_ammo = 0
/obj/item/ammo_magazine/m545saw/ap
name = "magazine box (5.45mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a545/ap
@@ -532,9 +567,6 @@
name = "magazine box (5.45mm hunting)"
ammo_type = /obj/item/ammo_casing/a545/hunter
/obj/item/ammo_magazine/m545saw/empty
initial_ammo = 0
///////// .44 Magnum /////////
/obj/item/ammo_magazine/m44
@@ -551,6 +583,7 @@
/obj/item/ammo_magazine/m44/empty
initial_ammo = 0
// Stripper Clip
/obj/item/ammo_magazine/clip/c44
name = "ammo clip (.44)"
icon_state = "clip_pistol"
@@ -561,6 +594,7 @@
max_ammo = 9
multiple_sprites = 1
// Speedloader
/obj/item/ammo_magazine/s44
name = "speedloader (.44)"
icon_state = "44"
@@ -595,33 +629,31 @@
max_ammo = 10
multiple_sprites = 1
/obj/item/ammo_magazine/m762/empty
initial_ammo = 0
/obj/item/ammo_magazine/m762/ap
name = "magazine (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
/obj/item/ammo_magazine/m762/empty
// Extended
/obj/item/ammo_magazine/m762/ext
name = "extended magazine (7.62mm)"
icon_state = "m762"
matter = list(MAT_STEEL = 4000)
max_ammo = 20
/obj/item/ammo_magazine/m762/ext/empty
initial_ammo = 0
/obj/item/ammo_magazine/m762m // Intentionally not a subtype of m762 because it's supposed to be incompatible with the Z8 Bulldog rifle.
name = "magazine (7.62mm)"
icon_state = "m762"
mag_type = MAGAZINE
caliber = "7.62mm"
matter = list(MAT_STEEL = 4000)
ammo_type = /obj/item/ammo_casing/a762
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/m762m/ap
/obj/item/ammo_magazine/m762/ext/ap
name = "magazine (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
/obj/item/ammo_magazine/m762m/empty
initial_ammo = 0
/obj/item/ammo_magazine/m762garand
name = "garand clip (7.62mm)" // The clip goes into the magazine, hence the name. I'm very sure this is correct.
icon_state = "gclip"
// Enbloc
/obj/item/ammo_magazine/m762enbloc
name = "enbloc (7.62mm)"
icon_state = "enbloc"
mag_type = MAGAZINE
caliber = "7.62mm"
matter = list(MAT_STEEL = 1600)
@@ -629,13 +661,14 @@
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/m762garand/ap
/obj/item/ammo_magazine/m762enbloc/ap
name = "garand clip (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
/obj/item/ammo_magazine/m762/empty
/obj/item/ammo_magazine/m762enbloc/empty
initial_ammo = 0
// Stripper Clip
/obj/item/ammo_magazine/clip/c762
name = "ammo clip (7.62mm)"
icon_state = "clip_rifle"
@@ -657,6 +690,7 @@
name = "rifle clip (7.62mm hunting)"
ammo_type = /obj/item/ammo_casing/a762/hunter
// SVD
/obj/item/ammo_magazine/m762svd
name = "\improper SVD magazine (7.62mm)"
icon_state = "SVD"
@@ -667,13 +701,13 @@
max_ammo = 10
multiple_sprites = 1
/obj/item/ammo_magazine/m762svd/empty
initial_ammo = 0
/obj/item/ammo_magazine/m762svd/ap
name = "\improper SVD magazine (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
/obj/item/ammo_magazine/m762svd/empty
initial_ammo = 0
///////// 12g /////////
/obj/item/ammo_magazine/m12gdrum
@@ -686,6 +720,9 @@
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/m12gdrum/empty
initial_ammo = 0
/obj/item/ammo_magazine/m12gdrum/beanbag
name = "magazine (12 gauge beanbag)"
ammo_type = /obj/item/ammo_casing/a12g/beanbag
@@ -698,9 +735,7 @@
name = "magazine (12 gauge flash)"
ammo_type = /obj/item/ammo_casing/a12g/flash
/obj/item/ammo_magazine/m12gdrum/empty
initial_ammo = 0
// Clip
/obj/item/ammo_magazine/clip/c12g
name = "ammo clip (12g slug)"
icon_state = "12gclipslug" // Still a placeholder sprite. Feel free to make a better one.
@@ -738,15 +773,3 @@
/obj/item/ammo_magazine/m75/empty
initial_ammo = 0
///////// Misc. /////////
/obj/item/ammo_magazine/caps
name = "speedloader (caps)"
icon_state = "T38"
caliber = "caps"
color = "#FF0000"
ammo_type = /obj/item/ammo_casing/cap
matter = list(MAT_STEEL = 600)
max_ammo = 7
multiple_sprites = 1
@@ -1,9 +0,0 @@
/obj/item/ammo_magazine/m9mm/large/preban/hp // Hollow Point Version
name = "magazine (9mm hollow-point)"
ammo_type = /obj/item/ammo_casing/a9mm/hp
/obj/item/weapon/magnetic_ammo/pistol/khi
name = "flechette magazine (small, khi)"
desc = "A magazine containing smaller carbyne flechettes, intended for a pistol."
icon_state = "caseless-mag-short-alt"
remaining = 12
@@ -17,3 +17,9 @@
name = "flechette magazine (small)"
desc = "A magazine containing smaller steel flechettes, intended for a pistol."
icon_state = "caseless-mag-short"
/obj/item/weapon/magnetic_ammo/pistol/khi
name = "flechette magazine (small, khi)"
desc = "A magazine containing smaller carbyne flechettes, intended for a pistol."
icon_state = "caseless-mag-short-alt"
remaining = 12
@@ -222,6 +222,18 @@
projectile_type = /obj/item/projectile/bullet/pistol/medium
matter = list(MAT_STEEL = 75)
/obj/item/ammo_casing/a10mm/practice
desc = "A 10mm practice bullet casing."
icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/practice
matter = list(MAT_STEEL = 60)
/obj/item/ammo_casing/a10mm/rubber
desc = "A 10mm rubber bullet casing."
projectile_type = /obj/item/projectile/bullet/pistol/rubber
icon_state = "r-casing"
matter = list(MAT_STEEL = 60)
/obj/item/ammo_casing/a10mm/emp
name = "10mm haywire round"
desc = "A 10mm bullet casing fitted with a single-use ion pulse generator."
@@ -220,7 +220,7 @@
set src in range(0)
dropnoms_active = !dropnoms_active
to_chat(user,"<span class = 'info'>You switch \the [src]'s spatial rearrangement [dropnoms_active ? "on" : "off"]. (Telenoms [dropnoms_active ? "enabled" : "dsiabled"])</span>")
to_chat(user,"<span class = 'info'>You switch \the [src]'s spatial rearrangement [dropnoms_active ? "on" : "off"]. (Telenoms [dropnoms_active ? "enabled" : "disabled"])</span>")
/obj/item/weapon/bluespace_harpoon/update_icon()
if(transforming)
@@ -127,35 +127,6 @@
cut_overlays()
update_mode()
/////////////////////////////////////////////////////
//////////////////// Custom Ammo ////////////////////
/////////////////////////////////////////////////////
//---------------- Beams ----------------
/obj/item/projectile/beam/eluger
name = "laser beam"
icon_state = "xray"
light_color = "#00FF00"
muzzle_type = /obj/effect/projectile/muzzle/xray
tracer_type = /obj/effect/projectile/tracer/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/imperial
name = "laser beam"
fire_sound = 'sound/weapons/mandalorian.ogg'
icon_state = "darkb"
light_color = "#8837A3"
muzzle_type = /obj/effect/projectile/muzzle/darkmatter
tracer_type = /obj/effect/projectile/tracer/darkmatter
impact_type = /obj/effect/projectile/impact/darkmatter
/obj/item/projectile/beam/stun/kin21
name = "kinh21 stun beam"
icon_state = "omnilaser"
light_color = "#0000FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
//Gun Locking Mechanism
/obj/item/weapon/gun/energy/locked
req_access = list(access_armory) //for toggling safety
@@ -415,7 +415,7 @@
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m762
allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m)
allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762/ext)
projectile_type = /obj/item/projectile/bullet/rifle/a762
one_handed_penalty = 45
@@ -429,7 +429,7 @@
..()
if(istype(ammo_magazine,/obj/item/ammo_magazine/m762))
icon_state = "bullpup-small"
else if(istype(ammo_magazine,/obj/item/ammo_magazine/m762m))
else if(istype(ammo_magazine,/obj/item/ammo_magazine/m762/ext))
icon_state = "bullpup"
else
item_state = "bullpup-empty"
@@ -78,7 +78,7 @@
caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
ammo_type = /obj/item/ammo_casing/a45/rubber
max_shells = 7
max_shells = 6
/obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
@@ -12,8 +12,8 @@
slot_flags = SLOT_BACK
//fire_sound = 'sound/weapons/rifleshot.ogg'
load_method = MAGAZINE // ToDo: Make it so MAGAZINE, SPEEDLOADER and SINGLE_CASING can all be used on the same gun.
magazine_type = /obj/item/ammo_magazine/m762garand
allowed_magazines = list(/obj/item/ammo_magazine/m762garand)
magazine_type = /obj/item/ammo_magazine/m762enbloc
allowed_magazines = list(/obj/item/ammo_magazine/m762enbloc)
auto_eject = 1
auto_eject_sound = 'sound/weapons/garand_ping.ogg'
+114 -3
View File
@@ -37,6 +37,14 @@
icon_state = "laser"
damage = 15
/obj/item/projectile/beam/weaklaser/blue
icon_state = "bluelaser"
light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
/obj/item/projectile/beam/smalllaser
damage = 25
@@ -44,7 +52,7 @@
damage = 30
armor_penetration = 10
/obj/item/projectile/beam/midlaser
damage = 40
armor_penetration = 10
@@ -226,7 +234,7 @@
fire_sound = 'sound/weapons/Taser.ogg'
nodamage = 1
taser_effect = 1
agony = 40
agony = 35
damage_type = HALLOSS
light_color = "#FFFFFF"
hitsound = 'sound/weapons/zapbang.ogg'
@@ -264,6 +272,34 @@
if(A.cell)
A.cell.give(drainamt * 2)
/obj/item/projectile/beam/stun/kin21
name = "kinh21 stun beam"
icon_state = "omnilaser"
light_color = "#0000FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/stun/blue
icon_state = "bluelaser"
light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
/obj/item/projectile/beam/disable
name = "disabler beam"
icon_state = "omnilaser"
nodamage = 1
taser_effect = 1
agony = 100 //One shot stuns for the time being until adjustments are fully made.
damage_type = HALLOSS
light_color = "#00CECE"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/shock
name = "shock beam"
icon_state = "lightning"
@@ -282,11 +318,26 @@
damage = 5
agony = 10
/obj/item/projectile/beam/eluger
name = "laser beam"
icon_state = "xray"
light_color = "#00FF00"
muzzle_type = /obj/effect/projectile/muzzle/xray
tracer_type = /obj/effect/projectile/tracer/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/imperial
name = "laser beam"
fire_sound = 'sound/weapons/mandalorian.ogg'
icon_state = "darkb"
light_color = "#8837A3"
muzzle_type = /obj/effect/projectile/muzzle/darkmatter
tracer_type = /obj/effect/projectile/tracer/darkmatter
impact_type = /obj/effect/projectile/impact/darkmatter
//
// Projectile Beam Definitions
//
/obj/item/projectile/beam/pointdefense
name = "point defense salvo"
icon_state = "laser"
@@ -300,3 +351,63 @@
muzzle_type = /obj/effect/projectile/muzzle/pointdefense
tracer_type = /obj/effect/projectile/tracer/pointdefense
impact_type = /obj/effect/projectile/impact/pointdefense
//
// Energy Net
//
/obj/item/projectile/beam/energy_net
name = "energy net projection"
icon_state = "xray"
nodamage = 1
agony = 5
damage_type = HALLOSS
light_color = "#00CC33"
muzzle_type = /obj/effect/projectile/muzzle/xray
tracer_type = /obj/effect/projectile/tracer/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/energy_net/on_hit(var/atom/netted)
do_net(netted)
..()
/obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M)
var/obj/item/weapon/energy_net/net = new (get_turf(M))
net.throw_impact(M)
//
// Healing Beam
//
/obj/item/projectile/beam/medigun
name = "healing beam"
icon_state = "healbeam"
damage = 0 //stops it damaging walls
nodamage = TRUE
no_attack_log = TRUE
damage_type = BURN
check_armour = "laser"
light_color = "#80F5FF"
combustion = FALSE
muzzle_type = /obj/effect/projectile/muzzle/medigun
tracer_type = /obj/effect/projectile/tracer/medigun
impact_type = /obj/effect/projectile/impact/medigun
/obj/item/projectile/beam/medigun/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/M = target
if(M.health < M.maxHealth)
var/obj/effect/overlay/pulse = new /obj/effect/overlay(get_turf(M))
pulse.icon = 'icons/effects/effects.dmi'
pulse.icon_state = "heal"
pulse.name = "heal"
pulse.anchored = TRUE
spawn(20)
qdel(pulse)
to_chat(target, "<span class='notice'>As the beam strikes you, your injuries close up!</span>")
M.adjustBruteLoss(-15)
M.adjustFireLoss(-15)
M.adjustToxLoss(-5)
M.adjustOxyLoss(-5)
return 1
@@ -1,85 +0,0 @@
/obj/item/projectile/beam/disable
name = "disabler beam"
icon_state = "omnilaser"
nodamage = 1
taser_effect = 1
agony = 100 //One shot stuns for the time being until adjustments are fully made.
damage_type = HALLOSS
light_color = "#00CECE"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/stun
agony = 35
/obj/item/projectile/beam/energy_net
name = "energy net projection"
icon_state = "xray"
nodamage = 1
agony = 5
damage_type = HALLOSS
light_color = "#00CC33"
muzzle_type = /obj/effect/projectile/muzzle/xray
tracer_type = /obj/effect/projectile/tracer/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/energy_net/on_hit(var/atom/netted)
do_net(netted)
..()
/obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M)
var/obj/item/weapon/energy_net/net = new (get_turf(M))
net.throw_impact(M)
/obj/item/projectile/beam/stun/blue
icon_state = "bluelaser"
light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
/obj/item/projectile/beam/weaklaser/blue
icon_state = "bluelaser"
light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
/obj/item/projectile/beam/medigun
name = "healing beam"
icon_state = "healbeam"
damage = 0 //stops it damaging walls
nodamage = TRUE
no_attack_log = TRUE
damage_type = BURN
check_armour = "laser"
light_color = "#80F5FF"
combustion = FALSE
muzzle_type = /obj/effect/projectile/muzzle/medigun
tracer_type = /obj/effect/projectile/tracer/medigun
impact_type = /obj/effect/projectile/impact/medigun
/obj/item/projectile/beam/medigun/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/M = target
if(M.health < M.maxHealth)
var/obj/effect/overlay/pulse = new /obj/effect/overlay(get_turf(M))
pulse.icon = 'icons/effects/effects.dmi'
pulse.icon_state = "heal"
pulse.name = "heal"
pulse.anchored = TRUE
spawn(20)
qdel(pulse)
to_chat(target, "<span class='notice'>As the beam strikes you, your injuries close up!</span>")
M.adjustBruteLoss(-15)
M.adjustFireLoss(-15)
M.adjustToxLoss(-5)
M.adjustOxyLoss(-5)
return 1
@@ -1,29 +0,0 @@
/obj/item/projectile/bullet/pistol/rubber/strong //"rubber" bullets for revolvers and matebas
damage = 10
agony = 60
embed_chance = 0
sharp = FALSE
check_armour = "melee"
/obj/item/projectile/energy/flash/strong
name = "chemical shell"
icon_state = "bullet"
damage = 10
range = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
flash_strength = 15
brightness = 15
/obj/item/projectile/energy/electrode/stunshot/strong
name = "stunshot"
icon_state = "bullet"
damage = 10
taser_effect = 1
agony = 100
/obj/item/projectile/bullet/magnetic/flechette/small/khi
name = "small carbyne flechette"
icon_state = "flechette"
fire_sound = 'sound/weapons/rapidslice.ogg'
damage = 18
armor_penetration = 100
penetrating = 10
@@ -87,6 +87,13 @@
damage = 5
agony = 80
/obj/item/projectile/energy/electrode/stunshot/strong
name = "stunshot"
icon_state = "bullet"
damage = 10
taser_effect = 1
agony = 100
/obj/item/projectile/energy/declone
name = "declone"
icon_state = "declone"
@@ -136,6 +143,19 @@
name = "largebolt"
damage = 20
/obj/item/projectile/energy/bow
name = "engergy bolt"
icon_state = "cbbolt"
damage = 20
/obj/item/projectile/energy/bow/heavy
damage = 30
icon_state = "cbbolt"
/obj/item/projectile/energy/bow/stun
name = "stun bolt"
agony = 30
/obj/item/projectile/energy/acid //Slightly up-gunned (Read: The thing does agony and checks bio resist) variant of the simple alien mob's projectile, for queens and sentinels.
name = "acidic spit"
icon_state = "neurotoxin"
@@ -260,3 +280,23 @@
range = 10
damage = 15
SA_bonus_damage = 60 // 75 total on animals
/obj/item/projectile/energy/electrode/strong
agony = 70
/obj/item/projectile/energy
flash_strength = 10
/obj/item/projectile/energy/flash
flash_range = 1
/obj/item/projectile/energy/flash/strong
name = "chemical shell"
icon_state = "bullet"
damage = 10
range = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
flash_strength = 15
brightness = 15
/obj/item/projectile/energy/flash/flare
flash_range = 2
@@ -1,25 +0,0 @@
/obj/item/projectile/energy/electrode/strong
agony = 70
/obj/item/projectile/energy
flash_strength = 10
/obj/item/projectile/energy/flash
flash_range = 1
/obj/item/projectile/energy/flash/flare
flash_range = 2
/obj/item/projectile/energy/bow
name = "engergy bolt"
icon_state = "cbbolt"
damage = 20
/obj/item/projectile/energy/bow/heavy
damage = 30
icon_state = "cbbolt"
/obj/item/projectile/energy/bow/stun
name = "stun bolt"
agony = 30
@@ -30,6 +30,14 @@
damage = 12
armor_penetration = 100
/obj/item/projectile/bullet/magnetic/flechette/small/khi
name = "small carbyne flechette"
icon_state = "flechette"
fire_sound = 'sound/weapons/rapidslice.ogg'
damage = 18
armor_penetration = 100
penetrating = 10
/obj/item/projectile/bullet/magnetic/flechette/hunting
name = "shredder slug"
armor_penetration = 30
@@ -180,4 +188,4 @@
explosion(A, -1, -1, 1, 3)
return ..()
else
..()
..()
@@ -67,6 +67,7 @@
id = "cookingoilpeanut"
result = "cookingoil"
required_reagents = list("peanutoil" = 10)
inhibitors = list("sugar" = 1, "sodiumchloride" = 1)
catalysts = list("enzyme" = 5)
result_amount = 10
+2 -2
View File
@@ -112,7 +112,7 @@
id = "stunshell"
req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
materials = list(MAT_STEEL = 4000)
build_path = /obj/item/weapon/storage/box/stunshells
build_path = /obj/item/ammo_magazine/ammo_box/b12g/stunshell
sort_string = "MABBB"
/datum/design/item/weapon/ballistic/ammo/empshell
@@ -121,7 +121,7 @@
id = "empshell"
req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 3)
materials = list(MAT_STEEL = 4000, MAT_URANIUM = 1000)
build_path = /obj/item/weapon/storage/box/empshells
build_path = /obj/item/ammo_magazine/ammo_box/b12g/emp
sort_string = "MABBC"
// Phase weapons
+5 -1
View File
@@ -161,7 +161,11 @@ GLOBAL_LIST_BOILERPLATE(papers_dockingcode, /obj/item/weapon/paper/dockingcodes)
/obj/item/weapon/paper/dockingcodes/proc/populate_info()
var/dockingcodes = null
var/z_to_check = codes_from_z ? codes_from_z : z
var/turf/T = get_turf(src)
var/our_z
if(T)
our_z = T.z
var/z_to_check = codes_from_z ? codes_from_z : our_z
if(using_map.use_overmap)
var/obj/effect/overmap/visitable/location = get_overmap_sector(z_to_check)
if(location && location.docking_codes)
+6 -2
View File
@@ -14,6 +14,7 @@
var/absorbed = FALSE // If a mob is absorbed into another
var/list/temp_language_sources = list() //VOREStation Addition - Absorbs add languages to the pred
var/list/temp_languages = list() //VOREStation Addition - Absorbs add languages to the pred
var/prey_controlled = FALSE //VOREStation Addition
var/weight = 137 // Weight for mobs for weightgain system
var/weight_gain = 1 // How fast you gain weight
var/weight_loss = 0.5 // How fast you lose weight
@@ -895,12 +896,15 @@
/mob/living/examine(mob/user, infix, suffix)
. = ..()
if(showvoreprefs)
. += "<span class='deptradio'><a href='?src=\ref[src];vore_prefs=1'>\[Mechanical Vore Preferences\]</a></span>"
if(ooc_notes)
. += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>"
. += "<span class='deptradio'><a href='?src=\ref[src];vore_prefs=1'>\[Mechanical Vore Preferences\]</a></span>"
/mob/living/Topic(href, href_list) //Can't find any instances of Topic() being overridden by /mob/living in polaris' base code, even though /mob/living/carbon/human's Topic() has a ..() call
if(href_list["vore_prefs"])
display_voreprefs(usr)
if(href_list["ooc_notes"])
src.Examine_OOC()
return ..()
/mob/living/proc/display_voreprefs(mob/user) //Called by Topic() calls on instances of /mob/living (and subtypes) containing vore_prefs as an argument
+40 -15
View File
@@ -1,14 +1,13 @@
//
// Size Gun
//
/obj/item/weapon/gun/energy/sizegun
name = "size gun" //I have no idea why this was called shrink ray when this increased and decreased size.
desc = "A highly advanced ray gun with a knob on the side to adjust the size you desire. Warning: Do not insert into mouth."
icon = 'icons/obj/gun_vr.dmi'
icon_override = 'icons/obj/gun_vr.dmi'
icon_state = "sizegun"
item_state = "sizegun"
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi')
fire_sound = 'sound/weapons/wave.ogg'
charge_cost = 240
projectile_type = /obj/item/projectile/beam/sizelaser
@@ -82,20 +81,39 @@
/obj/item/weapon/gun/energy/sizegun/admin
name = "modified size gun"
desc = "An older model sizegun, modified to be without limits on minimum/maximum size, and have an unlimited charge. Time to show 'em that size does matter."
description_fluff = "A standard size gun that has been modified with \
a distabilized bluespace element that has allowed the gun to break the \
normal laws of physics and create a 'weapon' capable of sizing any \
creature well beyond any conceivable size. Only a handfull of these \
exist in the known universe and they are \
exclusively owned by NanoTrasen for research purposes."
icon_state = "sizegun_admin"
item_state = "sizegun_admin"
charge_cost = 0
projectile_type = /obj/item/projectile/beam/sizelaser/admin
/obj/item/weapon/gun/energy/sizegun/abductor
name = "alien size gun"
icon_state = "sizegun-abductor"
item_state = "laser"
charge_cost = 0
projectile_type = /obj/item/projectile/beam/sizelaser/admin
/datum/category_item/catalogue/anomalous/precursor_a/alien_sizegun
name = "Precursor Alpha Object - Matter Manipulation Ray"
desc = "This appears to be some sort of weapon and if someone were to pull \
the trigger lopcated at the handle of the device it would fire a strong \
laser at whatever it is pointed towards. While the laser certainly looks \
dangerous, it is not, instead it is a powerful size manipulation spectrum \
that is not disimilar to the size guns used by NanoTrasen.\
<br><br>\
It is unknown why the precursors would need such a device, possibly for \
making it easier to transport large specimines. It is hard to tell \
exactly what purpose such a device served the precursors but researchers \
have their theories as they continue to analyse the technology."
value = CATALOGUER_REWARD_MEDIUM
/obj/item/weapon/gun/energy/sizegun/abductor/update_icon(ignore_inhands)
item_state = initial(item_state)
/obj/item/weapon/gun/energy/sizegun/admin/abductor
name = "alien size gun"
desc = "A strange looking ray gun weapon with an adjustor knob on the side. The design is alien, but it bares a striking resemblence to the older model size guns that NT uses for research."
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_sizegun)
icon_state = "sizegun-abductor"
item_state = "sizegun-abductor"
charge_cost = 0
projectile_type = /obj/item/projectile/beam/sizelaser/admin/alien
/obj/item/weapon/gun/energy/sizegun/admin/select_size()
set name = "Select Size"
@@ -108,10 +126,14 @@
size_set_to = clamp((size_select/100), 0, 1000) //eheh
to_chat(usr, "<span class='notice'>You set the size to [size_select]%</span>")
/obj/item/weapon/gun/energy/sizegun/mounted
name = "mounted size gun"
self_recharge = 1
use_external_power = 1
//
// Beams for size gun
//
/obj/item/projectile/beam/sizelaser
name = "size beam"
icon_state = "xray"
@@ -165,7 +187,10 @@
/obj/item/projectile/beam/sizelaser/grow
set_size = 2.0 //200% of current size
/obj/item/weapon/gun/energy/sizegun/mounted
name = "mounted size gun"
self_recharge = 1
use_external_power = 1
/obj/item/projectile/beam/sizelaser/admin/alien
name = "alien size beam"
icon_state = "darkb"
muzzle_type = /obj/effect/projectile/muzzle/darkmatter
tracer_type = /obj/effect/projectile/tracer/darkmatter
impact_type = /obj/effect/projectile/impact/darkmatter
Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 624 KiB

After

Width:  |  Height:  |  Size: 624 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 KiB

After

Width:  |  Height:  |  Size: 500 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Some files were not shown because too many files have changed in this diff Show More