From 34a6735ef802cb61612d23e9e7f46816b6ca37cc Mon Sep 17 00:00:00 2001 From: Segrain Date: Sat, 12 Oct 2013 14:31:12 +0300 Subject: [PATCH 1/4] ERT mecha beacons. --- code/game/mecha/medical/medical.dm | 4 +++- code/game/mecha/working/working.dm | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm index a63a8d3d6dd..0b94990cd2f 100644 --- a/code/game/mecha/medical/medical.dm +++ b/code/game/mecha/medical/medical.dm @@ -1,6 +1,8 @@ /obj/mecha/medical/New() ..() - new /obj/item/mecha_parts/mecha_tracking(src) + var/turf/T = get_turf(src) + if(T.z != 2) + new /obj/item/mecha_parts/mecha_tracking(src) return diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index 7a59b6190ed..ad66d310321 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -3,7 +3,9 @@ /obj/mecha/working/New() ..() - new /obj/item/mecha_parts/mecha_tracking(src) + var/turf/T = get_turf(src) + if(T.z != 2) + new /obj/item/mecha_parts/mecha_tracking(src) return /* From 77748f11160ee5567fbc7dc61fdb85059fb477b2 Mon Sep 17 00:00:00 2001 From: Segrain Date: Sat, 12 Oct 2013 14:41:24 +0300 Subject: [PATCH 2/4] Mecha weapons. --- code/game/mecha/combat/honker.dm | 2 +- code/game/mecha/combat/marauder.dm | 4 +- code/game/mecha/equipment/weapons/weapons.dm | 256 +++++++------------ code/game/mecha/mech_fabricator.dm | 2 +- 4 files changed, 92 insertions(+), 172 deletions(-) diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index 622d5bb8ef7..45159458a90 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -22,7 +22,7 @@ weapons += new /datum/mecha_weapon/honker(src) weapons += new /datum/mecha_weapon/missile_rack/banana_mortar(src) - weapons += new /datum/mecha_weapon/missile_rack/mousetrap_mortar(src) + weapons += new /datum/mecha_weapon/missile_rack/banana_mortar/mousetrap_mortar(src) selected_weapon = weapons[1] return */ diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 6e924e13ebb..fdce02f5d2e 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -47,7 +47,7 @@ ..() 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 + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) ME.attach(src) @@ -66,7 +66,7 @@ del(ME) ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(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/teleporter(src) ME.attach(src) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index b461cd4b12b..870aa3d4411 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -2,41 +2,68 @@ name = "mecha weapon" range = RANGED origin_tech = "materials=3;combat=3" - var/projectile - var/fire_sound - + var/projectile //Type of projectile fired. + var/projectiles = 1 //Amount of projectiles loaded. + var/projectiles_per_shot = 1 //Amount of projectiles fired per single shot. + var/deviation = 0 //Inaccuracy of shots. + var/fire_cooldown = 0 //Duration of sleep between firing projectiles in single shot. + var/fire_sound //Sound played while firing. + var/fire_volume = 50 //How loud it is played. + var/auto_rearm = 0 //Does the weapon reload itself after each shot? /obj/item/mecha_parts/mecha_equipment/weapon/can_attach(var/obj/mecha/combat/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 + if(!istype(M)) + return 0 + return ..() +/obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target) + if(projectiles <= 0) + return 0 + return ..() + +/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target) + if(!action_checks(target)) + return + var/turf/curloc = chassis.loc + var/turf/targloc = get_turf(target) + if(!curloc || !targloc) + return + for(var/i = 1 to min(projectiles, projectiles_per_shot)) + var/turf/aimloc = targloc + if(deviation) + aimloc = locate(targloc.x+GaussRandRound(deviation,1),targloc.y+GaussRandRound(deviation,1),targloc.z) + if(!aimloc || aimloc == curloc) + break + playsound(chassis, fire_sound, fire_volume, 1) + projectiles-- + var/P = new projectile(curloc) + Fire(P, target, aimloc) + if(fire_cooldown) + sleep(fire_cooldown) + if(auto_rearm) + projectiles = projectiles_per_shot + set_ready_state(0) + chassis.use_power(energy_drain) + chassis.visible_message("[chassis] fires [src]!") + occupant_message("You fire [src]!") + log_message("Fired from [src], targeting [target].") + do_after_cooldown() + return + +/obj/item/mecha_parts/mecha_equipment/weapon/proc/Fire(atom/A, atom/target, turf/aimloc) + var/obj/item/projectile/P = A + P.shot_from = src + P.original = target + P.starting = P.loc + P.current = P.loc + P.firer = chassis.occupant + P.yo = aimloc.y - P.loc.y + P.xo = aimloc.x - P.loc.x + P.process() /obj/item/mecha_parts/mecha_equipment/weapon/energy name = "General Energy Weapon" - - action(target) - if(!action_checks(target)) return - var/turf/curloc = chassis.loc - var/atom/targloc = get_turf(target) - if (!targloc || !istype(targloc, /turf) || !curloc) - return - if (targloc == curloc) - return - set_ready_state(0) - playsound(chassis, fire_sound, 50, 1) - var/obj/item/projectile/A = new projectile(curloc) - A.original = target - A.current = curloc - A.yo = targloc.y - curloc.y - A.xo = targloc.x - curloc.x - chassis.use_power(energy_drain) - A.process() - chassis.log_message("Fired from [src.name], targeting [target].") - do_after_cooldown() - return - + auto_rearm = 1 /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser equip_cooldown = 8 @@ -104,10 +131,9 @@ construction_cost = list("metal"=20000,"bananium"=10000) can_attach(obj/mecha/combat/honker/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 + if(!istype(M)) + return 0 + return ..() action(target) if(!chassis) @@ -152,15 +178,8 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic name = "General Ballisic Weapon" - var/projectiles var/projectile_energy_cost - action_checks(atom/target) - if(..()) - if(projectiles > 0) - return 1 - return 0 - get_equip_info() return "[..()]\[[src.projectiles]\][(src.projectiles < initial(src.projectiles))?" - Rearm":null]" @@ -188,38 +207,11 @@ equip_cooldown = 20 projectile = /obj/item/projectile/bullet/midbullet fire_sound = 'sound/weapons/Gunshot.ogg' + fire_volume = 80 projectiles = 40 + projectiles_per_shot = 4 + deviation = 0.7 projectile_energy_cost = 25 - var/projectiles_per_shot = 4 - var/deviation = 0.7 - - action(atom/target) - if(!action_checks(target)) return - var/turf/curloc = get_turf(chassis) - var/turf/targloc = get_turf(target) - if(!curloc || !targloc) return - var/target_x = targloc.x - var/target_y = targloc.y - var/target_z = targloc.z - targloc = null - for(var/i=1 to min(projectiles, projectiles_per_shot)) - targloc = locate(target_x+GaussRandRound(deviation,1),target_y+GaussRandRound(deviation,1),target_z) - if(!targloc || targloc == curloc) - break - playsound(chassis, fire_sound, 80, 1) - var/obj/item/projectile/A = new projectile(curloc) - src.projectiles-- - A.original = target - A.current = curloc - A.yo = targloc.y - curloc.y - A.xo = targloc.x - curloc.x - set_ready_state(0) - A.process() - log_message("Fired from [src.name], targeting [target].") - do_after_cooldown() - return - - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg name = "Ultra AC 2" @@ -228,41 +220,18 @@ projectile = /obj/item/projectile/bullet/weakbullet fire_sound = 'sound/weapons/Gunshot.ogg' projectiles = 300 + projectiles_per_shot = 3 + deviation = 0.3 projectile_energy_cost = 20 - var/projectiles_per_shot = 3 - var/deviation = 0.3 - - action(atom/target) - if(!action_checks(target)) return - var/turf/targloc = get_turf(target) - var/target_x = targloc.x - var/target_y = targloc.y - var/target_z = targloc.z - targloc = null - spawn for(var/i=1 to min(projectiles, projectiles_per_shot)) - if(!chassis) break - var/turf/curloc = get_turf(chassis) - targloc = locate(target_x+GaussRandRound(deviation,1),target_y+GaussRandRound(deviation,1),target_z) - if (!targloc || !curloc) - continue - if (targloc == curloc) - continue - - playsound(chassis, fire_sound, 50, 1) - var/obj/item/projectile/A = new projectile(curloc) - src.projectiles-- - A.original = target - A.current = curloc - A.yo = targloc.y - curloc.y - A.xo = targloc.x - curloc.x - A.process() - sleep(2) - set_ready_state(0) - log_message("Fired from [src.name], targeting [target].") - do_after_cooldown() - return /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack + var/missile_speed = 2 + var/missile_range = 30 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/Fire(atom/movable/AM, atom/target, turf/aimloc) + AM.throw_at(target,missile_range, missile_speed) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive name = "SRM-8 Missile Rack" icon_state = "mecha_missilerack" projectile = /obj/item/missile @@ -270,21 +239,11 @@ projectiles = 8 projectile_energy_cost = 1000 equip_cooldown = 60 - var/missile_speed = 2 - var/missile_range = 30 - - action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/missile/M = new projectile(chassis.loc) - M.primed = 1 - playsound(chassis, fire_sound, 50, 1) - M.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Fired from [src.name], targeting [target].") - do_after_cooldown() - return +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive/Fire(atom/movable/AM, atom/target, turf/aimloc) + var/obj/item/missile/M = AM + M.primed = 1 + ..() /obj/item/missile icon = 'icons/obj/grenade.dmi' @@ -311,18 +270,11 @@ equip_cooldown = 60 var/det_time = 20 - action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/weapon/grenade/flashbang/F = new projectile(chassis.loc) - playsound(chassis, fire_sound, 50, 1) - F.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Fired from [src.name], targeting [target].") - spawn(det_time) - F.prime() - do_after_cooldown() - return +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/Fire(atom/movable/AM, atom/target, turf/aimloc) + ..() + var/obj/item/weapon/grenade/flashbang/F = AM + spawn(det_time) + F.prime() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve name = "SOP-6 Grenade Launcher" @@ -348,49 +300,17 @@ construction_cost = list("metal"=20000,"bananium"=5000) can_attach(obj/mecha/combat/honker/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 + if(!istype(M)) + return 0 + return ..() - action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/weapon/bananapeel/B = new projectile(chassis.loc) - playsound(chassis, fire_sound, 60, 1) - B.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Bananed from [src.name], targeting [target]. HONK!") - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/mousetrap_mortar name = "Mousetrap Mortar" icon_state = "mecha_mousetrapmrtr" projectile = /obj/item/device/assembly/mousetrap - fire_sound = 'sound/items/bikehorn.ogg' - projectiles = 15 - missile_speed = 1.5 - projectile_energy_cost = 100 equip_cooldown = 10 - construction_time = 300 - construction_cost = list("metal"=20000,"bananium"=5000) - can_attach(obj/mecha/combat/honker/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - - action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/device/assembly/mousetrap/M = new projectile(chassis.loc) - M.secured = 1 - playsound(chassis, fire_sound, 60, 1) - M.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!") - do_after_cooldown() - return \ No newline at end of file +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/mousetrap_mortar/Fire(atom/movable/AM, atom/target, turf/aimloc) + var/obj/item/device/assembly/mousetrap/M = AM + M.secured = 1 + ..() \ No newline at end of file diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 7b72a5597bf..9e9e578ecf1 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -112,7 +112,7 @@ ///obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg, - ///obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar, HONK-related mech part + ///obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/mousetrap_mortar, HONK-related mech part ///obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar, Also HONK-related ///obj/item/mecha_parts/mecha_equipment/weapon/honker Thirdly HONK-related ), From b39dfc5229967dc4327f5df95a2e29e6613b0026 Mon Sep 17 00:00:00 2001 From: Segrain Date: Sat, 12 Oct 2013 19:49:29 +0300 Subject: [PATCH 3/4] Smallfix. --- code/game/mecha/equipment/weapons/weapons.dm | 1 + code/game/mecha/mecha_parts.dm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 870aa3d4411..07abbfcc948 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -223,6 +223,7 @@ projectiles_per_shot = 3 deviation = 0.3 projectile_energy_cost = 20 + fire_cooldown = 2 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack var/missile_speed = 2 diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 9d8c0696b29..2db25119fb3 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -6,7 +6,7 @@ name = "mecha part" icon = 'icons/mecha/mech_construct.dmi' icon_state = "blank" - w_class = 20 + w_class = 5 flags = FPRINT | TABLEPASS | CONDUCT origin_tech = "programming=2;materials=2" var/construction_time = 100 From f2bbc60d51b4f821e45cfc3185b50fc767077396 Mon Sep 17 00:00:00 2001 From: Segrain Date: Sat, 12 Oct 2013 21:19:54 +0300 Subject: [PATCH 4/4] Order fix. --- code/game/mecha/equipment/weapons/weapons.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 07abbfcc948..192599073a6 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -28,6 +28,10 @@ var/turf/targloc = get_turf(target) if(!curloc || !targloc) return + chassis.use_power(energy_drain) + chassis.visible_message("[chassis] fires [src]!") + occupant_message("You fire [src]!") + log_message("Fired from [src], targeting [target].") for(var/i = 1 to min(projectiles, projectiles_per_shot)) var/turf/aimloc = targloc if(deviation) @@ -43,10 +47,6 @@ if(auto_rearm) projectiles = projectiles_per_shot set_ready_state(0) - chassis.use_power(energy_drain) - chassis.visible_message("[chassis] fires [src]!") - occupant_message("You fire [src]!") - log_message("Fired from [src], targeting [target].") do_after_cooldown() return