mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
MILLA phase 2 (#27659)
* MILLA phase 2 * Lint. * Build Rust library * Assorted bugfixes and tweaks * Simplify fire mechanics and make hotspot sending to DM more reliable. * Assorted tweaks, fixed an issue in the core engine and removed the softcap it made necesary. * SM fixes, slower plasmafire, less overpowered pyro anomalies, and air alarm improvements. * Review fixes. * Build Rust library * Unbalanced icon. * Rebalance immovable rods. * Unbalanced has alerts, can fight airflow (but get slowed) * Build Rust library * Stronger space cooling, slower temperature flow, faster burns, burnt floors, and a hotspot display fix. * Build Rust library * Tweaks to avoid merge conflict * Oops. * Build Rust library * Rebalance wind. * Rebalance temperature flow and space cooling. * Fix gas flamethrower. * Build Rust library * Make air push slowdown directional, so you don't get slowed while moving with the air. * Variable name cleanup. * Reduce the speed of wind pushes. * Prevent wind pushes from breaking your pull. * Prevent swaps during wind push. * Made supermatter crytals reliably run last in atmos machinery. * Sped up plasmafire burning, but dropped the minimum burn amount. * Rebalanced SM heat output. * Rebalanced pyro anomaly. * Build Rust library * Lint * Build Rust library * Uncap fuel burnt readout. * Added Custom air alarm mode, dropped Refill cap to ONE_ATMOSPHERE. * Updated air alarm modes to use pressure settings instead of ONE_ATMOSPHERE * Added a list of areas not in Filtering to atmos alert computer. * Increase pressure gradient and vent output, especially at low distro pressure. * Changed Immovable Rod from Moderate to Major. * Lint * Build Rust library * More lint! * Build Rust library * Magboots, scaled slowdown, and nukie borg immunity * Wind image * Wind v2 * Wind v3 * pngcrush * pngcrush again * Moved hotspot removal into SSair, add wind effect. * Lint * Build Rust library * Fix hotspots. * Hotspot visual based on gas burnt * Build Rust library * Scaled wind to gas amount, stopped first wind push while moving. * Made Rust panic logging safer. * Made MILLA full tick and sleep timers more honest. * Pressure overlay, ghost mode, atmos goggles. * Build Rust library * Lint * Build Rust library * More lint-y stuff. * Build Rust library * Repair pressure overlay if it loses its loc. * Bind pressure overlays to their tile better. * Build Rust library * Make the pressure overlay work on z=1 and not proliferate effects. * Don't block the supply shuttle. * Don't fine for special effects. * Maybe don't fine for ghosts, either. * Build Rust library * Make pressure overlay play nice with shuttles. * Build Rust library * Pressure scanning for borgs. * Build Rust library * Lint * Build Rust library * Made explosions not generate so much wind. * Removed an old and non-functional proc. * Clientless mobs can get pushed again. * Build Rust library * cargo fmt * Build Rust library * Don't divide by zero. * Plasmafire generator for the Shadow * Update shadow to use plasmafire generators * Fix shadow's plasmafire generators going out on depart. * Prevent heat2color from runtiming at absolute zero. * Better nanofrost * Build Rust library * Singularity immunity * Build Rust library * Add back meson mode to atmospheric scanner goggles, so they don't stare deeply into the SM * Build Rust library * Dump panic outputs into data/ instead. * Build Rust library * Apply suggestions from code review Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Signed-off-by: Charlie Nolan <funnyman3595@gmail.com> * Saner handling of MILLA crash. * Build Rust library --------- Signed-off-by: Charlie Nolan <funnyman3595@gmail.com> Co-authored-by: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
co-authored by
Burzah
paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com>
parent
b7c800727e
commit
e6f99049f6
@@ -30,6 +30,8 @@
|
||||
RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_UNKNOWN), PROC_REF(on_unknown_trait))
|
||||
RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_UNKNOWN), PROC_REF(on_unknown_trait))
|
||||
|
||||
RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_PRESSURE_VISION), PROC_REF(on_pressure_vision_trait_gain))
|
||||
RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_PRESSURE_VISION), PROC_REF(on_pressure_vision_trait_loss))
|
||||
|
||||
/// Called when [TRAIT_KNOCKEDOUT] is added to the mob.
|
||||
/mob/living/proc/on_knockedout_trait_gain(datum/source)
|
||||
@@ -172,3 +174,17 @@
|
||||
/mob/living/proc/on_unknown_trait_part_2()
|
||||
name = get_visible_name()
|
||||
sec_hud_set_ID()
|
||||
|
||||
/// Called when [TRAIT_PRESSURE_VISION] is added to the mob.
|
||||
/mob/living/proc/on_pressure_vision_trait_gain(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
var/datum/atom_hud/data/pressure/hud = GLOB.huds[DATA_HUD_PRESSURE]
|
||||
if(!(src in hud.hudusers))
|
||||
hud.add_hud_to(src)
|
||||
|
||||
/// Called when [TRAIT_PRESSURE_VISION] is removed from the mob.
|
||||
/mob/living/proc/on_pressure_vision_trait_loss(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
var/datum/atom_hud/data/pressure/hud = GLOB.huds[DATA_HUD_PRESSURE]
|
||||
if(src in hud.hudusers)
|
||||
hud.remove_hud_from(src)
|
||||
|
||||
@@ -121,6 +121,10 @@
|
||||
if(moving_diagonally) //no mob swap during diagonal moves.
|
||||
return TRUE
|
||||
|
||||
if(has_status_effect(STATUS_EFFECT_UNBALANCED))
|
||||
// Don't swap while being shoved by air.
|
||||
return TRUE
|
||||
|
||||
if(a_intent == INTENT_HELP) // Help intent doesn't mob swap a mob pulling a structure
|
||||
if(isstructure(M.pulling) || isstructure(pulling))
|
||||
return TRUE
|
||||
@@ -589,6 +593,11 @@
|
||||
/mob/living/proc/UpdateDamageIcon()
|
||||
return
|
||||
|
||||
/mob/living/get_spacemove_backup(movement_dir)
|
||||
if(movement_dir == 0 && has_status_effect(STATUS_EFFECT_UNBALANCED))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/Move(atom/newloc, direct, movetime)
|
||||
if(buckled && buckled.loc != newloc) //not updating position
|
||||
if(!buckled.anchored)
|
||||
@@ -683,41 +692,7 @@
|
||||
/mob/living/experience_pressure_difference(flow_x, flow_y, pressure_resistance_prob_delta = 0)
|
||||
if(buckled)
|
||||
return
|
||||
if(client && client.move_delay >= world.time + world.tick_lag * 2)
|
||||
pressure_resistance_prob_delta -= 30
|
||||
|
||||
var/list/turfs_to_check = list()
|
||||
|
||||
if(has_limbs)
|
||||
var/direction = 0
|
||||
if(flow_x > 100)
|
||||
direction |= EAST
|
||||
if(flow_x < -100)
|
||||
direction |= WEST
|
||||
if(flow_y > 100)
|
||||
direction |= NORTH
|
||||
if(flow_y < -100)
|
||||
direction |= SOUTH
|
||||
|
||||
var/turf/T = get_step(src, angle2dir(dir2angle(direction) + 90))
|
||||
if(T)
|
||||
turfs_to_check += T
|
||||
|
||||
T = get_step(src, angle2dir(dir2angle(direction) - 90))
|
||||
if(T)
|
||||
turfs_to_check += T
|
||||
|
||||
for(var/t in turfs_to_check)
|
||||
T = t
|
||||
if(T.density)
|
||||
pressure_resistance_prob_delta -= 20
|
||||
continue
|
||||
for(var/atom/movable/AM in T)
|
||||
if(AM.density && AM.anchored)
|
||||
pressure_resistance_prob_delta -= 20
|
||||
break
|
||||
|
||||
..(flow_x, flow_y, pressure_resistance_prob_delta)
|
||||
..()
|
||||
|
||||
/*//////////////////////
|
||||
START RESIST PROCS
|
||||
@@ -982,6 +957,29 @@
|
||||
var/datum/status_effect/incapacitating/slowed/S = IsSlowed()
|
||||
if(S)
|
||||
. += S.slowdown_value
|
||||
else
|
||||
// Only apply directional slow if we don't have a full slow.
|
||||
var/datum/status_effect/incapacitating/directional_slow/DS = has_status_effect(STATUS_EFFECT_DIRECTIONAL_SLOW)
|
||||
if(DS)
|
||||
if(DS.direction == last_move)
|
||||
// Moving directly in the direction we're slowed, full penalty
|
||||
. += DS.slowdown_value
|
||||
else if(REVERSE_DIR(DS.direction) == last_move)
|
||||
// Moving directly opposite to the slow, no penalty.
|
||||
// Lint doesn't like this block being empty so, uh, add zero, I guess.
|
||||
. += 0
|
||||
else if(IS_DIR_CARDINAL(DS.direction) || IS_DIR_CARDINAL(last_move))
|
||||
if(DS.direction & last_move)
|
||||
// Moving roughly in the direction we're slowed, full penalty.
|
||||
. += DS.slowdown_value
|
||||
else if(!(REVERSE_DIR(DS.direction) & last_move))
|
||||
// Moving perpendicular to the slow, partial penalty.
|
||||
. += DS.slowdown_value / 2
|
||||
// Moving roughly opposite to the slow, no penalty.
|
||||
else
|
||||
// Diagonal move perpendicular to the slow, partial penalty.
|
||||
. += DS.slowdown_value / 2
|
||||
|
||||
if(forced_look)
|
||||
. += DIRECTION_LOCK_SLOWDOWN
|
||||
if(ignorewalk)
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
if(!G || G.oxygen() < 1)
|
||||
ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire
|
||||
return FALSE
|
||||
T.hotspot_expose(700, 50, 1)
|
||||
T.hotspot_expose(700, 10)
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_FIRE_TICK)
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -512,26 +512,26 @@ STATUS EFFECTS
|
||||
/mob/living/proc/IsSlowed()
|
||||
return has_status_effect(STATUS_EFFECT_SLOWED)
|
||||
|
||||
/mob/living/proc/Slowed(amount, _slowdown_value)
|
||||
/mob/living/proc/Slowed(amount, slowdown_value)
|
||||
var/datum/status_effect/incapacitating/slowed/S = IsSlowed()
|
||||
if(S)
|
||||
S.duration = max(world.time + amount, S.duration)
|
||||
S.slowdown_value = _slowdown_value
|
||||
S.slowdown_value = slowdown_value
|
||||
else if(amount > 0)
|
||||
S = apply_status_effect(STATUS_EFFECT_SLOWED, amount, _slowdown_value)
|
||||
S = apply_status_effect(STATUS_EFFECT_SLOWED, amount, slowdown_value)
|
||||
return S
|
||||
|
||||
/mob/living/proc/SetSlowed(amount, _slowdown_value)
|
||||
/mob/living/proc/SetSlowed(amount, slowdown_value)
|
||||
var/datum/status_effect/incapacitating/slowed/S = IsSlowed()
|
||||
if(amount <= 0 || _slowdown_value <= 0)
|
||||
if(amount <= 0 || slowdown_value <= 0)
|
||||
if(S)
|
||||
qdel(S)
|
||||
else
|
||||
if(S)
|
||||
S.duration = amount
|
||||
S.slowdown_value = _slowdown_value
|
||||
S.slowdown_value = slowdown_value
|
||||
else
|
||||
S = apply_status_effect(STATUS_EFFECT_SLOWED, amount, _slowdown_value)
|
||||
S = apply_status_effect(STATUS_EFFECT_SLOWED, amount, slowdown_value)
|
||||
return S
|
||||
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#define MODE_MESON "meson"
|
||||
#define MODE_TRAY "t-ray"
|
||||
#define MODE_RAD "radiation"
|
||||
#define MODE_PRESSURE "pressure"
|
||||
#define RAD_RANGE 5
|
||||
|
||||
/datum/action/innate/robot_sight/engineering_scanner
|
||||
@@ -47,7 +48,7 @@
|
||||
sight_mode = BORGMESON
|
||||
button_overlay_icon = 'icons/obj/clothing/glasses.dmi'
|
||||
button_overlay_icon_state = "trayson-meson"
|
||||
var/list/mode_list = list(MODE_NONE = MODE_MESON, MODE_MESON = MODE_TRAY, MODE_TRAY = MODE_RAD, MODE_RAD = MODE_NONE)
|
||||
var/list/mode_list = list(MODE_NONE = MODE_MESON, MODE_MESON = MODE_TRAY, MODE_TRAY = MODE_RAD, MODE_RAD = MODE_PRESSURE, MODE_PRESSURE = MODE_NONE)
|
||||
var/mode = MODE_NONE
|
||||
|
||||
/datum/action/innate/robot_sight/engineering_scanner/Activate()
|
||||
@@ -67,8 +68,13 @@
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
if(mode == MODE_PRESSURE)
|
||||
ADD_TRAIT(R, TRAIT_PRESSURE_VISION, "borgsight")
|
||||
else
|
||||
REMOVE_TRAIT(R, TRAIT_PRESSURE_VISION, "borgsight")
|
||||
|
||||
/datum/action/innate/robot_sight/engineering_scanner/Deactivate()
|
||||
return
|
||||
REMOVE_TRAIT(owner, TRAIT_PRESSURE_VISION, "borgsight")
|
||||
|
||||
/datum/action/innate/robot_sight/engineering_scanner/process()
|
||||
var/mob/living/silicon/robot/user = owner
|
||||
@@ -84,6 +90,7 @@
|
||||
#undef MODE_MESON
|
||||
#undef MODE_TRAY
|
||||
#undef MODE_RAD
|
||||
#undef MODE_PRESSURE
|
||||
#undef RAD_RANGE
|
||||
|
||||
/datum/action/innate/robot_magpulse
|
||||
|
||||
@@ -25,5 +25,6 @@
|
||||
return ..() || mob_negates_gravity()
|
||||
|
||||
/mob/living/silicon/robot/experience_pressure_difference(flow_x, flow_y)
|
||||
if(!HAS_TRAIT(src, TRAIT_MAGPULSE))
|
||||
return ..()
|
||||
if(HAS_TRAIT(src, TRAIT_MAGPULSE))
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -40,6 +40,11 @@
|
||||
|
||||
playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
|
||||
|
||||
/mob/living/silicon/robot/syndicate/air_push(direction, strength)
|
||||
// Syndicate borgs ignore airflow, because they're bloody expensive.
|
||||
// This should probably be revisited later, as part of a broader move_resist/move_force/pull_force rework.
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/syndicate/medical
|
||||
base_icon = "syndi-medi"
|
||||
icon_state = "syndi-medi"
|
||||
|
||||
@@ -596,7 +596,7 @@ Difficulty: Hard
|
||||
var/obj/effect/hotspot/hotspot = new /obj/effect/hotspot/fake(T)
|
||||
hotspot.temperature = 1000
|
||||
hotspot.recolor()
|
||||
T.hotspot_expose(700,50,1)
|
||||
T.hotspot_expose(700, 50)
|
||||
if(mode == VORTEX)
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/atom/A in T)
|
||||
|
||||
@@ -282,7 +282,7 @@ Difficulty: Medium
|
||||
var/obj/effect/hotspot/hotspot = new /obj/effect/hotspot/fake(T)
|
||||
hotspot.temperature = 1000
|
||||
hotspot.recolor()
|
||||
T.hotspot_expose(700,50,1)
|
||||
T.hotspot_expose(700, 50)
|
||||
for(var/mob/living/L in T.contents)
|
||||
if((L in hit_list) || L == source)
|
||||
continue
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
IMPMINDSHIELD_HUD = 'icons/mob/hud/sechud.dmi',
|
||||
IMPCHEM_HUD = 'icons/mob/hud/sechud.dmi',
|
||||
IMPTRACK_HUD = 'icons/mob/hud/sechud.dmi',
|
||||
PRESSURE_HUD = 'icons/effects/effects.dmi',
|
||||
)
|
||||
|
||||
for(var/hud in hud_possible)
|
||||
|
||||
Reference in New Issue
Block a user