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:
Drathek
2025-02-26 18:12:03 -05:00
committed by GitHub
co-authored by Selis
parent b98a9736b4
commit d062ff9f49
94 changed files with 268 additions and 153 deletions
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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)
+1 -1
View File
@@ -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
+11
View File
@@ -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
+30
View File
@@ -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
+3
View File
@@ -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
+23 -1
View File
@@ -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)
+4
View File
@@ -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)
+2 -1
View File
@@ -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
View File
@@ -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"])
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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)
-2
View File
@@ -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)
+2 -2
View File
@@ -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
-1
View File
@@ -39,7 +39,6 @@
if(3.0)
if(prob(25))
density = FALSE
else
return
/obj/machinery/optable/attack_hand(mob/user as mob)
-2
View File
@@ -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()
-1
View File
@@ -440,7 +440,6 @@
ex_act(severity)
qdel(src)
return
else
return
/obj/machinery/clonepod/update_icon()
-1
View File
@@ -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)
+1 -1
View File
@@ -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]."))
-1
View File
@@ -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)
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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>"
+2 -2
View File
@@ -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))
+1 -1
View File
@@ -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!"))
+1 -1
View File
@@ -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
-2
View File
@@ -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
+1 -1
View File
@@ -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"
-1
View File
@@ -321,7 +321,6 @@
if (prob(5))
dismantle()
return
else
return
/obj/structure/girder/cult
-1
View File
@@ -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
-1
View File
@@ -277,7 +277,6 @@
if(3.0)
qdel(src)
return
else
return
// Duplicated from structures.dm, but its a bit different.
+2 -2
View File
@@ -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]."))
+1 -1
View File
@@ -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>) "
+1 -1
View File
@@ -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.
+2
View File
@@ -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
+1 -1
View File
@@ -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
-1
View File
@@ -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)
+1 -1
View File
@@ -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))
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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()
-1
View File
@@ -87,7 +87,6 @@
b.loc = (get_turf(src))
qdel(src)
return
else
return
/obj/structure/bookcase/update_icon()
+3 -3
View File
@@ -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))
+4 -4
View File
@@ -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 ..()
+6 -6
View File
@@ -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)
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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)
+2 -2
View File
@@ -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))
+1 -1
View File
@@ -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 ..()
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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..."))
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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)
+10 -10
View File
@@ -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))
+2 -1
View File
@@ -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)
+1 -3
View File
@@ -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)