Merge branch 'master' of https://github.com/tgstation/-tg-station into FixGib

Conflicts:
	code/modules/mob/living/death.dm
	code/modules/mob/living/simple_animal/simple_animal.dm
This commit is contained in:
phil235
2016-04-30 12:30:36 +02:00
247 changed files with 68739 additions and 2284 deletions
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -11,7 +11,7 @@
/obj/item/device/export_scanner/examine(user)
..()
if(!cargo_console)
user << "<span class='notice'>You had to link it to supply console for it to work.</span>"
user << "<span class='notice'>The [src] is currently not linked to a cargo console.</span>"
/obj/item/device/export_scanner/afterattack(obj/O, mob/user, proximity)
if(!istype(O) || !proximity)
@@ -44,4 +44,4 @@
exported = TRUE
break
if(!exported)
user << "<span class='notice'>The object is unexportable.</span>"
user << "<span class='notice'>The object is unexportable.</span>"
+6
View File
@@ -7,6 +7,7 @@
message = "of enemy intelligence"
var/global/originals_recieved = list()
var/global/copies_recieved = list()
var/copy_path = null
export_types = list(/obj/item/documents/syndicate)
/datum/export/intel/applies_to(obj/O, contr = 0, emag = 0)
@@ -23,6 +24,9 @@
return FALSE
if((C.copy_type in originals_recieved) || (C.copy_type in copies_recieved))
return FALSE
if(copy_path && !ispath(C.copy_type, copy_path))
return FALSE
else if(O.type in originals_recieved)
return FALSE
@@ -45,6 +49,7 @@
cost = 15000 // Allows double agents to earn some cargo points without failing their objectives.
unit_name = "photocopied article"
export_types = list(/obj/item/documents/photocopy)
copy_path = /obj/item/documents/syndicate
@@ -58,6 +63,7 @@
cost = 15000
unit_name = "photocopied article"
export_types = list(/obj/item/documents/photocopy)
copy_path = /obj/item/documents/nanotrasen
// Selling Syndicate docs to Syndicate, why not?
/datum/export/intel/syndie/recovered
+79 -15
View File
@@ -3,7 +3,7 @@
var/group = ""
var/hidden = FALSE
var/contraband = FALSE
var/cost = 7 // Minimum cost, or infinite points are possible.
var/cost = 700 // Minimum cost, or infinite points are possible.
var/access = FALSE
var/list/contains = null
var/crate_name = "crate"
@@ -53,6 +53,12 @@
contains = list(/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/breath,
/obj/item/weapon/tank/internals/emergency_oxygen,
/obj/item/weapon/tank/internals/emergency_oxygen,
/obj/item/weapon/tank/internals/emergency_oxygen,
/obj/item/weapon/tank/internals/air,
/obj/item/weapon/tank/internals/air,
/obj/item/weapon/tank/internals/air)
@@ -105,6 +111,12 @@
crate_name = "weed control crate"
crate_type = /obj/structure/closet/crate/secure/hydroponics
/datum/supply_pack/emergency/metalfoam
name = "Metal Foam Grenade Crate"
cost = 1000
contains = list(/obj/item/weapon/storage/box/metalfoam)
crate_name = "metal foam grenade crate"
/datum/supply_pack/emergency/specialops
name = "Special Ops Supplies"
hidden = TRUE
@@ -115,16 +127,16 @@
/obj/item/weapon/grenade/smokebomb,
/obj/item/weapon/pen/sleepy,
/obj/item/weapon/grenade/chem_grenade/incendiary)
crate_name = "special ops crate"
crate_type = /obj/structure/closet/crate
crate_name = "emergency crate"
crate_type = /obj/structure/closet/crate/internals
/datum/supply_pack/emergency/syndicate
name = "NULL_ENTRY"
hidden = TRUE
cost = 14000
contains = list(/obj/item/weapon/storage/box/syndicate)
crate_name = "crate"
crate_type = /obj/structure/closet/crate
crate_name = "emergency crate"
crate_type = /obj/structure/closet/crate/internals
dangerous = TRUE
//////////////////////////////////////////////////////////////////////////////
@@ -393,7 +405,7 @@
contraband = TRUE
contains = list(/obj/item/clothing/head/helmet/justice,
/obj/item/clothing/mask/gas/sechailer)
crate_name = "justice enforcer crate"
crate_name = "security clothing crate"
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Engineering /////////////////////////////////////
@@ -440,7 +452,7 @@
/datum/supply_pack/engineering/engiequipment
name = "Engineering Gear Crate"
cost = 1000
cost = 1300
contains = list(/obj/item/weapon/storage/belt/utility,
/obj/item/weapon/storage/belt/utility,
/obj/item/weapon/storage/belt/utility,
@@ -452,7 +464,9 @@
/obj/item/clothing/head/welding,
/obj/item/clothing/head/hardhat,
/obj/item/clothing/head/hardhat,
/obj/item/clothing/head/hardhat)
/obj/item/clothing/head/hardhat,
/obj/item/clothing/glasses/meson/engine,
/obj/item/clothing/glasses/meson/engine)
crate_name = "engineering gear crate"
/datum/supply_pack/engineering/engine/spacesuit
@@ -464,10 +478,34 @@
/obj/item/clothing/head/helmet/space,
/obj/item/clothing/head/helmet/space,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/breath,)
/obj/item/clothing/mask/breath)
crate_name = "space suit crate"
crate_type = /obj/structure/closet/crate/secure
/datum/supply_pack/engineering/shieldgen
name = "Anti-breach Shield Projector Crate"
cost = 2500
contains = list(/obj/machinery/shieldgen,
/obj/machinery/shieldgen)
crate_name = "anti-breach shield projector crate"
/datum/supply_pack/engineering/grounding_rods
name = "Grounding Rod Crate"
cost = 1700
contains = list(/obj/machinery/power/grounding_rod,
/obj/machinery/power/grounding_rod,
/obj/machinery/power/grounding_rod,
/obj/machinery/power/grounding_rod)
crate_name = "grounding rod crate"
crate_type = /obj/structure/closet/crate/engineering/electrical
/datum/supply_pack/engineering/pacman
name = "P.A.C.M.A.N Generator Crate"
cost = 2500
contains = list(/obj/machinery/power/port_gen/pacman)
crate_name = "PACMAN generator crate"
crate_type = /obj/structure/closet/crate/engineering/electrical
/datum/supply_pack/engineering/solar
name = "Solar Panel Crate"
cost = 2000
@@ -668,6 +706,13 @@
contains = list(/obj/machinery/iv_drip)
crate_name = "iv drip crate"
/datum/supply_pack/medical/defibs
name = "Defibrillator Crate"
cost = 2500
contains = list(/obj/item/weapon/defibrillator/loaded,
/obj/item/weapon/defibrillator/loaded)
crate_name = "defibrillator crate"
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Science /////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -874,7 +919,7 @@
contraband = TRUE
cost = 5000
contains = list(/mob/living/simple_animal/butterfly)
crate_name = "butterflies crate"
crate_name = "entomology samples crate"
/datum/supply_pack/organic/critter/butterfly/generate()
. = ..()
@@ -938,7 +983,7 @@
crate_name = "exotic seeds crate"
/datum/supply_pack/organic/hydroponics/beekeeping_fullkit
name = "Beekeeping Starter Kit"
name = "Beekeeping Starter Crate"
cost = 1500
contains = list(/obj/structure/beebox,
/obj/item/honey_frame,
@@ -947,10 +992,10 @@
/obj/item/queen_bee/bought,
/obj/item/clothing/head/beekeeper_head,
/obj/item/clothing/suit/beekeeper_suit)
crate_name = "beekeeping starter kit"
crate_name = "beekeeping starter crate"
/datum/supply_pack/organic/hydroponics/beekeeping_suits
name = "2 Beekeeper suits"
name = "Beekeeper Suit Crate"
cost = 1000
contains = list(/obj/item/clothing/head/beekeeper_head,
/obj/item/clothing/suit/beekeeper_suit,
@@ -1092,9 +1137,28 @@
/obj/item/clothing/suit/bluetag,
/obj/item/clothing/suit/bluetag,
/obj/item/clothing/head/helmet/redtaghelm,
/obj/item/clothing/head/helmet/redtaghelm,
/obj/item/clothing/head/helmet/redtaghelm,
/obj/item/clothing/head/helmet/bluetaghelm,
/obj/item/clothing/head/helmet/bluetaghelm,
/obj/item/clothing/head/helmet/bluetaghelm)
crate_name = "laser tag crate"
/datum/supply_pack/misc/lasertag/pins
name = "Laser Tag Firing Pins Crate"
cost = 2000
contraband = TRUE
contains = list(/obj/item/weapon/storage/box/lasertagpins)
crate_name = "laser tag crate"
/datum/supply_pack/misc/clownpin
name = "Hilarious Firing Pin Crate"
cost = 5000
contraband = TRUE
contains = list(/obj/item/device/firing_pin/clown)
// It's /technically/ a toy. For the clown, at least.
crate_name = "toy crate"
/datum/supply_pack/misc/religious_supplies
name = "Religious Supplies Crate"
cost = 4000 // it costs so much because the Space Church is ran by Space Jews
@@ -1114,7 +1178,7 @@
/obj/item/weapon/poster/legit,
/obj/item/weapon/poster/legit,
/obj/item/weapon/poster/legit)
crate_name = "Corporate Posters Crate"
crate_name = "corporate posters crate"
/datum/supply_pack/misc/paper
name = "Bureaucracy Crate"
@@ -1353,4 +1417,4 @@
/obj/item/weapon/gun/projectile/automatic/toy/pistol,
/obj/item/ammo_box/magazine/toy/pistol,
/obj/item/ammo_box/magazine/toy/pistol)
crate_name = "foam force pistols crate"
crate_name = "foam force crate"
+1 -3
View File
@@ -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))
+9 -3
View File
@@ -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
+5 -5
View File
@@ -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"
+1 -1
View File
@@ -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
-6
View File
@@ -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!"
+1 -20
View File
@@ -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>"
+1 -1
View File
@@ -204,6 +204,6 @@
emergency_shutdown()
..()
/obj/machinery/computer/holodeck/blob_act()
/obj/machinery/computer/holodeck/blob_act(obj/effect/blob/B)
emergency_shutdown()
..()
+1 -1
View File
@@ -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
+28 -6
View File
@@ -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
*/
+2 -9
View File
@@ -129,15 +129,8 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(atom/movable/AM)
if(seed)
var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip)
if(S && !ispath(trash, /obj/item/weapon/grown) && iscarbon(AM))
var/mob/living/carbon/M = AM
var/stun = max(seed.potency * S.rate * 2, 1)
var/weaken = max(seed.potency * S.rate, 0.5)
if(M.slip(stun, weaken, src))
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_slip(src, M)
return 1
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_cross(src, AM)
..()
+2 -9
View File
@@ -50,15 +50,8 @@
/obj/item/weapon/grown/Crossed(atom/movable/AM)
if(seed)
var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip)
if(S && iscarbon(AM))
var/mob/living/carbon/M = AM
var/stun = max(seed.potency * S.rate * 2, 1)
var/weaken = max(seed.potency * S.rate, 0.5)
if(M.slip(stun, weaken, src))
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_slip(src, M)
return 1
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_cross(src, AM)
..()
+23 -4
View File
@@ -156,6 +156,8 @@
/datum/plant_gene/trait/proc/on_consume(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
return
/datum/plant_gene/trait/proc/on_cross(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
return
/datum/plant_gene/trait/proc/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
return
/datum/plant_gene/trait/proc/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
@@ -177,11 +179,28 @@
/datum/plant_gene/trait/slip
// Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery.
// Applies other trait effects (teleporting, etc) to the target by on_slip.
// For code, see grown.dm
name = "Slippery Skin"
rate = 0.1
examine_line = "<span class='info'>It has a very slippery skin.</span>"
/datum/plant_gene/trait/slip/on_cross(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
if(iscarbon(target))
var/obj/item/seeds/seed = G.seed
var/mob/living/carbon/M = target
var/stun_len = seed.potency * rate
if(istype(G) && ispath(G.trash, /obj/item/weapon/grown))
return
if(!istype(G, /obj/item/weapon/grown/bananapeel) && (!G.reagents || !G.reagents.has_reagent("lube")))
stun_len /= 3
var/stun = max(stun_len * 2, 1)
var/weaken = max(stun_len, 0.5)
if(M.slip(stun, weaken, G))
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_slip(src, M)
/datum/plant_gene/trait/cell_charge
// Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten.
@@ -189,18 +208,18 @@
// Small (potency*rate*5) chance to shock squish or slip target for (potency*rate*5) damage.
// Multiplies max charge by (rate*1000) when used in potato power cells.
name = "Electrical Activity"
rate = 0.01
rate = 0.2
origin_tech = list("powerstorage" = 4)
/datum/plant_gene/trait/cell_charge/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
var/power = G.seed.potency*rate*5
var/power = G.seed.potency*rate
if(prob(power))
C.electrocute_act(round(power), G, 1, 1)
/datum/plant_gene/trait/cell_charge/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target)
if(iscarbon(target))
var/mob/living/carbon/C = target
var/power = G.seed.potency*rate*5
var/power = G.seed.potency*rate
if(prob(power))
C.electrocute_act(round(power), G, 1, 1)
+5 -5
View File
@@ -5,7 +5,7 @@
/obj/item/seeds
icon = 'icons/obj/hydroponics/seeds.dmi'
icon_state = "seed" // Unknown plant seed - these shouldn't exist in-game.
w_class = 1 // Pocketable.
w_class = 1
burn_state = FLAMMABLE
var/plantname = "Plants" // Name of plant when planted.
var/product // A type path. The thing that is created when the plant is harvested.
@@ -15,10 +15,10 @@
var/icon_dead // Used to override dead icon (default is "[species]-dead"). You can use one dead icon for multiple closely related plants with it.
var/icon_harvest // Used to override harvest icon (default is "[species]-harvest"). If null, plant will use [icon_grow][growthstages].
var/lifespan = 25 // How long before the plant begins to take damage from age.
var/endurance = 15 // Amount of health the plant has.
var/maturation = 6 // Used to determine which sprite to switch to when growing.
var/production = 6 // Changes the amount of time needed for a plant to become harvestable.
var/lifespan = 25 // How long before the plant begins to take damage from age.
var/endurance = 15 // Amount of health the plant has.
var/maturation = 6 // Used to determine which sprite to switch to when growing.
var/production = 6 // Changes the amount of time needed for a plant to become harvestable.
var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested.
var/oneharvest = 0 // If a plant is cleared from the tray after harvesting, e.g. a carrot.
var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways.
+4
View File
@@ -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)
+1 -1
View File
@@ -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
+112 -67
View File
@@ -48,7 +48,6 @@
new /obj/item/weapon/survivalcapsule(src)
/**********************Shuttle Computer**************************/
/obj/machinery/computer/shuttle/mining
@@ -164,6 +163,24 @@
throwforce = 7
w_class = 2
/obj/item/weapon/emptysandbag
name = "empty sandbag"
desc = "A bag to be filled with sand."
icon = 'icons/obj/items.dmi'
icon_state = "sandbag"
w_class = 1
/obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/weapon/ore/glass))
user << "<span class='notice'>You fill the sandbag.</span>"
var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags
user.unEquip(src)
user.put_in_hands(I)
qdel(W)
qdel(src)
return
else
return ..()
/**********************Mining car (Crate like thing, not the rail car)**************************/
@@ -222,7 +239,7 @@
var/turf/cur_turf
var/x_size = 5
var/y_size = 5
var/list/walltypes = list(/turf/closed/wall/shuttle/survival_pod)
var/list/walltypes = list(/turf/closed/wall/shuttle/survival/pod)
var/floor_type = /turf/open/floor/pod
var/room
@@ -315,11 +332,75 @@
//Pod turfs and objects
//Floor
//Floors
/turf/open/floor/pod
name = "pod floor"
icon_state = "podfloor"
icon_regular_floor = "podfloor"
floor_tile = /obj/item/stack/tile/pod
/turf/open/floor/pod/light
icon_state = "podfloor_light"
icon_regular_floor = "podfloor_light"
floor_tile = /obj/item/stack/tile/pod/light
/turf/open/floor/pod/dark
icon_state = "podfloor_dark"
icon_regular_floor = "podfloor_dark"
floor_tile = /obj/item/stack/tile/pod/dark
//Walls
/turf/closed/wall/shuttle/survival
name = "pod wall"
desc = "An easily-compressable wall used for temporary shelter."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "smooth"
walltype = "shuttle"
smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod, /obj/structure/shuttle/engine)
/turf/closed/wall/shuttle/survival/nodiagonal
smooth = SMOOTH_MORE
/turf/closed/wall/shuttle/survival/pod
canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle, /obj/structure/shuttle/engine)
//Window
/obj/structure/window/shuttle/survival_pod
name = "pod window"
icon = 'icons/obj/smooth_structures/pod_window.dmi'
icon_state = "smooth"
smooth = SMOOTH_MORE
canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod)
//Door
/obj/machinery/door/airlock/survival_pod
name = "airlock"
icon = 'icons/obj/doors/airlocks/survival/horizontal/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi'
doortype = /obj/structure/door_assembly/door_assembly_pod
opacity = 0
glass = 1
/obj/machinery/door/airlock/survival_pod/vertical
icon = 'icons/obj/doors/airlocks/survival/vertical/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi'
doortype = /obj/structure/door_assembly/door_assembly_pod/vertical
/obj/structure/door_assembly/door_assembly_pod
name = "pod airlock assembly"
icon = 'icons/obj/doors/airlocks/survival/horizontal/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi'
airlock_type = /obj/machinery/door/airlock/survival_pod
anchored = 1
state = 1
mineral = "glass"
material = "glass"
/obj/structure/door_assembly/door_assembly_pod/vertical
icon = 'icons/obj/doors/airlocks/survival/vertical/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi'
airlock_type = /obj/machinery/door/airlock/survival_pod/vertical
//Table
/obj/structure/table/survival_pod
@@ -327,34 +408,6 @@
icon_state = "table"
smooth = SMOOTH_FALSE
/obj/structure/fans
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "fans"
name = "environmental regulation system"
desc = "A large machine releasing a constant gust of air."
anchored = 1
density = 1
var/arbitraryatmosblockingvar = TRUE
/obj/structure/fans/tiny
name = "tiny fan"
desc = "A tiny fan, releasing a thin gust of air."
layer = TURF_LAYER + 0.8
density = 0
icon_state = "fan_tiny"
/obj/structure/fans/New(loc)
..()
air_update_turf(1)
/obj/structure/fans/Destroy()
arbitraryatmosblockingvar = FALSE
air_update_turf(1)
return ..()
/obj/structure/fans/CanAtmosPass(turf/T)
return !arbitraryatmosblockingvar
//Sleeper
/obj/machinery/sleeper/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
@@ -412,19 +465,36 @@
var/obj/item/device/instrument/guitar/G = new(src)
load(G)
//Walls
//Fans
/obj/structure/fans
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "fans"
name = "environmental regulation system"
desc = "A large machine releasing a constant gust of air."
anchored = 1
density = 1
var/arbitraryatmosblockingvar = TRUE
/turf/closed/wall/shuttle/survival_pod
name = "wall"
desc = "An easily-compressable wall used for temporary shelter."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "smooth"
walltype = "shuttle"
smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
canSmoothWith = list(/turf/closed/wall/shuttle/survival_pod, /obj/machinery/door/airlock, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle)
/obj/structure/fans/tiny
name = "tiny fan"
desc = "A tiny fan, releasing a thin gust of air."
layer = TURF_LAYER + 0.8
density = 0
icon_state = "fan_tiny"
/obj/structure/fans/New(loc)
..()
air_update_turf(1)
/obj/structure/fans/Destroy()
arbitraryatmosblockingvar = FALSE
air_update_turf(1)
return ..()
/obj/structure/fans/CanAtmosPass(turf/T)
return !arbitraryatmosblockingvar
//Signs
/obj/structure/sign/mining
name = "nanotrasen mining corps sign"
desc = "A sign of relief for weary miners, and a warning for would be competitors to Nanotrasen's mining claims."
@@ -437,15 +507,7 @@
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "survival"
//Door
/obj/machinery/door/airlock/survival_pod
name = "airlock"
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
opacity = 0
glass = 1
//Fluff
/obj/structure/tubes
icon_state = "tubes"
icon = 'icons/obj/lavaland/survival_pod.dmi'
@@ -454,20 +516,3 @@
layer = MOB_LAYER - 0.2
density = 0
/obj/item/weapon/emptysandbag
name = "empty sandbag"
desc = "A bag to be filled with sand."
icon = 'icons/obj/items.dmi'
icon_state = "sandbag"
w_class = 1
/obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/weapon/ore/glass))
user << "<span class='notice'>You fill the sandbag.</span>"
var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags
user.unEquip(src)
user.put_in_hands(I)
qdel(W)
qdel(src)
return
else return ..()
+1 -1
View File
@@ -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"
+2 -2
View File
@@ -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
+8 -100
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -324,7 +324,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
+1 -1
View File
@@ -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
+2 -1
View File
@@ -54,7 +54,8 @@
paralysis = 0
stunned = 0
weakened = 0
sleeping = 0
set_drugginess(0)
SetSleeping(0, 0)
blind_eyes(1)
reset_perspective(null)
hide_fullscreens()
+2 -2
View File
@@ -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
-183
View File
@@ -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
+1 -2
View File
@@ -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()
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
..()
@@ -635,7 +635,7 @@
stat_attack = 1
robust_searching = 1
loot = list()
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, /obj/item/stack/sheet/bone = 1)
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
//Goliath
@@ -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()
..()
@@ -262,8 +237,7 @@
if(icon_gib)
new /obj/effect/overlay/temp/gib_animation/animal(loc, icon_gib)
/mob/living/simple_animal/blob_act()
/mob/living/simple_animal/blob_act(obj/effect/blob/B)
adjustBruteLoss(20)
return
@@ -420,6 +394,8 @@
for(var/i in loot)
new i(loc)
if(!gibbed)
if(death_sound)
playsound(get_turf(src),death_sound, 200, 1
if(deathmessage)
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
+17
View File
@@ -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
View File
@@ -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()
+7 -5
View File
@@ -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
+1 -1
View File
@@ -6,7 +6,7 @@
flags = NONE
invisibility = 101
invisibility = INVISIBILITY_ABSTRACT
density = 0
stat = DEAD
+255
View File
@@ -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
+8 -8
View File
@@ -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)
+6
View File
@@ -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()
+3 -4
View File
@@ -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"
+113
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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()
+5 -8
View File
@@ -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"
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+14 -1
View File
@@ -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)
+1 -1
View File
@@ -27,7 +27,7 @@
/obj/machinery/power/terminal/hide(i)
if(i)
invisibility = 101
invisibility = INVISIBILITY_MAXIMUM
icon_state = "term-f"
else
invisibility = 0
+4 -2
View File
@@ -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
+1 -2
View File
@@ -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()
+12 -3
View File
@@ -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

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