mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-22 03:27:46 +01:00
Port OD Pragma Lints (#17171)
* Experimental: Port OD Pragma Lints
* first pass: Includes icon forge fixes/updates
* 2nd pass
* third pass
* debug_ai: This what you're unhappy with?
* Revert "debug_ai: This what you're unhappy with?"
This reverts commit bc178792e6.
* How about this
* Or is it the else?
* Pass summer
---------
Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com>
This commit is contained in:
@@ -118,7 +118,7 @@
|
||||
heat_limit = H.species.heat_level_3
|
||||
|
||||
if(pipe_air.temperature > heat_limit + 1)
|
||||
L.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, BP_TORSO, used_weapon = "Excessive Heat")
|
||||
L.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, BP_TORSO)
|
||||
|
||||
//fancy radiation glowing
|
||||
if(pipe_air.temperature && (icon_temperature > 500 || pipe_air.temperature > 500)) //start glowing at 500K
|
||||
|
||||
+3
-3
@@ -123,15 +123,15 @@ Contains helper procs for airflow, handled in /connection_group.
|
||||
|
||||
var/blocked = run_armor_check(BP_HEAD,"melee")
|
||||
var/soaked = get_armor_soak(BP_HEAD,"melee")
|
||||
apply_damage(b_loss/3, BRUTE, BP_HEAD, blocked, soaked, 0, "Airflow")
|
||||
apply_damage(b_loss/3, BRUTE, BP_HEAD, blocked, soaked, 0)
|
||||
|
||||
blocked = run_armor_check(BP_TORSO,"melee")
|
||||
soaked = get_armor_soak(BP_TORSO,"melee")
|
||||
apply_damage(b_loss/3, BRUTE, BP_TORSO, blocked, soaked, 0, "Airflow")
|
||||
apply_damage(b_loss/3, BRUTE, BP_TORSO, blocked, soaked, 0)
|
||||
|
||||
blocked = run_armor_check(BP_GROIN,"melee")
|
||||
soaked = get_armor_soak(BP_GROIN,"melee")
|
||||
apply_damage(b_loss/3, BRUTE, BP_GROIN, blocked, soaked, 0, "Airflow")
|
||||
apply_damage(b_loss/3, BRUTE, BP_GROIN, blocked, soaked, 0)
|
||||
|
||||
if(airflow_speed > 10)
|
||||
Paralyse(round(airflow_speed * vsc.airflow_stun))
|
||||
|
||||
+7
-7
@@ -425,10 +425,10 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
|
||||
|
||||
//Always check these damage procs first if fire damage isn't working. They're probably what's wrong.
|
||||
|
||||
apply_damage(2.5*mx*head_exposure, BURN, BP_HEAD, 0, 0, "Fire")
|
||||
apply_damage(2.5*mx*chest_exposure, BURN, BP_TORSO, 0, 0, "Fire")
|
||||
apply_damage(2.0*mx*groin_exposure, BURN, BP_GROIN, 0, 0, "Fire")
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, BP_L_LEG, 0, 0, "Fire")
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, BP_R_LEG, 0, 0, "Fire")
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, BP_L_ARM, 0, 0, "Fire")
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, BP_R_ARM, 0, 0, "Fire")
|
||||
apply_damage(2.5*mx*head_exposure, BURN, BP_HEAD, 0, 0)
|
||||
apply_damage(2.5*mx*chest_exposure, BURN, BP_TORSO, 0, 0)
|
||||
apply_damage(2.0*mx*groin_exposure, BURN, BP_GROIN, 0, 0)
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, BP_L_LEG, 0, 0)
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, BP_R_LEG, 0, 0)
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, BP_L_ARM, 0, 0)
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, BP_R_ARM, 0, 0)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
//Update this whenever you need to take advantage of more recent byond features
|
||||
#define MIN_COMPILER_VERSION 514
|
||||
#define MIN_COMPILER_BUILD 1556
|
||||
#if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM)
|
||||
#if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM) && !defined(OPENDREAM)
|
||||
//Don't forget to update this part
|
||||
#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update.
|
||||
#error You need version 514.1556 or higher
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
// This file is included right at the start of the DME.
|
||||
// Its purpose is to enable multiple lints (pragmas) that are supported by OpenDream to better validate the codebase
|
||||
// These are essentially nitpicks the DM compiler should pick up on but doesnt
|
||||
|
||||
#ifndef SPACEMAN_DMM
|
||||
#ifdef OPENDREAM
|
||||
// These are in their own file as you need to do it with an include as a hack to avoid
|
||||
// SpacemanDMM evaluating the #pragma lines, even if its outside a block it cares about
|
||||
#include "__pragmas.dm"
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,30 @@
|
||||
//1000-1999
|
||||
#pragma FileAlreadyIncluded error
|
||||
#pragma MissingIncludedFile error
|
||||
#pragma MisplacedDirective error
|
||||
#pragma UndefineMissingDirective error
|
||||
#pragma DefinedMissingParen error
|
||||
#pragma ErrorDirective error
|
||||
#pragma WarningDirective error
|
||||
#pragma MiscapitalizedDirective error
|
||||
|
||||
//2000-2999
|
||||
#pragma SoftReservedKeyword error
|
||||
#pragma DuplicateVariable error
|
||||
#pragma DuplicateProcDefinition error
|
||||
#pragma PointlessParentCall error
|
||||
#pragma PointlessBuiltinCall error
|
||||
#pragma SuspiciousMatrixCall error
|
||||
#pragma MalformedRange error
|
||||
#pragma InvalidRange error
|
||||
#pragma InvalidSetStatement error
|
||||
#pragma InvalidOverride error
|
||||
#pragma DanglingVarType error
|
||||
#pragma MissingInterpolatedExpression error
|
||||
#pragma InvalidIndexOperation error
|
||||
#pragma PointlessPositionalArgument error
|
||||
#pragma ProcArgumentGlobal error
|
||||
|
||||
//3000-3999
|
||||
#pragma EmptyBlock error
|
||||
#pragma AmbiguousInOrder error
|
||||
@@ -90,8 +90,11 @@
|
||||
var/ourdir = dir
|
||||
if(!none && ourdir != SOUTH)
|
||||
if(length(icon_states(icon(icon, state, NORTH))))
|
||||
pass()
|
||||
else if(length(icon_states(icon(icon, state, EAST))))
|
||||
pass()
|
||||
else if(length(icon_states(icon(icon, state, WEST))))
|
||||
pass()
|
||||
else
|
||||
ourdir = SOUTH
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
while (i)
|
||||
var/char = text2ascii(hex, i)
|
||||
switch(char)
|
||||
if(48) // 0 -- do nothing
|
||||
if(48) pass() // 0 -- do nothing
|
||||
if(49 to 57) num += (char - 48) * power // 1-9
|
||||
if(97, 65) num += power * 10 // A
|
||||
if(98, 66) num += power * 11 // B
|
||||
@@ -166,6 +166,28 @@
|
||||
if (NORTHWEST) return 315
|
||||
if (SOUTHWEST) return 225
|
||||
|
||||
/// Returns a list(x, y), being the change in position required to step in the passed in direction
|
||||
/proc/dir2offset(dir)
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
return list(0, 1)
|
||||
if(SOUTH)
|
||||
return list(0, -1)
|
||||
if(EAST)
|
||||
return list(1, 0)
|
||||
if(WEST)
|
||||
return list(-1, 0)
|
||||
if(NORTHEAST)
|
||||
return list(1, 1)
|
||||
if(SOUTHEAST)
|
||||
return list(1, -1)
|
||||
if(NORTHWEST)
|
||||
return list(-1, 1)
|
||||
if(SOUTHWEST)
|
||||
return list(-1, -1)
|
||||
else
|
||||
return list(0, 0)
|
||||
|
||||
// Converts a blend_mode constant to one acceptable to icon.Blend()
|
||||
/proc/blendMode2iconMode(blend_mode)
|
||||
switch (blend_mode)
|
||||
|
||||
@@ -1499,6 +1499,10 @@ var/mob/dview/dview_mob = new
|
||||
return !QDELETED(D)
|
||||
return FALSE
|
||||
|
||||
/// No op
|
||||
/proc/pass(...)
|
||||
return
|
||||
|
||||
//gives us the stack trace from CRASH() without ending the current proc.
|
||||
/proc/stack_trace(msg)
|
||||
CRASH(msg)
|
||||
|
||||
@@ -281,7 +281,8 @@
|
||||
var/datum/component/C = dc[c_type]
|
||||
if(C)
|
||||
if(length(C))
|
||||
C = C[1]
|
||||
var/list/component_list = C
|
||||
C = component_list[1]
|
||||
if(C.type == c_type)
|
||||
return C
|
||||
return null
|
||||
|
||||
+1
-1
@@ -363,7 +363,7 @@
|
||||
to_chat(H, span_danger("<font size =3>You somehow have become the recepient of a loyalty transplant, and it just activated!</font>"))
|
||||
H.implant_loyalty(override = TRUE)
|
||||
log_admin("[key_name_admin(usr)] has loyalty implanted [current].")
|
||||
else
|
||||
|
||||
else if (href_list["silicon"])
|
||||
BITSET(current.hud_updateflag, SPECIALROLE_HUD)
|
||||
switch(href_list["silicon"])
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
/datum/antagonist/proc/print_player_lite(var/datum/mind/ply)
|
||||
var/role = ply.assigned_role ? "\improper[ply.assigned_role]" : "\improper[ply.special_role]"
|
||||
var/text = "<br>" + span_bold("[ply.name]") + " (" + span_bold("[ply.key]") + ") as \a " + span_bold("[role]") + " ("
|
||||
var/text = "<br>" + span_bold("[ply.name]") + " (" + span_bold("[ply.key]") + ") as " + span_bold("\a [role]") + " ("
|
||||
if(ply.current)
|
||||
if(ply.current.stat == DEAD)
|
||||
text += "died"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
if(!M || !M.dna)
|
||||
return
|
||||
if(gene.block)
|
||||
if(gene.name in M.active_genes || gene.flags & GENE_ALWAYS_ACTIVATE)
|
||||
if((gene.name in M.active_genes) || gene.flags & GENE_ALWAYS_ACTIVATE)
|
||||
enabled_genes.Add(gene)
|
||||
else
|
||||
disabled_genes.Add(gene)
|
||||
|
||||
@@ -298,7 +298,6 @@
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/computer/scan_consolenew
|
||||
@@ -356,7 +355,6 @@
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/Initialize()
|
||||
|
||||
@@ -274,7 +274,7 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t
|
||||
for(var/blurb in holiday_blurbs)
|
||||
to_world(span_filter_system(span_blue("<div align='center'>[blurb]</div>")))
|
||||
switch(Holiday) //special holidays
|
||||
if("Easter")
|
||||
//if("Easter")
|
||||
//do easter stuff
|
||||
if("Christmas Eve","Christmas")
|
||||
Christmas_Game_Start()
|
||||
@@ -286,7 +286,7 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t
|
||||
if(isemptylist(Holiday))
|
||||
return 0
|
||||
switch(Holiday) //special holidays
|
||||
if("Easter") //I'll make this into some helper procs at some point
|
||||
//if("Easter") //I'll make this into some helper procs at some point
|
||||
/* var/list/turf/simulated/floor/Floorlist = list()
|
||||
for(var/turf/simulated/floor/T)
|
||||
if(T.contents)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
for(var/obj/machinery/power/smes/S in GLOB.smeses)
|
||||
var/area/current_area = get_area(S)
|
||||
if(current_area.type in skipped_areas || !(S.z in using_map.station_levels))
|
||||
if((current_area.type in skipped_areas) || !(S.z in using_map.station_levels))
|
||||
continue
|
||||
S.last_charge = S.charge
|
||||
S.last_output_attempt = S.output_attempt
|
||||
@@ -33,7 +33,7 @@
|
||||
C.cell.charge = C.cell.maxcharge
|
||||
for(var/obj/machinery/power/smes/S in GLOB.smeses)
|
||||
var/area/current_area = get_area(S)
|
||||
if(current_area.type in skipped_areas || isNotStationLevel(S.z))
|
||||
if((current_area.type in skipped_areas) || isNotStationLevel(S.z))
|
||||
continue
|
||||
S.charge = S.last_charge
|
||||
S.output_attempt = S.last_output_attempt
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
if(3.0)
|
||||
if(prob(25))
|
||||
density = FALSE
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/optable/attack_hand(mob/user as mob)
|
||||
|
||||
@@ -161,7 +161,6 @@
|
||||
//SN src = null
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/bodyscanner/tgui_host(mob/user)
|
||||
@@ -617,7 +616,6 @@
|
||||
//SN src = null
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/body_scanconsole/proc/findscanner()
|
||||
|
||||
@@ -440,7 +440,6 @@
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/clonepod/update_icon()
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
for(var/x in verbs)
|
||||
src.verbs -= x
|
||||
set_broken()
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/computer/bullet_act(var/obj/item/projectile/Proj)
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
var/obj/item/weldingtool/welder = I.get_welder()
|
||||
if(welder.remove_fuel(0,user))
|
||||
to_chat(user, span_notice("You start weld \the plasteel into place."))
|
||||
to_chat(user, span_notice("You start welding the plasteel into place."))
|
||||
playsound(src, welder.usesound, 50, 1)
|
||||
if(do_after(user, 10 * welder.toolspeed) && welder && welder.isOn())
|
||||
to_chat(user, span_notice("You finish reinforcing \the [src]."))
|
||||
|
||||
@@ -196,7 +196,6 @@ Class Procs:
|
||||
if(prob(25))
|
||||
fall_apart(severity)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/vv_edit_var(var/var_name, var/new_value)
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
return
|
||||
//when there is a breather:
|
||||
if(breather && target != breather)
|
||||
to_chat(user, span_warning("\The pump is already in use."))
|
||||
to_chat(user, span_warning("\The [src] is already in use."))
|
||||
return
|
||||
//Checking if breather is still valid
|
||||
if(target == breather && target.wear_mask != contained)
|
||||
|
||||
@@ -731,7 +731,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
/atom/proc/test_telecomms()
|
||||
var/datum/signal/signal = src.telecomms_process()
|
||||
var/pos_z = get_z(src)
|
||||
return (pos_z in signal.data["level"] && signal.data["done"])
|
||||
return ((pos_z in signal.data["level"]) && signal.data["done"])
|
||||
|
||||
/atom/proc/telecomms_process(var/do_sleep = 1)
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
var/newnet = tgui_input_text(ui.user, "Which network do you want to view?", "Comm Monitor", network, 15)
|
||||
newnet = sanitize(newnet,15)
|
||||
|
||||
if(newnet && ((ui.user in range(1, src) || issilicon(ui.user))))
|
||||
if(newnet && ((ui.user in range(1, src)) || issilicon(ui.user)))
|
||||
if(length(newnet) > 15)
|
||||
set_temp("FAILED: NETWORK TAG STRING TOO LENGTHY", "bad")
|
||||
return TRUE
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
if("network")
|
||||
var/newnet = tgui_input_text(ui.user, "Which network do you want to view?", "Comm Monitor", network, 15)
|
||||
newnet = sanitize(newnet,15) //Honestly, I'd be amazed if someone managed to do HTML in 15 chars.
|
||||
if(newnet && ((ui.user in range(1, src) || issilicon(ui.user))))
|
||||
if(newnet && ((ui.user in range(1, src)) || issilicon(ui.user)))
|
||||
if(length(newnet) > 15)
|
||||
set_temp("FAILED: NETWORK TAG STRING TOO LENGTHY", "bad")
|
||||
return TRUE
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network, 15)
|
||||
newnet = sanitize(newnet,15)
|
||||
|
||||
if(newnet && ((usr in range(1, src) || issilicon(usr))))
|
||||
if(newnet && ((usr in range(1, src)) || issilicon(usr)))
|
||||
if(length(newnet) > 15)
|
||||
temp = "<font color = #D70B00>- FAILED: NETWORK TAG STRING TOO LENGHTLY -</font>"
|
||||
|
||||
|
||||
@@ -70,11 +70,11 @@
|
||||
var/turf/loc = get_turf(user)
|
||||
var/area/A = loc.loc
|
||||
if(!istype(loc, /turf/simulated/floor))
|
||||
to_chat(user, span_danger("\The frame cannot be placed on this spot."))
|
||||
to_chat(user, span_danger("\The [src] cannot be placed on this spot."))
|
||||
return
|
||||
|
||||
if(A.requires_power == 0 || A.name == "Space")
|
||||
to_chat(user, span_danger("\The [src] Alarm cannot be placed in this area."))
|
||||
to_chat(user, span_danger("\The [src] cannot be placed in this area."))
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
H.eye_blurry = max(H.eye_blurry, flash_strength + 5)
|
||||
H.flash_eyes()
|
||||
H.adjustHalLoss(halloss_per_flash * (flash_strength / 5)) // Should take four flashes to stun.
|
||||
H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0, "Photon burns")
|
||||
H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0)
|
||||
|
||||
else
|
||||
flashfail = 1
|
||||
|
||||
@@ -477,7 +477,7 @@
|
||||
|
||||
//IF the crystal somehow ends up in a tummy and digesting with a bound mob who doesn't want to be eaten, let's move them to the ground
|
||||
/obj/item/capture_crystal/digest_act(var/atom/movable/item_storage = null)
|
||||
if(bound_mob in contents && !bound_mob.devourable)
|
||||
if((bound_mob in contents) && !bound_mob.devourable)
|
||||
bound_mob.forceMove(src.drop_location())
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -89,11 +89,11 @@
|
||||
|
||||
if(user.gloves && !protected_hands)
|
||||
to_chat(user, span_warning("\The [src] partially cuts into your hand through your gloves as you hit \the [target]!"))
|
||||
user.apply_damage(light_glove_d + will_break ? break_damage : 0, BRUTE, active_hand, 0, 0, src, src.sharp, src.edge) // Ternary to include break damage
|
||||
user.apply_damage(light_glove_d + will_break ? break_damage : 0, BRUTE, active_hand, 0, 0, src.sharp, src.edge, src) // Ternary to include break damage
|
||||
|
||||
else if(!user.gloves)
|
||||
to_chat(user, span_warning("\The [src] cuts into your hand as you hit \the [target]!"))
|
||||
user.apply_damage(no_glove_d + will_break ? break_damage : 0, BRUTE, active_hand, 0, 0, src, src.sharp, src.edge)
|
||||
user.apply_damage(no_glove_d + will_break ? break_damage : 0, BRUTE, active_hand, 0, 0, src.sharp, src.edge, src)
|
||||
|
||||
if(will_break && src.loc == user) // If it's not in our hand anymore
|
||||
user.visible_message(span_danger("[user] hit \the [target] with \the [src], shattering it!"), span_warning("You shatter \the [src] in your hand!"))
|
||||
|
||||
@@ -351,7 +351,7 @@
|
||||
|
||||
L.add_modifier(/datum/modifier/entangled, 3 SECONDS)
|
||||
|
||||
if(!L.apply_damage(force * (issilicon(L) ? 0.25 : 1), BRUTE, target_zone, blocked, soaked, src, sharp, edge))
|
||||
if(!L.apply_damage(force * (issilicon(L) ? 0.25 : 1), BRUTE, target_zone, blocked, soaked, sharp, edge, src))
|
||||
return
|
||||
|
||||
playsound(src, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds
|
||||
|
||||
@@ -70,7 +70,6 @@ var/global/list/micro_tunnels = list()
|
||||
for(var/datum/planet/P in SSplanets.planets)
|
||||
if(myturf.z in P.expected_z_levels)
|
||||
planet = P
|
||||
else
|
||||
for(var/obj/structure/micro_tunnel/t in micro_tunnels)
|
||||
if(t == src)
|
||||
continue
|
||||
@@ -85,7 +84,6 @@ var/global/list/micro_tunnels = list()
|
||||
if(targetturf.z in planet.expected_z_levels)
|
||||
destinations |= t
|
||||
continue
|
||||
else
|
||||
var/above = GetAbove(myturf)
|
||||
if(above && t.z == z + 1)
|
||||
destinations |= t
|
||||
|
||||
@@ -152,7 +152,6 @@
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/closet/crate/secure
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
comp.paused = FALSE
|
||||
identifier = length(comp.identifier) > 0 ? comp.identifier : initial(identifier)
|
||||
material = length(comp.material) > 0 ? comp.material : initial(material)
|
||||
tint = length(comp.tint) > 0 ? comp.tint : initial(tint)
|
||||
tint = length(comp.tint) > 0 ? comp.tint : initial(comp.tint)
|
||||
adjective = length(comp.adjective) > 0 ? comp.adjective : initial(adjective)
|
||||
if (copytext_char(adjective, -1) != "s")
|
||||
adjective += "s"
|
||||
|
||||
@@ -321,7 +321,6 @@
|
||||
if (prob(5))
|
||||
dismantle()
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/girder/cult
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
return
|
||||
if(3.0)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
to_chat(user, span_warning("There is no tank in \the [src]."))
|
||||
return
|
||||
if(is_loosen)
|
||||
to_chat(user, span_warning("Tighten \the nut with a wrench first."))
|
||||
to_chat(user, span_warning("Tighten the nut with a wrench first."))
|
||||
return
|
||||
if(!Adjacent(target))
|
||||
return
|
||||
|
||||
@@ -277,7 +277,6 @@
|
||||
if(3.0)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
// Duplicated from structures.dm, but its a bit different.
|
||||
|
||||
@@ -1833,7 +1833,7 @@
|
||||
desc = "The red flag of the Five Arrows."
|
||||
description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to perceived \
|
||||
failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \
|
||||
since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"."
|
||||
since attracted the membership of Kauq'xum, a remote Skrellian colony. The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"."
|
||||
icon_state = "fivearrows"
|
||||
flagtype = /obj/item/flag/fivearrows
|
||||
|
||||
@@ -1848,7 +1848,7 @@
|
||||
desc = "The red flag of the Five Arrows."
|
||||
description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to perceived \
|
||||
failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \
|
||||
since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"."
|
||||
since attracted the membership of Kauq'xum, a remote Skrellian colony. The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"."
|
||||
flag_path = "fivearrows"
|
||||
|
||||
/obj/item/flag/fivearrows/l
|
||||
|
||||
@@ -581,7 +581,6 @@
|
||||
return 6
|
||||
if("SOUTHWEST", "SW")
|
||||
return 10
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
@@ -606,5 +605,4 @@
|
||||
return "NW"
|
||||
if(10)
|
||||
return "SW"
|
||||
else
|
||||
return
|
||||
|
||||
@@ -52,7 +52,7 @@ var/list/turf_edge_cache = list()
|
||||
user.setClickCooldown(delay)
|
||||
if(do_after(user, delay, src))
|
||||
new/obj/structure/closet/grave/dirthole(src)
|
||||
to_chat(user, span_notice("You dug up \a hole!"))
|
||||
to_chat(user, span_notice("You dug up a hole!"))
|
||||
return
|
||||
else
|
||||
to_chat(user, span_notice("\The [user] begins digging into \the [src] with \the [C]."))
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
|
||||
|
||||
master.buildmode.varholder = tgui_input_text(usr,"Enter variable name:" ,"Name", "name")
|
||||
if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
|
||||
if((master.buildmode.varholder in locked) && !check_rights(R_DEBUG,0))
|
||||
return 1
|
||||
var/thetype = tgui_input_list(usr,"Select variable type:", "Type", list("text","number","mob-reference","obj-reference","turf-reference"))
|
||||
if(!thetype) return 1
|
||||
|
||||
@@ -3,11 +3,12 @@
|
||||
var/header
|
||||
if(DA)
|
||||
if (islist(DA))
|
||||
var/list/data_list = DA
|
||||
var/index = name
|
||||
if (value)
|
||||
name = DA[name] //name is really the index until this line
|
||||
name = data_list[name] //name is really the index until this line
|
||||
else
|
||||
value = DA[name]
|
||||
value = data_list[name]
|
||||
header = "<li style='backgroundColor:white'>(<a href='byond://?_src_=vars;[HrefToken()];[VV_HK_LIST_EDIT]=1;target=\ref[DA];index=[index]'>E</a>) (<a href='byond://?_src_=vars;[HrefToken()];[VV_HK_LIST_CHANGE]=1;target=\ref[DA];index=[index]'>C</a>) (<a href='byond://?_src_=vars;[HrefToken()];[VV_HK_LIST_REMOVE]=1;target=\ref[DA];index=[index]'>-</a>) "
|
||||
else
|
||||
header = "<li style='backgroundColor:white'>(<a href='byond://?_src_=vars;[HrefToken()];datumedit=\ref[DA];varnameedit=[name]'>E</a>) (<a href='byond://?_src_=vars;[HrefToken()];datumchange=\ref[DA];varnamechange=[name]'>C</a>) (<a href='byond://?_src_=vars;[HrefToken()];datummass=\ref[DA];varnamemass=[name]'>M</a>) "
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#define AI_SMART 3 // Will do more processing to be a little smarter, like not walking while confused if it could risk stepping randomly onto a bad tile.
|
||||
|
||||
//#define ai_log(M,V) if(debug_ai) ai_log_output(M,V)
|
||||
#define ai_log(M,V)
|
||||
#define ai_log(M,V) // If you restore this, also remove the extra pass() calls in ai_holder_movement
|
||||
|
||||
// Logging level defines.
|
||||
#define AI_LOG_OFF 0 // Don't show anything.
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
give_destination(home_turf, max_home_distance)
|
||||
else
|
||||
ai_log("go_home() : Told to go home without home_turf.", AI_LOG_ERROR)
|
||||
pass() // Remove this ever ai_log does something
|
||||
|
||||
/datum/ai_holder/proc/give_destination(turf/new_destination, min_distance = 1, combat = FALSE)
|
||||
ai_log("give_destination() : Entering.", AI_LOG_DEBUG)
|
||||
@@ -75,6 +76,7 @@
|
||||
return TRUE
|
||||
else
|
||||
ai_log("give_destination() : Given null destination.", AI_LOG_ERROR)
|
||||
pass() // Remove this ever ai_log does something
|
||||
|
||||
ai_log("give_destination() : Exiting.", AI_LOG_DEBUG)
|
||||
|
||||
|
||||
@@ -62,6 +62,25 @@
|
||||
transform.crop(x1, y1, x2, y2)
|
||||
return src
|
||||
|
||||
/// Internally performs a crop.
|
||||
/datum/universal_icon/proc/shift(dir, amount, icon_width, icon_height)
|
||||
if(!transform)
|
||||
transform = new
|
||||
var/list/offsets = dir2offset(dir)
|
||||
var/shift_x = -offsets[1] * amount
|
||||
var/shift_y = -offsets[2] * amount
|
||||
transform.crop(1 + shift_x, 1 + shift_y, icon_width + shift_x, icon_height + shift_y)
|
||||
return src
|
||||
|
||||
/// Internally performs a color blend.
|
||||
/// Amount ranges from 0-1 (100% opacity)
|
||||
/datum/universal_icon/proc/change_opacity(amount)
|
||||
if(!transform)
|
||||
transform = new
|
||||
transform.blend_color("#ffffff[num2hex(clamp(amount, 0, 1) * 255, 2)]", ICON_MULTIPLY)
|
||||
return src
|
||||
|
||||
|
||||
/datum/universal_icon/proc/to_list()
|
||||
RETURN_TYPE(/list)
|
||||
return list("icon_file" = "[icon_file]", "icon_state" = icon_state, "dir" = dir, "frame" = frame, "transform" = !isnull(transform) ? transform.to_list() : list())
|
||||
@@ -93,17 +112,17 @@
|
||||
for(var/transform in src.transforms)
|
||||
switch(transform["type"])
|
||||
if(RUSTG_ICONFORGE_BLEND_COLOR)
|
||||
target.Blend(target["color"], target["blend_mode"])
|
||||
target.Blend(transform["color"], transform["blend_mode"])
|
||||
if(RUSTG_ICONFORGE_BLEND_ICON)
|
||||
var/datum/universal_icon/icon_object = target["icon"]
|
||||
var/datum/universal_icon/icon_object = transform["icon"]
|
||||
if(!istype(icon_object))
|
||||
stack_trace("Invalid icon found in icon transformer during apply()! [icon_object]")
|
||||
continue
|
||||
target.Blend(icon_object.to_icon(), target["blend_mode"])
|
||||
target.Blend(icon_object.to_icon(), transform["blend_mode"])
|
||||
if(RUSTG_ICONFORGE_SCALE)
|
||||
target.Scale(target["width"], target["height"])
|
||||
target.Scale(transform["width"], transform["height"])
|
||||
if(RUSTG_ICONFORGE_CROP)
|
||||
target.Crop(target["x1"], target["y1"], target["x2"], target["y2"])
|
||||
target.Crop(transform["x1"], transform["y1"], transform["x2"], transform["y2"])
|
||||
return target
|
||||
|
||||
/datum/icon_transformer/proc/copy()
|
||||
@@ -115,36 +134,60 @@
|
||||
return new_transformer
|
||||
|
||||
/datum/icon_transformer/proc/blend_color(color, blend_mode)
|
||||
#ifdef UNIT_TEST
|
||||
if(!istext(color))
|
||||
CRASH("Invalid color provided to blend_color: [color]")
|
||||
if(!isnum(blend_mode))
|
||||
CRASH("Invalid blend_mode provided to blend_color: [blend_mode]")
|
||||
#endif
|
||||
transforms += list(list("type" = RUSTG_ICONFORGE_BLEND_COLOR, "color" = color, "blend_mode" = blend_mode))
|
||||
|
||||
/datum/icon_transformer/proc/blend_icon(datum/universal_icon/icon_object, blend_mode)
|
||||
#ifdef UNIT_TEST
|
||||
// icon_object's type is checked later in to_list
|
||||
if(!isnum(blend_mode))
|
||||
CRASH("Invalid blend_mode provided to blend_icon: [blend_mode]")
|
||||
#endif
|
||||
transforms += list(list("type" = RUSTG_ICONFORGE_BLEND_ICON, "icon" = icon_object, "blend_mode" = blend_mode))
|
||||
|
||||
/datum/icon_transformer/proc/scale(width, height)
|
||||
#ifdef UNIT_TEST
|
||||
if(!isnum(width) || !isnum(height))
|
||||
CRASH("Invalid arguments provided to scale: [width],[height]")
|
||||
#endif
|
||||
transforms += list(list("type" = RUSTG_ICONFORGE_SCALE, "width" = width, "height" = height))
|
||||
|
||||
/datum/icon_transformer/proc/crop(x1, y1, x2, y2)
|
||||
#ifdef UNIT_TEST
|
||||
if(!isnum(x1) || !isnum(y1) || !isnum(x2) || !isnum(y2))
|
||||
CRASH("Invalid arguments provided to crop: [x1],[y1],[x2],[y2]")
|
||||
#endif
|
||||
transforms += list(list("type" = RUSTG_ICONFORGE_CROP, "x1" = x1, "y1" = y1, "x2" = x2, "y2" = y2))
|
||||
|
||||
/// Recursively converts all contained [/datum/universal_icon]s and their associated [/datum/icon_transformer]s into list form so the transforms can be JSON encoded.
|
||||
/datum/icon_transformer/proc/to_list()
|
||||
RETURN_TYPE(/list)
|
||||
var/list/transforms_out = list()
|
||||
for(var/transform in src.transforms.Copy())
|
||||
var/this_transform = transform
|
||||
var/list/transforms_original = src.transforms.Copy()
|
||||
for(var/list/transform as anything in transforms_original)
|
||||
var/list/this_transform = transform.Copy() // copy it so we don't mutate the original
|
||||
if(transform["type"] == RUSTG_ICONFORGE_BLEND_ICON)
|
||||
var/datum/universal_icon/icon_object = this_transform["icon"]
|
||||
if(!istype(icon_object))
|
||||
stack_trace("Invalid icon found in icon transformer during to_list()! [icon_object]")
|
||||
continue
|
||||
// This mutates the inner transform list!!! Make sure it only runs on copies.
|
||||
this_transform["icon"] = icon_object.to_list()
|
||||
transforms_out += list(this_transform)
|
||||
return transforms_out
|
||||
|
||||
/// Reverse operation of /datum/icon_transformer/to_list()
|
||||
/proc/icon_transformer_from_list(list/input)
|
||||
RETURN_TYPE(/datum/icon_transformer)
|
||||
var/list/transforms = list()
|
||||
for(var/transform in input)
|
||||
var/this_transform = transform
|
||||
for(var/list/transform as anything in input)
|
||||
// don't mutate the input :(
|
||||
var/this_transform = transform.Copy()
|
||||
if(transform["type"] == RUSTG_ICONFORGE_BLEND_ICON)
|
||||
this_transform["icon"] = universal_icon_from_list(transform["icon"])
|
||||
transforms += list(this_transform)
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
if(href_list["flavor_text"])
|
||||
switch(href_list["flavor_text"])
|
||||
if("open")
|
||||
pass()
|
||||
if("general")
|
||||
var/msg = strip_html_simple(tgui_input_text(user,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit: separating out OOC notes
|
||||
if(CanUseTopic(user) && msg)
|
||||
@@ -74,6 +75,7 @@
|
||||
else if(href_list["flavour_text_robot"])
|
||||
switch(href_list["flavour_text_robot"])
|
||||
if("open")
|
||||
pass()
|
||||
if("Default")
|
||||
var/msg = strip_html_simple(tgui_input_text(user,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(CanUseTopic(user) && msg)
|
||||
|
||||
@@ -538,7 +538,6 @@ var/global/list/valid_bloodreagents = list("default",REAGENT_ID_IRON,REAGENT_ID_
|
||||
else
|
||||
picklist = everyone_traits_negative.Copy() - pref.neg_traits
|
||||
mylist = pref.neg_traits
|
||||
else
|
||||
|
||||
if(isnull(picklist))
|
||||
return TOPIC_REFRESH
|
||||
@@ -605,11 +604,11 @@ var/global/list/valid_bloodreagents = list("default",REAGENT_ID_IRON,REAGENT_ID_
|
||||
tgui_alert_async(user, "The trait you've selected cannot be taken by the species you've chosen!", "Error")
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(trait_choice in pref.pos_traits + pref.neu_traits + pref.neg_traits)
|
||||
if(trait_choice in (pref.pos_traits + pref.neu_traits + pref.neg_traits))
|
||||
conflict = instance.name
|
||||
|
||||
varconflict:
|
||||
for(var/P in pref.pos_traits + pref.neu_traits + pref.neg_traits)
|
||||
for(var/P in (pref.pos_traits + pref.neu_traits + pref.neg_traits))
|
||||
var/datum/trait/instance_test = all_traits[P]
|
||||
if(path in instance_test.excludes)
|
||||
conflict = instance_test.name
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
var/found = FALSE
|
||||
for(var/access in valid_access)
|
||||
if(access in id_card.GetAccess() || emagged)
|
||||
if((access in id_card.GetAccess()) || emagged)
|
||||
to_chat(user, "You imprint your ID details onto the badge.")
|
||||
set_name(user.real_name)
|
||||
found = TRUE
|
||||
|
||||
@@ -178,7 +178,6 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
malfunction()
|
||||
return
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/vending/emag_act(var/remaining_charges, var/mob/user)
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
if(victim.vore_taste)
|
||||
to_chat(user, span_infoplain(span_bold("[victim]") + " tastes like... [victim.vore_taste]!"))
|
||||
|
||||
victim.apply_damage(5, used_weapon = "straw")
|
||||
victim.apply_damage(5, used_weapon=src)
|
||||
|
||||
// If you're human you get the reagent
|
||||
if(ishuman(user))
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
|
||||
switch(reagent_mix)
|
||||
if (RECIPE_REAGENT_REPLACE)
|
||||
//We do no transferring
|
||||
pass() //We do no transferring
|
||||
if (RECIPE_REAGENT_SUM)
|
||||
//Sum is easy, just shove the entire buffer into the result
|
||||
buffer.trans_to_holder(holder, buffer.total_volume)
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
|
||||
if(affecting)
|
||||
to_chat(target, span_danger("\The [fruit]'s thorns pierce your [affecting.name] greedily!"))
|
||||
target.apply_damage(damage, BRUTE, target_limb, blocked, soaked, TRUE, has_edge, "Thorns")
|
||||
target.apply_damage(damage, BRUTE, target_limb, blocked, soaked, TRUE, has_edge)
|
||||
else
|
||||
to_chat(target, span_danger("\The [fruit]'s thorns pierce your flesh greedily!"))
|
||||
target.adjustBruteLoss(damage)
|
||||
@@ -149,7 +149,7 @@
|
||||
has_edge = prob(get_trait(TRAIT_POTENCY)/5)
|
||||
if(affecting)
|
||||
to_chat(target, span_danger("\The [fruit]'s thorns dig deeply into your [affecting.name]!"))
|
||||
target.apply_damage(damage, BRUTE, target_limb, blocked, soaked, TRUE, has_edge, "Thorns")
|
||||
target.apply_damage(damage, BRUTE, target_limb, blocked, soaked, TRUE, has_edge)
|
||||
else
|
||||
to_chat(target, span_danger("\The [fruit]'s thorns dig deeply into your flesh!"))
|
||||
target.adjustBruteLoss(damage)
|
||||
|
||||
@@ -307,7 +307,6 @@
|
||||
if (prob(5))
|
||||
die_off()
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/effect/plant/proc/check_health()
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
write_data_to_pin(new_data)
|
||||
|
||||
/datum/integrated_io/dir/write_data_to_pin(var/new_data)
|
||||
if(isnull(new_data) || (new_data in alldirs + list(UP, DOWN)))
|
||||
if(isnull(new_data) || (new_data in (alldirs + list(UP, DOWN))))
|
||||
data = new_data
|
||||
holder.on_data_written()
|
||||
|
||||
|
||||
@@ -87,7 +87,6 @@
|
||||
b.loc = (get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/bookcase/update_icon()
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
|
||||
if(burn_user)
|
||||
H.visible_message(span_danger("\The [src] flashes as it scorches [H]'s hands!"))
|
||||
H.apply_damage(amount / 2 + 5, BURN, "r_hand", used_weapon="Supermatter Chunk")
|
||||
H.apply_damage(amount / 2 + 5, BURN, "l_hand", used_weapon="Supermatter Chunk")
|
||||
H.apply_damage(amount / 2 + 5, BURN, "r_hand", used_weapon=src)
|
||||
H.apply_damage(amount / 2 + 5, BURN, "l_hand", used_weapon=src)
|
||||
H.drop_from_inventory(src, get_turf(H))
|
||||
return
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
burn_user = FALSE
|
||||
|
||||
if(burn_user)
|
||||
M.apply_damage(amount, BURN, null, used_weapon="Supermatter Chunk")
|
||||
M.apply_damage(amount, BURN, null, used_weapon=src)
|
||||
|
||||
/obj/item/stack/material/supermatter/ex_act(severity) // An incredibly hard to manufacture material, SM chunks are unstable by their 'stabilized' nature.
|
||||
if(prob((4 / severity) * 20))
|
||||
|
||||
@@ -157,10 +157,10 @@
|
||||
if (shock_damage<1)
|
||||
return 0
|
||||
|
||||
src.apply_damage(0.2 * shock_damage, BURN, def_zone, used_weapon="Electrocution") //shock the target organ
|
||||
src.apply_damage(0.4 * shock_damage, BURN, BP_TORSO, used_weapon="Electrocution") //shock the torso more
|
||||
src.apply_damage(0.2 * shock_damage, BURN, null, used_weapon="Electrocution") //shock a random part!
|
||||
src.apply_damage(0.2 * shock_damage, BURN, null, used_weapon="Electrocution") //shock a random part!
|
||||
src.apply_damage(0.2 * shock_damage, BURN, def_zone) //shock the target organ
|
||||
src.apply_damage(0.4 * shock_damage, BURN, BP_TORSO) //shock the torso more
|
||||
src.apply_damage(0.2 * shock_damage, BURN, null) //shock a random part!
|
||||
src.apply_damage(0.2 * shock_damage, BURN, null) //shock a random part!
|
||||
|
||||
playsound(src, "sparks", 50, 1, -1)
|
||||
if (shock_damage > 15)
|
||||
|
||||
@@ -1802,7 +1802,7 @@
|
||||
var/obj/item/organ/external/e = organs_by_name[name]
|
||||
if(!e)
|
||||
continue
|
||||
if((e.status & ORGAN_BROKEN && (!e.splinted || (e.splinted in e.contents && prob(30))) || e.status & ORGAN_BLEEDING) && (getBruteLoss() + getFireLoss() >= 100))
|
||||
if((e.status & ORGAN_BROKEN && (!e.splinted || ((e.splinted in e.contents) && prob(30))) || e.status & ORGAN_BLEEDING) && (getBruteLoss() + getFireLoss() >= 100))
|
||||
return 1
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -798,13 +798,13 @@
|
||||
if(breath.temperature >= species.heat_discomfort_level)
|
||||
|
||||
if(breath.temperature >= species.breath_heat_level_3)
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Heat")
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD)
|
||||
throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_MAX)
|
||||
else if(breath.temperature >= species.breath_heat_level_2)
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Heat")
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD)
|
||||
throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_MODERATE)
|
||||
else if(breath.temperature >= species.breath_heat_level_1)
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Heat")
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD)
|
||||
throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_LOW)
|
||||
else if(species.get_environment_discomfort(src, ENVIRONMENT_COMFORT_MARKER_HOT))
|
||||
throw_alert("temp", /obj/screen/alert/warm, HOT_ALERT_SEVERITY_LOW)
|
||||
@@ -814,13 +814,13 @@
|
||||
else if(breath.temperature <= species.cold_discomfort_level)
|
||||
|
||||
if(breath.temperature <= species.breath_cold_level_3)
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Cold")
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD)
|
||||
throw_alert("temp", /obj/screen/alert/cold, COLD_ALERT_SEVERITY_MAX)
|
||||
else if(breath.temperature <= species.breath_cold_level_2)
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Cold")
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD)
|
||||
throw_alert("temp", /obj/screen/alert/cold, COLD_ALERT_SEVERITY_MODERATE)
|
||||
else if(breath.temperature <= species.breath_cold_level_1)
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Cold")
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD)
|
||||
throw_alert("temp", /obj/screen/alert/cold, COLD_ALERT_SEVERITY_LOW)
|
||||
else if(species.get_environment_discomfort(src, ENVIRONMENT_COMFORT_MARKER_COLD))
|
||||
throw_alert("temp", /obj/screen/alert/chilly, COLD_ALERT_SEVERITY_LOW)
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
message_data[2] = pick(M.say_verbs)
|
||||
. = 1
|
||||
|
||||
else if(CE_SPEEDBOOST in chem_effects || is_jittery) // motor mouth
|
||||
else if((CE_SPEEDBOOST in chem_effects) || is_jittery) // motor mouth
|
||||
// Despite trying to url/html decode these, byond is just being bad and I dunno.
|
||||
var/static/regex/speedboost_initial = new (@"&[a-z]{2,5};|&#\d{2};","g")
|
||||
// Not herestring because bad vs code syntax highlight panics at apostrophe
|
||||
|
||||
@@ -268,19 +268,19 @@
|
||||
var/bodypart = pick(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
|
||||
if(breath.temperature >= breath_heat_level_1)
|
||||
if(breath.temperature < breath_heat_level_2)
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, bodypart, used_weapon = "Excessive Heat")
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, bodypart)
|
||||
else if(breath.temperature < breath_heat_level_3)
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, bodypart, used_weapon = "Excessive Heat")
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, bodypart)
|
||||
else
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, bodypart, used_weapon = "Excessive Heat")
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, bodypart)
|
||||
|
||||
else if(breath.temperature <= breath_cold_level_1)
|
||||
if(breath.temperature > breath_cold_level_2)
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, bodypart, used_weapon = "Excessive Cold")
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, bodypart)
|
||||
else if(breath.temperature > breath_cold_level_3)
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, bodypart, used_weapon = "Excessive Cold")
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, bodypart)
|
||||
else
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, bodypart, used_weapon = "Excessive Cold")
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, bodypart)
|
||||
|
||||
|
||||
//breathing in hot/cold air also heats/cools you a bit
|
||||
|
||||
@@ -507,7 +507,7 @@
|
||||
|
||||
for(var/K in damageable)
|
||||
if(!(K in covered))
|
||||
H.apply_damage(light_amount/4, BURN, K, 0, 0, "Abnormal growths")
|
||||
H.apply_damage(light_amount/4, BURN, K, 0, 0)
|
||||
|
||||
/datum/species/diona
|
||||
name = SPECIES_DIONA
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
Returns
|
||||
standard 0 if fail
|
||||
*/
|
||||
/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/soaked = 0, var/used_weapon = null, var/sharp = FALSE, var/edge = FALSE, var/obj/used_weapon = null, var/projectile = 0)
|
||||
/mob/living/proc/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/soaked = 0, var/sharp = FALSE, var/edge = FALSE, var/obj/used_weapon = null, var/projectile = 0)
|
||||
if(Debug2)
|
||||
to_world_log("## DEBUG: apply_damage() was called on [src], with [damage] damage, and an armor value of [blocked].")
|
||||
if(!damage || (blocked >= 100))
|
||||
@@ -77,8 +77,8 @@
|
||||
damage = 0
|
||||
adjustFireLoss(damage * blocked)
|
||||
if(SEARING)
|
||||
apply_damage(round(damage / 3), BURN, def_zone, initial_blocked, soaked, used_weapon, sharp, edge)
|
||||
apply_damage(round(damage / 3 * 2), BRUTE, def_zone, initial_blocked, soaked, used_weapon, sharp, edge)
|
||||
apply_damage(round(damage / 3), BURN, def_zone, initial_blocked, soaked, sharp, edge, used_weapon)
|
||||
apply_damage(round(damage / 3 * 2), BRUTE, def_zone, initial_blocked, soaked, sharp, edge, used_weapon)
|
||||
if(TOX)
|
||||
adjustToxLoss(damage * blocked)
|
||||
if(OXY)
|
||||
@@ -91,7 +91,7 @@
|
||||
electrocute_act(damage, used_weapon, 1.0, def_zone)
|
||||
if(BIOACID)
|
||||
if(isSynthetic())
|
||||
apply_damage(damage, BURN, def_zone, initial_blocked, soaked, used_weapon, sharp, edge) // Handle it as normal burn.
|
||||
apply_damage(damage, BURN, def_zone, initial_blocked, soaked, sharp, edge, used_weapon) // Handle it as normal burn.
|
||||
else
|
||||
adjustToxLoss(damage * blocked)
|
||||
if(ELECTROMAG)
|
||||
|
||||
@@ -122,12 +122,12 @@
|
||||
if(P.taser_effect)
|
||||
stun_effect_act(0, P.agony, def_zone, P)
|
||||
if(!P.nodamage)
|
||||
apply_damage(P.damage, P.damage_type, def_zone, absorb, soaked, 0, P, sharp=proj_sharp, edge=proj_edge, projectile=TRUE)
|
||||
apply_damage(P.damage, P.damage_type, def_zone, absorb, soaked, 0, sharp=proj_sharp, edge=proj_edge, used_weapon=P, projectile=TRUE)
|
||||
qdel(P)
|
||||
return
|
||||
|
||||
if(!P.nodamage)
|
||||
apply_damage(P.damage, P.damage_type, def_zone, absorb, soaked, 0, P, sharp=proj_sharp, edge=proj_edge, projectile=TRUE)
|
||||
apply_damage(P.damage, P.damage_type, def_zone, absorb, soaked, 0, sharp=proj_sharp, edge=proj_edge, used_weapon=P, projectile=TRUE)
|
||||
P.on_hit(src, absorb, soaked, def_zone)
|
||||
|
||||
if(absorb == 100)
|
||||
|
||||
@@ -232,8 +232,7 @@
|
||||
/mob/living/silicon/pai/verb/pick_eye_color()
|
||||
set category = "Abilities.pAI Commands"
|
||||
set name = "Pick Eye Color"
|
||||
if(chassis in allows_eye_color)
|
||||
else
|
||||
if(!(chassis in allows_eye_color))
|
||||
to_chat(src, span_warning("Your selected chassis eye color can not be modified. The color you pick will only apply to supporting chassis and your card screen."))
|
||||
|
||||
var/new_eye_color = tgui_color_picker(src, "Choose your character's eye color:", "Eye Color")
|
||||
@@ -271,7 +270,6 @@
|
||||
eye_layer = image('icons/mob/pai_vr64x32.dmi', "type13-eyes")
|
||||
else if(holo_icon_dimension_X == 64 && holo_icon_dimension_Y == 64)
|
||||
eye_layer = image('icons/mob/pai_vr64x64.dmi', "type13-eyes")
|
||||
else
|
||||
else if(chassis in allows_eye_color)
|
||||
eye_layer = image(icon, "[icon_state]-eyes")
|
||||
else return
|
||||
|
||||
@@ -462,7 +462,7 @@
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/inject_chem(mob/user, chem)
|
||||
if(patient && patient.reagents)
|
||||
if(chem in injection_chems + REAGENT_ID_INAPROVALINE)
|
||||
if(chem in (injection_chems + REAGENT_ID_INAPROVALINE))
|
||||
if(hound.cell.charge < 800) //This is so borgs don't kill themselves with it.
|
||||
to_chat(hound, span_notice("You don't have enough power to synthesize fluids."))
|
||||
return
|
||||
|
||||
@@ -547,7 +547,7 @@
|
||||
if(wood)
|
||||
wood.add_charge(4000)
|
||||
else if(istype(W,/obj/item/pipe))
|
||||
// This allows drones and engiborgs to clear pipe assemblies from floors.
|
||||
pass() // This allows drones and engiborgs to clear pipe assemblies from floors.
|
||||
else
|
||||
continue
|
||||
|
||||
|
||||
@@ -56,11 +56,11 @@
|
||||
L.visible_message(span_warning("\The [L] uselessly hits \the [src]!"))
|
||||
L.do_attack_animation(src)
|
||||
return
|
||||
apply_damage(damage = real_damage, damagetype = hit_dam_type, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
|
||||
apply_damage(damage = real_damage, damagetype = hit_dam_type, def_zone = null, blocked = armor, blocked = resistance, sharp = FALSE, edge = FALSE, used_weapon = null)
|
||||
L.visible_message(span_warning("\The [L] [pick(attack.attack_verb)] \the [src]!"))
|
||||
L.do_attack_animation(src)
|
||||
return //VOREStation EDIT END
|
||||
apply_damage(damage = harm_intent_damage, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) //VOREStation EDIT Somebody set this to burn instead of brute.
|
||||
apply_damage(damage = harm_intent_damage, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, sharp = FALSE, edge = FALSE, used_weapon = null) //VOREStation EDIT Somebody set this to burn instead of brute.
|
||||
L.visible_message(span_warning("\The [L] [response_harm] \the [src]!"))
|
||||
L.do_attack_animation(src)
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
if (3.0)
|
||||
bombdam = 30
|
||||
|
||||
apply_damage(damage = bombdam, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
|
||||
apply_damage(damage = bombdam, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, sharp = FALSE, edge = FALSE, used_weapon = null)
|
||||
|
||||
if(bombdam > maxHealth)
|
||||
gib()
|
||||
@@ -194,7 +194,7 @@
|
||||
if(shock_damage < 1)
|
||||
return 0
|
||||
|
||||
apply_damage(damage = shock_damage, damagetype = BURN, def_zone = null, blocked = null, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
|
||||
apply_damage(damage = shock_damage, damagetype = BURN, def_zone = null, blocked = null, blocked = resistance, sharp = FALSE, edge = FALSE, used_weapon = null)
|
||||
playsound(src, "sparks", 50, 1, -1)
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
@@ -223,11 +223,11 @@
|
||||
|
||||
if(stun_amount)
|
||||
stunDam += stun_amount * 0.5
|
||||
apply_damage(damage = stunDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE)
|
||||
apply_damage(damage = stunDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, sharp = FALSE, edge = FALSE, used_weapon = used_weapon)
|
||||
|
||||
if(agony_amount)
|
||||
agonyDam += agony_amount * 0.5
|
||||
apply_damage(damage = agonyDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE)
|
||||
apply_damage(damage = agonyDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, sharp = FALSE, edge = FALSE, used_weapon = used_weapon)
|
||||
|
||||
|
||||
// Electromagnetism
|
||||
|
||||
@@ -814,7 +814,9 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
ai_holder.set_busy(FALSE)
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/perform_the_nom(user, mob/living/prey, user, belly, delay)
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/perform_the_nom(mob/living/user, mob/living/prey, mob/living/pred, obj/belly/belly, delay)
|
||||
if(!pred)
|
||||
pred = user
|
||||
if(client)
|
||||
return ..()
|
||||
var/current_affinity = affinity[prey.real_name]
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
to_chat(H, span_alien("You are disoriented by \the [src]!"))
|
||||
H.eye_blurry = max(H.eye_blurry, flash_strength + 5)
|
||||
H.flash_eyes()
|
||||
H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0, "Photon burns")
|
||||
H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0)
|
||||
|
||||
else if(issilicon(L))
|
||||
if(isrobot(L))
|
||||
@@ -271,7 +271,7 @@
|
||||
var/mob/living/L = A
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
H.apply_damage(damage_to_apply, BRUTE, BP_TORSO, 0, 0, "Animal claws")
|
||||
H.apply_damage(damage_to_apply, BRUTE, BP_TORSO, 0, 0)
|
||||
|
||||
else
|
||||
L.adjustBruteLoss(damage_to_apply)
|
||||
|
||||
@@ -160,6 +160,7 @@
|
||||
if(prob(1))
|
||||
winterize()
|
||||
if("summer")
|
||||
pass()
|
||||
if("autumn")
|
||||
vore_bump_chance = 20
|
||||
if(prob(50))
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
var/armor = target.run_armor_check(BP_HEAD, "melee")
|
||||
var/soaked = target.get_armor_soak(BP_HEAD, "melee")
|
||||
target.apply_damage(damage, BRUTE, BP_HEAD, armor, soaked)
|
||||
attacker.apply_damage(10, BRUTE, BP_HEAD, attacker.run_armor_check(BP_HEAD), attacker.get_armor_soak(BP_HEAD), "melee")
|
||||
attacker.apply_damage(10, BRUTE, BP_HEAD, attacker.run_armor_check(BP_HEAD), attacker.get_armor_soak(BP_HEAD))
|
||||
|
||||
if(!armor && target.headcheck(BP_HEAD) && prob(damage))
|
||||
target.apply_effect(20, PARALYZE)
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
if(job_civilian_low & ASSISTANT)
|
||||
previewJob = job_master.GetJob(JOB_ALT_VISITOR)
|
||||
else if(client && ispAI(client.mob)) //VOREStation Edit! - pAIs shouldn't wear job gear~!
|
||||
//Don't do anything!
|
||||
pass() //Don't do anything!
|
||||
else
|
||||
for(var/datum/job/job in job_master.occupations)
|
||||
var/job_flag
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
qdel(W)
|
||||
else if(B.pages.len == 1) //if only one item left, extract item and delete the one-item bundle
|
||||
user.drop_from_inventory(B)
|
||||
user.put_in_hands(B[1])
|
||||
user.put_in_hands(B.pages[1])
|
||||
qdel(B)
|
||||
else //if at least two items remain, just update the bundle icon
|
||||
B.update_icon()
|
||||
@@ -89,4 +89,4 @@
|
||||
if(holder2 && (holder2.nano_printer == src))
|
||||
holder2.nano_printer = null
|
||||
holder2 = null
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
@@ -145,7 +145,7 @@ GLOBAL_DATUM_INIT(overmap_event_handler, /decl/overmap_event_handler, new)
|
||||
|
||||
/decl/overmap_event_handler/proc/is_event_in_turf(var/datum/event/E, var/turf/T)
|
||||
for(var/obj/effect/overmap/event/hazard in hazard_by_turf[T])
|
||||
if(E in hazard.events && E.severity == hazard.difficulty)
|
||||
if((E in hazard.events) && E.severity == hazard.difficulty)
|
||||
return TRUE
|
||||
|
||||
/decl/overmap_event_handler/proc/is_event_included(var/list/hazards, var/obj/effect/overmap/event/E, var/equal_or_better)//this proc is only used so it can break out of 2 loops cleanly
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
to_chat(usr, span_notice("You remove the [W.name] from the bundle."))
|
||||
|
||||
if(pages.len <= 1)
|
||||
var/obj/item/paper/P = src[1]
|
||||
var/obj/item/paper/P = pages[1]
|
||||
usr.drop_from_inventory(src)
|
||||
usr.put_in_hands(P)
|
||||
qdel(src)
|
||||
|
||||
@@ -428,7 +428,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
|
||||
if(amount_soaked >= damage)
|
||||
continue // No need to apply damage.
|
||||
|
||||
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail")
|
||||
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked)
|
||||
if(show_message)
|
||||
to_chat(H, effect_message)
|
||||
|
||||
|
||||
@@ -418,7 +418,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null
|
||||
if(amount_soaked >= damage)
|
||||
continue // No need to apply damage.
|
||||
|
||||
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail")
|
||||
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked)
|
||||
if(show_message)
|
||||
to_chat(H, effect_message)
|
||||
|
||||
|
||||
@@ -402,7 +402,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
|
||||
if(amount_soaked >= damage)
|
||||
continue // No need to apply damage.
|
||||
|
||||
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail")
|
||||
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked)
|
||||
if(show_message)
|
||||
to_chat(H, effect_message)
|
||||
|
||||
|
||||
@@ -152,7 +152,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
|
||||
if (prob(25))
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/particle_accelerator/update_icon()
|
||||
@@ -324,7 +323,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
|
||||
if (prob(25))
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/particle_accelerator/proc/update_state()
|
||||
|
||||
@@ -725,7 +725,7 @@
|
||||
in_chamber.on_hit(M)
|
||||
if(in_chamber.damage_type != HALLOSS && !in_chamber.nodamage)
|
||||
log_and_message_admins("commited suicide using \a [src]", user)
|
||||
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp = TRUE)
|
||||
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", sharp = TRUE, used_weapon = src)
|
||||
user.death()
|
||||
else if(in_chamber.damage_type == HALLOSS)
|
||||
to_chat(user, span_notice("Ow..."))
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
else if(firer)
|
||||
var/obj/T
|
||||
|
||||
if(original in target.contents && istype(original, /obj))
|
||||
if((original in target.contents) && istype(original, /obj))
|
||||
T = original
|
||||
|
||||
var/list/possible_targets = list()
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
if(C.my_hose)
|
||||
return FALSE
|
||||
|
||||
if(C.flow_direction in list(HOSE_INPUT, HOSE_OUTPUT) - flow_direction)
|
||||
if(C.flow_direction in (list(HOSE_INPUT, HOSE_OUTPUT) - flow_direction))
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
@@ -76,7 +76,6 @@
|
||||
new /obj/effect/effect/water(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/blob_act()
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
if(M.species.organic_food_coeff) //it's still food!
|
||||
switch(alien)
|
||||
if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein.
|
||||
pass()
|
||||
if(IS_SKRELL)
|
||||
M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein.
|
||||
if(IS_TESHARI)
|
||||
@@ -453,6 +454,7 @@
|
||||
if(M.species.organic_food_coeff) //it's still food!
|
||||
switch(alien)
|
||||
if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein.
|
||||
pass()
|
||||
if(IS_SKRELL)
|
||||
M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein.
|
||||
if(IS_TESHARI)
|
||||
|
||||
@@ -87,12 +87,12 @@
|
||||
switch(damage_type)
|
||||
if("BRUTE")
|
||||
H.visible_message(span_danger("\The [src] creaks as it ravages [H]'s hands!"))
|
||||
H.apply_damage(rand(min_damage,max_damage), BRUTE, "r_hand", used_weapon="Anomalous Material")
|
||||
H.apply_damage(rand(min_damage,max_damage), BRUTE, "l_hand", used_weapon="Anomalous Material")
|
||||
H.apply_damage(rand(min_damage,max_damage), BRUTE, "r_hand", used_weapon=src)
|
||||
H.apply_damage(rand(min_damage,max_damage), BRUTE, "l_hand", used_weapon=src)
|
||||
if("BURN")
|
||||
H.visible_message(span_danger("\The [src] flashes as it scorches [H]'s hands!"))
|
||||
H.apply_damage(rand(min_damage,max_damage), BURN, "r_hand", used_weapon="Anomalous Material")
|
||||
H.apply_damage(rand(min_damage,max_damage), BURN, "l_hand", used_weapon="Anomalous Material")
|
||||
H.apply_damage(rand(min_damage,max_damage), BURN, "r_hand", used_weapon=src)
|
||||
H.apply_damage(rand(min_damage,max_damage), BURN, "l_hand", used_weapon=src)
|
||||
if("TOX")
|
||||
H.visible_message(span_danger("\The [src] seethes and hisses like burning acid!"))
|
||||
if(!H.isSynthetic())
|
||||
@@ -119,7 +119,7 @@
|
||||
burn_user = FALSE
|
||||
|
||||
if(burn_user)
|
||||
M.apply_damage(rand(min_damage,max_damage), BURN, null, used_weapon="Anomalous Material")
|
||||
M.apply_damage(rand(min_damage,max_damage), BURN, null, used_weapon=src)
|
||||
|
||||
/obj/item/research_sample/attack_self(mob/user)
|
||||
var/mob/living/M = user
|
||||
@@ -144,12 +144,12 @@
|
||||
switch(damage_type)
|
||||
if("BRUTE")
|
||||
H.visible_message(span_danger("\The [src] creaks as it ravages [H]'s hands!"))
|
||||
H.apply_damage(rand(min_damage,max_damage), BRUTE, "r_hand", used_weapon="Anomalous Material")
|
||||
H.apply_damage(rand(min_damage,max_damage), BRUTE, "l_hand", used_weapon="Anomalous Material")
|
||||
H.apply_damage(rand(min_damage,max_damage), BRUTE, "r_hand", used_weapon=src)
|
||||
H.apply_damage(rand(min_damage,max_damage), BRUTE, "l_hand", used_weapon=src)
|
||||
if("BURN")
|
||||
H.visible_message(span_danger("\The [src] flashes as it scorches [H]'s hands!"))
|
||||
H.apply_damage(rand(min_damage,max_damage), BURN, "r_hand", used_weapon="Anomalous Material")
|
||||
H.apply_damage(rand(min_damage,max_damage), BURN, "l_hand", used_weapon="Anomalous Material")
|
||||
H.apply_damage(rand(min_damage,max_damage), BURN, "r_hand", used_weapon=src)
|
||||
H.apply_damage(rand(min_damage,max_damage), BURN, "l_hand", used_weapon=src)
|
||||
if("TOX")
|
||||
H.visible_message(span_danger("\The [src] seethes and hisses like burning acid!"))
|
||||
if(!H.isSynthetic())
|
||||
@@ -186,7 +186,7 @@
|
||||
burn_user = FALSE
|
||||
|
||||
if(burn_user)
|
||||
M.apply_damage(rand(min_damage,max_damage), BURN, null, used_weapon="Anomalous Material")
|
||||
M.apply_damage(rand(min_damage,max_damage), BURN, null, used_weapon=src)
|
||||
|
||||
/obj/item/research_sample/attackby(obj/item/P as obj, mob/user as mob)
|
||||
..()
|
||||
|
||||
@@ -132,7 +132,7 @@ Runs each statement in a block of code.
|
||||
else if(istype(S, /node/statement/FunctionCall))
|
||||
RunFunction(S)
|
||||
else if(istype(S, /node/statement/FunctionDefinition))
|
||||
//do nothing
|
||||
pass() //do nothing
|
||||
else if(istype(S, /node/statement/WhileLoop))
|
||||
RunWhile(S)
|
||||
else if(istype(S, /node/statement/IfStatement))
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
/spell/area_teleport/cast(area/thearea, mob/user)
|
||||
if(!istype(thearea))
|
||||
if(istype(thearea, /list))
|
||||
thearea = thearea[1]
|
||||
var/list/area_list = thearea
|
||||
thearea = area_list[1]
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(!T.density)
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
//see if we've identified anyone nearby
|
||||
if(world.time - last_bloodcall > bloodcall_interval && nearby_mobs.len)
|
||||
var/mob/living/carbon/human/M = pop(nearby_mobs)
|
||||
if(M in view(7,src) && M.health > 20)
|
||||
if((M in view(7,src)) && M.health > 20)
|
||||
if(prob(50))
|
||||
bloodcall(M)
|
||||
nearby_mobs.Add(M)
|
||||
|
||||
@@ -80,9 +80,7 @@
|
||||
SSxenoarch.digsite_spawning_turfs.Remove(T)
|
||||
|
||||
if(SSxenoarch && ((nearestTargetDist == -1) || (nearestSimpleTargetDist == -1)) && user.z && (world.time - last_repopulation_time >= repopulation_delay))
|
||||
if(user.z in using_map.xenoarch_exempt_levels) //We found no artifacts and our Z level is not spawn exempt. Time for random generation.
|
||||
//Yeah we do nothing here. I tried to make the above a !user.z ... but VSC compiler screeched at me.
|
||||
else
|
||||
if(!(user.z in using_map.xenoarch_exempt_levels)) //We found no artifacts and our Z level is not spawn exempt. Time for random generation.
|
||||
last_repopulation_time = world.time
|
||||
to_chat(user, "The [src] beeps and buzzes, a warning popping up on screen stating 'No artifacts detected on current wavelength. Swapping to different wavelength. Please try scanning momentarily.'")
|
||||
SSxenoarch.continual_generation(user)
|
||||
|
||||
Reference in New Issue
Block a user