Adds some new mech weaponry for the legion, changes the way mech decals are applied (#7534)

This commit is contained in:
fernerr
2019-12-03 18:35:14 +01:00
committed by Werner
parent bb18893eb3
commit 06b9d15ee8
24 changed files with 680 additions and 489 deletions

View File

@@ -26,4 +26,5 @@
#define MECH_LEG_LAYER 4.04
#define MECH_COCKPIT_LAYER 4.05
#define MECH_ARM_LAYER 4.06
#define MECH_GEAR_LAYER 4.07
#define MECH_DECAL_LAYER 4.07
#define MECH_GEAR_LAYER 4.08

View File

@@ -83,7 +83,7 @@ STOCK_ITEM_RARE(exogear, 1.5)
/obj/item/mecha_equipment/clamp = 1,
/obj/item/mecha_equipment/drill = 1,
/obj/item/mecha_equipment/mounted_system/extinguisher = 1,
/obj/item/mecha_equipment/mounted_system/rcd = 0.08,
/obj/item/mecha_equipment/mounted_system/rfd = 0.08,
/obj/item/mecha_equipment/mounted_system/plasmacutter = 0.5,
/obj/item/mecha_equipment/catapult = 0.8,
/obj/item/mecha_equipment/sleeper = 0.9

View File

@@ -65,9 +65,9 @@
var/list/new_overlays = get_mech_icon(list(legs, head, body, arms), layer)
if(body)
density = TRUE
overlays += get_mech_image(null, "[body.icon_state]_cockpit", body.icon, body.color)
overlays += get_mech_image("[body.icon_state]_cockpit", body.icon, body.color)
if(body.pilot_coverage < 100 || body.transparent_cabin)
new_overlays += get_mech_image(null, "[body.icon_state]_open_overlay", body.icon, body.color)
new_overlays += get_mech_image("[body.icon_state]_open_overlay", body.icon, body.color)
else
density = FALSE
overlays = new_overlays

View File

@@ -44,6 +44,22 @@
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_ADVWEAPONS)
/obj/item/mecha_equipment/mounted_system/blaster
name = "rapidfire blaster"
desc = "A weapon for combat exosuits. Shoots armor penetrating blaster beams."
icon_state = "mecha_blaster"
holding_type = /obj/item/gun/energy/blaster/mounted/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
/obj/item/mecha_equipment/mounted_system/gauss
name = "heavy gauss cannon"
desc = "A weapon for combat exosuits. Shoots high explosive gauss propelled projectiles."
icon_state = "mecha_gauss"
holding_type = /obj/item/gun/energy/gauss/mounted/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
/obj/item/gun/energy/taser/mounted/mech
use_external_power = TRUE
self_recharge = TRUE
@@ -90,6 +106,22 @@
restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
/obj/item/mecha_equipment/mounted_system/grenadetear
name = "teargas launcher"
desc = "The SGL-6TGL grenade launcher is designated to launch primed teargas grenades."
icon_state = "mecha_grenadelnchr"
holding_type = /obj/item/gun/launcher/mech/mountedtgl
restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
/obj/item/mecha_equipment/mounted_system/grenadesmoke
name = "smoke grenade launcher"
desc = "The SGL-6SGL grenade launcher is designated to launch primed smoke grenades."
icon_state = "mecha_grenadelnchr"
holding_type = /obj/item/gun/launcher/mech/mountedsgl
restricted_hardpoints = list(HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
/obj/item/gun/launcher/mech
name = "mounted mech launcher"
desc = "Shouldn't be seeing this."
@@ -191,6 +223,52 @@
addtimer(CALLBACK(src, .proc/regen_proj), proj_gen_time, TIMER_UNIQUE)
return g
/obj/item/gun/launcher/mech/mountedtgl
name = "mounted teargas launcher"
desc = "The SGL-6TGL grenade launcher is designated to launch primed teargas grenades."
icon = 'icons/obj/robot_items.dmi'
icon_state = "smg"
item_state = "smg"
fire_sound = 'sound/weapons/grenadelaunch.ogg'
release_force = 5
throw_distance = 7
proj = 3
max_proj = 3
proj_gen_time = 200
/obj/item/gun/launcher/mech/mountedtgl/consume_next_projectile()
if(proj < 1) return null
var/obj/item/grenade/chem_grenade/teargas/tg = new (src)
tg.det_time = 10
tg.activate(null)
proj--
addtimer(CALLBACK(src, .proc/regen_proj), proj_gen_time, TIMER_UNIQUE)
return tg
/obj/item/gun/launcher/mech/mountedsgl
name = "mounted smoke launcher"
desc = "The SGL-6SGL grenade launcher is designated to launch primed smoke grenades."
icon = 'icons/obj/robot_items.dmi'
icon_state = "smg"
item_state = "smg"
fire_sound = 'sound/weapons/grenadelaunch.ogg'
release_force = 5
throw_distance = 7
proj = 3
max_proj = 3
proj_gen_time = 200
/obj/item/gun/launcher/mech/mountedsgl/consume_next_projectile()
if(proj < 1) return null
var/obj/item/grenade/smokebomb/sg = new (src)
sg.det_time = 10
sg.activate(null)
proj--
addtimer(CALLBACK(src, .proc/regen_proj), proj_gen_time, TIMER_UNIQUE)
return sg
/obj/item/gun/launcher/mech/get_hardpoint_maptext()
return "[proj]/[max_proj]"

View File

@@ -1,5 +1,6 @@
/obj/item/mecha_equipment/mounted_system/rcd
icon_state = "mech_rfd"
/obj/item/mecha_equipment/mounted_system/rfd
name = "mounted rfd"
icon_state = "mecha_rfd"
holding_type = /obj/item/rfd/construction/borg
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)
restricted_software = list(MECH_SOFTWARE_ENGINEERING)
@@ -21,6 +22,7 @@
return null
/obj/item/extinguisher/mech
name = "mounted fire extinguisher"
max_water = 4000 //Good is gooder
icon_state = "mecha_exting"

View File

@@ -266,6 +266,7 @@
/obj/item/mecha_equipment/mounted_system/medanalyzer
name = "mounted health analyzer"
icon_state = "mecha_healthyanalyzer"
holding_type = /obj/item/device/healthanalyzer/adv/mech
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND)

View File

@@ -1,23 +1,13 @@
var/global/list/mecha_image_cache = list()
var/global/list/mecha_icon_cache = list()
proc/get_mech_image(var/decal, var/cache_key, var/cache_icon, var/image_colour, var/overlay_layer = FLOAT_LAYER)
var/use_key = "[cache_key]-[cache_icon]-[decal ? decal : "none"]-[image_colour ? image_colour : "none"]"
proc/get_mech_image(var/cache_key, var/cache_icon, var/image_colour, var/overlay_layer = FLOAT_LAYER)
var/use_key = "[cache_key]-[cache_icon]-[image_colour ? image_colour : "none"]"
if(image_colour) use_key += "-[image_colour]"
if(!mecha_image_cache[use_key])
var/image/I = image(icon = cache_icon, icon_state = cache_key)
if(image_colour)
I.color = image_colour
if(decal)
var/decal_key = "[decal]-[cache_key]"
if(!global.mecha_icon_cache[decal_key])
var/template_key = "template-[cache_key]"
if(!global.mecha_icon_cache[template_key])
global.mecha_icon_cache[template_key] = icon(cache_icon, "[cache_key]_mask")
var/icon/decal_icon = icon('icons/mecha/mecha_decals.dmi', decal)
decal_icon.Blend(global.mecha_icon_cache[template_key], ICON_MULTIPLY)
global.mecha_icon_cache[decal_key] = decal_icon
I.overlays += get_mech_image(null, decal_key, global.mecha_icon_cache[decal_key])
I.layer = overlay_layer
I.plane = FLOAT_PLANE
global.mecha_image_cache[use_key] = I
@@ -26,30 +16,38 @@ proc/get_mech_image(var/decal, var/cache_key, var/cache_icon, var/image_colour,
proc/get_mech_icon(var/list/components = list(), var/overlay_layer = FLOAT_LAYER)
var/list/all_images = list()
for(var/obj/item/mech_component/comp in components)
all_images += get_mech_image(comp.decal, comp.icon_state, comp.on_mech_icon, comp.color, overlay_layer)
all_images += get_mech_image(comp.icon_state, comp.on_mech_icon, comp.color, overlay_layer)
return all_images
/mob/living/heavy_vehicle/update_icon()
var/list/mecha_weapon_overlays = list()
mecha_weapon_overlays = icon_states('icons/mecha/mecha_weapon_overlays.dmi')
var/list/new_overlays = get_mech_icon(list(body, head), MECH_BASE_LAYER)
if(body && !hatch_closed)
new_overlays += get_mech_image(body.decal, "[body.icon_state]_cockpit", body.on_mech_icon, MECH_BASE_LAYER)
new_overlays += get_mech_image("[body.icon_state]_cockpit", body.on_mech_icon, MECH_BASE_LAYER)
update_pilot_overlay(FALSE)
if(LAZYLEN(pilot_overlays))
new_overlays += pilot_overlays
if(body)
new_overlays += get_mech_image(body.decal, "[body.icon_state]_overlay[hatch_closed ? "" : "_open"]", body.on_mech_icon, body.color, MECH_COCKPIT_LAYER)
new_overlays += get_mech_image("[body.icon_state]_overlay[hatch_closed ? "" : "_open"]", body.on_mech_icon, body.color, MECH_COCKPIT_LAYER)
if(arms)
new_overlays += get_mech_image(arms.decal, arms.icon_state, arms.on_mech_icon, arms.color, MECH_ARM_LAYER)
new_overlays += get_mech_image(arms.icon_state, arms.on_mech_icon, arms.color, MECH_ARM_LAYER)
if(legs)
new_overlays += get_mech_image(legs.decal, legs.icon_state, legs.on_mech_icon, legs.color, MECH_LEG_LAYER)
new_overlays += get_mech_image(legs.icon_state, legs.on_mech_icon, legs.color, MECH_LEG_LAYER)
var/list/mecha_decal_overlays = list()
mecha_decal_overlays = icon_states('icons/mecha/mecha_decals.dmi')
if(decal)
if(decal in mecha_decal_overlays)
new_overlays += get_mech_image(decal, 'icons/mecha/mecha_decals.dmi', null, MECH_DECAL_LAYER)
var/list/mecha_weapon_overlays = list()
mecha_weapon_overlays = icon_states('icons/mecha/mecha_weapon_overlays.dmi')
for(var/hardpoint in hardpoints)
var/obj/item/mecha_equipment/hardpoint_object = hardpoints[hardpoint]
if(hardpoint_object)
var/use_icon_state = "[hardpoint_object.icon_state]_[hardpoint]"
if(use_icon_state in mecha_weapon_overlays)
new_overlays += get_mech_image(null, use_icon_state, 'icons/mecha/mecha_weapon_overlays.dmi', null, hardpoint_object.mech_layer)
new_overlays += get_mech_image(use_icon_state, 'icons/mecha/mecha_weapon_overlays.dmi', null, hardpoint_object.mech_layer)
overlays = new_overlays
/mob/living/heavy_vehicle/proc/update_pilot_overlay(var/update_overlays = TRUE)

View File

@@ -7,6 +7,7 @@
status_flags = PASSEMOTES
a_intent = I_HURT
mob_size = MOB_LARGE
var/decal
var/emp_damage = 0

View File

@@ -1,9 +1,12 @@
/mob/living/heavy_vehicle/premade
name = "impossible mech"
desc = "It seems to be saying 'please let me die'."
var/decal
icon = 'icons/mecha/mecha.dmi'
icon_state = "ripley"
/mob/living/heavy_vehicle/premade/Initialize()
icon = null
icon_state = null
if(arms)
arms.decal = decal
arms.prebuild()

View File

@@ -1,6 +1,7 @@
/mob/living/heavy_vehicle/premade/combat
name = "combat exosuit"
desc = "A sleek, modern combat exosuit."
icon_state = "durand"
/mob/living/heavy_vehicle/premade/combat/Initialize()
if(!arms)

View File

@@ -1,6 +1,7 @@
/mob/living/heavy_vehicle/premade/heavy
name = "Heavy exosuit"
desc = "A heavily armored combat exosuit."
icon_state = "durand"
/mob/living/heavy_vehicle/premade/heavy/Initialize()
if(!arms)
@@ -88,6 +89,7 @@
/mob/living/heavy_vehicle/premade/superheavy
name = "Marauder"
desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations."
icon_state = "darkgygax"
/mob/living/heavy_vehicle/premade/superheavy/Initialize()
if(!arms)

View File

@@ -1,6 +1,7 @@
/mob/living/heavy_vehicle/premade/light
name = "light exosuit"
desc = "A light and agile exosuit."
icon_state = "odysseus"
/mob/living/heavy_vehicle/premade/light/Initialize()
if(!arms)
@@ -86,4 +87,33 @@
"[WEST]" = list("x" = 9, "y" = -2)
)
)
. = ..()
. = ..()
/mob/living/heavy_vehicle/premade/light/legion
name = "legion support exosuit"
desc = "A light and agile exosuit painted in the colours of the Tau Ceti Foreign Legion."
icon_state = "odysseus"
/mob/living/heavy_vehicle/premade/light/legion/Initialize()
if(!arms)
arms = new /obj/item/mech_component/manipulators/light(src)
arms.color = "#849bc1"
if(!legs)
legs = new /obj/item/mech_component/propulsion/light(src)
legs.color = "#849bc1"
if(!head)
head = new /obj/item/mech_component/sensors/light(src)
head.color = "#849bc1"
if(!body)
body = new /obj/item/mech_component/chassis/light(src)
body.color = "#849bc1"
. = ..()
/mob/living/heavy_vehicle/premade/light/legion/spawn_mech_equipment()
install_system(new /obj/item/mecha_equipment/clamp(src), HARDPOINT_RIGHT_HAND)
install_system(new /obj/item/mecha_equipment/mounted_system/medanalyzer(src), HARDPOINT_LEFT_HAND)
install_system(new /obj/item/mecha_equipment/sleeper(src), HARDPOINT_BACK)
install_system(new /obj/item/mecha_equipment/light(src), HARDPOINT_HEAD)
install_system(new /obj/item/mecha_equipment/mounted_system/flarelauncher(src), HARDPOINT_RIGHT_SHOULDER)
install_system(new /obj/item/mecha_equipment/crisis_drone(src), HARDPOINT_LEFT_SHOULDER)

View File

@@ -87,16 +87,19 @@
/mob/living/heavy_vehicle/premade/ripley/flames_red
name = "APLU \"Firestarter\""
desc = "An ancient but well-liked cargo handling exosuit. This one has cool red flames."
icon_state = "ripley_flames_red"
decal = "flames_red"
/mob/living/heavy_vehicle/premade/ripley/flames_blue
name = "APLU \"Burning Chrome\""
desc = "An ancient but well-liked cargo handling exosuit. This one has cool blue flames."
icon_state = "ripley_flames_blue"
decal = "flames_blue"
/mob/living/heavy_vehicle/premade/firefighter
name = "firefighting exosuit"
desc = "A mix and match of industrial parts designed to withstand fires."
icon_state = "firefighter"
/mob/living/heavy_vehicle/premade/firefighter/Initialize()
if(!arms)
@@ -129,6 +132,8 @@
/mob/living/heavy_vehicle/premade/combatripley
name = "combat APLU \"Ripley\""
desc = "A large APLU unit fitted with specialized composite armor and fancy, though old targeting systems."
icon_state = "combatripley"
decal = "ripley_legion"
/mob/living/heavy_vehicle/premade/combatripley/Initialize()
if(!arms)
@@ -150,9 +155,10 @@
/mob/living/heavy_vehicle/premade/combatripley/spawn_mech_equipment()
..()
install_system(new /obj/item/mecha_equipment/drill(src), HARDPOINT_LEFT_HAND)
install_system(new /obj/item/mecha_equipment/mounted_system/taser/laser(src), HARDPOINT_RIGHT_HAND)
install_system(new /obj/item/mecha_equipment/mounted_system/grenadeflash(src), HARDPOINT_RIGHT_SHOULDER)
install_system(new /obj/item/mecha_equipment/mounted_system/blaster(src), HARDPOINT_LEFT_HAND)
install_system(new /obj/item/mecha_equipment/mounted_system/gauss(src), HARDPOINT_RIGHT_HAND)
install_system(new /obj/item/mecha_equipment/mounted_system/flarelauncher(src), HARDPOINT_RIGHT_SHOULDER)
install_system(new /obj/item/mecha_equipment/mounted_system/grenadesmoke(src), HARDPOINT_LEFT_SHOULDER)
/obj/item/mech_component/sensors/combatripley
name = "exosuit sensors"

View File

@@ -20,6 +20,20 @@
list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=2, burst_accuracy=list(1,0,0), dispersion=list(0, 10, 15))
)
/obj/item/gun/energy/blaster/mounted/mech
name = "rapidfire blaster"
desc = "An aged but reliable rapidfire blaster tuned to expel projectiles at high fire rates."
fire_sound = 'sound/weapons/laserstrong.ogg'
projectile_type = /obj/item/projectile/energy/blaster/heavy
burst = 5
burst_delay = 3
max_shots = 30
charge_cost = 100
use_external_power = TRUE
self_recharge = TRUE
recharge_time = 1.5
dispersion = list(3,6,9,12)
/obj/item/gun/energy/blaster/revolver
name = "blaster revolver"
desc = "A robust eight-shot blaster.."
@@ -47,7 +61,6 @@
desc = "A robust, low in maintenance, eight-shot blaster. Perfect for self-defense purposes."
/obj/item/gun/energy/blaster/carbine
name = "blaster carbine"
desc = "A short-barreled blaster carbine meant for easy handling and comfort when in combat."
icon_state = "blaster_carbine"

View File

@@ -225,7 +225,6 @@
allowed_magazines = list(/obj/item/ammo_magazine/gauss)
icon_state = "gauss_thumper"
caliber = "gauss"
accuracy = 1
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/railgun.ogg'
load_method = MAGAZINE
@@ -249,4 +248,20 @@
item_state = "gauss_thumper"
update_held_icon()
return
return
/obj/item/gun/energy/gauss/mounted/mech
name = "heavy gauss cannon"
desc = "An outdated and power hungry gauss cannon, modified to deliver high explosive rounds at high velocities."
icon = 'icons/obj/gun.dmi'
icon_state = "gauss_thumper"
fire_sound = 'sound/weapons/railgun.ogg'
fire_delay = 30
charge_meter = 0
max_shots = 3
charge_cost = 500
projectile_type = /obj/item/projectile/bullet/gauss/highex
self_recharge = 1
use_external_power = 1
recharge_time = 12
needspin = FALSE

View File

@@ -329,6 +329,22 @@
muzzle_type = /obj/effect/projectile/muzzle/gauss
embed = 0
/obj/item/projectile/bullet/gauss/highex
name ="high-ex shell"
damage = 10
/obj/item/projectile/bullet/gauss/highex/on_impact(var/atom/A)
explosion(A, -1, 0, 2)
..()
/obj/item/projectile/bullet/gauss/highex/on_hit(var/atom/target, var/blocked = 0)
explosion(target, -1, 0, 2)
sleep(0)
var/obj/T = target
var/throwdir = get_dir(firer,target)
T.throw_at(get_edge_target_turf(target, throwdir),3,3)
return 1
/obj/item/projectile/bullet/cannonball
name = "cannonball"
icon_state = "cannonball"

View File

@@ -278,7 +278,7 @@
time = 90
materials = list(DEFAULT_WALL_MATERIAL = 30000, "phoron" = 25000, "steel" = 15000, "gold" = 15000)
req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER = 4, TECH_ENGINEERING = 4)
build_path = /obj/item/mecha_equipment/mounted_system/rcd
build_path = /obj/item/mecha_equipment/mounted_system/rfd
/datum/design/item/mechfab/exosuit/floodlight
name = "floodlight"