mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-28 02:53:11 +00:00
Triple Trouble
Imma write an actual description on git
This commit is contained in:
@@ -0,0 +1,371 @@
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift
|
||||
name = "Rift Magus"
|
||||
maxHealth = 450 //Boss Mobs should be tanky.
|
||||
health = 450
|
||||
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 45
|
||||
attack_armor_pen = 50
|
||||
var/grenade_type = /obj/item/weapon/grenade/spawnergrenade/riftwallers
|
||||
var/grenade_timer = 5
|
||||
heat_resist = 1
|
||||
cold_resist = 1
|
||||
movement_cooldown = 1
|
||||
var/leap_warmup = 2 SECOND
|
||||
var/leap_sound = 'sound/weapons/gauss_shoot.ogg'
|
||||
var/jaunt_warning = 1.0 SECONDS // How long the jaunt telegraphing is.
|
||||
var/jaunt_tile_speed = 15 // How long to wait between each tile. Higher numbers result in an easier to dodge tunnel attack.
|
||||
projectiletype = /obj/item/projectile/energy/plasma/vepr/inversion
|
||||
melee_attack_delay = 2 SECOND
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 7
|
||||
special_attack_cooldown = 7 SECONDS
|
||||
icon_state = "void-magnus"
|
||||
icon_living = "void-magnus"
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
vore_active = 1
|
||||
vore_capacity = 6
|
||||
vore_bump_chance = 20
|
||||
size_multiplier = 1.10
|
||||
|
||||
armor_soak = list(
|
||||
"melee" = 5,
|
||||
"bullet" = 5,
|
||||
"laser" = 5,
|
||||
"energy" = 5,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
)
|
||||
|
||||
loot_list = list(/obj/item/clothing/head/culthood/void = 100,
|
||||
/obj/item/clothing/suit/cultrobes/void = 100,
|
||||
/obj/item/clothing/shoes/boots/cult/void = 100,
|
||||
/obj/item/clothing/gloves/tactical/void = 100,
|
||||
/obj/item/weapon/melee/voidblade = 25,
|
||||
/obj/item/device/soulstone = 25,
|
||||
/obj/item/device/soulstone = 25,
|
||||
/obj/item/device/soulstone = 25,
|
||||
/obj/item/capture_crystal/demon = 25,
|
||||
/obj/item/capture_crystal/wendigo = 25
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/apply_melee_effects(var/atom/A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
var/leech = rand(1,100)
|
||||
if(L.nutrition)
|
||||
L.adjust_nutrition(-leech)
|
||||
adjust_nutrition(leech)
|
||||
if(prob(25))
|
||||
L.adjustHalLoss(leech)
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/do_special_attack(atom/A)
|
||||
. = TRUE // So we don't fire a bolt as well.
|
||||
switch(a_intent)
|
||||
if(I_DISARM) // Side gun
|
||||
electric_defense(A)
|
||||
if(I_HURT) // Rockets
|
||||
launch_rockets(A)
|
||||
if(I_GRAB) // Micro-singulo
|
||||
launch_microsingularity(A)
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/launch_microsingularity(atom/target)
|
||||
set waitfor = FALSE
|
||||
|
||||
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
|
||||
if(istype(G))
|
||||
G.throw_at(G.throw_range, G.throw_speed, src)
|
||||
G.det_time = grenade_timer //CHOMPEdit
|
||||
G.activate(src) //CHOMPEdit
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/electric_defense(atom/target)
|
||||
set waitfor = FALSE
|
||||
set_AI_busy(TRUE)
|
||||
|
||||
// Save where we're gonna go soon.
|
||||
var/turf/destination = get_turf(target)
|
||||
var/turf/starting_turf = get_turf(src)
|
||||
|
||||
// Telegraph to give a small window to dodge if really close.
|
||||
flick("phase_shift",target)
|
||||
icon_state = "bloodin"
|
||||
sleep(jaunt_warning) // For the telegraphing.
|
||||
|
||||
// Do the dig!
|
||||
visible_message(span("danger","\The [src] vanishes into thin air \the [target]!"))
|
||||
flick("phase_shift",target)
|
||||
icon_state = "phase_shift"
|
||||
|
||||
if(handle_jaunt(destination) == FALSE)
|
||||
set_AI_busy(FALSE)
|
||||
flick("phase_shift2",target)
|
||||
icon_state = "bloodout"
|
||||
return FALSE
|
||||
|
||||
// Did we make it?
|
||||
if(!(src in destination))
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",target)
|
||||
return FALSE
|
||||
|
||||
var/overshoot = TRUE
|
||||
|
||||
// Test if something is at destination.
|
||||
for(var/mob/living/L in destination)
|
||||
if(L == src)
|
||||
continue
|
||||
|
||||
visible_message(span("danger","\The [src] appears in a flurry of slashes \the [L]!"))
|
||||
playsound(L, 'sound/weapons/heavysmash.ogg', 75, 1)
|
||||
L.Weaken(3)
|
||||
overshoot = FALSE
|
||||
|
||||
if(!overshoot) // We hit the target, or something, at destination, so we're done.
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",target)
|
||||
return TRUE
|
||||
|
||||
// Otherwise we need to keep going.
|
||||
to_chat(src, span("warning", "You overshoot your target!"))
|
||||
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
|
||||
var/dir_to_go = get_dir(starting_turf, destination)
|
||||
for(var/i = 1 to rand(2, 4))
|
||||
destination = get_step(destination, dir_to_go)
|
||||
|
||||
if(handle_jaunt(destination) == FALSE)
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",target)
|
||||
return FALSE
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",target)
|
||||
return FALSE
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/launch_rockets(atom/A)
|
||||
set waitfor = FALSE
|
||||
set_AI_busy(TRUE)
|
||||
|
||||
// Save where we're gonna go soon.
|
||||
var/turf/destination = get_turf(A)
|
||||
var/turf/starting_turf = get_turf(src)
|
||||
|
||||
// Telegraph to give a small window to dodge if really close.
|
||||
flick("phase_shift",A)
|
||||
icon_state = "bloodin"
|
||||
sleep(jaunt_warning) // For the telegraphing.
|
||||
|
||||
// Do the dig!
|
||||
visible_message(span("danger","\The [src] vanishes into thin air \the [A]!"))
|
||||
flick("phase_shift",A)
|
||||
icon_state = "bloodin"
|
||||
|
||||
if(handle_jaunt(destination) == FALSE)
|
||||
set_AI_busy(FALSE)
|
||||
flick("phase_shift2",A)
|
||||
icon_state = "bloodout"
|
||||
return FALSE
|
||||
|
||||
// Did we make it?
|
||||
if(!(src in destination))
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",A)
|
||||
return FALSE
|
||||
|
||||
var/overshoot = TRUE
|
||||
|
||||
// Test if something is at destination.
|
||||
for(var/mob/living/L in destination)
|
||||
if(L == src)
|
||||
continue
|
||||
|
||||
visible_message(span("danger","\The [src] appears in a flurry of slashes \the [L]!"))
|
||||
playsound(L, 'sound/weapons/heavysmash.ogg', 75, 1)
|
||||
L.Weaken(3)
|
||||
overshoot = FALSE
|
||||
|
||||
if(!overshoot) // We hit the target, or something, at destination, so we're done.
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "phase_shift2"
|
||||
flick("phase_shift2",A)
|
||||
return TRUE
|
||||
|
||||
// Otherwise we need to keep going.
|
||||
to_chat(src, span("warning", "You overshoot your target!"))
|
||||
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
|
||||
var/dir_to_go = get_dir(starting_turf, destination)
|
||||
for(var/i = 1 to rand(2, 4))
|
||||
destination = get_step(destination, dir_to_go)
|
||||
|
||||
if(handle_jaunt(destination) == FALSE)
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",A)
|
||||
return FALSE
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",A)
|
||||
return FALSE
|
||||
|
||||
// Does the jaunt movement
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/handle_jaunt(turf/destination)
|
||||
var/turf/T = get_turf(src) // Hold our current tile.
|
||||
|
||||
// Regular tunnel loop.
|
||||
for(var/i = 1 to get_dist(src, destination))
|
||||
if(stat)
|
||||
return FALSE // We died or got knocked out on the way.
|
||||
if(loc == destination)
|
||||
break // We somehow got there early.
|
||||
|
||||
// Update T.
|
||||
T = get_step(src, get_dir(src, destination))
|
||||
if(T.check_density(ignore_mobs = TRUE))
|
||||
to_chat(src, span("critical", "You hit something really solid!"))
|
||||
playsound(src, "punch", 75, 1)
|
||||
Weaken(5)
|
||||
add_modifier(/datum/modifier/tunneler_vulnerable, 10 SECONDS)
|
||||
return FALSE // Hit a wall.
|
||||
|
||||
// Get into the tile.
|
||||
forceMove(T)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/should_special_attack(atom/A)
|
||||
// Make sure its possible for the wraith to reach the target so it doesn't try to go through a window.
|
||||
var/turf/destination = get_turf(A)
|
||||
var/turf/starting_turf = get_turf(src)
|
||||
var/turf/T = starting_turf
|
||||
for(var/i = 1 to get_dist(starting_turf, destination))
|
||||
if(T == destination)
|
||||
break
|
||||
|
||||
T = get_step(T, get_dir(T, destination))
|
||||
if(T.check_density(ignore_mobs = TRUE))
|
||||
return FALSE
|
||||
return T == destination
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/riftwallers
|
||||
name = "manhack delivery grenade"
|
||||
spawner_type = /mob/living/simple_mob/vore/demonAI
|
||||
deliveryamt = 1
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "implant_melted"
|
||||
color = "#f50202"
|
||||
|
||||
/obj/item/projectile/energy/plasma/vepr/inversion
|
||||
name = "inversion bolt"
|
||||
damage = 25
|
||||
eyeblur = 0
|
||||
armor_penetration = 50
|
||||
light_range = 2
|
||||
light_power = -2
|
||||
light_color = "#FFFFFF"
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift
|
||||
vore_active = 1
|
||||
vore_capacity = 6
|
||||
vore_max_size = RESIZE_HUGE
|
||||
vore_min_size = RESIZE_SMALL
|
||||
vore_pounce_chance = 0 // Beat them into crit before eating.
|
||||
vore_icons = null
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/Login()
|
||||
. = ..()
|
||||
if(!riding_datum)
|
||||
riding_datum = new /datum/riding/simple_mob(src)
|
||||
verbs |= /mob/living/simple_mob/proc/animal_mount
|
||||
verbs |= /mob/living/proc/toggle_rider_reins
|
||||
movement_cooldown = 1
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/init_vore()
|
||||
if(!voremob_loaded)
|
||||
return
|
||||
.=..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.."
|
||||
|
||||
B.emote_lists[DM_HOLD] = list(
|
||||
"Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",
|
||||
"Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
|
||||
"Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
|
||||
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!",
|
||||
"The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
|
||||
"Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
|
||||
|
||||
|
||||
//Boss loot things. Not sure if this is approriate but will be bapped if not.
|
||||
|
||||
/obj/item/clothing/head/culthood/void
|
||||
name = "void magnus hood"
|
||||
color = "#1C1C1C"
|
||||
armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10)
|
||||
cold_protection = HEAD
|
||||
heat_protection = HEAD
|
||||
|
||||
/obj/item/clothing/suit/cultrobes/void
|
||||
name = "void magnus robes"
|
||||
color = "#1C1C1C"
|
||||
armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10)
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
|
||||
/obj/item/clothing/shoes/boots/cult/void
|
||||
name = "void magnus boots"
|
||||
color = "#1C1C1C"
|
||||
armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 10, rad = 10)
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
|
||||
/obj/item/clothing/gloves/tactical/void
|
||||
desc = "These warm red gloves glow warmly, while making the world round them seem darker."
|
||||
name = "cult gloves"
|
||||
color = "#1C1C1C"
|
||||
icon_state = "work"
|
||||
item_state = "wgloves"
|
||||
force = 10
|
||||
punch_force = 8
|
||||
armor = list(melee = 30, bullet = 25, laser = 25, energy = 40, bomb = 30, bio = 10, rad = 10)
|
||||
|
||||
/obj/item/weapon/melee/voidblade
|
||||
name = "cult blade"
|
||||
desc = "An arcane weapon wielded by the followers of Nar-Sie."
|
||||
icon_state = "cultblade"
|
||||
origin_tech = list(TECH_COMBAT = 1, TECH_ARCANE = 2)
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 40
|
||||
throwforce = 20
|
||||
defend_chance = 25
|
||||
projectile_parry_chance = 25
|
||||
armor_penetration = 25
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
drop_sound = 'sound/items/drop/sword.ogg'
|
||||
pickup_sound = 'sound/items/pickup/sword.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
edge = TRUE
|
||||
sharp = TRUE
|
||||
|
||||
/obj/item/capture_crystal/demon
|
||||
spawn_mob_type = /mob/living/simple_mob/vore/demonAI
|
||||
|
||||
/obj/item/capture_crystal/wendigo
|
||||
spawn_mob_type = /mob/living/simple_mob/vore/demonAI/wendigo
|
||||
@@ -0,0 +1,112 @@
|
||||
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono
|
||||
name = "Advanced Precursor Hivebot"
|
||||
icon = 'modular_chomp/icons/mob/hivebot.dmi'
|
||||
icon_state = "precursorhive"
|
||||
icon_living = "precursorhive"
|
||||
attacktext = list("prodded")
|
||||
maxHealth = 15 LASERS_TO_KILL
|
||||
health = 15 LASERS_TO_KILL
|
||||
projectiletype = /obj/item/projectile/arc/blue_energy/precusor
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 50
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 7
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
movement_cooldown = 0.5
|
||||
color = "#ccff4a"
|
||||
projectilesound = 'sound/weapons/wave.ogg'
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
var/grenade_type = /obj/item/weapon/grenade/shooter/energy/tesla
|
||||
var/grenade_timer = 10
|
||||
size_multiplier = 1.75
|
||||
shock_resist = 3
|
||||
water_resist = 3
|
||||
|
||||
armor = list(melee = 0, bullet = 40, laser = 40, energy = 40, bomb = 40, bio = 100, rad = 100)
|
||||
|
||||
armor_soak = list(
|
||||
"melee" = 0,
|
||||
"bullet" = 10,
|
||||
"laser" = 10,
|
||||
"energy" = 10,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
)
|
||||
|
||||
loot_list = list(/obj/item/clothing/suit/armor/alien = 20,
|
||||
/obj/item/clothing/suit/armor/alien/tank = 20,
|
||||
/obj/item/prop/alien/junk = 20,
|
||||
/obj/item/prop/alien/junk = 20,
|
||||
/obj/item/prop/alien/junk = 20,
|
||||
/obj/item/prop/alien/junk = 20,
|
||||
/obj/item/prop/alien/junk = 20,
|
||||
/obj/item/weapon/gun/energy/alien = 20,
|
||||
/obj/item/weapon/gun/energy/alien = 20,
|
||||
/obj/random/tool/alien = 20,
|
||||
/obj/random/tool/alien = 20,
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien/omni = 20,
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien/omni = 20
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/apply_melee_effects(atom/A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
L.taunt(src, TRUE)
|
||||
L.add_modifier(/datum/modifier/hivebot_weaken, 3 SECONDS)
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/do_special_attack(atom/A)
|
||||
. = TRUE // So we don't fire a bolt as well.
|
||||
switch(a_intent)
|
||||
if(I_DISARM) // Side gun
|
||||
electric_defense(A)
|
||||
if(I_HURT) // Rockets
|
||||
launch_rockets(A)
|
||||
if(I_GRAB) // Micro-singulo
|
||||
launch_microsingularity(A)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/electric_defense(atom/target)
|
||||
set waitfor = FALSE
|
||||
|
||||
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
|
||||
if(istype(G))
|
||||
G.throw_at(G.throw_range, G.throw_speed, src)
|
||||
G.det_time = grenade_timer //CHOMPEdit
|
||||
G.activate(src) //CHOMPEdit
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_microsingularity(atom/target)
|
||||
set waitfor = FALSE
|
||||
|
||||
// Telegraph our next move.
|
||||
Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
|
||||
visible_message(span("warning", "\The [src] deploys a missile rack!"))
|
||||
playsound(src, 'sound/effects/turret/move1.wav', 50, 1)
|
||||
sleep(0.5 SECONDS)
|
||||
|
||||
for(var/i = 1 to 4)
|
||||
if(target) // Might get deleted in the meantime.
|
||||
var/turf/T = get_turf(target)
|
||||
if(T)
|
||||
visible_message(span("warning", "\The [src] fires a rocket into the air!"))
|
||||
playsound(src, 'sound/weapons/rpg.ogg', 70, 1)
|
||||
face_atom(T)
|
||||
var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc)
|
||||
rocket.old_style_target(T, src)
|
||||
rocket.fire()
|
||||
sleep(1 SECOND)
|
||||
|
||||
visible_message(span("warning", "\The [src] retracts the missile rack."))
|
||||
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_rockets(atom/target)
|
||||
var/turf/T = get_turf(target)
|
||||
visible_message(span("warning", "\The [src] fires an energetic sphere into the air!"))
|
||||
playsound(src, 'sound/weapons/Laser.ogg', 50, 1)
|
||||
face_atom(T)
|
||||
var/obj/item/projectile/arc/microsingulo/sphere = new(loc)
|
||||
sphere.old_style_target(T, src)
|
||||
sphere.fire()
|
||||
@@ -0,0 +1,131 @@
|
||||
/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced
|
||||
name = "Advanced phazon"
|
||||
movement_cooldown = 1
|
||||
wreckage = /obj/structure/loot_pile/mecha/phazon
|
||||
|
||||
health = 500
|
||||
maxHealth = 500
|
||||
evasion = 30
|
||||
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 9
|
||||
special_attack_cooldown = 15 SECONDS
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
size_multiplier = 1.25
|
||||
shock_resist = 0.9
|
||||
ranged_attack_delay = 1 SECONDS
|
||||
projectilesound = 'sound/weapons/gauss_shoot.ogg'
|
||||
|
||||
projectiletype = /obj/item/projectile/bullet/rifle/a545/ap
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/do_special_attack(atom/A)
|
||||
. = TRUE // So we don't fire a bolt as well.
|
||||
switch(a_intent)
|
||||
if(I_DISARM) // Side gun
|
||||
electric_defense(A)
|
||||
if(I_HURT) // Rockets
|
||||
launch_rockets(A)
|
||||
if(I_GRAB) // Micro-singulo
|
||||
launch_microsingularity(A)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/electric_defense(atom/target)
|
||||
set waitfor = FALSE
|
||||
|
||||
// Telegraph our next move.
|
||||
Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
|
||||
visible_message(span("warning", "\The [src] deploys a red missile rack!"))
|
||||
playsound(src, 'sound/effects/turret/move1.wav', 50, 1)
|
||||
sleep(0.5 SECONDS)
|
||||
|
||||
for(var/i = 1 to 5)
|
||||
if(target) // Might get deleted in the meantime.
|
||||
var/turf/T = get_turf(target)
|
||||
if(T)
|
||||
visible_message(span("warning", "\The [src] fires a rocket into the air!"))
|
||||
playsound(src, 'sound/weapons/rpg.ogg', 70, 1)
|
||||
face_atom(T)
|
||||
var/obj/item/projectile/arc/explosive_rocket/big/rocket = new(loc)
|
||||
rocket.old_style_target(T, src)
|
||||
rocket.fire()
|
||||
sleep(1 SECOND)
|
||||
|
||||
visible_message(span("warning", "\The [src] retracts the red missile rack."))
|
||||
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
|
||||
|
||||
/obj/item/projectile/arc/explosive_rocket/big
|
||||
name = "rocket"
|
||||
icon_state = "mortar"
|
||||
color = "#FF0000"
|
||||
|
||||
/obj/item/projectile/arc/explosive_rocket/big/on_impact(turf/T)
|
||||
new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently.
|
||||
explosion(T, 1, 2, 3, adminlog = FALSE)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/launch_rockets(atom/target)
|
||||
set waitfor = FALSE
|
||||
|
||||
// Telegraph our next move.
|
||||
Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
|
||||
visible_message(span("warning", "\The [src] deploys a blue missile rack!"))
|
||||
playsound(src, 'sound/effects/turret/move1.wav', 50, 1)
|
||||
sleep(0.5 SECONDS)
|
||||
|
||||
for(var/i = 1 to 3)
|
||||
if(target) // Might get deleted in the meantime.
|
||||
var/turf/T = get_turf(target)
|
||||
if(T)
|
||||
visible_message(span("warning", "\The [src] fires a rocket into the air!"))
|
||||
playsound(src, 'sound/weapons/rpg.ogg', 70, 1)
|
||||
face_atom(T)
|
||||
var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc)
|
||||
rocket.old_style_target(T, src)
|
||||
rocket.fire()
|
||||
sleep(1 SECOND)
|
||||
|
||||
visible_message(span("warning", "\The [src] retracts the blue missile rack."))
|
||||
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
|
||||
|
||||
/obj/item/projectile/arc/explosive_rocket/blue
|
||||
name = "rocket"
|
||||
icon_state = "mortar"
|
||||
color = "#000066"
|
||||
|
||||
/obj/item/projectile/arc/explosive_rocket/blue/on_impact(turf/T)
|
||||
new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently.
|
||||
empulse(T, 1, 2, 3, 4)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/launch_microsingularity(atom/target)
|
||||
set waitfor = FALSE
|
||||
|
||||
// Telegraph our next move.
|
||||
Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
|
||||
visible_message(span("warning", "\The [src] deploys a yellow missile rack!"))
|
||||
playsound(src, 'sound/effects/turret/move1.wav', 50, 1)
|
||||
sleep(0.5 SECONDS)
|
||||
|
||||
for(var/i = 1 to 2)
|
||||
if(target) // Might get deleted in the meantime.
|
||||
var/turf/T = get_turf(target)
|
||||
if(T)
|
||||
visible_message(span("warning", "\The [src] fires a rocket into the air!"))
|
||||
playsound(src, 'sound/weapons/rpg.ogg', 70, 1)
|
||||
face_atom(T)
|
||||
var/obj/item/projectile/arc/explosive_rocket/spread/rocket = new(loc)
|
||||
rocket.old_style_target(T, src)
|
||||
rocket.fire()
|
||||
sleep(1 SECOND)
|
||||
|
||||
visible_message(span("warning", "\The [src] retracts the yellow missile rack."))
|
||||
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
|
||||
|
||||
/obj/item/projectile/arc/explosive_rocket/spread
|
||||
name = "rocket"
|
||||
icon_state = "mortar"
|
||||
color = "#FFFF00"
|
||||
|
||||
/obj/item/projectile/arc/explosive_rocket/spread/on_impact(turf/T)
|
||||
new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently.
|
||||
explosion(T, 0, 0, 5, adminlog = FALSE)
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/ion/boss
|
||||
armor_penetration = 15
|
||||
Reference in New Issue
Block a user