Files
ff8e0404b9 New Mech - The Nkarrdem, Janitor Supreme (#26453)
* Nkarrdem Mech - Initial Commit

* Fabricator category, garbage bag, module designs

* Added combat tech requirement to cleaning grenade launcher

* Fixed a comment's spacing

* Construction codersprites

* Construction path updated

* Open and Broken sprites

* Codersprites, Construction fixes, Wreckage

* Better spacing for equalities, better return bool

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Equality spacing

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* playsound boolean fix

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Mech part comment spacing

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Parts list parenthesis spacing

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Spacing and boolean returns

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Another boolean return

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* More comment spacing

Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* More comment spacing

Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Ditto

Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Comment spacing

Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Comment spacing

Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Snake cased floor_buffer, removed excess comment

* Enhanced floor buffer

* Whole lot of time format changes

* HUD warning message update

* Cutting cargo

* Max equipment fix

* Spray fixes

* Light replacer fixes and defines moved

* Mop sound cooldowns

* Formatting, autodoc, spacing, and chat alert fixes

* Emag warning

* Removed excess returns, added click when spray empty

* Minor refactor of cleaning_act, removed the async mopping

* Excess user

* Formatting, Typecaching

* Replaces to_chat with occupant_message

* Type def, attack log, and timer for CGL

* Moved light replacement logic to light object as fix() proc

* Free performance is free performance

* To chat fix

* replaceLight changes

* Ranged fix

* Moved autodoc

* Early return in mop refilling

* Reordered early returns in mop action

* Applied change to cleaning documentation

* Moved acrtion, removed excess subtype

* Spray moved to internal spray item, various fixes

* Removed excess

* Internal garbage storage for garbage magnet

* Janimech storage handling, effect when emptying into disposals, user check in handle_item_insertion

* Extraneous Return

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Var declaration fix

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

---------

Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
2024-10-10 09:40:48 +00:00

554 lines
19 KiB
Plaintext

/obj/item/mecha_parts/mecha_equipment/weapon
name = "mecha weapon"
range = MECHA_RANGED
origin_tech = "materials=3;combat=3"
var/projectile
var/fire_sound
var/size=0
var/projectiles_per_shot = 1
var/variance = 0
var/randomspread = 0 //use random spread for machineguns, instead of shotgun scatter
var/projectile_delay = 0
var/projectiles
var/projectile_energy_cost
/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/mecha/combat/M as obj)
if(..())
if(istype(M))
if(size > M.maxsize)
return FALSE
return TRUE
else if(M.emagged)
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/proc/get_shot_amount()
return projectiles_per_shot
/obj/item/mecha_parts/mecha_equipment/weapon/action(target, params)
if(!action_checks(target))
return
var/turf/curloc = get_turf(chassis)
var/turf/targloc = get_turf(target)
if(!targloc || !istype(targloc) || !curloc)
return
if(targloc == curloc)
return
set_ready_state(0)
for(var/i=1 to get_shot_amount())
var/obj/item/projectile/A = new projectile(curloc)
A.firer = chassis.occupant
A.firer_source_atom = src
A.original = target
A.current = curloc
var/spread = 0
if(variance)
if(randomspread)
spread = round((rand() - 0.5) * variance)
else
spread = round((i / projectiles_per_shot - 0.5) * variance)
A.preparePixelProjectile(target, chassis.occupant, params2list(params), spread)
chassis.use_power(energy_drain)
projectiles--
A.fire()
playsound(chassis, fire_sound, 50, 1)
sleep(max(0, projectile_delay))
set_ready_state(0)
log_message("Fired from [name], targeting [target].")
add_attack_logs(chassis.occupant, target, "fired a [src]")
do_after_cooldown()
/obj/item/mecha_parts/mecha_equipment/weapon/energy
name = "general energy weapon"
size = 2
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
equip_cooldown = 0.8 SECONDS
name = "\improper CH-PS \"Firedart\" Laser"
icon_state = "mecha_firedart"
origin_tech = "magnets=3;combat=3;engineering=3"
energy_drain = 30
projectile = /obj/item/projectile/beam
fire_sound = 'sound/weapons/laser.ogg'
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler
equip_cooldown = 0.8 SECONDS
name = "\improper CH-DS \"Peacemaker\" disabler"
desc = "A weapon for combat exosuits. Shoots basic disablers."
icon_state = "mecha_disabler"
energy_drain = 30
projectile = /obj/item/projectile/beam/disabler
fire_sound = 'sound/weapons/taser2.ogg'
harmful = FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
equip_cooldown = 1 SECONDS
name = "\improper CH-LC \"Solaris\" Laser Cannon"
icon_state = "mecha_solaris"
origin_tech = "magnets=4;combat=4;engineering=3"
energy_drain = 60
projectile = /obj/item/projectile/beam/laser/heavylaser
fire_sound = 'sound/weapons/lasercannonfire.ogg'
/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
equip_cooldown = 4 SECONDS
name = "mkIV Ion Heavy Scatter Cannon"
desc = "An ion shotgun, that when fired gives the mecha a second of EMP shielding with the excess energy from the discharge."
icon_state = "mecha_ion"
origin_tech = "materials=4;combat=5;magnets=4"
energy_drain = 215 // This is per shot + 1x cost, so ~1500 per shotgun shot
projectile = /obj/item/projectile/ion/weak
projectiles_per_shot = 6
variance = 40
fire_sound = 'sound/weapons/ionrifle.ogg'
/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion/action()
chassis.emp_proof = TRUE
addtimer(VARSET_CALLBACK(chassis, emp_proof, FALSE), 1 SECONDS)
return ..()
/obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla
equip_cooldown = 3.5 SECONDS
name = "\improper P-X Tesla Cannon"
desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine."
icon_state = "mecha_teslacannon"
origin_tech = "materials=4;engineering=4;combat=6;magnets=6"
energy_drain = 500
projectile = /obj/item/projectile/energy/tesla_bolt
fire_sound = 'sound/magic/lightningbolt.ogg'
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/xray
equip_cooldown = 3.5 SECONDS
name = "\improper S-1 X-Ray Projector"
desc = "A weapon for combat exosuits. Fires beams of X-Rays that pass through solid matter."
icon_state = "mecha_xray"
origin_tech = "materials=3;combat=5;magnets=2;syndicate=2"
energy_drain = 80
projectile = /obj/item/projectile/beam/xray
fire_sound = 'sound/weapons/laser3.ogg'
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/xray/triple
name = "\improper X-XR Triple-barrel X-Ray Stream Projector"
projectiles_per_shot = 3
projectile_delay = 1
/obj/item/mecha_parts/mecha_equipment/weapon/energy/immolator
equip_cooldown = 3.5 SECONDS
name = "\improper ZFI Immolation Beam Gun"
desc = "A weapon for combat exosuits. Fires beams of extreme heat that set targets on fire."
icon_state = "mecha_immolator"
origin_tech = "materials=4;engineering=4;combat=6;magnets=6"
energy_drain = 80
projectile = /obj/item/projectile/beam/immolator
fire_sound = 'sound/weapons/laser3.ogg'
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse
equip_cooldown = 3 SECONDS
name = "eZ-13 mk2 Heavy Pulse Rifle"
icon_state = "mecha_pulse"
energy_drain = 120
origin_tech = "materials=3;combat=6;powerstorage=4"
projectile = /obj/item/projectile/beam/pulse/hitscan/heavy
fire_sound = 'sound/weapons/marauder.ogg'
harmful = TRUE
/obj/item/projectile/beam/pulse/hitscan/heavy
name = "heavy pulse laser"
icon_state = "pulse1_bl"
var/life = 20
/obj/item/projectile/beam/pulse/hitscan/heavy/Bump(atom/A)
A.bullet_act(src, def_zone)
life -= 10
if(ismob(A))
var/mob/M = A
if(ismob(firer))
add_attack_logs(firer, M, "Mecha-shot with <b>[src]</b>")
else
add_attack_logs(src, M, "Mecha-shot with <b>[src]</b> (no firer)")
if(life <= 0)
qdel(src)
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
equip_cooldown = 0.8 SECONDS
name = "\improper PBT \"Pacifier\" Mounted Taser"
icon_state = "mecha_taser"
origin_tech = "combat=3"
energy_drain = 20
projectile = /obj/item/projectile/energy/electrode
fire_sound = 'sound/weapons/taser.ogg'
size = 1
/obj/item/mecha_parts/mecha_equipment/weapon/honker
equip_cooldown = 15 SECONDS
name = "\improper HoNkER BlAsT 5000"
icon_state = "mecha_honker"
energy_drain = 200
range = MECHA_MELEE | MECHA_RANGED
/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M as obj)
if(..())
if(istype(M))
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target, params)
if(!chassis)
return
if(energy_drain && chassis.get_charge() < energy_drain)
return
if(!equip_ready)
return
playsound(chassis, 'sound/items/airhorn.ogg', 100, 1)
chassis.occupant_message("<font color='red' size='5'>HONK</font>")
for(var/mob/living/carbon/M in ohearers(6, chassis))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.check_ear_prot() >= HEARING_PROTECTION_TOTAL)
continue
to_chat(M, "<font color='red' size='7'>HONK</font>")
M.SetSleeping(0)
M.Stuttering(40 SECONDS)
M.Deaf(30 SECONDS)
M.KnockDown(6 SECONDS)
M.Jitter(40 SECONDS)
///else the mousetraps are useless
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(isobj(H.shoes) && !(H.shoes.flags & NODROP))
var/thingy = H.shoes
H.unEquip(H.shoes)
walk_away(thingy,chassis,15,2)
spawn(20)
if(thingy)
walk(thingy,0)
for(var/obj/mecha/combat/reticence/R in oview(6, chassis))
R.occupant_message("\The [R] has protected you from [chassis]'s HONK at the cost of some power.")
R.use_power(R.get_charge() / 4)
chassis.use_power(energy_drain)
log_message("Honked from [name]. HONK!")
var/turf/T = get_turf(src)
add_attack_logs(chassis.occupant, target, "used a Mecha Honker", ATKLOG_MOST)
log_game("[key_name(chassis.occupant)] used a Mecha Honker in [T.x], [T.y], [T.z]")
do_after_cooldown()
return
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic
name = "general ballistic weapon"
size = 2
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action_checks(atom/target)
if(..())
if(projectiles > 0)
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info()
return "[..()]\[[projectiles]\][(projectiles < initial(projectiles))?" - <a href='byond://?src=[UID()];rearm=1'>Rearm</a>":null]"
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/proc/rearm()
if(projectiles < initial(projectiles))
var/projectiles_to_add = initial(projectiles) - projectiles
while(chassis.get_charge() >= projectile_energy_cost && projectiles_to_add)
projectiles++
projectiles_to_add--
chassis.use_power(projectile_energy_cost)
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",get_equip_info())
log_message("Rearmed [name].")
playsound(src, 'sound/weapons/gun_interactions/rearm.ogg', 50, 1)
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/Topic(href, href_list)
..()
if(href_list["rearm"])
rearm()
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
equip_cooldown = 0.5 SECONDS
name = "\improper FNX-66 Carbine"
icon_state = "mecha_carbine"
origin_tech = "materials=4;combat=4"
projectile = /obj/item/projectile/bullet/incendiary/shell/dragonsbreath
fire_sound = 'sound/weapons/gunshots/gunshot_rifle.ogg'
projectiles = 24
projectile_energy_cost = 15
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced
equip_cooldown = 1.5 SECONDS
name = "\improper S.H.H. \"Quietus\" Carbine"
fire_sound = 'sound/weapons/gunshots/gunshot_silenced.ogg'
icon_state = "mecha_mime"
projectile = /obj/item/projectile/bullet/mime/nonlethal
projectiles = 20
projectile_energy_cost = 50
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced/can_attach(obj/mecha/combat/reticence/M as obj)
if(..())
if(istype(M))
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
equip_cooldown = 2 SECONDS
name = "\improper LBX AC 10 \"Scattershot\""
icon_state = "mecha_scatter"
origin_tech = "combat=4"
projectile = /obj/item/projectile/bullet/midbullet2
fire_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
projectiles = 40
projectile_energy_cost = 25
projectiles_per_shot = 4
variance = 25
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
equip_cooldown = 1 SECONDS
name = "\improper Ultra AC 2"
icon_state = "mecha_uac2"
origin_tech = "combat=4"
projectile = /obj/item/projectile/bullet/weakbullet3
fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg'
projectiles = 300
projectile_energy_cost = 20
projectiles_per_shot = 3
variance = 6
projectile_delay = 2
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/dual
name = "\improper XMG-9 Autocannon"
projectiles_per_shot = 6
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack
equip_cooldown = 6 SECONDS
name = "\improper SRM-8 Light Missile Rack"
icon_state = "mecha_missilerack_six"
origin_tech = "combat=5;materials=4;engineering=4"
projectile = /obj/item/projectile/missile/light
fire_sound = 'sound/effects/bang.ogg'
projectiles = 6
projectile_energy_cost = 1000
var/missile_speed = 2
var/missile_range = 30
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/heavy
name = "\improper SRX-13 Heavy Missile Launcher"
icon_state = "mecha_missilerack"
projectile = /obj/item/projectile/missile
projectiles = 9
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
equip_cooldown = 6 SECONDS
name = "\improper SGL-6 Flashbang Launcher"
icon_state = "mecha_grenadelnchr"
origin_tech = "combat=4;engineering=4"
projectile = /obj/item/grenade/flashbang
fire_sound = 'sound/effects/bang.ogg'
projectiles = 6
missile_speed = 1.5
projectile_energy_cost = 800
var/det_time = 20
size=1
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/action(target, params)
if(!action_checks(target))
return
set_ready_state(0)
var/obj/item/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 [name], targeting [target].")
spawn(det_time)
F.prime()
do_after_cooldown()
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve
equip_cooldown = 9 SECONDS
name = "\improper SOB-3 Clusterbang Launcher"
desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster."
origin_tech = "combat=4;materials=4"
projectiles = 3
projectile = /obj/item/grenade/clusterbuster
projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher.
size=1
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/get_equip_info()//Limited version of the clusterbang launcher that can't reload
return "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span>&nbsp;[chassis.selected==src?"<b>":"<a href='byond://?src=[chassis.UID()];select_equip=\ref[src]'>"][name][chassis.selected==src?"</b>":"</a>"]\[[projectiles]\]"
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/rearm()
return//Extra bit of security
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/cleaner
name = "\improper N23 Rotary Janitation Launcher"
desc = "A tool of mass cleaning. Launches primed cleaning foam grenades. Major slipping hazard."
icon_state = "mecha_grenadelnchr"
origin_tech = "combat=4;engineering=4"
projectile = /obj/item/grenade/chem_grenade/cleaner
fire_sound = 'sound/effects/bang.ogg'
equip_cooldown = 6 SECONDS
projectiles = 6
missile_speed = 1.5
projectile_energy_cost = 1000
size = 1
/// Time until grenade detonates
var/det_time = 2 SECONDS
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/cleaner/action(target, params)
if(!action_checks(target))
return
set_ready_state(0)
var/obj/item/grenade/chem_grenade/cleaner/grenade = new projectile(chassis.loc)
playsound(chassis, fire_sound, 50, TRUE)
grenade.throw_at(target, missile_range, missile_speed)
projectiles--
log_message("Fired from [name], targeting [target].")
log_attack(chassis.occupant, target, "Cleaning grenade fired from [name], targeting [target].")
addtimer(CALLBACK(grenade, TYPE_PROC_REF(/obj/item/grenade/chem_grenade/cleaner, prime)), det_time)
do_after_cooldown()
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/cleaner/can_attach(obj/mecha/nkarrdem/M as obj)
return ..() && istype(M)
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
equip_cooldown = 2 SECONDS
name = "banana mortar"
icon_state = "mecha_bananamrtr"
projectile = /obj/item/grown/bananapeel
fire_sound = 'sound/items/bikehorn.ogg'
projectiles = 15
missile_speed = 1.5
projectile_energy_cost = 100
harmful = FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/can_attach(obj/mecha/combat/honker/M as obj)
if(..())
if(istype(M))
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/action(target, params)
if(!action_checks(target))
return
set_ready_state(0)
var/obj/item/grown/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 [name], targeting [target]. HONK!")
do_after_cooldown()
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar
equip_cooldown = 1 SECONDS
name = "mousetrap mortar"
icon_state = "mecha_mousetrapmrtr"
projectile = /obj/item/assembly/mousetrap/armed
fire_sound = 'sound/items/bikehorn.ogg'
projectiles = 15
missile_speed = 1.5
projectile_energy_cost = 100
harmful = FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M as obj)
if(..())
if(istype(M))
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar/action(target, params)
if(!action_checks(target))
return
set_ready_state(0)
var/obj/item/assembly/mousetrap/armed/M = new projectile(chassis.loc)
M.secured = TRUE
playsound(chassis, fire_sound, 60, TRUE)
M.throw_at(target, missile_range, missile_speed)
projectiles--
log_message("Launched a mouse-trap from [name], targeting [target]. HONK!")
do_after_cooldown()
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola
equip_cooldown = 1 SECONDS
name = "\improper PCMK-6 Bola Launcher"
icon_state = "mecha_bola"
origin_tech = "combat=4;engineering=4"
projectile = /obj/item/restraints/legcuffs/bola
fire_sound = 'sound/weapons/whip.ogg'
projectiles = 10
missile_speed = 1
missile_range = 30
projectile_energy_cost = 50
harmful = FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola/can_attach(obj/mecha/combat/gygax/M as obj)
if(..())
if(istype(M))
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola/action(target, params)
if(!action_checks(target))
return
set_ready_state(0)
var/obj/item/restraints/legcuffs/bola/M = new projectile(chassis.loc)
playsound(chassis, fire_sound, 50, 1)
M.throw_at(target, missile_range, missile_speed)
projectiles--
log_message("Fired from [name], targeting [target].")
do_after_cooldown()
/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma
equip_cooldown = 1 SECONDS
name = "\improper 217-D Heavy Plasma Cutter"
desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles."
icon_state = "mecha_plasmacutter"
item_state = "plasmacutter"
lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/guns_righthand.dmi'
energy_drain = 30
origin_tech = "materials=3;plasmatech=4;engineering=3"
projectile = /obj/item/projectile/plasma/adv/mech
fire_sound = 'sound/weapons/laser.ogg'
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/M)
if(istype(M, /obj/mecha/working))
if(length(M.equipment)<M.max_equip)
return TRUE
return FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/mining_grenade
name = "\improper \"Little boy\" Mining Grenade Launcher"
icon_state = "mining_launcher"
origin_tech = "combat=5;materials=4;engineering=4"
projectile = /obj/item/projectile/bullet/reusable/mining_bomb/mecha
fire_sound = 'sound/effects/bang.ogg'
energy_drain = 150 // cost a lot, but powerful miner tool
equip_cooldown = 2 SECONDS
/obj/item/mecha_parts/mecha_equipment/weapon/energy/mining_grenade/action()
if(!lavaland_equipment_pressure_check(get_turf(chassis)))
to_chat(chassis.occupant, "<span class='warning'>ERROR, OVER PRESSURE!</span>") // no station terror(yet)
playsound(chassis.occupant, 'sound/weapons/gun_interactions/dry_fire.ogg', 25, TRUE)
return FALSE
return ..()
/obj/item/mecha_parts/mecha_equipment/weapon/energy/mining_grenade/can_attach(obj/mecha/M)
if(istype(M, /obj/mecha/working))
if(length(M.equipment) < M.max_equip)
return TRUE
return FALSE