diff --git a/code/game/mecha/combat/gorilla.dm b/code/game/mecha/combat/gorilla.dm new file mode 100644 index 0000000000..f16d5d31ab --- /dev/null +++ b/code/game/mecha/combat/gorilla.dm @@ -0,0 +1,225 @@ +/* +All of the weapons and projectiles that go with this mech are deliberately kept here in gorilla.dm because +they are never intended for use by any other mech. Ever. This shit is more overpowered than a clown with a +HONK Blaster and a pulse cannon protected by projectile armor and powered by a bananium infinite power cell. +*/ + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon + name = "8.8cm KwK 47" + desc = "Do to enemy mechs what the King Tiger did to Allied tanks with 88 milimeters of armor-piercing German steel!" + icon_state = "mecha_grenadelnchr" + equip_cooldown = 55 // 5.5 seconds + projectile = /obj/item/projectile/bullet/cannon + fire_sound = 'sound/weapons/cannon.ogg' + projectiles = 1 + projectile_energy_cost = 1000 + salvageable = 0 // We don't want players ripping this off a dead mech. + +/obj/item/projectile/bullet/cannon + name ="armor-piercing shell" + icon = 'icons/obj/grenade_yw.dmi' + icon_state = "shell" + damage = 1000 // In order to 1-hit any other mech and royally fuck anyone unfortunate enough to get in the way. + + on_hit(var/atom/target, var/blocked = 0) + explosion(target, 0, 0, 2, 4) + return 1 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mg42 + name = "Maschinengewehr 60" + icon_state = "mecha_scatter" // placeholder + equip_cooldown = 10 + projectile = /obj/item/projectile/bullet/rifle/a762 + fire_sound = 'sound/weapons/mg42.ogg' + projectiles = 1000 + projectiles_per_shot = 3 + deviation = 0.3 + projectile_energy_cost = 20 + fire_cooldown = 1 + salvageable = 0 // We don't want players ripping this off a dead mech. + + +/obj/effect/decal/mecha_wreckage/gorilla + name = "Gorilla wreckage" + desc = "... Blitzkrieg?" + icon = 'icons/mecha/NaziMech.dmi' + icon_state = "pzrwreck" + layer = 4 // so it overlaps other people + pixel_x = -16 + anchored = 1 // It's fucking huge. You aren't moving it. + +/obj/mecha/combat/gorilla + desc = "BLITZKRIEEEEEEEG!" + name = "Sd.Kfz. 269 Mechakampfwagen Gorilla Ausf. A" + icon = 'icons/mecha/NaziMech.dmi' + icon_state = "pzrmech" + initial_icon = "pzrmech" + pixel_x = -16 + step_in = 10 + health = 5000 + opacity = 0 // Because there's big tall legs to look through. Also it looks fucky if this is set to 1... + deflect_chance = 50 + damage_absorption = list("brute"=0.1,"fire"=0.7,"bullet"=0.1,"laser"=0.6,"energy"=0.7,"bomb"=0.7) //values show how much damage will pass through, not how much will be absorbed. + max_temperature = 25000 + infra_luminosity = 3 + add_req_access = 0 + var/zoom = 0 + var/smoke = 5 + var/smoke_ready = 1 + var/smoke_cooldown = 100 + var/datum/effect/effect/system/smoke_spread/smoke_system = new + wreckage = /obj/effect/decal/mecha_wreckage/gorilla + add_req_access = 0 + internal_damage_threshold = 25 + force = 60 + max_equip = 4 + New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mg42(src) + ME.attach(src) + src.smoke_system.set_up(3, 0, src) + src.smoke_system.attach(src) + return + +/obj/mecha/combat/gorilla/mechstep(direction) + var/result = step(src,direction) + var/stepsound = rand(1,2) + if(result) + switch(stepsound) + if(1) + playsound(src,'sound/mecha/bigmech_lstep.ogg',40,1) + if(2) + playsound(src,'sound/mecha/bigmech_rstep.ogg',40,1) + return result + +/obj/mecha/combat/gorilla/mechturn(direction) + dir = direction + var/turnsound = rand(1,2) + switch(turnsound) + if(1) + playsound(src,'sound/mecha/bigmech_lturn.ogg',40,1) + if(2) + playsound(src,'sound/mecha/bigmech_rturn.ogg',40,1) + return 1 + +/obj/mecha/combat/gorilla/mechturn(direction) + dir = direction + var/turnsound = rand(1,2) + switch(turnsound) + if(1) + playsound(src,'sound/mecha/bigmech_lturn.ogg',40,1) + if(2) + playsound(src,'sound/mecha/bigmech_rturn.ogg',40,1) + return 1 + +/obj/mecha/combat/gorilla/relaymove(mob/user,direction) + if(user != src.occupant) //While not "realistic", this piece is player friendly. + user.loc = get_turf(src) + user << "You climb out from [src]" + return 0 + if(!can_move) + return 0 + if(zoom) + if(world.time - last_message > 20) + src.occupant_message("Unable to move while in zoom mode.") + last_message = world.time + return 0 + if(connected_port) + if(world.time - last_message > 20) + src.occupant_message("Unable to move while connected to the air system port") + last_message = world.time + return 0 + if(state || !has_charge(step_energy_drain)) + return 0 + var/tmp_step_in = step_in + var/tmp_step_energy_drain = step_energy_drain + var/move_result = 0 + if(internal_damage&MECHA_INT_CONTROL_LOST) + move_result = mechsteprand() + else if(src.dir!=direction) + move_result = mechturn(direction) + else + move_result = mechstep(direction) + if(move_result) + if(istype(src.loc, /turf/space)) + if(!src.check_for_support()) + src.pr_inertial_movement.start(list(src,direction)) + can_move = 0 + spawn(tmp_step_in) can_move = 1 + use_power(tmp_step_energy_drain) + return 1 + return 0 + +/obj/mecha/combat/gorilla/verb/smoke() + set category = "Exosuit Interface" + set name = "Smoke" + set src = usr.loc + set popup_menu = 0 + if(usr!=src.occupant) + return + if(smoke_ready && smoke>0) + src.smoke_system.start() + smoke-- + smoke_ready = 0 + spawn(smoke_cooldown) + smoke_ready = 1 + return + +/obj/mecha/combat/gorilla/verb/zoom() + set category = "Exosuit Interface" + set name = "Zoom" + set src = usr.loc + set popup_menu = 0 + if(usr!=src.occupant) + return + if(src.occupant.client) + src.zoom = !src.zoom + src.log_message("Toggled zoom mode.") + src.occupant_message("Zoom mode [zoom?"en":"dis"]abled.") + if(zoom) + src.occupant.client.view = 12 + src.occupant << sound('sound/mecha/imag_enh.ogg',volume=50) + else + src.occupant.client.view = world.view//world.view - default mob view size + return + + +/obj/mecha/combat/gorilla/go_out() + if(src.occupant && src.occupant.client) + src.occupant.client.view = world.view + src.zoom = 0 + ..() + return + + +/obj/mecha/combat/gorilla/get_stats_part() + var/output = ..() + output += {"Smoke: [smoke]"} + return output + + +/obj/mecha/combat/gorilla/get_commands() + var/output = {"
+
Special
+ +
+ "} + output += ..() + return output + +/obj/mecha/combat/gorilla/Topic(href, href_list) + ..() + if (href_list["smoke"]) + src.smoke() + if (href_list["toggle_zoom"]) + src.zoom() + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/automatic_yw.dm b/code/modules/projectiles/guns/projectile/automatic_yw.dm index 4d3ca90633..16eb1799bc 100644 --- a/code/modules/projectiles/guns/projectile/automatic_yw.dm +++ b/code/modules/projectiles/guns/projectile/automatic_yw.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/gun_yw.dmi' icon_state = "mg42closed" item_state = "mg42closed" - w_class = ITEMSIZE_LARGE + w_class = ITEMSIZE_HUGE force = 10 slot_flags = 0 max_shells = 75 @@ -53,7 +53,7 @@ return ..() //once open, behave like normal /obj/item/weapon/gun/projectile/automatic/mg42/update_icon() - icon_state = "mg42[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]" + icon_state = "mg42[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"][cover_open && ammo_magazine && ammo_magazine.stored_ammo.len == 0 ? "0" : ""]" item_state = "mg42[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]" update_held_icon() diff --git a/icons/mecha/NaziMech.dmi b/icons/mecha/NaziMech.dmi new file mode 100644 index 0000000000..27252f585c Binary files /dev/null and b/icons/mecha/NaziMech.dmi differ diff --git a/icons/obj/grenade_yw.dmi b/icons/obj/grenade_yw.dmi new file mode 100644 index 0000000000..ad217be788 Binary files /dev/null and b/icons/obj/grenade_yw.dmi differ diff --git a/icons/obj/gun_yw.dmi b/icons/obj/gun_yw.dmi index 4bca4d1196..87e09e6d89 100644 Binary files a/icons/obj/gun_yw.dmi and b/icons/obj/gun_yw.dmi differ diff --git a/sound/mecha/bigmech_lstep.ogg b/sound/mecha/bigmech_lstep.ogg new file mode 100644 index 0000000000..4196de646d Binary files /dev/null and b/sound/mecha/bigmech_lstep.ogg differ diff --git a/sound/mecha/bigmech_lturn.ogg b/sound/mecha/bigmech_lturn.ogg new file mode 100644 index 0000000000..8ee3879e42 Binary files /dev/null and b/sound/mecha/bigmech_lturn.ogg differ diff --git a/sound/mecha/bigmech_rstep.ogg b/sound/mecha/bigmech_rstep.ogg new file mode 100644 index 0000000000..0f2d0a965f Binary files /dev/null and b/sound/mecha/bigmech_rstep.ogg differ diff --git a/sound/mecha/bigmech_rturn.ogg b/sound/mecha/bigmech_rturn.ogg new file mode 100644 index 0000000000..3b4172cf54 Binary files /dev/null and b/sound/mecha/bigmech_rturn.ogg differ diff --git a/sound/weapons/cannon.ogg b/sound/weapons/cannon.ogg new file mode 100644 index 0000000000..0b0b7ad4cf Binary files /dev/null and b/sound/weapons/cannon.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 893266bc15..d61ead9d92 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -717,6 +717,7 @@ #include "code\game\mecha\mecha_wreckage.dm" #include "code\game\mecha\combat\combat.dm" #include "code\game\mecha\combat\durand.dm" +#include "code\game\mecha\combat\gorilla.dm" #include "code\game\mecha\combat\gygax.dm" #include "code\game\mecha\combat\marauder.dm" #include "code\game\mecha\combat\phazon.dm"