Skip to content

Commit

Permalink
Tesla shock refactor + rebalancing (#22921)
Browse files Browse the repository at this point in the history
* it started as a quick bugfix, how did we get here

* unused

* stuff

* unused 2

* e
  • Loading branch information
SapphicOverload authored Jan 17, 2025
1 parent be4f159 commit 7c830c5
Show file tree
Hide file tree
Showing 84 changed files with 307 additions and 357 deletions.
32 changes: 16 additions & 16 deletions code/__DEFINES/flags.dm
Original file line number Diff line number Diff line change
Expand Up @@ -41,32 +41,30 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
/// For machines and structures that should not break into parts, eg, holodeck stuff
#define NODECONSTRUCT_1 (1<<7)
/// Prevent clicking things below it on the same turf eg. doors/ fulltile windows
#define PREVENT_CLICK_UNDER_1 (1<<9)
#define PREVENT_CLICK_UNDER_1 (1<<8)
/// Can players recolor this in-game via vendors (and maybe more if support is added)?
#define IS_PLAYER_COLORABLE_1 (1<<10)
/// TESLA_IGNORE grants immunity from being targeted by tesla-style electricity
#define TESLA_IGNORE_1 (1<<11)
#define IS_PLAYER_COLORABLE_1 (1<<9)
/// If a turf can be made dirty at roundstart. This is also used in areas.
#define CAN_BE_DIRTY_1 (1<<12)
#define CAN_BE_DIRTY_1 (1<<10)
/// Should we use the initial icon for display? Mostly used by overlay only objects
#define HTML_USE_INITAL_ICON_1 (1<<13)
#define HTML_USE_INITAL_ICON_1 (1<<11)
/// conducts electricity (metal etc.)
#define CONDUCT_1 (1<<14)
#define CONDUCT_1 (1<<12)
/// should not get harmed if this gets caught by an explosion?
#define PREVENT_CONTENTS_EXPLOSION_1 (1<<15)
#define PREVENT_CONTENTS_EXPLOSION_1 (1<<13)
/// should the contents of this atom be acted upon
#define RAD_PROTECT_CONTENTS_1 (1<<16)
#define RAD_PROTECT_CONTENTS_1 (1<<14)
/// should this object be allowed to be contaminated
#define RAD_NO_CONTAMINATE_1 (1<<17)
#define RAD_NO_CONTAMINATE_1 (1<<15)
/// Prevents most radiation on this turf from leaving it
#define RAD_CONTAIN_CONTENTS (1<<18)
#define RAD_CONTAIN_CONTENTS (1<<16)
/// Is the thing currently spinning?
#define IS_SPINNING_1 (1<<19)
#define IS_SPINNING_1 (1<<17)
/// If this atom has experienced a decal element "init finished" sourced appearance update
/// We use this to ensure stacked decals don't double up appearance updates for no rasin
/// Flag as an optimization, don't make this a trait without profiling
/// Yes I know this is a stupid flag, no you can't take him from me
#define DECAL_INIT_UPDATE_EXPERIENCED_1 (1<<20)
#define DECAL_INIT_UPDATE_EXPERIENCED_1 (1<<18)

//TURF FLAGS
/// If a turf cant be jaunted through.
Expand Down Expand Up @@ -168,9 +166,11 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
//tesla_zap
#define TESLA_MACHINE_EXPLOSIVE (1<<0)
#define TESLA_ALLOW_DUPLICATES (1<<1)
#define TESLA_OBJ_DAMAGE (1<<2)
#define TESLA_MOB_DAMAGE (1<<3)
#define TESLA_MOB_STUN (1<<4)
#define TESLA_NO_CHAINING (1<<2)
#define TESLA_OBJ_DAMAGE (1<<3)
#define TESLA_MOB_DAMAGE (1<<4)
#define TESLA_MOB_STUN (1<<5)
#define TESLA_MOB_GIB (1<<6)

#define TESLA_DEFAULT_FLAGS TESLA_OBJ_DAMAGE | TESLA_MOB_DAMAGE | TESLA_MOB_STUN | TESLA_MACHINE_EXPLOSIVE
#define TESLA_FUSION_FLAGS TESLA_OBJ_DAMAGE | TESLA_MOB_DAMAGE | TESLA_MOB_STUN
Expand Down
27 changes: 13 additions & 14 deletions code/__DEFINES/obj_flags.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,19 @@
#define IN_USE (1<<1) // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
#define CAN_BE_HIT (1<<2) //can this be bludgeoned by items?
#define DANGEROUS_POSSESSION (1<<3) //Admin possession yes/no
#define BEING_SHOCKED (1<<4) // Whether this thing is currently (already) being shocked by a tesla
#define BLOCK_Z_OUT_DOWN (1<<5) // Should this object block z falling from loc?
#define BLOCK_Z_OUT_UP (1<<6) // Should this object block z uprise from loc?
#define BLOCK_Z_IN_DOWN (1<<7) // Should this object block z falling from above?
#define BLOCK_Z_IN_UP (1<<8) // Should this object block z uprise from below?
#define BLOCKS_CONSTRUCTION (1<<9) //! Does this object prevent things from being built on it?
#define BLOCKS_CONSTRUCTION_DIR (1<<10) //! Does this object prevent same-direction things from being built on it?
#define IGNORE_DENSITY (1<<11) //! Can we ignore density when building on this object? (for example, directional windows and grilles)
#define ON_BLUEPRINTS (1<<12) //Are we visible on the station blueprints at roundstart?
#define UNIQUE_RENAME (1<<13) // can you customize the name of the thing?
#define USES_TGUI (1<<14) //put on things that use tgui on ui_interact instead of custom/old UI.
#define FROZEN (1<<15)
#define UNIQUE_REDESC (1<<16) // can you customize the description of the thing?
#define CMAGGED (1<<17)
#define BLOCK_Z_OUT_DOWN (1<<4) // Should this object block z falling from loc?
#define BLOCK_Z_OUT_UP (1<<5) // Should this object block z uprise from loc?
#define BLOCK_Z_IN_DOWN (1<<6) // Should this object block z falling from above?
#define BLOCK_Z_IN_UP (1<<7) // Should this object block z uprise from below?
#define BLOCKS_CONSTRUCTION (1<<8) //! Does this object prevent things from being built on it?
#define BLOCKS_CONSTRUCTION_DIR (1<<9) //! Does this object prevent same-direction things from being built on it?
#define IGNORE_DENSITY (1<<10) //! Can we ignore density when building on this object? (for example, directional windows and grilles)
#define ON_BLUEPRINTS (1<<11) //Are we visible on the station blueprints at roundstart?
#define UNIQUE_RENAME (1<<12) // can you customize the name of the thing?
#define USES_TGUI (1<<13) //put on things that use tgui on ui_interact instead of custom/old UI.
#define FROZEN (1<<14)
#define UNIQUE_REDESC (1<<15) // can you customize the description of the thing?
#define CMAGGED (1<<16)

// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support

Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,8 @@
#define TRAIT_PUSHIMMUNE "push_immunity"
/// Are we immune to shocks?
#define TRAIT_SHOCKIMMUNE "shock_immunity"
/// Completely ignored by tesla zaps
#define TRAIT_TESLA_IGNORE "tesla_ignore"
/// Immunity to low temperature damage
#define TRAIT_RESISTCOLD "resist_cold"
/// Immunity to high temperature damage
Expand Down
30 changes: 22 additions & 8 deletions code/__HELPERS/unsorted.dm
Original file line number Diff line number Diff line change
Expand Up @@ -790,22 +790,36 @@ B --><-- A
sleep(duration)
A.cut_overlay(O)

/// Returns the closest atom of a given type to the source atom.
/proc/get_closest_atom(type, list, source)
var/list/closest_atoms = list()
var/closest_distance
var/closest_distance = INFINITY
for(var/A in list)
if(!istype(A, type))
continue
var/distance = get_dist(source, A)
if(!closest_atoms.len)
if(closest_distance > distance)
closest_distance = distance
closest_atoms = list(A)
else
if(closest_distance > distance)
closest_distance = distance
closest_atoms = list(A)
else if(closest_distance == distance)
closest_atoms += A
else if(closest_distance == distance)
closest_atoms += A
return pick(closest_atoms) //if there are multiple atoms with the same distance, picks randomly from a list of them

/// Returns the closest atom of a given type to the center of a list of atoms. Can be very expensive with large lists.
/proc/get_closest_atom_to_group(type, list, list/sources)
var/list/closest_atoms = list()
var/closest_distance = INFINITY
for(var/A in list)
if(!istype(A, type))
continue
var/distance = 0
for(var/atom/source as anything in sources)
distance += get_dist(source, A)
if(closest_distance > distance)
closest_distance = distance
closest_atoms = list(A)
else if(closest_distance == distance)
closest_atoms += A
return pick(closest_atoms) //if there are multiple atoms with the same distance, picks randomly from a list of them

proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
Expand Down
2 changes: 0 additions & 2 deletions code/_globalvars/bitfields.dm
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ DEFINE_BITFIELD(obj_flags, list(
"IGNORE_DENSITY" = IGNORE_DENSITY,
"IN_USE" = IN_USE,
"CAN_BE_HIT" = CAN_BE_HIT,
"BEING_SHOCKED" = BEING_SHOCKED,
"DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION,
"ON_BLUEPRINTS" = ON_BLUEPRINTS,
"UNIQUE_RENAME" = UNIQUE_RENAME,
Expand Down Expand Up @@ -170,7 +169,6 @@ DEFINE_BITFIELD(flags_1, list(
"ON_BORDER_1" = ON_BORDER_1,
"PREVENT_CLICK_UNDER_1" = PREVENT_CLICK_UNDER_1,
"HOLOGRAM_1" = HOLOGRAM_1,
"TESLA_IGNORE_1" = TESLA_IGNORE_1,
"INITIALIZED_1" = INITIALIZED_1,
"ADMIN_SPAWNED_1" = ADMIN_SPAWNED_1,
"PREVENT_CONTENTS_EXPLOSION_1" = PREVENT_CONTENTS_EXPLOSION_1,
Expand Down
16 changes: 16 additions & 0 deletions code/game/atom_defense.dm
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,22 @@
user.changeNext_move(CLICK_CD_MELEE)
return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration)

/// Called when the atom is hit by a tesla bolt.
/atom/proc/tesla_act(source, power, zap_range, tesla_flags, list/shocked_targets)
if(HAS_TRAIT(src, TRAIT_TESLA_IGNORE))
return FALSE
if(!(tesla_flags & TESLA_ALLOW_DUPLICATES))
ADD_TRAIT(src, TRAIT_TESLA_IGNORE, WAS_SHOCKED)
addtimer(CALLBACK(src, PROC_REF(reset_shocked)), 10)
if(power < TESLA_MINI_POWER) //tesla bolts bounce twice, tesla miniball bolts bounce only once
return TRUE
if(!(tesla_flags & TESLA_NO_CHAINING) && power >= 1500 && zap_range > 3)
tesla_zap(src, zap_range - 1, power * 0.67, tesla_flags, shocked_targets)
return TRUE

/atom/proc/reset_shocked()
REMOVE_TRAIT(src, TRAIT_TESLA_IGNORE, WAS_SHOCKED)

/// Called after the atom takes damage and integrity is below integrity_failure level
/atom/proc/atom_break(damage_flag)
SHOULD_CALL_PARENT(TRUE)
Expand Down
8 changes: 8 additions & 0 deletions code/game/atoms_movable.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1385,3 +1385,11 @@
if(destination)
forceMove(destination)
return TRUE

//The surgeon general warns that being buckled to certain objects receiving powerful shocks is greatly hazardous to your health
///Only tesla coils and grounding rods currently call this because mobs are already targeted over all other objects, but this might be useful for more things later.
/atom/movable/proc/tesla_buckle_check(strength)
if(has_buckled_mobs())
for(var/m in buckled_mobs)
var/mob/living/buckled_mob = m
buckled_mob.electrocute_act((clamp(round(strength/400), 10, 90) + rand(-5, 5)), src, tesla_shock = TRUE)
15 changes: 6 additions & 9 deletions code/game/machinery/_machinery.dm
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ Class Procs:

/obj/machinery/Initialize(mapload)
if(!armor)
armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70)
armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, ELECTRIC = 0)
. = ..()
SSmachines.register_machine(src)
GLOB.machines += src
Expand Down Expand Up @@ -633,15 +633,12 @@ Class Procs:
/obj/machinery/proc/can_be_overridden()
. = 1

/obj/machinery/tesla_act(power, tesla_flags, shocked_objects, zap_gib = FALSE)
..()
if((tesla_flags & TESLA_MACHINE_EXPLOSIVE) && !(resistance_flags & INDESTRUCTIBLE))
if(prob(60))
ex_act(EXPLODE_DEVASTATE)
else if (prob(50))
explosion(src, 1, 2, 4, flame_range = 2, adminlog = FALSE, smoke = FALSE)
/obj/machinery/tesla_act(source, power, zap_range, tesla_flags, shocked_objects)
. = ..()
if((tesla_flags & TESLA_MACHINE_EXPLOSIVE) && !(resistance_flags & INDESTRUCTIBLE) && prob(25))
explosion(src, 1, 2, 4, flame_range = 2, adminlog = FALSE, smoke = FALSE)
if(tesla_flags & TESLA_OBJ_DAMAGE)
take_damage(power/2000, BURN, ENERGY)
take_damage(power / 1000, BURN, ELECTRIC)
if(prob(40))
emp_act(EMP_LIGHT)

Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/airlock_cycle_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
req_access = list(ACCESS_ATMOSPHERICS)
max_integrity = 250
integrity_failure = 80
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, ELECTRIC = 100)
resistance_flags = FIRE_PROOF

FASTDMM_PROP(\
Expand Down
3 changes: 2 additions & 1 deletion code/game/machinery/barsigns.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@
melee = 20
bullet = 20
laser = 20
energy = 100
energy = 20
fire = 50
acid = 50
electric = 100

MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32)

Expand Down
4 changes: 2 additions & 2 deletions code/game/machinery/doors/airlock_types.dm
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@
normal_integrity = 400 // reverse engieneerd: 400 * 1.5 (sec lvl 6) = 600 = original
security_level = 6
rad_insulation = RAD_FULL_INSULATION
armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70) //only changed energy to 100
armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70, ELECTRIC = 100) //only changed energy to 100

//////////////////////////////////
/*
Expand Down Expand Up @@ -411,7 +411,7 @@
security_level = 1
damage_deflection = 30
rad_insulation = RAD_FULL_INSULATION
armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70) //only changed energy to 100
armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70, ELECTRIC = 100) //only changed energy to 100

//////////////////////////////////
/*
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/doors/passworddoor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
explosion_block = 3
heat_proof = TRUE
max_integrity = 600
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, ELECTRIC = 100)
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
damage_deflection = 70
var/password = "Swordfish"
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/doors/poddoor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
heat_proof = TRUE
safe = FALSE
max_integrity = 600
armor = list(MELEE = 50, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
armor = list(MELEE = 50, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70, ELECTRIC = 100)
resistance_flags = FIRE_PROOF
damage_deflection = 70
poddoor = TRUE
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/doors/shutters.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
layer = SHUTTER_LAYER
closingLayer = SHUTTER_LAYER
damage_deflection = 20
armor = list(MELEE = 50, BULLET = 80, LASER = 80, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
armor = list(MELEE = 50, BULLET = 80, LASER = 80, ENERGY = 80, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70, ELECTRIC = 100)

/obj/machinery/door/poddoor/shutters/preopen
icon_state = "open"
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/shuttle/shuttle_heater.dm
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

density = TRUE
max_integrity = 400
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 30)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 30, ELECTRIC = 100)
layer = OBJ_LAYER
showpipe = TRUE

Expand Down
14 changes: 12 additions & 2 deletions code/game/mecha/mecha_defense.dm
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,15 @@
log_message("Hit by [AM].", LOG_MECHA, color="red")
. = ..()

/obj/mecha/tesla_act(source, power, tesla_flags, shocked_targets)
. = ..()
if((tesla_flags & TESLA_MOB_DAMAGE|TESLA_OBJ_DAMAGE))
var/effects_scaling = (power/160)**(1/3)
take_damage(round(3 * effects_scaling), BURN, ELECTRIC)
adjust_overheat(min(effects_scaling * (100 - armor.getRating(ELECTRIC)) / 100, OVERHEAT_EMP_MAX - overheat))
if(wrecked && (tesla_flags & TESLA_MACHINE_EXPLOSIVE))
ADD_TRAIT(src, TRAIT_TESLA_IGNORE, INNATE_TRAIT)
detonate(2, FALSE)

/obj/mecha/bullet_act(obj/projectile/incoming)
if((!enclosed || incoming.penetration_flags & PENETRATE_OBJECTS) && occupant && !silicon_pilot && !incoming.force_hit && (incoming.def_zone == BODY_ZONE_HEAD || incoming.def_zone == BODY_ZONE_CHEST)) //allows bullets to hit the pilot of open-canopy mechs
Expand Down Expand Up @@ -492,11 +501,12 @@
playsound(src, 'sound/machines/triple_beep.ogg', 75, TRUE)
addtimer(CALLBACK(src, PROC_REF(detonate), self_destruct), 0.5 SECONDS)

/obj/mecha/proc/detonate(explosion_size)
/obj/mecha/proc/detonate(explosion_size, self_delete = TRUE)
if(QDELETED(src))
return
explosion(get_turf(src), round(explosion_size / 4), round(explosion_size / 2), round(explosion_size))
qdel(src)
if(self_delete)
qdel(src)

/obj/mecha/atom_fix()
. = ..()
Expand Down
1 change: 1 addition & 0 deletions code/game/mecha/medical/odysseus.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
name = "\improper Odysseus"
icon_state = "odysseus"
step_in = 2
armor = list(MELEE = 20, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, ELECTRIC = 75)
max_temperature = 15000
max_integrity = 240
integrity_failure = 120
Expand Down
2 changes: 1 addition & 1 deletion code/game/mecha/working/clarke.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
light_power = 7
deflect_chance = 10
flags_1 = HEAR_1 | RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1
armor = list(MELEE = 25, BULLET = 10, LASER = 20, ENERGY = 0, BOMB = 60, BIO = 0, RAD = 100, FIRE = 100, ACID = 100)
armor = list(MELEE = 25, BULLET = 10, LASER = 20, ENERGY = 0, BOMB = 60, BIO = 0, RAD = 100, FIRE = 100, ACID = 100, ELECTRIC = 50)
max_equip = 7
enter_delay = 40
pivot_step = TRUE
Expand Down
6 changes: 3 additions & 3 deletions code/game/mecha/working/ripley.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
max_integrity = 400
integrity_failure = 200
deflect_chance = 15
armor = list(MELEE = 40, BULLET = 20, LASER = 10, ENERGY = 0, BOMB = 40, BIO = 0, RAD = 20, FIRE = 100, ACID = 100)
armor = list(MELEE = 40, BULLET = 20, LASER = 10, ENERGY = 0, BOMB = 40, BIO = 0, RAD = 20, FIRE = 100, ACID = 100, ELECTRIC = 75)
max_equip = 6
internals_req_access = list(ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_MINING, ACCESS_MECH_RUINS)
var/list/cargo = new
Expand Down Expand Up @@ -75,7 +75,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
weather_protection = WEATHER_LAVA|WEATHER_STORM
flags_1 = HEAR_1 | RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1
armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, ELECTRIC = 100)
enclosed = TRUE
enter_delay = 40
silicon_icon_state = null
Expand Down Expand Up @@ -113,7 +113,7 @@

/obj/mecha/working/ripley/deathripley/real
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE. FOR REAL"
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 90, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 90, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, ELECTRIC = 75)
fast_pressure_step_in = 1.5
slow_pressure_step_in = 3
step_in = 3
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/crab17.dm
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
icon = 'icons/obj/money_machine.dmi'
icon_state = "bogdanoff"
layer = TABLE_LAYER //So that the crate inside doesn't appear underneath
armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 100, BIO = 0, RAD = 0, FIRE = 100, ACID = 80)
armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 0, RAD = 0, FIRE = 100, ACID = 80, ELECTRIC = 100)
density = TRUE
pixel_z = -8
layer = LARGE_MOB_LAYER
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/puzzle_pieces.dm
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
explosion_block = 3
heat_proof = TRUE
max_integrity = 600
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, ELECTRIC = 100)
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
damage_deflection = 70
var/puzzle_id = null //Make sure that the key has the same puzzle_id as the keycard door!
Expand Down
Loading

0 comments on commit 7c830c5

Please sign in to comment.