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