mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Adds three flame-themed illegal Mech weapons and more. (#4058)
* Adds three flame-themed illegal Mech weapons. Allows anything using apply_effects to be incendiary and ignite/apply firestacks. Also absolute-paths the spilled fuel effects. * Removes world << because I'm a good coder honest. * Why does Git do this for no reason.
This commit is contained in:
@@ -290,4 +290,48 @@
|
||||
return "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [chassis.selected==src?"<b>":"<a href='?src=\ref[chassis];select_equip=\ref[src]'>"][src.name][chassis.selected==src?"</b>":"</a>"]\[[src.projectiles]\]"
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/rearm()
|
||||
return//Extra bit of security
|
||||
return//Extra bit of security
|
||||
|
||||
//////////////
|
||||
//Fire-based//
|
||||
//////////////
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/incendiary
|
||||
name = "\improper DR-AC 3"
|
||||
desc = "Dual-barrel rotary machinegun that fires small, incendiary rounds. Ages ten and up."
|
||||
description_fluff = "A weapon designed by Hephaestus Industries, the DR-AC 3's design was plagued by prototype faults including but not limited to: Spontaneous combustion, spontaneous detonation, and excessive collateral conflagration."
|
||||
icon_state = "mecha_drac3"
|
||||
equip_cooldown = 20
|
||||
projectile = /obj/item/projectile/bullet/incendiary
|
||||
fire_sound = 'sound/weapons/machinegun.ogg'
|
||||
projectiles = 30
|
||||
projectiles_per_shot = 2
|
||||
deviation = 0.4
|
||||
projectile_energy_cost = 40
|
||||
fire_cooldown = 3
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 5, TECH_PHORON = 2, TECH_ILLEGAL = 1)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer
|
||||
equip_cooldown = 30
|
||||
name = "\improper CR-3 Mark 8"
|
||||
desc = "An imposing device, this weapon hurls balls of fire."
|
||||
description_fluff = "A weapon designed by Hephaestus for anti-infantry combat, the CR-3 is capable of outputting a large volume of synthesized fuel. Initially designed by a small company, later purchased by Aether, on Earth as a device made for clearing underbrush and co-operating with firefighting operations. Obviously, Hephaestus has found an 'improved' use for the Aether designs."
|
||||
icon_state = "mecha_cremate"
|
||||
|
||||
energy_drain = 30
|
||||
|
||||
projectile = /obj/item/projectile/bullet/incendiary/flamethrower/large
|
||||
fire_sound = 'sound/weapons/towelwipe.ogg'
|
||||
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 6, TECH_PHORON = 4, TECH_ILLEGAL = 4)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
|
||||
name = "\improper AA-CR-1 Mark 4"
|
||||
description_fluff = "A firefighting tool maintained by Aether Atmospherics, whose initial design originated from a small Earth company. This one seems to have been jury rigged."
|
||||
|
||||
energy_drain = 50
|
||||
required_type = list(/obj/mecha/combat, /obj/mecha/working)
|
||||
|
||||
projectile = /obj/item/projectile/bullet/incendiary/flamethrower
|
||||
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2)
|
||||
|
||||
@@ -6,66 +6,66 @@
|
||||
anchored = 1
|
||||
var/amount = 1
|
||||
|
||||
New(turf/newLoc,amt=1,nologs=0)
|
||||
if(!nologs)
|
||||
message_admins("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[newLoc.x];Y=[newLoc.y];Z=[newLoc.z]'>JMP</a>)")
|
||||
log_game("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z])")
|
||||
src.amount = amt
|
||||
/obj/effect/decal/cleanable/liquid_fuel/New(turf/newLoc,amt=1,nologs=0)
|
||||
if(!nologs)
|
||||
message_admins("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[newLoc.x];Y=[newLoc.y];Z=[newLoc.z]'>JMP</a>)")
|
||||
log_game("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z])")
|
||||
src.amount = amt
|
||||
|
||||
var/has_spread = 0
|
||||
//Be absorbed by any other liquid fuel in the tile.
|
||||
for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc)
|
||||
if(other != src)
|
||||
other.amount += src.amount
|
||||
other.Spread()
|
||||
has_spread = 1
|
||||
break
|
||||
|
||||
. = ..()
|
||||
if(!has_spread)
|
||||
Spread()
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
proc/Spread(exclude=list())
|
||||
//Allows liquid fuels to sometimes flow into other tiles.
|
||||
if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate.
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/target = get_step(src,d)
|
||||
var/turf/simulated/origin = get_turf(src)
|
||||
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
|
||||
if(other_fuel)
|
||||
other_fuel.amount += amount*0.25
|
||||
if(!(other_fuel in exclude))
|
||||
exclude += src
|
||||
other_fuel.Spread(exclude)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1)
|
||||
amount *= 0.75
|
||||
|
||||
|
||||
flamethrower_fuel
|
||||
icon_state = "mustard"
|
||||
anchored = 0
|
||||
New(newLoc, amt = 1, d = 0)
|
||||
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
|
||||
. = ..()
|
||||
var/has_spread = 0
|
||||
//Be absorbed by any other liquid fuel in the tile.
|
||||
for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc)
|
||||
if(other != src)
|
||||
other.amount += src.amount
|
||||
other.Spread()
|
||||
has_spread = 1
|
||||
break
|
||||
|
||||
. = ..()
|
||||
if(!has_spread)
|
||||
Spread()
|
||||
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
|
||||
if(amount < 0.1) return
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
for(var/d in list(turn(dir,90),turn(dir,-90), dir))
|
||||
var/turf/simulated/O = get_step(S,d)
|
||||
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
|
||||
continue
|
||||
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
|
||||
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
|
||||
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
|
||||
/obj/effect/decal/cleanable/liquid_fuel/proc/Spread(exclude=list())
|
||||
//Allows liquid fuels to sometimes flow into other tiles.
|
||||
if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate.
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/target = get_step(src,d)
|
||||
var/turf/simulated/origin = get_turf(src)
|
||||
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
|
||||
if(other_fuel)
|
||||
other_fuel.amount += amount*0.25
|
||||
if(!(other_fuel in exclude))
|
||||
exclude += src
|
||||
other_fuel.Spread(exclude)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1)
|
||||
amount *= 0.75
|
||||
|
||||
amount *= 0.25
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel
|
||||
icon_state = "mustard"
|
||||
anchored = 0
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/New(newLoc, amt = 1, d = 0)
|
||||
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
|
||||
. = ..()
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Spread()
|
||||
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
|
||||
if(amount < 0.1) return
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
|
||||
for(var/d in list(turn(dir,90),turn(dir,-90), dir))
|
||||
var/turf/simulated/O = get_step(S,d)
|
||||
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
|
||||
continue
|
||||
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
|
||||
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
|
||||
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
|
||||
|
||||
amount *= 0.25
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0)
|
||||
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0, var/ignite = 0, var/flammable = 0)
|
||||
if(blocked >= 100)
|
||||
return 0
|
||||
if(stun) apply_effect(stun, STUN, blocked)
|
||||
@@ -98,4 +98,6 @@
|
||||
if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked)
|
||||
if(drowsy) apply_effect(drowsy, DROWSY, blocked)
|
||||
if(agony) apply_effect(agony, AGONY, blocked)
|
||||
if(flammable) adjust_fire_stacks(flammable)
|
||||
if(ignite) IgniteMob()
|
||||
return 1
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
var/penetrating = 0 //If greater than zero, the projectile will pass through dense objects as specified by on_penetrate()
|
||||
var/kill_count = 50 //This will de-increment every process(). When 0, it will delete the projectile.
|
||||
//Effects
|
||||
var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 maybe later for burst of fire around the impact point. - Mech
|
||||
var/flammability = 0 //Amount of fire stacks to add for the above.
|
||||
var/stun = 0
|
||||
var/weaken = 0
|
||||
var/paralyze = 0
|
||||
@@ -78,7 +80,7 @@
|
||||
if(!isliving(target)) return 0
|
||||
// if(isanimal(target)) return 0
|
||||
var/mob/living/L = target
|
||||
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked) // add in AGONY!
|
||||
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked, incendiary, flammability) // add in AGONY!
|
||||
return 1
|
||||
|
||||
//called when the projectile stops flying because it collided with something
|
||||
@@ -322,6 +324,10 @@
|
||||
else if(!bumped)
|
||||
tracer_effect(effect_transform)
|
||||
|
||||
if(incendiary >= 2)
|
||||
var/trail_volume = (flammability * 0.10)
|
||||
new /obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(src.loc, trail_volume, src.dir)
|
||||
|
||||
if(!hitscan)
|
||||
sleep(step_delay) //add delay between movement iterations if it's not a hitscan weapon
|
||||
|
||||
|
||||
@@ -252,6 +252,31 @@
|
||||
explosion(target, -1, 0, 2)
|
||||
..()
|
||||
|
||||
/* Incendiary */
|
||||
|
||||
/obj/item/projectile/bullet/incendiary
|
||||
name = "incendiary bullet"
|
||||
icon_state = "bullet_alt"
|
||||
damage = 15
|
||||
damage_type = BURN
|
||||
incendiary = 1
|
||||
flammability = 2
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower
|
||||
name = "ball of fire"
|
||||
desc = "Don't stand in the fire."
|
||||
icon_state = "fireball"
|
||||
damage = 10
|
||||
embed_chance = 0
|
||||
incendiary = 2
|
||||
flammability = 4
|
||||
agony = 30
|
||||
kill_count = 4
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower/large
|
||||
damage = 15
|
||||
kill_count = 6
|
||||
|
||||
/obj/item/projectile/bullet/blank
|
||||
invisibility = 101
|
||||
damage = 1
|
||||
|
||||
@@ -354,6 +354,30 @@
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000, "gold" = 4500, "uranium" = 4500)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited
|
||||
|
||||
/datum/design/item/mecha/weapon/flamer
|
||||
name = "CR-3 Mark 8 Flamethrower"
|
||||
desc = "A weapon that violates the CCWC at two hundred gallons per minute."
|
||||
id = "mech_flamer_full"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 6, TECH_PHORON = 4, TECH_ILLEGAL = 4)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 2000, "uranium" = 3000, "phoron" = 8000)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer
|
||||
|
||||
/datum/design/item/mecha/weapon/flamer_rigged
|
||||
name = "AA-CR-1 Mark 4 Flamethrower"
|
||||
desc = "A weapon that accidentally violates the CCWC at one hundred gallons per minute."
|
||||
id = "mech_flamer_rigged"
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 8000, "gold" = 1500, "silver" = 1500, "uranium" = 2000, "phoron" = 6000)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
|
||||
|
||||
/datum/design/item/mecha/weapon/flame_mg
|
||||
name = "DR-AC 3 Incendiary Rotary MG"
|
||||
desc = "A weapon that violates the CCWC at sixty rounds a minute."
|
||||
id = "mech_lmg_flamer"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 5, TECH_PHORON = 2, TECH_ILLEGAL = 1)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 8000, "gold" = 2000, "silver" = 1750, "uranium" = 1500, "phoron" = 4000)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/incendiary
|
||||
|
||||
// *** Nonweapon modules
|
||||
/datum/design/item/mecha/wormhole_gen
|
||||
name = "Wormhole generator"
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 17 KiB |
Reference in New Issue
Block a user