Merge remote-tracking branch 'origin/master' into what-should-i-name-this-branch
This commit is contained in:
@@ -1592,7 +1592,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
light_range = 2
|
||||
duration = 9
|
||||
|
||||
/obj/effect/temp_visual/target/ex_act()
|
||||
/obj/effect/temp_visual/target/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/target/Initialize(mapload, list/flame_hit)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
GLOB.poi_list -= src
|
||||
return ..()
|
||||
|
||||
/obj/structure/blob/core/ex_act(severity, target)
|
||||
/obj/structure/blob/core/ex_act(severity, target, origin)
|
||||
var/damage = 50 - 10 * severity //remember, the core takes half brute damage, so this is 20/15/10 damage based on severity
|
||||
take_damage(damage, BRUTE, "bomb", 0)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
linked.examine(user)
|
||||
return ..()
|
||||
|
||||
/obj/effect/clockwork/overlay/ex_act()
|
||||
/obj/effect/clockwork/overlay/ex_act(severity, target, origin)
|
||||
return FALSE
|
||||
|
||||
/obj/effect/clockwork/overlay/singularity_act()
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
return TRUE
|
||||
. = ..()
|
||||
|
||||
/obj/effect/clockwork/sigil/ex_act(severity)
|
||||
/obj/effect/clockwork/sigil/ex_act(severity, target, origin)
|
||||
visible_message("<span class='warning'>[src] scatters into thousands of particles.</span>")
|
||||
qdel(src)
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/effect/clockwork/sigil/transmission/ex_act(severity)
|
||||
/obj/effect/clockwork/sigil/transmission/ex_act(severity, target, origin)
|
||||
if(severity == 3)
|
||||
adjust_clockwork_power(500) //Light explosions charge the network!
|
||||
visible_message("<span class='warning'>[src] flares a brilliant orange!</span>")
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
/obj/effect/clockwork/servant_blocker/singularity_pull()
|
||||
return
|
||||
|
||||
/obj/effect/clockwork/servant_blocker/ex_act(severity, target)
|
||||
/obj/effect/clockwork/servant_blocker/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/effect/clockwork/servant_blocker/safe_throw_at()
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/obj/effect/clockwork/spatial_gateway/ex_act(severity)
|
||||
/obj/effect/clockwork/spatial_gateway/ex_act(severity, target, origin)
|
||||
if(severity == 1 && uses)
|
||||
uses = 0
|
||||
visible_message("<span class='warning'>[src] is disrupted!</span>")
|
||||
@@ -251,7 +251,7 @@
|
||||
name = "stable gateway"
|
||||
is_stable = TRUE
|
||||
|
||||
/obj/effect/clockwork/spatial_gateway/stable/ex_act(severity)
|
||||
/obj/effect/clockwork/spatial_gateway/stable/ex_act(severity, target, origin)
|
||||
if(severity == 1)
|
||||
start_shutdown() //Yes, you can chain devastation-level explosions to delay a gateway shutdown, if you somehow manage to do it without breaking the obelisk. Is it worth it? Probably not.
|
||||
return TRUE
|
||||
|
||||
@@ -214,5 +214,5 @@
|
||||
sleep(3) //so the animation completes properly
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/clockwork/judicial_marker/ex_act(severity)
|
||||
/obj/effect/clockwork/judicial_marker/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
@@ -231,3 +231,31 @@
|
||||
to_chat(invoker, "<span class='nezbere'>\"Only one of my weapons may exist in this temporal stream!\"</span>")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/clockwork_scripture/create_object/construct/cogscarab
|
||||
descname = "Building Construct"
|
||||
name = "Cogscarab"
|
||||
desc = "Creates a shell for a cogscarab, a drone that helps build your base!"
|
||||
invocations = list("Arise, drone!", "Create defenses for the true light!")
|
||||
channel_time = 80
|
||||
power_cost = 8000
|
||||
creator_message = "<span class='brass'>Your slab disgorges several chunks of replicant alloy that form into a spiderlike shell.</span>"
|
||||
usage_tip = "These machines will help you get a base built up while you go out to look for more followers."
|
||||
tier = SCRIPTURE_APPLICATION
|
||||
one_per_tile = TRUE
|
||||
primary_component = BELLIGERENT_EYE
|
||||
sort_priority = 9
|
||||
quickbind = TRUE
|
||||
quickbind_desc = "Creates a cogscarab, good for the backline."
|
||||
object_path = /obj/item/clockwork/construct_chassis/cogscarab/
|
||||
construct_type = /mob/living/simple_animal/drone/cogscarab
|
||||
combat_construct = FALSE
|
||||
|
||||
/datum/clockwork_scripture/create_object/construct/cogscarab/update_construct_limit()
|
||||
var/human_servants = 0
|
||||
for(var/V in SSticker.mode.servants_of_ratvar)
|
||||
var/datum/mind/M = V
|
||||
var/mob/living/L = M.current
|
||||
if(ishuman(L) && L.stat != DEAD)
|
||||
human_servants++
|
||||
construct_limit = round(clamp((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3
|
||||
|
||||
+1
-1
@@ -197,7 +197,7 @@
|
||||
glow = new /obj/effect/clockwork/overlay/gateway_glow(get_turf(src))
|
||||
glow.linked = src
|
||||
|
||||
/obj/structure/destructible/clockwork/massive/celestial_gateway/ex_act(severity)
|
||||
/obj/structure/destructible/clockwork/massive/celestial_gateway/ex_act(severity, target, origin)
|
||||
var/damage = max((obj_integrity * 0.7) / severity, 100) //requires multiple bombs to take down
|
||||
take_damage(damage, BRUTE, "bomb", 0)
|
||||
|
||||
|
||||
@@ -241,3 +241,18 @@
|
||||
parts += printplayerlist(members - eminence)
|
||||
|
||||
return "<div class='panel clockborder'>[parts.Join("<br>")]</div>"
|
||||
|
||||
//I have no idea where to put this so I'm leaving it here. Loads reebe. Only one reebe can exist, so it's checked via a global var.
|
||||
/proc/load_reebe()
|
||||
if(GLOB.reebe_loaded)
|
||||
return TRUE
|
||||
var/list/errorList = list()
|
||||
var/list/reebes = SSmapping.LoadGroup(errorList, "Reebe", "map_files/generic", "City_of_Cogs.dmm", default_traits = ZTRAITS_REEBE, silent = TRUE)
|
||||
if(errorList.len) // reebe failed to load
|
||||
message_admins("Reebe failed to load!")
|
||||
log_game("Reebe failed to load!")
|
||||
return FALSE
|
||||
for(var/datum/parsed_map/PM in reebes)
|
||||
PM.initTemplateBounds()
|
||||
GLOB.reebe_loaded = TRUE
|
||||
return TRUE
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
/mob/living/carbon/true_devil/is_literate()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/true_devil/ex_act(severity, ex_target)
|
||||
/mob/living/carbon/true_devil/ex_act(severity, target, origin)
|
||||
if(!ascended)
|
||||
var/b_loss
|
||||
switch (severity)
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
|
||||
//Immunities
|
||||
|
||||
/mob/living/simple_animal/revenant/ex_act(severity, target)
|
||||
/mob/living/simple_animal/revenant/ex_act(severity, target, origin)
|
||||
return 1 //Immune to the effects of explosions.
|
||||
|
||||
/mob/living/simple_animal/revenant/wave_ex_act(power, datum/wave_explosion/explosion, dir)
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
released and fully healed, because in the end it's just a jape, \
|
||||
sibling!</B>"
|
||||
|
||||
/mob/living/simple_animal/slaughter/laughter/ex_act(severity)
|
||||
/mob/living/simple_animal/slaughter/laughter/ex_act(severity, target, origin)
|
||||
switch(severity)
|
||||
if(1)
|
||||
death()
|
||||
|
||||
@@ -72,10 +72,10 @@
|
||||
QDEL_NULL(beaker)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/contents_explosion(severity, target)
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/contents_explosion(severity, target, origin)
|
||||
..()
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
beaker.ex_act(severity, target, origin)
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/handle_atom_del(atom/A)
|
||||
..()
|
||||
|
||||
@@ -59,10 +59,10 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>The thermostat is set to [target_temperature]K ([(T0C-target_temperature)*-1]C).</span>"
|
||||
. += "<span class='notice'>The thermostat is set to [target_temperature]K ([target_temperature-T0C]C).</span>"
|
||||
if(in_range(user, src) || isobserver(user))
|
||||
. += "<span class='notice'>The status display reads: Efficiency <b>[(heat_capacity/5000)*100]%</b>.</span>"
|
||||
. += "<span class='notice'>Temperature range <b>[min_temperature]K - [max_temperature]K ([(T0C-min_temperature)*-1]C - [(T0C-max_temperature)*-1]C)</b>.</span>"
|
||||
. += "<span class='notice'>The status display reads: Effective heat capacity <b>[heat_capacity] J/K</b>.</span>"
|
||||
. += "<span class='notice'>Temperature range <b>[min_temperature]K - [max_temperature]K ([min_temperature-T0C]C - [max_temperature-T0C]C)</b>.</span>"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/process_atmos()
|
||||
..()
|
||||
|
||||
@@ -149,5 +149,5 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]")
|
||||
if(prob(25))
|
||||
mezzer()
|
||||
|
||||
/obj/singularity/narsie/mini/ex_act()
|
||||
/obj/singularity/narsie/mini/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
@@ -187,10 +187,10 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/closet/supplypod/ex_act() //Explosions dont do SHIT TO US! This is because supplypods create explosions when they land.
|
||||
/obj/structure/closet/supplypod/ex_act(severity, target, origin) //Explosions dont do SHIT TO US! This is because supplypods create explosions when they land.
|
||||
return
|
||||
|
||||
/obj/structure/closet/supplypod/contents_explosion() //Supplypods also protect their contents from the harmful effects of fucking exploding.
|
||||
/obj/structure/closet/supplypod/contents_explosion(severity, target, origin) //Supplypods also protect their contents from the harmful effects of fucking exploding.
|
||||
return
|
||||
|
||||
/obj/structure/closet/supplypod/toggle(mob/living/user)
|
||||
|
||||
@@ -1118,6 +1118,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
|
||||
return
|
||||
to_chat(src, span_userdanger("Statpanel failed to load, click <a href='?src=[REF(src)];reload_statbrowser=1'>here</a> to reload the panel "))
|
||||
|
||||
/client/proc/check_panel_loaded()
|
||||
if(statbrowser_ready)
|
||||
return
|
||||
to_chat(src, span_userdanger("Statpanel failed to load, click <a href='?src=[REF(src)];reload_statbrowser=1'>here</a> to reload the panel "))
|
||||
|
||||
//increment progress for an unlockable loadout item
|
||||
/client/proc/increment_progress(key, amount)
|
||||
if(prefs)
|
||||
|
||||
@@ -99,7 +99,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
walk(src,0)
|
||||
walk_towards(src, destination, 1)
|
||||
|
||||
/obj/effect/immovablerod/ex_act(severity, target)
|
||||
/obj/effect/immovablerod/ex_act(severity, target, origin)
|
||||
return 0
|
||||
|
||||
/obj/effect/immovablerod/singularity_act()
|
||||
|
||||
@@ -507,7 +507,7 @@
|
||||
if(master)
|
||||
master.spawn_spacevine_piece(stepturf, src)
|
||||
|
||||
/obj/structure/spacevine/ex_act(severity, target)
|
||||
/obj/structure/spacevine/ex_act(severity, target, origin)
|
||||
if(istype(target, type)) //if its agressive spread vine dont do anything
|
||||
return
|
||||
var/i
|
||||
|
||||
@@ -10,8 +10,12 @@
|
||||
speech_span = "spooky"
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
var/active = TRUE
|
||||
var/BallTutorial = FALSE
|
||||
|
||||
/obj/item/barthpot/attackby(obj/item/I, mob/user, params)
|
||||
if(BallTutorial)
|
||||
say("Hello and welcome to the annual Citadelstation Spookyball 2021! CENTCOM requisitioned this old hospital as a new colony site two years ago, and we’re back again after a few additions here and there. Next to me you can find all the tools you’ll need to build a nice private house, if you’re here for that kind of thing. The axes will chop trees, and give you wood. Shovels will remove grass and things, which you can use the grass to make beds and backets. The pickaxe will allow you pick out the nearby rocks, if you’re more interested in building a cave dwelling. Finally the umbrella and light sources are because it’s spooky, and it might rain! As for interesting spots; There’s the old abandoned mansion which you can get to by going through the entrance and towards the east. There’s also a mech arena directly south, and a racetrack in the caves to the right of the arena, follow the lanterns. And make sure to explore the caves too! Lots of neat things to find!")
|
||||
return
|
||||
if(!active)
|
||||
say("Meow!")
|
||||
return
|
||||
@@ -27,6 +31,9 @@
|
||||
say("It doesn't seem like that's magical enough!")
|
||||
|
||||
/obj/item/barthpot/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
if(BallTutorial)
|
||||
say("Hello and welcome to the annual Citadelstation Spookyball 2021! CENTCOM requisitioned this old hospital as a new colony site two years ago, and we’re back again after a few additions here and there. Next to me you can find all the tools you’ll need to build a nice private house, if you’re here for that kind of thing. The axes will chop trees, and give you wood. Shovels will remove grass and things, which you can use the grass to make beds and backets. The pickaxe will allow you pick out the nearby rocks, if you’re more interested in building a cave dwelling. Finally the umbrella and light sources are because it’s spooky, and it might rain! As for interesting spots; There’s the old abandoned mansion which you can get to by going through the entrance and towards the east. There’s also a mech arena directly south, and a racetrack in the caves to the right of the arena, follow the lanterns. And make sure to explore the caves too! Lots of neat things to find!")
|
||||
return
|
||||
if(!active)
|
||||
say("Meow!")
|
||||
return
|
||||
|
||||
@@ -268,3 +268,65 @@
|
||||
category = "Holiday"
|
||||
item = /obj/item/card/emag/halloween
|
||||
surplus = 0
|
||||
|
||||
/////////////////////////
|
||||
// Ball map Items //
|
||||
/////////////////////////
|
||||
|
||||
|
||||
/obj/item/wisp_lantern/pumpkin
|
||||
name = "Pumpkin lantern"
|
||||
desc = "This lantern gives off no light, but is home to a friendly Jacq o' latern."
|
||||
icon_state = "lantern-on"
|
||||
var/obj/effect/wisp/pumpkin/wisp2
|
||||
|
||||
//Hoooo boy that's some wild code there.
|
||||
/obj/item/wisp_lantern/pumpkin/Initialize()
|
||||
. = ..()
|
||||
qdel(wisp)
|
||||
wisp2 = new(src)
|
||||
wisp = wisp2
|
||||
|
||||
/obj/effect/wisp/pumpkin
|
||||
name = "Friendly pumpkin"
|
||||
desc = "Happy to spook your way."
|
||||
icon = 'icons/obj/clothing/hats.dmi'
|
||||
icon_state = "hardhat1_pumpkin_j"
|
||||
light_range = 5
|
||||
light_color = "#EE9933"
|
||||
layer = 0
|
||||
sight_flags = SEE_MOBS
|
||||
lighting_alpha = 0
|
||||
|
||||
/obj/effect/wisp/pumpkin/update_user_sight(mob/user) //Disables SUPERLIGHTS
|
||||
return
|
||||
|
||||
//Damnit LazyBones
|
||||
/mob/living/simple_animal/lazy_bones
|
||||
name = "Lazy Bones"
|
||||
desc = "Simply refuses to get out of bed!"
|
||||
icon = 'icons/mob/simple_human.dmi'
|
||||
icon_state = "skeleton"
|
||||
icon_living = "skeleton"
|
||||
icon_dead = "skeleton"
|
||||
gender = NEUTER
|
||||
mob_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
|
||||
turns_per_move = 5
|
||||
speak_emote = list("rattles")
|
||||
emote_see = list("rattles")
|
||||
maxHealth = 40
|
||||
health = 40
|
||||
speed = 0
|
||||
harm_intent_damage = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
faction = list("skeleton")
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
deathmessage = "collapses into a pile of bones!"
|
||||
del_on_death = 1
|
||||
loot = list(/obj/effect/decal/remains/human)
|
||||
|
||||
stop_automated_movement = 1
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
var/cached_z
|
||||
/// I'm busy, don't move.
|
||||
var/busy = FALSE
|
||||
var/spawn_cars = FALSE
|
||||
|
||||
var/static/blacklisted_items = typecacheof(list(
|
||||
/obj/effect,
|
||||
@@ -91,6 +92,9 @@
|
||||
poof()
|
||||
|
||||
/mob/living/simple_animal/jacq/on_attack_hand(mob/living/carbon/human/M)
|
||||
if(spawn_cars)
|
||||
spawn_cars(M)
|
||||
return ..()
|
||||
if(!active)
|
||||
say("Hello there [gender_check(M)]!")
|
||||
return ..()
|
||||
@@ -101,6 +105,9 @@
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/jacq/attack_paw(mob/living/carbon/monkey/M)
|
||||
if(spawn_cars)
|
||||
spawn_cars(M)
|
||||
return ..()
|
||||
if(!active)
|
||||
say("Hello there [gender_check(M)]!")
|
||||
return ..()
|
||||
@@ -128,6 +135,8 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/jacq/proc/poof()
|
||||
if(!active)//if disabled, don't poof
|
||||
return
|
||||
last_poof = world.realtime
|
||||
var/datum/reagents/R = new/datum/reagents(100)//Hey, just in case.
|
||||
var/datum/effect_system/smoke_spread/chem/s = new()
|
||||
@@ -470,6 +479,30 @@
|
||||
sleep(20)
|
||||
poof()
|
||||
|
||||
/mob/living/simple_animal/jacq/proc/spawn_cars(mob/living/carbon/C)
|
||||
visible_message("<b>[src]</b> gives off a glowing smile, <span class='spooky'>\"What ken Ah offer ye? I can magic up a vectorcraft in manual or automatic fer ye.\"</span>")
|
||||
var/choices_reward = list("Manual", "Automatic", "How do Automatics work?", "Nothing, thanks")
|
||||
var/choice_reward = input(usr, "Trick or Treat?", "Trick or Treat?") in choices_reward
|
||||
|
||||
switch(choice_reward)
|
||||
if("Manual")
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"Great choice! 'Ere's yer car.\"</span>")
|
||||
jacqrunes("Great choice! 'Ere's yer car.", C)
|
||||
new /obj/vehicle/sealed/vectorcraft(loc)
|
||||
if("Automatic")
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"'Ere's yer car. Not as fast as an automatic mind.\"</span>")
|
||||
jacqrunes("'Ere's yer car. Not as fast as an automatic mind.", C)
|
||||
new /obj/vehicle/sealed/vectorcraft/auto(loc)
|
||||
if("How do Automatics work?")
|
||||
visible_message("<b>[src]</b> smiles, <span class='spooky'>\"Hold wasd to gain speed in a direction, c to enable/disable the clutch, 1 2 3 4 to change gears (help is gear 1, disarm is gear 2, grab is gear 3 and harm is gear 4) while holding a direction (make sure the clutch is enabled when you change gears, you should hear a sound when you've successfully changed gears), r to toggle handbrake, hold alt for brake and press shift for boost (the machine will beep when the boost is recharged)! If you hear an ebbing sound like \"brbrbrbrbr\" you need to gear down, the whining sound means you need to gear up. Hearing a pleasant \"whumwhumwhum\" is optimal gearage! It can be a lil slow to start, so make sure you're in the 1st gear, andusing a boost to get you started is a good idea. If you've got a good speed you'll likely never need to dip down to gear 1 again, and make sure to hold the acceleration pedal down while changing gears (hold a direction). 1st gear is for slow movement, and it's a good idea to mvoe to 2nd gear as quick as you can, you can coldstart a car from gear one by slowly moving, then using the boost to jump you up to gear 2 speeds. The upper gears are for unlimiting your top speed.\"</span>")
|
||||
jacqrunes("They're a bit tricky, aye. Basically;", C)
|
||||
if("Nothing, thanks")
|
||||
visible_message("<b>[src]</b> shrugs, <span class='spooky'>\"Suit yerself.\"</span>")
|
||||
jacqrunes("Suit yerself.", C)
|
||||
|
||||
visible_message("<b>[src]</b> shrugs, <span class='spooky'>\"Oh and look after the crafts, aye? They can get a wee bit... explosive if banged up a tad too much. They move slower damaged too like. Ye can repair 'em with the welders o'er there.\"</span>")
|
||||
jacqrunes("Oh and look after the crafts, aye? They can get a wee bit... explosive if banged up a tad too much. They move slower damaged too like. Ye can repair 'em with the welders o'er there. ", C)
|
||||
|
||||
/mob/living/simple_animal/jacq/update_mobility()
|
||||
. = ..()
|
||||
if(busy)
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
return
|
||||
emergency_shutdown()
|
||||
|
||||
/obj/machinery/computer/holodeck/ex_act(severity, target)
|
||||
/obj/machinery/computer/holodeck/ex_act(severity, target, origin)
|
||||
emergency_shutdown()
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -27,10 +27,10 @@
|
||||
QDEL_NULL(beaker)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/biogenerator/contents_explosion(severity, target)
|
||||
/obj/machinery/biogenerator/contents_explosion(severity, target, origin)
|
||||
..()
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
beaker.ex_act(severity, target, origin)
|
||||
|
||||
/obj/machinery/biogenerator/handle_atom_del(atom/A)
|
||||
..()
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
var/mob/M = loc
|
||||
M.dropItemToGround(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/firelemon/ex_act(severity)
|
||||
/obj/item/reagent_containers/food/snacks/grown/firelemon/ex_act(severity, target, origin)
|
||||
qdel(src) //Ensuring that it's deleted by its own explosion
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/firelemon/proc/prime(mob/living/lanced_by)
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/ex_act(severity)
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/ex_act(severity, target, origin)
|
||||
qdel(src) //Ensuring that it's deleted by its own explosion. Also prevents mass chain reaction with piles of cherry bombs
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/prime(mob/living/lanced_by)
|
||||
@@ -500,7 +500,7 @@
|
||||
log_game("Coconut bomb detonation at [AREACOORD(T)], location [loc]")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/ex_act(severity)
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/ex_act(severity, target, origin)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/deconstruct(disassembled = TRUE)
|
||||
|
||||
@@ -193,6 +193,13 @@
|
||||
new /obj/item/book/manual/wiki/research_and_development(src)
|
||||
update_icon()
|
||||
|
||||
/obj/structure/bookcase/manuals/medical
|
||||
name = "medical manuals bookcase"
|
||||
|
||||
/obj/structure/bookcase/manuals/medical/Initialize()
|
||||
. = ..()
|
||||
new /obj/item/book/manual/wiki/medical_cloning(src)
|
||||
update_icon()
|
||||
|
||||
/*
|
||||
* Book
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
color = GLOB.em_block_color
|
||||
|
||||
|
||||
/atom/movable/emissive_blocker/ex_act(severity)
|
||||
/atom/movable/emissive_blocker/ex_act(severity, target, origin)
|
||||
return FALSE
|
||||
|
||||
/atom/movable/emissive_blocker/singularity_act()
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
// Variety of overrides so the overlays don't get affected by weird things.
|
||||
|
||||
/atom/movable/lighting_object/ex_act(severity)
|
||||
/atom/movable/lighting_object/ex_act(severity, target, origin)
|
||||
return 0
|
||||
|
||||
/atom/movable/lighting_object/singularity_act()
|
||||
|
||||
@@ -484,7 +484,7 @@
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
anchored = TRUE
|
||||
|
||||
/obj/effect/warp_cube/ex_act(severity, target)
|
||||
/obj/effect/warp_cube/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
//Meat Hook
|
||||
@@ -607,7 +607,7 @@
|
||||
/obj/effect/immortality_talisman/attackby()
|
||||
return
|
||||
|
||||
/obj/effect/immortality_talisman/ex_act()
|
||||
/obj/effect/immortality_talisman/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/effect/immortality_talisman/singularity_pull()
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
to_chat(usr, "<span class='warning'>Required access not found.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/ex_act(severity, target)
|
||||
/obj/machinery/mineral/ore_redemption/ex_act(severity, target, origin)
|
||||
do_sparks(5, TRUE, src)
|
||||
..()
|
||||
|
||||
|
||||
@@ -270,7 +270,7 @@
|
||||
SSblackbox.record_feedback("tally", "crusher_voucher_redeemed", 1, selection)
|
||||
qdel(voucher)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
|
||||
/obj/machinery/mineral/equipment_vendor/ex_act(severity, target, origin)
|
||||
do_sparks(5, TRUE, src)
|
||||
if(prob(50 / severity) && severity < 3)
|
||||
qdel(src)
|
||||
|
||||
@@ -152,7 +152,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
C.forcesay("*scream")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/stack/ore/glass/ex_act(severity, target)
|
||||
/obj/item/stack/ore/glass/ex_act(severity, target, origin)
|
||||
if (severity == EXPLODE_NONE)
|
||||
return
|
||||
qdel(src)
|
||||
@@ -314,7 +314,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
GibtoniteReaction(P.firer)
|
||||
. = ..()
|
||||
|
||||
/obj/item/gibtonite/ex_act()
|
||||
/obj/item/gibtonite/ex_act(severity, target, origin)
|
||||
GibtoniteReaction(null, 1)
|
||||
|
||||
/obj/item/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0)
|
||||
@@ -356,7 +356,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
pixel_x = initial(pixel_x) + rand(0, 16) - 8
|
||||
pixel_y = initial(pixel_y) + rand(0, 8) - 8
|
||||
|
||||
/obj/item/stack/ore/ex_act(severity, target)
|
||||
/obj/item/stack/ore/ex_act(severity, target, origin)
|
||||
if (!severity || severity >= 2)
|
||||
return
|
||||
qdel(src)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
/obj/effect/dummy/phased_mob/slaughter/relaymove(mob/user, direction)
|
||||
forceMove(get_step(src,direction))
|
||||
|
||||
/obj/effect/dummy/phased_mob/slaughter/ex_act()
|
||||
/obj/effect/dummy/phased_mob/slaughter/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/effect/dummy/phased_mob/slaughter/wave_ex_act(power, datum/wave_explosion/explosion, dir)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
/mob/living/brain/update_mobility()
|
||||
return ((mobility_flags = (container?.in_contents_of(/obj/mecha)? MOBILITY_FLAGS_DEFAULT : NONE)))
|
||||
|
||||
/mob/living/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
|
||||
/mob/living/brain/ex_act(severity, target, origin) //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
|
||||
return
|
||||
|
||||
/mob/living/brain/wave_ex_act(power, datum/wave_explosion/explosion, dir)
|
||||
|
||||
@@ -319,7 +319,10 @@
|
||||
var/atom/A = I
|
||||
if(!QDELETED(A))
|
||||
A.ex_act(severity)
|
||||
gib()
|
||||
if(istype(origin, /datum/explosion))
|
||||
gib(was_explosion = origin)
|
||||
else
|
||||
gib()
|
||||
return
|
||||
else
|
||||
brute_loss = 500
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
if(2)
|
||||
SSshuttle.requestEvac(src,"ALERT: Energy surge detected in AI core! Station integrity may be compromised! Initiati--%m091#ar-BZZT")
|
||||
|
||||
/mob/living/silicon/ai/ex_act(severity, target)
|
||||
/mob/living/silicon/ai/ex_act(severity, target, origin)
|
||||
switch(severity)
|
||||
if(1)
|
||||
gib()
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
emitter_next_use = world.time + emitter_emp_cd
|
||||
//Need more effects that aren't instadeath or permanent law corruption.
|
||||
|
||||
/mob/living/silicon/pai/ex_act(severity, target)
|
||||
/mob/living/silicon/pai/ex_act(severity, target, origin)
|
||||
take_holo_damage(severity * 50)
|
||||
switch(severity)
|
||||
if(1) //RIP
|
||||
|
||||
@@ -184,7 +184,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
|
||||
gib()
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/ex_act(severity, target)
|
||||
/mob/living/silicon/robot/ex_act(severity, target, origin)
|
||||
switch(severity)
|
||||
if(1)
|
||||
gib()
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
GLOB.silicon_mobs -= src
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/contents_explosion(severity, target)
|
||||
/mob/living/silicon/contents_explosion(severity, target, origin)
|
||||
return
|
||||
|
||||
/mob/living/silicon/proc/cancelAlarm()
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
add_overlay(load)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/ex_act(severity)
|
||||
/mob/living/simple_animal/bot/mulebot/ex_act(severity, target, origin)
|
||||
unload(0)
|
||||
switch(severity)
|
||||
if(1)
|
||||
|
||||
@@ -60,5 +60,5 @@
|
||||
else
|
||||
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
|
||||
|
||||
/mob/living/simple_animal/cockroach/ex_act() //Explosions are a terrible way to handle a cockroach.
|
||||
/mob/living/simple_animal/cockroach/ex_act(severity, target, origin) //Explosions are a terrible way to handle a cockroach.
|
||||
return
|
||||
|
||||
@@ -188,6 +188,9 @@
|
||||
/mob/living/simple_animal/drone/cogscarab/update_drone_hack()
|
||||
return //we don't get hacked or give a shit about it
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/death(gibbed)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/drone_chat(msg)
|
||||
titled_hierophant_message(src, msg, "nezbere", "brass", "Construct") //HIEROPHANT DRONES
|
||||
|
||||
|
||||
@@ -273,10 +273,13 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
summoner.adjustCloneLoss(amount * 0.5) //dying hosts take 50% bonus damage as cloneloss
|
||||
update_health_hud()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target)
|
||||
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target, origin)
|
||||
switch(severity)
|
||||
if(1)
|
||||
gib()
|
||||
if(istype(origin, /datum/explosion))
|
||||
gib(was_explosion = origin)
|
||||
else
|
||||
gib()
|
||||
return
|
||||
if(2)
|
||||
adjustBruteLoss(60)
|
||||
@@ -286,10 +289,10 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
/mob/living/simple_animal/hostile/guardian/wave_ex_act(power, datum/wave_explosion/explosion, dir)
|
||||
adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod * 0.33))
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/gib()
|
||||
/mob/living/simple_animal/hostile/guardian/gib(no_brain, no_organs, no_bodyparts, datum/explosion/was_explosion)
|
||||
if(summoner)
|
||||
to_chat(summoner, "<span class='danger'><B>Your [src] was blown up!</span></B>")
|
||||
summoner.gib()
|
||||
summoner.gib(was_explosion = was_explosion)
|
||||
ghostize()
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
toggle_button_type = /atom/movable/screen/guardian/ToggleMode
|
||||
var/toggle = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/protector/ex_act(severity)
|
||||
/mob/living/simple_animal/hostile/guardian/protector/ex_act(severity, target, origin)
|
||||
if(severity == 1)
|
||||
adjustBruteLoss(400) //if in protector mode, will do 20 damage and not actually necessarily kill the summoner
|
||||
else
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
else
|
||||
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
|
||||
|
||||
/mob/living/simple_animal/banana_spider/ex_act()
|
||||
/mob/living/simple_animal/banana_spider/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/banana_spider/start_pulling()
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
user.transfer_ckey(src, FALSE)
|
||||
density = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/bread/ex_act()
|
||||
/mob/living/simple_animal/hostile/bread/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/bread/start_pulling()
|
||||
|
||||
@@ -132,7 +132,7 @@ Difficulty: Medium
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/ex_act(severity, target)
|
||||
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/ex_act(severity, target, origin)
|
||||
if(dash())
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -154,7 +154,7 @@ Difficulty: Hard
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/ex_act(severity, target)
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/ex_act(severity, target, origin)
|
||||
if(severity >= EXPLODE_LIGHT)
|
||||
return
|
||||
severity = EXPLODE_LIGHT // puny mortals
|
||||
|
||||
@@ -421,7 +421,7 @@ Difficulty: Very Hard
|
||||
if(ismob(AM))
|
||||
ActivationReaction(AM, ACTIVATE_MOB_BUMP)
|
||||
|
||||
/obj/machinery/anomalous_crystal/ex_act()
|
||||
/obj/machinery/anomalous_crystal/ex_act(severity, target, origin)
|
||||
ActivationReaction(null, ACTIVATE_BOMB)
|
||||
|
||||
/obj/machinery/anomalous_crystal/honk //Strips and equips you as a clown. I apologize for nothing
|
||||
@@ -740,7 +740,7 @@ Difficulty: Very Hard
|
||||
/obj/structure/closet/stasis/emp_act()
|
||||
return
|
||||
|
||||
/obj/structure/closet/stasis/ex_act()
|
||||
/obj/structure/closet/stasis/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/structure/closet/stasis/handle_lock_addition()
|
||||
|
||||
@@ -147,7 +147,7 @@ Difficulty: Extremely Hard
|
||||
if(isturf(target) || isobj(target))
|
||||
target.ex_act(EXPLODE_HEAVY)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/ex_act(severity, target)
|
||||
/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/ex_act(severity, target, origin)
|
||||
adjustBruteLoss(30 * severity - 120)
|
||||
visible_message("<span class='danger'>[src] absorbs the explosion!</span>", "<span class='userdanger'>You absorb the explosion!</span>")
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ Difficulty: Medium
|
||||
. = ..()
|
||||
internal = new/obj/item/gps/internal/dragon(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/ex_act(severity, target)
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/ex_act(severity, target, origin)
|
||||
if(severity == 3)
|
||||
return
|
||||
..()
|
||||
@@ -387,7 +387,7 @@ Difficulty: Medium
|
||||
light_range = 2
|
||||
duration = 13
|
||||
|
||||
/obj/effect/temp_visual/lava_warning/ex_act()
|
||||
/obj/effect/temp_visual/lava_warning/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/lava_warning/Initialize(mapload, var/reset_time = 10)
|
||||
|
||||
@@ -674,7 +674,7 @@ Difficulty: Normal
|
||||
layer = LOW_OBJ_LAYER
|
||||
anchored = TRUE
|
||||
|
||||
/obj/effect/hierophant/ex_act()
|
||||
/obj/effect/hierophant/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/effect/hierophant/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
adjustBruteLoss(-L.maxHealth/2)
|
||||
L.gib()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/ex_act(severity, target)
|
||||
/mob/living/simple_animal/hostile/megafauna/ex_act(severity, target, origin)
|
||||
switch (severity)
|
||||
if (EXPLODE_DEVASTATE)
|
||||
adjustBruteLoss(250)
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
if(isliving(target) && !target.Adjacent(targets_from) && ranged_cooldown <= world.time)//No more being shot at point blank or spammed with RNG beams
|
||||
OpenFire(target)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/ex_act(severity, target)
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/ex_act(severity, target, origin)
|
||||
switch(severity)
|
||||
if(1)
|
||||
gib()
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
|
||||
/datum/action/cooldown/coffer/Trigger()
|
||||
. = ..()
|
||||
if(!.)
|
||||
if(!. || owner.stat != CONSCIOUS)
|
||||
return
|
||||
var/turf/T = get_turf(owner)
|
||||
var/loot = rand(1,100)
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
/datum/action/cooldown/riot/Trigger()
|
||||
. = ..()
|
||||
if(!.)
|
||||
if(!. || owner.stat != CONSCIOUS)
|
||||
return
|
||||
var/cap = CONFIG_GET(number/ratcap)
|
||||
var/something_from_nothing = FALSE
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
if((bodytemperature < minbodytemp) || (bodytemperature > maxbodytemp))
|
||||
adjustHealth(unsuitable_atmos_damage)
|
||||
|
||||
/mob/living/simple_animal/gib()
|
||||
/mob/living/simple_animal/gib(no_brain, no_organs, no_bodyparts, datum/explosion/was_explosion)
|
||||
if(butcher_results)
|
||||
var/atom/Tsec = drop_location()
|
||||
for(var/path in butcher_results)
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
|
||||
// Stronger explosions cause serious damage to internal components
|
||||
// Minor explosions are mostly mitigitated by casing.
|
||||
/obj/machinery/modular_computer/ex_act(severity)
|
||||
/obj/machinery/modular_computer/ex_act(severity, target, origin)
|
||||
if(cpu)
|
||||
return cpu.ex_act(severity)
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/stability = 100//TODO: add all the stability things to this so its not very safe if you keep hitting in on things
|
||||
|
||||
|
||||
/obj/item/am_containment/ex_act(severity, target)
|
||||
/obj/item/am_containment/ex_act(severity, target, origin)
|
||||
switch(severity)
|
||||
if(1)
|
||||
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
check_stability()
|
||||
return
|
||||
|
||||
/obj/machinery/power/am_control_unit/ex_act(severity, target)
|
||||
/obj/machinery/power/am_control_unit/ex_act(severity, target, origin)
|
||||
stability -= (80 - (severity * 20))
|
||||
check_stability()
|
||||
return
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
/obj/machinery/am_shielding/emp_act()//Immune due to not really much in the way of electronics.
|
||||
return
|
||||
|
||||
/obj/machinery/am_shielding/ex_act(severity, target)
|
||||
/obj/machinery/am_shielding/ex_act(severity, target, origin)
|
||||
stability -= (80 - (severity * 20))
|
||||
check_stability()
|
||||
return
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
if(charge < 0)
|
||||
charge = 0
|
||||
|
||||
/obj/item/stock_parts/cell/ex_act(severity, target)
|
||||
/obj/item/stock_parts/cell/ex_act(severity, target, origin)
|
||||
..()
|
||||
if(!QDELETED(src))
|
||||
switch(severity)
|
||||
@@ -187,23 +187,6 @@
|
||||
/obj/item/stock_parts/cell/get_part_rating()
|
||||
return rating * maxcharge
|
||||
|
||||
// stuff so ipcs and synthlizards can eat power cells, taken from how moths can eat clothing
|
||||
/obj/item/reagent_containers/food/snacks/cell
|
||||
name = "oops"
|
||||
desc = "If you're reading this it means I messed up. This is related to ipcs/synths eating cells and I didn't know a better way to do it than making a new food object."
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 0.5)
|
||||
tastes = list("electricity" = 1, "metal" = 1)
|
||||
|
||||
/obj/item/stock_parts/cell/attack(mob/M, mob/user, def_zone)
|
||||
if(user.a_intent != INTENT_HARM && isrobotic(M))
|
||||
var/obj/item/reagent_containers/food/snacks/cell/cell_as_food = new
|
||||
cell_as_food.name = name
|
||||
if(cell_as_food.attack(M, user, def_zone))
|
||||
take_damage(40, sound_effect=FALSE)
|
||||
qdel(cell_as_food)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/* Cell variants*/
|
||||
/obj/item/stock_parts/cell/empty
|
||||
start_charged = FALSE
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
var/lastgenlev = -1
|
||||
var/lastcirc = "00"
|
||||
|
||||
var/max_efficiency = 0.45
|
||||
|
||||
|
||||
/obj/machinery/power/generator/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -61,15 +63,12 @@
|
||||
|
||||
|
||||
if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0)
|
||||
var/efficiency = 0.45
|
||||
var/efficiency = LOGISTIC_FUNCTION(max_efficiency,0.0009,delta_temperature,10000)
|
||||
|
||||
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
|
||||
|
||||
var/heat = energy_transfer*(1-efficiency)
|
||||
if(delta_temperature < 16800) // second point where derivative of below function = 1
|
||||
lastgen += LOGISTIC_FUNCTION(500000,0.0009,delta_temperature,10000)
|
||||
else
|
||||
lastgen += delta_temperature + 482102 // value of above function at 16800, or very nearly so
|
||||
lastgen += energy_transfer * efficiency
|
||||
var/heat = energy_transfer * (1-efficiency)
|
||||
|
||||
hot_air.set_temperature(hot_air.return_temperature() - energy_transfer/hot_air_heat_capacity)
|
||||
cold_air.set_temperature(cold_air.return_temperature() + heat/cold_air_heat_capacity)
|
||||
|
||||
@@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
|
||||
/obj/machinery/gravity_generator/safe_throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = MOVE_FORCE_STRONG, gentle = FALSE)
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/gravity_generator/ex_act(severity, target)
|
||||
/obj/machinery/gravity_generator/ex_act(severity, target, origin)
|
||||
if(severity >= EXPLODE_DEVASTATE) // Very sturdy.
|
||||
set_broken()
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
/obj/machinery/power/rtg/abductor/blob_act(obj/structure/blob/B)
|
||||
overload()
|
||||
|
||||
/obj/machinery/power/rtg/abductor/ex_act()
|
||||
/obj/machinery/power/rtg/abductor/ex_act(severity, target, origin)
|
||||
if(going_kaboom)
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
/obj/machinery/field/containment/blob_act(obj/structure/blob/B)
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/field/containment/ex_act(severity, target)
|
||||
/obj/machinery/field/containment/ex_act(severity, target, origin)
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/field/containment/attack_animal(mob/living/simple_animal/M)
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
A.narsie_act()
|
||||
|
||||
|
||||
/obj/singularity/narsie/ex_act() //No throwing bombs at her either.
|
||||
/obj/singularity/narsie/ex_act(severity, target, origin) //No throwing bombs at her either.
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
toxmob(A)
|
||||
|
||||
|
||||
/obj/effect/accelerated_particle/ex_act(severity, target)
|
||||
/obj/effect/accelerated_particle/ex_act(severity, target, origin)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/accelerated_particle/singularity_pull()
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/singularity/ex_act(severity, target)
|
||||
/obj/singularity/ex_act(severity, target, origin)
|
||||
switch(severity)
|
||||
if(1)
|
||||
if(current_size <= STAGE_TWO)
|
||||
|
||||
@@ -950,7 +950,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
CALCULATE_ADJACENT_TURFS(T)
|
||||
|
||||
//Do not blow up our internal radio
|
||||
/obj/machinery/power/supermatter_crystal/contents_explosion(severity, target)
|
||||
/obj/machinery/power/supermatter_crystal/contents_explosion(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/engine
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
if(!is_miniball)
|
||||
set_light(10, 7, "#EEEEFF")
|
||||
|
||||
/obj/singularity/energy_ball/ex_act(severity, target)
|
||||
/obj/singularity/energy_ball/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/singularity/energy_ball/consume(severity, target)
|
||||
|
||||
@@ -24,9 +24,10 @@
|
||||
|
||||
/obj/item/ammo_casing/chemgun
|
||||
name = "dart synthesiser"
|
||||
desc = "A high-power spring, linked to an energy-based dart synthesiser."
|
||||
desc = "A high-power spring, linked to an energy-based piercing dart synthesiser."
|
||||
projectile_type = /obj/item/projectile/bullet/dart/piercing
|
||||
firing_effect_type = null
|
||||
var/dartvolume = 10
|
||||
|
||||
/obj/item/ammo_casing/chemgun/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
if(!BB)
|
||||
@@ -35,11 +36,23 @@
|
||||
var/obj/item/gun/chem/CG = loc
|
||||
if(CG.syringes_left <= 0)
|
||||
return
|
||||
CG.reagents.trans_to(BB, 10)
|
||||
if (!CG.vial)
|
||||
CG.syringes_left--
|
||||
return
|
||||
CG.vial.reagents.trans_to(BB, dartvolume)
|
||||
BB.name = "chemical dart"
|
||||
CG.syringes_left--
|
||||
..()
|
||||
|
||||
//Smart dart version of reagent launcher.
|
||||
/obj/item/ammo_casing/chemgun/smart
|
||||
name = "smartdart synthesiser"
|
||||
desc = "A high-power spring, linked to an energy-based smartdart synthesiser."
|
||||
projectile_type = /obj/item/projectile/bullet/dart/syringe/dart
|
||||
firing_effect_type = null
|
||||
harmful = FALSE
|
||||
dartvolume = 20
|
||||
|
||||
/obj/item/ammo_casing/dnainjector
|
||||
name = "rigged syringe gun spring"
|
||||
desc = "A high-power spring that throws DNA injectors."
|
||||
|
||||
@@ -156,5 +156,5 @@
|
||||
mediumr = max(mediumr - 1, 0)
|
||||
lightr = max(lightr - 1, 0)
|
||||
|
||||
/obj/item/projectile/blastwave/ex_act()
|
||||
/obj/item/projectile/blastwave/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//his isn't a subtype of the syringe gun because the syringegun subtype is made to hold syringes
|
||||
//this is meant to hold reagents/obj/item/gun/syringe
|
||||
/obj/item/gun/chem
|
||||
name = "reagent gun"
|
||||
desc = "A Nanotrasen syringe gun, modified to automatically synthesise chemical darts, and instead hold reagents."
|
||||
name = "Reagent Repeater"
|
||||
desc = "A Nanotrasen smartdart repeater rifle, modified to automatically synthesize piercing darts."
|
||||
icon_state = "chemgun"
|
||||
item_state = "chemgun"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
@@ -13,21 +13,79 @@
|
||||
custom_materials = list(/datum/material/iron=2000)
|
||||
clumsy_check = FALSE
|
||||
fire_sound = 'sound/items/syringeproj.ogg'
|
||||
var/time_per_syringe = 300
|
||||
var/syringes_left = 5
|
||||
var/max_syringes = 5
|
||||
var/time_per_syringe = 200
|
||||
var/syringes_left = 3
|
||||
var/max_syringes = 6
|
||||
var/last_synth = 0
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/vial
|
||||
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large)
|
||||
var/quickload = TRUE
|
||||
|
||||
/obj/item/gun/chem/Initialize()
|
||||
. = ..()
|
||||
chambered = new /obj/item/ammo_casing/chemgun(src)
|
||||
START_PROCESSING(SSobj, src)
|
||||
create_reagents(100, OPENCONTAINER)
|
||||
|
||||
/obj/item/gun/chem/Destroy()
|
||||
. = ..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
//bunch of hypospray copy paste
|
||||
/obj/item/gun/chem/examine(mob/user)
|
||||
. = ..()
|
||||
if(vial)
|
||||
. += "[vial] has [vial.reagents.total_volume]u remaining."
|
||||
else
|
||||
. += "It has no vial loaded in."
|
||||
|
||||
/obj/item/gun/chem/proc/unload_hypo(obj/item/I, mob/user)
|
||||
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/V = I
|
||||
V.forceMove(user.loc)
|
||||
user.put_in_hands(V)
|
||||
to_chat(user, "<span class='notice'>You remove [vial] from [src].</span>")
|
||||
vial = null
|
||||
update_icon()
|
||||
playsound(loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The weapon isn't loaded!</span>")
|
||||
return
|
||||
|
||||
/obj/item/gun/chem/attackby(obj/item/I, mob/living/user)
|
||||
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
|
||||
if(vial)
|
||||
if(!quickload)
|
||||
to_chat(user, "<span class='warning'>[src] can not hold more than one vial!</span>")
|
||||
return FALSE
|
||||
unload_hypo(vial, user)
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/V = I
|
||||
if(!is_type_in_list(V, allowed_containers))
|
||||
to_chat(user, "<span class='notice'>[src] doesn't accept this type of vial.</span>")
|
||||
return FALSE
|
||||
if(!user.transferItemToLoc(V,src))
|
||||
return FALSE
|
||||
vial = V
|
||||
user.visible_message("<span class='notice'>[user] has loaded a vial into [src].</span>","<span class='notice'>You have loaded [vial] into [src].</span>")
|
||||
update_icon()
|
||||
playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1)
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>This doesn't fit in [src].</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/item/gun/chem/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
. = ..() //Don't bother changing this or removing it from containers will break.
|
||||
|
||||
/obj/item/gun/chem/attack_self(mob/living/user)
|
||||
if(user && !user.incapacitated())
|
||||
if(!vial)
|
||||
to_chat(user, "This Hypo needs to be loaded first!")
|
||||
else
|
||||
unload_hypo(vial,user)
|
||||
|
||||
/obj/item/gun/chem/attack(obj/item/I, mob/user, params)
|
||||
return
|
||||
|
||||
/obj/item/gun/chem/can_shoot()
|
||||
return syringes_left
|
||||
|
||||
@@ -45,3 +103,15 @@
|
||||
if(chambered && !chambered.BB)
|
||||
chambered.newshot()
|
||||
last_synth = world.time
|
||||
|
||||
//Smart dart version of the reagent launcher
|
||||
/obj/item/gun/chem/smart
|
||||
name = "Smartdart repeater rifle"
|
||||
desc = "An experimental improved version of the smartdart rifle. It synthesizes medicinal smart darts which it fills using an inserted hypovial. It can accommodate both large and small hypovials."
|
||||
icon_state = "chemgunrepeater"
|
||||
item_state = "syringegun"
|
||||
|
||||
obj/item/gun/chem/smart/Initialize()
|
||||
. = ..()
|
||||
chambered = new /obj/item/ammo_casing/chemgun/smart(src)
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
/obj/item/gun/syringe/dart/rapiddart
|
||||
name = "Repeating dart gun"
|
||||
icon_state = "rapiddartgun"
|
||||
item_state = "rapiddartgun"
|
||||
item_state = "syringegun"
|
||||
|
||||
/obj/item/gun/syringe/dart/rapiddart/CheckParts(list/parts_list)
|
||||
var/obj/item/reagent_containers/glass/beaker/B = locate(/obj/item/reagent_containers/glass/beaker) in parts_list
|
||||
@@ -157,7 +157,7 @@
|
||||
name = "blowgun"
|
||||
desc = "Fire syringes at a short distance."
|
||||
icon_state = "blowgun"
|
||||
item_state = "blowgun"
|
||||
item_state = "syringegun"
|
||||
fire_sound = 'sound/items/syringeproj.ogg'
|
||||
|
||||
/obj/item/gun/syringe/blowgun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0, stam_cost = 0)
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
return BULLET_ACT_BLOCK
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
C.regenerate_limbs()
|
||||
if(!is_species(C, /datum/species/dullahan)) //No accidental instagibbing dullahans please
|
||||
C.regenerate_limbs()
|
||||
C.regenerate_organs()
|
||||
if(target.revive(full_heal = 1))
|
||||
target.grab_ghost(force = TRUE) // even suicides
|
||||
|
||||
@@ -165,14 +165,14 @@
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/chem_dispenser/ex_act(severity, target)
|
||||
/obj/machinery/chem_dispenser/ex_act(severity, target, origin)
|
||||
if(severity < 3)
|
||||
..()
|
||||
|
||||
/obj/machinery/chem_dispenser/contents_explosion(severity, target)
|
||||
/obj/machinery/chem_dispenser/contents_explosion(severity, target, origin)
|
||||
..()
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
beaker.ex_act(severity, target, origin)
|
||||
|
||||
/obj/machinery/chem_dispenser/Exited(atom/movable/A, atom/newloc)
|
||||
. = ..()
|
||||
|
||||
@@ -46,16 +46,16 @@
|
||||
for(var/obj/item/reagent_containers/glass/beaker/B in component_parts)
|
||||
reagents.maximum_volume += B.reagents.maximum_volume
|
||||
|
||||
/obj/machinery/chem_master/ex_act(severity, target)
|
||||
/obj/machinery/chem_master/ex_act(severity, target, origin)
|
||||
if(severity < 3)
|
||||
..()
|
||||
|
||||
/obj/machinery/chem_master/contents_explosion(severity, target)
|
||||
/obj/machinery/chem_master/contents_explosion(severity, target, origin)
|
||||
..()
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
beaker.ex_act(severity, target, origin)
|
||||
if(bottle)
|
||||
bottle.ex_act(severity, target)
|
||||
bottle.ex_act(severity, target, origin)
|
||||
|
||||
/obj/machinery/chem_master/Exited(atom/movable/A, atom/newloc)
|
||||
. = ..()
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
drop_all_items()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/reagentgrinder/contents_explosion(severity, target)
|
||||
/obj/machinery/reagentgrinder/contents_explosion(severity, target, origin)
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
beaker.ex_act(severity, target, origin)
|
||||
|
||||
/obj/machinery/reagentgrinder/RefreshParts()
|
||||
speed = 1
|
||||
|
||||
@@ -88,10 +88,10 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/item/reagent_containers/ex_act()
|
||||
/obj/item/reagent_containers/ex_act(severity, target, origin)
|
||||
if(reagents)
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
R.on_ex_act()
|
||||
R.on_ex_act(severity)
|
||||
if(!QDELETED(src))
|
||||
..()
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
/obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B)
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/ex_act()
|
||||
/obj/structure/reagent_dispensers/fueltank/ex_act(severity, target, origin)
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/fire_act(exposed_temperature, exposed_volume)
|
||||
|
||||
@@ -130,5 +130,5 @@
|
||||
/obj/structure/disposalholder/AllowDrop()
|
||||
return TRUE
|
||||
|
||||
/obj/structure/disposalholder/ex_act(severity, target)
|
||||
/obj/structure/disposalholder/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
@@ -132,10 +132,10 @@
|
||||
|
||||
|
||||
// pipe affected by explosion
|
||||
/obj/structure/disposalpipe/contents_explosion(severity, target)
|
||||
/obj/structure/disposalpipe/contents_explosion(severity, target, origin)
|
||||
var/obj/structure/disposalholder/H = locate() in src
|
||||
if(H)
|
||||
H.contents_explosion(severity, target)
|
||||
H.contents_explosion(severity, target, origin)
|
||||
|
||||
|
||||
/obj/structure/disposalpipe/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
AM.forceMove(T)
|
||||
return ..()
|
||||
|
||||
/obj/structure/bigDelivery/contents_explosion(severity, target)
|
||||
/obj/structure/bigDelivery/contents_explosion(severity, target, origin)
|
||||
for(var/atom/movable/AM in contents)
|
||||
AM.ex_act()
|
||||
AM.ex_act(severity, target, origin)
|
||||
|
||||
/obj/structure/bigDelivery/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/destTagger))
|
||||
@@ -82,9 +82,9 @@
|
||||
var/giftwrapped = 0
|
||||
var/sortTag = 0
|
||||
|
||||
/obj/item/smallDelivery/contents_explosion(severity, target)
|
||||
/obj/item/smallDelivery/contents_explosion(severity, target, origin)
|
||||
for(var/atom/movable/AM in contents)
|
||||
AM.ex_act()
|
||||
AM.ex_act(severity, target, origin)
|
||||
|
||||
/obj/item/smallDelivery/attack_self(mob/user)
|
||||
user.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
|
||||
@@ -122,6 +122,17 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/smartdartrepeater
|
||||
name = "Smartdart Repeater"
|
||||
desc = "An experimental smartdart rifle. It can make its own smart darts and is loaded with a hypovial."
|
||||
id = "smartdartrepeater"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/plastic = 1000, /datum/material/iron = 2000,/datum/material/titanium = 1000 )
|
||||
build_path = /obj/item/gun/chem/smart
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
|
||||
/datum/design/plasmarefiller
|
||||
name = "Plasma-Man Jumpsuit Refill"
|
||||
desc = "A refill pack for the auto-extinguisher on Plasma-man suits."
|
||||
@@ -201,7 +212,7 @@
|
||||
build_path = /obj/item/storage/hypospraykit // let's not summon new hyposprays thanks
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
|
||||
/datum/design/hypospray/mkii
|
||||
name = "Hypospray Mk. II"
|
||||
id = "hypospray_mkii"
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
display_name = "Medical Weaponry"
|
||||
description = "Weapons using medical technology."
|
||||
prereq_ids = list("adv_biotech", "adv_weaponry")
|
||||
design_ids = list("rapidsyringe", "shotgundartcryostatis")
|
||||
design_ids = list("rapidsyringe", "shotgundartcryostatis","smartdartrepeater")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
|
||||
|
||||
/datum/techweb_node/beam_weapons
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params)
|
||||
return
|
||||
|
||||
/obj/machinery/power/emitter/energycannon/magical/ex_act(severity)
|
||||
/obj/machinery/power/emitter/energycannon/magical/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/machinery/power/emitter/energycannon/magical/emag_act(mob/user)
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
forceMove(newLoc)
|
||||
|
||||
/obj/effect/dummy/phased_mob/spell_jaunt/ex_act(blah)
|
||||
/obj/effect/dummy/phased_mob/spell_jaunt/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/effect/dummy/phased_mob/spell_jaunt/wave_ex_act(power, datum/wave_explosion/explosion, dir)
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
qdel(src)
|
||||
check_light_level()
|
||||
|
||||
/obj/effect/dummy/phased_mob/shadow/ex_act()
|
||||
/obj/effect/dummy/phased_mob/shadow/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/effect/dummy/phased_mob/shadow/wave_ex_act(power, datum/wave_explosion/explosion, dir)
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
var/obj/machinery/parent
|
||||
|
||||
/obj/structure/filler/ex_act()
|
||||
/obj/structure/filler/ex_act(severity, target, origin)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/bsa_control
|
||||
|
||||
@@ -326,49 +326,79 @@
|
||||
desc = "An internal power cord hooked up to a battery. Useful if you run on electricity. Not so much otherwise."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "wire1"
|
||||
var/in_use = FALSE //No stacking doafters
|
||||
|
||||
/obj/item/apc_powercord/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
if(!istype(target, /obj/machinery/power/apc) || !ishuman(user) || !proximity_flag)
|
||||
if((!istype(target, /obj/machinery/power/apc) && !istype(target, /obj/item/stock_parts/cell)) || !ishuman(user) || !proximity_flag)
|
||||
return ..()
|
||||
user.DelayNextAction(CLICK_CD_MELEE)
|
||||
var/obj/machinery/power/apc/A = target
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(in_use)
|
||||
to_chat(H, "<span class='warning'>[src] is already connected to something!</span>")
|
||||
return
|
||||
var/obj/item/organ/stomach/ipc/cell = locate(/obj/item/organ/stomach/ipc) in H.internal_organs
|
||||
if(!cell)
|
||||
to_chat(H, "<span class='warning'>You try to siphon energy from the [A], but your power cell is gone!</span>")
|
||||
to_chat(H, "<span class='warning'>You try to siphon energy from [target], but your power cell is gone!</span>")
|
||||
return
|
||||
|
||||
if(A.cell && A.cell.charge > 0)
|
||||
if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
to_chat(user, "<span class='warning'>You are already fully charged!</span>")
|
||||
if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
to_chat(user, "<span class='warning'>You are already fully charged!</span>")
|
||||
return
|
||||
if(istype(target, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = target
|
||||
if(A.cell && A.cell.charge > 0)
|
||||
in_use = TRUE
|
||||
apc_powerdraw_loop(A, H)
|
||||
return
|
||||
else
|
||||
powerdraw_loop(A, H)
|
||||
else //We only let through cells and APCs, so this has to be a cell
|
||||
var/obj/item/stock_parts/cell/C = target
|
||||
if(C.charge > 0)
|
||||
in_use = TRUE
|
||||
cell_powerdraw_loop(C, H)
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='warning'>There is no charge to draw from that APC.</span>")
|
||||
to_chat(user, "<span class='warning'>There is no charge to draw from [target].</span>")
|
||||
|
||||
/obj/item/apc_powercord/proc/powerdraw_loop(obj/machinery/power/apc/A, mob/living/carbon/human/H)
|
||||
H.visible_message("<span class='notice'>[H] inserts a power connector into the [A].</span>", "<span class='notice'>You begin to draw power from the [A].</span>")
|
||||
/obj/item/apc_powercord/proc/apc_powerdraw_loop(obj/machinery/power/apc/A, mob/living/carbon/human/H)
|
||||
H.visible_message("<span class='notice'>[H] inserts a power connector into [A].</span>", "<span class='notice'>You begin to draw power from [A].</span>")
|
||||
while(do_after(H, 10, target = A))
|
||||
if(loc != H)
|
||||
to_chat(H, "<span class='warning'>You must keep your connector out while charging!</span>")
|
||||
break
|
||||
if(A.cell.charge == 0)
|
||||
to_chat(H, "<span class='warning'>The [A] doesn't have enough charge to spare.</span>")
|
||||
to_chat(H, "<span class='warning'>[A] doesn't have enough charge to spare.</span>")
|
||||
break
|
||||
A.charging = 1
|
||||
if(A.cell.charge >= 500)
|
||||
do_sparks(1, FALSE, A)
|
||||
H.nutrition += 50
|
||||
A.cell.charge -= 150
|
||||
H.adjust_nutrition(50)
|
||||
A.cell.use(150)
|
||||
to_chat(H, "<span class='notice'>You siphon off some of the stored charge for your own use.</span>")
|
||||
else
|
||||
H.nutrition += A.cell.charge/10
|
||||
A.cell.charge = 0
|
||||
to_chat(H, "<span class='notice'>You siphon off as much as the [A] can spare.</span>")
|
||||
H.adjust_nutrition(A.cell.charge/10)
|
||||
A.cell.use(A.cell.charge)
|
||||
to_chat(H, "<span class='notice'>You siphon off as much as [A] can spare.</span>")
|
||||
break
|
||||
if(H.nutrition > NUTRITION_LEVEL_WELL_FED)
|
||||
to_chat(H, "<span class='notice'>You are now fully charged.</span>")
|
||||
break
|
||||
H.visible_message("<span class='notice'>[H] unplugs from the [A].</span>", "<span class='notice'>You unplug from the [A].</span>")
|
||||
in_use = FALSE
|
||||
H.visible_message("<span class='notice'>[H] unplugs from [A].</span>", "<span class='notice'>You unplug from [A].</span>")
|
||||
|
||||
/obj/item/apc_powercord/proc/cell_powerdraw_loop(obj/item/stock_parts/cell/C, mob/living/carbon/human/H)
|
||||
H.visible_message("<span class='notice'>[H] connects a power cord to [C]</span>", "<span class='notice'>You begin to draw power from [C].</span>")
|
||||
while(do_after(H, 10, target = C))
|
||||
if(loc != H)
|
||||
to_chat(H, "<span class='warning'>You must keep your connector out while charging!</span>")
|
||||
break
|
||||
if(C.charge == 0)
|
||||
to_chat(H, "<span class='warning'>[C] doesn't have any charge remaining.</span>")
|
||||
break
|
||||
var/siphoned_charge = min(C.charge, 2000)
|
||||
C.use(siphoned_charge)
|
||||
do_sparks(1, FALSE, C)
|
||||
H.adjust_nutrition(siphoned_charge / 100) //Less efficient on a pure power basis than APC recharge. Still a very viable way of gaining nutrition. (100 nutrition / base 10k cell)
|
||||
if(H.nutrition > NUTRITION_LEVEL_WELL_FED)
|
||||
to_chat(H, "<span class='notice'>You are now fully charged.</span>")
|
||||
break
|
||||
in_use = FALSE
|
||||
H.visible_message("<span class='notice'>[H] disconnects [src] from [C].</span>", "<span class='notice'>You disconnect from [C].</span>")
|
||||
|
||||
@@ -191,7 +191,8 @@
|
||||
/obj/item/clothing/under/costume/cheongsam = 3,
|
||||
/obj/item/clothing/under/costume/cheongsam/white = 3,
|
||||
/obj/item/clothing/under/costume/cheongsam/red = 3,
|
||||
/obj/item/storage/backpack/snail = 3)
|
||||
/obj/item/storage/backpack/snail = 3,
|
||||
/obj/item/umbrella = 5)
|
||||
contraband = list(/obj/item/clothing/accessory/turtleneck/tactifool/syndicate = 3,
|
||||
/obj/item/clothing/under/syndicate/tacticool = 3,
|
||||
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,
|
||||
|
||||
Reference in New Issue
Block a user