I-carry-onward

This commit is contained in:
Fox McCloud
2019-10-06 00:26:03 -04:00
parent 67dc33ac3f
commit 9e03f75a4b
34 changed files with 283 additions and 302 deletions

View File

@@ -968,7 +968,7 @@
/turf/simulated/floor/mineral/bananium/lubed,
/area/ruin/powered/clownplanet)
"bD" = (
/obj/effect/decal/mecha_wreckage/honker,
/obj/structure/mecha_wreckage/honker,
/obj/structure/disposalpipe/segment{
dir = 4;
invisibility = 101

View File

@@ -91,7 +91,7 @@
},
/area/ruin/powered)
"s" = (
/obj/effect/decal/mecha_wreckage/phazon,
/obj/structure/mecha_wreckage/phazon,
/turf/simulated/shuttle/floor{
tag = "icon-floor2";
icon_state = "floor2"
@@ -104,14 +104,14 @@
},
/area/ruin/powered)
"u" = (
/obj/effect/decal/mecha_wreckage/ripley/firefighter,
/obj/structure/mecha_wreckage/ripley/firefighter,
/turf/simulated/shuttle/floor{
tag = "icon-floor2";
icon_state = "floor2"
},
/area/ruin/powered)
"v" = (
/obj/effect/decal/mecha_wreckage/ripley,
/obj/structure/mecha_wreckage/ripley,
/turf/simulated/shuttle/floor{
tag = "icon-floor2";
icon_state = "floor2"
@@ -150,7 +150,7 @@
},
/area/ruin/powered)
"A" = (
/obj/effect/decal/mecha_wreckage/durand,
/obj/structure/mecha_wreckage/durand,
/turf/simulated/shuttle/floor{
tag = "icon-floor2";
icon_state = "floor2"
@@ -194,7 +194,7 @@
/turf/simulated/floor/plating/airless,
/area/ruin/powered)
"J" = (
/obj/effect/decal/mecha_wreckage/odysseus,
/obj/structure/mecha_wreckage/odysseus,
/turf/simulated/shuttle/floor{
tag = "icon-floor2";
icon_state = "floor2"
@@ -205,7 +205,7 @@
/turf/space,
/area/space/nearstation)
"L" = (
/obj/effect/decal/mecha_wreckage/gygax,
/obj/structure/mecha_wreckage/gygax,
/turf/simulated/shuttle/floor{
tag = "icon-floor3";
icon_state = "floor3"

View File

@@ -3156,7 +3156,7 @@
},
/area/awaymission/BMPship/Aft)
"ia" = (
/obj/effect/decal/mecha_wreckage/ripley,
/obj/structure/mecha_wreckage/ripley,
/turf/simulated/floor/plating/airless,
/area/awaymission)
"ib" = (

View File

@@ -3483,7 +3483,7 @@
},
/area/awaymission/centcomAway/general)
"iP" = (
/obj/effect/decal/mecha_wreckage/ripley,
/obj/structure/mecha_wreckage/ripley,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -4924,7 +4924,7 @@
},
/area/awaymission/centcomAway/general)
"lW" = (
/obj/effect/decal/mecha_wreckage/seraph,
/obj/structure/mecha_wreckage/seraph,
/turf/simulated/floor/plasteel{
tag = "icon-vault (NORTHEAST)";
icon_state = "vault";

View File

@@ -9138,7 +9138,7 @@
},
/area/admin)
"vH" = (
/obj/effect/decal/mecha_wreckage/phazon,
/obj/structure/mecha_wreckage/phazon,
/turf/unsimulated/floor{
tag = "icon-floor";
icon_state = "floor"

View File

@@ -56,18 +56,6 @@
if(overmind) //we should have an overmind, but...
overmind.update_health_hud()
/obj/structure/blob/core/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
return
/obj/structure/blob/core/update_icon()
cut_overlays()
color = null
var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob")
if(overmind)
blob_overlay.color = overmind.blob_reagent_datum.color
add_overlay(blob_overlay)
add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay"))
/obj/structure/blob/core/RegenHealth()
return // Don't regen, we handle it in Life()

View File

@@ -20,9 +20,6 @@
var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay")
src.overlays += C
/obj/structure/blob/node/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
return
/obj/structure/blob/node/Destroy()
blob_nodes -= src
STOP_PROCESSING(SSobj, src)
@@ -37,12 +34,3 @@
Pulse(5, i, color)
obj_integrity = min(max_integrity, obj_integrity + 1)
color = null
/obj/structure/blob/node/update_icon()
cut_overlays()
color = null
var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob")
if(overmind)
blob_overlay.color = overmind.blob_reagent_datum.color
add_overlay(blob_overlay)
add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_node_overlay"))

View File

@@ -1,7 +1,7 @@
/obj/structure/blob/shield
name = "strong blob"
icon = 'icons/mob/blob.dmi'
icon_state = "blob_idle"
icon_state = "blob_shield"
desc = "Some blob creature thingy"
max_integrity = 150
brute_resist = 0.25
@@ -26,9 +26,6 @@
atmosblock = TRUE
air_update_turf(1)
/obj/structure/blob/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
return
/obj/structure/blob/shield/CanPass(atom/movable/mover, turf/target, height=0)
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
return 0
@@ -36,7 +33,7 @@
/obj/structure/blob/shield/reflective
name = "reflective blob"
desc = "A solid wall of slightly twitching tendrils with a reflective glow."
icon_state = "blob_idle_glow"
icon_state = "blob_glow"
max_integrity = 100
brute_resist = 0.5
explosion_block = 2

View File

@@ -53,12 +53,6 @@
var/atom/movable/mover = caller
. = . || mover.checkpass(PASSBLOB)
/obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind.
if(overmind)
add_atom_colour(overmind.blob_reagent_datum.color, FIXED_COLOUR_PRIORITY)
else
remove_atom_colour(FIXED_COLOUR_PRIORITY)
/obj/structure/blob/process()
Life()
return

View File

@@ -234,8 +234,8 @@
return ..()
/obj/machinery/camera/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
if(!(stat & BROKEN))
return 0
if(stat & BROKEN)
return damage_amount
. = ..()
/obj/machinery/camera/obj_break(damage_flag)

View File

@@ -69,6 +69,7 @@
if(occupant.health >= 0 && occupant.stat == DEAD)
occupant.update_revive()
occupant.lying = 0
update_icon()
sleep(10)
active = 0
add_fingerprint(usr)

View File

@@ -8,18 +8,17 @@
light_color = "#00FF00"
var/prize = /obj/item/stack/tickets
/obj/machinery/computer/arcade/power_change()
..()
if(!(stat & (BROKEN|NOPOWER)))
set_light(2)
else
set_light(0)
/obj/machinery/computer/arcade/proc/Reset()
return
/obj/machinery/computer/arcade/New()
..()
if(!circuit)
var/choice = pick(subtypesof(/obj/machinery/computer/arcade))
new choice(loc)
qdel(src)
return
Reset()
/obj/machinery/computer/arcade/proc/prizevend(var/score)
@@ -65,7 +64,7 @@
var/blocked = 0 //Player cannot attack/heal while set
var/turtle = 0
/obj/machinery/computer/arcade/battle/New()
/obj/machinery/computer/arcade/battle/Reset()
var/name_action
var/name_part1
var/name_part2
@@ -166,7 +165,7 @@
turtle = 0
if(emagged)
New()
Reset()
emagged = 0
add_fingerprint(usr)
@@ -186,7 +185,7 @@
new /obj/item/clothing/head/collectable/petehat(get_turf(src))
message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.")
New()
Reset()
emagged = 0
else
feedback_inc("arcade_win_normal")
@@ -311,7 +310,7 @@
var/spaceport_freebie = 0
var/last_spaceport_action = ""
/obj/machinery/computer/arcade/orion_trail/New()
/obj/machinery/computer/arcade/orion_trail/Reset()
// Sets up the main trail
stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime")
stopblurbs = list(

View File

@@ -453,6 +453,7 @@
to_chat(user, "<span class='notice'>You wrench the frame into place.</span>")
anchored = 1
state = 1
return
if(istype(P, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = P
if(!WT.remove_fuel(0, user))
@@ -471,6 +472,7 @@
to_chat(user, "<span class='notice'>You unfasten the frame.</span>")
anchored = 0
state = 0
return
if(istype(P, /obj/item/circuitboard) && !circuit)
var/obj/item/circuitboard/B = P
if(B.board_type == "computer")
@@ -482,11 +484,13 @@
P.loc = src
else
to_chat(user, "<span class='warning'>This frame does not accept circuit boards of this type!</span>")
return
if(istype(P, /obj/item/screwdriver) && circuit)
playsound(loc, P.usesound, 50, 1)
to_chat(user, "<span class='notice'>You screw the circuit board into place.</span>")
state = 2
icon_state = "2"
return
if(istype(P, /obj/item/crowbar) && circuit)
playsound(loc, P.usesound, 50, 1)
to_chat(user, "<span class='notice'>You remove the circuit board.</span>")
@@ -501,6 +505,7 @@
to_chat(user, "<span class='notice'>You unfasten the circuit board.</span>")
state = 1
icon_state = "1"
return
if(istype(P, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = P
if(C.amount >= 5)
@@ -525,7 +530,7 @@
icon_state = "2"
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc )
A.amount = 5
return
if(istype(P, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/G = P
if(G.amount >= 2)
@@ -549,6 +554,7 @@
state = 3
icon_state = "3"
new /obj/item/stack/sheet/glass(loc, 2)
return
if(istype(P, /obj/item/screwdriver))
playsound(loc, P.usesound, 50, 1)
to_chat(user, "<span class='notice'>You connect the monitor.</span>")
@@ -563,6 +569,7 @@
SC.can_order_contraband = C.contraband_enabled
qdel(src)
return
if(user.a_intent == INTENT_HARM)
return ..()

View File

@@ -19,7 +19,7 @@
/obj/machinery/constructable_frame/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
new /obj/item/stack/sheet/metal(loc, 5)
if(state >= 3)
if(state >= 2)
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil(loc)
A.amount = 5
if(circuit)
@@ -121,8 +121,6 @@
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil(src.loc,5)
A.amount = 5
return
return
if(3)
if(istype(P, /obj/item/crowbar))
playsound(src.loc, P.usesound, 50, 1)
@@ -214,8 +212,10 @@
to_chat(user, "<span class='danger'>You cannot add that to the machine!</span>")
return 0
return
if(user.a_intent == INTENT_HARM)
return ..()
//Machine Frame Circuit Boards
/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit,
micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.

View File

@@ -11,7 +11,7 @@
max_temperature = 30000
infra_luminosity = 8
force = 40
wreckage = /obj/effect/decal/mecha_wreckage/durand
wreckage = /obj/structure/mecha_wreckage/durand
/obj/mecha/combat/durand/GrantActions(mob/living/user, human_occupant = 0)
..()
@@ -41,4 +41,4 @@
max_temperature = 30000
infra_luminosity = 8
force = 40
wreckage = /obj/effect/decal/mecha_wreckage/durand/old
wreckage = /obj/structure/mecha_wreckage/durand/old

View File

@@ -11,7 +11,7 @@
max_temperature = 25000
infra_luminosity = 6
leg_overload_coeff = 2
wreckage = /obj/effect/decal/mecha_wreckage/gygax
wreckage = /obj/structure/mecha_wreckage/gygax
internal_damage_threshold = 35
max_equip = 3
maxsize = 2
@@ -44,7 +44,7 @@
max_temperature = 35000
leg_overload_coeff = 100
operation_req_access = list(access_syndicate)
wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
wreckage = /obj/structure/mecha_wreckage/gygax/dark
max_equip = 4
maxsize = 2
starting_voice = /obj/item/mecha_modkit/voice/syndicate

View File

@@ -11,7 +11,7 @@
max_temperature = 25000
infra_luminosity = 5
operation_req_access = list(access_clown)
wreckage = /obj/effect/decal/mecha_wreckage/honker
wreckage = /obj/structure/mecha_wreckage/honker
add_req_access = 0
max_equip = 3
starting_voice = /obj/item/mecha_modkit/voice/honk

View File

@@ -11,7 +11,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
infra_luminosity = 3
operation_req_access = list(access_cent_specops)
wreckage = /obj/effect/decal/mecha_wreckage/marauder
wreckage = /obj/structure/mecha_wreckage/marauder
add_req_access = 0
internal_damage_threshold = 25
force = 45
@@ -52,7 +52,7 @@
operation_req_access = list(access_cent_commander)
step_in = 3
max_integrity = 550
wreckage = /obj/effect/decal/mecha_wreckage/seraph
wreckage = /obj/structure/mecha_wreckage/seraph
internal_damage_threshold = 20
force = 80
max_equip = 8
@@ -89,7 +89,7 @@
icon_state = "mauler"
initial_icon = "mauler"
operation_req_access = list(access_syndicate)
wreckage = /obj/effect/decal/mecha_wreckage/mauler
wreckage = /obj/structure/mecha_wreckage/mauler
starting_voice = /obj/item/mecha_modkit/voice/syndicate
/obj/mecha/combat/marauder/mauler/loaded/New()

View File

@@ -12,7 +12,7 @@
armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 50, "fire" = 100, "acid" = 100)
max_temperature = 25000
infra_luminosity = 3
wreckage = /obj/effect/decal/mecha_wreckage/phazon
wreckage = /obj/structure/mecha_wreckage/phazon
add_req_access = 1
//operation_req_access = list()
internal_damage_threshold = 25

View File

@@ -9,7 +9,7 @@
deflect_chance = 30
armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_temperature = 15000
wreckage = /obj/effect/decal/mecha_wreckage/reticence
wreckage = /obj/structure/mecha_wreckage/reticence
operation_req_access = list(access_mime)
add_req_access = 0
internal_damage_threshold = 60

View File

@@ -40,10 +40,9 @@
if(isliving(target))
drill_mob(target, chassis.occupant)
playsound(src, 'sound/weapons/drill.ogg', 40, TRUE)
else if(istype(target, /obj))
else if(isobj(target))
var/obj/O = target
//O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target))
O.ex_act(2)//TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target))
playsound(src, 'sound/weapons/drill.ogg', 40, TRUE)
else
set_ready_state(TRUE)

View File

@@ -113,7 +113,6 @@
smoke_system.set_up(3, src)
smoke_system.attach(src)
add_cell()
START_PROCESSING(SSobj, src)
GLOB.poi_list |= src
log_message("[src] created.")
@@ -602,24 +601,31 @@
if(occupant)
occupant.ex_act(severity)
/obj/mecha/handle_atom_del(atom/A)
if(A == occupant)
occupant = null
icon_state = initial(icon_state)+"-open"
setDir(dir_in)
/obj/mecha/Destroy()
if(occupant)
occupant.SetSleeping(destruction_sleep_duration)
go_out()
var/mob/living/silicon/ai/AI
for(var/mob/M in src) //Let's just be ultra sure
if(isAI(M))
M.gib() //AIs are loaded into the mech computer itself. When the mech dies, so does the AI. Forever.
occupant = null
AI = M //AIs are loaded into the mech computer itself. When the mech dies, so does the AI. They can be recovered with an AI card from the wreck.
else
M.forceMove(loc)
for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
E.detach(loc)
qdel(E)
equipment.Cut()
QDEL_NULL(cell)
QDEL_NULL(internal_tank)
if(AI)
AI.gib() //No wreck, no AI to recover
STOP_PROCESSING(SSobj, src)
GLOB.poi_list.Remove(src)
if(loc)
@@ -638,7 +644,7 @@
/obj/mecha/emp_act(severity)
if(get_charge())
use_power((cell.charge/3)/(severity*2))
take_damage(50 / severity, "energy")
take_damage(30 / severity, BURN, "energy", 1)
log_message("EMP detected", 1)
check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL, MECHA_INT_CONTROL_LOST, MECHA_INT_SHORT_CIRCUIT), 1)
@@ -646,7 +652,7 @@
..()
if(exposed_temperature > max_temperature)
log_message("Exposed to dangerous temperature.", 1)
take_damage(5, "fire")
take_damage(5, BURN, 0, 1)
check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL))
//////////////////////
@@ -1355,7 +1361,7 @@
if(cabin_air && cabin_air.return_volume()>0)
cabin_air.temperature = min(6000+T0C, cabin_air.return_temperature()+rand(10,15))
if(cabin_air.return_temperature() > max_temperature/2)
take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1),"fire")
take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1), BURN, 0, 0)
if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank
if(internal_tank)
@@ -1444,7 +1450,7 @@
if(isAI(occupant))
AI = occupant
occupant = null
var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc, AI)
var/obj/structure/mecha_wreckage/WR = new wreckage(loc, AI)
for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
if(E.salvageable && prob(30))
WR.crowbar_salvage += E

View File

@@ -3,170 +3,180 @@
///////////////////////////////////
/obj/effect/decal/mecha_wreckage
name = "Exosuit wreckage"
desc = "Remains of some unfortunate mecha. Completely unrepairable."
/obj/structure/mecha_wreckage
name = "exosuit wreckage"
desc = "Remains of some unfortunate mecha. Completely unrepairable, but perhaps something can be salvaged."
icon = 'icons/mecha/mecha.dmi'
density = 1
anchored = 0
density = TRUE
anchored = FALSE
opacity = 0
var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel,/obj/item/stack/sheet/metal,/obj/item/stack/rods)
var/list/wirecutters_salvage = list(/obj/item/stack/cable_coil)
var/list/crowbar_salvage
var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/metal, /obj/item/stack/rods)
var/salvage_num = 5
var/list/crowbar_salvage = list()
var/wires_removed = FALSE
var/mob/living/silicon/ai/AI //AIs to be salvaged
var/list/parts
/obj/effect/decal/mecha_wreckage/New()
..()
crowbar_salvage = new
/obj/structure/mecha_wreckage/Initialize(mapload, mob/living/silicon/ai/AI_pilot)
. = ..()
if(parts)
for(var/i in 1 to 2)
if(!parts.len)
break
if(prob(60))
continue
var/part = pick(parts)
welder_salvage += part
parts = null
if(!AI_pilot) //Type-checking for this is already done in mecha/Destroy()
return
AI = AI_pilot
AI.apply_damage(150, BURN) //Give the AI a bit of damage from the "shock" of being suddenly shut down
AI.death() //The damage is not enough to kill the AI, but to be 'corrupted files' in need of repair.
AI.forceMove(src) //Put the dead AI inside the wreckage for recovery
add_overlay(mutable_appearance('icons/obj/projectiles.dmi', "green_laser")) //Overlay for the recovery beacon
AI.controlled_mech = null
AI.remote_control = null
/obj/effect/decal/mecha_wreckage/ex_act(severity)
if(severity < 2)
qdel(src)
/obj/structure/mecha_wreckage/Destroy()
QDEL_NULL(AI)
QDEL_LIST(crowbar_salvage)
return ..()
/obj/effect/decal/mecha_wreckage/bullet_act(obj/item/projectile/Proj)
/obj/structure/mecha_wreckage/examine(mob/user)
. = ..()
if(!AI)
return
. += "<span class='notice'>The AI recovery beacon is active.</span>"
/obj/effect/decal/mecha_wreckage/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(salvage_num <= 0)
user.visible_message("[user] begins to slice apart the now completely stripped [src].", "You begin to slice apart the [src].", "You hear the sound of a welder nearby.")
if(WT.remove_fuel(0,user) && do_after(user, 80 * WT.toolspeed, target = src))
user.visible_message("The now-dilapidated [src] falls apart in a clatter.", "As you slice apart the final support structures, the [src] falls apart in a heap.", "You hear metal clanking to the floor.")
new /obj/item/stack/sheet/metal(src.loc)
var/obj/item/stack/rods/rods = new /obj/item/stack/rods(src.loc)
rods.amount = 2
qdel(src)
else
if(isemptylist(welder_salvage))
to_chat(user, "<span class='warning'>What's left on the [src] cannot be removed with a welder, besides the frame itself</span>")
else if(WT.remove_fuel(0,user))
var/type = prob(70)?pick(welder_salvage):null
if(type)
/obj/structure/mecha_wreckage/attackby(obj/item/I, mob/user, params)
if(iswelder(I))
if(salvage_num <= 0 || !length(welder_salvage))
to_chat(user, "<span class='notice'>You don't see anything that can be cut with [I]!</span>")
return
var/obj/item/weldingtool/WT = I
playsound(get_turf(src), WT.usesound, 50, TRUE)
if(!WT.remove_fuel(0, user))
return
if(prob(30))
to_chat(user, "<span class='notice'>You fail to salvage anything valuable from [src]!</span>")
return
var/type = pick(welder_salvage)
var/N = new type(get_turf(user))
user.visible_message("[user] cuts [N] from [src]", "You cut [N] from [src]", "You hear a sound of welder nearby")
if(istype(N, /obj/item/mecha_parts/part))
user.visible_message("[user] cuts [N] from [src].", "<span class='notice'>You cut [N] from [src].</span>")
if(!istype(N, /obj/item/stack))
welder_salvage -= type
salvage_num--
else
to_chat(user, "You failed to salvage anything valuable from [src].")
else
to_chat(user, "<span class='notice'>You need more welding fuel to complete this task.</span>")
else if(istype(W, /obj/item/wirecutters))
if(salvage_num <= 0)
to_chat(user, "You don't see anything that can be cut with [W].")
return
else if(!isemptylist(wirecutters_salvage))
var/type = prob(70)?pick(wirecutters_salvage):null
if(type)
var/N = new type(get_turf(user))
user.visible_message("[user] cuts [N] from [src].", "You cut [N] from [src].")
salvage_num--
else
to_chat(user, "You failed to salvage anything valuable from [src].")
else if(istype(W, /obj/item/crowbar))
if(!isemptylist(crowbar_salvage))
if(iswirecutter(I))
if(wires_removed)
to_chat(user, "<span class='notice'>You don't see anything that can be cut with [I]!</span>")
return
var/N = new /obj/item/stack/cable_coil(get_turf(user), rand(1, 3))
user.visible_message("[user] cuts [N] from [src].", "<span class='notice'>You cut [N] from [src].</span>")
wires_removed = TRUE
return
if(iscrowbar(I))
if(crowbar_salvage.len)
var/obj/S = pick(crowbar_salvage)
if(S)
S.loc = get_turf(user)
S.forceMove(user.drop_location())
user.visible_message("<span class='notice'>[user] pries [S] from [src].</span>", "<span class='notice'>You pry [S] from [src].</span>")
crowbar_salvage -= S
user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].")
else
to_chat(user, "You don't see anything that can be pried with [W].")
else
return
to_chat(user, "<span class='notice'>You don't see anything that can be cut with [I]!</span>")
return
return ..()
/obj/effect/decal/mecha_wreckage/gygax
name = "Gygax wreckage"
icon_state = "gygax-broken"
/obj/structure/mecha_wreckage/transfer_ai(interaction, mob/user, null, obj/item/aicard/card)
if(!..())
return
/obj/effect/decal/mecha_wreckage/gygax/New()
..()
var/list/parts = list(/obj/item/mecha_parts/part/gygax_torso,
//Proc called on the wreck by the AI card.
if(interaction != AI_TRANS_TO_CARD) //AIs can only be transferred in one direction, from the wreck to the card.
return
if(!AI) //No AI in the wreck
to_chat(user, "<span class='warning'>No AI backups found.</span>")
return
cut_overlays() //Remove the recovery beacon overlay
AI.forceMove(card) //Move the dead AI to the card.
if(AI.client) //AI player is still in the dead AI and is connected
to_chat(AI, "The remains of your file system have been recovered on a mobile storage device.")
else //Give the AI a heads-up that it is probably going to get fixed.
AI.notify_ghost_cloning("You have been recovered from the wreckage!", source = card)
to_chat(user, "<span class='boldnotice'>Backup files recovered</span>: [AI.name] ([rand(1000, 9999)].exe) salvaged from [name] and stored within local memory.")
AI = null
/obj/structure/mecha_wreckage/gygax
name = "\improper Gygax wreckage"
icon_state = "gygax-broken"
parts = list(
/obj/item/mecha_parts/part/gygax_torso,
/obj/item/mecha_parts/part/gygax_head,
/obj/item/mecha_parts/part/gygax_left_arm,
/obj/item/mecha_parts/part/gygax_right_arm,
/obj/item/mecha_parts/part/gygax_left_leg,
/obj/item/mecha_parts/part/gygax_right_leg)
for(var/i=0;i<2;i++)
if(!isemptylist(parts) && prob(40))
var/part = pick(parts)
welder_salvage += part
parts -= part
return
/obj/item/mecha_parts/part/gygax_right_leg
)
/obj/effect/decal/mecha_wreckage/gygax/dark
name = "Dark Gygax wreckage"
/obj/structure/mecha_wreckage/gygax/dark
name = "\improper Dark Gygax wreckage"
icon_state = "darkgygax-broken"
/obj/effect/decal/mecha_wreckage/marauder
name = "Marauder wreckage"
/obj/structure/mecha_wreckage/marauder
name = "\improper Marauder wreckage"
icon_state = "marauder-broken"
/obj/effect/decal/mecha_wreckage/mauler
name = "Mauler wreckage"
/obj/structure/mecha_wreckage/mauler
name = "\improper Mauler wreckage"
icon_state = "mauler-broken"
desc = "The syndicate won't be very happy about this..."
/obj/effect/decal/mecha_wreckage/seraph
name = "Seraph wreckage"
/obj/structure/mecha_wreckage/seraph
name = "\improper Seraph wreckage"
icon_state = "seraph-broken"
/obj/effect/decal/mecha_wreckage/reticence
/obj/structure/mecha_wreckage/reticence
name = "\improper Reticence wreckage"
icon_state = "mime-broken"
icon_state = "reticence-broken"
color = "#87878715"
desc = "..."
/obj/effect/decal/mecha_wreckage/ripley
name = "Ripley wreckage"
/obj/structure/mecha_wreckage/ripley
name = "\improper Ripley wreckage"
icon_state = "ripley-broken"
/obj/effect/decal/mecha_wreckage/ripley/New()
..()
var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso,
parts = list(/obj/item/mecha_parts/part/ripley_torso,
/obj/item/mecha_parts/part/ripley_left_arm,
/obj/item/mecha_parts/part/ripley_right_arm,
/obj/item/mecha_parts/part/ripley_left_leg,
/obj/item/mecha_parts/part/ripley_right_leg)
for(var/i=0;i<2;i++)
if(!isemptylist(parts) && prob(40))
var/part = pick(parts)
welder_salvage += part
parts -= part
return
/obj/effect/decal/mecha_wreckage/ripley/firefighter
name = "Firefighter wreckage"
/obj/structure/mecha_wreckage/ripley/mkii
name = "\improper Ripley MK-II wreckage"
icon_state = "ripleymkii-broken"
/obj/structure/mecha_wreckage/ripley/firefighter
name = "\improper Firefighter wreckage"
icon_state = "firefighter-broken"
/obj/effect/decal/mecha_wreckage/ripley/firefighter/New()
..()
var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso,
parts = list(/obj/item/mecha_parts/part/ripley_torso,
/obj/item/mecha_parts/part/ripley_left_arm,
/obj/item/mecha_parts/part/ripley_right_arm,
/obj/item/mecha_parts/part/ripley_left_leg,
/obj/item/mecha_parts/part/ripley_right_leg,
/obj/item/clothing/suit/fire)
for(var/i=0;i<2;i++)
if(!isemptylist(parts) && prob(40))
var/part = pick(parts)
welder_salvage += part
parts -= part
return
/obj/effect/decal/mecha_wreckage/ripley/deathripley
name = "Death-Ripley wreckage"
/obj/structure/mecha_wreckage/ripley/deathripley
name = "\improper Death-Ripley wreckage"
icon_state = "deathripley-broken"
parts = null
/obj/effect/decal/mecha_wreckage/honker
name = "Honker wreckage"
/obj/structure/mecha_wreckage/honker
name = "\improper H.O.N.K wreckage"
icon_state = "honker-broken"
/obj/effect/decal/mecha_wreckage/honker/New()
..()
var/list/parts = list(
desc = "All is right in the universe."
parts = list(
/obj/item/mecha_parts/chassis/honker,
/obj/item/mecha_parts/part/honker_torso,
/obj/item/mecha_parts/part/honker_head,
@@ -174,59 +184,33 @@
/obj/item/mecha_parts/part/honker_right_arm,
/obj/item/mecha_parts/part/honker_left_leg,
/obj/item/mecha_parts/part/honker_right_leg)
for(var/i=0;i<2;i++)
if(!isemptylist(parts) && prob(40))
var/part = pick(parts)
welder_salvage += part
parts -= part
return
/obj/effect/decal/mecha_wreckage/durand
name = "Durand wreckage"
/obj/structure/mecha_wreckage/durand
name = "\improper Durand wreckage"
icon_state = "durand-broken"
/obj/effect/decal/mecha_wreckage/durand/New()
..()
var/list/parts = list(
parts = list(
/obj/item/mecha_parts/part/durand_torso,
/obj/item/mecha_parts/part/durand_head,
/obj/item/mecha_parts/part/durand_left_arm,
/obj/item/mecha_parts/part/durand_right_arm,
/obj/item/mecha_parts/part/durand_left_leg,
/obj/item/mecha_parts/part/durand_right_leg)
for(var/i=0;i<2;i++)
if(!isemptylist(parts) && prob(40))
var/part = pick(parts)
welder_salvage += part
parts -= part
return
/obj/effect/decal/mecha_wreckage/durand/old
name = "Durand wreckage"
/obj/structure/mecha_wreckage/durand/old
icon_state = "old_durand-broken"
/obj/effect/decal/mecha_wreckage/phazon
name = "Phazon wreckage"
/obj/structure/mecha_wreckage/phazon
name = "\improper Phazon wreckage"
icon_state = "phazon-broken"
/obj/effect/decal/mecha_wreckage/odysseus
name = "Odysseus wreckage"
/obj/structure/mecha_wreckage/odysseus
name = "\improper Odysseus wreckage"
icon_state = "odysseus-broken"
/obj/effect/decal/mecha_wreckage/odysseus/New()
..()
var/list/parts = list(
parts = list(
/obj/item/mecha_parts/part/odysseus_torso,
/obj/item/mecha_parts/part/odysseus_head,
/obj/item/mecha_parts/part/odysseus_left_arm,
/obj/item/mecha_parts/part/odysseus_right_arm,
/obj/item/mecha_parts/part/odysseus_left_leg,
/obj/item/mecha_parts/part/odysseus_right_leg)
for(var/i=0;i<2;i++)
if(!isemptylist(parts) && prob(40))
var/part = pick(parts)
welder_salvage += part
parts -= part
return

View File

@@ -6,7 +6,7 @@
step_in = 3
max_temperature = 15000
max_integrity = 120
wreckage = /obj/effect/decal/mecha_wreckage/odysseus
wreckage = /obj/structure/mecha_wreckage/odysseus
internal_damage_threshold = 35
deflect_chance = 15
step_energy_drain = 6

View File

@@ -12,7 +12,7 @@
deflect_chance = 15
armor = list("melee" = 40, "bullet" = 20, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_equip = 6
wreckage = /obj/effect/decal/mecha_wreckage/ripley
wreckage = /obj/structure/mecha_wreckage/ripley
var/list/cargo = new
var/cargo_capacity = 15
var/hides = 0
@@ -72,7 +72,7 @@
lights_power = 7
armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 60, "bio" = 0, "rad" = 70, "fire" = 100, "acid" = 100)
max_equip = 5 // More armor, less tools
wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter
wreckage = /obj/structure/mecha_wreckage/ripley/firefighter
/obj/mecha/working/ripley/deathripley
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
@@ -86,7 +86,7 @@
max_integrity = 300
lights_power = 7
armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 0, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley
wreckage = /obj/structure/mecha_wreckage/ripley/deathripley
step_energy_drain = 0
normal_step_energy_drain = 0

View File

@@ -74,6 +74,7 @@
trigger_alarm()
/obj/structure/displaycase/proc/trigger_alarm()
set waitfor = FALSE
if(alert && is_station_contact(z))
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)

View File

@@ -150,7 +150,7 @@
else
bound_width = world.icon_size
bound_height = width * world.icon_size
update_icon()
..()
/obj/structure/door_assembly/multi_tile/Move()
. = ..()

View File

@@ -25,6 +25,7 @@
/obj/machinery/icemachine/New()
..()
create_reagents(500)
/obj/machinery/icemachine/attackby(obj/item/I, mob/user, params)

View File

@@ -167,7 +167,7 @@
visible_message("<span class='userdanger'>[src] blows apart!</span>")
do_sparks(3, 1, src)
new /obj/effect/decal/cleanable/blood/oil(loc)
var/obj/effect/decal/mecha_wreckage/gygax/dark/wreck = new /obj/effect/decal/mecha_wreckage/gygax/dark(loc)
var/obj/structure/mecha_wreckage/gygax/dark/wreck = new /obj/structure/mecha_wreckage/gygax/dark(loc)
wreck.name = "sentry bot wreckage"
raise_alert("[src] destroyed.")

View File

@@ -673,8 +673,8 @@
to_chat(user, "<span class='warning'>Access denied.</span>")
/obj/machinery/power/apc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
if((!(stat & BROKEN) || malfai))
return 0
if(stat & BROKEN)
return damage_amount
. = ..()
/obj/machinery/power/apc/obj_break(damage_flag)

View File

@@ -38,6 +38,10 @@
else if(istype(A, /obj/singularity))
var/obj/singularity/S = A
S.energy += energy
else if(istype(A, /obj/structure/blob))
var/obj/structure/blob/B = A
B.take_damage(energy * 0.6)
movement_range = 0
/obj/effect/accelerated_particle/Crossed(atom/A, oldloc)
if(isliving(A))

View File

@@ -247,7 +247,7 @@
else if(closest_blob)
continue
else if(istype(A, /obj/structure))
else if(isstructure(A))
var/obj/structure/S = A
var/dist = get_dist(source, A)
if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !S.being_shocked)

View File

@@ -169,7 +169,7 @@
if(!user.drop_item())
return
if(I)
I.loc = src
I.forceMove(src)
to_chat(user, "You place \the [I] into the [src].")
for(var/mob/M in viewers(src))
@@ -833,14 +833,14 @@
// will expel any holder inside at the time
// then delete the pipe
// remains : set to leave broken pipe pieces in place
/obj/structure/disposalpipe/proc/broken(var/remains = 0)
/obj/structure/disposalpipe/proc/broken(remains = 0)
if(remains)
for(var/D in cardinal)
if(D & dpdir)
var/obj/structure/disposalpipe/broken/P = new(src.loc)
P.dir = D
P.setDir(D)
src.invisibility = 101 // make invisible (since we won't delete the pipe immediately)
invisibility = 101 // make invisible (since we won't delete the pipe immediately)
var/obj/structure/disposalholder/H = locate() in src
if(H)
// holder was present
@@ -863,6 +863,18 @@
spawn(2) // delete pipe after 2 ticks to ensure expel proc finished
qdel(src)
// pipe affected by explosion
/obj/structure/disposalpipe/ex_act(severity)
switch(severity)
if(1)
broken(0)
if(2)
health -= rand(5, 15)
healthcheck()
if(3)
health -= rand(0, 15)
healthcheck()
// test health for brokenness
/obj/structure/disposalpipe/proc/healthcheck()
if(health < -2)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 KiB

After

Width:  |  Height:  |  Size: 1.2 MiB