Merge pull request #11287 from VOREStation/master
July 28th 2021 Update
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -31,6 +31,7 @@ greennyy - Protean
|
||||
hawkerthegreat - Vox
|
||||
hollifex - Diona
|
||||
huenererschrecker - Xenochimera
|
||||
hunterbirk - Xenochimera
|
||||
h0lysquirr3l - Protean
|
||||
idcaboutaname - Protean
|
||||
inuzari - Diona
|
||||
|
||||
|
Before Width: | Height: | Size: 810 KiB After Width: | Height: | Size: 810 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 39 KiB |
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||