diff --git a/aurorastation.dme b/aurorastation.dme
index 3646725aa80..f7e5900c6ae 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -666,6 +666,7 @@
#include "code\game\mecha\combat\honker.dm"
#include "code\game\mecha\combat\marauder.dm"
#include "code\game\mecha\combat\phazon.dm"
+#include "code\game\mecha\combat\tank.dm"
#include "code\game\mecha\equipment\mecha_equipment.dm"
#include "code\game\mecha\equipment\tracking_beacon.dm"
#include "code\game\mecha\equipment\tools\medical_tools.dm"
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 76dbd42bca6..ee702530b86 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -458,3 +458,8 @@ update_flag
. = ..()
src.air_contents.adjust_gas("phoron", MolesForPressure())
src.update_icon()
+
+/obj/machinery/portable_atmospherics/canister/air/cold/Initialize()
+ . = ..()
+ src.air_contents.temperature = 283
+ src.update_icon()
diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm
index 8cafa442855..fbf7c4409e0 100644
--- a/code/game/mecha/combat/combat.dm
+++ b/code/game/mecha/combat/combat.dm
@@ -77,12 +77,12 @@
else
return
M.updatehealth()
- src.occupant_message("You hit [target].")
- src.visible_message("[src.name] hits [target].")
+ src.occupant_message("You hit \the [target].")
+ src.visible_message("\The [src] hits \the [target]!")
else
step_away(M,src)
- src.occupant_message("You push [target] out of the way.")
- src.visible_message("[src] pushes [target] out of the way.")
+ src.occupant_message("You push \the [target] out of the way.")
+ src.visible_message("\The [src] pushes \the [target] out of the way.")
melee_can_hit = 0
if(do_after_mecha(melee_cooldown))
@@ -93,8 +93,8 @@
if(damtype == "brute")
for(var/target_type in src.destroyable_obj)
if(istype(target, target_type) && hascall(target, "attackby"))
- src.occupant_message("You hit [target].")
- src.visible_message("[src.name] hits [target]")
+ src.occupant_message("You hit \the [target].")
+ src.visible_message("\The [src] hits \the [target]!")
if(!istype(target, /turf/simulated/wall))
target:attackby(src,src.occupant)
else if(prob(5))
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index 622c114a615..e5fcbe6973f 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -29,8 +29,8 @@
wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
step_energy_drain = 5
-/obj/mecha/combat/gygax/dark/New()
- ..()
+/obj/mecha/combat/gygax/dark/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang
diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm
index 1d859d86e78..7178d744073 100644
--- a/code/game/mecha/combat/honker.dm
+++ b/code/game/mecha/combat/honker.dm
@@ -17,8 +17,8 @@
var/squeak = 0
-/obj/mecha/combat/honker/New()
- ..()
+/obj/mecha/combat/honker/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/honker
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index 6b91f57e478..283f4c68f44 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -44,8 +44,8 @@
operation_req_access = list(access_syndicate)
wreckage = /obj/effect/decal/mecha_wreckage/mauler
-/obj/mecha/combat/marauder/New()
- ..()
+/obj/mecha/combat/marauder/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive
@@ -58,8 +58,8 @@
src.smoke_system.attach(src)
return
-/obj/mecha/combat/marauder/seraph/New()
- ..()//Let it equip whatever is needed.
+/obj/mecha/combat/marauder/seraph/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME
if(equipment.len)//Now to remove it and equip anew.
for(ME in equipment)
diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm
index 6fa906cdeac..247de78c87e 100644
--- a/code/game/mecha/combat/phazon.dm
+++ b/code/game/mecha/combat/phazon.dm
@@ -21,8 +21,8 @@
max_equip = 4
-/obj/mecha/combat/phazon/equipped/New()
- ..()
+/obj/mecha/combat/phazon/equipped/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/gravcatapult
diff --git a/code/game/mecha/combat/tank.dm b/code/game/mecha/combat/tank.dm
new file mode 100644
index 00000000000..22819d6263c
--- /dev/null
+++ b/code/game/mecha/combat/tank.dm
@@ -0,0 +1,135 @@
+#define NOMINAL 0
+#define FIRSTRUN 1
+#define POWER 2
+#define DAMAGE 3
+#define IMAGE 4
+#define WEAPONDOWN 5
+
+/obj/mecha/combat/tank
+ name = "light adhomian tank"
+ desc = "The Ha'rron MK.IV light tank is an armored vehicle commonly used by tajaran military forces."
+ icon = 'icons/mecha/mecha_large.dmi'
+ icon_state = "tank"
+ initial_icon = "tank"
+ pixel_x = -16
+ step_in = 5
+ dir_in = 1
+ health = 800
+ deflect_chance = 20
+ damage_absorption = list("brute"=0.4,"fire"=1.1,"bullet"=0.5,"laser"=0.8,"energy"=0.8,"bomb"=0.7)
+ max_temperature = 30000
+ force = 40
+ w_class = 35
+ infra_luminosity = 4
+ wreckage = /obj/effect/decal/mecha_wreckage/tank
+ stepsound = 'sound/mecha/tanktread.ogg'
+ turnsound = 'sound/mecha/tanktread.ogg'
+
+/obj/mecha/combat/tank/Initialize()
+ .= ..()
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/armor_booster/antiproj_armor_booster
+ ME.attach(src)
+ return
+
+/obj/mecha/combat/tank/add_airtank()
+ internal_tank = new /obj/machinery/portable_atmospherics/canister/air/cold(src)
+ return internal_tank
+
+/obj/mecha/combat/tank/Collide(var/atom/movable/AM)
+ . = ..()
+ if(!occupant)
+ return
+ if(isliving(AM))
+ if(ishuman(AM))
+ var/mob/living/carbon/human/H = AM
+ H.attack_log += "\[[time_stamp()]\] Was rammed by [src]"
+ occupant.attack_log += text("\[[time_stamp()]\] rammed[occupant.name] ([occupant.ckey]) rammed [H.name] ([H.ckey]) with the [src].")
+ msg_admin_attack("[src] crashed into [key_name(H)] at (JMP)" )
+ src.visible_message("\The [src] smashes into \the [H]!")
+ playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
+ H.apply_damage(30, BRUTE)
+ H.throw_at(get_edge_target_turf(loc, loc.dir), 5, 1)
+ H.apply_effect(4, WEAKEN)
+ return TRUE
+
+ if(isanimal(AM))
+ var/mob/living/simple_animal/C = AM
+ if(issmall(C))
+ src.visible_message("\The [src] runs over \the [C]!")
+ C.gib()
+ return TRUE
+ else
+ src.visible_message("\The [src] smashes into \the [C]!")
+ playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
+ C.apply_damage(40, BRUTE)
+ return TRUE
+
+ else
+ var/mob/living/L = AM
+ src.visible_message("\The [src] smashes into \the [L]!")
+ playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
+ L.throw_at(get_edge_target_turf(loc, loc.dir), 5, 1)
+ L.apply_damage(30, BRUTE)
+ return TRUE
+
+ else
+ AM.ex_act(2)
+
+/obj/mecha/combat/tank/trample(var/mob/living/H)
+ if(!occupant)
+ return
+ if(isliving(H))
+ if(ishuman(H))
+ var/mob/living/carbon/human/D = H
+ if(D.lying)
+ D.attack_log += "\[[time_stamp()]\] Was trampled by [src]"
+ occupant.attack_log += text("\[[time_stamp()]\] rammed[occupant.name] ([occupant.ckey]) trampled [D.name] ([D.ckey]) with the [src].")
+ msg_admin_attack("[src] trampled [key_name(D)] at (JMP)" )
+ src.visible_message("\The [src] runs over \the [D]!")
+ D.apply_effect(8, WEAKEN)
+ D.apply_damage(60, BRUTE)
+ return TRUE
+
+ if(isanimal(H))
+ var/mob/living/simple_animal/C = H
+ if(issmall(C) || (C.stat == DEAD))
+ src.visible_message("\The [src] runs over \the [C]!")
+ C.gib()
+ return TRUE
+
+ else
+ var/mob/living/L = H
+ src.visible_message("\The [src] runs over \the [L]!")
+ L.apply_damage(60, BRUTE)
+ return TRUE
+
+/obj/mecha/combat/tank/narrator_message(var/state)
+ var/file
+ switch(state)
+ if(NOMINAL)
+ file = 'sound/mecha/hatch-door-close.ogg'
+ if(FIRSTRUN)
+ file = 'sound/mecha/hatch-door-close.ogg'
+ if(POWER)
+ file = 'sound/mecha/lowpower.ogg'
+ if(DAMAGE)
+ file = 'sound/mecha/critdestr.ogg'
+ if(WEAPONDOWN)
+ file = 'sound/mecha/weapdestr.ogg'
+ else
+
+ playsound(src.loc, file, 100, 0, -6.6, environment=1)
+
+
+#undef NOMINAL
+#undef FIRSTRUN
+#undef POWER
+#undef DAMAGE
+#undef IMAGE
+#undef WEAPONDOWN
\ No newline at end of file
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 2069788c7d6..9cd4864b030 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -34,6 +34,7 @@
occupant_message("You lift [target] and start to load it into cargo compartment.")
chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.")
+ playsound(src.loc, 'sound/mecha/hydraulic.ogg', 50, 1, -1)
set_ready_state(0)
chassis.use_power(energy_drain)
O.anchored = 1
@@ -87,6 +88,7 @@
chassis.use_power(energy_drain)
chassis.visible_message("\The [chassis] starts to drill \the [target]", "You hear a large drill.")
occupant_message("You start to drill \the [target]")
+ playsound(src.loc, 'sound/mecha/mechdrill.ogg', 50, 1, -1)
var/T = chassis.loc
var/C = target.loc //why are these backwards? we may never know -Pete
if(do_after_cooldown(target))
@@ -141,6 +143,7 @@
chassis.use_power(energy_drain)
chassis.visible_message("\The [chassis] starts to drill \the [target]", "You hear a large drill.")
occupant_message("You start to drill \the [target]")
+ playsound(src.loc, 'sound/mecha/mechdrill.ogg', 50, 1, -1)
var/T = chassis.loc
var/C = target.loc //why are these backwards? we may never know -Pete
if(do_after_cooldown(target))
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index b9687efe585..007ec4254bd 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -84,6 +84,7 @@
return
if(M.cell)
M.occupant_message("Now charging...")
+ playsound(M, 'sound/mecha/powerup.ogg', 50, 1)
charging = M
return
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index a87a0cd4c28..f7470e62a8c 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -108,6 +108,9 @@
// Process() iterator count.
var/process_ticks = 0
+ var/stepsound = 'sound/mecha/mechstep.ogg'
+ var/turnsound = 'sound/mecha/mechturn.ogg'
+
/obj/mecha/drain_power(var/drain_check)
if(drain_check)
@@ -118,8 +121,11 @@
return cell.drain_power(drain_check)
-/obj/mecha/New()
- ..()
+/obj/mecha/Initialize()
+ .= ..()
+
+ START_PROCESSING(SSfast_process, src)
+
events = new
icon_state += "-open"
@@ -135,10 +141,6 @@
spark_system = bind_spark(src, 2)
-/obj/mecha/Initialize()
- . = ..()
-
- START_PROCESSING(SSfast_process, src)
/obj/mecha/Destroy()
STOP_PROCESSING(SSfast_process, src)
@@ -446,20 +448,21 @@
/obj/mecha/proc/mechturn(direction)
set_dir(direction)
- playsound(src,'sound/mecha/mechturn.ogg',40,1)
+ if(turnsound)
+ playsound(src,turnsound,40,1)
return 1
/obj/mecha/proc/mechstep(direction)
var/result = step(src,direction)
- if(result)
- playsound(src,'sound/mecha/mechstep.ogg',40,1)
+ if(result && stepsound)
+ playsound(src,stepsound,40,1)
return result
/obj/mecha/proc/mechsteprand()
var/result = step_rand(src)
- if(result)
- playsound(src,'sound/mecha/mechstep.ogg',40,1)
+ if(result && stepsound)
+ playsound(src,stepsound,40,1)
return result
/obj/mecha/Collide(var/atom/obstacle)
@@ -999,7 +1002,7 @@
mechstep(dir)
sleep(2)
mechstep(dir)
- src.visible_message("[src.name] lunges forward clumsily!")
+ src.visible_message("\The [src] lunges forward clumsily!")
done = 1
return
@@ -2108,7 +2111,8 @@
return
-
+/obj/mecha/proc/trample(var/mob/living/H)
+ return
/////////////
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index 0eb7428c474..5e218ac668c 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -15,10 +15,10 @@
var/list/crowbar_salvage
var/salvage_num = 5
- New()
- ..()
- crowbar_salvage = new
- return
+/obj/effect/decal/mecha_wreckage/New()
+ ..()
+ crowbar_salvage = new
+ return
/obj/effect/decal/mecha_wreckage/ex_act(severity)
if(severity < 2)
@@ -80,20 +80,20 @@
name = "Gygax wreckage"
icon_state = "gygax-broken"
- New()
- ..()
- var/list/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/effect/decal/mecha_wreckage/gygax/New()
+ ..()
+ var/list/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/effect/decal/mecha_wreckage/gygax/dark
name = "Dark Gygax wreckage"
@@ -116,38 +116,38 @@
name = "Ripley wreckage"
icon_state = "ripley-broken"
- New()
- ..()
- var/list/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/New()
+ ..()
+ var/list/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"
icon_state = "firefighter-broken"
- New()
- ..()
- var/list/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/firefighter/New()
+ ..()
+ var/list/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"
@@ -157,21 +157,21 @@
name = "Durand wreckage"
icon_state = "durand-broken"
- New()
- ..()
- var/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/New()
+ ..()
+ var/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/phazon
name = "Phazon wreckage"
@@ -182,22 +182,31 @@
name = "Odysseus wreckage"
icon_state = "odysseus-broken"
- New()
- ..()
- var/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
+/obj/effect/decal/mecha_wreckage/odysseus/New()
+ ..()
+ var/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
/obj/effect/decal/mecha_wreckage/hoverpod
name = "Hover pod wreckage"
icon_state = "engineering_pod-broken"
+
+/obj/effect/decal/mecha_wreckage/tank
+ name = "adhomian light tank wreckage"
+ desc = "Remains of some unfortunate armored vehicle. Completely unrepairable."
+ icon = 'icons/mecha/mecha_large.dmi'
+ icon_state = "tank-broken"
+ anchored = TRUE
+ pixel_x = -16
+ layer = ABOVE_MOB_LAYER
\ No newline at end of file
diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm
index 5c2c8461681..c06050f6fcc 100644
--- a/code/game/mecha/medical/odysseus.dm
+++ b/code/game/mecha/medical/odysseus.dm
@@ -13,28 +13,28 @@
step_energy_drain = 6
var/obj/item/clothing/glasses/hud/health/mech/hud
- New()
- ..()
- hud = new /obj/item/clothing/glasses/hud/health/mech(src)
- return
+/obj/mecha/medical/odysseus/Initialize()
+ .= ..()
+ hud = new /obj/item/clothing/glasses/hud/health/mech(src)
+ return
- moved_inside(var/mob/living/carbon/human/H as mob)
- if(..())
- if(H.glasses)
- occupant_message("[H.glasses] prevent you from using [src] [hud]")
- else
- H.glasses = hud
- return 1
+/obj/mecha/medical/odysseus/moved_inside(var/mob/living/carbon/human/H as mob)
+ if(..())
+ if(H.glasses)
+ occupant_message("[H.glasses] prevent you from using [src] [hud]")
else
- return 0
+ H.glasses = hud
+ return 1
+ else
+ return 0
- go_out()
- if(ishuman(occupant))
- var/mob/living/carbon/human/H = occupant
- if(H.glasses == hud)
- H.glasses = null
- ..()
- return
+/obj/mecha/medical/odysseus/go_out()
+ if(ishuman(occupant))
+ var/mob/living/carbon/human/H = occupant
+ if(H.glasses == hud)
+ H.glasses = null
+ ..()
+ return
/*
verb/set_perspective()
set name = "Set client perspective."
@@ -120,8 +120,8 @@
C.images += holder
-/obj/mecha/medical/odysseus/loaded/New()
- ..()
+/obj/mecha/medical/odysseus/loaded/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/sleeper
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/tool/sleeper
diff --git a/code/game/mecha/working/hoverpod.dm b/code/game/mecha/working/hoverpod.dm
index 5da1b0c8012..c71799abe58 100644
--- a/code/game/mecha/working/hoverpod.dm
+++ b/code/game/mecha/working/hoverpod.dm
@@ -16,7 +16,7 @@
var/stabilization_enabled = 1
/obj/mecha/working/hoverpod/Initialize()
- . = ..()
+ .= ..()
ion_trail = new(src)
//Modified phazon code
@@ -81,8 +81,8 @@
cargo_capacity = 2
max_equip = 2
-/obj/mecha/working/hoverpod/combatpod/New()
- ..()
+/obj/mecha/working/hoverpod/combatpod/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive
@@ -92,8 +92,8 @@
/obj/mecha/working/hoverpod/shuttlepod
desc = "Who knew a tiny ball could fit three people?"
-/obj/mecha/working/hoverpod/shuttlepod/New()
- ..()
+/obj/mecha/working/hoverpod/shuttlepod/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 280dd8abeb8..d7b21cb862e 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -44,8 +44,8 @@
wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley
step_energy_drain = 0
-/obj/mecha/working/ripley/deathripley/New()
- ..()
+/obj/mecha/working/ripley/deathripley/Initialize()
+ .= ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/safety_clamp
ME.attach(src)
return
@@ -54,8 +54,8 @@
desc = "An old, dusty mining ripley."
name = "APLU \"Miner\""
-/obj/mecha/working/ripley/mining/New()
- ..()
+/obj/mecha/working/ripley/mining/Initialize()
+ .= ..()
//Attach drill
if(prob(25)) //Possible diamond drill... Feeling lucky?
var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
diff --git a/code/modules/cargo/random_stock/large_exosuit.dm b/code/modules/cargo/random_stock/large_exosuit.dm
index 59cc8181dbf..aa8f0e3a9d0 100644
--- a/code/modules/cargo/random_stock/large_exosuit.dm
+++ b/code/modules/cargo/random_stock/large_exosuit.dm
@@ -24,7 +24,8 @@ STOCK_ITEM_LARGE(exosuit, 1.2)//A randomly generated exosuit in a very variable
/obj/mecha/combat/marauder/seraph = 0.3,
/obj/mecha/combat/marauder/mauler = 0.4,
/obj/mecha/combat/phazon = 0.1,
- /obj/mecha/combat/honker = 0.01
+ /obj/mecha/combat/honker = 0.01,
+ /obj/mecha/combat/tank = 0.01
)
var/type = pickweight(randsuits)
var/obj/mecha/exosuit = new type(get_turf(L))
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 76c13a605f9..7456b689471 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -193,6 +193,20 @@
species_restricted = list("Unathi")
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
+/obj/item/clothing/head/helmet/tank
+ name = "padded cap"
+ desc = "A padded skullcup for those prone to bumping their heads against hard surfaces."
+ icon_state = "tank"
+ flags_inv = BLOCKHEADHAIR
+ color = "#5f5f5f"
+ armor = list(melee = 25, bullet = 5, laser = 5, energy = 10, bomb = 5, bio = 0, rad = 0)
+
+/obj/item/clothing/head/helmet/tank/olive
+ color = "#727c58"
+
+/obj/item/clothing/head/helmet/tank/tan
+ color = "#ae9f79"
+
//Non-hardsuit ERT helmets.
/obj/item/clothing/head/helmet/ert
name = "emergency response team helmet"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 8af640fe128..48a17e347d7 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -312,6 +312,7 @@
// called when something steps onto a human
// this handles mulebots and vehicles
/mob/living/carbon/human/Crossed(var/atom/movable/AM)
+ ..()
if(istype(AM, /obj/machinery/bot/mulebot))
var/obj/machinery/bot/mulebot/MB = AM
MB.RunOver(src)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 54d07724dd0..be4427b13c2 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -20,6 +20,11 @@
src.visible_message("[src] points to [A]")
return 1
+/mob/living/Crossed(var/atom/movable/AM)
+ if(istype(AM, /obj/mecha))
+ var/obj/mecha/MB = AM
+ MB.trample(src)
+
/*one proc, four uses
swapping: if it's 1, the mobs are trying to switch, if 0, non-passive is pushing passive
default behaviour is:
@@ -307,7 +312,7 @@ default behaviour is:
return halloss
/mob/living/proc/adjustHalLoss(var/amount)
- if(status_flags & GODMODE)
+ if(status_flags & GODMODE)
return 0
if(amount > 0)
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 4436b7eee26..a12981cdbf3 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -188,7 +188,7 @@
penetrating = 1
/obj/item/projectile/bullet/cannon/on_impact(var/atom/A)
- explosion(A, 2, 3, 4, 4)
+ explosion(A, 1, 2, 3, 3)
..()
//magic
diff --git a/html/changelogs/albery-tankgodness.yml b/html/changelogs/albery-tankgodness.yml
new file mode 100644
index 00000000000..8788357fd07
--- /dev/null
+++ b/html/changelogs/albery-tankgodness.yml
@@ -0,0 +1,7 @@
+author: Alberyk, Kyres1
+
+delete-after: True
+
+changes:
+ - rscadd: "Added the Ha'rron MK.IV light tank."
+ - soundadd: "Added some sounds to certain mecha actions."
diff --git a/icons/mecha/mecha_large.dmi b/icons/mecha/mecha_large.dmi
new file mode 100644
index 00000000000..1020e007df2
Binary files /dev/null and b/icons/mecha/mecha_large.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 14dddf36a7c..4d5f45b07b2 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 123bba37475..2f31a408891 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/sound/mecha/hatch-door-close.ogg b/sound/mecha/hatch-door-close.ogg
new file mode 100644
index 00000000000..c47c47f6e36
Binary files /dev/null and b/sound/mecha/hatch-door-close.ogg differ
diff --git a/sound/mecha/tanktread.ogg b/sound/mecha/tanktread.ogg
new file mode 100644
index 00000000000..394cee92e50
Binary files /dev/null and b/sound/mecha/tanktread.ogg differ