Merge pull request #11287 from VOREStation/master

July 28th 2021 Update
This commit is contained in:
Aronai Sieyes
2021-07-28 12:51:21 -04:00
committed by GitHub
28 changed files with 759 additions and 314 deletions
-14
View File
@@ -3,14 +3,6 @@
/atom/var/pressure_resistance = ONE_ATMOSPHERE
/atom/var/can_atmos_pass = ATMOS_PASS_YES
// Purpose: Determines if the object can pass this atom.
// Called by: Movement.
// Inputs: The moving atom, target turf.
// Outputs: Boolean if can pass.
// Airflow and ZAS zones now uses CanZASPass() instead of this proc.
/atom/proc/CanPass(atom/movable/mover, turf/target)
return !density
// Purpose: Determines if airflow is allowed between T and loc.
// Called by: Airflow.
// Inputs: The turf the airflow is from, which may not be the same as loc. is_zone is for conditionally disallowing merging.
@@ -30,12 +22,6 @@
else
CRASH("Invalid can_atmos_pass = [can_atmos_pass] on [src] ([type])")
/turf/CanPass(atom/movable/mover, turf/target)
if(!target) return FALSE
if(istype(mover)) // turf/Enter(...) will perform more advanced checks
return !density
/turf/CanZASPass(turf/T, is_zone)
if(T.blocks_air || src.blocks_air)
return FALSE
+1 -1
View File
@@ -170,7 +170,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
continue
//Spread the fire.
if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, my_tile, 0,0))
if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(src, enemy_tile) && enemy_tile.CanPass(src, my_tile))
enemy_tile.create_fire(firelevel)
else
@@ -0,0 +1,8 @@
//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)
//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
#endif
+31 -36
View File
@@ -6,9 +6,6 @@
//
// SSmachines subsystem - Processing machines, pipenets, and powernets!
//
// Implementation Plan:
// PHASE 1 - Add subsystem using the existing global list vars
// PHASE 2 - Move the global list vars into the subsystem.
SUBSYSTEM_DEF(machines)
name = "Machines"
@@ -24,12 +21,6 @@ SUBSYSTEM_DEF(machines)
var/cost_powernets = 0
var/cost_power_objects = 0
// TODO - PHASE 2 - Switch these from globals to instance vars
// var/list/pipenets = list()
// var/list/machinery = list()
// var/list/powernets = list()
// var/list/power_objects = list()
var/list/current_run = list()
/datum/controller/subsystem/machines/Initialize(timeofday)
@@ -51,28 +42,31 @@ SUBSYSTEM_DEF(machines)
// The above is a lie. Turbolifts also call this proc.
/datum/controller/subsystem/machines/proc/makepowernets()
// TODO - check to not run while in the middle of a tick!
for(var/datum/powernet/PN in powernets)
for(var/datum/powernet/PN as anything in powernets)
qdel(PN)
powernets.Cut()
setup_powernets_for_cables(cable_list)
/datum/controller/subsystem/machines/proc/setup_powernets_for_cables(list/cables)
for(var/obj/structure/cable/PC in cables)
for(var/obj/structure/cable/PC as anything in cables)
if(!PC.powernet)
var/datum/powernet/NewPN = new()
NewPN.add_cable(PC)
propagate_network(PC,PC.powernet)
/datum/controller/subsystem/machines/proc/setup_atmos_machinery(list/atmos_machines)
var/list/actual_atmos_machines = list()
for(var/obj/machinery/atmospherics/machine in atmos_machines)
machine.atmos_init()
actual_atmos_machines += machine
CHECK_TICK
for(var/obj/machinery/atmospherics/machine in atmos_machines)
for(var/obj/machinery/atmospherics/machine as anything in actual_atmos_machines)
machine.build_network()
CHECK_TICK
for(var/obj/machinery/atmospherics/unary/U in atmos_machines)
for(var/obj/machinery/atmospherics/unary/U as anything in actual_atmos_machines)
if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
var/obj/machinery/atmospherics/unary/vent_pump/T = U
T.broadcast_status()
@@ -105,12 +99,10 @@ SUBSYSTEM_DEF(machines)
while(current_run.len)
var/datum/pipe_network/PN = current_run[current_run.len]
current_run.len--
if(istype(PN) && !QDELETED(PN))
PN.process(wait)
else
if(QDELETED(PN))
global.pipe_networks.Remove(PN)
if(!QDELETED(PN))
DISABLE_BITFIELD(PN.datum_flags, DF_ISPROCESSING)
else
PN.process(wait)
if(MC_TICK_CHECK)
return
@@ -123,11 +115,8 @@ SUBSYSTEM_DEF(machines)
while(current_run.len)
var/obj/machinery/M = current_run[current_run.len]
current_run.len--
if(!istype(M) || QDELETED(M) || (M.process(wait) == PROCESS_KILL))
if(QDELETED(M) || (M.process(wait) == PROCESS_KILL))
global.processing_machines.Remove(M)
if(!QDELETED(M))
DISABLE_BITFIELD(M.datum_flags, DF_ISPROCESSING)
if(MC_TICK_CHECK)
return
@@ -140,12 +129,10 @@ SUBSYSTEM_DEF(machines)
while(current_run.len)
var/datum/powernet/PN = current_run[current_run.len]
current_run.len--
if(istype(PN) && !QDELETED(PN))
PN.reset(wait)
else
if(QDELETED(PN))
global.powernets.Remove(PN)
if(!QDELETED(PN))
DISABLE_BITFIELD(PN.datum_flags, DF_ISPROCESSING)
else
PN.reset(wait)
if(MC_TICK_CHECK)
return
@@ -167,16 +154,24 @@ SUBSYSTEM_DEF(machines)
return
/datum/controller/subsystem/machines/Recover()
// TODO - PHASE 2
// if (istype(SSmachines.pipenets))
// pipenets = SSmachines.pipenets
// if (istype(SSmachines.machinery))
// machinery = SSmachines.machinery
// if (istype(SSmachines.powernets))
// powernets = SSmachines.powernets
// if (istype(SSmachines.power_objects))
// power_objects = SSmachines.power_objects
for(var/datum/D as anything in global.pipe_networks)
if(!istype(D, /datum/pipe_network))
error("Found wrong type during SSmachinery recovery: list=global.pipe_networks, item=[D], type=[D?.type]")
global.pipe_networks -= D
for(var/datum/D as anything in global.processing_machines)
if(!istype(D, /obj/machinery))
error("Found wrong type during SSmachinery recovery: list=global.processing_machines, item=[D], type=[D?.type]")
global.processing_machines -= D
for(var/datum/D as anything in global.powernets)
if(!istype(D, /datum/powernet))
error("Found wrong type during SSmachinery recovery: list=global.powernets, item=[D], type=[D?.type]")
global.powernets -= D
for(var/datum/D as anything in global.processing_power_items)
if(!istype(D, /obj/item))
error("Found wrong type during SSmachinery recovery: list=global.processing_power_items, item=[D], type=[D?.type]")
global.processing_power_items -= D
#undef SSMACHINES_PIPENETS
#undef SSMACHINES_MACHINERY
#undef SSMACHINES_POWERNETS
#undef SSMACHINES_POWER_OBJECTS
+2 -2
View File
@@ -85,7 +85,7 @@
/datum/supply_pack/misc/com_medical_rig
name = "commonwealth medical hardsuit (loaded)"
contains = list(
/obj/item/weapon/rig/baymed = 1
/obj/item/weapon/rig/baymed/equipped = 1
)
cost = 250
containertype = /obj/structure/closet/crate/secure/gear
@@ -95,7 +95,7 @@
/datum/supply_pack/misc/com_engineering_rig
name = "commonwealth engineering hardsuit (loaded)"
contains = list(
/obj/item/weapon/rig/bayeng = 1
/obj/item/weapon/rig/bayeng/equipped = 1
)
cost = 250
containertype = /obj/structure/closet/crate/secure/gear
+8
View File
@@ -715,3 +715,11 @@
/atom/proc/interact(mob/user)
return
// Purpose: Determines if the object can pass this atom.
// Called by: Movement.
// Inputs: The moving atom, target turf.
// Outputs: Boolean if can pass.
// Airflow and ZAS zones now uses CanZASPass() instead of this proc.
/atom/proc/CanPass(atom/movable/mover, turf/target)
return !density
@@ -38,7 +38,7 @@
for(var/d in cardinal)
var/turf/simulated/target = get_step(src,d)
var/turf/simulated/origin = get_turf(src)
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
if(origin.CanPass(src, target) && target.CanPass(src, origin))
var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
if(other_fuel)
other_fuel.amount += amount*0.25
@@ -73,7 +73,7 @@
var/turf/simulated/O = get_step(S,d)
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
continue
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
if(O.CanPass(src, S) && S.CanPass(src, O))
var/new_pool_amount = amount * 0.25
if(new_pool_amount > 0.1)
var/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/F = new(O, new_pool_amount, d)
+7 -2
View File
@@ -89,7 +89,9 @@
/obj/structure/proc/turf_is_crowded()
var/turf/T = get_turf(src)
if(!T || !istype(T))
return 0
return "empty void"
if(T.density)
return T
for(var/obj/O in T.contents)
if(istype(O,/obj/structure))
var/obj/structure/S = O
@@ -113,12 +115,15 @@
LAZYREMOVE(climbers, user)
return
usr.forceMove(get_turf(src))
usr.forceMove(climb_to(user))
if (get_turf(user) == get_turf(src))
usr.visible_message("<span class='warning'>[user] climbs onto \the [src]!</span>")
LAZYREMOVE(climbers, user)
/obj/structure/proc/climb_to(var/mob/living/user)
return get_turf(src)
/obj/structure/proc/structure_shaken()
for(var/mob/living/M in climbers)
M.Weaken(1)
+13 -3
View File
@@ -18,7 +18,11 @@
if(A)
A.forceMove(src) // helo
podfall(auto_open)
air = new(1000)
air = new
/obj/structure/drop_pod/Destroy()
. = ..()
qdel_null(air)
/obj/structure/drop_pod/proc/podfall(auto_open)
set waitfor = FALSE // sleeping in new otherwise
@@ -118,10 +122,16 @@
return ..()
/obj/structure/drop_pod/return_air()
return return_air_for_internal_lifeform()
return air || ..()
/obj/structure/drop_pod/return_air_for_internal_lifeform()
return air
return air || ..()
/obj/structure/drop_pod/assume_air(datum/gas_mixture/giver)
if(air)
return air.merge(giver)
else
return ..()
// This is about 0.896m^3 of atmosphere, which is enough to last for quite a while.
/datum/gas_mixture/pod_air
+265
View File
@@ -105,6 +105,30 @@
icon = 'icons/obj/structures/decor.dmi'
icon_state = "stump"
// minirocket pod from TGMC
/obj/structure/prop/minirocket_pod
icon = 'icons/obj/structures/decor.dmi'
icon_state = "minirocket_pod"
// warheads from TGMC
/obj/structure/prop/warhead1
icon = 'icons/obj/structures/decor.dmi'
icon_state = "ob_warhead_1"
/obj/structure/prop/warhead2
icon = 'icons/obj/structures/decor.dmi'
icon_state = "ob_warhead_2"
/obj/structure/prop/warhead3
icon = 'icons/obj/structures/decor.dmi'
icon_state = "ob_warhead_3"
/obj/structure/prop/warhead4
icon = 'icons/obj/structures/decor.dmi'
icon_state = "ob_warhead_4"
// sentry console from TGMC
/obj/structure/prop/sentry_control
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tgmc_sentry"
// vatgrowing thing from /tg/
/obj/structure/prop/green_egg
icon = 'icons/obj/structures/decor.dmi'
@@ -122,6 +146,30 @@
bound_width = 64
bound_height = 64
// various weapons from TGMC
/obj/structure/prop/tgmc_missile
name = "missile"
desc = "It seems to be some sort of spacecraft-tier ordinance."
icon = 'icons/obj/structures/decor64x64.dmi'
icon_state = "single"
bound_width = 64
/obj/structure/prop/tgmc_missile/double
icon_state = "widowmaker"
/obj/structure/prop/tgmc_missile/banshee
icon_state = "banshee"
/obj/structure/prop/tgmc_missile/keeper
icon_state = "keeper"
/obj/structure/prop/tgmc_missile/fatty
icon_state = "fatty"
/obj/structure/prop/tgmc_missile/napalm
icon_state = "napalm"
// ship memorial from TGMC
/obj/structure/prop/memorial
icon = 'icons/obj/structures/decor64x64.dmi'
icon_state = "ship_memorial"
bound_width = 64
// dna vault from /tg/
/obj/structure/prop/dna_vault
icon = 'icons/obj/structures/decor96x96.dmi'
@@ -257,6 +305,118 @@
/obj/structure/prop/dominator/purple
icon_state = "dominator-purple"
/**
* Possible 'state' options for change_state(state) are:
* empty, single, banshee, keeper, fatty, napalm
*/
// ship weapons from TGMC
/obj/structure/prop/tgmc_missile_rack
name = "missile launcher"
desc = "Some sort of spacecraft-tier missile weapon."
icon = 'icons/obj/structures/decor64x64.dmi'
icon_state = "rocket_pod"
bound_height = 64
/obj/structure/prop/tgmc_missile_rack/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "rocket_pod"
if("single")
icon_state = "rocket_pod_loaded"
if("banshee")
icon_state = "rocket_pod_loadedb"
if("keeper")
icon_state = "rocket_pod_loadedk"
if("fatty")
icon_state = "rocket_pod_loadedf"
if("napalm")
icon_state = "rocket_pod_loadedn"
/obj/structure/prop/tgmc_missile_rack/single
icon_state = "rocket_pod_loaded"
/obj/structure/prop/tgmc_missile_rack/banshee
icon_state = "rocket_pod_loadedb"
/obj/structure/prop/tgmc_missile_rack/keeper
icon_state = "rocket_pod_loadedk"
/obj/structure/prop/tgmc_missile_rack/fatty
icon_state = "rocket_pod_loadedf"
/obj/structure/prop/tgmc_missile_rack/napalm
icon_state = "rocket_pod_loadedn"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded
*/
// ship weapons from TGMC
/obj/structure/prop/tgmc_minirockets
name = "rocket pod"
desc = "Some sort of spacecraft-tier rocket weapon."
icon = 'icons/obj/structures/decor64x64.dmi'
icon_state = "minirocket_pod"
bound_height = 64
/obj/structure/prop/tgmc_minirockets/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "minirocket_pod"
if("loaded")
icon_state = "minirocket_pod_loaded"
/obj/structure/prop/tgmc_minirockets/loaded
icon_state = "minirocket_pod_loaded"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded
*/
// ship weapons from TGMC
/obj/structure/prop/tgmc_laser
name = "laser cannon"
desc = "Some sort of spacecraft-tier energy weapon."
icon = 'icons/obj/structures/decor64x64.dmi'
icon_state = "laser_beam"
bound_height = 64
/obj/structure/prop/tgmc_laser/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "laser_beam"
if("loaded")
icon_state = "laser_beam_loaded"
/obj/structure/prop/tgmc_laser/loaded
icon_state = "laser_beam_loaded"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded, loadedempty
*/
// ship weapons from TGMC
/obj/structure/prop/tgmc_30mm
name = "30mm cannon"
desc = "Some sort of spacecraft-tier rotary cannon weapon."
icon = 'icons/obj/structures/decor64x64.dmi'
icon_state = "30mm_cannon"
bound_height = 64
/obj/structure/prop/tgmc_30mm/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "30mm_cannon"
if("loaded")
icon_state = "30mm_cannon_loaded1"
if("loadedempty")
icon_state = "30mm_cannon_loaded0"
/obj/structure/prop/tgmc_30mm/loaded
icon_state = "30mm_cannon_loaded1"
/obj/structure/prop/tgmc_30mm/loadedempty
icon_state = "30mm_cannon_loaded0"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
@@ -596,6 +756,111 @@
/obj/structure/prop/nt_cruciforge/starts_working
icon_state = "nt_cruciforge_work"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/tgmc_console1
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tgmc_console1"
/obj/structure/prop/tgmc_console1/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console1"
if("on")
icon_state = "tgmc_console1_on"
/obj/structure/prop/tgmc_console1/starts_on
icon_state = "tgmc_console1_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/tgmc_console2
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tgmc_console2"
/obj/structure/prop/tgmc_console2/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console2"
if("on")
icon_state = "tgmc_console2_on"
/obj/structure/prop/tgmc_console2/starts_on
icon_state = "tgmc_console2_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/tgmc_console3
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tgmc_console3"
/obj/structure/prop/tgmc_console3/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console3"
if("on")
icon_state = "tgmc_console3_on"
/obj/structure/prop/tgmc_console3/starts_on
icon_state = "tgmc_console3_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/tgmc_console4
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tgmc_console4"
/obj/structure/prop/tgmc_console4/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console4"
if("on")
icon_state = "tgmc_console4_on"
/obj/structure/prop/tgmc_console4/starts_on
icon_state = "tgmc_console4_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/tgmc_console5
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tgmc_console5"
/obj/structure/prop/tgmc_console5/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console5"
if("on")
icon_state = "tgmc_console5_on"
/obj/structure/prop/tgmc_console5/starts_on
icon_state = "tgmc_console5_on"
/**
* This one is a bit more fancy than others. Anything in the contents (PLEASE LIMIT TO ONE THING)
* will show up inside it! Also if you map in an item on it, it will grab that at mapload and start
+1 -1
View File
@@ -296,7 +296,7 @@
var/turf/simulated/wall/T
for(var/direction in get_dirs_to_test())
T = get_step(src, direction)
if(!istype(T))
if(!istype(T) || T.material?.icon_base != "hull")
continue
name = T.name
+12 -1
View File
@@ -353,13 +353,24 @@
ai_log("handle_stance_tactical() : Going to handle_resist().", AI_LOG_TRACE)
handle_resist()
else if(istype(holder.loc, /obj/structure/closet))
var/atom/holder_loc = holder.loc
if(istype(holder_loc, /obj/structure/closet))
var/obj/structure/closet/C = holder.loc
ai_log("handle_stance_tactical() : Inside a closet. Going to attempt escape.", AI_LOG_TRACE)
if(C.sealed)
holder.resist()
else
C.open()
else if(isbelly(holder_loc))
ai_log("handle_stance_tactical() : Inside a belly, will move out to turf if owner is stat.", AI_LOG_TRACE)
var/obj/belly/B = holder_loc
var/mob/living/L = B.owner
if(B.owner?.stat)
var/mob/living/holder = src.holder
ai_log("handle_stance_tactical() : Owner was stat, moving.", AI_LOG_TRACE)
holder.forceMove(get_turf(L))
holder.visible_message("<span class='danger'>[src] climbs out of [L], ready to continue fighting!</span>")
playsound(holder, 'sound/effects/splat.ogg')
// Should we flee?
if(should_flee())
+18
View File
@@ -68,6 +68,7 @@
// We're not entirely sure how holder will do melee attacks since any /mob/living could be holder, but we don't have to care because Interfaces.
/datum/ai_holder/proc/melee_attack(atom/A)
ai_log("melee_attack() : Entering.", AI_LOG_TRACE)
pre_melee_attack(A)
. = holder.IAttack(A)
if(. == ATTACK_SUCCESSFUL)
@@ -75,6 +76,7 @@
// Ditto.
/datum/ai_holder/proc/ranged_attack(atom/A)
ai_log("ranged_attack() : Entering.", AI_LOG_TRACE)
pre_ranged_attack(A)
. = holder.IRangedAttack(A)
if(. == ATTACK_SUCCESSFUL)
@@ -82,11 +84,27 @@
// Most mobs probably won't have this defined but we don't care.
/datum/ai_holder/proc/special_attack(atom/movable/AM)
ai_log("special_attack() : Entering.", AI_LOG_TRACE)
pre_special_attack(AM)
. = holder.ISpecialAttack(AM)
if(. == ATTACK_SUCCESSFUL)
post_special_attack(AM)
// Almost entirely combat considerations so in this file.
/datum/ai_holder/proc/handle_eaten()
ai_log("handle_eaten() : Entering.", AI_LOG_TRACE)
forget_everything() // All of that is probably invalid now
if(!isbelly(holder.loc))
// Strange...!
stack_trace("AI tried to handle being eaten but didn't end up in a belly somehow.")
return
var/obj/belly/B = holder.loc
var/mob/living/L = B.owner
// Will return false if we decide to not do anything about it.
if(!react_to_attack(L, ignore_timers = TRUE))
ai_log("handle_eaten() : Deciding to sleep AI.", AI_LOG_TRACE)
go_sleep()
// Called when within striking/shooting distance, however cooldown is not considered.
// Override to do things like move in a random step for evasiveness.
// Note that this is called BEFORE the attack.
@@ -182,7 +182,7 @@
holder.a_intent = I_HELP
return FALSE // We're a good slime.
/datum/ai_holder/simple_mob/xenobio_slime/react_to_attack(atom/movable/attacker)
/datum/ai_holder/simple_mob/xenobio_slime/react_to_attack(atom/movable/attacker, ignore_timers = FALSE)
. = ..(attacker)
if(ishuman(attacker))
+8 -10
View File
@@ -114,6 +114,7 @@
return closest_targets
/datum/ai_holder/proc/can_attack(atom/movable/the_target, var/vision_required = TRUE)
ai_log("can_attack() : Entering.", AI_LOG_TRACE)
if(!can_see_target(the_target) && vision_required)
return FALSE
@@ -218,6 +219,7 @@
// Updates the last known position of the target.
/datum/ai_holder/proc/track_target_position()
ai_log("track_target_position() : Entering.", AI_LOG_TRACE)
if(!target)
lose_target_position()
@@ -231,13 +233,14 @@
// Resets the last known position to null.
/datum/ai_holder/proc/lose_target_position()
ai_log("lose_target_position() : Entering.", AI_LOG_TRACE)
if(last_turf_display && target_last_seen_turf)
target_last_seen_turf.cut_overlay(last_turf_overlay)
ai_log("lose_target_position() : Last position is being reset.", AI_LOG_INFO)
target_last_seen_turf = null
// Responds to a hostile action against its mob.
/datum/ai_holder/proc/react_to_attack(atom/movable/attacker)
/datum/ai_holder/proc/react_to_attack(atom/movable/attacker, ignore_timers = FALSE)
if(holder.stat) // We're dead.
ai_log("react_to_attack() : Was attacked by [attacker], but we are dead/unconscious.", AI_LOG_TRACE)
return FALSE
@@ -247,15 +250,10 @@
if(holder.IIsAlly(attacker)) // I'll overlook it THIS time...
ai_log("react_to_attack() : Was attacked by [attacker], but they were an ally.", AI_LOG_TRACE)
return FALSE
if(target) // Already fighting someone. Switching every time we get hit would impact our combat performance.
if(!retaliate) // If we don't get to fight back, we don't fight back...
ai_log("react_to_attack() : Was attacked by [attacker], but we already have a target.", AI_LOG_TRACE)
on_attacked(attacker) // So we attack immediately and not threaten.
return FALSE
else if(check_attacker(attacker) && world.time > last_target_time + 3 SECONDS) // Otherwise, let 'er rip
ai_log("react_to_attack() : Was attacked by [attacker]. Can retaliate, waited 3 seconds.", AI_LOG_INFO)
on_attacked(attacker) // So we attack immediately and not threaten.
return give_target(attacker) // Also handles setting the appropiate stance.
if(target && !ignore_timers && (world.time < last_target_time + 8 SECONDS)) // Already fighting someone. Switching every time we get hit would impact our combat performance.
ai_log("react_to_attack() : Was attacked by [attacker], but we switched targets too recently to change.", AI_LOG_TRACE)
on_attacked(attacker)
return FALSE
if(stance == STANCE_SLEEP) // If we're asleep, try waking up if someone's wailing on us.
ai_log("react_to_attack() : AI is asleep. Waking up.", AI_LOG_TRACE)
@@ -18,25 +18,34 @@
//Area allowing backpacks to be placed on rigsuits.
/obj/item/weapon/rig/vox
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack, /obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/combat
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/ert
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
/obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/light/ninja
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/merc
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/ce
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/medical
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/hazmat
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/hazard
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/industrial
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
@@ -45,6 +54,7 @@
/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
/obj/item/weapon/rig/pmc
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
/obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
@@ -74,10 +84,11 @@
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE // so it's like a rig firesuit
armor = list("melee" = 40, "bullet" = 10, "laser" = 30, "energy" = 55, "bomb" = 70, "bio" = 100, "rad" = 100)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack)
chest_type = /obj/item/clothing/suit/space/rig/focalpoint
helm_type = /obj/item/clothing/head/helmet/space/rig/focalpoint
boot_type = /obj/item/clothing/shoes/magboots/rig/focalpoint
boot_type = /obj/item/clothing/shoes/magboots/rig/ce/focalpoint
glove_type = /obj/item/clothing/gloves/gauntlets/rig/focalpoint
/obj/item/weapon/rig/focalpoint/equipped
@@ -104,7 +115,7 @@
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
sprite_sheets = null
/obj/item/clothing/shoes/magboots/rig/focalpoint
/obj/item/clothing/shoes/magboots/rig/ce/focalpoint
icon = 'icons/inventory/feet/item_vr.dmi'
default_worn_icon = 'icons/inventory/feet/mob_vr.dmi'
icon_state = "techno_rig"
@@ -131,6 +142,10 @@
icon_state = "ihs_rig"
suit_type = "\improper Hephaestus hardsuit"
cell_type = /obj/item/weapon/cell/super
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/handcuffs, \
/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit, /obj/item/weapon/storage/backpack,/obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 50, "bomb" = 60, "bio" = 100, "rad" = 20)
@@ -194,6 +209,8 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/zero
boot_type = null
glove_type = null
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack, /obj/item/device/bluespaceradio, /obj/item/device/defib_kit)
slowdown = 0
offline_slowdown = 1
@@ -237,15 +254,25 @@
chest_type = /obj/item/clothing/suit/space/rig/baymed
helm_type = /obj/item/clothing/head/helmet/space/rig/baymed
boot_type = /obj/item/clothing/shoes/magboots/rig/baymed
boot_type = /obj/item/clothing/shoes/magboots/rig/ce/baymed
glove_type = /obj/item/clothing/gloves/gauntlets/rig/baymed
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/device/healthanalyzer,
/obj/item/stack/medical,
/obj/item/roller,
/obj/item/weapon/storage/backpack,
/obj/item/device/bluespaceradio,
/obj/item/device/defib_kit)
// speedy paper
slowdown = -0.5
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 25, "bio" = 100, "rad" = 20)
/obj/item/weapon/rig/baymed/equipped
req_access = list(access_medical)
initial_modules = list(
/obj/item/rig_module/maneuvering_jets,
@@ -261,6 +288,7 @@
item_state = null
sprite_sheets = ALL_VR_SPRITE_SHEETS_HEAD_MOB
sprite_sheets_obj = ALL_VR_SPRITE_SHEETS_HEAD_ITEM
camera_networks = list(NETWORK_MEDICAL)
/obj/item/clothing/suit/space/rig/baymed
icon = 'icons/inventory/suit/item_vr.dmi'
@@ -270,7 +298,7 @@
sprite_sheets = ALL_VR_SPRITE_SHEETS_SUIT_MOB
sprite_sheets_obj = ALL_VR_SPRITE_SHEETS_SUIT_ITEM
/obj/item/clothing/shoes/magboots/rig/baymed
/obj/item/clothing/shoes/magboots/rig/ce/baymed
icon = 'icons/inventory/feet/item_vr.dmi'
default_worn_icon = 'icons/inventory/feet/mob_vr.dmi'
icon_state = "medical_rig_bay"
@@ -300,14 +328,26 @@
chest_type = /obj/item/clothing/suit/space/rig/bayeng
helm_type = /obj/item/clothing/head/helmet/space/rig/bayeng
boot_type = /obj/item/clothing/shoes/magboots/rig/bayeng
boot_type = /obj/item/clothing/shoes/magboots/rig/ce/bayeng
glove_type = /obj/item/clothing/gloves/gauntlets/rig/bayeng
slowdown = 1
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/device/t_scanner,
/obj/item/weapon/pickaxe,
/obj/item/weapon/rcd,
/obj/item/weapon/storage/backpack,
/obj/item/device/bluespaceradio,
/obj/item/device/defib_kit
)
slowdown = 0
offline_slowdown = 5 // very bulky
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 100, rad = 50)
/obj/item/weapon/rig/bayeng//equipped
/obj/item/weapon/rig/bayeng/equipped
initial_modules = list(
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/device/rcd,
@@ -323,6 +363,7 @@
item_state = null
sprite_sheets = ALL_VR_SPRITE_SHEETS_HEAD_MOB
sprite_sheets_obj = ALL_VR_SPRITE_SHEETS_HEAD_ITEM
camera_networks = list(NETWORK_ENGINEERING)
/obj/item/clothing/suit/space/rig/bayeng
icon = 'icons/inventory/suit/item_vr.dmi'
@@ -332,7 +373,7 @@
sprite_sheets = ALL_VR_SPRITE_SHEETS_SUIT_MOB
sprite_sheets_obj = ALL_VR_SPRITE_SHEETS_SUIT_ITEM
/obj/item/clothing/shoes/magboots/rig/bayeng
/obj/item/clothing/shoes/magboots/rig/ce/bayeng
icon = 'icons/inventory/feet/item_vr.dmi'
default_worn_icon = 'icons/inventory/feet/mob_vr.dmi'
icon_state = "engineering_rig_bay"
@@ -159,7 +159,7 @@ List of things solar grubs should be able to do:
"The solargrub chitters in irritation at your continued solidity, followed by a string of crushingly tight stomach clenches that grind its caustic stomach ooze into your body!",
"The deceptively severe heat trapped within the solargrub works in tandem with its inner muscles and your tingling, prickling stomach juice bath to weaken you!")
/datum/ai_holder/simple_mob/retaliate/solargrub/react_to_attack(atom/movable/attacker)
/datum/ai_holder/simple_mob/retaliate/solargrub/react_to_attack(atom/movable/attacker, ignore_timers = FALSE)
holder.anchored = FALSE
holder.set_AI_busy(FALSE)
..()
+2 -2
View File
@@ -86,7 +86,7 @@
if(dir != NORTH)
plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
climbable = FALSE //flipping tables allows them to be used as makeshift barriers
//climbable = FALSE //flipping tables allows them to be used as makeshift barriers
flipped = 1
flags |= ON_BORDER
for(var/D in list(turn(direction, 90), turn(direction, -90)))
@@ -105,7 +105,7 @@
reset_plane_and_layer()
flipped = 0
climbable = initial(climbable)
//climbable = initial(climbable)
flags &= ~ON_BORDER
for(var/D in list(turn(dir, 90), turn(dir, -90)))
var/obj/structure/table/T = locate() in get_step(src.loc,D)
+16 -4
View File
@@ -1,11 +1,15 @@
/obj/structure/table/CanPass(atom/movable/mover, turf/target)
if(istype(mover,/obj/item/projectile))
return (check_cover(mover,target))
if (flipped == 1)
if (get_dir(loc, target) == dir)
if (flipped)
var/move_dir = get_dir(mover, target)
// Moving from back to front, gotta climb
if(move_dir == dir && target != loc)
return !density
else
return TRUE
// Moving from front to back, gotta climb
if(move_dir == reverse_dir[dir])
return !density
return TRUE
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
if(locate(/obj/structure/table/bench) in get_turf(mover))
@@ -15,6 +19,14 @@
return TRUE
return FALSE
/obj/structure/table/climb_to(mob/living/mover)
if(flipped && mover.loc == loc)
var/turf/T = get_step(src, dir)
if(T.Enter(mover))
return T
return ..()
//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops.
/obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from)
var/turf/cover
+1 -1
View File
@@ -218,7 +218,7 @@
vore_fx(M)
//Stop AI processing in bellies
if(M.ai_holder)
M.ai_holder.go_sleep()
M.ai_holder.handle_eaten()
// Called whenever an atom leaves this belly
/obj/belly/Exited(atom/movable/thing, atom/OldLoc)
+1
View File
@@ -31,6 +31,7 @@ greennyy - Protean
hawkerthegreat - Vox
hollifex - Diona
huenererschrecker - Xenochimera
hunterbirk - Xenochimera
h0lysquirr3l - Protean
idcaboutaname - Protean
inuzari - Diona
Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 KiB

After

Width:  |  Height:  |  Size: 810 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 39 KiB

+93 -19
View File
@@ -1934,6 +1934,7 @@
/obj/effect/floor_decal/milspec/color/orange/half{
dir = 6
},
/obj/machinery/light,
/turf/simulated/floor/tiled/milspec,
/area/aro3/atmos)
"lI" = (
@@ -1948,6 +1949,13 @@
},
/turf/simulated/floor/tiled/milspec,
/area/aro3/hallway_port)
"lJ" = (
/obj/effect/floor_decal/milspec/hatchmarks,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 5
},
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"lM" = (
/obj/effect/floor_decal/milspec/color/white/half,
/obj/effect/floor_decal/milspec/color/white/corner{
@@ -2314,6 +2322,12 @@
/obj/effect/floor_decal/milspec_sterile/green/half,
/turf/simulated/floor/tiled/milspec/sterile,
/area/aro3/medical)
"ot" = (
/obj/effect/floor_decal/industrial/warning/dust{
dir = 1
},
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"ou" = (
/obj/effect/floor_decal/milspec/stripe{
dir = 4
@@ -2553,6 +2567,10 @@
/obj/effect/floor_decal/milspec_sterile/green/corner,
/turf/simulated/floor/tiled/milspec/sterile,
/area/aro3/medical)
"pO" = (
/obj/effect/floor_decal/milspec/hatchmarks,
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"pP" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -3017,6 +3035,14 @@
},
/turf/simulated/floor/tiled/milspec,
/area/aro3/hallway_starboard)
"sX" = (
/obj/structure/prop/tgmc_minirockets,
/obj/effect/floor_decal/milspec/hatchmarks,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 6
},
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"td" = (
/obj/effect/floor_decal/milspec_sterile/green/half{
dir = 4
@@ -4159,6 +4185,10 @@
},
/turf/simulated/floor/tiled/eris/steel/panels,
/area/aro3/eva_hall)
"Ab" = (
/obj/effect/floor_decal/industrial/warning/dust,
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"Ac" = (
/obj/structure/closet/crate/bin{
anchored = 1;
@@ -5093,6 +5123,14 @@
/obj/item/weapon/storage/firstaid/adv,
/turf/simulated/floor/tiled/techmaint,
/area/aro3/medical)
"Hb" = (
/obj/structure/prop/tgmc_minirockets,
/obj/effect/floor_decal/milspec/hatchmarks,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 10
},
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"Hc" = (
/obj/effect/floor_decal/milspec/color/red/half{
dir = 9
@@ -5235,6 +5273,14 @@
},
/turf/simulated/floor/tiled/milspec,
/area/aro3/atmos)
"Im" = (
/obj/structure/prop/tgmc_laser/loaded,
/obj/effect/floor_decal/milspec/hatchmarks,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 6
},
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"Io" = (
/obj/structure/cable/cyan{
icon_state = "1-2"
@@ -5977,7 +6023,7 @@
/turf/simulated/wall/tgmc/durawall,
/area/aro3/repair_bay)
"NF" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/effect/floor_decal/milspec/hatchmarks,
/turf/simulated/floor/tiled/milspec,
/area/aro3/workshop)
"NG" = (
@@ -6172,6 +6218,14 @@
},
/turf/simulated/floor/plating/eris/under,
/area/aro3/atmos)
"OM" = (
/obj/structure/prop/tgmc_laser/loaded,
/obj/effect/floor_decal/milspec/hatchmarks,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 10
},
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"ON" = (
/obj/structure/table/steel,
/obj/item/weapon/storage/toolbox/electrical,
@@ -6226,6 +6280,13 @@
/obj/effect/floor_decal/milspec/monotile,
/turf/simulated/floor/tiled/milspec,
/area/aro3/surfluid)
"Pa" = (
/obj/effect/floor_decal/milspec/color/red/half{
dir = 9
},
/obj/structure/prop/tgmc_missile/double,
/turf/simulated/floor/tiled/milspec,
/area/aro3/flight_deck)
"Pb" = (
/obj/machinery/light{
dir = 1
@@ -6359,6 +6420,11 @@
},
/turf/simulated/floor/tiled/milspec,
/area/aro3/power)
"Qd" = (
/obj/structure/prop/tgmc_minirockets,
/obj/effect/floor_decal/milspec/hatchmarks,
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"Qe" = (
/obj/effect/floor_decal/milspec/hatchmarks,
/turf/simulated/floor/tiled/milspec,
@@ -6392,6 +6458,7 @@
/obj/effect/floor_decal/milspec/color/red/half{
dir = 10
},
/obj/structure/prop/tgmc_missile/fatty,
/turf/simulated/floor/tiled/milspec,
/area/aro3/flight_deck)
"QB" = (
@@ -6805,8 +6872,8 @@
/turf/space,
/area/space)
"TM" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/light,
/obj/effect/floor_decal/milspec/hatchmarks,
/turf/simulated/floor/tiled/milspec,
/area/aro3/workshop)
"TN" = (
@@ -6933,6 +7000,13 @@
},
/turf/simulated/floor/tiled/milspec,
/area/aro3/eva_hall)
"UL" = (
/obj/effect/floor_decal/milspec/hatchmarks,
/obj/effect/floor_decal/industrial/warning/dust{
dir = 9
},
/turf/simulated/floor/tiled/techmaint/airless,
/area/space)
"UM" = (
/turf/simulated/wall/tgmc/durawall/deco1,
/area/aro3/atmos)
@@ -11400,8 +11474,8 @@ Ua
Ua
Ua
Ua
hD
hD
pO
Qd
tp
Ua
Ua
@@ -15499,8 +15573,8 @@ Ua
Ua
Ua
yn
hD
hD
UL
Hb
hD
hD
hD
@@ -15641,8 +15715,8 @@ Ua
Ua
Ua
yn
hD
hD
ot
Ab
hD
hD
hD
@@ -15783,8 +15857,8 @@ Ua
Ua
Ua
yn
hD
hD
lJ
Im
hD
hD
hD
@@ -16961,7 +17035,7 @@ NC
Ty
To
Iq
Hc
Pa
QA
HE
HE
@@ -19333,8 +19407,8 @@ Ua
Ua
Ua
yn
hD
hD
UL
OM
hD
hD
hD
@@ -19475,8 +19549,8 @@ Ua
Ua
Ua
yn
hD
hD
ot
Ab
hD
hD
hD
@@ -19617,8 +19691,8 @@ Ua
Ua
Ua
yn
hD
hD
lJ
sX
hD
hD
hD
@@ -23754,8 +23828,8 @@ Ua
Ua
Ua
Ua
hD
hD
pO
Qd
AA
Ua
Ua
File diff suppressed because it is too large Load Diff
+1
View File
@@ -24,6 +24,7 @@
#include "code\world.dm"
#include "code\__datastructures\globals.dm"
#include "code\__defines\__513_compatibility.dm"
#include "code\__defines\__outdated_compatibility.dm"
#include "code\__defines\_compile_options.dm"
#include "code\__defines\_lists.dm"
#include "code\__defines\_planes+layers.dm"