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 lavaland_cuisine
This commit is contained in:
@@ -462,7 +462,7 @@ var/list/admin_verbs_hideable = list(
|
||||
holder.fakekey = new_key
|
||||
createStealthKey()
|
||||
if(isobserver(mob))
|
||||
mob.invisibility = INVISIBILITY_MAXIMUM + 1 //JUST IN CASE
|
||||
mob.invisibility = INVISIBILITY_ABSTRACT //JUST IN CASE
|
||||
mob.alpha = 0 //JUUUUST IN CASE
|
||||
mob.name = " "
|
||||
mob.mouse_opacity = 0
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
left--
|
||||
if(left < 1)
|
||||
if(!(visible))
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
else
|
||||
invisibility = 0
|
||||
else
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -491,7 +491,8 @@ var/list/gaslist_cache = null
|
||||
|
||||
/datum/gas_mixture/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity)
|
||||
//transfer of thermal energy (via conduction) between self and sharer
|
||||
sharer_temperature = sharer_temperature || sharer.temperature_archived
|
||||
if(sharer)
|
||||
sharer_temperature = sharer.temperature_archived
|
||||
var/temperature_delta = temperature_archived - sharer_temperature
|
||||
if(abs(temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/self_heat_capacity = heat_capacity_archived()
|
||||
@@ -502,7 +503,7 @@ var/list/gaslist_cache = null
|
||||
(self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity))
|
||||
|
||||
temperature = max(temperature - heat/self_heat_capacity, TCMB)
|
||||
sharer_temperature = max(sharer.temperature + heat/sharer_heat_capacity, TCMB)
|
||||
sharer_temperature = max(sharer_temperature + heat/sharer_heat_capacity, TCMB)
|
||||
if(sharer)
|
||||
sharer.temperature = sharer_temperature
|
||||
return sharer_temperature
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/pipe/hide(i)
|
||||
if(level == 1 && istype(loc, /turf))
|
||||
invisibility = i ? 101 : 0
|
||||
invisibility = i ? INVISIBILITY_MAXIMUM : 0
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -189,7 +189,7 @@ var/sc_safecode5 = "[rand(0,9)]"
|
||||
for(var/obj/O in T.contents)
|
||||
if(O.level != 1)
|
||||
continue
|
||||
if(O.invisibility == 101)
|
||||
if(O.invisibility == INVISIBILITY_MAXIMUM)
|
||||
src.consume(O)
|
||||
T.ChangeTurf(/turf/open/space)
|
||||
return
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
if(O.level != 1)
|
||||
continue
|
||||
|
||||
if(O.invisibility == 101)
|
||||
if(O.invisibility == INVISIBILITY_MAXIMUM)
|
||||
O.invisibility = 0
|
||||
invis_objects += O
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
invis_objects -= O
|
||||
var/turf/T = O.loc
|
||||
if(T && T.intact)
|
||||
O.invisibility = 101
|
||||
O.invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/proc/t_ray_on()
|
||||
if(!istype(loc,/mob/living/carbon/human))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
name = "Chronosuit View"
|
||||
density = 0
|
||||
anchored = 1
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
opacity = 0
|
||||
mouse_opacity = 0
|
||||
var/mob/holder = null
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -438,7 +438,7 @@
|
||||
|
||||
|
||||
/obj/effect/spacevine_controller
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
var/list/obj/effect/spacevine/vines = list()
|
||||
var/list/growth_queue = list()
|
||||
var/spread_multiplier = 5
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
@@ -7,7 +7,7 @@
|
||||
/obj/effect/holodeck_effect
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
icon_state = "x2"
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
|
||||
/obj/effect/holodeck_effect/proc/activate(var/obj/machinery/computer/holodeck/HC)
|
||||
return
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -862,6 +862,7 @@
|
||||
throw_range = 5
|
||||
var/loaded = 1
|
||||
var/malfunctioning = 0
|
||||
var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it
|
||||
origin_tech = "biotech=4"
|
||||
|
||||
/obj/item/weapon/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag)
|
||||
@@ -870,6 +871,9 @@
|
||||
if(istype(target, /mob/living) && proximity_flag)
|
||||
if(istype(target, /mob/living/simple_animal))
|
||||
var/mob/living/simple_animal/M = target
|
||||
if(M.sentience_type != revive_type)
|
||||
user << "<span class='info'>[src] does not work on this sort of creature.</span>"
|
||||
return
|
||||
if(M.stat == DEAD)
|
||||
M.faction = list("neutral")
|
||||
M.revive(full_heal = 1, admin_revive = 1)
|
||||
|
||||
@@ -96,5 +96,5 @@
|
||||
N.icon_state = initial(N.icon_state)
|
||||
N.icon = 'icons/turf/areas.dmi'
|
||||
N.layer = 10 //Just default back to normal area stuff since I assume setting a var is faster than initial
|
||||
N.invisibility = 100
|
||||
N.invisibility = INVISIBILITY_MAXIMUM
|
||||
N.opacity = 0
|
||||
@@ -56,7 +56,7 @@
|
||||
A.icon = 'icons/effects/weather_effects.dmi'
|
||||
A.icon_state = start_up_overlay
|
||||
else
|
||||
A.invisibility = 100
|
||||
A.invisibility = INVISIBILITY_MAXIMUM
|
||||
A.opacity = 0
|
||||
//Ash storms
|
||||
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
|
||||
/turf/open/floor/plating/asteroid/airless/cave/volcanic
|
||||
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 10, /mob/living/simple_animal/hostile/asteroid/goliath/beast = 50, /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30,
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland = 2, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3)
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland = 2, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, /mob/living/simple_animal/hostile/megafauna/dragon = 2)
|
||||
|
||||
turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
status_flags = GODMODE // You can't damage it.
|
||||
mouse_opacity = 0
|
||||
see_in_dark = 7
|
||||
invisibility = 101 // No one can see us
|
||||
invisibility = INVISIBILITY_ABSTRACT // No one can see us
|
||||
sight = SEE_SELF
|
||||
move_on_shuttle = 0
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
hud_used.lingchemdisplay.invisibility = 0
|
||||
hud_used.lingchemdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[round(mind.changeling.chem_charges)]</font></div>"
|
||||
else
|
||||
hud_used.lingchemdisplay.invisibility = 101
|
||||
hud_used.lingchemdisplay.invisibility = INVISIBILITY_ABSTRACT
|
||||
|
||||
|
||||
/mob/living/carbon/handle_mutations_and_radiation()
|
||||
|
||||
@@ -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()
|
||||
@@ -64,7 +65,7 @@
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
alpha = 0
|
||||
|
||||
if(!prev_lying && animation)
|
||||
|
||||
@@ -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)
|
||||
@@ -998,174 +986,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()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/mob/camera/aiEye
|
||||
name = "Inactive AI Eye"
|
||||
|
||||
invisibility = 100
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
var/list/visibleCameraChunks = list()
|
||||
var/mob/living/silicon/ai/ai = null
|
||||
var/relay_speech = FALSE
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -353,7 +353,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"
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
name = "snare"
|
||||
desc = "You shouldn't be seeing this!"
|
||||
var/mob/living/simple_animal/hostile/guardian/spawner
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
|
||||
|
||||
/obj/item/effect/snare/Crossed(AM as mob|obj)
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
unique_name = 1
|
||||
gold_core_spawnable = 0
|
||||
death_sound = 'sound/voice/hiss6.ogg'
|
||||
deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..."
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/drone
|
||||
name = "alien drone"
|
||||
@@ -140,11 +142,6 @@
|
||||
damage = 30
|
||||
icon_state = "toxin"
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/death(gibbed)
|
||||
..(gibbed)
|
||||
visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...")
|
||||
playsound(src, 'sound/voice/hiss6.ogg', 100, 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/handle_temperature_damage()
|
||||
if(bodytemperature < minbodytemp)
|
||||
adjustBruteLoss(2)
|
||||
|
||||
@@ -0,0 +1,323 @@
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon
|
||||
name = "ash drake"
|
||||
desc = "Guardians of the necropolis."
|
||||
health = 2500
|
||||
maxHealth = 2500
|
||||
attacktext = "chomps"
|
||||
attack_sound = 'sound/magic/demon_attack1.ogg'
|
||||
icon_state = "dragon"
|
||||
icon_living = "dragon"
|
||||
icon_dead = "dragon_dead"
|
||||
friendly = "stares down"
|
||||
icon = 'icons/mob/lavaland/dragon.dmi'
|
||||
faction = list("mining")
|
||||
speak_emote = list("roars")
|
||||
armour_penetration = 40
|
||||
melee_damage_lower = 40
|
||||
melee_damage_upper = 40
|
||||
speed = 1
|
||||
move_to_delay = 10
|
||||
ranged = 1
|
||||
flying = 1
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
pixel_x = -16
|
||||
aggro_vision_range = 18
|
||||
idle_vision_range = 5
|
||||
loot = list(/obj/structure/closet/crate/necropolis/dragon)
|
||||
butcher_results = list(/obj/item/weapon/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/goliath_hide = 8, /obj/item/stack/sheet/bone = 30)
|
||||
var/anger_modifier = 0
|
||||
var/obj/item/device/gps/internal
|
||||
var/swooping = 0
|
||||
deathmessage = "collapes into a pile of bones, it's flesh sloughing away."
|
||||
death_sound = 'sound/magic/demon_dies.ogg'
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/New()
|
||||
..()
|
||||
internal = new/obj/item/device/gps/internal/dragon(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/AttackingTarget()
|
||||
if(swooping)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/Process_Spacemove(movement_dir = 0)
|
||||
return 1
|
||||
|
||||
/obj/effect/overlay/temp/fireball
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "fireball"
|
||||
name = "fireball"
|
||||
desc = "Get out of the way!"
|
||||
layer = 6
|
||||
dir = SOUTH
|
||||
pixel_z = 500
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/overlay/temp/target
|
||||
icon = 'icons/mob/actions.dmi'
|
||||
icon_state = "sniper_zoom"
|
||||
layer = MOB_LAYER - 0.1
|
||||
anchored = 1
|
||||
luminosity = 2
|
||||
|
||||
/obj/effect/overlay/temp/target/ex_act()
|
||||
return
|
||||
|
||||
/obj/effect/overlay/temp/target/New()
|
||||
..()
|
||||
spawn()
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(get_turf(src),'sound/magic/Fireball.ogg', 200, 1)
|
||||
var/obj/effect/overlay/temp/fireball/F = new(src.loc)
|
||||
animate(F, pixel_z = 0, time = 12)
|
||||
sleep(12)
|
||||
explosion(T, 0, 0, 1, 0, 1, 0)
|
||||
qdel(F)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/OpenFire()
|
||||
anger_modifier = Clamp(((maxHealth - health)/50),0,20)
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
|
||||
if(prob(15 + anger_modifier))
|
||||
if(health < maxHealth/2 && !client)
|
||||
swoop_attack(1)
|
||||
else
|
||||
fire_rain()
|
||||
|
||||
else if(prob(10+anger_modifier) && !client)
|
||||
if(health > maxHealth/2)
|
||||
swoop_attack()
|
||||
else
|
||||
swoop_attack()
|
||||
swoop_attack()
|
||||
swoop_attack()
|
||||
else
|
||||
fire_walls()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_rain()
|
||||
visible_message("<span class='danger'>Fire rains from the sky!</span>")
|
||||
for(var/turf/turf in range(12,get_turf(src)))
|
||||
if(prob(10))
|
||||
new /obj/effect/overlay/temp/target(turf)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_walls()
|
||||
var/list/attack_dirs = list(NORTH,EAST,SOUTH,WEST)
|
||||
if(prob(50))
|
||||
attack_dirs = list(NORTH,WEST,SOUTH,EAST)
|
||||
playsound(get_turf(src),'sound/magic/Fireball.ogg', 200, 1)
|
||||
|
||||
spawn(0)
|
||||
for(var/d in attack_dirs)
|
||||
var/turf/E = get_edge_target_turf(src, d)
|
||||
var/range = 10
|
||||
for(var/turf/open/J in getline(src,E))
|
||||
if(!range)
|
||||
break
|
||||
range--
|
||||
|
||||
PoolOrNew(/obj/effect/hotspot,J)
|
||||
J.hotspot_expose(700,50,1)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(fire_rain = 0)
|
||||
if(stat)
|
||||
return
|
||||
var/mob/living/swoop_target = target
|
||||
stop_automated_movement = TRUE
|
||||
swooping = 1
|
||||
icon_state = "swoop"
|
||||
visible_message("<span class='danger'>[src] swoops up high!</span>")
|
||||
if(prob(50))
|
||||
animate(src, pixel_x = 500, pixel_z = 500, time = 10)
|
||||
else
|
||||
animate(src, pixel_x = -500, pixel_z = 500, time = 10)
|
||||
sleep(30)
|
||||
|
||||
var/turf/tturf
|
||||
if(fire_rain)
|
||||
fire_rain()
|
||||
|
||||
icon_state = "dragon"
|
||||
if(swoop_target)
|
||||
tturf = get_turf(swoop_target)
|
||||
else
|
||||
tturf = get_turf(src)
|
||||
src.loc = tturf
|
||||
animate(src, pixel_x = 0, pixel_z = 0, time = 10)
|
||||
sleep(10)
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 200, 1)
|
||||
for(var/mob/living/L in range(1,tturf))
|
||||
if(L.stat)
|
||||
visible_message("<span class='danger'>[src] slams down on [L], crushing them!</span>")
|
||||
L.gib()
|
||||
else
|
||||
var/throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src)))
|
||||
L.adjustBruteLoss(75)
|
||||
L.throw_at_fast(throwtarget)
|
||||
visible_message("<span class='danger'>[L] is thrown clear of [src]!</span>")
|
||||
for(var/mob/M in range(7,src))
|
||||
shake_camera(M, 15, 1)
|
||||
|
||||
stop_automated_movement = FALSE
|
||||
swooping = 0
|
||||
density = 1
|
||||
|
||||
/obj/item/device/gps/internal/dragon
|
||||
icon_state = null
|
||||
gpstag = "Fiery Signal"
|
||||
desc = "Here there be dragons."
|
||||
invisibility = 100
|
||||
|
||||
|
||||
//The part you've all been waiting for: Loot
|
||||
|
||||
/obj/item/weapon/melee/ghost_sword
|
||||
name = "spectral blade"
|
||||
desc = "A rusted and dulled blade. It doesn't look like it'd do much damage. It glows weakly."
|
||||
icon_state = "cultblade"
|
||||
item_state = "cultblade"
|
||||
flags = CONDUCT
|
||||
sharpness = IS_SHARP
|
||||
w_class = 4
|
||||
force = 1
|
||||
throwforce = 1
|
||||
hitsound = 'sound/effects/ghost2.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended")
|
||||
var/summon_cooldown = 0
|
||||
|
||||
/obj/item/weapon/melee/ghost_sword/attack_self(mob/user)
|
||||
if(summon_cooldown > world.time)
|
||||
return
|
||||
notify_ghosts("[user] is raising their [src], calling for your help!", source = user)
|
||||
summon_cooldown = world.time + 600
|
||||
|
||||
/obj/item/weapon/melee/ghost_sword/proc/ghost_check(mob/user)
|
||||
var/ghost_counter = 0
|
||||
for(var/mob/dead/observer/G in dead_mob_list)
|
||||
if(G.orbiting == user)
|
||||
ghost_counter++
|
||||
G.invisibility = 0
|
||||
spawn(30)
|
||||
G.invisibility = initial(G.invisibility)
|
||||
return ghost_counter
|
||||
|
||||
/obj/item/weapon/melee/ghost_sword/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
force = 0
|
||||
var/ghost_counter = ghost_check(user)
|
||||
|
||||
force = Clamp((ghost_counter * 4), 0, 75)
|
||||
user.visible_message("<span class='danger'>[user] strikes with the force of [ghost_counter] vengeful spirits!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/ghost_sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
var/ghost_counter = ghost_check(owner)
|
||||
final_block_chance += Clamp((ghost_counter * 5), 0, 75)
|
||||
owner.visible_message("<span class='danger'>[owner] is protected by a ring of [ghost_counter] ghosts!</span>")
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/lesser
|
||||
name = "lesser ash drake"
|
||||
maxHealth = 500
|
||||
health = 500
|
||||
melee_damage_upper = 30
|
||||
melee_damage_lower = 30
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
loot = list()
|
||||
|
||||
//Blood
|
||||
|
||||
/obj/item/weapon/dragons_blood
|
||||
name = "bottle of dragons blood"
|
||||
desc = "You're not actually going to drink this, are you?"
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "vial"
|
||||
|
||||
/obj/item/weapon/dragons_blood/attack_self(mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/random = rand(1,5)
|
||||
|
||||
switch(random)
|
||||
if(1)
|
||||
user << "<span class='danger'>The blood sears your insides! What the hell were you thinking?</span>"
|
||||
user.reagents.add_reagent("hellwater", 50)
|
||||
if(2)
|
||||
user << "<span class='danger'>Other than tasting terrible, nothing really happens.</span>"
|
||||
if(3)
|
||||
user << "<span class='danger'>Your flesh begins to melt! Miraculously, you seem fine otherwise.</span>"
|
||||
H.set_species(/datum/species/skeleton)
|
||||
if(4)
|
||||
user << "<span class='danger'>The blood mixes with your own, filling your veins with a pulsing fire.</span>"
|
||||
H.dna.species.coldmod = 0
|
||||
if(5)
|
||||
user << "<span class='danger'>You don't feel so good...</span>"
|
||||
H.ForceContractDisease(new /datum/disease/transformation/dragon(0))
|
||||
playsound(user.loc,'sound/items/drink.ogg', rand(10,50), 1)
|
||||
qdel(src)
|
||||
|
||||
/datum/disease/transformation/dragon
|
||||
name = "dragon transformation"
|
||||
cure_text = "nothing"
|
||||
cures = list("adminordrazine")
|
||||
agent = "dragon's blood"
|
||||
desc = "What do dragons have to do with Space Station 13?"
|
||||
stage_prob = 20
|
||||
severity = BIOHAZARD
|
||||
visibility_flags = 0
|
||||
stage1 = list("Your bones ache.")
|
||||
stage2 = list("Your skin feels scaley.")
|
||||
stage3 = list("<span class='danger'>You have an overwhelming urge to terrorize some peasants.</span>", "<span class='danger'>Your teeth feel sharper.</span>")
|
||||
stage4 = list("<span class='danger'>Your blood burns.</span>")
|
||||
stage5 = list("<span class='danger'>You're a fucking dragon.</span>")
|
||||
new_form = /mob/living/simple_animal/hostile/megafauna/dragon/lesser
|
||||
|
||||
|
||||
//Lava Staff
|
||||
|
||||
/obj/item/weapon/lava_staff
|
||||
name = "staff of lava"
|
||||
desc = "The ability to fill the emergency shuttle with lava. What more could you want out of life?"
|
||||
icon_state = "staffofstorms"
|
||||
item_state = "staffofstorms"
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
slot_flags = SLOT_BACK
|
||||
item_state = "staffofstorms"
|
||||
w_class = 4
|
||||
force = 25
|
||||
damtype = BURN
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
var/lava_cooldown = 0
|
||||
|
||||
/obj/item/weapon/lava_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
..()
|
||||
if(lava_cooldown > world.time)
|
||||
return
|
||||
if(target && istype(target, /turf/open))
|
||||
var/turf/open/O = target
|
||||
user.visible_message("<span class='danger'>[user] turns \the [O] into lava!</span>")
|
||||
O.ChangeTurf(/turf/open/floor/plating/lava/smooth)
|
||||
playsound(get_turf(src),'sound/magic/Fireball.ogg', 200, 1)
|
||||
lava_cooldown = world.time + 200
|
||||
|
||||
/obj/structure/closet/crate/necropolis/dragon
|
||||
name = "dragon chest"
|
||||
|
||||
/obj/structure/closet/crate/necropolis/dragon/New()
|
||||
..()
|
||||
var/loot = rand(1,4)
|
||||
switch(loot)
|
||||
if(1)
|
||||
for(var/i in 1 to 10)
|
||||
new /obj/item/weapon/ore/diamond(src)
|
||||
new /obj/item/weapon/ore/gold(src)
|
||||
if(2)
|
||||
new /obj/item/weapon/melee/ghost_sword(src)
|
||||
if(3)
|
||||
new /obj/item/weapon/dragons_blood(src)
|
||||
if(4)
|
||||
new /obj/item/weapon/lava_staff(src)
|
||||
@@ -0,0 +1,140 @@
|
||||
/mob/living/simple_animal/hostile/megafauna/legion
|
||||
name = "legion"
|
||||
health = 800
|
||||
maxHealth = 800
|
||||
icon_state = "legion"
|
||||
icon_living = "legion"
|
||||
desc = "One of many."
|
||||
icon = 'icons/mob/lavaland/legion.dmi'
|
||||
attacktext = "chomps"
|
||||
attack_sound = 'sound/magic/demon_attack1.ogg'
|
||||
faction = list("mining")
|
||||
speak_emote = list("echoes")
|
||||
armour_penetration = 50
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
speed = 2
|
||||
ranged = 1
|
||||
flying = 1
|
||||
del_on_death = 1
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
ranged_cooldown_time = 20
|
||||
var/size = 10
|
||||
var/charging = 0
|
||||
pixel_y = -90
|
||||
pixel_x = -75
|
||||
loot = list(/obj/item/stack/sheet/bone = 3)
|
||||
vision_range = 13
|
||||
aggro_vision_range = 18
|
||||
idle_vision_range = 13
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/New()
|
||||
..()
|
||||
new/obj/item/device/gps/internal/legion(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/OpenFire(the_target)
|
||||
if(world.time >= ranged_cooldown && !charging)
|
||||
if(prob(75))
|
||||
var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/A = new(src.loc)
|
||||
A.GiveTarget(target)
|
||||
A.friends = friends
|
||||
A.faction = faction
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
else
|
||||
visible_message("<span class='danger'>[src] charges!</span>")
|
||||
SpinAnimation(speed = 20, loops = 5)
|
||||
ranged = 0
|
||||
retreat_distance = 0
|
||||
minimum_distance = 0
|
||||
speed = 0
|
||||
charging = 1
|
||||
spawn(50)
|
||||
ranged = 1
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
speed = 2
|
||||
charging = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/death()
|
||||
if(size > 2)
|
||||
for(var/i in 1 to 2)
|
||||
var/mob/living/simple_animal/hostile/megafauna/legion/L = new(src.loc)
|
||||
L.health = src.maxHealth * 0.6
|
||||
L.maxHealth = L.health
|
||||
L.size = size - 2
|
||||
var/size_multiplier = L.size * 0.08
|
||||
L.resize = size_multiplier
|
||||
L.pixel_y = L.pixel_y * size_multiplier
|
||||
L.pixel_x = L.pixel_x * size_multiplier
|
||||
|
||||
L.update_transform()
|
||||
visible_message("<span class='danger'>[src] splits!</span>")
|
||||
qdel(src)
|
||||
else
|
||||
var/last_legion = TRUE
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/other in mob_list)
|
||||
if(other != src)
|
||||
last_legion = FALSE
|
||||
break
|
||||
if(last_legion)
|
||||
src.loot = list(/obj/item/weapon/staff_of_storms)
|
||||
else if(prob(5))
|
||||
src.loot = list(/obj/structure/closet/crate/necropolis/tendril)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/Process_Spacemove(movement_dir = 0)
|
||||
return 1
|
||||
|
||||
/obj/item/device/gps/internal/legion
|
||||
icon_state = null
|
||||
gpstag = "Echoing Signal"
|
||||
desc = "The message repeats."
|
||||
invisibility = 100
|
||||
|
||||
|
||||
//Loot
|
||||
|
||||
/obj/item/weapon/staff_of_storms
|
||||
name = "staff of storms"
|
||||
desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it."
|
||||
icon_state = "staffofstorms"
|
||||
item_state = "staffofstorms"
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
slot_flags = SLOT_BACK
|
||||
item_state = "staffofstorms"
|
||||
w_class = 4
|
||||
force = 25
|
||||
damtype = BURN
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
var/obj/machinery/lavaland_controller/linked_machine
|
||||
var/storm_cooldown = 0
|
||||
|
||||
/obj/item/weapon/staff_of_storms/attack_self(mob/user)
|
||||
if(storm_cooldown > world.time)
|
||||
user << "The staff is still recharging."
|
||||
return
|
||||
|
||||
if(!linked_machine || linked_machine.z != user.z)
|
||||
for(var/obj/machinery/lavaland_controller/controller in machines)
|
||||
if(controller.z == user.z)
|
||||
linked_machine = controller
|
||||
break
|
||||
|
||||
if(linked_machine && linked_machine.ongoing_weather)
|
||||
if(linked_machine.ongoing_weather.stage == WIND_DOWN_STAGE || linked_machine.ongoing_weather.stage == END_STAGE)
|
||||
user << "The storm is already ending. It would be a waste to use the staff now."
|
||||
return
|
||||
linked_machine.ongoing_weather.duration = 0
|
||||
user << "<span class='danger'><B>With an appropriately dramatic flourish, you dispell the storm.</B>"
|
||||
playsound(get_turf(src),'sound/magic/Staff_Change.ogg', 200, 1)
|
||||
storm_cooldown = world.time + 600
|
||||
|
||||
else if (linked_machine && !linked_machine.ongoing_weather)
|
||||
user << "<span class='danger'><B>You lift the staff towards the heavens, calling down a terrible storm.</B>"
|
||||
linked_machine.weather_cooldown = 0
|
||||
playsound(get_turf(src),'sound/magic/Staff_Change.ogg', 200, 1)
|
||||
storm_cooldown = world.time + 600
|
||||
|
||||
else
|
||||
user << "You can't seem to control the weather here."
|
||||
@@ -0,0 +1,33 @@
|
||||
/mob/living/simple_animal/hostile/megafauna
|
||||
name = "boss of this gym"
|
||||
desc = "Attack the weak point for massive damage."
|
||||
health = 1000
|
||||
maxHealth = 1000
|
||||
sentience_type = SENTIENCE_BOSS
|
||||
environment_smash = 4
|
||||
robust_searching = 1
|
||||
stat_attack = 1
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
layer = 6 //Looks weird with them slipping under mineral walls and cameras and shit otherwise
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/death(gibbed)
|
||||
if(health > 0)
|
||||
return
|
||||
else
|
||||
feedback_set_details("megafauna_kills","[initial(name)]")
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/gib()
|
||||
if(health > 0)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dust()
|
||||
if(health > 0)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -713,6 +713,7 @@
|
||||
del_on_death = 1
|
||||
stat_attack = 1
|
||||
robust_searching = 1
|
||||
layer = 6.1
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/Life()
|
||||
if(isturf(src.loc))
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
icon_living = "none"
|
||||
icon_dead = "none"
|
||||
desc = "You shouldn't be seeing this."
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
unsuitable_atmos_damage = 0
|
||||
stat_attack = 2
|
||||
gold_core_spawnable = 0
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
var/list/loot = list() //list of things spawned at mob's loc when it dies
|
||||
var/del_on_death = 0 //causes mob to be deleted on death, useful for mobs that spawn lootable corpses
|
||||
var/deathmessage = ""
|
||||
var/death_sound = null //The sound played on death
|
||||
|
||||
var/allow_movement_on_non_turfs = FALSE
|
||||
|
||||
@@ -111,32 +112,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 +236,7 @@
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/blob_act()
|
||||
/mob/living/simple_animal/blob_act(obj/effect/blob/B)
|
||||
adjustBruteLoss(20)
|
||||
return
|
||||
|
||||
@@ -417,6 +392,8 @@
|
||||
if(loot.len)
|
||||
for(var/i in loot)
|
||||
new i(loc)
|
||||
if(death_sound)
|
||||
playsound(get_turf(src),death_sound, 200, 1)
|
||||
if(deathmessage && !gibbed)
|
||||
visible_message("<span class='danger'>[deathmessage]</span>")
|
||||
else if(!del_on_death)
|
||||
|
||||
@@ -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
|
||||
+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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
flags = NONE
|
||||
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
|
||||
density = 0
|
||||
stat = DEAD
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
stunned = 1
|
||||
icon = null
|
||||
overlays.Cut()
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
var/atom/movable/overlay/animation = new( loc )
|
||||
animation.icon_state = "blank"
|
||||
@@ -140,7 +140,7 @@
|
||||
stunned = 1
|
||||
icon = null
|
||||
overlays.Cut()
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
var/atom/movable/overlay/animation = new( loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
@@ -244,7 +244,7 @@
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
return ..()
|
||||
|
||||
/mob/proc/AIize()
|
||||
@@ -314,7 +314,7 @@
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
for(var/t in organs)
|
||||
qdel(t)
|
||||
|
||||
@@ -365,7 +365,7 @@
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
for(var/t in organs)
|
||||
qdel(t)
|
||||
|
||||
@@ -395,7 +395,7 @@
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
for(var/t in organs)
|
||||
qdel(t)
|
||||
|
||||
@@ -454,7 +454,7 @@
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
for(var/t in organs) //this really should not be necessary
|
||||
qdel(t)
|
||||
|
||||
@@ -484,7 +484,7 @@
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
for(var/t in organs)
|
||||
qdel(t)
|
||||
|
||||
@@ -66,7 +66,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
//No need to check for countdown here since while() broke, it's implicit that it finished.
|
||||
|
||||
density = 0//Make the net pass-through.
|
||||
invisibility = 101//Make the net invisible so all the animations can play out.
|
||||
invisibility = INVISIBILITY_ABSTRACT//Make the net invisible so all the animations can play out.
|
||||
health = INFINITY//Make the net invincible so that an explosion/something else won't kill it while, spawn() is running.
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -106,7 +106,7 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
/obj/structure/cable/hide(i)
|
||||
|
||||
if(level == 1 && istype(loc, /turf))
|
||||
invisibility = i ? 101 : 0
|
||||
invisibility = i ? INVISIBILITY_MAXIMUM : 0
|
||||
updateicon()
|
||||
|
||||
/obj/structure/cable/proc/updateicon()
|
||||
@@ -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
|
||||
@@ -529,8 +525,9 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \
|
||||
|
||||
|
||||
/obj/item/stack/cable_coil/update_icon()
|
||||
if (!item_color)
|
||||
if(!item_color)
|
||||
item_color = pick("red", "yellow", "blue", "green")
|
||||
item_state = "coil_[item_color]"
|
||||
if(amount == 1)
|
||||
icon_state = "coil_[item_color]1"
|
||||
name = "cable piece"
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
/obj/machinery/power/terminal/hide(i)
|
||||
if(i)
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
icon_state = "term-f"
|
||||
else
|
||||
invisibility = 0
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -38,8 +38,7 @@
|
||||
var/drowsy = 0
|
||||
var/stamina = 0
|
||||
var/jitter = 0
|
||||
var/forcedodge = 0
|
||||
// 1 to pass solid objects, 2 to pass solid turfs (results in bugs, bugs and tons of bugs)
|
||||
var/forcedodge = 0 //to pass through everything
|
||||
|
||||
/obj/item/projectile/New()
|
||||
permutated = list()
|
||||
|
||||
@@ -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"
|
||||
@@ -132,7 +141,7 @@
|
||||
M.canmove = 0
|
||||
M.icon = null
|
||||
M.overlays.Cut()
|
||||
M.invisibility = 101
|
||||
M.invisibility = INVISIBILITY_ABSTRACT
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/Robot = M
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
// hide called by levelupdate if turf intact status changes
|
||||
// change visibility status and force update of icon
|
||||
/obj/structure/disposalconstruct/hide(var/intact)
|
||||
invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact
|
||||
invisibility = (intact && level==1) ? INVISIBILITY_MAXIMUM: 0 // hide if floor is intact
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
// this allows the gas flushed to be tracked
|
||||
|
||||
/obj/structure/disposalholder
|
||||
invisibility = 101
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
var/datum/gas_mixture/gas = null // gas used to flush, will appear at exit point
|
||||
var/active = 0 // true if the holder is moving, otherwise inactive
|
||||
dir = 0
|
||||
@@ -233,7 +233,7 @@
|
||||
// hide called by levelupdate if turf intact status changes
|
||||
// change visibility status and force update of icon
|
||||
/obj/structure/disposalpipe/hide(var/intact)
|
||||
invisibility = intact ? 101: 0 // hide if floor is intact
|
||||
invisibility = intact ? INVISIBILITY_MAXIMUM: 0 // hide if floor is intact
|
||||
updateicon()
|
||||
|
||||
// update actual icon_state depending on visibility
|
||||
@@ -300,7 +300,7 @@
|
||||
var/obj/structure/disposalpipe/broken/P = new(src.loc)
|
||||
P.dir = D
|
||||
|
||||
src.invisibility = 101 // make invisible (since we won't delete the pipe immediately)
|
||||
src.invisibility = INVISIBILITY_MAXIMUM // make invisible (since we won't delete the pipe immediately)
|
||||
var/obj/structure/disposalholder/H = locate() in src
|
||||
if(H)
|
||||
// holder was present
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user