Merge remote-tracking branch 'origin/master' into magrifles_again
This commit is contained in:
+19
-19
@@ -267,7 +267,7 @@
|
||||
to_chat(user, "<span class='brass'>There is an integration cog installed!</span>")
|
||||
|
||||
to_chat(user, "<span class='notice'>Alt-Click the APC to [ locked ? "unlock" : "lock"] the interface.</span>")
|
||||
|
||||
|
||||
if(issilicon(user))
|
||||
to_chat(user, "<span class='notice'>Ctrl-Click the APC to switch the breaker [ operating ? "off" : "on"].</span>")
|
||||
|
||||
@@ -747,7 +747,7 @@
|
||||
if(damage_flag == "melee" && damage_amount < damage_deflection)
|
||||
return 0
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/machinery/power/apc/deconstruct(disassembled = TRUE)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
if(!(stat & BROKEN))
|
||||
@@ -759,21 +759,23 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/power/apc/emag_act(mob/user)
|
||||
if(!(obj_flags & EMAGGED) && !malfhack)
|
||||
if(opened)
|
||||
to_chat(user, "<span class='warning'>You must close the cover to swipe an ID card!</span>")
|
||||
else if(panel_open)
|
||||
to_chat(user, "<span class='warning'>You must close the panel first!</span>")
|
||||
else if(stat & (BROKEN|MAINT))
|
||||
to_chat(user, "<span class='warning'>Nothing happens!</span>")
|
||||
else
|
||||
flick("apc-spark", src)
|
||||
playsound(src, "sparks", 75, 1)
|
||||
obj_flags |= EMAGGED
|
||||
locked = FALSE
|
||||
to_chat(user, "<span class='notice'>You emag the APC interface.</span>")
|
||||
update_icon()
|
||||
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED || malfhack)
|
||||
return
|
||||
if(opened)
|
||||
to_chat(user, "<span class='warning'>You must close the cover to swipe an ID card!</span>")
|
||||
else if(panel_open)
|
||||
to_chat(user, "<span class='warning'>You must close the panel first!</span>")
|
||||
else if(stat & (BROKEN|MAINT))
|
||||
to_chat(user, "<span class='warning'>Nothing happens!</span>")
|
||||
else
|
||||
flick("apc-spark", src)
|
||||
playsound(src, "sparks", 75, 1)
|
||||
obj_flags |= EMAGGED
|
||||
locked = FALSE
|
||||
to_chat(user, "<span class='notice'>You emag the APC interface.</span>")
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
// attack with hand - remove cell (if cover open) or interact with the APC
|
||||
|
||||
@@ -800,8 +802,6 @@
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "apc", name, 535, 515, master_ui, state)
|
||||
ui.open()
|
||||
if(ui)
|
||||
ui.set_autoupdate(state = (failure_timer ? 1 : 0))
|
||||
|
||||
/obj/machinery/power/apc/ui_data(mob/user)
|
||||
var/list/data = list(
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
|
||||
/obj/item/stock_parts/cell/secborg
|
||||
name = "security borg rechargeable D battery"
|
||||
maxcharge = 1750 //35/17/8 disabler/laser/taser shots.
|
||||
maxcharge = 1250 //25/12/6 disabler/laser/taser shots.
|
||||
materials = list(MAT_GLASS=40)
|
||||
|
||||
/obj/item/stock_parts/cell/secborg/empty/Initialize()
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
if(!cell_connectors)
|
||||
to_chat(user, "<span class='warning'>This [name] can't support a power cell!</span>")
|
||||
return
|
||||
if(W.item_flags & NODROP)
|
||||
if(HAS_TRAIT(W, TRAIT_NODROP))
|
||||
to_chat(user, "<span class='warning'>[W] is stuck to your hand!</span>")
|
||||
return
|
||||
user.dropItemToGround(W)
|
||||
@@ -323,6 +323,8 @@
|
||||
var/BR = brightness
|
||||
var/PO = bulb_power
|
||||
var/CO = bulb_colour
|
||||
if(color)
|
||||
CO = color
|
||||
var/area/A = get_area(src)
|
||||
if (A && A.fire)
|
||||
CO = bulb_emergency_colour
|
||||
@@ -360,6 +362,9 @@
|
||||
else
|
||||
removeStaticPower(static_power_used, STATIC_LIGHT)
|
||||
|
||||
/obj/machinery/light/update_atom_colour()
|
||||
. = ..()
|
||||
update()
|
||||
|
||||
/obj/machinery/light/process()
|
||||
if (!cell)
|
||||
|
||||
@@ -194,10 +194,12 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/port_gen/pacman/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
obj_flags |= EMAGGED
|
||||
emp_act(EMP_HEAVY)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/port_gen/pacman/attack_ai(mob/user)
|
||||
interact(user)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
circuit = /obj/item/circuitboard/machine/rad_collector
|
||||
var/obj/item/tank/internals/plasma/loaded_tank = null
|
||||
var/stored_power = 0
|
||||
var/last_push
|
||||
var/active = 0
|
||||
var/locked = FALSE
|
||||
var/drainratio = 1
|
||||
@@ -61,9 +62,9 @@
|
||||
loaded_tank.air_contents.gases[/datum/gas/oxygen] -= gasdrained
|
||||
loaded_tank.air_contents.gases[/datum/gas/carbon_dioxide] += gasdrained*2
|
||||
GAS_GARBAGE_COLLECT(loaded_tank.air_contents.gases)
|
||||
var/bitcoins_mined = RAD_COLLECTOR_OUTPUT
|
||||
SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, bitcoins_mined*RAD_COLLECTOR_MINING_CONVERSION_RATE)
|
||||
stored_power-=bitcoins_mined
|
||||
SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, stored_power*RAD_COLLECTOR_MINING_CONVERSION_RATE)
|
||||
last_push = stored_power
|
||||
stored_power = 0
|
||||
|
||||
/obj/machinery/power/rad_collector/interact(mob/user)
|
||||
if(anchored)
|
||||
@@ -170,9 +171,9 @@
|
||||
. = ..()
|
||||
if(active)
|
||||
if(!bitcoinmining)
|
||||
to_chat(user, "<span class='notice'>[src]'s display states that it has stored <b>[DisplayPower(stored_power)]</b>, and processing <b>[DisplayPower(RAD_COLLECTOR_OUTPUT)]</b>.</span>")
|
||||
to_chat(user, "<span class='notice'>[src]'s display states that it has stored <b>[DisplayPower(stored_power)]</b>, and is processing <b>[DisplayPower((RAD_COLLECTOR_OUTPUT)*((60 SECONDS)/SSmachines.wait))]</b> per minute. <br>The <b>plasma</b> within it's tank is being irradiated into <b>tritium</b>.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src]'s display states that it has stored a total of <b>[stored_power*RAD_COLLECTOR_MINING_CONVERSION_RATE]</b>, and producing [RAD_COLLECTOR_OUTPUT*RAD_COLLECTOR_MINING_CONVERSION_RATE] research points per minute.</span>")
|
||||
to_chat(user, "<span class='notice'>[src]'s display states that it's producing a total of <b>[(last_push*RAD_COLLECTOR_MINING_CONVERSION_RATE)*((60 SECONDS)/SSmachines.wait)]</b> research points per minute. <br>The <b>tritium</b> and <b>oxygen</b> within it's tank is being combusted into <b>carbon dioxide</b>.</span>")
|
||||
else
|
||||
if(!bitcoinmining)
|
||||
to_chat(user,"<span class='notice'><b>[src]'s display displays the words:</b> \"Power production mode. Please insert <b>Plasma</b>. Use a multitool to change production modes.\"</span>")
|
||||
|
||||
@@ -339,12 +339,13 @@
|
||||
projectile_sound = initial(projectile_sound)
|
||||
|
||||
/obj/machinery/power/emitter/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
locked = FALSE
|
||||
obj_flags |= EMAGGED
|
||||
if(user)
|
||||
user.visible_message("[user.name] emags [src].","<span class='notice'>You short out the lock.</span>")
|
||||
user?.visible_message("[user.name] emags [src].","<span class='notice'>You short out the lock.</span>")
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/machinery/power/emitter/prototype
|
||||
@@ -440,10 +441,14 @@
|
||||
name = "turret controls"
|
||||
icon_state = "offhand"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
item_flags = ABSTRACT | NODROP | NOBLUDGEON
|
||||
item_flags = ABSTRACT | NOBLUDGEON
|
||||
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
var/delay = 0
|
||||
|
||||
/obj/item/turret_control/Initialize()
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
|
||||
|
||||
/obj/item/turret_control/afterattack(atom/targeted_atom, mob/user, proxflag, clickparams)
|
||||
. = ..()
|
||||
var/obj/machinery/power/emitter/E = user.buckled
|
||||
|
||||
@@ -84,16 +84,18 @@
|
||||
/obj/singularity/attack_tk(mob/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
log_game("[key_name(C)] has been disintegrated by attempting to telekenetically grab a singularity.</span>")
|
||||
C.visible_message("<span class='danger'>[C]'s head begins to collapse in on itself!</span>", "<span class='userdanger'>Your head feels like it's collapsing in on itself! This was really not a good idea!</span>", "<span class='italics'>You hear something crack and explode in gore.</span>")
|
||||
var/turf/T = get_turf(C)
|
||||
for(var/i in 1 to 3)
|
||||
C.apply_damage(30, BRUTE, BODY_ZONE_HEAD)
|
||||
new /obj/effect/gibspawner/generic(T)
|
||||
sleep(1)
|
||||
C.ghostize()
|
||||
var/obj/item/bodypart/head/rip_u = C.get_bodypart(BODY_ZONE_HEAD)
|
||||
rip_u.dismember(BURN) //nice try jedi
|
||||
qdel(rip_u)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/singularity/ex_act(severity, target)
|
||||
switch(severity)
|
||||
|
||||
@@ -5,12 +5,21 @@
|
||||
#define PLASMA_HEAT_PENALTY 15 // Higher == Bigger heat and waste penalty from having the crystal surrounded by this gas. Negative numbers reduce penalty.
|
||||
#define OXYGEN_HEAT_PENALTY 1
|
||||
#define CO2_HEAT_PENALTY 0.1
|
||||
#define NITROGEN_HEAT_MODIFIER -1.5
|
||||
#define PLUOXIUM_HEAT_PENALTY -1
|
||||
#define TRITIUM_HEAT_PENALTY 10
|
||||
#define NITROGEN_HEAT_PENALTY -1.5
|
||||
#define BZ_HEAT_PENALTY 5
|
||||
|
||||
#define OXYGEN_TRANSMIT_MODIFIER 1.5 //Higher == Bigger bonus to power generation.
|
||||
#define PLASMA_TRANSMIT_MODIFIER 4
|
||||
#define BZ_TRANSMIT_MODIFIER -2
|
||||
|
||||
#define TRITIUM_RADIOACTIVITY_MODIFIER 3 //Higher == Crystal spews out more radiation
|
||||
#define BZ_RADIOACTIVITY_MODIFIER 5
|
||||
#define PLUOXIUM_RADIOACTIVITY_MODIFIER -2
|
||||
|
||||
#define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage.
|
||||
#define PLUOXIUM_HEAT_RESISTANCE 3
|
||||
|
||||
#define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts.
|
||||
#define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached
|
||||
@@ -53,6 +62,7 @@
|
||||
#define SUPERMATTER_EMERGENCY_PERCENT 25
|
||||
#define SUPERMATTER_DANGER_PERCENT 50
|
||||
#define SUPERMATTER_WARNING_PERCENT 100
|
||||
#define CRITICAL_TEMPERATURE 10000
|
||||
|
||||
#define SUPERMATTER_COUNTDOWN_TIME 30 SECONDS
|
||||
|
||||
@@ -102,6 +112,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
var/o2comp = 0
|
||||
var/co2comp = 0
|
||||
var/n2ocomp = 0
|
||||
var/pluoxiumcomp = 0
|
||||
var/tritiumcomp = 0
|
||||
var/bzcomp = 0
|
||||
|
||||
var/pluoxiumbonus = 0
|
||||
|
||||
var/combined_gas = 0
|
||||
var/gasmix_power_ratio = 0
|
||||
@@ -184,11 +199,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
to_chat(H, "<span class='danger'>You get headaches just from looking at it.</span>")
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/get_spans()
|
||||
return list(SPAN_ROBOT)
|
||||
|
||||
#define CRITICAL_TEMPERATURE 10000
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/proc/get_status()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
@@ -244,10 +254,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
add_overlay(causality_field, TRUE)
|
||||
|
||||
var/speaking = "[emergency_alert] The supermatter has reached critical integrity failure. Emergency causality destabilization field has been activated."
|
||||
radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, speaking, common_channel, language = get_default_language())
|
||||
for(var/i in SUPERMATTER_COUNTDOWN_TIME to 0 step -10)
|
||||
if(damage < explosion_point) // Cutting it a bit close there engineers
|
||||
radio.talk_into(src, "[safe_alert] Failsafe has been disengaged.", common_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, "[safe_alert] Failsafe has been disengaged.", common_channel)
|
||||
cut_overlay(causality_field, TRUE)
|
||||
final_countdown = FALSE
|
||||
return
|
||||
@@ -258,7 +268,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
speaking = "[DisplayTimeText(i, TRUE)] remain before causality stabilization."
|
||||
else
|
||||
speaking = "[i*0.1]..."
|
||||
radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, speaking, common_channel)
|
||||
sleep(10)
|
||||
|
||||
explode()
|
||||
@@ -319,6 +329,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
if(power)
|
||||
soundloop.volume = min(40, (round(power/100)/50)+1) // 5 +1 volume per 20 power. 2500 power is max
|
||||
|
||||
if(isclosedturf(T))
|
||||
var/turf/did_it_melt = T.Melt()
|
||||
if(!isclosedturf(did_it_melt)) //In case some joker finds way to place these on indestructible walls
|
||||
visible_message("<span class='warning'>[src] melts through [T]!</span>")
|
||||
return
|
||||
|
||||
//Ok, get the air from the turf
|
||||
var/datum/gas_mixture/env = T.return_air()
|
||||
|
||||
@@ -357,16 +373,24 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
plasmacomp = max(removed.gases[/datum/gas/plasma]/combined_gas, 0)
|
||||
o2comp = max(removed.gases[/datum/gas/oxygen]/combined_gas, 0)
|
||||
co2comp = max(removed.gases[/datum/gas/carbon_dioxide]/combined_gas, 0)
|
||||
pluoxiumcomp = max(removed.gases[/datum/gas/pluoxium]/combined_gas, 0)
|
||||
tritiumcomp = max(removed.gases[/datum/gas/tritium]/combined_gas, 0)
|
||||
bzcomp = max(removed.gases[/datum/gas/bz]/combined_gas, 0)
|
||||
|
||||
n2ocomp = max(removed.gases[/datum/gas/nitrous_oxide]/combined_gas, 0)
|
||||
n2comp = max(removed.gases[/datum/gas/nitrogen]/combined_gas, 0)
|
||||
|
||||
gasmix_power_ratio = min(max(plasmacomp + o2comp + co2comp - n2comp, 0), 1)
|
||||
if(pluoxiumcomp >= 0.15)
|
||||
pluoxiumbonus = 1 //makes pluoxium only work at 15%+
|
||||
else
|
||||
pluoxiumbonus = 0
|
||||
|
||||
dynamic_heat_modifier = max((plasmacomp * PLASMA_HEAT_PENALTY)+(o2comp * OXYGEN_HEAT_PENALTY)+(co2comp * CO2_HEAT_PENALTY)+(n2comp * NITROGEN_HEAT_MODIFIER), 0.5)
|
||||
dynamic_heat_resistance = max(n2ocomp * N2O_HEAT_RESISTANCE, 1)
|
||||
gasmix_power_ratio = min(max(plasmacomp + o2comp + co2comp + tritiumcomp + bzcomp - pluoxiumcomp - n2comp, 0), 1)
|
||||
|
||||
power_transmission_bonus = max((plasmacomp * PLASMA_TRANSMIT_MODIFIER) + (o2comp * OXYGEN_TRANSMIT_MODIFIER), 0)
|
||||
dynamic_heat_modifier = max((plasmacomp * PLASMA_HEAT_PENALTY) + (o2comp * OXYGEN_HEAT_PENALTY) + (co2comp * CO2_HEAT_PENALTY) + (tritiumcomp * TRITIUM_HEAT_PENALTY) + ((pluoxiumcomp * PLUOXIUM_HEAT_PENALTY) * pluoxiumbonus) + (n2comp * NITROGEN_HEAT_PENALTY) + (bzcomp * BZ_HEAT_PENALTY), 0.5)
|
||||
dynamic_heat_resistance = max((n2ocomp * N2O_HEAT_RESISTANCE) + ((pluoxiumcomp * PLUOXIUM_HEAT_RESISTANCE) * pluoxiumbonus), 1)
|
||||
|
||||
power_transmission_bonus = max((plasmacomp * PLASMA_TRANSMIT_MODIFIER) + (o2comp * OXYGEN_TRANSMIT_MODIFIER) + (bzcomp * BZ_TRANSMIT_MODIFIER), 0)
|
||||
|
||||
//more moles of gases are harder to heat than fewer, so let's scale heat damage around them
|
||||
mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25)
|
||||
@@ -395,7 +419,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
power = max( (removed.temperature * temp_factor / T0C) * gasmix_power_ratio + power, 0) //Total laser power plus an overload
|
||||
|
||||
if(prob(50))
|
||||
radiation_pulse(src, power * (1 + power_transmission_bonus/10))
|
||||
radiation_pulse(src, power * (1 + (tritiumcomp * TRITIUM_RADIOACTIVITY_MODIFIER) + ((pluoxiumcomp * PLUOXIUM_RADIOACTIVITY_MODIFIER) * pluoxiumbonus) * (power_transmission_bonus/(10-(bzcomp * BZ_RADIOACTIVITY_MODIFIER))))) // Rad Modifiers BZ(500%), Tritium(300%), and Pluoxium(-200%)
|
||||
if(bzcomp >= 0.4 && prob(30 * bzcomp))
|
||||
src.fire_nuclear_particles() // Start to emit radballs at a maximum of 30% chance per tick
|
||||
|
||||
var/device_energy = power * REACTION_POWER_MODIFIER
|
||||
|
||||
@@ -459,27 +485,27 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
alarm()
|
||||
|
||||
if(damage > emergency_point)
|
||||
radio.talk_into(src, "[emergency_alert] Integrity: [get_integrity()]%", common_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, "[emergency_alert] Integrity: [get_integrity()]%", common_channel)
|
||||
lastwarning = REALTIMEOFDAY
|
||||
if(!has_reached_emergency)
|
||||
investigate_log("has reached the emergency point for the first time.", INVESTIGATE_SUPERMATTER)
|
||||
message_admins("[src] has reached the emergency point [ADMIN_JMP(src)].")
|
||||
has_reached_emergency = TRUE
|
||||
else if(damage >= damage_archived) // The damage is still going up
|
||||
radio.talk_into(src, "[warning_alert] Integrity: [get_integrity()]%", engineering_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, "[warning_alert] Integrity: [get_integrity()]%", engineering_channel)
|
||||
lastwarning = REALTIMEOFDAY - (WARNING_DELAY * 5)
|
||||
|
||||
else // Phew, we're safe
|
||||
radio.talk_into(src, "[safe_alert] Integrity: [get_integrity()]%", engineering_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, "[safe_alert] Integrity: [get_integrity()]%", engineering_channel)
|
||||
lastwarning = REALTIMEOFDAY
|
||||
|
||||
if(power > POWER_PENALTY_THRESHOLD)
|
||||
radio.talk_into(src, "Warning: Hyperstructure has reached dangerous power level.", engineering_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, "Warning: Hyperstructure has reached dangerous power level.", engineering_channel)
|
||||
if(powerloss_inhibitor < 0.5)
|
||||
radio.talk_into(src, "DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.", engineering_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, "DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.", engineering_channel)
|
||||
|
||||
if(combined_gas > MOLE_PENALTY_THRESHOLD)
|
||||
radio.talk_into(src, "Warning: Critical coolant mass reached.", engineering_channel, get_spans(), get_default_language())
|
||||
radio.talk_into(src, "Warning: Critical coolant mass reached.", engineering_channel)
|
||||
|
||||
if(damage > explosion_point)
|
||||
countdown()
|
||||
@@ -530,11 +556,14 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
/obj/machinery/power/supermatter_crystal/attack_tk(mob/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
log_game("[key_name(C)] has been disintegrated by a telekenetic grab on a supermatter crystal.</span>")
|
||||
to_chat(C, "<span class='userdanger'>That was a really dense idea.</span>")
|
||||
C.ghostize()
|
||||
C.visible_message("<span class='userdanger'>A bright flare of radiation is seen from [C]'s head, shortly before you hear a sickening sizzling!</span>")
|
||||
var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in C.internal_organs
|
||||
rip_u.Remove(C)
|
||||
qdel(rip_u)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/attack_paw(mob/user)
|
||||
dust_mob(user, cause = "monkey attack")
|
||||
|
||||
@@ -132,11 +132,14 @@
|
||||
/obj/singularity/energy_ball/attack_tk(mob/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
log_game("[key_name(C)] has been disintegrated by a telekenetic grab on a tesla ball.</span>")
|
||||
to_chat(C, "<span class='userdanger'>That was a shockingly dumb idea.</span>")
|
||||
C.visible_message("<span class='userdanger'>A bright flare of lightning is seen from [C]'s head, shortly before you hear a sickening sizzling!</span>")
|
||||
var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in C.internal_organs
|
||||
C.ghostize(0)
|
||||
rip_u.Remove(C)
|
||||
qdel(rip_u)
|
||||
C.death()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target)
|
||||
if (istype(target))
|
||||
|
||||
Reference in New Issue
Block a user