mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into FixAlienStructureProjDodge
Conflicts: code/game/objects/structures/aliens.dm
This commit is contained in:
@@ -1386,7 +1386,6 @@
|
||||
M.unEquip(I)
|
||||
if(I)
|
||||
I.loc = M.loc
|
||||
I.layer = initial(I.layer)
|
||||
I.dropped(M)
|
||||
|
||||
M.Paralyse(5)
|
||||
@@ -1416,7 +1415,6 @@
|
||||
M.unEquip(I)
|
||||
if(I)
|
||||
I.loc = M.loc
|
||||
I.layer = initial(I.layer)
|
||||
I.dropped(M)
|
||||
|
||||
M.Paralyse(5)
|
||||
@@ -1469,7 +1467,6 @@
|
||||
M.unEquip(I)
|
||||
if(I)
|
||||
I.loc = M.loc
|
||||
I.layer = initial(I.layer)
|
||||
I.dropped(M)
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
if(neighbor.archived_cycle < SSair.times_fired)
|
||||
neighbor.archive()
|
||||
|
||||
neighbor.neighbor_conduct_with_src()
|
||||
neighbor.neighbor_conduct_with_src(src)
|
||||
|
||||
neighbor.consider_superconductivity()
|
||||
|
||||
|
||||
@@ -259,7 +259,9 @@
|
||||
user.visible_message("[user] unwelds the vent.", "<span class='notice'>You unweld the vent.</span>", "<span class='italics'>You hear welding.</span>")
|
||||
welded = 0
|
||||
update_icon()
|
||||
pipe_vision_img = image(src, loc, layer = 20, dir = dir)
|
||||
var/image/I = image(src, loc, dir = dir)
|
||||
I.plane = PLANE_UI_OBJECTS
|
||||
pipe_vision_img = I
|
||||
return 0
|
||||
else
|
||||
return ..()
|
||||
@@ -289,7 +291,9 @@
|
||||
user.visible_message("[user] furiously claws at [src]!", "You manage to clear away the stuff blocking the vent", "You hear loud scraping noises.")
|
||||
welded = 0
|
||||
update_icon()
|
||||
pipe_vision_img = image(src, loc, layer = 20, dir = dir)
|
||||
var/image/I = image(src, loc, dir = dir)
|
||||
I.plane = PLANE_UI_OBJECTS
|
||||
pipe_vision_img = I
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 100, 1)
|
||||
|
||||
|
||||
|
||||
@@ -308,7 +308,9 @@
|
||||
user.visible_message("[user] unwelds the scrubber.", "You unweld the scrubber.", "You hear welding.")
|
||||
welded = 0
|
||||
update_icon()
|
||||
pipe_vision_img = image(src, loc, layer = 20, dir = dir)
|
||||
var/image/I = image(src, loc, dir = dir)
|
||||
I.plane = PLANE_UI_OBJECTS
|
||||
pipe_vision_img = I
|
||||
return 0
|
||||
else
|
||||
return ..()
|
||||
@@ -329,7 +331,9 @@
|
||||
user.visible_message("[user] furiously claws at [src]!", "You manage to clear away the stuff blocking the scrubber.", "You hear loud scraping noises.")
|
||||
welded = 0
|
||||
update_icon()
|
||||
pipe_vision_img = image(src, loc, layer = 20, dir = dir)
|
||||
var/image/I = image(src, loc, dir = dir)
|
||||
I.plane = PLANE_UI_OBJECTS
|
||||
pipe_vision_img = I
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 100, 1)
|
||||
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
air_update_turf() // Update the environment if needed.
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/blob_act()
|
||||
/obj/machinery/portable_atmospherics/canister/blob_act(obj/effect/blob/B)
|
||||
take_damage(100, BRUTE, 0)
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/bullet_act(obj/item/projectile/P)
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
if(rand(0,1))
|
||||
new /obj/item/stack/spacecash/c1000(T)
|
||||
else
|
||||
var/obj/item/weapon/moneybag/M = new(T)
|
||||
var/obj/item/weapon/storage/bag/money/M = new(T)
|
||||
for(var/i in 1 to rand(5,50))
|
||||
new /obj/item/weapon/coin/gold(M)
|
||||
if(14)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
/obj/item/device/export_scanner/examine(user)
|
||||
..()
|
||||
if(!cargo_console)
|
||||
user << "<span class='notice'>You had to link it to supply console for it to work.</span>"
|
||||
user << "<span class='notice'>The [src] is currently not linked to a cargo console.</span>"
|
||||
|
||||
/obj/item/device/export_scanner/afterattack(obj/O, mob/user, proximity)
|
||||
if(!istype(O) || !proximity)
|
||||
@@ -44,4 +44,4 @@
|
||||
exported = TRUE
|
||||
break
|
||||
if(!exported)
|
||||
user << "<span class='notice'>The object is unexportable.</span>"
|
||||
user << "<span class='notice'>The object is unexportable.</span>"
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
message = "of enemy intelligence"
|
||||
var/global/originals_recieved = list()
|
||||
var/global/copies_recieved = list()
|
||||
var/copy_path = null
|
||||
export_types = list(/obj/item/documents/syndicate)
|
||||
|
||||
/datum/export/intel/applies_to(obj/O, contr = 0, emag = 0)
|
||||
@@ -23,6 +24,9 @@
|
||||
return FALSE
|
||||
if((C.copy_type in originals_recieved) || (C.copy_type in copies_recieved))
|
||||
return FALSE
|
||||
if(copy_path && !ispath(C.copy_type, copy_path))
|
||||
return FALSE
|
||||
|
||||
else if(O.type in originals_recieved)
|
||||
return FALSE
|
||||
|
||||
@@ -45,6 +49,7 @@
|
||||
cost = 15000 // Allows double agents to earn some cargo points without failing their objectives.
|
||||
unit_name = "photocopied article"
|
||||
export_types = list(/obj/item/documents/photocopy)
|
||||
copy_path = /obj/item/documents/syndicate
|
||||
|
||||
|
||||
|
||||
@@ -58,6 +63,7 @@
|
||||
cost = 15000
|
||||
unit_name = "photocopied article"
|
||||
export_types = list(/obj/item/documents/photocopy)
|
||||
copy_path = /obj/item/documents/nanotrasen
|
||||
|
||||
// Selling Syndicate docs to Syndicate, why not?
|
||||
/datum/export/intel/syndie/recovered
|
||||
|
||||
+79
-15
@@ -3,7 +3,7 @@
|
||||
var/group = ""
|
||||
var/hidden = FALSE
|
||||
var/contraband = FALSE
|
||||
var/cost = 7 // Minimum cost, or infinite points are possible.
|
||||
var/cost = 700 // Minimum cost, or infinite points are possible.
|
||||
var/access = FALSE
|
||||
var/list/contains = null
|
||||
var/crate_name = "crate"
|
||||
@@ -53,6 +53,12 @@
|
||||
contains = list(/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/item/weapon/tank/internals/emergency_oxygen,
|
||||
/obj/item/weapon/tank/internals/emergency_oxygen,
|
||||
/obj/item/weapon/tank/internals/emergency_oxygen,
|
||||
/obj/item/weapon/tank/internals/air,
|
||||
/obj/item/weapon/tank/internals/air,
|
||||
/obj/item/weapon/tank/internals/air)
|
||||
@@ -105,6 +111,12 @@
|
||||
crate_name = "weed control crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/hydroponics
|
||||
|
||||
/datum/supply_pack/emergency/metalfoam
|
||||
name = "Metal Foam Grenade Crate"
|
||||
cost = 1000
|
||||
contains = list(/obj/item/weapon/storage/box/metalfoam)
|
||||
crate_name = "metal foam grenade crate"
|
||||
|
||||
/datum/supply_pack/emergency/specialops
|
||||
name = "Special Ops Supplies"
|
||||
hidden = TRUE
|
||||
@@ -115,16 +127,16 @@
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/pen/sleepy,
|
||||
/obj/item/weapon/grenade/chem_grenade/incendiary)
|
||||
crate_name = "special ops crate"
|
||||
crate_type = /obj/structure/closet/crate
|
||||
crate_name = "emergency crate"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
|
||||
/datum/supply_pack/emergency/syndicate
|
||||
name = "NULL_ENTRY"
|
||||
hidden = TRUE
|
||||
cost = 14000
|
||||
contains = list(/obj/item/weapon/storage/box/syndicate)
|
||||
crate_name = "crate"
|
||||
crate_type = /obj/structure/closet/crate
|
||||
crate_name = "emergency crate"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
dangerous = TRUE
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
@@ -393,7 +405,7 @@
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/clothing/head/helmet/justice,
|
||||
/obj/item/clothing/mask/gas/sechailer)
|
||||
crate_name = "justice enforcer crate"
|
||||
crate_name = "security clothing crate"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Engineering /////////////////////////////////////
|
||||
@@ -440,7 +452,7 @@
|
||||
|
||||
/datum/supply_pack/engineering/engiequipment
|
||||
name = "Engineering Gear Crate"
|
||||
cost = 1000
|
||||
cost = 1300
|
||||
contains = list(/obj/item/weapon/storage/belt/utility,
|
||||
/obj/item/weapon/storage/belt/utility,
|
||||
/obj/item/weapon/storage/belt/utility,
|
||||
@@ -452,7 +464,9 @@
|
||||
/obj/item/clothing/head/welding,
|
||||
/obj/item/clothing/head/hardhat,
|
||||
/obj/item/clothing/head/hardhat,
|
||||
/obj/item/clothing/head/hardhat)
|
||||
/obj/item/clothing/head/hardhat,
|
||||
/obj/item/clothing/glasses/meson/engine,
|
||||
/obj/item/clothing/glasses/meson/engine)
|
||||
crate_name = "engineering gear crate"
|
||||
|
||||
/datum/supply_pack/engineering/engine/spacesuit
|
||||
@@ -464,10 +478,34 @@
|
||||
/obj/item/clothing/head/helmet/space,
|
||||
/obj/item/clothing/head/helmet/space,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/item/clothing/mask/breath,)
|
||||
/obj/item/clothing/mask/breath)
|
||||
crate_name = "space suit crate"
|
||||
crate_type = /obj/structure/closet/crate/secure
|
||||
|
||||
/datum/supply_pack/engineering/shieldgen
|
||||
name = "Anti-breach Shield Projector Crate"
|
||||
cost = 2500
|
||||
contains = list(/obj/machinery/shieldgen,
|
||||
/obj/machinery/shieldgen)
|
||||
crate_name = "anti-breach shield projector crate"
|
||||
|
||||
/datum/supply_pack/engineering/grounding_rods
|
||||
name = "Grounding Rod Crate"
|
||||
cost = 1700
|
||||
contains = list(/obj/machinery/power/grounding_rod,
|
||||
/obj/machinery/power/grounding_rod,
|
||||
/obj/machinery/power/grounding_rod,
|
||||
/obj/machinery/power/grounding_rod)
|
||||
crate_name = "grounding rod crate"
|
||||
crate_type = /obj/structure/closet/crate/engineering/electrical
|
||||
|
||||
/datum/supply_pack/engineering/pacman
|
||||
name = "P.A.C.M.A.N Generator Crate"
|
||||
cost = 2500
|
||||
contains = list(/obj/machinery/power/port_gen/pacman)
|
||||
crate_name = "PACMAN generator crate"
|
||||
crate_type = /obj/structure/closet/crate/engineering/electrical
|
||||
|
||||
/datum/supply_pack/engineering/solar
|
||||
name = "Solar Panel Crate"
|
||||
cost = 2000
|
||||
@@ -668,6 +706,13 @@
|
||||
contains = list(/obj/machinery/iv_drip)
|
||||
crate_name = "iv drip crate"
|
||||
|
||||
/datum/supply_pack/medical/defibs
|
||||
name = "Defibrillator Crate"
|
||||
cost = 2500
|
||||
contains = list(/obj/item/weapon/defibrillator/loaded,
|
||||
/obj/item/weapon/defibrillator/loaded)
|
||||
crate_name = "defibrillator crate"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Science /////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
@@ -874,7 +919,7 @@
|
||||
contraband = TRUE
|
||||
cost = 5000
|
||||
contains = list(/mob/living/simple_animal/butterfly)
|
||||
crate_name = "butterflies crate"
|
||||
crate_name = "entomology samples crate"
|
||||
|
||||
/datum/supply_pack/organic/critter/butterfly/generate()
|
||||
. = ..()
|
||||
@@ -938,7 +983,7 @@
|
||||
crate_name = "exotic seeds crate"
|
||||
|
||||
/datum/supply_pack/organic/hydroponics/beekeeping_fullkit
|
||||
name = "Beekeeping Starter Kit"
|
||||
name = "Beekeeping Starter Crate"
|
||||
cost = 1500
|
||||
contains = list(/obj/structure/beebox,
|
||||
/obj/item/honey_frame,
|
||||
@@ -947,10 +992,10 @@
|
||||
/obj/item/queen_bee/bought,
|
||||
/obj/item/clothing/head/beekeeper_head,
|
||||
/obj/item/clothing/suit/beekeeper_suit)
|
||||
crate_name = "beekeeping starter kit"
|
||||
crate_name = "beekeeping starter crate"
|
||||
|
||||
/datum/supply_pack/organic/hydroponics/beekeeping_suits
|
||||
name = "2 Beekeeper suits"
|
||||
name = "Beekeeper Suit Crate"
|
||||
cost = 1000
|
||||
contains = list(/obj/item/clothing/head/beekeeper_head,
|
||||
/obj/item/clothing/suit/beekeeper_suit,
|
||||
@@ -1092,9 +1137,28 @@
|
||||
/obj/item/clothing/suit/bluetag,
|
||||
/obj/item/clothing/suit/bluetag,
|
||||
/obj/item/clothing/head/helmet/redtaghelm,
|
||||
/obj/item/clothing/head/helmet/redtaghelm,
|
||||
/obj/item/clothing/head/helmet/redtaghelm,
|
||||
/obj/item/clothing/head/helmet/bluetaghelm,
|
||||
/obj/item/clothing/head/helmet/bluetaghelm,
|
||||
/obj/item/clothing/head/helmet/bluetaghelm)
|
||||
crate_name = "laser tag crate"
|
||||
|
||||
/datum/supply_pack/misc/lasertag/pins
|
||||
name = "Laser Tag Firing Pins Crate"
|
||||
cost = 2000
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/weapon/storage/box/lasertagpins)
|
||||
crate_name = "laser tag crate"
|
||||
|
||||
/datum/supply_pack/misc/clownpin
|
||||
name = "Hilarious Firing Pin Crate"
|
||||
cost = 5000
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/device/firing_pin/clown)
|
||||
// It's /technically/ a toy. For the clown, at least.
|
||||
crate_name = "toy crate"
|
||||
|
||||
/datum/supply_pack/misc/religious_supplies
|
||||
name = "Religious Supplies Crate"
|
||||
cost = 4000 // it costs so much because the Space Church is ran by Space Jews
|
||||
@@ -1114,7 +1178,7 @@
|
||||
/obj/item/weapon/poster/legit,
|
||||
/obj/item/weapon/poster/legit,
|
||||
/obj/item/weapon/poster/legit)
|
||||
crate_name = "Corporate Posters Crate"
|
||||
crate_name = "corporate posters crate"
|
||||
|
||||
/datum/supply_pack/misc/paper
|
||||
name = "Bureaucracy Crate"
|
||||
@@ -1353,4 +1417,4 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/toy/pistol,
|
||||
/obj/item/ammo_box/magazine/toy/pistol,
|
||||
/obj/item/ammo_box/magazine/toy/pistol)
|
||||
crate_name = "foam force pistols crate"
|
||||
crate_name = "foam force crate"
|
||||
|
||||
@@ -154,9 +154,7 @@ BLIND // can't see anything
|
||||
if(adjusted_flags)
|
||||
slot_flags = adjusted_flags
|
||||
user.wear_mask_update(src, toggle_off = mask_adjusted)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
user.update_action_buttons_icon() //when mask is adjusted out, we update all buttons icon so the user's potential internal tank correctly shows as off.
|
||||
|
||||
|
||||
|
||||
@@ -357,8 +355,10 @@ BLIND // can't see anything
|
||||
I.transform *= 0.5 //halve the size so it doesn't overpower the under
|
||||
I.pixel_x += 8
|
||||
I.pixel_y -= 8
|
||||
var/oldlayer = I.layer
|
||||
I.layer = FLOAT_LAYER
|
||||
overlays += I
|
||||
I.layer = oldlayer
|
||||
|
||||
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
@@ -492,7 +492,6 @@ BLIND // can't see anything
|
||||
hastie.transform *= 2
|
||||
hastie.pixel_x -= 8
|
||||
hastie.pixel_y += 8
|
||||
hastie.layer = initial(hastie.layer)
|
||||
overlays = null
|
||||
usr.put_in_hands(hastie)
|
||||
hastie = null
|
||||
|
||||
@@ -62,7 +62,6 @@
|
||||
flags_cover = MASKCOVERSEYES
|
||||
burn_state = FLAMMABLE
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
|
||||
dog_fashion = /datum/dog_fashion/head/clown
|
||||
|
||||
/obj/item/clothing/mask/gas/clown_hat/attack_self(mob/user)
|
||||
@@ -80,8 +79,12 @@
|
||||
|
||||
var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in options
|
||||
|
||||
if(src && choice && !user.stat && in_range(user,src))
|
||||
if(src && choice && !user.incapacitated() && in_range(user,src))
|
||||
icon_state = options[choice]
|
||||
user.update_inv_wear_mask()
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
user << "<span class='notice'>Your Clown Mask has now morphed into [choice], all praise the Honkmother!</span>"
|
||||
return 1
|
||||
|
||||
@@ -105,7 +108,7 @@
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/attack_self(mob/user)
|
||||
cycle_mask(usr)
|
||||
cycle_mask(user)
|
||||
|
||||
/obj/item/clothing/mask/gas/mime/proc/cycle_mask(mob/user)
|
||||
switch(icon_state)
|
||||
@@ -118,6 +121,9 @@
|
||||
if("sexymime")
|
||||
icon_state = "mime"
|
||||
user.update_inv_wear_mask()
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
user << "<span class='notice'>You adjust your mask to portray a different emotion.</span>"
|
||||
return 1
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
//Syndicate hardsuit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi
|
||||
name = "blood-red hardsuit helmet"
|
||||
desc = "A dual-mode advanced helmet designed for work in special operations. It is in travel mode. Property of Gorlex Marauders."
|
||||
desc = "A dual-mode advanced helmet designed for work in special operations. It is in EVA mode. Property of Gorlex Marauders."
|
||||
alt_desc = "A dual-mode advanced helmet designed for work in special operations. It is in combat mode. Property of Gorlex Marauders."
|
||||
icon_state = "hardsuit1-syndi"
|
||||
item_state = "syndie_helm"
|
||||
@@ -221,7 +221,7 @@
|
||||
return
|
||||
on = !on
|
||||
if(on || force)
|
||||
user << "<span class='notice'>You switch your hardsuit to travel mode.</span>"
|
||||
user << "<span class='notice'>You switch your hardsuit to EVA mode, sacrificing speed for space protection.</span>"
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
user.AddLuminosity(brightness_on)
|
||||
@@ -230,7 +230,7 @@
|
||||
flags_inv |= visor_flags_inv
|
||||
cold_protection |= HEAD
|
||||
else
|
||||
user << "<span class='notice'>You switch your hardsuit to combat mode.</span>"
|
||||
user << "<span class='notice'>You switch your hardsuit to combat mode and can now run at full speed.</span>"
|
||||
name += " (combat)"
|
||||
desc = alt_desc
|
||||
user.AddLuminosity(-brightness_on)
|
||||
@@ -272,7 +272,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/syndi
|
||||
name = "blood-red hardsuit"
|
||||
desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders."
|
||||
desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in EVA mode. Property of Gorlex Marauders."
|
||||
alt_desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in combat mode. Property of Gorlex Marauders."
|
||||
icon_state = "hardsuit1-syndi"
|
||||
item_state = "syndie_hardsuit"
|
||||
@@ -290,7 +290,7 @@
|
||||
//Elite Syndie suit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
|
||||
name = "elite syndicate hardsuit helmet"
|
||||
desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in travel mode. Property of Gorlex Marauders."
|
||||
desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in EVA mode. Property of Gorlex Marauders."
|
||||
alt_desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in combat mode. Property of Gorlex Marauders."
|
||||
icon_state = "hardsuit0-syndielite"
|
||||
item_color = "syndielite"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
blueeffect.icon = 'icons/effects/effects.dmi'
|
||||
blueeffect.icon_state = "shieldsparkles"
|
||||
blueeffect.layer = 17
|
||||
blueeffect.plane = PLANE_EFFECTS_UNLIT
|
||||
blueeffect.mouse_opacity = 0
|
||||
M.client.screen += blueeffect
|
||||
sleep(20)
|
||||
|
||||
@@ -635,7 +635,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
|
||||
if(!H.r_store) slots_free += ui_storage2
|
||||
if(slots_free.len)
|
||||
halitem.screen_loc = pick(slots_free)
|
||||
halitem.layer = 50
|
||||
halitem.plane = PLANE_UI_OBJECTS
|
||||
switch(rand(1,6))
|
||||
if(1) //revolver
|
||||
halitem.icon = 'icons/obj/guns/projectile.dmi'
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
var/slice_path // for sliceable food. path of the item resulting from the slicing
|
||||
var/slices_num
|
||||
var/eatverb
|
||||
var/wrapped = 0
|
||||
var/dried_type = null
|
||||
var/dry = 0
|
||||
var/cooked_type = null //for microwave cooking. path of the resulting item after microwaving
|
||||
@@ -65,9 +64,6 @@
|
||||
M << "<span class='notice'>You don't feel like eating any more junk food at the moment.</span>"
|
||||
return 0
|
||||
|
||||
if(wrapped)
|
||||
M << "<span class='warning'>You can't eat wrapped food!</span>"
|
||||
return 0
|
||||
else if(fullness <= 50)
|
||||
M << "<span class='notice'>You hungrily [eatverb] some of \the [src] and gobble it down!</span>"
|
||||
else if(fullness > 50 && fullness < 150)
|
||||
@@ -81,8 +77,6 @@
|
||||
return 0
|
||||
else
|
||||
if(!isbrain(M)) //If you're feeding it to someone else.
|
||||
if(wrapped)
|
||||
return 0
|
||||
if(fullness <= (600 * (1 + M.overeatduration / 1000)))
|
||||
M.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>", \
|
||||
"<span class='userdanger'>[user] attempts to feed [M] [src].</span>")
|
||||
|
||||
@@ -129,30 +129,14 @@
|
||||
desc = "Just add water!"
|
||||
icon_state = "monkeycube"
|
||||
bitesize = 12
|
||||
wrapped = 0
|
||||
list_reagents = list("nutriment" = 2)
|
||||
filling_color = "#CD853F"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user)
|
||||
if(wrapped)
|
||||
Unwrap(user)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
|
||||
visible_message("<span class='notice'>[src] expands!</span>")
|
||||
new /mob/living/carbon/monkey(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user)
|
||||
icon_state = "monkeycube"
|
||||
desc = "Just add water!"
|
||||
user << "<span class='notice'>You unwrap the cube.</span>"
|
||||
wrapped = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
|
||||
desc = "Still wrapped in some paper."
|
||||
icon_state = "monkeycubewrap"
|
||||
wrapped = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/enchiladas
|
||||
name = "enchiladas"
|
||||
desc = "Viva La Mexico!"
|
||||
|
||||
@@ -33,29 +33,10 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
|
||||
name = "chocolate bar"
|
||||
desc = "Such, sweet, fattening food."
|
||||
icon_state = "chocolatebarunwrapped"
|
||||
wrapped = 0
|
||||
icon_state = "chocolatebar"
|
||||
list_reagents = list("nutriment" = 2, "sugar" = 2, "cocoa" = 2)
|
||||
filling_color = "#A0522D"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/attack_self(mob/user)
|
||||
if(wrapped)
|
||||
Unwrap(user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/proc/Unwrap(mob/user)
|
||||
icon_state = "chocolatebarunwrapped"
|
||||
desc = "It won't make you all sticky."
|
||||
user << "<span class='notice'>You remove the foil.</span>"
|
||||
wrapped = 0
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/wrapped
|
||||
desc = "It's wrapped in some foil."
|
||||
icon_state = "chocolatebar"
|
||||
wrapped = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
|
||||
name = "huge mushroom slice"
|
||||
desc = "A slice from a huge mushroom."
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1)
|
||||
grinded -= required_grind
|
||||
for(var/i = 0, i < cube_production, i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src.loc)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc)
|
||||
user << "<span class='notice'>The machine's display flashes that it has [grinded] monkeys worth of material left.</span>"
|
||||
else
|
||||
user << "<span class='danger'>The machine needs at least [required_grind] monkey(s) worth of material to produce a monkey cube. It only has [grinded].</span>"
|
||||
|
||||
@@ -204,6 +204,6 @@
|
||||
emergency_shutdown()
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/holodeck/blob_act()
|
||||
/obj/machinery/computer/holodeck/blob_act(obj/effect/blob/B)
|
||||
emergency_shutdown()
|
||||
..()
|
||||
@@ -15,7 +15,11 @@
|
||||
|
||||
var/datum/plant_gene/target
|
||||
var/operation = ""
|
||||
var/rating = 0 // TODO: add failures, make it useful
|
||||
var/rating = 0
|
||||
var/max_extract_pot = 50
|
||||
// The cap on potency gene extraction.
|
||||
// This number is for T1, each upgraded part adds 5% for a tech level above T1.
|
||||
// At T4, it reaches 95%.
|
||||
|
||||
/obj/machinery/plantgenes/New()
|
||||
..()
|
||||
@@ -24,7 +28,6 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
RefreshParts()
|
||||
|
||||
@@ -32,6 +35,7 @@
|
||||
rating = 0
|
||||
for(var/obj/item/weapon/stock_parts/S in component_parts)
|
||||
rating += S.rating-1
|
||||
max_extract_pot = initial(max_extract_pot) + rating*5
|
||||
|
||||
/obj/machinery/plantgenes/update_icon()
|
||||
..()
|
||||
@@ -90,7 +94,7 @@
|
||||
if(!user)
|
||||
return
|
||||
|
||||
var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600) // Set up the popup browser window
|
||||
var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600)
|
||||
if(!( in_range(src, user) || istype(user, /mob/living/silicon) ))
|
||||
popup.close()
|
||||
return
|
||||
@@ -114,16 +118,18 @@
|
||||
switch(operation)
|
||||
if("remove")
|
||||
dat += "<span class='highlight'>[target.get_name()]</span> gene from \the <span class='highlight'>[seed]</span>?<br>"
|
||||
// dat += "<span class='bad'>Failure may damage or destroy the sample!</span>" // No failures yet. TODO: add failures
|
||||
if("extract")
|
||||
dat += "<span class='highlight'>[target.get_name()]</span> gene from \the <span class='highlight'>[seed]</span>?<br>"
|
||||
dat += "<span class='bad'>The sample will be destroyed in process!</span>"
|
||||
if(istype(target, /datum/plant_gene/core/potency))
|
||||
var/datum/plant_gene/core/gene = target
|
||||
if(gene.value > max_extract_pot)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to [max_extract_pot] potency. "
|
||||
dat += "Target gene will be degraded to [max_extract_pot] potency on extraction."
|
||||
if("replace")
|
||||
dat += "<span class='highlight'>[target.get_name()]</span> gene with <span class='highlight'>[disk.gene.get_name()]</span>?<br>"
|
||||
// dat += "<span class='bad'>Failure may damage or destroy the sample!</span>" // No failures yet. TODO: add failures
|
||||
if("insert")
|
||||
dat += "<span class='highlight'>[disk.gene.get_name()]</span> gene into \the <span class='highlight'>[seed]</span>?<br>"
|
||||
// dat += "<span class='bad'>Failure may damage or destroy the sample!</span>" // No failures yet. TODO: add failures
|
||||
dat += "</div><div class='line'><a href='?src=\ref[src];gene=\ref[target];op=[operation]'>Confirm</a> "
|
||||
dat += "<a href='?src=\ref[src];abort=1'>Abort</a></div>"
|
||||
popup.set_content(dat)
|
||||
@@ -274,6 +280,9 @@
|
||||
if("extract")
|
||||
if(disk && !disk.read_only)
|
||||
disk.gene = G
|
||||
if(istype(G, /datum/plant_gene/core/potency))
|
||||
var/datum/plant_gene/core/gene = G
|
||||
gene.value = min(gene.value, max_extract_pot)
|
||||
disk.update_name()
|
||||
qdel(seed)
|
||||
seed = null
|
||||
@@ -339,6 +348,19 @@
|
||||
seed.icon_state = "seed-x"
|
||||
|
||||
|
||||
|
||||
// Gene modder for seed vault ship, built with high-end alien (?) parts.
|
||||
/obj/machinery/plantgenes/seedvault/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/plantgenes(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module/triphasic(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser/quadultra(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator/femto(src)
|
||||
RefreshParts()
|
||||
|
||||
|
||||
/*
|
||||
* Plant DNA disk
|
||||
*/
|
||||
|
||||
@@ -129,15 +129,8 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(atom/movable/AM)
|
||||
if(seed)
|
||||
var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip)
|
||||
if(S && !ispath(trash, /obj/item/weapon/grown) && iscarbon(AM))
|
||||
var/mob/living/carbon/M = AM
|
||||
var/stun = max(seed.potency * S.rate * 2, 1)
|
||||
var/weaken = max(seed.potency * S.rate, 0.5)
|
||||
if(M.slip(stun, weaken, src))
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_slip(src, M)
|
||||
return 1
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_cross(src, AM)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -50,15 +50,8 @@
|
||||
|
||||
/obj/item/weapon/grown/Crossed(atom/movable/AM)
|
||||
if(seed)
|
||||
var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip)
|
||||
if(S && iscarbon(AM))
|
||||
var/mob/living/carbon/M = AM
|
||||
var/stun = max(seed.potency * S.rate * 2, 1)
|
||||
var/weaken = max(seed.potency * S.rate, 0.5)
|
||||
if(M.slip(stun, weaken, src))
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_slip(src, M)
|
||||
return 1
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_cross(src, AM)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -156,6 +156,8 @@
|
||||
|
||||
/datum/plant_gene/trait/proc/on_consume(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
|
||||
return
|
||||
/datum/plant_gene/trait/proc/on_cross(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
|
||||
return
|
||||
/datum/plant_gene/trait/proc/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
|
||||
return
|
||||
/datum/plant_gene/trait/proc/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
|
||||
@@ -177,11 +179,28 @@
|
||||
/datum/plant_gene/trait/slip
|
||||
// Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery.
|
||||
// Applies other trait effects (teleporting, etc) to the target by on_slip.
|
||||
// For code, see grown.dm
|
||||
name = "Slippery Skin"
|
||||
rate = 0.1
|
||||
examine_line = "<span class='info'>It has a very slippery skin.</span>"
|
||||
|
||||
/datum/plant_gene/trait/slip/on_cross(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
|
||||
if(iscarbon(target))
|
||||
var/obj/item/seeds/seed = G.seed
|
||||
var/mob/living/carbon/M = target
|
||||
|
||||
var/stun_len = seed.potency * rate
|
||||
if(istype(G) && ispath(G.trash, /obj/item/weapon/grown))
|
||||
return
|
||||
|
||||
if(!istype(G, /obj/item/weapon/grown/bananapeel) && (!G.reagents || !G.reagents.has_reagent("lube")))
|
||||
stun_len /= 3
|
||||
|
||||
var/stun = max(stun_len * 2, 1)
|
||||
var/weaken = max(stun_len, 0.5)
|
||||
|
||||
if(M.slip(stun, weaken, G))
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_slip(src, M)
|
||||
|
||||
/datum/plant_gene/trait/cell_charge
|
||||
// Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten.
|
||||
@@ -189,18 +208,18 @@
|
||||
// Small (potency*rate*5) chance to shock squish or slip target for (potency*rate*5) damage.
|
||||
// Multiplies max charge by (rate*1000) when used in potato power cells.
|
||||
name = "Electrical Activity"
|
||||
rate = 0.01
|
||||
rate = 0.2
|
||||
origin_tech = list("powerstorage" = 4)
|
||||
|
||||
/datum/plant_gene/trait/cell_charge/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
|
||||
var/power = G.seed.potency*rate*5
|
||||
var/power = G.seed.potency*rate
|
||||
if(prob(power))
|
||||
C.electrocute_act(round(power), G, 1, 1)
|
||||
|
||||
/datum/plant_gene/trait/cell_charge/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
var/power = G.seed.potency*rate*5
|
||||
var/power = G.seed.potency*rate
|
||||
if(prob(power))
|
||||
C.electrocute_act(round(power), G, 1, 1)
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/obj/item/seeds
|
||||
icon = 'icons/obj/hydroponics/seeds.dmi'
|
||||
icon_state = "seed" // Unknown plant seed - these shouldn't exist in-game.
|
||||
w_class = 1 // Pocketable.
|
||||
w_class = 1
|
||||
burn_state = FLAMMABLE
|
||||
var/plantname = "Plants" // Name of plant when planted.
|
||||
var/product // A type path. The thing that is created when the plant is harvested.
|
||||
@@ -15,10 +15,10 @@
|
||||
var/icon_dead // Used to override dead icon (default is "[species]-dead"). You can use one dead icon for multiple closely related plants with it.
|
||||
var/icon_harvest // Used to override harvest icon (default is "[species]-harvest"). If null, plant will use [icon_grow][growthstages].
|
||||
|
||||
var/lifespan = 25 // How long before the plant begins to take damage from age.
|
||||
var/endurance = 15 // Amount of health the plant has.
|
||||
var/maturation = 6 // Used to determine which sprite to switch to when growing.
|
||||
var/production = 6 // Changes the amount of time needed for a plant to become harvestable.
|
||||
var/lifespan = 25 // How long before the plant begins to take damage from age.
|
||||
var/endurance = 15 // Amount of health the plant has.
|
||||
var/maturation = 6 // Used to determine which sprite to switch to when growing.
|
||||
var/production = 6 // Changes the amount of time needed for a plant to become harvestable.
|
||||
var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested.
|
||||
var/oneharvest = 0 // If a plant is cleared from the tray after harvesting, e.g. a carrot.
|
||||
var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways.
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
*/
|
||||
|
||||
#define LIGHTING_CIRCULAR 1 //Comment this out to use old square lighting effects.
|
||||
#define LIGHTING_LAYER 15 //Drawing layer for lighting
|
||||
#define LIGHTING_CAP 10 //The lumcount level at which alpha is 0 and we're fully lit.
|
||||
#define LIGHTING_CAP_FRAC (255/LIGHTING_CAP) //A precal'd variable we'll use in turf/redraw_lighting()
|
||||
#define LIGHTING_ICON 'icons/effects/alphacolors.dmi'
|
||||
@@ -236,7 +235,7 @@
|
||||
/atom/movable/light
|
||||
icon = LIGHTING_ICON
|
||||
icon_state = LIGHTING_ICON_STATE
|
||||
layer = LIGHTING_LAYER
|
||||
plane = PLANE_LIGHTING
|
||||
mouse_opacity = 0
|
||||
blend_mode = BLEND_OVERLAY
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
@@ -362,7 +361,6 @@
|
||||
T.init_lighting()
|
||||
T.update_lumcount(0)
|
||||
|
||||
#undef LIGHTING_LAYER
|
||||
#undef LIGHTING_CIRCULAR
|
||||
#undef LIGHTING_ICON
|
||||
#undef LIGHTING_ICON_STATE
|
||||
|
||||
@@ -253,7 +253,6 @@
|
||||
new s.type(loc,s.max_amount)
|
||||
s.use(s.max_amount)
|
||||
s.loc = loc
|
||||
s.layer = initial(s.layer)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/power_change()
|
||||
..()
|
||||
@@ -994,7 +993,8 @@
|
||||
var/client/C = user.client
|
||||
for(var/turf/closed/mineral/M in minerals)
|
||||
var/turf/F = get_turf(M)
|
||||
var/image/I = image('icons/turf/smoothrocks.dmi', loc = F, icon_state = M.scan_state, layer = 18)
|
||||
var/image/I = image('icons/turf/smoothrocks.dmi', loc = F, icon_state = M.scan_state)
|
||||
I.plane = PLANE_EFFECTS_UNLIT
|
||||
C.images += I
|
||||
spawn(30)
|
||||
if(C)
|
||||
@@ -1012,7 +1012,7 @@
|
||||
C.icon_state = M.scan_state
|
||||
|
||||
/obj/effect/overlay/temp/mining_overlay
|
||||
layer = 20
|
||||
plane = PLANE_EFFECTS_UNLIT
|
||||
icon = 'icons/turf/smoothrocks.dmi'
|
||||
anchored = 1
|
||||
mouse_opacity = 0
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
new /obj/item/weapon/survivalcapsule(src)
|
||||
|
||||
|
||||
|
||||
/**********************Shuttle Computer**************************/
|
||||
|
||||
/obj/machinery/computer/shuttle/mining
|
||||
@@ -164,6 +163,24 @@
|
||||
throwforce = 7
|
||||
w_class = 2
|
||||
|
||||
/obj/item/weapon/emptysandbag
|
||||
name = "empty sandbag"
|
||||
desc = "A bag to be filled with sand."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "sandbag"
|
||||
w_class = 1
|
||||
|
||||
/obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W,/obj/item/weapon/ore/glass))
|
||||
user << "<span class='notice'>You fill the sandbag.</span>"
|
||||
var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags
|
||||
user.unEquip(src)
|
||||
user.put_in_hands(I)
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
/**********************Mining car (Crate like thing, not the rail car)**************************/
|
||||
|
||||
@@ -222,7 +239,7 @@
|
||||
var/turf/cur_turf
|
||||
var/x_size = 5
|
||||
var/y_size = 5
|
||||
var/list/walltypes = list(/turf/closed/wall/shuttle/survival_pod)
|
||||
var/list/walltypes = list(/turf/closed/wall/shuttle/survival/pod)
|
||||
var/floor_type = /turf/open/floor/pod
|
||||
var/room
|
||||
|
||||
@@ -315,11 +332,75 @@
|
||||
//Pod turfs and objects
|
||||
|
||||
|
||||
//Floor
|
||||
//Floors
|
||||
/turf/open/floor/pod
|
||||
name = "pod floor"
|
||||
icon_state = "podfloor"
|
||||
icon_regular_floor = "podfloor"
|
||||
floor_tile = /obj/item/stack/tile/pod
|
||||
|
||||
/turf/open/floor/pod/light
|
||||
icon_state = "podfloor_light"
|
||||
icon_regular_floor = "podfloor_light"
|
||||
floor_tile = /obj/item/stack/tile/pod/light
|
||||
|
||||
/turf/open/floor/pod/dark
|
||||
icon_state = "podfloor_dark"
|
||||
icon_regular_floor = "podfloor_dark"
|
||||
floor_tile = /obj/item/stack/tile/pod/dark
|
||||
|
||||
//Walls
|
||||
/turf/closed/wall/shuttle/survival
|
||||
name = "pod wall"
|
||||
desc = "An easily-compressable wall used for temporary shelter."
|
||||
icon = 'icons/turf/walls/survival_pod_walls.dmi'
|
||||
icon_state = "smooth"
|
||||
walltype = "shuttle"
|
||||
smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
|
||||
canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod, /obj/structure/shuttle/engine)
|
||||
|
||||
/turf/closed/wall/shuttle/survival/nodiagonal
|
||||
smooth = SMOOTH_MORE
|
||||
|
||||
/turf/closed/wall/shuttle/survival/pod
|
||||
canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle, /obj/structure/shuttle/engine)
|
||||
|
||||
//Window
|
||||
/obj/structure/window/shuttle/survival_pod
|
||||
name = "pod window"
|
||||
icon = 'icons/obj/smooth_structures/pod_window.dmi'
|
||||
icon_state = "smooth"
|
||||
smooth = SMOOTH_MORE
|
||||
canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod)
|
||||
|
||||
//Door
|
||||
/obj/machinery/door/airlock/survival_pod
|
||||
name = "airlock"
|
||||
icon = 'icons/obj/doors/airlocks/survival/horizontal/survival.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi'
|
||||
doortype = /obj/structure/door_assembly/door_assembly_pod
|
||||
opacity = 0
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/survival_pod/vertical
|
||||
icon = 'icons/obj/doors/airlocks/survival/vertical/survival.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi'
|
||||
doortype = /obj/structure/door_assembly/door_assembly_pod/vertical
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_pod
|
||||
name = "pod airlock assembly"
|
||||
icon = 'icons/obj/doors/airlocks/survival/horizontal/survival.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi'
|
||||
airlock_type = /obj/machinery/door/airlock/survival_pod
|
||||
anchored = 1
|
||||
state = 1
|
||||
mineral = "glass"
|
||||
material = "glass"
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_pod/vertical
|
||||
icon = 'icons/obj/doors/airlocks/survival/vertical/survival.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi'
|
||||
airlock_type = /obj/machinery/door/airlock/survival_pod/vertical
|
||||
|
||||
//Table
|
||||
/obj/structure/table/survival_pod
|
||||
@@ -327,34 +408,6 @@
|
||||
icon_state = "table"
|
||||
smooth = SMOOTH_FALSE
|
||||
|
||||
/obj/structure/fans
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "fans"
|
||||
name = "environmental regulation system"
|
||||
desc = "A large machine releasing a constant gust of air."
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/arbitraryatmosblockingvar = TRUE
|
||||
|
||||
/obj/structure/fans/tiny
|
||||
name = "tiny fan"
|
||||
desc = "A tiny fan, releasing a thin gust of air."
|
||||
layer = TURF_LAYER + 0.8
|
||||
density = 0
|
||||
icon_state = "fan_tiny"
|
||||
|
||||
/obj/structure/fans/New(loc)
|
||||
..()
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/structure/fans/Destroy()
|
||||
arbitraryatmosblockingvar = FALSE
|
||||
air_update_turf(1)
|
||||
return ..()
|
||||
|
||||
/obj/structure/fans/CanAtmosPass(turf/T)
|
||||
return !arbitraryatmosblockingvar
|
||||
|
||||
//Sleeper
|
||||
/obj/machinery/sleeper/survival_pod
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
@@ -412,19 +465,36 @@
|
||||
var/obj/item/device/instrument/guitar/G = new(src)
|
||||
load(G)
|
||||
|
||||
//Walls
|
||||
//Fans
|
||||
/obj/structure/fans
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "fans"
|
||||
name = "environmental regulation system"
|
||||
desc = "A large machine releasing a constant gust of air."
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/arbitraryatmosblockingvar = TRUE
|
||||
|
||||
/turf/closed/wall/shuttle/survival_pod
|
||||
name = "wall"
|
||||
desc = "An easily-compressable wall used for temporary shelter."
|
||||
icon = 'icons/turf/walls/survival_pod_walls.dmi'
|
||||
icon_state = "smooth"
|
||||
walltype = "shuttle"
|
||||
smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
|
||||
canSmoothWith = list(/turf/closed/wall/shuttle/survival_pod, /obj/machinery/door/airlock, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle)
|
||||
/obj/structure/fans/tiny
|
||||
name = "tiny fan"
|
||||
desc = "A tiny fan, releasing a thin gust of air."
|
||||
layer = TURF_LAYER + 0.8
|
||||
density = 0
|
||||
icon_state = "fan_tiny"
|
||||
|
||||
/obj/structure/fans/New(loc)
|
||||
..()
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/structure/fans/Destroy()
|
||||
arbitraryatmosblockingvar = FALSE
|
||||
air_update_turf(1)
|
||||
return ..()
|
||||
|
||||
/obj/structure/fans/CanAtmosPass(turf/T)
|
||||
return !arbitraryatmosblockingvar
|
||||
|
||||
//Signs
|
||||
|
||||
/obj/structure/sign/mining
|
||||
name = "nanotrasen mining corps sign"
|
||||
desc = "A sign of relief for weary miners, and a warning for would be competitors to Nanotrasen's mining claims."
|
||||
@@ -437,15 +507,7 @@
|
||||
icon = 'icons/turf/walls/survival_pod_walls.dmi'
|
||||
icon_state = "survival"
|
||||
|
||||
//Door
|
||||
|
||||
/obj/machinery/door/airlock/survival_pod
|
||||
name = "airlock"
|
||||
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
|
||||
opacity = 0
|
||||
glass = 1
|
||||
|
||||
//Fluff
|
||||
/obj/structure/tubes
|
||||
icon_state = "tubes"
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
@@ -454,20 +516,3 @@
|
||||
layer = MOB_LAYER - 0.2
|
||||
density = 0
|
||||
|
||||
/obj/item/weapon/emptysandbag
|
||||
name = "empty sandbag"
|
||||
desc = "A bag to be filled with sand."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "sandbag"
|
||||
w_class = 1
|
||||
|
||||
/obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W,/obj/item/weapon/ore/glass))
|
||||
user << "<span class='notice'>You fill the sandbag.</span>"
|
||||
var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags
|
||||
user.unEquip(src)
|
||||
user.put_in_hands(I)
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
return
|
||||
else return ..()
|
||||
|
||||
@@ -212,8 +212,8 @@
|
||||
var/turf/T = get_step(src,output_dir)
|
||||
if(T)
|
||||
var/obj/item/O = new P(src)
|
||||
var/obj/item/weapon/moneybag/M = locate(/obj/item/weapon/moneybag, T)
|
||||
var/obj/item/weapon/storage/bag/money/M = locate(/obj/item/weapon/storage/bag/money, T)
|
||||
if(!M)
|
||||
M = new /obj/item/weapon/moneybag(src)
|
||||
M = new /obj/item/weapon/storage/bag/money(src)
|
||||
unload_mineral(M)
|
||||
O.loc = M
|
||||
@@ -1,112 +1,20 @@
|
||||
/*****************************Money bag********************************/
|
||||
|
||||
/obj/item/weapon/moneybag
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
name = "Money bag"
|
||||
/obj/item/weapon/storage/bag/money
|
||||
name = "money bag"
|
||||
icon_state = "moneybag"
|
||||
flags = CONDUCT
|
||||
force = 10
|
||||
throwforce = 0
|
||||
w_class = 4
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 20
|
||||
|
||||
/obj/item/weapon/moneybag/attack_hand(mob/user)
|
||||
var/amt_gold = 0
|
||||
var/amt_silver = 0
|
||||
var/amt_diamond = 0
|
||||
var/amt_iron = 0
|
||||
var/amt_plasma = 0
|
||||
var/amt_uranium = 0
|
||||
var/amt_clown = 0
|
||||
var/amt_adamantine = 0
|
||||
|
||||
for (var/obj/item/weapon/coin/C in contents)
|
||||
if (istype(C,/obj/item/weapon/coin/diamond))
|
||||
amt_diamond++;
|
||||
if (istype(C,/obj/item/weapon/coin/plasma))
|
||||
amt_plasma++;
|
||||
if (istype(C,/obj/item/weapon/coin/iron))
|
||||
amt_iron++;
|
||||
if (istype(C,/obj/item/weapon/coin/silver))
|
||||
amt_silver++;
|
||||
if (istype(C,/obj/item/weapon/coin/gold))
|
||||
amt_gold++;
|
||||
if (istype(C,/obj/item/weapon/coin/uranium))
|
||||
amt_uranium++;
|
||||
if (istype(C,/obj/item/weapon/coin/clown))
|
||||
amt_clown++;
|
||||
if (istype(C,/obj/item/weapon/coin/adamantine))
|
||||
amt_adamantine++;
|
||||
|
||||
var/dat = text("<b>The contents of the moneybag reveal...</b><br>")
|
||||
if (amt_gold)
|
||||
dat += text("Gold coins: [amt_gold] <A href='?src=\ref[src];remove=gold'>Remove one</A><br>")
|
||||
if (amt_silver)
|
||||
dat += text("Silver coins: [amt_silver] <A href='?src=\ref[src];remove=silver'>Remove one</A><br>")
|
||||
if (amt_iron)
|
||||
dat += text("Metal coins: [amt_iron] <A href='?src=\ref[src];remove=iron'>Remove one</A><br>")
|
||||
if (amt_diamond)
|
||||
dat += text("Diamond coins: [amt_diamond] <A href='?src=\ref[src];remove=diamond'>Remove one</A><br>")
|
||||
if (amt_plasma)
|
||||
dat += text("Plasma coins: [amt_plasma] <A href='?src=\ref[src];remove=plasma'>Remove one</A><br>")
|
||||
if (amt_uranium)
|
||||
dat += text("Uranium coins: [amt_uranium] <A href='?src=\ref[src];remove=uranium'>Remove one</A><br>")
|
||||
if (amt_clown)
|
||||
dat += text("Bananium coins: [amt_clown] <A href='?src=\ref[src];remove=clown'>Remove one</A><br>")
|
||||
if (amt_adamantine)
|
||||
dat += text("Adamantine coins: [amt_adamantine] <A href='?src=\ref[src];remove=adamantine'>Remove one</A><br>")
|
||||
user << browse("[dat]", "window=moneybag")
|
||||
|
||||
/obj/item/weapon/moneybag/attackby(obj/item/weapon/W, mob/user, params)
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/coin))
|
||||
var/obj/item/weapon/coin/C = W
|
||||
if(!user.drop_item())
|
||||
return
|
||||
user << "<span class='notice'>You add the [C.name] into the bag.</span>"
|
||||
contents += C
|
||||
if (istype(W, /obj/item/weapon/moneybag))
|
||||
var/obj/item/weapon/moneybag/C = W
|
||||
for (var/obj/O in C.contents)
|
||||
contents += O;
|
||||
user << "<span class='notice'>You empty the [C.name] into the bag.</span>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/moneybag/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["remove"])
|
||||
var/obj/item/weapon/coin/COIN
|
||||
switch(href_list["remove"])
|
||||
if("gold")
|
||||
COIN = locate(/obj/item/weapon/coin/gold,src.contents)
|
||||
if("silver")
|
||||
COIN = locate(/obj/item/weapon/coin/silver,src.contents)
|
||||
if("iron")
|
||||
COIN = locate(/obj/item/weapon/coin/iron,src.contents)
|
||||
if("diamond")
|
||||
COIN = locate(/obj/item/weapon/coin/diamond,src.contents)
|
||||
if("plasma")
|
||||
COIN = locate(/obj/item/weapon/coin/plasma,src.contents)
|
||||
if("uranium")
|
||||
COIN = locate(/obj/item/weapon/coin/uranium,src.contents)
|
||||
if("clown")
|
||||
COIN = locate(/obj/item/weapon/coin/clown,src.contents)
|
||||
if("adamantine")
|
||||
COIN = locate(/obj/item/weapon/coin/adamantine,src.contents)
|
||||
if(!COIN)
|
||||
return
|
||||
COIN.loc = src.loc
|
||||
return
|
||||
w_class = 4
|
||||
max_w_class = 3
|
||||
storage_slots = 80
|
||||
max_combined_w_class = 40
|
||||
can_hold = list(/obj/item/weapon/coin, /obj/item/stack/spacecash)
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/moneybag/vault
|
||||
|
||||
/obj/item/weapon/moneybag/vault/New()
|
||||
/obj/item/weapon/storage/bag/money/vault/New()
|
||||
..()
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
if(!l_hand)
|
||||
W.loc = src //TODO: move to equipped?
|
||||
l_hand = W
|
||||
W.layer = 20 //TODO: move to equipped?
|
||||
W.equipped(src,slot_l_hand)
|
||||
if(pulling == W)
|
||||
stop_pulling()
|
||||
@@ -47,7 +46,6 @@
|
||||
if(!r_hand)
|
||||
W.loc = src
|
||||
r_hand = W
|
||||
W.layer = 20
|
||||
W.equipped(src,slot_r_hand)
|
||||
if(pulling == W)
|
||||
stop_pulling()
|
||||
@@ -92,7 +90,6 @@
|
||||
return 1
|
||||
else
|
||||
W.loc = get_turf(src)
|
||||
W.layer = initial(W.layer)
|
||||
W.dropped(src)
|
||||
return 0
|
||||
|
||||
@@ -154,8 +151,6 @@
|
||||
client.screen -= I
|
||||
I.loc = loc
|
||||
I.dropped(src)
|
||||
if(I)
|
||||
I.layer = initial(I.layer)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -137,14 +137,6 @@
|
||||
if(statpanel("Status"))
|
||||
stat(null, "Intent: [a_intent]")
|
||||
|
||||
/mob/living/carbon/alien/Stun(amount)
|
||||
if(status_flags & CANSTUN)
|
||||
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
|
||||
else
|
||||
// add some movement delay
|
||||
move_delay_add = min(move_delay_add + round(amount / 2), 10) // a maximum delay of 10
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/getTrail()
|
||||
if(getBruteLoss() < 200)
|
||||
return pick (list("xltrails_1", "xltrails2"))
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
//Here are the procs used to modify status effects of a mob.
|
||||
//The effects include: stunned, weakened, paralysis, sleeping, resting, jitteriness, dizziness, ear damage,
|
||||
// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability.
|
||||
|
||||
/////////////////////////////////// STUNNED ////////////////////////////////////
|
||||
|
||||
/mob/living/carbon/alien/Stun(amount, updating = 1, ignore_canstun = 0)
|
||||
if(status_flags & CANSTUN || ignore_canstun)
|
||||
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
|
||||
if(updating)
|
||||
update_canmove()
|
||||
else
|
||||
// add some movement delay
|
||||
move_delay_add = min(move_delay_add + round(amount / 2), 10) // a maximum delay of 10
|
||||
@@ -38,7 +38,7 @@
|
||||
/mob/living/carbon/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/blob_act()
|
||||
/mob/living/carbon/brain/blob_act(obj/effect/blob/B)
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/UnarmedAttack(atom/A)//Stops runtimes due to attack_animal being the default
|
||||
|
||||
@@ -54,33 +54,6 @@
|
||||
/mob/living/carbon/brain/handle_disabilities()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/setEarDamage() // no ears to damage or heal
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/blind_eyes() // no eyes to damage or heal
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/blur_eyes()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/adjust_blindness()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/adjust_blurriness()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/set_blindness()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/set_blurriness()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/become_blind()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/handle_changeling()
|
||||
return
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
//Here are the procs used to modify status effects of a mob.
|
||||
//The effects include: stunned, weakened, paralysis, sleeping, resting, jitteriness, dizziness, ear damage,
|
||||
// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability.
|
||||
|
||||
/////////////////////////////////// EAR DAMAGE ////////////////////////////////////
|
||||
|
||||
/mob/living/carbon/brain/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/setEarDamage() // no ears to damage or heal
|
||||
return
|
||||
|
||||
/////////////////////////////////// EYE_BLIND ////////////////////////////////////
|
||||
|
||||
/mob/living/carbon/brain/blind_eyes() // no eyes to damage or heal
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/adjust_blindness()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/set_blindness()
|
||||
return
|
||||
|
||||
/////////////////////////////////// EYE_BLURRY ////////////////////////////////////
|
||||
|
||||
/mob/living/carbon/brain/blur_eyes()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/adjust_blurriness()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/set_blurriness()
|
||||
return
|
||||
|
||||
/////////////////////////////////// BLIND DISABILITY ////////////////////////////////////
|
||||
|
||||
/mob/living/carbon/brain/become_blind()
|
||||
return
|
||||
@@ -341,7 +341,7 @@
|
||||
/mob/living/carbon/is_muzzled()
|
||||
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
|
||||
/mob/living/carbon/blob_act()
|
||||
/mob/living/carbon/blob_act(obj/effect/blob/B)
|
||||
if (stat == DEAD)
|
||||
return
|
||||
else
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/blob_act()
|
||||
/mob/living/carbon/human/blob_act(obj/effect/blob/B)
|
||||
if(stat == DEAD)
|
||||
return
|
||||
show_message("<span class='userdanger'>The blob attacks you!</span>")
|
||||
|
||||
@@ -315,6 +315,7 @@
|
||||
/mob/living/carbon/human/mech_melee_attack(obj/mecha/M)
|
||||
|
||||
if(M.occupant.a_intent == "harm")
|
||||
M.do_attack_animation(src)
|
||||
if(M.damtype == "brute")
|
||||
step_away(src,M,15)
|
||||
var/obj/item/organ/limb/temp = get_organ(pick("chest", "chest", "chest", "head"))
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
var/safe_co2_min = 0
|
||||
var/safe_co2_max = 10 // Yes it's an arbitrary value who cares?
|
||||
var/safe_toxins_min = 0
|
||||
var/safe_toxins_max = 0.005
|
||||
var/safe_toxins_max = 0.05
|
||||
var/SA_para_min = 1 //Sleeping agent
|
||||
var/SA_sleep_min = 5 //Sleeping agent
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
I.screen_loc = null // will get moved if inventory is visible
|
||||
I.loc = src
|
||||
I.equipped(src, slot)
|
||||
I.layer = 20
|
||||
|
||||
switch(slot)
|
||||
if(slot_back)
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
//Here are the procs used to modify status effects of a mob.
|
||||
//The effects include: stunned, weakened, paralysis, sleeping, resting, jitteriness, dizziness, ear damage,
|
||||
// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability.
|
||||
|
||||
/mob/living/carbon/damage_eyes(amount)
|
||||
if(amount>0)
|
||||
eye_damage = amount
|
||||
if(eye_damage > 20)
|
||||
if(eye_damage > 30)
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2)
|
||||
else
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1)
|
||||
|
||||
/mob/living/carbon/set_eye_damage(amount)
|
||||
eye_damage = max(amount,0)
|
||||
if(eye_damage > 20)
|
||||
if(eye_damage > 30)
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2)
|
||||
else
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1)
|
||||
else
|
||||
clear_fullscreen("eye_damage")
|
||||
|
||||
/mob/living/carbon/adjust_eye_damage(amount)
|
||||
eye_damage = max(eye_damage+amount, 0)
|
||||
if(eye_damage > 20)
|
||||
if(eye_damage > 30)
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2)
|
||||
else
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1)
|
||||
else
|
||||
clear_fullscreen("eye_damage")
|
||||
|
||||
/mob/living/carbon/adjust_drugginess(amount)
|
||||
var/old_druggy = druggy
|
||||
if(amount>0)
|
||||
druggy += amount
|
||||
if(!old_druggy)
|
||||
overlay_fullscreen("high", /obj/screen/fullscreen/high)
|
||||
throw_alert("high", /obj/screen/alert/high)
|
||||
else if(old_druggy)
|
||||
druggy = max(druggy+amount, 0)
|
||||
if(!druggy)
|
||||
clear_fullscreen("high")
|
||||
clear_alert("high")
|
||||
/mob/living/carbon/set_drugginess(amount)
|
||||
var/old_druggy = druggy
|
||||
druggy = amount
|
||||
if(amount>0)
|
||||
if(!old_druggy)
|
||||
overlay_fullscreen("high", /obj/screen/fullscreen/high)
|
||||
throw_alert("high", /obj/screen/alert/high)
|
||||
else if(old_druggy)
|
||||
clear_fullscreen("high")
|
||||
clear_alert("high")
|
||||
|
||||
|
||||
/mob/living/carbon/cure_blind()
|
||||
if(disabilities & BLIND)
|
||||
disabilities &= ~BLIND
|
||||
adjust_blindness(-1)
|
||||
return 1
|
||||
/mob/living/carbon/become_blind()
|
||||
if(!(disabilities & BLIND))
|
||||
disabilities |= BLIND
|
||||
blind_eyes(1)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/cure_nearsighted()
|
||||
if(disabilities & NEARSIGHT)
|
||||
disabilities &= ~NEARSIGHT
|
||||
clear_fullscreen("nearsighted")
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/become_nearsighted()
|
||||
if(!(disabilities & NEARSIGHT))
|
||||
disabilities |= NEARSIGHT
|
||||
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
|
||||
return 1
|
||||
@@ -49,7 +49,8 @@
|
||||
paralysis = 0
|
||||
stunned = 0
|
||||
weakened = 0
|
||||
sleeping = 0
|
||||
set_drugginess(0)
|
||||
SetSleeping(0, 0)
|
||||
blind_eyes(1)
|
||||
reset_perspective(null)
|
||||
hide_fullscreens()
|
||||
|
||||
@@ -86,9 +86,9 @@
|
||||
if(paralysis)
|
||||
AdjustParalysis(-1)
|
||||
if(stunned)
|
||||
AdjustStunned(-1)
|
||||
AdjustStunned(-1, 1, 1)
|
||||
if(weakened)
|
||||
AdjustWeakened(-1, ignore_canweaken=1)
|
||||
AdjustWeakened(-1, 1, 1)
|
||||
|
||||
/mob/living/proc/handle_disabilities()
|
||||
//Eyes
|
||||
|
||||
@@ -429,18 +429,6 @@ Sorry Giacom. Please don't be mad :(
|
||||
var/obj/item/organ/limb/def_zone = ran_zone(t)
|
||||
return def_zone
|
||||
|
||||
//damage/heal the mob ears and adjust the deaf amount
|
||||
/mob/living/adjustEarDamage(damage, deaf)
|
||||
ear_damage = max(0, ear_damage + damage)
|
||||
ear_deaf = max(0, ear_deaf + deaf)
|
||||
|
||||
//pass a negative argument to skip one of the variable
|
||||
/mob/living/setEarDamage(damage, deaf)
|
||||
if(damage >= 0)
|
||||
ear_damage = damage
|
||||
if(deaf >= 0)
|
||||
ear_deaf = deaf
|
||||
|
||||
// heal ONE external organ, organ gets randomly selected from damaged ones.
|
||||
/mob/living/proc/heal_organ_damage(brute, burn, updating_health=1)
|
||||
adjustBruteLoss(-brute, updating_health)
|
||||
@@ -845,6 +833,7 @@ Sorry Giacom. Please don't be mad :(
|
||||
I = image(r_hand.icon, A, r_hand.icon_state, A.layer + 1)
|
||||
else // Attacked with a fist?
|
||||
return
|
||||
I.plane = PLANE_EFFECTS_UNLIT
|
||||
|
||||
// Who can see the attack?
|
||||
var/list/viewing = list()
|
||||
@@ -998,174 +987,3 @@ Sorry Giacom. Please don't be mad :(
|
||||
|
||||
/mob/proc/update_sight()
|
||||
return
|
||||
|
||||
/mob/proc/blind_eyes(amount)
|
||||
if(amount>0)
|
||||
var/old_eye_blind = eye_blind
|
||||
eye_blind = max(eye_blind, amount)
|
||||
if(!old_eye_blind)
|
||||
throw_alert("blind", /obj/screen/alert/blind)
|
||||
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
|
||||
|
||||
/mob/proc/adjust_blindness(amount)
|
||||
if(amount>0)
|
||||
var/old_eye_blind = eye_blind
|
||||
eye_blind += amount
|
||||
if(!old_eye_blind)
|
||||
throw_alert("blind", /obj/screen/alert/blind)
|
||||
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
|
||||
else if(eye_blind)
|
||||
var/blind_minimum = 0
|
||||
if(stat != CONSCIOUS || (disabilities & BLIND))
|
||||
blind_minimum = 1
|
||||
eye_blind = max(eye_blind+amount, blind_minimum)
|
||||
if(!eye_blind)
|
||||
clear_alert("blind")
|
||||
clear_fullscreen("blind")
|
||||
|
||||
/mob/proc/set_blindness(amount)
|
||||
if(amount>0)
|
||||
var/old_eye_blind = eye_blind
|
||||
eye_blind = amount
|
||||
if(client && !old_eye_blind)
|
||||
throw_alert("blind", /obj/screen/alert/blind)
|
||||
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
|
||||
else if(eye_blind)
|
||||
var/blind_minimum = 0
|
||||
if(stat != CONSCIOUS || (disabilities & BLIND))
|
||||
blind_minimum = 1
|
||||
eye_blind = blind_minimum
|
||||
if(!eye_blind)
|
||||
clear_alert("blind")
|
||||
clear_fullscreen("blind")
|
||||
|
||||
/mob/proc/blur_eyes(amount)
|
||||
if(amount>0)
|
||||
var/old_eye_blurry = eye_blurry
|
||||
eye_blurry = max(amount, eye_blurry)
|
||||
if(!old_eye_blurry)
|
||||
overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
|
||||
|
||||
/mob/proc/adjust_blurriness(amount)
|
||||
var/old_eye_blurry = eye_blurry
|
||||
eye_blurry = max(eye_blurry+amount, 0)
|
||||
if(amount>0)
|
||||
if(!old_eye_blurry)
|
||||
overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
|
||||
else if(old_eye_blurry && !eye_blurry)
|
||||
clear_fullscreen("blurry")
|
||||
|
||||
/mob/proc/set_blurriness(amount)
|
||||
var/old_eye_blurry = eye_blurry
|
||||
eye_blurry = max(amount, 0)
|
||||
if(amount>0)
|
||||
if(!old_eye_blurry)
|
||||
overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
|
||||
else if(old_eye_blurry)
|
||||
clear_fullscreen("blurry")
|
||||
|
||||
|
||||
/mob/proc/damage_eyes(amount)
|
||||
return
|
||||
|
||||
/mob/living/carbon/damage_eyes(amount)
|
||||
if(amount>0)
|
||||
eye_damage = amount
|
||||
if(eye_damage > 20)
|
||||
if(eye_damage > 30)
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2)
|
||||
else
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1)
|
||||
|
||||
|
||||
/mob/proc/set_eye_damage(amount)
|
||||
return
|
||||
|
||||
/mob/living/carbon/set_eye_damage(amount)
|
||||
eye_damage = max(amount,0)
|
||||
if(eye_damage > 20)
|
||||
if(eye_damage > 30)
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2)
|
||||
else
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1)
|
||||
else
|
||||
clear_fullscreen("eye_damage")
|
||||
|
||||
/mob/proc/adjust_eye_damage(amount)
|
||||
return
|
||||
|
||||
/mob/living/carbon/adjust_eye_damage(amount)
|
||||
eye_damage = max(eye_damage+amount, 0)
|
||||
if(eye_damage > 20)
|
||||
if(eye_damage > 30)
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2)
|
||||
else
|
||||
overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1)
|
||||
else
|
||||
clear_fullscreen("eye_damage")
|
||||
|
||||
/mob/proc/adjust_drugginess(amount)
|
||||
return
|
||||
|
||||
/mob/living/carbon/adjust_drugginess(amount)
|
||||
var/old_druggy = druggy
|
||||
if(amount>0)
|
||||
druggy += amount
|
||||
if(!old_druggy)
|
||||
overlay_fullscreen("high", /obj/screen/fullscreen/high)
|
||||
throw_alert("high", /obj/screen/alert/high)
|
||||
else if(old_druggy)
|
||||
druggy = max(druggy+amount, 0)
|
||||
if(!druggy)
|
||||
clear_fullscreen("high")
|
||||
clear_alert("high")
|
||||
|
||||
/mob/proc/set_drugginess(amount)
|
||||
return
|
||||
|
||||
/mob/living/carbon/set_drugginess(amount)
|
||||
var/old_druggy = druggy
|
||||
druggy = amount
|
||||
if(amount>0)
|
||||
if(!old_druggy)
|
||||
overlay_fullscreen("high", /obj/screen/fullscreen/high)
|
||||
throw_alert("high", /obj/screen/alert/high)
|
||||
else if(old_druggy)
|
||||
clear_fullscreen("high")
|
||||
clear_alert("high")
|
||||
|
||||
/mob/proc/cure_blind() //when we want to cure the BLIND disability only.
|
||||
return
|
||||
|
||||
/mob/living/carbon/cure_blind()
|
||||
if(disabilities & BLIND)
|
||||
disabilities &= ~BLIND
|
||||
adjust_blindness(-1)
|
||||
return 1
|
||||
|
||||
/mob/proc/cure_nearsighted()
|
||||
return
|
||||
|
||||
/mob/living/carbon/cure_nearsighted()
|
||||
if(disabilities & NEARSIGHT)
|
||||
disabilities &= ~NEARSIGHT
|
||||
clear_fullscreen("nearsighted")
|
||||
return 1
|
||||
|
||||
/mob/proc/become_nearsighted()
|
||||
return
|
||||
|
||||
/mob/living/carbon/become_nearsighted()
|
||||
if(!(disabilities & NEARSIGHT))
|
||||
disabilities |= NEARSIGHT
|
||||
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
|
||||
return 1
|
||||
|
||||
/mob/proc/become_blind()
|
||||
return
|
||||
|
||||
/mob/living/carbon/become_blind()
|
||||
if(!(disabilities & BLIND))
|
||||
disabilities |= BLIND
|
||||
blind_eyes(1)
|
||||
return 1
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
|
||||
/mob/living/mech_melee_attack(obj/mecha/M)
|
||||
if(M.occupant.a_intent == "harm")
|
||||
M.do_attack_animation(src)
|
||||
if(M.damtype == "brute")
|
||||
step_away(src,M,15)
|
||||
switch(M.damtype)
|
||||
@@ -101,8 +102,6 @@
|
||||
add_logs(M.occupant, src, "pushed", M)
|
||||
visible_message("<span class='warning'>[M] pushes [src] out of the way.</span>")
|
||||
|
||||
return
|
||||
|
||||
|
||||
//Mobs on Fire
|
||||
/mob/living/proc/IgniteMob()
|
||||
|
||||
@@ -350,7 +350,7 @@ var/list/ai_list = list()
|
||||
SSshuttle.cancelEvac(src)
|
||||
return
|
||||
|
||||
/mob/living/silicon/ai/blob_act()
|
||||
/mob/living/silicon/ai/blob_act(obj/effect/blob/B)
|
||||
if (stat != DEAD)
|
||||
adjustBruteLoss(60)
|
||||
updatehealth()
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
else
|
||||
stat(null, text("Systems nonfunctional"))
|
||||
|
||||
/mob/living/silicon/pai/blob_act()
|
||||
/mob/living/silicon/pai/blob_act(obj/effect/blob/B)
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/pai/restrained()
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
if(!module_state_1)
|
||||
O.mouse_opacity = initial(O.mouse_opacity)
|
||||
module_state_1 = O
|
||||
O.layer = 20
|
||||
O.plane = PLANE_UI_OBJECTS
|
||||
O.screen_loc = inv1.screen_loc
|
||||
contents += O
|
||||
if(istype(module_state_1,/obj/item/borg/sight))
|
||||
@@ -58,7 +58,7 @@
|
||||
else if(!module_state_2)
|
||||
O.mouse_opacity = initial(O.mouse_opacity)
|
||||
module_state_2 = O
|
||||
O.layer = 20
|
||||
O.plane = PLANE_UI_OBJECTS
|
||||
O.screen_loc = inv2.screen_loc
|
||||
contents += O
|
||||
if(istype(module_state_2,/obj/item/borg/sight))
|
||||
@@ -68,7 +68,7 @@
|
||||
else if(!module_state_3)
|
||||
O.mouse_opacity = initial(O.mouse_opacity)
|
||||
module_state_3 = O
|
||||
O.layer = 20
|
||||
O.plane = PLANE_UI_OBJECTS
|
||||
O.screen_loc = inv3.screen_loc
|
||||
contents += O
|
||||
if(istype(module_state_3,/obj/item/borg/sight))
|
||||
@@ -198,25 +198,25 @@
|
||||
//cycle_modules() - Cycles through the list of selected modules.
|
||||
/mob/living/silicon/robot/proc/cycle_modules()
|
||||
var/slot_start = get_selected_module()
|
||||
if(slot_start) deselect_module(slot_start) //Only deselect if we have a selected slot.
|
||||
if(slot_start)
|
||||
deselect_module(slot_start) //Only deselect if we have a selected slot.
|
||||
|
||||
var/slot_num
|
||||
if(slot_start == 0)
|
||||
slot_num = 1
|
||||
slot_start = 2
|
||||
slot_start = 4
|
||||
else
|
||||
slot_num = slot_start + 1
|
||||
|
||||
while(slot_start != slot_num) //If we wrap around without finding any free slots, just give up.
|
||||
while(slot_num != slot_start) //If we wrap around without finding any free slots, just give up.
|
||||
if(module_active(slot_num))
|
||||
select_module(slot_num)
|
||||
return
|
||||
slot_num++
|
||||
if(slot_num > 3) slot_num = 1 //Wrap around.
|
||||
if(slot_num > 4) // not >3 otherwise cycling with just one item on module 3 wouldn't work
|
||||
slot_num = 1 //Wrap around.
|
||||
|
||||
return
|
||||
|
||||
|
||||
/mob/living/silicon/robot/swap_hand()
|
||||
cycle_modules()
|
||||
return
|
||||
@@ -84,7 +84,6 @@
|
||||
|
||||
robot_modules_background = new()
|
||||
robot_modules_background.icon_state = "block"
|
||||
robot_modules_background.layer = 19 //Objects that appear on screen are on layer 20, UI should be just below it.
|
||||
|
||||
ident = rand(1, 999)
|
||||
update_icons()
|
||||
@@ -353,7 +352,7 @@
|
||||
if(thruster_button)
|
||||
thruster_button.icon_state = "ionpulse[ionpulse_on]"
|
||||
|
||||
/mob/living/silicon/robot/blob_act()
|
||||
/mob/living/silicon/robot/blob_act(obj/effect/blob/B)
|
||||
if (stat != 2)
|
||||
adjustBruteLoss(60)
|
||||
updatehealth()
|
||||
|
||||
@@ -457,12 +457,6 @@
|
||||
"<span class='warning'>[M] punches [src], but doesn't leave a dent.</span>")
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/silicon/setEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/silicon/proc/GetPhoto()
|
||||
if (aicamera)
|
||||
return aicamera.selectpicture(aicamera)
|
||||
@@ -489,33 +483,3 @@
|
||||
animate(src, transform = ntransform, time = 2,easing = EASE_IN|EASE_OUT)
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/silicon/Stun(amount)
|
||||
if(status_flags & CANSTUN)
|
||||
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
|
||||
if(status_flags & CANSTUN)
|
||||
stunned = max(amount,0)
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/AdjustStunned(amount)
|
||||
if(status_flags & CANSTUN)
|
||||
stunned = max(stunned + amount,0)
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/Weaken(amount, ignore_canweaken = 0)
|
||||
if(status_flags & CANWEAKEN || ignore_canweaken)
|
||||
weakened = max(max(weakened,amount),0)
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/SetWeakened(amount)
|
||||
if(status_flags & CANWEAKEN)
|
||||
weakened = max(amount,0)
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/AdjustWeakened(amount, ignore_canweaken = 0)
|
||||
if(status_flags & CANWEAKEN || ignore_canweaken)
|
||||
weakened = max(weakened + amount,0)
|
||||
update_stat()
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
|
||||
//Here are the procs used to modify status effects of a mob.
|
||||
//The effects include: stunned, weakened, paralysis, sleeping, resting, jitteriness, dizziness, ear damage,
|
||||
// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability.
|
||||
|
||||
/////////////////////////////////// STUNNED ////////////////////////////////////
|
||||
|
||||
/mob/living/silicon/Stun(amount, updating = 1, ignore_canstun = 0)
|
||||
if(status_flags & CANSTUN || ignore_canstun)
|
||||
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/AdjustStunned(amount, updating = 1, ignore_canstun = 0)
|
||||
if(status_flags & CANSTUN || ignore_canstun)
|
||||
stunned = max(stunned + amount,0)
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/SetStunned(amount, updating = 1, ignore_canstun = 0) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
|
||||
if(status_flags & CANSTUN || ignore_canstun)
|
||||
stunned = max(amount,0)
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/////////////////////////////////// WEAKENED ////////////////////////////////////
|
||||
|
||||
/mob/living/silicon/Weaken(amount, updating = 1, ignore_canweaken = 0)
|
||||
if(status_flags & CANWEAKEN || ignore_canweaken)
|
||||
weakened = max(max(weakened,amount),0)
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/AdjustWeakened(amount, updating = 1, ignore_canweaken = 0)
|
||||
if(status_flags & CANWEAKEN || ignore_canweaken)
|
||||
weakened = max(weakened + amount,0)
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/living/silicon/SetWeakened(amount, updating = 1, ignore_canweaken = 0)
|
||||
if(status_flags & CANWEAKEN || ignore_canweaken)
|
||||
weakened = max(amount,0)
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/////////////////////////////////// EAR DAMAGE ////////////////////////////////////
|
||||
|
||||
/mob/living/silicon/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/silicon/setEarDamage()
|
||||
return
|
||||
@@ -115,7 +115,7 @@
|
||||
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
|
||||
family = list()
|
||||
for(var/mob/living/simple_animal/pet/cat/C in mob_list)
|
||||
if(istype(C,type) || C.stat || !C.butcher_results) //That last one is a work around for hologram cats
|
||||
if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats
|
||||
continue
|
||||
if(C.type in family)
|
||||
family[C.type] += 1
|
||||
@@ -125,11 +125,11 @@
|
||||
memory_saved = 1
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats()
|
||||
cats_deployed = 1
|
||||
for(var/cat_type in family)
|
||||
if(family[cat_type] > 0)
|
||||
for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS)
|
||||
new cat_type(loc)
|
||||
cats_deployed = 1
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Proc
|
||||
name = "Proc"
|
||||
|
||||
@@ -94,7 +94,6 @@
|
||||
I.screen_loc = null // will get moved if inventory is visible
|
||||
I.loc = src
|
||||
I.equipped(src, slot)
|
||||
I.layer = 20
|
||||
|
||||
switch(slot)
|
||||
if(slot_head)
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
hands_overlays += r_hand_image
|
||||
|
||||
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
|
||||
r_hand.layer = 20
|
||||
r_hand.screen_loc = ui_rhand
|
||||
client.screen |= r_hand
|
||||
|
||||
@@ -54,7 +53,6 @@
|
||||
hands_overlays += l_hand_image
|
||||
|
||||
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
|
||||
l_hand.layer = 20
|
||||
l_hand.screen_loc = ui_lhand
|
||||
client.screen |= l_hand
|
||||
|
||||
|
||||
@@ -635,7 +635,7 @@
|
||||
stat_attack = 1
|
||||
robust_searching = 1
|
||||
loot = list()
|
||||
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, /obj/item/stack/sheet/bone = 1)
|
||||
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
|
||||
|
||||
//Goliath
|
||||
|
||||
|
||||
@@ -111,32 +111,6 @@
|
||||
else
|
||||
stat = CONSCIOUS
|
||||
|
||||
/mob/living/simple_animal/blind_eyes()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/blur_eyes()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/adjust_blindness()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/adjust_blurriness()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/set_blindness()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/set_blurriness()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/become_blind()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/setEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/handle_status_effects()
|
||||
..()
|
||||
@@ -261,7 +235,7 @@
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/blob_act()
|
||||
/mob/living/simple_animal/blob_act(obj/effect/blob/B)
|
||||
adjustBruteLoss(20)
|
||||
return
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
|
||||
/mob/living/simple_animal/blind_eyes()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/adjust_blindness()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/set_blindness()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/blur_eyes()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/adjust_blurriness()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/set_blurriness()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/become_blind()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/setEarDamage()
|
||||
return
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
//Here are the procs used to modify status effects of a mob.
|
||||
//The effects include: stunned, weakened, paralysis, sleeping, resting, jitteriness, dizziness, ear damage,
|
||||
// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability.
|
||||
|
||||
/////////////////////////////////// EAR DAMAGE ////////////////////////////////////
|
||||
|
||||
//damage/heal the mob ears and adjust the deaf amount
|
||||
/mob/living/adjustEarDamage(damage, deaf)
|
||||
ear_damage = max(0, ear_damage + damage)
|
||||
ear_deaf = max(0, ear_deaf + deaf)
|
||||
|
||||
//pass a negative argument to skip one of the variable
|
||||
/mob/living/setEarDamage(damage, deaf)
|
||||
if(damage >= 0)
|
||||
ear_damage = damage
|
||||
if(deaf >= 0)
|
||||
ear_deaf = deaf
|
||||
@@ -92,8 +92,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/components/unary
|
||||
for(var/X in totalMembers)
|
||||
var/obj/machinery/atmospherics/A = X //all elements in totalMembers are necessarily of this type.
|
||||
if(!A.pipe_vision_img)
|
||||
A.pipe_vision_img = image(A, A.loc, layer = 20, dir = A.dir)
|
||||
//20 for being above darkness
|
||||
A.pipe_vision_img = image(A, A.loc, dir = A.dir)
|
||||
A.pipe_vision_img.plane = PLANE_EFFECTS_UNLIT
|
||||
pipes_shown += A.pipe_vision_img
|
||||
if(client)
|
||||
client.images += A.pipe_vision_img
|
||||
|
||||
+1
-122
@@ -753,120 +753,6 @@ var/next_mob_id = 0
|
||||
/mob/proc/activate_hand(selhand)
|
||||
return
|
||||
|
||||
/mob/proc/Jitter(amount)
|
||||
jitteriness = max(jitteriness,amount,0)
|
||||
|
||||
/mob/proc/Dizzy(amount)
|
||||
dizziness = max(dizziness,amount,0)
|
||||
|
||||
/mob/proc/Stun(amount, updating_canmove = 1)
|
||||
if(status_flags & CANSTUN)
|
||||
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
|
||||
if(updating_canmove)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/SetStunned(amount, updating_canmove = 1) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
|
||||
if(status_flags & CANSTUN)
|
||||
stunned = max(amount,0)
|
||||
if(updating_canmove)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustStunned(amount, updating_canmove = 1)
|
||||
if(status_flags & CANSTUN)
|
||||
stunned = max(stunned + amount,0)
|
||||
if(updating_canmove)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/Weaken(amount, ignore_canweaken = 0, updating_canmove = 1)
|
||||
if((status_flags & CANWEAKEN) || ignore_canweaken)
|
||||
weakened = max(max(weakened,amount),0)
|
||||
if(updating_canmove)
|
||||
update_canmove() //updates lying, canmove and icons
|
||||
|
||||
/mob/proc/SetWeakened(amount, updating_canmove = 1)
|
||||
if(status_flags & CANWEAKEN)
|
||||
weakened = max(amount,0)
|
||||
if(updating_canmove)
|
||||
update_canmove() //updates lying, canmove and icons
|
||||
|
||||
/mob/proc/AdjustWeakened(amount, ignore_canweaken = 0, updating_canmove = 1)
|
||||
if((status_flags & CANWEAKEN) || ignore_canweaken)
|
||||
weakened = max(weakened + amount,0)
|
||||
if(updating_canmove)
|
||||
update_canmove() //updates lying, canmove and icons
|
||||
|
||||
/mob/proc/Paralyse(amount, updating_stat = 1)
|
||||
if(status_flags & CANPARALYSE)
|
||||
var/old_paralysis = paralysis
|
||||
paralysis = max(max(paralysis,amount),0)
|
||||
if((!old_paralysis && paralysis) || (old_paralysis && !paralysis))
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/SetParalysis(amount, updating_stat = 1)
|
||||
if(status_flags & CANPARALYSE)
|
||||
var/old_paralysis = paralysis
|
||||
paralysis = max(amount,0)
|
||||
if((!old_paralysis && paralysis) || (old_paralysis && !paralysis))
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/AdjustParalysis(amount, updating_stat = 1)
|
||||
if(status_flags & CANPARALYSE)
|
||||
var/old_paralysis = paralysis
|
||||
paralysis = max(paralysis + amount,0)
|
||||
if((!old_paralysis && paralysis) || (old_paralysis && !paralysis))
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/Sleeping(amount, updating_stat = 1)
|
||||
var/old_sleeping = sleeping
|
||||
sleeping = max(max(sleeping,amount),0)
|
||||
if(!old_sleeping && sleeping)
|
||||
throw_alert("asleep", /obj/screen/alert/asleep)
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
else if(old_sleeping && !sleeping)
|
||||
clear_alert("asleep")
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/SetSleeping(amount, updating_stat = 1)
|
||||
var/old_sleeping = sleeping
|
||||
sleeping = max(amount,0)
|
||||
if(!old_sleeping && sleeping)
|
||||
throw_alert("asleep", /obj/screen/alert/asleep)
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
else if(old_sleeping && !sleeping)
|
||||
clear_alert("asleep")
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/AdjustSleeping(amount, updating_stat = 1)
|
||||
var/old_sleeping = sleeping
|
||||
sleeping = max(sleeping + amount,0)
|
||||
if(!old_sleeping && sleeping)
|
||||
throw_alert("asleep", /obj/screen/alert/asleep)
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
else if(old_sleeping && !sleeping)
|
||||
clear_alert("asleep")
|
||||
if(updating_stat)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/Resting(amount)
|
||||
resting = max(max(resting,amount),0)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/SetResting(amount)
|
||||
resting = max(amount,0)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustResting(amount)
|
||||
resting = max(resting + amount,0)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/assess_threat() //For sec bot threat assessment
|
||||
return
|
||||
|
||||
@@ -884,14 +770,6 @@ var/next_mob_id = 0
|
||||
ghost.notify_cloning(message, sound, source)
|
||||
return ghost
|
||||
|
||||
|
||||
|
||||
/mob/proc/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/proc/setEarDamage()
|
||||
return
|
||||
|
||||
/mob/proc/AddSpell(obj/effect/proc_holder/spell/S)
|
||||
mob_spell_list += S
|
||||
S.action.Grant(src)
|
||||
@@ -1054,3 +932,4 @@ var/next_mob_id = 0
|
||||
updatehealth()
|
||||
if("resize")
|
||||
update_transform()
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/allow_upgrade = 1
|
||||
var/last_upgrade = 0
|
||||
|
||||
layer = 21
|
||||
plane = PLANE_UI_OBJECTS
|
||||
item_state = "nothing"
|
||||
w_class = 5
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
if(rand(1,2)==2)
|
||||
if(lowertext(newletter)=="o")
|
||||
newletter="u"
|
||||
if(lowertext(newletter)=="s")
|
||||
if(lowertext(newletter)=="t")
|
||||
newletter="ch"
|
||||
if(lowertext(newletter)=="a")
|
||||
newletter="ah"
|
||||
@@ -135,15 +135,15 @@
|
||||
newletter="oo"
|
||||
if(lowertext(newletter)=="c")
|
||||
newletter=" NAR "
|
||||
if(lowertext(newletter)=="t")
|
||||
if(lowertext(newletter)=="s")
|
||||
newletter=" SIE "
|
||||
if(rand(1,4)==4)
|
||||
if(newletter==" ")
|
||||
newletter=" GLORY "
|
||||
newletter=" no hope... "
|
||||
if(newletter=="H")
|
||||
newletter=" HAIL "
|
||||
newletter=" IT COMES... "
|
||||
|
||||
switch(rand(1,10))
|
||||
switch(rand(1,15))
|
||||
if(1)
|
||||
newletter="'"
|
||||
if(2)
|
||||
@@ -152,6 +152,8 @@
|
||||
newletter="fth"
|
||||
if(4)
|
||||
newletter="nglu"
|
||||
if(5)
|
||||
newletter="glor"
|
||||
newphrase+="[newletter]";counter-=1
|
||||
return newphrase
|
||||
|
||||
|
||||
@@ -0,0 +1,255 @@
|
||||
|
||||
//Here are the procs used to modify status effects of a mob.
|
||||
//The effects include: stunned, weakened, paralysis, sleeping, resting, jitteriness, dizziness, ear damage,
|
||||
// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability.
|
||||
|
||||
|
||||
/////////////////////////////////// STUNNED ////////////////////////////////////
|
||||
|
||||
/mob/proc/Stun(amount, updating = 1, ignore_canstun = 0)
|
||||
if(status_flags & CANSTUN || ignore_canstun)
|
||||
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
|
||||
if(updating)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/SetStunned(amount, updating = 1, ignore_canstun = 0) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
|
||||
if(status_flags & CANSTUN || ignore_canstun)
|
||||
stunned = max(amount,0)
|
||||
if(updating)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustStunned(amount, updating = 1, ignore_canstun = 0)
|
||||
if(status_flags & CANSTUN || ignore_canstun)
|
||||
stunned = max(stunned + amount,0)
|
||||
if(updating)
|
||||
update_canmove()
|
||||
|
||||
/////////////////////////////////// WEAKENED ////////////////////////////////////
|
||||
|
||||
/mob/proc/Weaken(amount, updating = 1, ignore_canweaken = 0)
|
||||
if((status_flags & CANWEAKEN) || ignore_canweaken)
|
||||
weakened = max(max(weakened,amount),0)
|
||||
if(updating)
|
||||
update_canmove() //updates lying, canmove and icons
|
||||
|
||||
/mob/proc/SetWeakened(amount, updating = 1, ignore_canweaken = 0)
|
||||
if(status_flags & CANWEAKEN)
|
||||
weakened = max(amount,0)
|
||||
if(updating)
|
||||
update_canmove() //updates lying, canmove and icons
|
||||
|
||||
/mob/proc/AdjustWeakened(amount, updating = 1, ignore_canweaken = 0)
|
||||
if((status_flags & CANWEAKEN) || ignore_canweaken)
|
||||
weakened = max(weakened + amount,0)
|
||||
if(updating)
|
||||
update_canmove() //updates lying, canmove and icons
|
||||
|
||||
/////////////////////////////////// PARALYSIS ////////////////////////////////////
|
||||
|
||||
/mob/proc/Paralyse(amount, updating = 1)
|
||||
if(status_flags & CANPARALYSE)
|
||||
var/old_paralysis = paralysis
|
||||
paralysis = max(max(paralysis,amount),0)
|
||||
if((!old_paralysis && paralysis) || (old_paralysis && !paralysis))
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/SetParalysis(amount, updating = 1)
|
||||
if(status_flags & CANPARALYSE)
|
||||
var/old_paralysis = paralysis
|
||||
paralysis = max(amount,0)
|
||||
if((!old_paralysis && paralysis) || (old_paralysis && !paralysis))
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/AdjustParalysis(amount, updating = 1)
|
||||
if(status_flags & CANPARALYSE)
|
||||
var/old_paralysis = paralysis
|
||||
paralysis = max(paralysis + amount,0)
|
||||
if((!old_paralysis && paralysis) || (old_paralysis && !paralysis))
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/////////////////////////////////// SLEEPING ////////////////////////////////////
|
||||
|
||||
/mob/proc/Sleeping(amount, updating = 1)
|
||||
var/old_sleeping = sleeping
|
||||
sleeping = max(max(sleeping,amount),0)
|
||||
if(!old_sleeping && sleeping)
|
||||
throw_alert("asleep", /obj/screen/alert/asleep)
|
||||
if(updating)
|
||||
update_stat()
|
||||
else if(old_sleeping && !sleeping)
|
||||
clear_alert("asleep")
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/SetSleeping(amount, updating = 1)
|
||||
var/old_sleeping = sleeping
|
||||
sleeping = max(amount,0)
|
||||
if(!old_sleeping && sleeping)
|
||||
throw_alert("asleep", /obj/screen/alert/asleep)
|
||||
if(updating)
|
||||
update_stat()
|
||||
else if(old_sleeping && !sleeping)
|
||||
clear_alert("asleep")
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/mob/proc/AdjustSleeping(amount, updating = 1)
|
||||
var/old_sleeping = sleeping
|
||||
sleeping = max(sleeping + amount,0)
|
||||
if(!old_sleeping && sleeping)
|
||||
throw_alert("asleep", /obj/screen/alert/asleep)
|
||||
if(updating)
|
||||
update_stat()
|
||||
else if(old_sleeping && !sleeping)
|
||||
clear_alert("asleep")
|
||||
if(updating)
|
||||
update_stat()
|
||||
|
||||
/////////////////////////////////// RESTING ////////////////////////////////////
|
||||
|
||||
/mob/proc/Resting(amount)
|
||||
resting = max(max(resting,amount),0)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/SetResting(amount)
|
||||
resting = max(amount,0)
|
||||
update_canmove()
|
||||
|
||||
/mob/proc/AdjustResting(amount)
|
||||
resting = max(resting + amount,0)
|
||||
update_canmove()
|
||||
|
||||
/////////////////////////////////// JITTERINESS ////////////////////////////////////
|
||||
|
||||
/mob/proc/Jitter(amount)
|
||||
jitteriness = max(jitteriness,amount,0)
|
||||
|
||||
/////////////////////////////////// DIZZINESS ////////////////////////////////////
|
||||
|
||||
/mob/proc/Dizzy(amount)
|
||||
dizziness = max(dizziness,amount,0)
|
||||
|
||||
/////////////////////////////////// EAR DAMAGE ////////////////////////////////////
|
||||
|
||||
/mob/proc/adjustEarDamage()
|
||||
return
|
||||
|
||||
/mob/proc/setEarDamage()
|
||||
return
|
||||
|
||||
/////////////////////////////////// EYE DAMAGE ////////////////////////////////////
|
||||
|
||||
/mob/proc/damage_eyes(amount)
|
||||
return
|
||||
|
||||
/mob/proc/adjust_eye_damage(amount)
|
||||
return
|
||||
|
||||
/mob/proc/set_eye_damage(amount)
|
||||
return
|
||||
|
||||
/////////////////////////////////// EYE_BLIND ////////////////////////////////////
|
||||
|
||||
/mob/proc/blind_eyes(amount)
|
||||
if(amount>0)
|
||||
var/old_eye_blind = eye_blind
|
||||
eye_blind = max(eye_blind, amount)
|
||||
if(!old_eye_blind)
|
||||
throw_alert("blind", /obj/screen/alert/blind)
|
||||
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
|
||||
|
||||
/mob/proc/adjust_blindness(amount)
|
||||
if(amount>0)
|
||||
var/old_eye_blind = eye_blind
|
||||
eye_blind += amount
|
||||
if(!old_eye_blind)
|
||||
throw_alert("blind", /obj/screen/alert/blind)
|
||||
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
|
||||
else if(eye_blind)
|
||||
var/blind_minimum = 0
|
||||
if(stat != CONSCIOUS || (disabilities & BLIND))
|
||||
blind_minimum = 1
|
||||
eye_blind = max(eye_blind+amount, blind_minimum)
|
||||
if(!eye_blind)
|
||||
clear_alert("blind")
|
||||
clear_fullscreen("blind")
|
||||
|
||||
/mob/proc/set_blindness(amount)
|
||||
if(amount>0)
|
||||
var/old_eye_blind = eye_blind
|
||||
eye_blind = amount
|
||||
if(client && !old_eye_blind)
|
||||
throw_alert("blind", /obj/screen/alert/blind)
|
||||
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)
|
||||
else if(eye_blind)
|
||||
var/blind_minimum = 0
|
||||
if(stat != CONSCIOUS || (disabilities & BLIND))
|
||||
blind_minimum = 1
|
||||
eye_blind = blind_minimum
|
||||
if(!eye_blind)
|
||||
clear_alert("blind")
|
||||
clear_fullscreen("blind")
|
||||
|
||||
/////////////////////////////////// EYE_BLURRY ////////////////////////////////////
|
||||
|
||||
/mob/proc/blur_eyes(amount)
|
||||
if(amount>0)
|
||||
var/old_eye_blurry = eye_blurry
|
||||
eye_blurry = max(amount, eye_blurry)
|
||||
if(!old_eye_blurry)
|
||||
overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
|
||||
|
||||
/mob/proc/adjust_blurriness(amount)
|
||||
var/old_eye_blurry = eye_blurry
|
||||
eye_blurry = max(eye_blurry+amount, 0)
|
||||
if(amount>0)
|
||||
if(!old_eye_blurry)
|
||||
overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
|
||||
else if(old_eye_blurry && !eye_blurry)
|
||||
clear_fullscreen("blurry")
|
||||
|
||||
/mob/proc/set_blurriness(amount)
|
||||
var/old_eye_blurry = eye_blurry
|
||||
eye_blurry = max(amount, 0)
|
||||
if(amount>0)
|
||||
if(!old_eye_blurry)
|
||||
overlay_fullscreen("blurry", /obj/screen/fullscreen/blurry)
|
||||
else if(old_eye_blurry)
|
||||
clear_fullscreen("blurry")
|
||||
|
||||
/////////////////////////////////// DRUGGY ////////////////////////////////////
|
||||
|
||||
/mob/proc/adjust_drugginess(amount)
|
||||
return
|
||||
|
||||
/mob/proc/set_drugginess(amount)
|
||||
return
|
||||
|
||||
/////////////////////////////////// BLIND DISABILITY ////////////////////////////////////
|
||||
|
||||
/mob/proc/cure_blind() //when we want to cure the BLIND disability only.
|
||||
return
|
||||
|
||||
/mob/proc/become_blind()
|
||||
return
|
||||
|
||||
/////////////////////////////////// NEARSIGHT DISABILITY ////////////////////////////////////
|
||||
|
||||
/mob/proc/cure_nearsighted()
|
||||
return
|
||||
|
||||
/mob/proc/become_nearsighted()
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -132,7 +132,6 @@
|
||||
if (W)
|
||||
W.loc = loc
|
||||
W.dropped(src)
|
||||
W.layer = initial(W.layer)
|
||||
|
||||
//Make mob invisible and spawn animation
|
||||
notransform = 1
|
||||
|
||||
@@ -121,7 +121,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
if(3)
|
||||
take_damage(rand(10,25), BRUTE, 0)
|
||||
|
||||
/obj/effect/energy_net/blob_act()
|
||||
/obj/effect/energy_net/blob_act(obj/effect/blob/B)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/energy_net/hitby(atom/movable/AM)
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/folder/syndicate
|
||||
icon_state = "folder_syndie"
|
||||
name = "folder- 'TOP SECRET'"
|
||||
desc = "A folder stamped \"Top Secret - Property of The Syndicate.\""
|
||||
|
||||
@@ -102,4 +103,9 @@
|
||||
/obj/item/weapon/folder/syndicate/blue/New()
|
||||
..()
|
||||
new /obj/item/documents/syndicate/blue(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/folder/syndicate/mining/New()
|
||||
..()
|
||||
new /obj/item/documents/syndicate/mining(src)
|
||||
update_icon()
|
||||
@@ -40,6 +40,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/paper/update_icon()
|
||||
|
||||
if(burn_state == ON_FIRE)
|
||||
icon_state = "paper_onfire"
|
||||
return
|
||||
@@ -303,11 +304,11 @@
|
||||
return
|
||||
|
||||
else if(istype(P, /obj/item/weapon/stamp))
|
||||
if(!in_range(src, usr) && loc != user && !istype(loc, /obj/item/weapon/clipboard) && loc.loc != user && user.get_active_hand() != P)
|
||||
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
|
||||
stamps += "<img src=large_[P.icon_state].png>"
|
||||
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
||||
stampoverlay.pixel_x = rand(-2, 2)
|
||||
stampoverlay.pixel_y = rand(-3, 2)
|
||||
@@ -338,7 +339,6 @@
|
||||
fire_act()
|
||||
|
||||
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/paper/fire_act()
|
||||
@@ -402,6 +402,5 @@
|
||||
/obj/item/weapon/paper/crumpled/update_icon()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/paper/crumpled/bloody
|
||||
icon_state = "scrap_bloodied"
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
/obj/item/weapon/paperplane
|
||||
name = "paper plane"
|
||||
desc = "Paper, folded in the shape of a plane"
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "paperplane"
|
||||
throw_range = 7
|
||||
throw_speed = 1
|
||||
throwforce = 0
|
||||
w_class = 1
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 4
|
||||
|
||||
var/obj/item/weapon/paper/internalPaper
|
||||
var/list/stamped = list()
|
||||
|
||||
/obj/item/weapon/paperplane/New(loc, obj/item/weapon/paper/newPaper)
|
||||
..()
|
||||
pixel_y = rand(-8, 8)
|
||||
pixel_x = rand(-9, 9)
|
||||
if(newPaper)
|
||||
internalPaper = newPaper
|
||||
src.flags = newPaper.flags
|
||||
stamped = internalPaper.stamped
|
||||
newPaper.forceMove(src)
|
||||
else
|
||||
internalPaper = new /obj/item/weapon/paper(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/paperplane/suicide_act(mob/user)
|
||||
user.Stun(10)
|
||||
user.visible_message("<span class='suicide'>[user] jams the [src] in their brains. It looks like \he's trying to commit suicide.</span>")
|
||||
user.adjust_blurriness(6)
|
||||
user.adjust_eye_damage(rand(6,8))
|
||||
sleep(10)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/paperplane/update_icon()
|
||||
overlays.Cut()
|
||||
if(!stamped)
|
||||
stamped = new
|
||||
else if(stamped)
|
||||
for(var/S in stamped)
|
||||
var/obj/item/weapon/stamp/stamp = S
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]")
|
||||
overlays += stampoverlay
|
||||
|
||||
/obj/item/weapon/paperplane/attack_self(mob/user)
|
||||
user << "<span class='notice'>You unfold [src].</span>"
|
||||
user.unEquip(src)
|
||||
user.put_in_hands(internalPaper)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/paperplane/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params)
|
||||
..()
|
||||
if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
|
||||
user << "<span class='notice'>You should unfold [src] before changing it.</span>"
|
||||
return
|
||||
|
||||
else if(istype(P, /obj/item/weapon/stamp)) //we don't randomize stamps on a paperplane
|
||||
|
||||
if (!stamped)
|
||||
stamped = new
|
||||
|
||||
stamped += P.type
|
||||
internalPaper.stamps += "<img src=large_[P.icon_state].png>" //stamps the paper inside!
|
||||
internalPaper.stamped = stamped
|
||||
internalPaper.attackby(P) //spoofed attack to update internal paper.
|
||||
user << "<span class='notice'>You stamp [src] with your rubber stamp.</span>"
|
||||
update_icon()
|
||||
|
||||
else if(P.is_hot())
|
||||
if(user.disabilities & CLUMSY && prob(10))
|
||||
user.visible_message("<span class='warning'>[user] accidentally ignites themselves!</span>", \
|
||||
"<span class='userdanger'>You miss the [src] and accidentally light yourself on fire!</span>")
|
||||
user.unEquip(P)
|
||||
user.adjust_fire_stacks(1)
|
||||
user.IgniteMob()
|
||||
return
|
||||
|
||||
if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper
|
||||
return
|
||||
internalPaper.burntime = 1 //its already pretty burnt out
|
||||
user.unEquip(src)
|
||||
user.visible_message("<span class='danger'>[user] lights [src] ablaze with [P]!</span>", "<span class='danger'>You light [src] on fire!</span>")
|
||||
fire_act()
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
|
||||
/obj/item/weapon/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=0) //prevent the paper plane from spinning
|
||||
if(!..())
|
||||
return
|
||||
|
||||
/obj/item/weapon/paperplane/throw_impact(atom/hit_atom)
|
||||
if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman
|
||||
return
|
||||
var/mob/living/carbon/human/H = hit_atom
|
||||
if(prob(15))
|
||||
if((H.head && H.head.flags_cover & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSEYES) || (H.glasses && H.glasses.flags_cover & GLASSESCOVERSEYES))
|
||||
return
|
||||
visible_message("<span class='danger'>\The [src] hits [H] in the eye!</span>")
|
||||
H.adjust_blurriness(6)
|
||||
H.adjust_eye_damage(rand(6,8))
|
||||
H.Weaken(2)
|
||||
H.emote("scream")
|
||||
|
||||
/obj/item/weapon/paper/AltClick(mob/living/carbon/user, obj/item/I,)
|
||||
if((!in_range(src, user)) || usr.stat || usr.restrained())
|
||||
return
|
||||
user << "<span class='notice'>You fold [src] into the shape of a plane!</span>"
|
||||
user.unEquip(src)
|
||||
I = new /obj/item/weapon/paperplane(loc, src)
|
||||
user.put_in_hands(I)
|
||||
@@ -309,7 +309,7 @@
|
||||
toner = 0
|
||||
|
||||
|
||||
/obj/machinery/photocopier/blob_act()
|
||||
/obj/machinery/photocopier/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
var/atom/c = atoms[i]
|
||||
for(j = sorted.len, j > 0, --j)
|
||||
var/atom/c2 = sorted[j]
|
||||
if(c2.layer <= c.layer)
|
||||
if(c2.layer <= c.layer)//needs updating to account for plane
|
||||
break
|
||||
sorted.Insert(j+1, c)
|
||||
|
||||
|
||||
@@ -1095,7 +1095,7 @@
|
||||
if(prob(25))
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/power/apc/blob_act()
|
||||
/obj/machinery/power/apc/blob_act(obj/effect/blob/B)
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/power/apc/disconnect_terminal()
|
||||
|
||||
@@ -28,7 +28,7 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
on_blueprints = TRUE
|
||||
var/datum/powernet/powernet
|
||||
name = "power cable"
|
||||
desc = "A flexible, superconducting cable for heavy-duty power transfer."
|
||||
desc = "A flexible, superconducting insulated cable for heavy-duty power transfer."
|
||||
icon = 'icons/obj/power_cond/power_cond_red.dmi'
|
||||
icon_state = "0-1"
|
||||
var/d1 = 0 // cable direction 1 (see above)
|
||||
@@ -151,10 +151,6 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
user << "<span class='danger'>The cable is not powered.</span>"
|
||||
shock(user, 5, 0.2)
|
||||
|
||||
else
|
||||
if (W.flags & CONDUCT)
|
||||
shock(user, 50, 0.7)
|
||||
|
||||
src.add_fingerprint(user)
|
||||
|
||||
// shock the user with probability prb
|
||||
@@ -469,7 +465,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \
|
||||
amount = MAXCOIL
|
||||
merge_type = /obj/item/stack/cable_coil // This is here to let its children merge between themselves
|
||||
item_color = "red"
|
||||
desc = "A coil of power cable."
|
||||
desc = "A coil of insulated power cable."
|
||||
throwforce = 0
|
||||
w_class = 2
|
||||
throw_speed = 3
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
corrupt()
|
||||
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/blob_act()
|
||||
/obj/item/weapon/stock_parts/cell/blob_act(obj/effect/blob/B)
|
||||
ex_act(1)
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/proc/get_electrocute_damage()
|
||||
|
||||
@@ -32,7 +32,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
if(severity == 1) // Very sturdy.
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/gravity_generator/blob_act()
|
||||
/obj/machinery/gravity_generator/blob_act(obj/effect/blob/B)
|
||||
if(prob(20))
|
||||
set_broken()
|
||||
|
||||
|
||||
@@ -118,7 +118,6 @@ var/global/list/rad_collectors = list()
|
||||
if (!Z)
|
||||
return
|
||||
Z.loc = get_turf(src)
|
||||
Z.layer = initial(Z.layer)
|
||||
src.loaded_tank = null
|
||||
if(active)
|
||||
toggle_power()
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/field/containment/blob_act()
|
||||
/obj/machinery/field/containment/blob_act(obj/effect/blob/B)
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ field_generator power level display
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/field/generator/blob_act()
|
||||
/obj/machinery/field/generator/blob_act(obj/effect/blob/B)
|
||||
if(active)
|
||||
return 0
|
||||
else
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
master.toggle_power()
|
||||
investigate_log("was moved whilst active; it <font color='red'>powered down</font>.","singulo")
|
||||
|
||||
/obj/structure/particle_accelerator/blob_act()
|
||||
/obj/structure/particle_accelerator/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -320,7 +320,7 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/blob_act()
|
||||
/obj/machinery/particle_accelerator/control_box/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
/obj/singularity/Process_Spacemove() //The singularity stops drifting for no man!
|
||||
return 0
|
||||
|
||||
/obj/singularity/blob_act(severity)
|
||||
/obj/singularity/blob_act(obj/effect/blob/B)
|
||||
return
|
||||
|
||||
/obj/singularity/ex_act(severity, target)
|
||||
|
||||
@@ -537,7 +537,7 @@
|
||||
if(3)
|
||||
take_damage(rand(10,20), BRUTE, 0)
|
||||
|
||||
/obj/machinery/power/solar_control/blob_act()
|
||||
/obj/machinery/power/solar_control/blob_act(obj/effect/blob/B)
|
||||
if (prob(75))
|
||||
set_broken()
|
||||
src.density = 0
|
||||
|
||||
@@ -225,6 +225,19 @@
|
||||
qdel(src)
|
||||
return(gain)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/blob_act(obj/effect/blob/B)
|
||||
if(B && !istype(loc, /turf/open/space)) //does nothing in space
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
damage += B.health * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us
|
||||
if(B.health > 100)
|
||||
B.visible_message("<span class='danger'>\The [B] strikes at \the [src] and flinches away!</span>",\
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
B.take_damage(100, BURN, src)
|
||||
else
|
||||
B.visible_message("<span class='danger'>\The [B] strikes at \the [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
Consume(B)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -293,7 +306,7 @@
|
||||
investigate_log("has consumed [key_name(user)].", "supermatter")
|
||||
user.dust()
|
||||
power += 200
|
||||
else if(isobj(AM) && !istype(AM, /obj/effect))
|
||||
else if(isobj(AM) && (!istype(AM, /obj/effect) || istype(AM, /obj/effect/blob)))
|
||||
investigate_log("has consumed [AM].", "supermatter")
|
||||
qdel(AM)
|
||||
|
||||
|
||||
@@ -142,8 +142,10 @@
|
||||
max_charges = 20 //20, 10, 10, 7
|
||||
no_den_usage = 1
|
||||
|
||||
/obj/item/weapon/gun/magic/wand/door/zap_self()
|
||||
return
|
||||
/obj/item/weapon/gun/magic/wand/door/zap_self(mob/living/user)
|
||||
user << "<span class='notice'>You feel vaguely more open with your feelings.</span>"
|
||||
charges--
|
||||
..()
|
||||
|
||||
/////////////////////////////////////
|
||||
//WAND OF FIREBALL
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
/obj/structure/mineral_door/gold,/obj/structure/mineral_door/uranium,/obj/structure/mineral_door/sandstone,/obj/structure/mineral_door/transparent/plasma,\
|
||||
/obj/structure/mineral_door/transparent/diamond)
|
||||
|
||||
|
||||
/obj/item/projectile/magic/door/on_hit(atom/target)
|
||||
. = ..()
|
||||
var/atom/T = target.loc
|
||||
@@ -105,12 +106,20 @@
|
||||
CreateDoor(target)
|
||||
else if (isturf(T) && T.density)
|
||||
CreateDoor(T)
|
||||
else if(istype(target, /obj/machinery/door))
|
||||
OpenDoor(target)
|
||||
|
||||
/obj/item/projectile/magic/door/proc/CreateDoor(turf/T)
|
||||
var/door_type = pick(door_types)
|
||||
new door_type(T)
|
||||
var/obj/structure/mineral_door/D = new door_type(T)
|
||||
T.ChangeTurf(/turf/open/floor/plating)
|
||||
D.Open()
|
||||
|
||||
/obj/item/projectile/magic/door/proc/OpenDoor(var/obj/machinery/door/D)
|
||||
if(istype(D,/obj/machinery/door/airlock))
|
||||
var/obj/machinery/door/airlock/A = D
|
||||
A.locked = 0
|
||||
D.open()
|
||||
|
||||
/obj/item/projectile/magic/change
|
||||
name = "bolt of change"
|
||||
@@ -322,4 +331,4 @@
|
||||
else if(istype(change, /mob/living/simple_animal/hostile/mimic/copy))
|
||||
// Change our allegiance!
|
||||
var/mob/living/simple_animal/hostile/mimic/copy/C = change
|
||||
C.ChangeOwner(firer)
|
||||
C.ChangeOwner(firer)
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
if(severity < 3)
|
||||
..()
|
||||
|
||||
/obj/machinery/chem_dispenser/blob_act()
|
||||
/obj/machinery/chem_dispenser/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
if(severity < 3)
|
||||
..()
|
||||
|
||||
/obj/machinery/chem_master/blob_act()
|
||||
/obj/machinery/chem_master/blob_act(obj/effect/blob/B)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -416,7 +416,7 @@
|
||||
if(isliving(cause))
|
||||
B.visible_message("<span class='warning'><b>The blob retaliates, lashing out!</b></span>")
|
||||
for(var/atom/A in range(1, B))
|
||||
A.blob_act()
|
||||
A.blob_act(B)
|
||||
return ..()
|
||||
|
||||
//does low burn damage and stamina damage and cools targets down
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
M << "<span class='notice'>[high_message]</span>"
|
||||
M.AdjustParalysis(-1, 0)
|
||||
M.AdjustStunned(-1, 0)
|
||||
M.AdjustWeakened(-1, 0, 0)
|
||||
M.AdjustWeakened(-1, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
M << "<span class='notice'>[high_message]</span>"
|
||||
M.AdjustParalysis(-2, 0)
|
||||
M.AdjustStunned(-2, 0)
|
||||
M.AdjustWeakened(-2, 0, 0)
|
||||
M.AdjustWeakened(-2, 0)
|
||||
M.adjustStaminaLoss(-2, 0)
|
||||
M.status_flags |= GOTTAGOREALLYFAST
|
||||
M.Jitter(2)
|
||||
@@ -237,7 +237,7 @@
|
||||
M << "<span class='notice'>[high_message]</span>"
|
||||
M.AdjustParalysis(-3, 0)
|
||||
M.AdjustStunned(-3, 0)
|
||||
M.AdjustWeakened(-3, 0, 0)
|
||||
M.AdjustWeakened(-3, 0)
|
||||
M.adjustStaminaLoss(-5, 0)
|
||||
M.adjustBrainLoss(0.5)
|
||||
M.adjustToxLoss(0.1, 0)
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
M.drowsyness = max(M.drowsyness-5, 0)
|
||||
M.AdjustParalysis(-1, 0)
|
||||
M.AdjustStunned(-1, 0)
|
||||
M.AdjustWeakened(-1, 0, 0)
|
||||
M.AdjustWeakened(-1, 0)
|
||||
if(holder.has_reagent("mindbreaker"))
|
||||
holder.remove_reagent("mindbreaker", 5)
|
||||
M.hallucination = max(0, M.hallucination - 10)
|
||||
@@ -493,7 +493,7 @@
|
||||
M.status_flags |= GOTTAGOFAST
|
||||
M.AdjustParalysis(-1, 0)
|
||||
M.AdjustStunned(-1, 0)
|
||||
M.AdjustWeakened(-1, 0, 0)
|
||||
M.AdjustWeakened(-1, 0)
|
||||
M.adjustStaminaLoss(-1*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
@@ -703,7 +703,7 @@
|
||||
if(prob(20))
|
||||
M.AdjustParalysis(-1, 0)
|
||||
M.AdjustStunned(-1, 0)
|
||||
M.AdjustWeakened(-1, 0, 0)
|
||||
M.AdjustWeakened(-1, 0)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/epinephrine/overdose_process(mob/living/M)
|
||||
@@ -807,7 +807,7 @@
|
||||
M.adjustFireLoss(-1*REM, 0)
|
||||
M.AdjustParalysis(-3, 0)
|
||||
M.AdjustStunned(-3, 0)
|
||||
M.AdjustWeakened(-3, 0, 0)
|
||||
M.AdjustWeakened(-3, 0)
|
||||
M.adjustStaminaLoss(-5*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
@@ -1036,7 +1036,7 @@ datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
|
||||
/datum/reagent/medicine/changelingAdrenaline/on_mob_life(mob/living/M as mob)
|
||||
M.AdjustParalysis(-1, 0)
|
||||
M.AdjustStunned(-1, 0)
|
||||
M.AdjustWeakened(-1, 0, 0)
|
||||
M.AdjustWeakened(-1, 0)
|
||||
M.adjustStaminaLoss(-1, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -147,16 +147,13 @@
|
||||
// Monkey cube
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
|
||||
if(!cube.wrapped)
|
||||
cube.Expand()
|
||||
cube.Expand()
|
||||
|
||||
// Dehydrated carp
|
||||
else if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
|
||||
var/obj/item/toy/carpplushie/dehy_carp/dehy = O
|
||||
dehy.Swell() // Makes a carp
|
||||
|
||||
return
|
||||
|
||||
/*
|
||||
* Water reaction to a mob
|
||||
*/
|
||||
@@ -220,7 +217,7 @@
|
||||
M.drowsyness = max(M.drowsyness-5, 0)
|
||||
M.AdjustParalysis(-2, 0)
|
||||
M.AdjustStunned(-2, 0)
|
||||
M.AdjustWeakened(-2, 0, 0)
|
||||
M.AdjustWeakened(-2, 0)
|
||||
else
|
||||
M.adjustToxLoss(2, 0)
|
||||
M.adjustFireLoss(2, 0)
|
||||
@@ -369,7 +366,7 @@
|
||||
..()
|
||||
H << "<span class='warning'><b>You crumple in agony as your flesh wildly morphs into new forms!</b></span>"
|
||||
H.visible_message("<b>[H]</b> falls to the ground and screams as their skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
|
||||
H.Weaken(3, 0, 0)
|
||||
H.Weaken(3, 0)
|
||||
spawn(30)
|
||||
if(!H || qdeleted(H))
|
||||
return
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
/datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/carbon/M)
|
||||
M.status_flags |= FAKEDEATH
|
||||
M.adjustOxyLoss(0.5*REM, 0)
|
||||
M.Weaken(5, 0, 0)
|
||||
M.Weaken(5, 0)
|
||||
M.silent = max(M.silent, 5)
|
||||
M.tod = worldtime2text()
|
||||
..()
|
||||
@@ -492,7 +492,7 @@
|
||||
switch(picked_option)
|
||||
if(1)
|
||||
M.Stun(3, 0)
|
||||
M.Weaken(3, 0, 0)
|
||||
M.Weaken(3, 0)
|
||||
. = 1
|
||||
if(2)
|
||||
M.losebreath += 10
|
||||
@@ -611,7 +611,7 @@
|
||||
|
||||
/datum/reagent/toxin/curare/on_mob_life(mob/living/M)
|
||||
if(current_cycle >= 11)
|
||||
M.Weaken(3, 0, 0)
|
||||
M.Weaken(3, 0)
|
||||
M.adjustOxyLoss(1*REM, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/blob_act()
|
||||
/obj/structure/reagent_dispensers/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/blob_act()
|
||||
/obj/structure/reagent_dispensers/watertank/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
PoolOrNew(/obj/effect/particle_effect/water, loc)
|
||||
qdel(src)
|
||||
@@ -98,7 +98,7 @@
|
||||
if(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/blob_act()
|
||||
/obj/structure/reagent_dispensers/fueltank/blob_act(obj/effect/blob/B)
|
||||
boom()
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
..()
|
||||
reagents.add_reagent("beer",1000)
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg/blob_act()
|
||||
/obj/structure/reagent_dispensers/beerkeg/blob_act(obj/effect/blob/B)
|
||||
explosion(src.loc,0,3,5,7,10)
|
||||
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
T += M.rating
|
||||
efficiency_coeff = 2 ** (T - 1) //Only 1 manipulator here, you're making runtimes Razharas
|
||||
|
||||
/obj/machinery/r_n_d/circuit_imprinter/blob_act()
|
||||
/obj/machinery/r_n_d/circuit_imprinter/blob_act(obj/effect/blob/B)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/r_n_d/server/blob_act()
|
||||
/obj/machinery/r_n_d/server/blob_act(obj/effect/blob/B)
|
||||
griefProtection()
|
||||
..()
|
||||
|
||||
|
||||
@@ -536,7 +536,7 @@
|
||||
var/mob/living/M = A
|
||||
if(M in immune)
|
||||
continue
|
||||
M.stunned = 10
|
||||
M.Stun(10, 1, 1)
|
||||
M.anchored = 1
|
||||
if(istype(M, /mob/living/simple_animal/hostile))
|
||||
var/mob/living/simple_animal/hostile/H = M
|
||||
@@ -566,7 +566,7 @@
|
||||
|
||||
|
||||
/obj/effect/timestop/proc/unfreeze_mob(mob/living/M)
|
||||
M.stunned = 0
|
||||
M.AdjustStunned(-10, 1, 1)
|
||||
M.anchored = 0
|
||||
if(istype(M, /mob/living/simple_animal/hostile))
|
||||
var/mob/living/simple_animal/hostile/H = M
|
||||
|
||||
@@ -25,4 +25,23 @@
|
||||
|
||||
|
||||
|
||||
/area/ruin/powered/snow_biodome
|
||||
/area/ruin/powered/snow_biodome
|
||||
|
||||
|
||||
// Ruins of "onehalf" ship
|
||||
/area/ruin/onehalf/hallway
|
||||
name = "Hallway"
|
||||
icon_state = "hallC"
|
||||
|
||||
|
||||
/area/ruin/onehalf/drone_bay
|
||||
name = "Mining Drone Bay"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/ruin/onehalf/dorms_med
|
||||
name = "Crew Quarters"
|
||||
icon_state = "Sleep"
|
||||
|
||||
/area/ruin/onehalf/bridge
|
||||
name = "Bridge"
|
||||
icon_state = "bridge"
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/docking_port/mobile/supply
|
||||
name = "supply shuttle"
|
||||
id = "supply"
|
||||
callTime = 10
|
||||
callTime = 1200
|
||||
|
||||
dir = 8
|
||||
travelDir = 90
|
||||
@@ -27,7 +27,7 @@
|
||||
var/list/storage_objects = list(
|
||||
/obj/structure/closet,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/weapon/moneybag,
|
||||
/obj/item/weapon/storage/bag/money,
|
||||
/obj/item/weapon/folder, // Selling a folder of stamped manifests? Sure, why not!
|
||||
/obj/structure/filingcabinet,
|
||||
/obj/structure/ore_box,
|
||||
@@ -153,4 +153,4 @@
|
||||
for(var/obj/thing in O)
|
||||
sold_atoms += recursive_sell(thing, level)
|
||||
qdel(O)
|
||||
return sold_atoms
|
||||
return sold_atoms
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_screen = "stock_computer"
|
||||
icon_keyboard = "no_keyboard"
|
||||
var/logged_in = "Cargo Department"
|
||||
var/vmode = 0
|
||||
var/vmode = 1
|
||||
|
||||
/obj/machinery/computer/stockexchange/New()
|
||||
..()
|
||||
@@ -22,35 +22,47 @@
|
||||
user.machine = src
|
||||
|
||||
var/css={"<style>
|
||||
.company {
|
||||
.change {
|
||||
font-weight: bold;
|
||||
font-family: monospace;
|
||||
}
|
||||
.up {
|
||||
background: #00a000;
|
||||
}
|
||||
.down {
|
||||
background: #a00000;
|
||||
}
|
||||
.stable {
|
||||
width: 100%
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.stable tr {
|
||||
border: none;
|
||||
border: 1px solid #305260;
|
||||
border-spacing: 4px 4px;
|
||||
}
|
||||
.stable td, .stable th {
|
||||
border-right: 1px solid white;
|
||||
border-bottom: 1px solid black;
|
||||
border: 1px solid #305260;
|
||||
padding: 0px 3px;
|
||||
}
|
||||
.bankrupt {
|
||||
border: 1px solid #a00000;
|
||||
background: #a00000;
|
||||
}
|
||||
|
||||
a.updated {
|
||||
color: red;
|
||||
}
|
||||
</style>"}
|
||||
var/dat = "<html><head><title>[station_name()] Stock Exchange</title>[css]</head><body><h2>Stock Exchange</h2>"
|
||||
dat += "<i>This is a work in progress. Certain features may not be available.</i><br>"
|
||||
var/dat = "<html><head><title>[station_name()] Stock Exchange</title>[css]</head><body>"
|
||||
|
||||
dat += "<span class='user'>Welcome, <b>[logged_in]</b></span><br><span class='balance'><b>Cargo Points:</b> [balance()] points</span><br>"
|
||||
dat += "<span class='user'>Welcome, <b>[logged_in]</b></span><br><span class='balance'><b>Credits:</b> [balance()] </span><br>"
|
||||
for (var/datum/stock/S in stockExchange.last_read)
|
||||
var/list/LR = stockExchange.last_read[S]
|
||||
if (!(logged_in in LR))
|
||||
LR[logged_in] = 0
|
||||
dat += "<b>View mode:</b> <a href='?src=\ref[src];cycleview=1'>[vmode ? "compact" : "full"]</a>"
|
||||
dat += "<b>Stock Transaction Log:</b> <a href='?src=\ref[src];show_logs=1'>Check</a>"
|
||||
dat += "<b>View mode:</b> <a href='?src=\ref[src];cycleview=1'>[vmode ? "Compact" : "Full"]</a> "
|
||||
dat += "<b>Stock Transaction Log:</b> <a href='?src=\ref[src];show_logs=1'>Check</a><br>"
|
||||
|
||||
dat += "<i>This is a work in progress. Certain features may not be available.</i>"
|
||||
|
||||
dat += "<h3>Listed stocks</h3>"
|
||||
|
||||
if (vmode == 0)
|
||||
@@ -105,15 +117,40 @@ a.updated {
|
||||
dat += "<a href='?src=\ref[src];archive=\ref[S]'>View news archives</a>[news ? " <span style='color:red'>(updated)</span>" : null]</div>"
|
||||
else if (vmode == 1)
|
||||
dat += "<b>Actions:</b> + Buy, - Sell, (A)rchives, (H)istory<br><br>"
|
||||
dat += "<table class='stable'><tr><th> </th><th>Name</th><th>Value</th><th>Owned/Avail</th><th>Actions</th></tr>"
|
||||
dat += "<table class='stable'>"
|
||||
dat += "<tr><th> </th><th>ID</th><th>Name</th><th>Value</th><th>Owned</th><th>Avail</th><th>Actions</th></tr>"
|
||||
|
||||
for (var/datum/stock/S in stockExchange.stocks)
|
||||
var/mystocks = 0
|
||||
if (logged_in && (logged_in in S.shareholders))
|
||||
mystocks = S.shareholders[logged_in]
|
||||
dat += "<tr><td>[S.disp_value_change > 0 ? "+" : (S.disp_value_change < 0 ? "-" : "=")]</td><td><span class='company'>[S.name] "
|
||||
if (S.bankrupt)
|
||||
dat += "<b style='color:red'>B</b>"
|
||||
dat += "</span> <span class='s_company'>([S.short_name])</span></td><td>[S.current_value]</td><td><b>[mystocks]</b>/[S.available_shares]</td>"
|
||||
|
||||
if(S.bankrupt)
|
||||
dat += "<tr class='bankrupt'>"
|
||||
else
|
||||
dat += "<tr>"
|
||||
|
||||
if(S.disp_value_change > 0)
|
||||
dat += "<td class='change up'>+</td>"
|
||||
else if(S.disp_value_change < 0)
|
||||
dat += "<td class='change down'>-</td>"
|
||||
else
|
||||
dat += "<td class='change'>=</td>"
|
||||
|
||||
dat += "<td><b>[S.short_name]</b></td>"
|
||||
dat += "<td>[S.name]</td>"
|
||||
|
||||
if(!S.bankrupt)
|
||||
dat += "<td>[S.current_value]</td>"
|
||||
else
|
||||
dat += "<td>0</td>"
|
||||
|
||||
if(mystocks)
|
||||
dat += "<td><b>[mystocks]</b></td>"
|
||||
else
|
||||
dat += "<td>0</td>"
|
||||
|
||||
dat += "<td>[S.available_shares]</td>"
|
||||
var/news = 0
|
||||
if (logged_in)
|
||||
var/list/LR = stockExchange.last_read[S]
|
||||
@@ -129,12 +166,17 @@ a.updated {
|
||||
break
|
||||
dat += "<td>"
|
||||
if (S.bankrupt)
|
||||
dat += "+ - "
|
||||
dat += "<span class='linkOff'>+</span> <span class='linkOff'>-</span> "
|
||||
else
|
||||
dat += "<a href='?src=\ref[src];buyshares=\ref[S]'>+</a> <a href='?src=\ref[src];sellshares=\ref[S]'>-</a> "
|
||||
dat += "<a href='?src=\ref[src];archive=\ref[S]' class='[news ? "updated" : "default"]'>(A)</a> <a href='?src=\ref[src];viewhistory=\ref[S]'>(H)</a></td></tr>"
|
||||
dat += "<a href='?src=\ref[src];archive=\ref[S]' class='[news ? "updated" : "default"]'>(A)</a> <a href='?src=\ref[src];viewhistory=\ref[S]'>(H)</a></td>"
|
||||
|
||||
dat += "</tr>"
|
||||
|
||||
dat += "</table>"
|
||||
|
||||
dat += "</body></html>"
|
||||
var/datum/browser/popup = new(user, "computer", "Stock Exchange", 600, 400)
|
||||
var/datum/browser/popup = new(user, "computer", "Stock Exchange", 600, 600)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
@@ -153,27 +195,25 @@ a.updated {
|
||||
user << "<span class='danger'>This account does not own any shares of [S.name]!</span>"
|
||||
return
|
||||
var/price = S.current_value
|
||||
var/amt = round(input(user, "How many shares? (Have: [avail], unit price: [price])", "Sell shares in [S.name]", 0) as num|null)
|
||||
if (!user)
|
||||
var/amt = round(input(user, "How many shares? \n(Have: [avail], unit price: [price])", "Sell shares in [S.name]", 0) as num|null)
|
||||
amt = min(amt, S.shareholders[logged_in])
|
||||
|
||||
if (!user || !(user in range(1, src)))
|
||||
return
|
||||
if (!amt)
|
||||
return
|
||||
if (!(user in range(1, src)))
|
||||
return
|
||||
if (li != logged_in)
|
||||
return
|
||||
b = SSshuttle.points
|
||||
if (!isnum(b))
|
||||
user << "<span class='danger'>No active account on the console!</span>"
|
||||
return
|
||||
if (amt > S.shareholders[logged_in])
|
||||
user << "<span class='danger'>You do not own that many shares!</span>"
|
||||
return
|
||||
|
||||
var/total = amt * S.current_value
|
||||
if (!S.sellShares(logged_in, amt))
|
||||
user << "<span class='danger'>Could not complete transaction.</span>"
|
||||
return
|
||||
user << "<span class='notice'>Sold [amt] shares of [S.name] at [S.current_value] a share for [total] points.</span>"
|
||||
user << "<span class='notice'>Sold [amt] shares of [S.name] at [S.current_value] a share for [total] credits.</span>"
|
||||
stockExchange.add_log(/datum/stock_log/sell, user.name, S.name, amt, S.current_value, total)
|
||||
|
||||
/obj/machinery/computer/stockexchange/proc/buy_some_shares(var/datum/stock/S, var/mob/user)
|
||||
@@ -190,12 +230,8 @@ a.updated {
|
||||
var/avail = S.available_shares
|
||||
var/price = S.current_value
|
||||
var/canbuy = round(b / price)
|
||||
var/amt = round(input(user, "How many shares? (Available: [avail], unit price: [price], can buy: [canbuy])", "Buy shares in [S.name]", 0) as num|null)
|
||||
if (!user)
|
||||
return
|
||||
if (!amt)
|
||||
return
|
||||
if (!(user in range(1, src)))
|
||||
var/amt = round(input(user, "How many shares? \n(Available: [avail], unit price: [price], can buy: [canbuy])", "Buy shares in [S.name]", 0) as num|null)
|
||||
if (!user || !(user in range(1, src)))
|
||||
return
|
||||
if (li != logged_in)
|
||||
return
|
||||
@@ -203,17 +239,16 @@ a.updated {
|
||||
if (!isnum(b))
|
||||
user << "<span class='danger'>No active account on the console!</span>"
|
||||
return
|
||||
if (amt > S.available_shares)
|
||||
user << "<span class='danger'>That many shares are not available!</span>"
|
||||
return
|
||||
var/total = amt * S.current_value
|
||||
if (total > b)
|
||||
user << "<span class='danger'>Insufficient points.</span>"
|
||||
|
||||
amt = min(amt, S.available_shares, round(b / S.current_value))
|
||||
if (!amt)
|
||||
return
|
||||
if (!S.buyShares(logged_in, amt))
|
||||
user << "<<span class='danger'>Could not complete transaction.</span>"
|
||||
return
|
||||
user << "<span class='notice'>Bought [amt] shares of [S.name] at [S.current_value] a share for [total] points.</span>"
|
||||
|
||||
var/total = amt * S.current_value
|
||||
user << "<span class='notice'>Bought [amt] shares of [S.name] at [S.current_value] a share for [total] credits.</span>"
|
||||
stockExchange.add_log(/datum/stock_log/buy, user.name, S.name, amt, S.current_value, total)
|
||||
|
||||
/obj/machinery/computer/stockexchange/proc/do_borrowing_deal(var/datum/borrow/B, var/mob/user)
|
||||
@@ -261,7 +296,7 @@ a.updated {
|
||||
dat += "[L.time] | <b>[L.user_name]</b> bought <b>[L.stocks]</b> stocks at [L.shareprice] a share for <b>[L.money]</b> total credits in <b>[L.company_name]</b>.<br>"
|
||||
continue
|
||||
if(istype(L, /datum/stock_log/sell))
|
||||
dat += "[L.time] | <b>[L.user_name]</b> sold <b>[L.stocks]</b> stocks at [L.shareprice] a share for <b>[L.money]</b> totalcredits from <b>[L.company_name]</b>.<br>"
|
||||
dat += "[L.time] | <b>[L.user_name]</b> sold <b>[L.stocks]</b> stocks at [L.shareprice] a share for <b>[L.money]</b> total credits from <b>[L.company_name]</b>.<br>"
|
||||
continue
|
||||
if(istype(L, /datum/stock_log/borrow))
|
||||
dat += "[L.time] | <b>[L.user_name]</b> borrowed <b>[L.stocks]</b> stocks with a deposit of <b>[L.money]</b> credits in <b>[L.company_name]</b>.<br>"
|
||||
|
||||
@@ -139,7 +139,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
|
||||
desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \
|
||||
with suppressors."
|
||||
item = /obj/item/weapon/gun/projectile/automatic/pistol
|
||||
cost = 9
|
||||
cost = 7
|
||||
|
||||
/datum/uplink_item/dangerous/revolver
|
||||
name = "Syndicate Revolver"
|
||||
@@ -790,7 +790,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
|
||||
for rapid healing, a medical HUD for quick identification of injured personnel, \
|
||||
and other supplies helpful for a field medic."
|
||||
item = /obj/item/weapon/storage/firstaid/tactical
|
||||
cost = 9
|
||||
cost = 4
|
||||
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
|
||||
|
||||
/datum/uplink_item/device_tools/thermal
|
||||
@@ -839,7 +839,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
|
||||
during gravitational generator failures. These reverse-engineered knockoffs of Nanotrasen's \
|
||||
'Advanced Magboots' slow you down in simulated-gravity environments much like the standard issue variety."
|
||||
item = /obj/item/clothing/shoes/magboots/syndie
|
||||
cost = 3
|
||||
cost = 2
|
||||
include_modes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/device_tools/c4
|
||||
@@ -862,7 +862,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
|
||||
load on the grid, causing a stationwide blackout. The sink is large and cannot be stored in most \
|
||||
traditional bags and boxes."
|
||||
item = /obj/item/device/powersink
|
||||
cost = 10
|
||||
cost = 6
|
||||
|
||||
/datum/uplink_item/device_tools/singularity_beacon
|
||||
name = "Power Beacon"
|
||||
@@ -901,7 +901,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
|
||||
of humanoids. It has two settings: intensity, which controls the power of the radiation, \
|
||||
and wavelength, which controls how long the radiation delay is."
|
||||
item = /obj/item/device/rad_laser
|
||||
cost = 5
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/device_tools/assault_pod
|
||||
name = "Assault Pod Targetting Device"
|
||||
|
||||
Reference in New Issue
Block a user