mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
Merge branch 'master' into WeedControl
This commit is contained in:
@@ -322,10 +322,10 @@
|
||||
|
||||
for(var/t in turf_list)
|
||||
var/turf/open/T = t
|
||||
if (space_is_all_consuming && !space_in_group && istype(T.air, /datum/gas_mixture/space))
|
||||
if (space_is_all_consuming && !space_in_group && istype(T.air, /datum/gas_mixture/immutable/space))
|
||||
space_in_group = 1
|
||||
qdel(A)
|
||||
A = new/datum/gas_mixture/space()
|
||||
A = new/datum/gas_mixture/immutable/space()
|
||||
A.merge(T.air)
|
||||
|
||||
for(var/id in A_gases)
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
//"immutable" gas mixture used for immutable calculations
|
||||
//it can be changed, but any changes will ultimately be undone before they can have any effect
|
||||
|
||||
/datum/gas_mixture/immutable
|
||||
var/initial_temperature
|
||||
|
||||
/datum/gas_mixture/immutable/proc/reset_gas_mix()
|
||||
temperature = initial_temperature
|
||||
temperature_archived = initial_temperature
|
||||
|
||||
/datum/gas_mixture/immutable/New()
|
||||
..()
|
||||
reset_gas_mix()
|
||||
|
||||
/datum/gas_mixture/immutable/garbage_collect()
|
||||
reset_gas_mix()
|
||||
|
||||
/datum/gas_mixture/immutable/archive()
|
||||
return 1 //nothing changes, so we do nothing and the archive is successful
|
||||
|
||||
/datum/gas_mixture/immutable/merge()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/immutable/heat_capacity_archived()
|
||||
return heat_capacity()
|
||||
|
||||
/datum/gas_mixture/immutable/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
|
||||
. = ..(sharer, 0)
|
||||
reset_gas_mix()
|
||||
|
||||
/datum/gas_mixture/immutable/after_share()
|
||||
temperature = initial_temperature
|
||||
reset_gas_mix()
|
||||
|
||||
/datum/gas_mixture/immutable/react()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/immutable/copy()
|
||||
return new type //we're immutable, so we can just return a new instance.
|
||||
|
||||
/datum/gas_mixture/immutable/copy_from()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/immutable/copy_from_turf()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/immutable/parse_gas_string()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/immutable/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity)
|
||||
. = ..()
|
||||
temperature = initial_temperature
|
||||
|
||||
//used by space tiles
|
||||
/datum/gas_mixture/immutable/space
|
||||
initial_temperature = TCMB
|
||||
|
||||
/datum/gas_mixture/immutable/space/garbage_collect()
|
||||
gases.Cut() //clever way of ensuring we always are empty.
|
||||
|
||||
/datum/gas_mixture/immutable/space/heat_capacity()
|
||||
return 7000
|
||||
|
||||
/datum/gas_mixture/immutable/space/remove()
|
||||
return copy() //we're always empty, so we can just return a copy.
|
||||
|
||||
/datum/gas_mixture/immutable/space/remove_ratio()
|
||||
return copy() //we're always empty, so we can just return a copy.
|
||||
|
||||
|
||||
//used by cloners
|
||||
/datum/gas_mixture/immutable/cloner
|
||||
initial_temperature = T20C
|
||||
|
||||
/datum/gas_mixture/immutable/cloner/reset_gas_mix()
|
||||
assert_gas("n2")
|
||||
gases["n2"][MOLES] = MOLES_O2STANDARD + MOLES_N2STANDARD
|
||||
..()
|
||||
|
||||
/datum/gas_mixture/immutable/cloner/heat_capacity()
|
||||
return (MOLES_O2STANDARD + MOLES_N2STANDARD)*20 //specific heat of nitrogen is 20
|
||||
@@ -1,58 +0,0 @@
|
||||
//"immutable" gas mixture used for space calculations
|
||||
//it can be changed, but any changes will ultimately be undone before they can have any effect
|
||||
|
||||
/datum/gas_mixture/space
|
||||
|
||||
/datum/gas_mixture/space/New()
|
||||
..()
|
||||
temperature = TCMB
|
||||
temperature_archived = TCMB
|
||||
|
||||
/datum/gas_mixture/space/garbage_collect()
|
||||
gases.Cut() //clever way of ensuring we always are empty.
|
||||
|
||||
/datum/gas_mixture/space/archive()
|
||||
return 1 //nothing changes, so we do nothing and the archive is successful
|
||||
|
||||
/datum/gas_mixture/space/merge()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/space/heat_capacity()
|
||||
. = 7000
|
||||
|
||||
/datum/gas_mixture/space/heat_capacity_archived()
|
||||
. = heat_capacity()
|
||||
|
||||
/datum/gas_mixture/space/remove()
|
||||
return copy() //we're immutable, so we can just return a copy.
|
||||
|
||||
/datum/gas_mixture/space/remove_ratio()
|
||||
return copy() //we're immutable, so we can just return a copy.
|
||||
|
||||
/datum/gas_mixture/space/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
|
||||
. = ..(sharer, 0)
|
||||
temperature = TCMB
|
||||
gases.Cut()
|
||||
|
||||
/datum/gas_mixture/space/after_share()
|
||||
temperature = TCMB
|
||||
gases.Cut()
|
||||
|
||||
/datum/gas_mixture/space/react()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/space/copy()
|
||||
return new /datum/gas_mixture/space //we're immutable, so we can just return a new instance.
|
||||
|
||||
/datum/gas_mixture/space/copy_from()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/space/copy_from_turf()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/space/parse_gas_string()
|
||||
return 0 //we're immutable.
|
||||
|
||||
/datum/gas_mixture/space/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity)
|
||||
. = ..()
|
||||
temperature = TCMB
|
||||
@@ -105,7 +105,7 @@
|
||||
/datum/export/rcd
|
||||
cost = 100 // 15 metal -> 75 credits, +25 credits for production
|
||||
unit_name = "rapid construction device"
|
||||
export_types = list(/obj/item/weapon/rcd)
|
||||
export_types = list(/obj/item/weapon/construction/rcd)
|
||||
|
||||
/datum/export/rcd_ammo
|
||||
cost = 15 // 1.5 metal, 1 glass -> 12.5 credits, +2.5 credits
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
/obj/item/weapon/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer=1,\
|
||||
/obj/item/weapon/gun/energy/e_gun=1,\
|
||||
/obj/item/weapon/rcd/loaded=1)
|
||||
/obj/item/weapon/construction/rcd/loaded=1)
|
||||
|
||||
/datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
@@ -158,7 +158,7 @@
|
||||
/obj/item/weapon/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
/obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\
|
||||
/obj/item/weapon/rcd/combat=1)
|
||||
/obj/item/weapon/construction/rcd/combat=1)
|
||||
|
||||
|
||||
/datum/outfit/centcom_official
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
obj_integrity = 300
|
||||
max_integrity = 300
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 50, acid = 75)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/pipe_dispenser)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/device/t_scanner, /obj/item/weapon/construction/rcd, /obj/item/weapon/pipe_dispenser)
|
||||
siemens_coefficient = 0
|
||||
var/obj/item/clothing/head/helmet/space/hardsuit/helmet
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet)
|
||||
|
||||
@@ -493,7 +493,7 @@
|
||||
icon_state = "coatengineer"
|
||||
item_state = "coatengineer"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20, fire = 30, acid = 45)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/pipe_dispenser)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/construction/rcd, /obj/item/weapon/pipe_dispenser)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/engineering
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
var/list/growth_queue
|
||||
var/spread_multiplier = 5
|
||||
var/spread_cap = 30
|
||||
var/list/sv_mutations_list
|
||||
var/list/vine_mutations_list
|
||||
var/mutativeness = 1
|
||||
|
||||
/datum/spacevine_controller/New(turf/location, list/muts, potency, production)
|
||||
@@ -430,8 +430,8 @@
|
||||
START_PROCESSING(SSobj, src)
|
||||
vines = list()
|
||||
growth_queue = list()
|
||||
sv_mutations_list = list()
|
||||
init_subtypes(/datum/spacevine_mutation, sv_mutations_list)
|
||||
vine_mutations_list = list()
|
||||
init_subtypes(/datum/spacevine_mutation/, vine_mutations_list)
|
||||
if(potency != null)
|
||||
mutativeness = potency / 10
|
||||
if(production != null)
|
||||
@@ -473,7 +473,7 @@
|
||||
var/parentcolor = parent.atom_colours[FIXED_COLOUR_PRIORITY]
|
||||
SV.add_atom_colour(parentcolor, FIXED_COLOUR_PRIORITY)
|
||||
if(prob(mutativeness))
|
||||
var/datum/spacevine_mutation/randmut = pick(sv_mutations_list - SV.mutations)
|
||||
var/datum/spacevine_mutation/randmut = pick(vine_mutations_list - SV.mutations)
|
||||
randmut.add_mutation_to_vinepiece(SV)
|
||||
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
|
||||
@@ -6,27 +6,10 @@
|
||||
earliest_start = 0
|
||||
|
||||
/datum/round_event/wizard/rpgloot/start()
|
||||
var/list/prefixespositive = list("greater", "major", "blessed", "superior", "enpowered", "honed", "true", "glorious", "robust")
|
||||
var/list/prefixesnegative = list("lesser", "minor", "blighted", "inferior", "enfeebled", "rusted", "unsteady", "tragic", "gimped")
|
||||
var/list/suffixes = list("orc slaying", "elf slaying", "corgi slaying", "strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma", "the forest", "the hills", "the plains", "the sea", "the sun", "the moon", "the void", "the world", "the fool", "many secrets", "many tales", "many colors", "rending", "sundering", "the night", "the day")
|
||||
var/upgrade_scroll_chance = 0
|
||||
var/upgrade_scroll_chance = 0
|
||||
for(var/obj/item/I in world)
|
||||
if(istype(I,/obj/item/organ/))
|
||||
continue
|
||||
var/quality = pick(1;15, 2;14, 2;13, 2;12, 3;11, 3;10, 3;9, 4;8, 4;7, 4;6, 5;5, 5;4, 5;3, 6;2, 6;1, 6;0)
|
||||
if(prob(50))
|
||||
quality = -quality
|
||||
if(quality > 0)
|
||||
I.name = "[pick(prefixespositive)] [I.name] of [pick(suffixes)] +[quality]"
|
||||
else if(quality < 0)
|
||||
I.name = "[pick(prefixesnegative)] [I.name] of [pick(suffixes)] [quality]"
|
||||
else
|
||||
I.name = "[I.name] of [pick(suffixes)]"
|
||||
|
||||
I.force = max(0,I.force + quality)
|
||||
I.throwforce = max(0,I.throwforce + quality)
|
||||
for(var/value in I.armor)
|
||||
I.armor[value] += quality
|
||||
if(!istype(I.rpg_loot))
|
||||
I.rpg_loot = new(I)
|
||||
|
||||
if(istype(I,/obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = I
|
||||
@@ -36,28 +19,97 @@
|
||||
upgrade_scroll_chance = max(0,upgrade_scroll_chance-100)
|
||||
upgrade_scroll_chance += 25
|
||||
|
||||
GLOB.rpg_loot_items = TRUE
|
||||
|
||||
/obj/item/upgradescroll
|
||||
name = "Item Fortification Scroll"
|
||||
name = "item fortification scroll"
|
||||
desc = "Somehow, this piece of paper can be applied to items to make them \"better\". Apparently there's a risk of losing the item if it's already \"too good\". <i>This all feels so arbitrary...</i>"
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "scroll"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
var/upgrade_amount = 1
|
||||
var/can_backfire = TRUE
|
||||
var/one_use = TRUE
|
||||
|
||||
/obj/item/upgradescroll/afterattack(obj/item/target, mob/user , proximity)
|
||||
if(!proximity || !istype(target))
|
||||
return
|
||||
var/quality = target.force - initial(target.force)
|
||||
if(quality > 9 && prob((quality - 9)*10))
|
||||
to_chat(user, "<span class='danger'>[target] catches fire!</span>")
|
||||
if(target.resistance_flags & (LAVA_PROOF|FIRE_PROOF))
|
||||
target.resistance_flags &= ~(LAVA_PROOF|FIRE_PROOF)
|
||||
target.resistance_flags |= FLAMMABLE
|
||||
target.fire_act()
|
||||
|
||||
var/datum/rpg_loot/rpg_loot_datum = target.rpg_loot
|
||||
if(!istype(rpg_loot_datum))
|
||||
rpg_loot_datum = new /datum/rpg_loot(target)
|
||||
|
||||
var/quality = rpg_loot_datum.quality
|
||||
|
||||
if(can_backfire && (quality > 9 && prob((quality - 9)*10)))
|
||||
to_chat(user, "<span class='danger'>[target] violently glows blue for a while, then evaporates.</span>")
|
||||
target.burn()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[target] glows blue and seems vaguely \"better\"!</span>")
|
||||
rpg_loot_datum.modify(upgrade_amount)
|
||||
|
||||
if(one_use)
|
||||
qdel(src)
|
||||
return
|
||||
target.force += 1
|
||||
target.throwforce += 1
|
||||
for(var/value in target.armor)
|
||||
target.armor[value] += 1
|
||||
to_chat(user, "<span class='notice'>[target] glows blue and seems vaguely \"better\"!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/upgradescroll/unlimited
|
||||
name = "unlimited foolproof item fortification scroll"
|
||||
desc = "Somehow, this piece of paper can be applied to items to make them \"better\". This scroll is made from the tongues of dead paper wizards, and can be used an unlimited number of times, with no drawbacks."
|
||||
one_use = FALSE
|
||||
can_backfire = FALSE
|
||||
|
||||
/datum/rpg_loot
|
||||
var/positive_prefix = "okay"
|
||||
var/negative_prefix = "weak"
|
||||
var/suffix = "something profound"
|
||||
var/quality = 0
|
||||
|
||||
var/obj/item/attached
|
||||
var/original_name
|
||||
|
||||
/datum/rpg_loot/New(attached_item=null)
|
||||
attached = attached_item
|
||||
|
||||
randomise()
|
||||
|
||||
/datum/rpg_loot/Destroy()
|
||||
attached = null
|
||||
|
||||
/datum/rpg_loot/proc/randomise()
|
||||
var/static/list/prefixespositive = list("greater", "major", "blessed", "superior", "enpowered", "honed", "true", "glorious", "robust")
|
||||
var/static/list/prefixesnegative = list("lesser", "minor", "blighted", "inferior", "enfeebled", "rusted", "unsteady", "tragic", "gimped")
|
||||
var/static/list/suffixes = list("orc slaying", "elf slaying", "corgi slaying", "strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma", "the forest", "the hills", "the plains", "the sea", "the sun", "the moon", "the void", "the world", "the fool", "many secrets", "many tales", "many colors", "rending", "sundering", "the night", "the day")
|
||||
|
||||
var/new_quality = pick(1;15, 2;14, 2;13, 2;12, 3;11, 3;10, 3;9, 4;8, 4;7, 4;6, 5;5, 5;4, 5;3, 6;2, 6;1, 6;0)
|
||||
|
||||
suffix = pick(suffixes)
|
||||
positive_prefix = pick(prefixespositive)
|
||||
negative_prefix = pick(prefixesnegative)
|
||||
|
||||
if(prob(50))
|
||||
new_quality = -new_quality
|
||||
|
||||
modify(new_quality)
|
||||
|
||||
/datum/rpg_loot/proc/rename()
|
||||
var/obj/item/I = attached
|
||||
if(!original_name)
|
||||
original_name = I.name
|
||||
if(quality < 0)
|
||||
I.name = "[negative_prefix] [original_name] of [suffix] [quality]"
|
||||
else if(quality == 0)
|
||||
I.name = "[original_name] of [suffix]"
|
||||
else if(quality > 0)
|
||||
I.name = "[positive_prefix] [original_name] of [suffix] +[quality]"
|
||||
|
||||
/datum/rpg_loot/proc/modify(quality_mod)
|
||||
var/obj/item/I = attached
|
||||
quality += quality_mod
|
||||
|
||||
I.force = max(0,I.force + quality_mod)
|
||||
I.throwforce = max(0,I.throwforce + quality_mod)
|
||||
|
||||
for(var/value in I.armor)
|
||||
I.armor[value] += quality
|
||||
|
||||
rename()
|
||||
|
||||
@@ -538,7 +538,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
|
||||
/obj/item/device/radio/headset/syndicate, /obj/item/weapon/grenade/plastic/c4,\
|
||||
/obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\
|
||||
/obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\
|
||||
/obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\
|
||||
/obj/item/weapon/hand_tele, /obj/item/weapon/construction/rcd, /obj/item/weapon/tank/jetpack,\
|
||||
/obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\
|
||||
/obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\
|
||||
/obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank)
|
||||
@@ -673,7 +673,6 @@ Gunshots/explosions/opening doors/less rare audio (done)
|
||||
QDEL_IN(O, 300)
|
||||
|
||||
|
||||
|
||||
/obj/effect/hallucination/bolts
|
||||
var/list/doors = list()
|
||||
|
||||
|
||||
@@ -133,6 +133,10 @@ GLOBAL_LIST_EMPTY(all_lighting_objects) // Global list of lighting objects.
|
||||
/atom/movable/lighting_object/blob_act()
|
||||
return
|
||||
|
||||
// Nope nope nope!
|
||||
/atom/movable/lighting_object/onShuttleMove(turf/T1, rotation)
|
||||
return FALSE
|
||||
|
||||
// Override here to prevent things accidentally moving around overlays.
|
||||
/atom/movable/lighting_object/forceMove(atom/destination, var/no_tp=FALSE, var/harderforce = FALSE)
|
||||
if(harderforce)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
dir = direct //This camera eye is visible as a drone, and needs to keep the dir updated
|
||||
..()
|
||||
|
||||
/obj/item/weapon/rcd/internal //Base console's internal RCD. Roundstart consoles are filled, rebuilt cosoles start empty.
|
||||
/obj/item/weapon/construction/rcd/internal //Base console's internal RCD. Roundstart consoles are filled, rebuilt cosoles start empty.
|
||||
name = "internal RCD"
|
||||
max_matter = 600 //Bigger container and faster speeds due to being specialized and stationary.
|
||||
no_ammo_message = "<span class='warning'>Internal matter exhausted. Please add additional materials.</span>"
|
||||
@@ -30,7 +30,7 @@
|
||||
name = "base contruction console"
|
||||
desc = "An industrial computer integrated with a camera-assisted rapid construction drone."
|
||||
networks = list("SS13")
|
||||
var/obj/item/weapon/rcd/internal/RCD //Internal RCD. The computer passes user commands to this in order to avoid massive copypaste.
|
||||
var/obj/item/weapon/construction/rcd/internal/RCD //Internal RCD. The computer passes user commands to this in order to avoid massive copypaste.
|
||||
circuit = /obj/item/weapon/circuitboard/computer/base_construction
|
||||
off_action = new/datum/action/innate/camera_off/base_construction
|
||||
var/datum/action/innate/aux_base/switch_mode/switch_mode_action = new //Action for switching the RCD's build modes
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
/obj/machinery/computer/camera_advanced/base_construction/New()
|
||||
..()
|
||||
RCD = new /obj/item/weapon/rcd/internal(src)
|
||||
RCD = new /obj/item/weapon/construction/rcd/internal(src)
|
||||
|
||||
/obj/machinery/computer/camera_advanced/base_construction/Initialize(mapload)
|
||||
..()
|
||||
@@ -117,7 +117,7 @@
|
||||
remote_eye = C.remote_control
|
||||
B = target
|
||||
if(!B.RCD) //The console must always have an RCD.
|
||||
B.RCD = new /obj/item/weapon/rcd/internal(src) //If the RCD is lost somehow, make a new (empty) one!
|
||||
B.RCD = new /obj/item/weapon/construction/rcd/internal(src) //If the RCD is lost somehow, make a new (empty) one!
|
||||
|
||||
/datum/action/innate/aux_base/proc/check_spot()
|
||||
//Check a loction to see if it is inside the aux base at the station. Camera visbility checks omitted so as to not hinder construction.
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
/obj/item/device/wormhole_jaunter/attack_self(mob/user)
|
||||
user.visible_message("<span class='notice'>[user.name] activates the [src.name]!</span>")
|
||||
feedback_add_details("jaunter", "U") // user activated
|
||||
feedback_add_details("jaunter", "User") // user activated
|
||||
activate(user)
|
||||
|
||||
/obj/item/device/wormhole_jaunter/proc/turf_check(mob/user)
|
||||
@@ -124,13 +124,13 @@
|
||||
|
||||
if(triggered)
|
||||
usr.visible_message("<span class='warning'>The [src] overloads and activates!</span>")
|
||||
feedback_add_details("jaunter","E") // EMP accidental activation
|
||||
feedback_add_details("jaunter","EMP") // EMP accidental activation
|
||||
activate(usr)
|
||||
|
||||
/obj/item/device/wormhole_jaunter/proc/chasm_react(mob/user)
|
||||
if(user.get_item_by_slot(slot_belt) == src)
|
||||
to_chat(user, "Your [src] activates, saving you from the chasm!</span>")
|
||||
feedback_add_details("jaunter","C") // chasm automatic activation
|
||||
feedback_add_details("jaunter","Chasm") // chasm automatic activation
|
||||
activate(user)
|
||||
else
|
||||
to_chat(user, "The [src] is not attached to your belt, preventing it from saving you from the chasm. RIP.</span>")
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
user.sight |= SEE_MOBS
|
||||
icon_state = "lantern"
|
||||
wisp.orbit(user, 20)
|
||||
feedback_add_details("wisp_lantern","F") // freed
|
||||
feedback_add_details("wisp_lantern","Freed") // freed
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You return the wisp to the lantern.</span>")
|
||||
@@ -102,7 +102,7 @@
|
||||
wisp.stop_orbit()
|
||||
wisp.loc = src
|
||||
icon_state = "lantern-blue"
|
||||
feedback_add_details("wisp_lantern","R") // returned
|
||||
feedback_add_details("wisp_lantern","Returned") // returned
|
||||
|
||||
/obj/item/device/wisp_lantern/Initialize()
|
||||
..()
|
||||
@@ -229,7 +229,7 @@
|
||||
|
||||
/obj/item/device/immortality_talisman/attack_self(mob/user)
|
||||
if(cooldown < world.time)
|
||||
feedback_add_details("immortality_talisman","U") // usage
|
||||
feedback_add_details("immortality_talisman","Activated") // usage
|
||||
cooldown = world.time + 600
|
||||
user.visible_message("<span class='danger'>[user] vanishes from reality, leaving a a hole in [user.p_their()] place!</span>")
|
||||
var/obj/effect/immortality_talisman/Z = new(get_turf(src.loc))
|
||||
|
||||
@@ -920,18 +920,14 @@
|
||||
return
|
||||
if(!riding_datum)
|
||||
riding_datum = new /datum/riding/human(src)
|
||||
if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)))
|
||||
return
|
||||
if(buckled) //NO INFINITE STACKING!!
|
||||
return
|
||||
if(M.stat != CONSCIOUS)
|
||||
if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled || (M.stat != CONSCIOUS))
|
||||
return
|
||||
if(iscarbon(M))
|
||||
if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE))
|
||||
M.visible_message("<span class='boldwarning'>[M] can't hang onto [src]!</span>")
|
||||
M.visible_message("<span class='warning'>[M] can't hang onto [src]!</span>")
|
||||
return
|
||||
if(!riding_datum.equip_buckle_inhands(M, 2)) //MAKE SURE THIS IS LAST!!
|
||||
M.visible_message("<span class='boldwarning'>[M] can't climb onto [src] because [M.p_their()] hands are full!</span>")
|
||||
M.visible_message("<span class='warning'>[M] can't climb onto [src]!</span>")
|
||||
return
|
||||
. = ..(M, force, check_loc)
|
||||
stop_pulling()
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
|
||||
return not_handled //For future deeper overrides
|
||||
|
||||
/mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop)
|
||||
/mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE)
|
||||
. = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should.
|
||||
if(!. || !I)
|
||||
return
|
||||
|
||||
@@ -111,6 +111,12 @@
|
||||
var/obj/item/thing = C.get_item_by_slot(slot_id)
|
||||
if(thing && (!thing.species_exception || !is_type_in_list(src,thing.species_exception)))
|
||||
C.dropItemToGround(thing)
|
||||
|
||||
// this needs to be FIRST because qdel calls update_body which checks if we have DIGITIGRADE legs or not and if not then removes DIGITIGRADE from species_traits
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
|
||||
species_traits += DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
|
||||
var/obj/item/organ/heart/heart = C.getorganslot("heart")
|
||||
var/obj/item/organ/lungs/lungs = C.getorganslot("lungs")
|
||||
@@ -152,10 +158,6 @@
|
||||
|
||||
if(exotic_bloodtype && C.dna.blood_type != exotic_bloodtype)
|
||||
C.dna.blood_type = exotic_bloodtype
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
|
||||
species_traits += DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/C)
|
||||
if(C.dna.species.exotic_bloodtype)
|
||||
|
||||
@@ -132,6 +132,10 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/monkey/proc/handle_combat()
|
||||
// Don't do any AI if inside another mob (devoured)
|
||||
if (ismob(loc))
|
||||
// Really no idea what needs to be returned but everything else is TRUE
|
||||
return TRUE
|
||||
|
||||
if(on_fire || buckled || restrained())
|
||||
if(!resisting && prob(MONKEY_RESIST_PROB))
|
||||
|
||||
@@ -287,7 +287,7 @@
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/borg/sight/meson,
|
||||
/obj/item/weapon/rcd/borg,
|
||||
/obj/item/weapon/construction/rcd/borg,
|
||||
/obj/item/weapon/pipe_dispenser,
|
||||
/obj/item/weapon/extinguisher,
|
||||
/obj/item/weapon/weldingtool/largetank/cyborg,
|
||||
|
||||
@@ -338,7 +338,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
to_chat(src, "<span class='danger'><B>You don't have another mode!</span></B>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/proc/ToggleLight()
|
||||
if(!luminosity)
|
||||
if(light_range<3)
|
||||
to_chat(src, "<span class='notice'>You activate your light.</span>")
|
||||
set_light(3)
|
||||
else
|
||||
|
||||
@@ -649,3 +649,14 @@
|
||||
force = 5
|
||||
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
|
||||
update()
|
||||
|
||||
|
||||
/obj/machinery/light/floor
|
||||
name = "floor light"
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
base_state = "floor" // base description and icon_state
|
||||
icon_state = "floor1"
|
||||
brightness = 4
|
||||
layer = 2.5
|
||||
light_type = /obj/item/weapon/light/bulb
|
||||
fitting = "bulb"
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
/obj/machinery/power/emitter
|
||||
name = "Emitter"
|
||||
desc = "A heavy duty industrial laser.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
|
||||
@@ -9,6 +7,11 @@
|
||||
anchored = 0
|
||||
density = 1
|
||||
req_access = list(GLOB.access_engine_equip)
|
||||
|
||||
// The following 3 vars are mostly for the prototype
|
||||
var/manual = FALSE
|
||||
var/charge = 0
|
||||
var/atom/target = null
|
||||
|
||||
use_power = 0
|
||||
idle_power_usage = 10
|
||||
@@ -174,9 +177,11 @@
|
||||
investigate_log("lost power and turned <font color='red'>off</font> at [get_area(src)]","singulo")
|
||||
log_game("Emitter lost power in ([x],[y],[z])")
|
||||
return
|
||||
if(!check_delay())
|
||||
if(charge <=80)
|
||||
charge+=5
|
||||
if(!check_delay() || manual == TRUE)
|
||||
return FALSE
|
||||
fire_beam()
|
||||
fire_beam(target)
|
||||
|
||||
/obj/machinery/power/emitter/proc/check_delay()
|
||||
if((src.last_shot + src.fire_delay) <= world.time)
|
||||
@@ -192,34 +197,62 @@
|
||||
add_load(active_power_usage)
|
||||
fire_beam()
|
||||
|
||||
/obj/machinery/power/emitter/proc/fire_beam()
|
||||
src.last_shot = world.time
|
||||
if(src.shot_number < 3)
|
||||
src.fire_delay = 20
|
||||
src.shot_number ++
|
||||
else
|
||||
src.fire_delay = rand(minimum_fire_delay,maximum_fire_delay)
|
||||
src.shot_number = 0
|
||||
var/obj/item/projectile/A = new projectile_type(src.loc)
|
||||
A.setDir(src.dir)
|
||||
playsound(src.loc, projectile_sound, 25, 1)
|
||||
/obj/machinery/power/emitter/proc/fire_beam(atom/targeted_atom, mob/user)
|
||||
var/turf/targets_from = get_turf(src)
|
||||
if(targeted_atom == user|| targeted_atom == targets_from)
|
||||
return
|
||||
var/obj/item/projectile/P = new projectile_type(targets_from)
|
||||
playsound(src.loc, projectile_sound, 50, 1)
|
||||
if(prob(35))
|
||||
sparks.start()
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
A.yo = 20
|
||||
A.xo = 0
|
||||
P.yo = 20
|
||||
P.xo = 0
|
||||
if(NORTHEAST)
|
||||
P.yo = 20
|
||||
P.xo = 20
|
||||
if(EAST)
|
||||
A.yo = 0
|
||||
A.xo = 20
|
||||
P.yo = 0
|
||||
P.xo = 20
|
||||
if(SOUTHEAST)
|
||||
P.yo = -20
|
||||
P.xo = 20
|
||||
if(WEST)
|
||||
A.yo = 0
|
||||
A.xo = -20
|
||||
P.yo = 0
|
||||
P.xo = -20
|
||||
if(SOUTHWEST)
|
||||
P.yo = -20
|
||||
P.xo = -20
|
||||
if(NORTHWEST)
|
||||
P.yo = 20
|
||||
P.xo = -20
|
||||
else // Any other
|
||||
A.yo = -20
|
||||
A.xo = 0
|
||||
A.starting = loc
|
||||
A.fire()
|
||||
P.yo = -20
|
||||
P.xo = 0
|
||||
if(target)
|
||||
P.yo = targeted_atom.y - targets_from.y
|
||||
P.xo = targeted_atom.x - targets_from.x
|
||||
P.current = targets_from
|
||||
P.starting = targets_from
|
||||
P.firer = src
|
||||
P.original = targeted_atom
|
||||
if(!manual)
|
||||
last_shot = world.time
|
||||
if(shot_number < 3)
|
||||
fire_delay = 20
|
||||
shot_number ++
|
||||
else
|
||||
fire_delay = rand(minimum_fire_delay,maximum_fire_delay)
|
||||
shot_number = 0
|
||||
if(!target)
|
||||
P.setDir(src.dir)
|
||||
P.starting = loc
|
||||
else
|
||||
if(QDELETED(target))
|
||||
target = null
|
||||
P.fire()
|
||||
return P
|
||||
|
||||
/obj/machinery/power/emitter/can_be_unfasten_wrench(mob/user, silent)
|
||||
if(state == EM_WELDED)
|
||||
@@ -312,3 +345,148 @@
|
||||
emagged = 1
|
||||
if(user)
|
||||
user.visible_message("[user.name] emags the [src.name].","<span class='notice'>You short out the lock.</span>")
|
||||
|
||||
|
||||
/obj/machinery/power/emitter/prototype
|
||||
name = "Prototype Emitter"
|
||||
icon = 'icons/obj/turrets.dmi'
|
||||
icon_state = "protoemitter"
|
||||
icon_state_on = "protoemitter_+a"
|
||||
can_buckle = TRUE
|
||||
buckle_lying = 0
|
||||
var/view_range = 12
|
||||
var/datum/action/innate/protoemitter/firing/auto
|
||||
|
||||
//BUCKLE HOOKS
|
||||
|
||||
/obj/machinery/power/emitter/prototype/unbuckle_mob(mob/living/buckled_mob,force = 0)
|
||||
playsound(src,'sound/mecha/mechmove01.ogg', 50, 1)
|
||||
manual = FALSE
|
||||
for(var/obj/item/I in buckled_mob.held_items)
|
||||
if(istype(I, /obj/item/weapon/turret_control))
|
||||
qdel(I)
|
||||
if(istype(buckled_mob))
|
||||
buckled_mob.pixel_x = 0
|
||||
buckled_mob.pixel_y = 0
|
||||
if(buckled_mob.client)
|
||||
buckled_mob.client.change_view(world.view)
|
||||
auto.Remove(buckled_mob)
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/power/emitter/prototype/user_buckle_mob(mob/living/M, mob/living/carbon/user)
|
||||
if(user.incapacitated() || !istype(user))
|
||||
return
|
||||
for(var/atom/movable/A in get_turf(src))
|
||||
if(A.density && (A != src && A != M))
|
||||
return
|
||||
M.forceMove(get_turf(src))
|
||||
..()
|
||||
playsound(src,'sound/mecha/mechmove01.ogg', 50, 1)
|
||||
M.pixel_y = 14
|
||||
layer = 4.1
|
||||
if(M.client)
|
||||
M.client.change_view(view_range)
|
||||
if(!auto)
|
||||
auto = new()
|
||||
auto.Grant(M, src)
|
||||
|
||||
/datum/action/innate/protoemitter
|
||||
check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_CONSCIOUS
|
||||
var/obj/machinery/power/emitter/prototype/PE
|
||||
var/mob/living/carbon/U
|
||||
|
||||
|
||||
/datum/action/innate/protoemitter/Grant(mob/living/carbon/L, obj/machinery/power/emitter/prototype/proto)
|
||||
PE = proto
|
||||
U = L
|
||||
. = ..()
|
||||
|
||||
/datum/action/innate/protoemitter/firing
|
||||
name = "Switch to Manual Firing"
|
||||
desc = "The emitter will only fire on your command and at your designated target"
|
||||
button_icon_state = "mech_zoom_on"
|
||||
|
||||
/datum/action/innate/protoemitter/firing/Activate()
|
||||
if(PE.manual)
|
||||
playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1)
|
||||
PE.manual = FALSE
|
||||
name = "Switch to Manual Firing"
|
||||
desc = "The emitter will only fire on your command and at your designated target"
|
||||
button_icon_state = "mech_zoom_on"
|
||||
for(var/obj/item/I in U.held_items)
|
||||
if(istype(I, /obj/item/weapon/turret_control))
|
||||
qdel(I)
|
||||
UpdateButtonIcon()
|
||||
return
|
||||
else
|
||||
playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1)
|
||||
name = "Switch to Automatic Firing"
|
||||
desc = "Emitters will switch to periodic firing at your last target"
|
||||
button_icon_state = "mech_zoom_off"
|
||||
PE.manual = TRUE
|
||||
for(var/V in U.held_items)
|
||||
var/obj/item/I = V
|
||||
if(istype(I))
|
||||
if(U.dropItemToGround(I))
|
||||
var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control()
|
||||
U.put_in_hands(TC)
|
||||
else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand
|
||||
var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control()
|
||||
U.put_in_hands(TC)
|
||||
UpdateButtonIcon()
|
||||
|
||||
|
||||
/obj/item/weapon/turret_control
|
||||
name = "turret controls"
|
||||
icon_state = "offhand"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
flags = ABSTRACT | NODROP
|
||||
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON
|
||||
var/delay = 0
|
||||
|
||||
/obj/item/weapon/turret_control/afterattack(atom/targeted_atom, mob/user)
|
||||
..()
|
||||
var/obj/machinery/power/emitter/E = user.buckled
|
||||
E.setDir(get_dir(E,targeted_atom))
|
||||
user.setDir(E.dir)
|
||||
switch(E.dir)
|
||||
if(NORTH)
|
||||
E.layer = 3.9
|
||||
user.pixel_x = 0
|
||||
user.pixel_y = -14
|
||||
if(NORTHEAST)
|
||||
E.layer = 3.9
|
||||
user.pixel_x = -8
|
||||
user.pixel_y = -12
|
||||
if(EAST)
|
||||
E.layer = 4.1
|
||||
user.pixel_x = -14
|
||||
user.pixel_y = 0
|
||||
if(SOUTHEAST)
|
||||
E.layer = 3.9
|
||||
user.pixel_x = -8
|
||||
user.pixel_y = 12
|
||||
if(SOUTH)
|
||||
E.layer = 4.1
|
||||
user.pixel_x = 0
|
||||
user.pixel_y = 14
|
||||
if(SOUTHWEST)
|
||||
E.layer = 3.9
|
||||
user.pixel_x = 8
|
||||
user.pixel_y = 12
|
||||
if(WEST)
|
||||
E.layer = 4.1
|
||||
user.pixel_x = 14
|
||||
user.pixel_y = 0
|
||||
if(NORTHWEST)
|
||||
E.layer = 3.9
|
||||
user.pixel_x = 8
|
||||
user.pixel_y = -12
|
||||
|
||||
if(E.charge >= 10 && world.time > delay)
|
||||
E.charge -= 10
|
||||
E.target = targeted_atom
|
||||
E.fire_beam(targeted_atom, user)
|
||||
delay = world.time + 10
|
||||
else if (E.charge < 10)
|
||||
playsound(get_turf(user),'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||
|
||||
@@ -95,9 +95,8 @@
|
||||
var/obj/item/weapon/implant/req_implant = null
|
||||
|
||||
/obj/item/device/firing_pin/implant/pin_auth(mob/living/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
for(var/obj/item/weapon/implant/I in C.implants)
|
||||
if(istype(user))
|
||||
for(var/obj/item/weapon/implant/I in user.implants)
|
||||
if(req_implant && I.type == req_implant)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
|
||||
/datum/chemical_reaction/slime
|
||||
var/deletes_extract = TRUE
|
||||
|
||||
/datum/chemical_reaction/slime/on_reaction(datum/reagents/holder)
|
||||
delete_extract(holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
if(deletes_extract)
|
||||
delete_extract(holder)
|
||||
|
||||
/datum/chemical_reaction/slime/proc/delete_extract(datum/reagents/holder)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
@@ -19,12 +22,9 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimespawn/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/mob/living/simple_animal/slime/S
|
||||
S = new(get_turf(holder.my_atom), "grey")
|
||||
S.visible_message("<span class='danger'>Infused with plasma, the \
|
||||
core begins to quiver and grow, and soon a new baby slime \
|
||||
emerges from it!</span>")
|
||||
S.visible_message("<span class='danger'>Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!</span>")
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimeinaprov
|
||||
@@ -35,10 +35,6 @@
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/grey
|
||||
|
||||
/datum/chemical_reaction/slime/slimeinaprov/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimemonkey
|
||||
name = "Slime Monkey"
|
||||
id = "m_monkey"
|
||||
@@ -47,10 +43,8 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
for(var/i = 1, i <= 3, i++)
|
||||
var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
|
||||
M.loc = get_turf(holder.my_atom)
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
//Green
|
||||
@@ -62,10 +56,6 @@
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/green
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutate/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Mutated Green
|
||||
/datum/chemical_reaction/slime/slimemutate_unstable
|
||||
name = "Unstable Mutation Toxin"
|
||||
@@ -76,10 +66,6 @@
|
||||
required_container = /obj/item/slime_extract/green
|
||||
mix_message = "<span class='info'>The mixture rapidly expands and contracts, its appearance shifting into a sickening green.</span>"
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutate_unstable/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Metal
|
||||
/datum/chemical_reaction/slime/slimemetal
|
||||
name = "Slime Metal"
|
||||
@@ -89,10 +75,9 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimemetal/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/location = get_turf(holder.my_atom)
|
||||
new /obj/item/stack/sheet/plasteel (location, 5)
|
||||
new /obj/item/stack/sheet/metal (location, 15)
|
||||
new /obj/item/stack/sheet/plasteel(location, 5)
|
||||
new /obj/item/stack/sheet/metal(location, 15)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimeglass
|
||||
@@ -103,60 +88,49 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeglass/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/location = get_turf(holder.my_atom)
|
||||
new /obj/item/stack/sheet/rglass (location, 5)
|
||||
new /obj/item/stack/sheet/glass (location, 15)
|
||||
new /obj/item/stack/sheet/rglass(location, 5)
|
||||
new /obj/item/stack/sheet/glass(location, 15)
|
||||
..()
|
||||
|
||||
//Gold
|
||||
/datum/chemical_reaction/slime/slimecrit
|
||||
/datum/chemical_reaction/slime/slimemobspawn
|
||||
name = "Slime Crit"
|
||||
id = "m_tele"
|
||||
required_reagents = list("plasma" = 1)
|
||||
required_container = /obj/item/slime_extract/gold
|
||||
required_other = 1
|
||||
deletes_extract = FALSE //we do delete, but we don't do so instantly
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrit/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
/datum/chemical_reaction/slime/slimemobspawn/on_reaction(datum/reagents/holder)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently !</span>")
|
||||
addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 5, "Gold Slime"), 50)
|
||||
summon_mobs(T)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
..()
|
||||
M.qdel_timer = addtimer(CALLBACK(src, .proc/delete_extract, holder), 55, TIMER_STOPPABLE)
|
||||
|
||||
/datum/chemical_reaction/slime/slimecritlesser
|
||||
/datum/chemical_reaction/slime/slimemobspawn/proc/summon_mobs(datum/reagents/holder, turf/T)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently!</span>")
|
||||
addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 5, "Gold Slime"), 50)
|
||||
|
||||
/datum/chemical_reaction/slime/slimemobspawn/lesser
|
||||
name = "Slime Crit Lesser"
|
||||
id = "m_tele3"
|
||||
required_reagents = list("blood" = 1)
|
||||
required_container = /obj/item/slime_extract/gold
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecritlesser/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently !</span>")
|
||||
/datum/chemical_reaction/slime/slimemobspawn/lesser/summon_mobs(datum/reagents/holder, turf/T)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently!</span>")
|
||||
addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 3, "Lesser Gold Slime", "neutral"), 50)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
M.qdel_timer = addtimer(CALLBACK(src, .proc/delete_extract, holder), 55, TIMER_STOPPABLE)
|
||||
|
||||
/datum/chemical_reaction/slime/slimecritfriendly
|
||||
/datum/chemical_reaction/slime/slimemobspawn/friendly
|
||||
name = "Slime Crit Friendly"
|
||||
id = "m_tele5"
|
||||
required_reagents = list("water" = 1)
|
||||
required_container = /obj/item/slime_extract/gold
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecritfriendly/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably !</span>")
|
||||
/datum/chemical_reaction/slime/slimemobspawn/friendly/summon_mobs(datum/reagents/holder, turf/T)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
|
||||
addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 1, "Friendly Gold Slime", "neutral"), 50)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
M.qdel_timer = addtimer(CALLBACK(src, .proc/delete_extract, holder), 55, TIMER_STOPPABLE)
|
||||
|
||||
//Silver
|
||||
/datum/chemical_reaction/slime/slimebork
|
||||
@@ -167,8 +141,24 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimebork/on_reaction(datum/reagents/holder)
|
||||
//BORK BORK BORK
|
||||
var/list/borks = getborks()
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
for(var/mob/living/carbon/C in viewers(T, null))
|
||||
C.flash_act()
|
||||
|
||||
for(var/i in 1 to 4 + rand(1,2))
|
||||
var/chosen = pick(borks)
|
||||
var/obj/B = new chosen(T)
|
||||
if(prob(50))
|
||||
for(var/j in 1 to rand(1, 3))
|
||||
step(B, pick(NORTH,SOUTH,EAST,WEST))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimebork/proc/getborks()
|
||||
var/list/blocked = list(/obj/item/weapon/reagent_containers/food/snacks,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/store/bread,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/breadslice,
|
||||
@@ -188,53 +178,15 @@
|
||||
)
|
||||
blocked |= typesof(/obj/item/weapon/reagent_containers/food/snacks/customizable)
|
||||
|
||||
var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - blocked
|
||||
// BORK BORK BORK
|
||||
return typesof(/obj/item/weapon/reagent_containers/food/snacks) - blocked
|
||||
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
|
||||
C.flash_act()
|
||||
|
||||
for(var/i = 1, i <= 4 + rand(1,2), i++)
|
||||
var/chosen = pick(borks)
|
||||
var/obj/B = new chosen
|
||||
if(B)
|
||||
B.loc = get_turf(holder.my_atom)
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(B, pick(NORTH,SOUTH,EAST,WEST))
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimebork2
|
||||
/datum/chemical_reaction/slime/slimebork/drinks
|
||||
name = "Slime Bork 2"
|
||||
id = "m_tele4"
|
||||
required_reagents = list("water" = 1)
|
||||
required_container = /obj/item/slime_extract/silver
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimebork2/on_reaction(datum/reagents/holder)
|
||||
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks)
|
||||
// BORK BORK BORK
|
||||
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
for(var/mob/living/carbon/M in viewers(get_turf(holder.my_atom), null))
|
||||
M.flash_act()
|
||||
|
||||
for(var/i = 1, i <= 4 + rand(1,2), i++)
|
||||
var/chosen = pick(borks)
|
||||
var/obj/B = new chosen
|
||||
if(B)
|
||||
B.loc = get_turf(holder.my_atom)
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(B, pick(NORTH,SOUTH,EAST,WEST))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimebork/drinks/getborks()
|
||||
return subtypesof(/obj/item/weapon/reagent_containers/food/drinks)
|
||||
|
||||
//Blue
|
||||
/datum/chemical_reaction/slime/slimefrost
|
||||
@@ -245,11 +197,6 @@
|
||||
required_container = /obj/item/slime_extract/blue
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefrost/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimestabilizer
|
||||
name = "Slime Stabilizer"
|
||||
id = "m_slimestabilizer"
|
||||
@@ -258,12 +205,9 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimestabilizer/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/stabilizer/P = new /obj/item/slimepotion/stabilizer
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/stabilizer(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimefoam
|
||||
name = "Slime Foam"
|
||||
id = "m_foam"
|
||||
@@ -272,11 +216,6 @@
|
||||
required_container = /obj/item/slime_extract/blue
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefoam/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
|
||||
//Dark Blue
|
||||
/datum/chemical_reaction/slime/slimefreeze
|
||||
name = "Slime Freeze"
|
||||
@@ -286,12 +225,12 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefreeze/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
|
||||
addtimer(CALLBACK(src, .proc/freeze, holder), 50)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
..()
|
||||
M.qdel_timer = addtimer(CALLBACK(src, .proc/delete_extract, holder), 55, TIMER_STOPPABLE)
|
||||
|
||||
/datum/chemical_reaction/slime/slimefreeze/proc/freeze(datum/reagents/holder)
|
||||
@@ -300,8 +239,6 @@
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air("freon=50;TEMP=120")
|
||||
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimefireproof
|
||||
name = "Slime Fireproof"
|
||||
id = "m_fireproof"
|
||||
@@ -310,9 +247,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefireproof/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/fireproof/P = new /obj/item/slimepotion/fireproof
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/fireproof(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
//Orange
|
||||
@@ -324,24 +259,21 @@
|
||||
required_container = /obj/item/slime_extract/orange
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecasp/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimefire
|
||||
name = "Slime fire"
|
||||
id = "m_fire"
|
||||
required_reagents = list("plasma" = 1)
|
||||
required_container = /obj/item/slime_extract/orange
|
||||
required_other = 1
|
||||
deletes_extract = FALSE
|
||||
|
||||
/datum/chemical_reaction/slime/slimefire/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/TU = get_turf(holder.my_atom)
|
||||
TU.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
|
||||
addtimer(CALLBACK(src, .proc/slime_burn, holder), 50)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
..()
|
||||
M.qdel_timer = addtimer(CALLBACK(src, .proc/delete_extract, holder), 55, TIMER_STOPPABLE)
|
||||
|
||||
/datum/chemical_reaction/slime/slimefire/proc/slime_burn(datum/reagents/holder)
|
||||
@@ -359,12 +291,7 @@
|
||||
required_container = /obj/item/slime_extract/orange
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimesmoke/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Yellow
|
||||
|
||||
/datum/chemical_reaction/slime/slimeoverload
|
||||
name = "Slime EMP"
|
||||
id = "m_emp"
|
||||
@@ -373,11 +300,9 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
empulse(get_turf(holder.my_atom), 3, 7)
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimecell
|
||||
name = "Slime Powercell"
|
||||
id = "m_cell"
|
||||
@@ -386,9 +311,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/weapon/stock_parts/cell/high/slime/P = new /obj/item/weapon/stock_parts/cell/high/slime
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/weapon/stock_parts/cell/high/slime(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimeglow
|
||||
@@ -399,15 +322,12 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeglow/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.</span>")
|
||||
var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
|
||||
F.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/device/flashlight/slime(T)
|
||||
..()
|
||||
|
||||
//Purple
|
||||
|
||||
/datum/chemical_reaction/slime/slimepsteroid
|
||||
name = "Slime Steroid"
|
||||
id = "m_steroid"
|
||||
@@ -416,9 +336,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimepsteroid/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/steroid/P = new /obj/item/slimepotion/steroid
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/steroid(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimejam
|
||||
@@ -429,11 +347,6 @@
|
||||
required_container = /obj/item/slime_extract/purple
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimejam/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
|
||||
//Dark Purple
|
||||
/datum/chemical_reaction/slime/slimeplasma
|
||||
name = "Slime Plasma"
|
||||
@@ -443,9 +356,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeplasma/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/location = get_turf(holder.my_atom)
|
||||
new /obj/item/stack/sheet/mineral/plasma (location, 3)
|
||||
new /obj/item/stack/sheet/mineral/plasma(get_turf(holder.my_atom), 3)
|
||||
..()
|
||||
|
||||
//Red
|
||||
@@ -458,9 +369,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutator/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/mutator/P = new /obj/item/slimepotion/mutator
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/mutator(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimebloodlust
|
||||
@@ -471,13 +380,11 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimebloodlust/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null))
|
||||
slime.rabid = 1
|
||||
slime.visible_message("<span class='danger'>The [slime] is driven into a frenzy!</span>")
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimespeed
|
||||
name = "Slime Speed"
|
||||
id = "m_speed"
|
||||
@@ -486,12 +393,9 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimespeed/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/speed/P = new /obj/item/slimepotion/speed
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/speed(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
|
||||
//Pink
|
||||
/datum/chemical_reaction/slime/docility
|
||||
name = "Docility Potion"
|
||||
@@ -501,9 +405,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/docility/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/docility/P = new /obj/item/slimepotion/docility
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/docility(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/gender
|
||||
@@ -514,9 +416,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/gender/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/genderchange/G = new /obj/item/slimepotion/genderchange
|
||||
G.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/genderchange(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
//Black
|
||||
@@ -528,10 +428,6 @@
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/black
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutate2/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Oil
|
||||
/datum/chemical_reaction/slime/slimeexplosion
|
||||
name = "Slime Explosion"
|
||||
@@ -539,9 +435,9 @@
|
||||
required_reagents = list("plasma" = 1)
|
||||
required_container = /obj/item/slime_extract/oil
|
||||
required_other = 1
|
||||
deletes_extract = FALSE
|
||||
|
||||
/datum/chemical_reaction/slime/slimeexplosion/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
var/lastkey = holder.my_atom.fingerprintslast
|
||||
var/touch_msg = "N/A"
|
||||
@@ -554,6 +450,7 @@
|
||||
addtimer(CALLBACK(src, .proc/boom, holder), 50)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
..()
|
||||
M.qdel_timer = addtimer(CALLBACK(src, .proc/delete_extract, holder), 55, TIMER_STOPPABLE)
|
||||
|
||||
/datum/chemical_reaction/slime/slimeexplosion/proc/boom(datum/reagents/holder)
|
||||
@@ -569,10 +466,6 @@
|
||||
required_container = /obj/item/slime_extract/oil
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecornoil/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Light Pink
|
||||
/datum/chemical_reaction/slime/slimepotion2
|
||||
name = "Slime Potion 2"
|
||||
@@ -582,9 +475,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimepotion2/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/sentience/P = new /obj/item/slimepotion/sentience
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/sentience
|
||||
..()
|
||||
|
||||
//Adamantine
|
||||
@@ -596,10 +487,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimegolem/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/effect/golemrune/Z = new /obj/effect/golemrune
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
notify_ghosts("Golem rune created in [get_area(Z)].", 'sound/effects/ghost2.ogg', source = Z)
|
||||
new /obj/effect/golemrune(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimegolem2
|
||||
@@ -610,9 +498,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimegolem2/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/golem_shell/artificial/Z = new /obj/item/golem_shell/artificial
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/golem_shell/artificial(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
//Bluespace
|
||||
@@ -624,10 +510,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/stack/tile/bluespace/P = new /obj/item/stack/tile/bluespace
|
||||
P.amount = 25
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/stack/tile/bluespace(get_turf(holder.my_atom), 25)
|
||||
..()
|
||||
|
||||
|
||||
@@ -639,10 +522,8 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
if(holder.my_atom)
|
||||
var/obj/item/weapon/ore/bluespace_crystal/BC = new(get_turf(holder.my_atom))
|
||||
BC.visible_message("<span class='notice'>The [BC.name] appears out of thin air!</span>")
|
||||
var/obj/item/weapon/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom))
|
||||
BC.visible_message("<span class='notice'>The [BC.name] appears out of thin air!</span>")
|
||||
..()
|
||||
|
||||
//Cerulean
|
||||
@@ -654,12 +535,9 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimepsteroid2/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/enhancer/P = new /obj/item/slimepotion/enhancer
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/enhancer(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slime_territory
|
||||
name = "Slime Territory"
|
||||
id = "s_territory"
|
||||
@@ -668,9 +546,7 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slime_territory/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/areaeditor/blueprints/slime/P = new /obj/item/areaeditor/blueprints/slime
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/areaeditor/blueprints/slime(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
//Sepia
|
||||
@@ -682,15 +558,12 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimestop/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/mob/mob = get_mob_by_key(holder.my_atom.fingerprintslast)
|
||||
var/obj/effect/timestop/T = new /obj/effect/timestop
|
||||
T.loc = get_turf(holder.my_atom)
|
||||
T.immune += mob
|
||||
T.forceMove(get_turf(holder.my_atom))
|
||||
T.immune += get_mob_by_key(holder.my_atom.fingerprintslast)
|
||||
T.timestop()
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimecamera
|
||||
name = "Slime Camera"
|
||||
id = "m_camera"
|
||||
@@ -699,11 +572,8 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecamera/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/device/camera/P = new /obj/item/device/camera
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
var/obj/item/device/camera_film/Z = new /obj/item/device/camera_film
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/device/camera(get_turf(holder.my_atom))
|
||||
new /obj/item/device/camera_film(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimefloor
|
||||
@@ -714,16 +584,10 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefloor/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/stack/tile/sepia/P = new /obj/item/stack/tile/sepia
|
||||
P.amount = 25
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/stack/tile/sepia(get_turf(holder.my_atom), 25)
|
||||
..()
|
||||
|
||||
|
||||
//Pyrite
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimepaint
|
||||
name = "Slime Paint"
|
||||
id = "s_paint"
|
||||
@@ -732,15 +596,10 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimepaint/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/list/paints = subtypesof(/obj/item/weapon/paint)
|
||||
var/chosen = pick(paints)
|
||||
var/obj/P = new chosen
|
||||
if(P)
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
var/chosen = pick(subtypesof(/obj/item/weapon/paint))
|
||||
new chosen(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrayon
|
||||
name = "Slime Crayon"
|
||||
id = "s_crayon"
|
||||
@@ -749,12 +608,8 @@
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrayon/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/list/crayons = difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan))
|
||||
var/chosen = pick(crayons)
|
||||
var/obj/P = new chosen
|
||||
if(P)
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
var/chosen = pick(difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan)))
|
||||
new chosen(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
//Rainbow :o)
|
||||
@@ -766,12 +621,8 @@
|
||||
required_container = /obj/item/slime_extract/rainbow
|
||||
|
||||
/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/mob/living/simple_animal/slime/random/S
|
||||
S = new(get_turf(holder.my_atom))
|
||||
S.visible_message("<span class='danger'>Infused with plasma, the \
|
||||
core begins to quiver and grow, and soon a new baby slime emerges \
|
||||
from it!</span>")
|
||||
var/mob/living/simple_animal/slime/random/S = new (get_turf(holder.my_atom))
|
||||
S.visible_message("<span class='danger'>Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!</span>")
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slime_transfer
|
||||
@@ -782,9 +633,7 @@
|
||||
required_container = /obj/item/slime_extract/rainbow
|
||||
|
||||
/datum/chemical_reaction/slime/slime_transfer/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/transference/P = new /obj/item/slimepotion/transference
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
new /obj/item/slimepotion/transference(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/flight_potion
|
||||
@@ -795,7 +644,6 @@
|
||||
required_container = /obj/item/slime_extract/rainbow
|
||||
|
||||
/datum/chemical_reaction/slime/flight_potion/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
new/obj/item/weapon/reagent_containers/glass/bottle/potion/flight(get_turf(holder.my_atom))
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/potion/flight(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
|
||||
@@ -581,7 +581,7 @@
|
||||
id = "rcd"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/weapon/rcd
|
||||
build_path = /obj/item/weapon/construction/rcd
|
||||
category = list("hacked", "Construction")
|
||||
|
||||
/datum/design/rpd
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
valid_items += rand(1,max(2,35-probWeight))
|
||||
valid_items += I
|
||||
|
||||
if(ispath(I,/obj/item/weapon/rcd) || ispath(I,/obj/item/weapon/grenade) || ispath(I,/obj/item/device/aicard) || ispath(I,/obj/item/weapon/storage/backpack/holding) || ispath(I,/obj/item/slime_extract) || ispath(I,/obj/item/device/onetankbomb) || ispath(I,/obj/item/device/transfer_valve))
|
||||
if(ispath(I,/obj/item/weapon/construction/rcd) || ispath(I,/obj/item/weapon/grenade) || ispath(I,/obj/item/device/aicard) || ispath(I,/obj/item/weapon/storage/backpack/holding) || ispath(I,/obj/item/slime_extract) || ispath(I,/obj/item/device/onetankbomb) || ispath(I,/obj/item/device/transfer_valve))
|
||||
var/obj/item/tempCheck = I
|
||||
if(initial(tempCheck.icon_state) != null)
|
||||
critical_items += I
|
||||
|
||||
@@ -482,9 +482,14 @@
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
layer = TURF_LAYER
|
||||
|
||||
/obj/effect/golemrune/New()
|
||||
..()
|
||||
/obj/effect/golemrune/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
notify_ghosts("Golem rune created in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src)
|
||||
|
||||
/obj/effect/golemrune/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/golemrune/process()
|
||||
var/mob/dead/observer/ghost
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
/turf/proc/onShuttleMove(turf/oldturf)
|
||||
addtimer(CALLBACK(lighting_object, /atom/movable/lighting_object/proc/update), 0)
|
||||
|
||||
/atom/movable/proc/onShuttleMove(turf/T1, rotation)
|
||||
if(rotation)
|
||||
shuttleRotate(rotation)
|
||||
@@ -80,7 +77,3 @@
|
||||
var/oldPY = pixel_y
|
||||
pixel_x = oldPY
|
||||
pixel_y = (oldPX*(-1))
|
||||
|
||||
// Nope nope nope!
|
||||
/atom/movable/lighting_object/onShuttleMove(turf/T1, rotation)
|
||||
return FALSE
|
||||
@@ -503,8 +503,6 @@
|
||||
//move mobile to new location
|
||||
for(var/atom/movable/AM in T0)
|
||||
AM.onShuttleMove(T1, rotation)
|
||||
|
||||
T1.onShuttleMove(T0)
|
||||
|
||||
if(rotation)
|
||||
T1.shuttleRotate(rotation)
|
||||
|
||||
Reference in New Issue
Block a user