mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-30 00:35:45 +01:00
Gateway Update - MoL (#6886)
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
min_pressure_protection = 0 * ONE_ATMOSPHERE
|
||||
max_pressure_protection = 3 * ONE_ATMOSPHERE
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack)
|
||||
|
||||
|
||||
//Candy section
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
//Trying to explain Jasper's attempt at a super boss
|
||||
//Phase 1 Dark Gygax but diffrent
|
||||
//Phase 2 All of it's attacks are meant to be some form of CC, with a single ion attack
|
||||
//Phase 3 Orginally was meant to be a timed phase but couldn't get the debuff to work. Instead melee based phase?
|
||||
//Phase 4 A mix of phases 1 through 3
|
||||
//Phase 5, it stands there with increased defense and shields. Bullet hell, highly rewarding if you can get melee in
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion
|
||||
name = "imperion"
|
||||
icon = 'icons/mecha/mecha.dmi'
|
||||
icon_state = "imperion"
|
||||
icon_living = "imperion"
|
||||
desc = "A strange precursor mecha"
|
||||
maxHealth = 350
|
||||
health = 350
|
||||
maxHealth = 400
|
||||
health = 400
|
||||
movement_cooldown = -1
|
||||
unsuitable_atoms_damage = 0
|
||||
projectiletype = /obj/item/projectile/energy/gaussrifle
|
||||
@@ -50,16 +57,6 @@
|
||||
if(I_GRAB) // Micro-singulo
|
||||
launch_microsingularity(A)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase3/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/imperion/phase4/do_special_attack(atom/A)
|
||||
. = TRUE // So we don't fire a bolt as well.
|
||||
switch(a_intent)
|
||||
@@ -162,33 +159,73 @@
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase3 //DPS check
|
||||
movement_cooldown = -1
|
||||
projectiletype = /obj/item/projectile/energy/gaussrifle
|
||||
melee_attack_delay = 4 SECOND
|
||||
projectiletype = null
|
||||
melee_attack_delay = 2 SECOND
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion
|
||||
|
||||
wreckage = null
|
||||
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase4
|
||||
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 9
|
||||
special_attack_cooldown = 15 SECONDS
|
||||
special_attack_min_range = 3
|
||||
special_attack_max_range = 14 //this thing will not let you recover during phase 3. It blitz you down, or you blitz it down.
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase3/proc/electric_defense(atom/target)
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase3/do_special_attack(atom/A)
|
||||
// Teleport attack.
|
||||
if(!A)
|
||||
to_chat(src, span("warning", "There's nothing to teleport to."))
|
||||
return FALSE
|
||||
|
||||
var/list/nearby_things = range(1, A)
|
||||
var/list/valid_turfs = list()
|
||||
|
||||
// All this work to just go to a non-dense tile.
|
||||
for(var/turf/potential_turf in nearby_things)
|
||||
var/valid_turf = TRUE
|
||||
if(potential_turf.density)
|
||||
continue
|
||||
for(var/atom/movable/AM in potential_turf)
|
||||
if(AM.density)
|
||||
valid_turf = FALSE
|
||||
if(valid_turf)
|
||||
valid_turfs.Add(potential_turf)
|
||||
|
||||
if(!(valid_turfs.len))
|
||||
to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
|
||||
return FALSE
|
||||
|
||||
var/turf/target_turf = pick(valid_turfs)
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread
|
||||
s1.set_up(5, 1, T)
|
||||
var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread
|
||||
s2.set_up(5, 1, target_turf)
|
||||
|
||||
|
||||
T.visible_message(span("notice", "\The [src] vanishes!"))
|
||||
s1.start()
|
||||
|
||||
forceMove(target_turf)
|
||||
playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1)
|
||||
to_chat(src, span("notice", "You teleport to \the [target_turf]."))
|
||||
|
||||
target_turf.visible_message(span("warning", "\The [src] appears!"))
|
||||
s2.start()
|
||||
|
||||
/datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion
|
||||
home_low_priority = TRUE
|
||||
vision_range = 28 //cheesy Ai for absurdly aggressive phase
|
||||
|
||||
/datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion/react_to_attack()
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/forcebolt(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase3/proc/launch_rockets(atom/target)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/homing_bolt/wizard/lighting(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase3/proc/launch_microsingularity(atom/target)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/arc/radioactive(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
//Phase four, fusion time.
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase4 //Starts to slow down
|
||||
movement_cooldown = 0
|
||||
projectiletype = /obj/item/projectile/energy/plasma/vepr
|
||||
projectiletype = /obj/item/projectile/energy/homing_bolt
|
||||
melee_attack_delay = 4 SECOND
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
@@ -198,7 +235,7 @@
|
||||
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 9
|
||||
special_attack_cooldown = 15 SECONDS
|
||||
special_attack_cooldown = 12 SECONDS
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/electric_defense(atom/target)
|
||||
set waitfor = FALSE
|
||||
@@ -225,42 +262,83 @@
|
||||
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/launch_rockets(atom/target)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/srmrocket(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
if(!target)
|
||||
to_chat(src, span("warning", "There's nothing to teleport to."))
|
||||
return FALSE
|
||||
|
||||
var/list/nearby_things = range(1, target)
|
||||
var/list/valid_turfs = list()
|
||||
|
||||
// All this work to just go to a non-dense tile.
|
||||
for(var/turf/potential_turf in nearby_things)
|
||||
var/valid_turf = TRUE
|
||||
if(potential_turf.density)
|
||||
continue
|
||||
for(var/atom/movable/AM in potential_turf)
|
||||
if(AM.density)
|
||||
valid_turf = FALSE
|
||||
if(valid_turf)
|
||||
valid_turfs.Add(potential_turf)
|
||||
|
||||
if(!(valid_turfs.len))
|
||||
to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
|
||||
return FALSE
|
||||
|
||||
var/turf/target_turf = pick(valid_turfs)
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread
|
||||
s1.set_up(5, 1, T)
|
||||
var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread
|
||||
s2.set_up(5, 1, target_turf)
|
||||
|
||||
|
||||
T.visible_message(span("notice", "\The [src] vanishes!"))
|
||||
s1.start()
|
||||
|
||||
forceMove(target_turf)
|
||||
playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1)
|
||||
to_chat(src, span("notice", "You teleport to \the [target_turf]."))
|
||||
|
||||
target_turf.visible_message(span("warning", "\The [src] appears!"))
|
||||
s2.start()
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase4/proc/launch_microsingularity(atom/target)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/pistol/medium/hp(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
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()
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase5 //Final stand
|
||||
icon_state = "imperion-phase"
|
||||
icon_living = "imperion-phase"
|
||||
icon_dead = "imperion-phase"
|
||||
desc = "A precursor mecha on it's last legs, sparking, seeming vunerable up close"
|
||||
movement_cooldown = 45
|
||||
projectiletype = /obj/item/projectile/bullet/magnetic/fuelrod/tritium
|
||||
melee_attack_delay = 4 SECOND
|
||||
ranged_attack_delay = 1.5 SECONDS
|
||||
movement_cooldown = 60
|
||||
projectiletype = /obj/item/projectile/energy/homing_bolt/missile
|
||||
ranged_attack_delay = 0.5 SECONDS
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 9
|
||||
special_attack_cooldown = 15 SECONDS
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
melee_attack_delay = 1 SECOND
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
|
||||
wreckage = null
|
||||
pilot_type = null
|
||||
var/grenade_type = /obj/item/weapon/grenade/shooter/energy/tesla
|
||||
var/grenade_timer = 10
|
||||
var/grenade_type2 = /obj/item/weapon/grenade/shooter/rubber
|
||||
var/grenade_type3 = /obj/item/weapon/grenade/shooter/laserpellet
|
||||
var/obj/item/shield_projector/shields = null
|
||||
|
||||
armor = list(
|
||||
"melee" = -300,
|
||||
"bullet" = 65,
|
||||
"laser" = 65,
|
||||
"energy" = 65,
|
||||
"bomb" = 65,
|
||||
"melee" = -500,
|
||||
"bullet" = 75,
|
||||
"laser" = 75,
|
||||
"energy" = 75,
|
||||
"bomb" = 75,
|
||||
"bio" = 100,
|
||||
"rad" = 100
|
||||
)
|
||||
@@ -308,44 +386,71 @@
|
||||
/obj/item/clothing/head/psy_crown/candycrown = 60,
|
||||
/obj/item/clothing/gloves/stamina = 60,
|
||||
/obj/item/clothing/suit/armor/buffvest = 60,
|
||||
/obj/item/weapon/melee/cullingcane = 60
|
||||
/obj/item/weapon/melee/cullingcane = 60,
|
||||
/obj/item/weapon/bluespace_harpoon = 60,
|
||||
/obj/item/weapon/flame/lighter/supermatter/syndismzippo = 60,
|
||||
/obj/item/weapon/gun/energy/vepr/plasma = 60,
|
||||
/obj/item/weapon/gun/energy/medigun = 60
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/electric_defense(atom/target)
|
||||
set waitfor = FALSE
|
||||
visible_message(span("warning", "\The [src] crackles with lighting!"))
|
||||
|
||||
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
|
||||
G.activate(src)
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
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()
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperionspear(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
if(prob(50))
|
||||
var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionblaster(get_turf(src))
|
||||
B.launch_projectile(target, BP_TORSO, src)
|
||||
else
|
||||
var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperiontesla(get_turf(src))
|
||||
A.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/launch_rockets(atom/target)
|
||||
set waitfor = FALSE
|
||||
visible_message(span("warning", "\The [src] prepares lasers!"))
|
||||
|
||||
var/obj/item/weapon/grenade/G = new grenade_type2(get_turf(src))
|
||||
if(istype(G))
|
||||
G.throw_at(G.throw_range, G.throw_speed, src)
|
||||
G.det_time = grenade_timer
|
||||
G.activate(src)
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperionblaster(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
if(prob(50))
|
||||
var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionspear(get_turf(src))
|
||||
B.launch_projectile(target, BP_TORSO, src)
|
||||
else
|
||||
var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperiontesla(get_turf(src))
|
||||
A.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase5/proc/launch_microsingularity(atom/target)
|
||||
set waitfor = FALSE
|
||||
visible_message(span("warning", "\The [src] prepares it's machine gun!"))
|
||||
|
||||
var/obj/item/weapon/grenade/G = new grenade_type3(get_turf(src))
|
||||
if(istype(G))
|
||||
G.throw_at(G.throw_range, G.throw_speed, src)
|
||||
G.det_time = grenade_timer
|
||||
G.activate(src)
|
||||
// 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)
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
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 missile rack."))
|
||||
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/imperiontesla(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
if(prob(50))
|
||||
var/obj/item/projectile/B = new /obj/item/projectile/bullet/imperionblaster(get_turf(src))
|
||||
B.launch_projectile(target, BP_TORSO, src)
|
||||
else
|
||||
var/obj/item/projectile/A = new /obj/item/projectile/bullet/imperionspear(get_turf(src))
|
||||
A.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase5/Initialize(mapload)
|
||||
shields = new /obj/item/shield_projector/rectangle/automatic/imperion(src)
|
||||
@@ -354,7 +459,7 @@
|
||||
/obj/item/shield_projector/rectangle/automatic/imperion
|
||||
shield_health = 500
|
||||
max_shield_health = 500
|
||||
shield_regen_delay = 30 SECONDS
|
||||
shield_regen_delay = 60 SECONDS
|
||||
shield_regen_amount = 50
|
||||
size_x = 2
|
||||
size_y = 2
|
||||
@@ -362,6 +467,91 @@
|
||||
high_color = "#631644"
|
||||
low_color = "#631644"
|
||||
|
||||
//projectile time, mostly for phase five
|
||||
/obj/item/projectile/bullet/imperionspear
|
||||
use_submunitions = 1
|
||||
only_submunitions = 1
|
||||
range = 0
|
||||
embed_chance = 0
|
||||
submunition_spread_max = 700
|
||||
submunition_spread_min = 200
|
||||
submunitions = list(/obj/item/projectile/energy/imperionspear = 5)
|
||||
|
||||
/obj/item/projectile/bullet/imperionspear/on_range()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/energy/imperionspear
|
||||
name = "energy spear"
|
||||
icon_state = "arcane_barrage"
|
||||
damage = 35
|
||||
armor_penetration = 35
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
speed = 4.4
|
||||
|
||||
flash_strength = 0
|
||||
|
||||
/obj/item/projectile/bullet/imperionblaster
|
||||
use_submunitions = 1
|
||||
only_submunitions = 1
|
||||
range = 0
|
||||
embed_chance = 0
|
||||
submunition_spread_max = 1500
|
||||
submunition_spread_min = 300
|
||||
submunitions = list(/obj/item/projectile/energy/imperionblaster = 8)
|
||||
|
||||
/obj/item/projectile/bullet/imperionblaster/on_range()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/energy/imperionblaster
|
||||
name = "energy pellet"
|
||||
icon_state = "dark_pellet"
|
||||
damage = 15
|
||||
armor_penetration = 100
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
speed = 4.4
|
||||
|
||||
flash_strength = 0
|
||||
|
||||
/obj/item/projectile/bullet/imperiontesla
|
||||
use_submunitions = 1
|
||||
only_submunitions = 1
|
||||
range = 0
|
||||
embed_chance = 0
|
||||
submunition_spread_max = 400
|
||||
submunition_spread_min = 50
|
||||
submunitions = list(/obj/item/projectile/energy/imperiontesla = 2)
|
||||
|
||||
/obj/item/projectile/bullet/imperiontesla/on_range()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/energy/imperiontesla
|
||||
name = "energy sphere"
|
||||
icon_state = "tesla_projectile"
|
||||
damage = 50
|
||||
armor_penetration = 50
|
||||
damage_type = BURN
|
||||
check_armour = "energy"
|
||||
agony = 50
|
||||
speed = 8.2
|
||||
|
||||
flash_strength = 0
|
||||
|
||||
/obj/item/projectile/energy/homing_bolt/missile
|
||||
name = "homing rocket"
|
||||
icon_state = "atrocket"
|
||||
damage = 40
|
||||
damage_type = BURN
|
||||
check_armour = "bullet"
|
||||
|
||||
/obj/item/projectile/energy/homing_bolt/missile/on_hit(atom/target, blocked=0)
|
||||
explosion(target, 0, 0, 2, 4)//No need to have a question.
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/energy/homing_bolt/missile/throw_impact(atom/target, var/speed)
|
||||
explosion(target, 0, 0, 2, 4)//No need to have a question.
|
||||
qdel(src)
|
||||
|
||||
//Cool boss visuals, auras, and me saying no to stun.
|
||||
|
||||
@@ -370,10 +560,9 @@
|
||||
desc = "Unleashes not hit scan lasers."
|
||||
projectile_types = list(/obj/item/projectile/energy/mob/midlaser)
|
||||
|
||||
|
||||
//te,porarly removing mob_overlay_state = "red_electricity_constant" to try and fix the visual bug
|
||||
/datum/modifier/bossbuff
|
||||
name = "boss_buff"
|
||||
mob_overlay_state = "red_electricity_constant"
|
||||
|
||||
on_created_text = "<span class='critical'>You feel an intense and overwhelming rage overtake you as you go berserk!</span>"
|
||||
on_expired_text = "<span class='notice'>The blaze of rage inside you has ran out.</span>"
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/datum/category_item/catalogue/fauna/vrerror
|
||||
name = "VR Creations"
|
||||
desc = "Upon investigation of the strange creatures, they appear \
|
||||
to be constructed of hardlight technology, with connections to common \
|
||||
VR equipment. It is unknown what their purpose is at this time."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/mob/living/simple_mob/vr
|
||||
name = "vr creation"
|
||||
desc = "A digital creature"
|
||||
@@ -5,6 +12,7 @@
|
||||
icon_state = "bookbat_purple"
|
||||
icon_living = "bookbat_purple"
|
||||
icon_dead = "bookbat_purple_dead"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/vrerror)
|
||||
|
||||
mob_class = MOB_CLASS_ABERRATION
|
||||
|
||||
@@ -109,6 +117,7 @@
|
||||
/obj/item/projectile/energy/homing_bolt/wizard/fire
|
||||
modifier_type_to_apply = /datum/modifier/wizfire
|
||||
modifier_duration = 6 SECONDS
|
||||
icon_state = "fireball2"
|
||||
|
||||
/obj/item/projectile/energy/homing_bolt/wizard/lighting
|
||||
modifier_type_to_apply = /datum/modifier/wizfire/lighting
|
||||
@@ -117,10 +126,12 @@
|
||||
/obj/item/projectile/energy/homing_bolt/wizard/poison
|
||||
modifier_type_to_apply = /datum/modifier/wizpoison
|
||||
modifier_duration = 6 SECONDS
|
||||
icon_state = "green_pellet"
|
||||
|
||||
/obj/item/projectile/energy/homing_bolt/wizard/frost
|
||||
modifier_type_to_apply = /datum/modifier/wizpoison/frost
|
||||
modifier_duration = 6 SECONDS
|
||||
icon_state = "ice_2"
|
||||
|
||||
/datum/modifier/wizfire
|
||||
name = "wizfire"
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
//Cataloguer things
|
||||
/datum/category_item/catalogue/fauna/livingcandy
|
||||
name = "Living Candy"
|
||||
desc = "Upon investigation of the strange creatures, a mix of \
|
||||
promethean biology alongside various candies can be found. The purpose \
|
||||
of such a creation is unknown but it seems to function at a middle ground \
|
||||
between slimes and prometheans. Lacking the full sentience of prometheans \
|
||||
but their presence bolstering others of their kind."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
//Someone remind me to get someone to make actual sprites for this things.
|
||||
/mob/living/simple_mob/vore/candy
|
||||
name = "candy critter"
|
||||
@@ -6,6 +16,7 @@
|
||||
icon_state = "drone0"
|
||||
icon_living = "drone0"
|
||||
icon_dead = "drone0"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/livingcandy)
|
||||
|
||||
mob_class = MOB_CLASS_ABERRATION
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee
|
||||
@@ -32,7 +43,8 @@
|
||||
|
||||
can_be_drop_prey = TRUE //CHOMP Add
|
||||
|
||||
/mob/living/simple_mob/vore/candy/Login()
|
||||
//bluenom
|
||||
/mob/living/simple_mob/vore/candy/bluecabold/Login()
|
||||
. = ..()
|
||||
if(!riding_datum)
|
||||
riding_datum = new /datum/riding/simple_mob(src)
|
||||
@@ -40,19 +52,149 @@
|
||||
verbs |= /mob/living/proc/toggle_rider_reins
|
||||
movement_cooldown = 1
|
||||
|
||||
/mob/living/simple_mob/vore/candy/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
/mob/living/simple_mob/vore/candy/bluecabold/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/vore/candy/init_vore()
|
||||
/mob/living/simple_mob/vore/candy/bluecabold/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.desc = "The fearsome predator 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 surroundings are momentarily filled with your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",)
|
||||
|
||||
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!")
|
||||
|
||||
//rednom
|
||||
/mob/living/simple_mob/vore/candy/redcabold/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/vore/candy/redcabold/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/vore/candy/redcabold/init_vore()
|
||||
if(!voremob_loaded)
|
||||
return
|
||||
.=..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.desc = "The fearsome predator 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 your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",)
|
||||
|
||||
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!")
|
||||
|
||||
//yellow
|
||||
/mob/living/simple_mob/vore/candy/yellowcabold/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/vore/candy/yellowcabold/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/vore/candy/yellowcabold/init_vore()
|
||||
if(!voremob_loaded)
|
||||
return
|
||||
.=..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.desc = "The fearsome predator 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 your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",)
|
||||
|
||||
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!")
|
||||
|
||||
//orange
|
||||
/mob/living/simple_mob/vore/candy/orangecabold/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/vore/candy/orangecabold/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/vore/candy/orangecabold/init_vore()
|
||||
if(!voremob_loaded)
|
||||
return
|
||||
.=..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.desc = "The fearsome predator 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 your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",)
|
||||
|
||||
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!")
|
||||
|
||||
//purplenom
|
||||
/mob/living/simple_mob/vore/candy/purplecabold/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/vore/candy/purplecabold/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/vore/candy/purplecabold/init_vore()
|
||||
if(!voremob_loaded)
|
||||
return
|
||||
.=..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.desc = "The fearsome predator 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 your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",)
|
||||
|
||||
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!")
|
||||
|
||||
//marshmellownom
|
||||
/mob/living/simple_mob/vore/candy/marshmellowserpent/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/vore/candy/marshmellowserpent/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/vore/candy/marshmellowserpent/init_vore()
|
||||
if(!voremob_loaded)
|
||||
return
|
||||
.=..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.desc = "The fearsome predator 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 your predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",)
|
||||
|
||||
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!")
|
||||
@@ -62,7 +204,7 @@
|
||||
desc = "A creature made of candy"
|
||||
icon_state = "blue"
|
||||
icon_living = "blue"
|
||||
icon_dead = "blue"
|
||||
icon_dead = "blue_dead"
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
@@ -86,7 +228,7 @@
|
||||
desc = "A creature made of candy"
|
||||
icon_state = "red"
|
||||
icon_living = "red"
|
||||
icon_dead = "red"
|
||||
icon_dead = "red_dead"
|
||||
|
||||
maxHealth = 125
|
||||
health = 125
|
||||
@@ -115,7 +257,7 @@
|
||||
desc = "A creature made of candy"
|
||||
icon_state = "yellow"
|
||||
icon_living = "yellow"
|
||||
icon_dead = "yellow"
|
||||
icon_dead = "yellow_dead"
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
@@ -139,7 +281,7 @@
|
||||
desc = "A creature made of candy"
|
||||
icon_state = "orange"
|
||||
icon_living = "orange"
|
||||
icon_dead = "orange"
|
||||
icon_dead = "orange_dead"
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
@@ -163,7 +305,7 @@
|
||||
desc = "A creature made of candy"
|
||||
icon_state = "purple"
|
||||
icon_living = "purple"
|
||||
icon_dead = "purple"
|
||||
icon_dead = "purple_dead"
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
@@ -187,7 +329,7 @@
|
||||
desc = "A creature made of candy"
|
||||
icon_state = "marshmellow"
|
||||
icon_living = "marshmellow"
|
||||
icon_dead = "marshmellow"
|
||||
icon_dead = "marshmellow_dead"
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
|
||||
|
||||
|
||||
Reference in New Issue
Block a user