Overhauls and 2/28 sync (#244)
* map tweaks/shuttle engines * helpers and defines * global/onclick * controllers and datums * mapping * game folder * some other stuff * some modules * modules that aren't mobs * some mob stuff * new player stuff * mob living * silicon stuff * simple animal things * carbon/ayylmao * update_icons * carbon/human * sounds and tools * icons and stuff * hippie grinder changes + tgui * kitchen.dmi * compile issues fixed * mapfix * Mapfixes 2.0 * mapedit2.0 * mapmerger pls * Revert "mapedit2.0" This reverts commit 74139a3cacea10df7aafca06c0a10bd3daf3a481. * clean up vore folder + 2 hotfixes * admin ticket refinement * Blob tweaks and LAZYADD * LAZYADD IS LAZY * Magic strings purged * DEFINES NEED HIGHER PRIORITIES * Only a sleepless idiot deals in absolute TRUE|FALSE * u h g * progress bar fix * reverts ticket logs * there's always that one guy * fixes and stuff * 2/27 fixes * game folder stuff * stats * some modules again * clothing stuff gets vg clothing out of the main files * everything not mobs again * mob stuff * maps, tgui, sql stuff * icons * additional fixes and compile errors * don't need this anymore * Oh right this isn't needed anymore * maint bar re-added * that doesn't need to be here * stupid events * wtfeven * probably makes Travis happy * don't care to fix the grinder atm * fixes vending sprites, changes turret * lethal, not lethals * overylays are finicky creatures * lazy fix for bleeding edgy (#252) * map tweaks/shuttle engines * helpers and defines * global/onclick * controllers and datums * mapping * game folder * some other stuff * some modules * modules that aren't mobs * some mob stuff * new player stuff * mob living * silicon stuff * simple animal things * carbon/ayylmao * update_icons * carbon/human * sounds and tools * icons and stuff * hippie grinder changes + tgui * kitchen.dmi * compile issues fixed * mapfix * Mapfixes 2.0 * mapedit2.0 * mapmerger pls * Revert "mapedit2.0" This reverts commit 74139a3cacea10df7aafca06c0a10bd3daf3a481. * clean up vore folder + 2 hotfixes * admin ticket refinement * Blob tweaks and LAZYADD * LAZYADD IS LAZY * Magic strings purged * DEFINES NEED HIGHER PRIORITIES * Only a sleepless idiot deals in absolute TRUE|FALSE * u h g * progress bar fix * reverts ticket logs * there's always that one guy * fixes and stuff * 2/27 fixes * game folder stuff * stats * some modules again * clothing stuff gets vg clothing out of the main files * everything not mobs again * mob stuff * maps, tgui, sql stuff * icons * additional fixes and compile errors * don't need this anymore * Oh right this isn't needed anymore * maint bar re-added * that doesn't need to be here * stupid events * wtfeven * probably makes Travis happy * don't care to fix the grinder atm * fixes vending sprites, changes turret * lethal, not lethals * overylays are finicky creatures
This commit is contained in:
@@ -94,7 +94,7 @@
|
||||
|
||||
/obj/item/weapon/storage/bag/ore/holding //miners, your messiah has arrived
|
||||
name = "mining satchel of holding"
|
||||
desc = "A revolution in convenience, this satchel allows for infinite ore storage. It's been outfitted with anti-malfunction safety measures."
|
||||
desc = "A revolution in convenience, this satchel allows for huge amounts of ore storage. It's been outfitted with anti-malfunction safety measures."
|
||||
storage_slots = INFINITY
|
||||
max_combined_w_class = INFINITY
|
||||
origin_tech = "bluespace=4;materials=3;engineering=3"
|
||||
|
||||
@@ -28,7 +28,17 @@
|
||||
item_state = "syringe_kit"
|
||||
resistance_flags = FLAMMABLE
|
||||
var/foldable = /obj/item/stack/sheet/cardboard
|
||||
var/illustration = "writing"
|
||||
|
||||
/obj/item/weapon/storage/box/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/box/update_icon()
|
||||
. = ..()
|
||||
if(illustration)
|
||||
cut_overlays()
|
||||
add_overlay(image('icons/obj/storage.dmi', "[illustration]"))
|
||||
|
||||
/obj/item/weapon/storage/box/attack_self(mob/user)
|
||||
..()
|
||||
@@ -57,6 +67,26 @@
|
||||
return ..()
|
||||
|
||||
|
||||
//Disk boxes
|
||||
/obj/item/weapon/storage/box/disks
|
||||
name = "diskette box"
|
||||
illustration = "disk_kit"
|
||||
|
||||
/obj/item/weapon/storage/box/disks/Initialize()
|
||||
..()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/weapon/disk/data(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/disks_plantgene
|
||||
name = "plant data disks box"
|
||||
illustration = "disk_kit"
|
||||
|
||||
/obj/item/weapon/storage/box/disks_plantgene/Initialize()
|
||||
..()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/weapon/disk/plantgene(src)
|
||||
|
||||
// Ordinary survival box
|
||||
/obj/item/weapon/storage/box/survival/New()
|
||||
..()
|
||||
@@ -107,7 +137,7 @@
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
name = "box of latex gloves"
|
||||
desc = "Contains sterile latex gloves."
|
||||
icon_state = "latex"
|
||||
illustration = "latex"
|
||||
|
||||
/obj/item/weapon/storage/box/gloves/New()
|
||||
..()
|
||||
@@ -127,7 +157,7 @@
|
||||
/obj/item/weapon/storage/box/syringes
|
||||
name = "box of syringes"
|
||||
desc = "A box full of syringes."
|
||||
icon_state = "syringe"
|
||||
illustration = "syringe"
|
||||
|
||||
/obj/item/weapon/storage/box/syringes/New()
|
||||
..()
|
||||
@@ -137,7 +167,7 @@
|
||||
/obj/item/weapon/storage/box/medipens
|
||||
name = "box of medipens"
|
||||
desc = "A box full of epinephrine MediPens."
|
||||
icon_state = "syringe"
|
||||
illustration = "syringe"
|
||||
|
||||
/obj/item/weapon/storage/box/medipens/New()
|
||||
..()
|
||||
@@ -147,7 +177,7 @@
|
||||
/obj/item/weapon/storage/box/medipens/utility
|
||||
name = "stimpack value kit"
|
||||
desc = "A box with several stimpack medipens for the economical miner."
|
||||
icon_state = "syringe"
|
||||
illustration = "syringe"
|
||||
|
||||
/obj/item/weapon/storage/box/medipens/utility/New()
|
||||
..()
|
||||
@@ -156,7 +186,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/beakers
|
||||
name = "box of beakers"
|
||||
icon_state = "beaker"
|
||||
illustration = "beaker"
|
||||
|
||||
/obj/item/weapon/storage/box/beakers/New()
|
||||
..()
|
||||
@@ -177,7 +207,8 @@
|
||||
/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>"
|
||||
icon_state = "flashbang"
|
||||
icon_state = "secbox"
|
||||
illustration = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/flashbangs/New()
|
||||
..()
|
||||
@@ -187,7 +218,8 @@
|
||||
/obj/item/weapon/storage/box/flashes
|
||||
name = "box of flashbulbs"
|
||||
desc = "<B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
|
||||
icon_state = "flashbang"
|
||||
icon_state = "secbox"
|
||||
illustration = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/flashes/New()
|
||||
..()
|
||||
@@ -197,7 +229,7 @@
|
||||
/obj/item/weapon/storage/box/wall_flash
|
||||
name = "wall-mounted flash kit"
|
||||
desc = "This box contains everything necessary to build a wall-mounted flash. <B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
|
||||
icon_state = "flashbang"
|
||||
illustration = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/wall_flash/New()
|
||||
..()
|
||||
@@ -216,7 +248,7 @@
|
||||
/obj/item/weapon/storage/box/teargas
|
||||
name = "box of tear gas grenades (WARNING)"
|
||||
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness and skin irritation.</B>"
|
||||
icon_state = "flashbang"
|
||||
illustration = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/teargas/New()
|
||||
..()
|
||||
@@ -226,7 +258,7 @@
|
||||
/obj/item/weapon/storage/box/emps
|
||||
name = "box of emp grenades"
|
||||
desc = "A box with 5 emp grenades."
|
||||
icon_state = "flashbang"
|
||||
illustration = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/emps/New()
|
||||
..()
|
||||
@@ -236,7 +268,7 @@
|
||||
/obj/item/weapon/storage/box/trackimp
|
||||
name = "boxed tracking implant kit"
|
||||
desc = "Box full of scum-bag tracking utensils."
|
||||
icon_state = "implant"
|
||||
illustration = "implant"
|
||||
|
||||
/obj/item/weapon/storage/box/trackimp/New()
|
||||
..()
|
||||
@@ -249,7 +281,7 @@
|
||||
/obj/item/weapon/storage/box/minertracker
|
||||
name = "boxed tracking implant kit"
|
||||
desc = "For finding those who have died on the accursed lavaworld."
|
||||
icon_state = "implant"
|
||||
illustration = "implant"
|
||||
|
||||
/obj/item/weapon/storage/box/minertracker/New()
|
||||
..()
|
||||
@@ -262,7 +294,7 @@
|
||||
/obj/item/weapon/storage/box/chemimp
|
||||
name = "boxed chemical implant kit"
|
||||
desc = "Box of stuff used to implant chemicals."
|
||||
icon_state = "implant"
|
||||
illustration = "implant"
|
||||
|
||||
/obj/item/weapon/storage/box/chemimp/New()
|
||||
..()
|
||||
@@ -274,7 +306,7 @@
|
||||
/obj/item/weapon/storage/box/exileimp
|
||||
name = "boxed exile implant kit"
|
||||
desc = "Box of exile implants. It has a picture of a clown being booted through the Gateway."
|
||||
icon_state = "implant"
|
||||
illustration = "implant"
|
||||
|
||||
/obj/item/weapon/storage/box/exileimp/New()
|
||||
..()
|
||||
@@ -282,10 +314,15 @@
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implanter(src)
|
||||
|
||||
/obj/item/weapon/storage/box/bodybags
|
||||
name = "body bags"
|
||||
desc = "The label indicates that it contains body bags."
|
||||
illustration = "bodybags"
|
||||
|
||||
/obj/item/weapon/storage/box/rxglasses
|
||||
name = "box of prescription glasses"
|
||||
desc = "This box contains nerd glasses."
|
||||
icon_state = "glasses"
|
||||
illustration = "glasses"
|
||||
|
||||
/obj/item/weapon/storage/box/rxglasses/New()
|
||||
..()
|
||||
@@ -322,7 +359,7 @@
|
||||
/obj/item/weapon/storage/box/donkpockets
|
||||
name = "box of donk-pockets"
|
||||
desc = "<B>Instructions:</B> <I>Heat in microwave. Product will cool if not eaten within seven minutes.</I>"
|
||||
icon_state = "donk_kit"
|
||||
illustration = "donk_kit"
|
||||
|
||||
/obj/item/weapon/storage/box/donkpockets/New()
|
||||
..()
|
||||
@@ -332,7 +369,6 @@
|
||||
/obj/item/weapon/storage/box/monkeycubes
|
||||
name = "monkey cube box"
|
||||
desc = "Drymate brand monkey cubes. Just add water!"
|
||||
icon = 'icons/obj/food/food.dmi'
|
||||
icon_state = "monkeycubebox"
|
||||
storage_slots = 7
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
|
||||
@@ -345,17 +381,23 @@
|
||||
/obj/item/weapon/storage/box/ids
|
||||
name = "box of spare IDs"
|
||||
desc = "Has so many empty IDs."
|
||||
icon_state = "id"
|
||||
illustration = "id"
|
||||
|
||||
/obj/item/weapon/storage/box/ids/New()
|
||||
..()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/weapon/card/id(src)
|
||||
|
||||
//Some spare PDAs in a box
|
||||
/obj/item/weapon/storage/box/PDAs
|
||||
name = "spare PDAs"
|
||||
desc = "A box of spare PDA microcomputers."
|
||||
illustration = "pda"
|
||||
|
||||
/obj/item/weapon/storage/box/silver_ids
|
||||
name = "box of spare silver IDs"
|
||||
desc = "Shiny IDs for important people."
|
||||
icon_state = "id"
|
||||
illustration = "id"
|
||||
|
||||
/obj/item/weapon/storage/box/silver_ids/New()
|
||||
..()
|
||||
@@ -365,7 +407,7 @@
|
||||
/obj/item/weapon/storage/box/prisoner
|
||||
name = "box of prisoner IDs"
|
||||
desc = "Take away their last shred of dignity, their name."
|
||||
icon_state = "id"
|
||||
illustration = "id"
|
||||
|
||||
/obj/item/weapon/storage/box/prisoner/New()
|
||||
..()
|
||||
@@ -380,7 +422,7 @@
|
||||
/obj/item/weapon/storage/box/seccarts
|
||||
name = "box of PDA security cartridges"
|
||||
desc = "A box full of PDA cartridges used by Security."
|
||||
icon_state = "pda"
|
||||
illustration = "pda"
|
||||
|
||||
/obj/item/weapon/storage/box/seccarts/New()
|
||||
..()
|
||||
@@ -391,7 +433,7 @@
|
||||
/obj/item/weapon/storage/box/firingpins
|
||||
name = "box of standard firing pins"
|
||||
desc = "A box full of standard firing pins, to allow newly-developed firearms to operate."
|
||||
icon_state = "id"
|
||||
illustration = "id"
|
||||
|
||||
/obj/item/weapon/storage/box/firingpins/New()
|
||||
..()
|
||||
@@ -401,7 +443,7 @@
|
||||
/obj/item/weapon/storage/box/lasertagpins
|
||||
name = "box of laser tag firing pins"
|
||||
desc = "A box full of laser tag firing pins, to allow newly-developed firearms to require wearing brightly coloured plastic armor before being able to be used."
|
||||
icon_state = "id"
|
||||
illustration = "id"
|
||||
|
||||
/obj/item/weapon/storage/box/lasertagpins/New()
|
||||
..()
|
||||
@@ -412,7 +454,8 @@
|
||||
/obj/item/weapon/storage/box/handcuffs
|
||||
name = "box of spare handcuffs"
|
||||
desc = "A box full of handcuffs."
|
||||
icon_state = "handcuff"
|
||||
icon_state = "secbox"
|
||||
illustration = "handcuff"
|
||||
|
||||
/obj/item/weapon/storage/box/handcuffs/New()
|
||||
..()
|
||||
@@ -422,7 +465,8 @@
|
||||
/obj/item/weapon/storage/box/zipties
|
||||
name = "box of spare zipties"
|
||||
desc = "A box full of zipties."
|
||||
icon_state = "handcuff"
|
||||
icon_state = "secbox"
|
||||
illustration = "handcuff"
|
||||
|
||||
/obj/item/weapon/storage/box/zipties/New()
|
||||
..()
|
||||
@@ -432,7 +476,8 @@
|
||||
/obj/item/weapon/storage/box/alienhandcuffs
|
||||
name = "box of spare handcuffs"
|
||||
desc = "A box full of handcuffs."
|
||||
icon_state = "alienboxCuffs"
|
||||
icon_state = "alienbox"
|
||||
illustration = "handcuff"
|
||||
|
||||
/obj/item/weapon/storage/box/alienhandcuffs/New()
|
||||
..()
|
||||
@@ -442,7 +487,7 @@
|
||||
/obj/item/weapon/storage/box/fakesyndiesuit
|
||||
name = "boxed space suit and helmet"
|
||||
desc = "A sleek, sturdy box used to hold replica spacesuits."
|
||||
icon_state = "box_of_doom"
|
||||
icon_state = "syndiebox"
|
||||
|
||||
/obj/item/weapon/storage/box/fakesyndiesuit/New()
|
||||
..()
|
||||
@@ -452,7 +497,7 @@
|
||||
/obj/item/weapon/storage/box/mousetraps
|
||||
name = "box of Pest-B-Gon mousetraps"
|
||||
desc = "<span class='alert'>Keep out of reach of children.</span>"
|
||||
icon_state = "mousetraps"
|
||||
illustration = "mousetraps"
|
||||
|
||||
/obj/item/weapon/storage/box/mousetraps/New()
|
||||
..()
|
||||
@@ -462,7 +507,7 @@
|
||||
/obj/item/weapon/storage/box/pillbottles
|
||||
name = "box of pill bottles"
|
||||
desc = "It has pictures of pill bottles on its front."
|
||||
icon_state = "pillbox"
|
||||
illustration = "pillbox"
|
||||
|
||||
/obj/item/weapon/storage/box/pillbottles/New()
|
||||
..()
|
||||
@@ -505,7 +550,7 @@
|
||||
/obj/item/weapon/storage/box/lights
|
||||
name = "box of replacement bulbs"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "light"
|
||||
illustration = "light"
|
||||
desc = "This box is shaped on the inside so that only light tubes and bulbs fit."
|
||||
item_state = "syringe_kit"
|
||||
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
|
||||
@@ -521,7 +566,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/lights/tubes
|
||||
name = "box of replacement tubes"
|
||||
icon_state = "lighttube"
|
||||
illustration = "lighttube"
|
||||
|
||||
/obj/item/weapon/storage/box/lights/tubes/New()
|
||||
..()
|
||||
@@ -530,7 +575,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/lights/mixed
|
||||
name = "box of replacement lights"
|
||||
icon_state = "lightmixed"
|
||||
illustration = "lightmixed"
|
||||
|
||||
/obj/item/weapon/storage/box/lights/mixed/New()
|
||||
..()
|
||||
@@ -552,7 +597,7 @@
|
||||
/obj/item/weapon/storage/box/metalfoam
|
||||
name = "box of metal foam grenades"
|
||||
desc = "To be used to rapidly seal hull breaches."
|
||||
icon_state = "flashbang"
|
||||
illustration = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/metalfoam/New()
|
||||
..()
|
||||
@@ -563,6 +608,7 @@
|
||||
name = "box of hugs"
|
||||
desc = "A special box for sensitive people."
|
||||
icon_state = "hugbox"
|
||||
illustration = "heart"
|
||||
foldable = null
|
||||
|
||||
/obj/item/weapon/storage/box/hug/suicide_act(mob/user)
|
||||
@@ -857,6 +903,7 @@
|
||||
/obj/item/weapon/storage/box/ingredients/New()
|
||||
..()
|
||||
if(item_state)
|
||||
name = "[name] ([item_state])"
|
||||
desc = "A box containing supplementary ingredients for the aspiring chef. This box's theme is '[item_state]'."
|
||||
|
||||
/obj/item/weapon/storage/box/emptysandbags
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
src.l_set = 1
|
||||
else if ((src.code == src.l_code) && (src.l_set == 1))
|
||||
src.locked = 0
|
||||
src.overlays = null
|
||||
cut_overlays()
|
||||
add_overlay(image('icons/obj/storage.dmi', icon_opened))
|
||||
src.code = null
|
||||
else
|
||||
@@ -101,7 +101,7 @@
|
||||
else
|
||||
if ((href_list["type"] == "R") && (!src.l_setshort))
|
||||
src.locked = 1
|
||||
src.overlays = null
|
||||
cut_overlays()
|
||||
src.code = null
|
||||
src.close(usr)
|
||||
else
|
||||
|
||||
@@ -81,12 +81,11 @@
|
||||
|
||||
//Object behaviour on storage dump
|
||||
/obj/item/weapon/storage/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
|
||||
for(var/obj/item/I in src_object)
|
||||
if(user.s_active != src_object)
|
||||
if(I.on_found(user))
|
||||
return
|
||||
if(can_be_inserted(I,0,user))
|
||||
handle_item_insertion(I, TRUE, user)
|
||||
var/list/things = src_object.contents.Copy()
|
||||
var/datum/progressbar/progress = new(user, things.len, src)
|
||||
while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(src, .proc/handle_mass_item_insertion, things, src_object, user, progress)))
|
||||
sleep(1)
|
||||
qdel(progress)
|
||||
orient2hud(user)
|
||||
src_object.orient2hud(user)
|
||||
if(user.s_active) //refresh the HUD to show the transfered contents
|
||||
@@ -94,6 +93,23 @@
|
||||
user.s_active.show_to(user)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/storage/proc/handle_mass_item_insertion(list/things, obj/item/weapon/storage/src_object, mob/user, datum/progressbar/progress)
|
||||
for(var/obj/item/I in things)
|
||||
things -= I
|
||||
if(I.loc != src_object)
|
||||
continue
|
||||
if(user.s_active != src_object)
|
||||
if(I.on_found(user))
|
||||
break
|
||||
if(can_be_inserted(I,0,user))
|
||||
handle_item_insertion(I, TRUE, user)
|
||||
if (TICK_CHECK)
|
||||
progress.update(progress.goal - things.len)
|
||||
return TRUE
|
||||
|
||||
progress.update(progress.goal - things.len)
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/storage/proc/return_inv()
|
||||
var/list/L = list()
|
||||
L += contents
|
||||
@@ -453,8 +469,25 @@
|
||||
|
||||
if((!ishuman(usr) && (loc != usr)) || usr.stat || usr.restrained() ||!usr.canmove)
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
var/list/things = contents.Copy()
|
||||
var/datum/progressbar/progress = new(usr, things.len, T)
|
||||
while (do_after(usr, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
|
||||
sleep(1)
|
||||
qdel(progress)
|
||||
|
||||
do_quick_empty()
|
||||
/obj/item/weapon/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress)
|
||||
for(var/obj/item/I in things)
|
||||
things -= I
|
||||
if (I.loc != src)
|
||||
continue
|
||||
remove_from_storage(I, target)
|
||||
if (TICK_CHECK)
|
||||
progress.update(progress.goal - things.len)
|
||||
return TRUE
|
||||
|
||||
progress.update(progress.goal - things.len)
|
||||
return FALSE
|
||||
|
||||
// Empty all the contents onto the current turf, without checking the user's status.
|
||||
/obj/item/weapon/storage/proc/do_quick_empty()
|
||||
|
||||
@@ -13,6 +13,23 @@
|
||||
origin_tech = "combat=1;engineering=1"
|
||||
attack_verb = list("robusted")
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
var/hinges = "single_hinge"
|
||||
var/old = FALSE
|
||||
|
||||
/obj/item/weapon/storage/toolbox/Initialize()
|
||||
..()
|
||||
if(!old)
|
||||
if(prob(10))
|
||||
hinges = "double_hinge"
|
||||
else if(prob(1))
|
||||
hinges = "triple_hinge"
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/toolbox/update_icon()
|
||||
..()
|
||||
cut_overlays()
|
||||
add_overlay(image('icons/obj/storage.dmi', "[hinges]"))
|
||||
|
||||
|
||||
/obj/item/weapon/storage/toolbox/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] robusts [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -36,7 +53,8 @@
|
||||
|
||||
/obj/item/weapon/storage/toolbox/emergency/old
|
||||
name = "rusty red toolbox"
|
||||
item_state = "toolbox_red_old"
|
||||
icon_state = "toolbox_red_old"
|
||||
old = TRUE
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical
|
||||
name = "mechanical toolbox"
|
||||
@@ -54,7 +72,8 @@
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical/old
|
||||
name = "rusty blue toolbox"
|
||||
item_state = "toolbox_blue_old"
|
||||
icon_state = "toolbox_blue_old"
|
||||
old = TRUE
|
||||
|
||||
/obj/item/weapon/storage/toolbox/electrical
|
||||
name = "electrical toolbox"
|
||||
@@ -151,7 +170,7 @@
|
||||
item_state = "artistic_toolbox"
|
||||
max_combined_w_class = 20
|
||||
storage_slots = 10
|
||||
w_class = 5 //Holds more than a regular toolbox!
|
||||
w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox!
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/New()
|
||||
..()
|
||||
@@ -164,217 +183,4 @@
|
||||
new/obj/item/stack/cable_coil/pink(src)
|
||||
new/obj/item/stack/cable_coil/orange(src)
|
||||
new/obj/item/stack/cable_coil/cyan(src)
|
||||
new/obj/item/stack/cable_coil/white(src)
|
||||
|
||||
#define HIS_GRACE_SATIATED 0 //He hungers not. If bloodthirst is set to this, His Grace is asleep.
|
||||
#define HIS_GRACE_PECKISH 30 //Slightly hungry. Slightly increased damage and nothing else.
|
||||
#define HIS_GRACE_HUNGRY 60 //Getting closer. Increased danage and slight healing. It also starts eating anyone around it if it's left on the ground.
|
||||
#define HIS_GRACE_FAMISHED 90 //Dangerous. Highly increased damage, good healing, and stun resist. It also becomes nodrop at this point.
|
||||
#define HIS_GRACE_STARVING 110 //Incredibly close to breaking loose. Extreme damage and healing, and stun immunity.
|
||||
#define HIS_GRACE_CONSUME_OWNER 120 //You're dead, kiddo. The toolbox consumes its owner at this point and resets to zero.
|
||||
#define HIS_GRACE_FALL_ASLEEP 150 //If it reaches this point, it falls asleep and resets to zero.
|
||||
|
||||
//His Grace is a very special weapon granted only to traitor chaplains.
|
||||
//When awakened through sacrifice, it thirsts for blood and begins ticking a "bloodthirst" counter.
|
||||
//As His Grace grows hungrier, it grants its wielder various benefits.
|
||||
//If the wielder fails to feed His Grace in time, it will devour them.
|
||||
//Leaving His Grace alone for some time will reset its timer and put it to sleep.
|
||||
//Using His Grace effectively is a delicate balancing act of keeping it hungry enough to induce benefits but sated enough to let you live.
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace
|
||||
name = "artistic toolbox"
|
||||
desc = "A toolbox painted bright green. Looking at it makes you feel uneasy."
|
||||
origin_tech = "combat=4;engineering=4;syndicate=2"
|
||||
var/awakened = 0
|
||||
var/bloodthirst = HIS_GRACE_SATIATED
|
||||
var/victims = 0
|
||||
var/list/warning_messages = list("peckish", "hungry", "famished", "starving", "consume") //Messages that have NOT been shown
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/Destroy()
|
||||
for(var/mob/living/L in src)
|
||||
L.forceMove(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/attack_self(mob/living/user)
|
||||
if(!awakened)
|
||||
user << "<span class='notice'>[src] begins to vibrate...</span>"
|
||||
addtimer(CALLBACK(src, .proc/awaken), 50)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/attack(mob/living/M, mob/user)
|
||||
if(awakened && M.stat)
|
||||
consume(M)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/examine(mob/user)
|
||||
..()
|
||||
if(awakened)
|
||||
if(victims)
|
||||
user << "You hear the distant murmuring of [victims] victims to [src]."
|
||||
switch(bloodthirst)
|
||||
if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH)
|
||||
user << "<span class='danger'>[src] isn't very hungry. Not yet.</span>"
|
||||
if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY)
|
||||
user << "<span class='danger'>[src] would like a snack.</span>"
|
||||
if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED)
|
||||
user << "<span class='warning'>[src] is quite hungry now...</span>"
|
||||
if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING)
|
||||
user << "<span class='boldannounce'>[src] is openly salivating at the sight of you. Be careful.</span>"
|
||||
if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER)
|
||||
user << "<span class='boldwarning'>You walk a fine line. [src] is very close to devouring you.</span>"
|
||||
if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP)
|
||||
user << "<span class='boldwarning'>[src] is shaking violently and staring directly at you.</span>"
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of the box after they revive
|
||||
user.forceMove(get_turf(src))
|
||||
user.visible_message("<span class='warning'>[user] scrambles out of [src]!</span>", "<span class='notice'>You climb out of [src]!</span>")
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/process()
|
||||
if(!awakened)
|
||||
return
|
||||
adjust_bloodthirst(1 + victims) //Maybe adjust this?
|
||||
change_phases()
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/master = loc
|
||||
switch(bloodthirst) //Handles benefits outside of stun absorbs, which are in change_phases()
|
||||
if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED)
|
||||
master.adjustBruteLoss(-1)
|
||||
master.adjustFireLoss(-1)
|
||||
master.adjustToxLoss(-0.5)
|
||||
master.adjustOxyLoss(-5)
|
||||
master.adjustCloneLoss(-0.5)
|
||||
if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING)
|
||||
master.adjustBruteLoss(-2)
|
||||
master.adjustFireLoss(-2)
|
||||
master.adjustToxLoss(-1)
|
||||
master.adjustOxyLoss(-10)
|
||||
master.adjustCloneLoss(-1)
|
||||
master.AdjustStunned(-1)
|
||||
master.AdjustWeakened(-1)
|
||||
if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER)
|
||||
master.adjustBruteLoss(-20) //The biggest danger at this point is the toolbox itself
|
||||
master.adjustFireLoss(-20)
|
||||
master.adjustToxLoss(-10)
|
||||
master.setOxyLoss(0)
|
||||
master.adjustCloneLoss(-5)
|
||||
master.add_stun_absorption("his_grace", 15, 1, null, null, "[src] shields them from harm!")
|
||||
if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP)
|
||||
master.visible_message("<span class='boldwarning'>[src] turns on its master!</span>", "<span class='userdanger'>[src] turns on you!</span>")
|
||||
playsound(src, 'sound/effects/tendril_destroyed.ogg', 100, 0)
|
||||
master.Weaken(3)
|
||||
master.adjustBruteLoss(100)
|
||||
playsound(master, 'sound/misc/desceration-03.ogg', 100, )
|
||||
playsound(master, 'sound/effects/splat.ogg', 100, 0)
|
||||
master.emote("scream")
|
||||
consume(master) //Y O U H A V E F A I L E D M E
|
||||
if(HIS_GRACE_FALL_ASLEEP to INFINITY)
|
||||
drowse()
|
||||
else
|
||||
if(bloodthirst >= HIS_GRACE_CONSUME_OWNER)
|
||||
if(bloodthirst >= HIS_GRACE_FALL_ASLEEP)
|
||||
drowse()
|
||||
return
|
||||
for(var/mob/living/L in range(1, src))
|
||||
if(L.loc == src)
|
||||
continue
|
||||
if(!L.stat)
|
||||
L.visible_message("<span class='warning'>[src] lunges at [L]!</span>", "<span class='userdanger'>[src] lunges at you!</span>")
|
||||
playsound(L, 'sound/effects/splat.ogg', 50, 1)
|
||||
playsound(L, 'sound/misc/desceration-01.ogg', 50, 1)
|
||||
L.adjustBruteLoss(force)
|
||||
return //Only one at a tome
|
||||
else
|
||||
consume(L)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/proc/awaken() //Attempts to awaken. This can only occur if organs fill the box, and gives out a global warning.
|
||||
if(awakened)
|
||||
return
|
||||
var/organ_count = 0
|
||||
for(var/obj/item/organ/O in src) //Doesn't have to be any kind, we're not picky
|
||||
organ_count++
|
||||
if(organ_count < 5)
|
||||
if(isliving(loc))
|
||||
loc = get_turf(src)
|
||||
visible_message("<span class='warning'>[src] stops shaking. It needs more organs.</span>")
|
||||
else
|
||||
for(var/obj/item/organ/O in src)
|
||||
qdel(O) //delicious flesh
|
||||
name = "His Grace"
|
||||
desc = "A bloodthirsty artefact created by a profane rite."
|
||||
gender = MALE
|
||||
visible_message("<span class='boldwarning'>[src] begins to rattle. It thirsts.</span>") //rattle me bones capn
|
||||
adjust_bloodthirst(1)
|
||||
awakened = 1
|
||||
send_to_playing_players("<span class='boldannounce'><font size=6>HIS GRACE THIRSTS FOR BLOOD</font></span>")
|
||||
send_to_playing_players('sound/effects/his_grace_awaken.ogg')
|
||||
icon_state = "green_awakened"
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/proc/drowse() //Falls asleep, spitting out all victims and resetting to zero.
|
||||
if(!awakened)
|
||||
return
|
||||
visible_message("<span class='boldwarning'>[src] slowly stops rattling and falls still... but it still lurks in its sleep.</span>")
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
icon_state = initial(icon_state)
|
||||
gender = initial(gender)
|
||||
awakened = 0
|
||||
victims = 0
|
||||
warning_messages = initial(warning_messages)
|
||||
adjust_bloodthirst(-bloodthirst)
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
send_to_playing_players("<span class='boldannounce'><font size=6>HIS GRACE HAS RETURNED TO SLUMBER</font></span>")
|
||||
send_to_playing_players('sound/effects/pope_entry.ogg')
|
||||
for(var/mob/living/L in src)
|
||||
L.forceMove(get_turf(src))
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/proc/adjust_bloodthirst(amt)
|
||||
bloodthirst = min(max(1, bloodthirst + amt), HIS_GRACE_FALL_ASLEEP)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/proc/consume(mob/living/meal)
|
||||
if(!meal)
|
||||
return
|
||||
meal.adjustBruteLoss(200)
|
||||
meal.visible_message("<span class='warning'>[src] pulls [meal] into itself!</span>", "<span class='userdanger'>[src] consumes you!</span>")
|
||||
playsound(meal, 'sound/misc/desceration-02.ogg', 75, 1)
|
||||
playsound(src, 'sound/items/eatfood.ogg', 100, 1)
|
||||
meal.forceMove(src)
|
||||
adjust_bloodthirst(-(bloodthirst - victims)) //Never fully sated, and it starts off higher as it eats
|
||||
victims++
|
||||
|
||||
/obj/item/weapon/storage/toolbox/artistic/his_grace/proc/change_phases()
|
||||
switch(bloodthirst)
|
||||
if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH)
|
||||
force = 15 //Constantly keep its power low if it's this full
|
||||
if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY)
|
||||
if(is_string_in_list("peckish", warning_messages))
|
||||
remove_strings_from_list("peckish", warning_messages)
|
||||
loc.visible_message("<span class='warning'>[src] is feeling snackish.</span>", "<span class='danger'>[src] begins to hunger. Its damage has been increased.</span>")
|
||||
force = 20
|
||||
spawn(400) //To prevent spam
|
||||
if(src)
|
||||
warning_messages += "peckish"
|
||||
if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED)
|
||||
if(is_string_in_list("hungry", warning_messages))
|
||||
remove_strings_from_list("hungry", warning_messages)
|
||||
loc.visible_message("<span class='warning'>[src] is getting hungry. Its power grows.</span>", "<span class='boldannounce'>You feel a sense of hunger come over you. [src]'s damage has increased.</span>")
|
||||
force = 25
|
||||
spawn(400)
|
||||
if(src)
|
||||
warning_messages += "hungry"
|
||||
if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING)
|
||||
if(is_string_in_list("famished", warning_messages))
|
||||
remove_strings_from_list("famished", warning_messages)
|
||||
loc.visible_message("<span class='warning'>[src] is very hungry...</span>", "<span class='boldwarning'>Bloodlust overcomes you. You are now resistant to stuns.</span>")
|
||||
force = 30
|
||||
spawn(400)
|
||||
if(src)
|
||||
warning_messages += "famished"
|
||||
if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER)
|
||||
if(is_string_in_list("starving", warning_messages))
|
||||
remove_strings_from_list("starving", warning_messages)
|
||||
loc.visible_message("<span class='boldwarning'>[src] is starving!</span>", "<span class='userdanger'>[src] is at its full power! Feed it quickly or you will be consumed!</span>")
|
||||
force = 40
|
||||
spawn(400)
|
||||
if(src)
|
||||
warning_messages += "starving"
|
||||
new/obj/item/stack/cable_coil/white(src)
|
||||
@@ -135,7 +135,8 @@
|
||||
/obj/item/weapon/storage/box/syndie_kit
|
||||
name = "box"
|
||||
desc = "A sleek, sturdy box."
|
||||
icon_state = "box_of_doom"
|
||||
icon_state = "syndiebox"
|
||||
illustration = "writing_syndie"
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_freedom
|
||||
name = "boxed freedom implant (with injector)"
|
||||
@@ -310,3 +311,8 @@
|
||||
/obj/item/weapon/storage/box/hug/reverse_revolver/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/ballistic/revolver/reverse(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/mimery/New()
|
||||
..()
|
||||
new /obj/item/weapon/spellbook/oneuse/mimery_blockade(src)
|
||||
new /obj/item/weapon/spellbook/oneuse/mimery_guns(src)
|
||||
Reference in New Issue
Block a user