MORE GATWAYS

Not going to lie, I have done minimal testing. Code should work.
This commit is contained in:
Fluff
2023-06-17 11:11:27 -04:00
parent 1bf74c1315
commit 8ed384caed
18 changed files with 136898 additions and 1 deletions

View File

@@ -126,7 +126,9 @@ but they don't actually change anything about the load order
//CHOMPStation Addition End
lateload_gateway = list(
list("Snow Field")
list("Snow Field"),
list("Maddness Lab"),
list("Base Blep")
) //CHOMPedit: Gateway maps. For now nothing fancy, just some already existing maps while we make our own.
lateload_gateway = null

View File

@@ -42,6 +42,20 @@
mappath = 'gateway/snowfield.dmm'
associated_map_datum = /datum/map_z_level/sc_lateload/gateway_destination
#include "gateway/BaseBlep.dm"
/datum/map_template/sc_lateload/gateway/baseblep
name = "Base Blep"
desc = "A brand new but already lost base at the end of a squishy caynon"
mappath = 'gateway/BaseBlep.dmm'
associated_map_datum = /datum/map_z_level/sc_lateload/gateway_destination
#include "gateway/maddnesslab.dm"
/datum/map_template/sc_lateload/gateway/maddnesslab
name = "Maddness Lab"
desc = "An ancient base brimming with creations of maddness"
mappath = 'gateway/maddnesslab.dmm'
associated_map_datum = /datum/map_z_level/sc_lateload/gateway_destination
#include "gateway/carpfarm.dm"
/datum/map_template/sc_lateload/gateway/carpfarm
name = "Carp Farm"

View File

@@ -0,0 +1,28 @@
/area/awaymission/baseblep
icon_state = "green"
base_turf = /turf/simulated/floor/outdoors/dirt
ambience = AMBIENCE_OTHERWORLDLY
/area/awaymission/baseblep/base
icon_state = "green"
/area/awaymission/baseblep/cavern
icon_state = "blue"
ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg', 'sound/music/LRRMenu.ogg', 'sound/music/LRRTrack3.ogg', \
'sound/ambience/cave/AmbCaveDebriA.ogg', 'sound/ambience/cave/AmbCaveDebriB.ogg', 'sound/ambience/cave/AmbCaveDebriC.ogg', \
'sound/ambience/cave/AmbCaveDebriD.ogg')
outdoors = 1
/area/awaymission/baseblep/caynon
icon_state = "red"
ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg', 'sound/music/LRRMenu.ogg', 'sound/music/LRRTrack3.ogg', \
'sound/ambience/cave/AmbCaveDebriA.ogg', 'sound/ambience/cave/AmbCaveDebriB.ogg', 'sound/ambience/cave/AmbCaveDebriC.ogg', \
'sound/ambience/cave/AmbCaveDebriD.ogg')
dynamic_lighting = 1
outdoors = 1
/area/awaymission/baseblep/hivebotsphere
requires_power = 0
/area/awaymission/baseblep/finale
requires_power = 0

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,90 @@
/area/awaymission/mol
name = "Strange Place"
icon_state = "red"
base_turf = /turf/simulated/floor/outdoors/dirt
outdoors = 0
requires_power = 0
/area/awaymission/mol/outside
dynamic_lighting = 1
outdoors = 1
/area/awaymission/mol/entrancetunnel
/area/awaymission/mol/security
/area/awaymission/mol/medical
/area/awaymission/mol/vr
/area/awaymission/mol/vr/observation
/area/awaymission/mol/vr/shattered
/area/awaymission/mol/vr/observationroom
/area/awaymission/mol/vistortunnel
/area/awaymission/mol/vistortunnel/red
/area/awaymission/mol/vistortunnel/blue
/area/awaymission/mol/vistortunnel/yellow
/area/awaymission/mol/vistortunnel/orange
/area/awaymission/mol/vistortunnel/green
/area/awaymission/mol/vistortunnel/purple
/area/awaymission/mol/scraptunnels
/area/awaymission/mol/scraptunnels/room1
/area/awaymission/mol/scraptunnels/room2
/area/awaymission/mol/scraptunnels/room3
/area/awaymission/mol/scraptunnels/room4
/area/awaymission/mol/kitchen
/area/awaymission/mol/kitchen/chamberA
/area/awaymission/mol/kitchen/chamberB
/area/awaymission/mol/kitchen/chamberC
/area/awaymission/mol/kitchen/ChamberD
/area/awaymission/mol/mines
/area/awaymission/mol/realitycore
/obj/structure/prop/blackbox/maddnesslab
catalogue_data = list(/datum/category_item/catalogue/information/blackbox/maddnesslab)
/datum/category_item/catalogue/information/blackbox/maddnesslab
name = "Black Box Data - Farewell"
desc = {"Testing, testing.<BR>
Well, this is akward.<BR>
Lab is finnally closed.<BR>
Everyone but boss man is gone.<BR>
Which I mean dead, quite, fired, or some combination of them.<BR>
And well the labs are a mess, and boss man well...that strange place did things to him.<BR>
So, I took charge and did things. I locked boss up firmly in that sphere he so fondly likes.<BR>
Locked the armory and hid the switches within the chais we made.<BR>,
If someone goes looky for boss, they'll need to clear up the carnage we made <BR>
Nothing is getting out of there. Except Ashy, they're the one sane thing left. <BR>
Not really sure what else to do for my confession.<BR>
We did some really messed up stuff man, and planned on doing worse.<BR>
I think boss belivives themselves to be god.<BR>
And with that strange mecha, I don't blame them. Not sure the expirmental janus desgins I've seen<BR>
surpass it.<BR>
Soo uhhh, yeah we messed up. Imma walk off aimlessly into the desert<BR>
Or maybe go home myself if I can bypass my own security measures<BR>
Didn't want anyone coming in or out of the teleporter but couldn't break it<BR>
So locked it behind a buttons in our research wings<BR>
And hey if you're hearing this, take care of my drake please.<BR>
Ashy is a good one.<BR>
"}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,163 @@
//vr section
/obj/item/clothing/head/vrwizard
name = "wizard hat"
desc = "A pointy hat looking pixelate, 0s and 1s dancing off the fabric"
icon_state = "redwizard"
armor = list(melee = 30, bullet = 30, laser = 65, energy = 65, bomb = 70, bio = 100, rad = 100)
siemens_coefficient = 0.1
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
min_pressure_protection = 0 * ONE_ATMOSPHERE
max_pressure_protection = 3 * ONE_ATMOSPHERE
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/suit/vrwizard
name = "wizard robes"
desc = "A silky robe with 0s and 1s flying off the seems."
icon_state = "redwizard"
armor = list(melee = 30, bullet = 30, laser = 65, energy = 65, bomb = 70, bio = 100, rad = 100)
siemens_coefficient = 0.1
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
min_pressure_protection = 0 * ONE_ATMOSPHERE
max_pressure_protection = 3 * ONE_ATMOSPHERE
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
//Candy section
/obj/item/clothing/head/psy_crown/candycrown
name = "candy crown"
desc = "A crown smelling oddly sweet"
icon_state = "wrathcrown"
cooldown_duration = 1 MINUTES // How long the cooldown should be.
brainloss_cost = 0
armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/head/psy_crown/candycrown/activate_ability(var/mob/living/wearer)
..()
wearer.add_modifier(/datum/modifier/aura/candy_orange, 30 SECONDS)
/obj/item/clothing/gloves/stamina
name = "gloves of stamina"
desc = "A strange pair of gloves."
icon_state = "regen"
item_state = "graygloves"
siemens_coefficient = 0
armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/gloves/stamina/equipped(var/mob/living/carbon/human/H)
if(H && H.gloves == src)
wearer = H
if(wearer.can_feel_pain())
to_chat(H, "<span class='danger'>You feel strange as hunger vanishes!</span>")
wearer.custom_pain("Your hands feel strange!",1)
..()
/obj/item/clothing/gloves/stamina/dropped(var/mob/living/carbon/human/H)
..()
if(wearer)
if(wearer.can_feel_pain())
to_chat(wearer, "<span class='danger'>You feel hungery!</span>")
wearer.custom_pain("Your hands feel strange",1)
wearer = null
/obj/item/clothing/gloves/stamina/New()
START_PROCESSING(SSobj, src)
..()
/obj/item/clothing/gloves/stamina/Destroy()
wearer = null
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/clothing/gloves/stamina/process()
if(!wearer || wearer.isSynthetic() || wearer.stat == DEAD)
return // Robots and dead people don't have a metabolism.
wearer.nutrition = max(wearer.nutrition + 20, 0)
/obj/item/clothing/suit/armor/buffvest
name = "camdy armor"
desc = "A really strange armor amde of similiar substance as the creatures near it."
icon_state = "armor"
blood_overlay_type = "armor"
armor = list(melee = 70, bullet = 60, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0)
var/tension_threshold = 125
var/cooldown = null // world.time of when this was last triggered.
var/cooldown_duration = 3 MINUTES // How long the cooldown should be.
var/flavor_equip = null // Message displayed to someone who puts this on their head. Drones don't get a message.
var/flavor_unequip = null // Ditto, but for taking it off.
var/flavor_drop = null // Ditto, but for dropping it.
var/flavor_activate = null // Ditto, for but activating.
var/brainloss_cost = 0
/obj/item/clothing/suit/armor/buffvest/proc/activate_ability(var/mob/living/wearer)
cooldown = world.time + cooldown_duration
to_chat(wearer, flavor_activate)
to_chat(wearer, "<span class='danger'>The inside of your head hurts...</span>")
wearer.adjustBrainLoss(brainloss_cost)
wearer.add_modifier(/datum/modifier/aura/candy_blue, 30 SECONDS)
/obj/item/clothing/suit/armor/buffvest/equipped(var/mob/living/carbon/human/H)
..()
if(istype(H) && H.head == src && H.is_sentient())
START_PROCESSING(SSobj, src)
to_chat(H, flavor_equip)
/obj/item/clothing/suit/armor/buffvest/dropped(var/mob/living/carbon/human/H)
..()
STOP_PROCESSING(SSobj, src)
if(H.is_sentient())
if(loc == H) // Still inhand.
to_chat(H, flavor_unequip)
else
to_chat(H, flavor_drop)
/obj/item/clothing/suit/armor/buffvest/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/clothing/suit/armor/buffvest/process()
if(isliving(loc))
var/mob/living/L = loc
if(world.time >= cooldown && L.is_sentient() && L.get_tension() >= tension_threshold)
activate_ability(L)
//vistor section
/obj/item/clothing/suit/armor/alien/vistor
name = "rocky suit"
desc = "A strange set of armor"
icon_state = "alien_tank"
slowdown = 0
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
armorsoak = list( melee = 12, bullet = 12,laser = 12, energy = 12 , bomb = 0, bio = 0, rad = 0)
block_chance = 12
/obj/item/clothing/suit/armor/tesla/vistor
name = "zapping suit"
desc = "A strange set of armor"
slowdown = 0
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/reactive/vistor
name = "vibrating suit"
desc = "A strange set of armor"
icon_state = "reactiveoff"
slowdown = 0
armor = list(melee = 35, bullet = 35, laser = 35, energy = 35, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/protectionbubble
name = "strange suit"
desc = "A strange set of armor"
icon_state = "armor"
blood_overlay_type = "armor"
armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 100, rad = 75)
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
min_pressure_protection = 0 * ONE_ATMOSPHERE
max_pressure_protection = 15 * ONE_ATMOSPHERE
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
//scrap section which is on hold till I get foes

View File

@@ -0,0 +1,293 @@
/mob/living/simple_mob/mechanical/mecha/imperion
name = "imperion"
icon = 'icons/mecha/mecha.dmi'
icon_state = "imperion"
icon_living = "imperion"
icon_dead = "imperion"
maxHealth = 400
health = 400
movement_cooldown = -1
unsuitable_atoms_damage = 0
projectiletype = /obj/item/projectile/energy/gaussrifle
melee_attack_delay = 4 SECOND
damage_fatigue_mult = 0
has_repair_droid = TRUE
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
wreckage = null
pilot_type = null
/mob/living/simple_mob/mechanical/mecha/imperion/phase1 //Simple phase that is mostly dodge rockects
movement_cooldown = -1
projectiletype = /obj/item/projectile/bullet/srmrocket
melee_attack_delay = 4 SECOND
ranged_attack_delay = 1.5 SECONDS
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
wreckage = null
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase2
var/pull_radius = 1
var/pull_strength = STAGE_THREE
/mob/living/simple_mob/mechanical/mecha/imperion/phase1/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 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 missile rack."))
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/launch_rockets(atom/target)
visible_message(span("warning", "\The [src] activates gravity generators!"))
for(var/atom/A in range(pull_radius, src))
A.singularity_pull(src, pull_strength)
/mob/living/simple_mob/mechanical/mecha/imperion/phase1/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)
/mob/living/simple_mob/mechanical/mecha/imperion/phase2 //Boss uses crowd control.
movement_cooldown = -1
projectiletype = /obj/item/projectile/bola
melee_attack_delay = 4 SECOND
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
wreckage = null
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase3
/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/electric_defense(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()
/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/launch_rockets(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/arc/spore(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/mechanical/mecha/imperion/phase2/proc/launch_microsingularity(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/ion/small(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/mechanical/mecha/imperion/phase3 //DPS check
movement_cooldown = -1
projectiletype = /obj/item/projectile/energy/gaussrifle
melee_attack_delay = 4 SECOND
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
wreckage = null
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase4
/mob/living/simple_mob/mechanical/mecha/imperion/phase3/proc/electric_defense(atom/target)
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)
/mob/living/simple_mob/mechanical/mecha/imperion/phase4 //Starts to slow down
movement_cooldown = 0
projectiletype = /obj/item/projectile/energy/plasma/vepr
melee_attack_delay = 4 SECOND
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
wreckage = null
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase5
/mob/living/simple_mob/mechanical/mecha/imperion/phase4/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 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 missile rack."))
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)
/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)
/mob/living/simple_mob/mechanical/mecha/imperion/phase5 //Final stand
icon_state = "imperion-phase"
icon_living = "imperion-phase"
icon_dead = "imperion-phase"
movement_cooldown = 8
projectiletype = /obj/item/projectile/bullet/magnetic/fuelrod/tritium
melee_attack_delay = 4 SECOND
ranged_attack_delay = 1.5 SECONDS
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
//This is a place holder loot list
loot_list = list(/obj/item/clothing/suit/armor/alien = 30,
/obj/item/clothing/suit/armor/alien/tank = 30,
/obj/item/prop/alien/junk = 50,
/obj/item/prop/alien/junk = 50,
/obj/item/prop/alien/junk = 50,
/obj/item/prop/alien/junk = 50,
/obj/item/prop/alien/junk = 50,
/obj/item/weapon/gun/energy/alien = 30,
/obj/item/weapon/gun/energy/alien = 30,
/obj/random/tool/alien = 30,
/obj/random/tool/alien = 30,
/obj/item/weapon/cell/device/weapon/recharge/alien = 30,
/obj/item/weapon/cell/device/weapon/recharge/alien = 30,
/obj/item/clothing/suit/armor/alien = 30,
/obj/item/clothing/suit/armor/alien/tank = 30,
/obj/item/prop/alien/junk = 50,
/obj/item/prop/alien/junk = 50,
/obj/item/prop/alien/junk = 50,
/obj/item/prop/alien/junk = 50,
/obj/item/prop/alien/junk = 50,
/obj/item/weapon/gun/energy/alien = 30,
/obj/item/weapon/gun/energy/alien = 30,
/obj/random/tool/alien = 30,
/obj/random/tool/alien = 30,
/obj/item/weapon/cell/device/weapon/recharge/alien = 30,
/obj/item/weapon/cell/device/weapon/recharge/alien = 30,
)
/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)
/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)
/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)
set_AI_busy(FALSE)
//Cool boss visuals, auras, and me saying no to stun.
/obj/item/weapon/grenade/shooter/laserpellet
name = "laser pellet grenade"
desc = "Unleashes not hit scan lasers."
projectile_types = list(/obj/item/projectile/energy/mob/midlaser)
/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>"
stacks = MODIFIER_STACK_EXTEND
disable_duration_percent = 0
/mob/living/simple_mob/mechanical/mecha/imperion/Initialize()
add_modifier(/datum/modifier/bossbuff, null, src) // Slime is always swole.
return ..()
/datum/modifier/aura/despair
name = "ruin"
mob_overlay_state = "cult_aura"
aura_max_distance = 28
on_created_text = "<span class='critical'>You feel like you're falling into ruin!</span>"
on_expired_text = "<span class='notice'>The ruin feeling is gone.</span>"
stacks = MODIFIER_STACK_EXTEND
/datum/modifier/aura/despair/tick()
if(holder.stat == DEAD)
expire()
if(ishuman(holder)) // Robolimbs need this code sadly.
var/mob/living/carbon/human/H = holder
for(var/obj/item/organ/external/E in H.organs)
var/obj/item/organ/external/O = E
O.heal_damage(-0.1, -0.1, 0, 0)
else
holder.adjustBruteLoss(0.1)
holder.adjustFireLoss(0,1)
/mob/living/simple_mob/mechanical/mecha/imperion/phase3/proc/heal_aura()
for(var/mob/living/L in view(src, 28))
if(L.stat == DEAD)
continue
L.add_modifier(/datum/modifier/aura/despair, null, src)

View File

@@ -0,0 +1,242 @@
/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/shielded
name = "vistor blue"
icon = 'icons/mob/animal_vg.dmi'
icon_state = "drone3"
icon_living = "drone3"
icon_dead = "drone3"
maxHealth = 50
health = 50
movement_cooldown = 0
unsuitable_atoms_damage = 0
projectiletype = /obj/item/projectile/energy/homing_bolt
melee_attack_delay = 4 SECOND
melee_damage_lower = 25
melee_damage_upper = 25
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
wreckage = null
pilot_type = /mob/living/simple_mob/mechanical/mecha/vistor/vistorblue
/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/shielded/bullet_act(var/obj/item/projectile/P)
var/reflectchance = 100
if(prob(reflectchance))
var/damage_mod = rand(2,4)
var/projectile_dam_type = P.damage_type
var/incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3)))
var/armorcheck = run_armor_check(null, P.check_armour)
var/soakedcheck = get_armor_soak(null, P.check_armour)
if(!(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)))
visible_message("<span class='danger'>The [P.name] bounces off of [src]'s sheild!</span>", \
"<span class='userdanger'>The [P.name] bounces off of [src]'s sheild!</span>")
new /obj/item/weapon/material/shard/shrapnel(src.loc)
if(!(P.damage_type == BRUTE || P.damage_type == BURN))
projectile_dam_type = BRUTE
incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to brute for physical projectiles, though severely decreased.
apply_damage(incoming_damage, projectile_dam_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
return -1 //Doesn't reflect non-beams or non-energy projectiles. They just smack and drop with little to no effect.
else
visible_message("<span class='danger'>The [P.name] gets reflected by [src]'s sheild!</span>", \
"<span class='userdanger'>The [P.name] gets reflected by [src]'s sheild!</span>")
damage_mod = rand(3,5)
incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3)))
if(!(P.damage_type == BRUTE || P.damage_type == BURN))
projectile_dam_type = BURN
incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to burn for energy-type projectiles, though severely decreased.
apply_damage(incoming_damage, P.damage_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
// Find a turf near or on the original location to bounce to
if(P.starting)
var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
var/turf/curloc = get_turf(src)
// redirect the projectile
P.redirect(new_x, new_y, curloc, src)
P.reflected = 1
return -1 // complete projectile permutation
return (..(P))
/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue
name = "vistor blue"
icon = 'icons/mob/animal_vg.dmi'
icon_state = "drone0"
icon_living = "drone0"
icon_dead = "drone0"
mob_class = MOB_CLASS_ABERRATION
faction = "vistor"
maxHealth = 150
health = 150
movement_cooldown = 0
unsuitable_atoms_damage = 0
projectiletype = /obj/item/projectile/energy/homing_bolt
melee_attack_delay = 4 SECOND
melee_damage_lower = 25
melee_damage_upper = 25
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/homing
var/grenade_timer = 50 //CHOMPEdit
special_attack_cooldown = 45 SECONDS
special_attack_min_range = 2
special_attack_max_range = 7
loot_list = list(/obj/item/clothing/suit/armor/protectionbubble = 100,
/obj/item/clothing/suit/armor/protectionbubble = 50,
/obj/item/clothing/suit/armor/protectionbubble = 50
)
/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/should_special_attack(atom/A)
var/mob_count = 0 // Are there enough mobs to consider grenading?
var/turf/T = get_turf(A)
for(var/mob/M in range(T, 2))
if(M.faction == faction) // Don't grenade our friends
return FALSE
if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade
if(!M.stat) // Dead things don't warrant a grenade
mob_count ++
if(mob_count < 2)
return FALSE
else
return TRUE
// Yes? Throw the grenade
/mob/living/simple_mob/mechanical/mecha/vistor/vistorblue/do_special_attack(atom/A)
set waitfor = FALSE
set_AI_busy(TRUE)
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
if(istype(G))
G.throw_at(A, G.throw_range, G.throw_speed, src)
G.det_time = grenade_timer //CHOMPEdit
G.activate(src) //CHOMPEdit
special_attack_charges = max(special_attack_charges-1, 0)
set_AI_busy(FALSE)
/obj/item/weapon/grenade/shooter/energy/homing //This is a horrid idea
name = "homing grenade"
desc = "A horrifically dangerous rave in a can."
projectile_types = list(/obj/item/projectile/energy/homing_bolt)
/mob/living/simple_mob/mechanical/mecha/vistor/vistorgreen
name = "vistor green"
icon = 'icons/mob/animal_vg.dmi'
icon_state = "mushroom"
icon_living = "mushroom"
icon_dead = "mushroom_dead"
maxHealth = 200
health = 200
movement_cooldown = 0
unsuitable_atoms_damage = 0
projectiletype = /obj/item/projectile/arc/spore
melee_attack_delay = 4 SECOND
wreckage = null
pilot_type = null
melee_damage_lower = 25
melee_damage_upper = 25
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
special_attack_cooldown = 2 SECONDS
special_attack_min_range = 2
special_attack_max_range = 7
loot_list = list(/obj/item/clothing/suit/armor/reactive/vistor = 100,
/obj/item/clothing/suit/armor/reactive/vistor = 50,
/obj/item/clothing/suit/armor/reactive/vistor = 50
)
/mob/living/simple_mob/mechanical/mecha/vistor/vistorgreen/do_special_attack(atom/A)
var/obj/item/projectile/P = new /obj/item/projectile/arc/spore(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
/mob/living/simple_mob/mechanical/mecha/vistor/vistorpurple
name = "vistor purple"
icon = 'icons/mob/animal_vg.dmi'
icon_state = "scarybat"
icon_living = "scarybat"
icon_dead = "scary_dead"
maxHealth = 200
health = 200
movement_cooldown = 0
unsuitable_atoms_damage = 0
projectiletype = null
melee_attack_delay = 4 SECOND
wreckage = null
pilot_type = null
melee_damage_lower = 25
melee_damage_upper = 25
alpha = 50
loot_list = list(/obj/item/clothing/suit/armor/tesla/vistor = 100,
/obj/item/clothing/suit/armor/tesla/vistor = 50,
/obj/item/clothing/suit/armor/tesla/vistor = 50
)
/mob/living/simple_mob/mechanical/mecha/vistor/vistoryellow
name = "vistor yellow"
icon = 'icons/mob/animal.dmi'
icon_state = "chick"
icon_living = "chick"
icon_dead = "chick"
maxHealth = 50
health = 50
movement_cooldown = 0
unsuitable_atoms_damage = 0
projectiletype = null
melee_attack_delay = 6 SECOND
wreckage = null
pilot_type = null
attack_armor_pen = 25
melee_damage_lower = 10
melee_damage_upper = 40
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
mob_size = MOB_MINISCULE
/mob/living/simple_mob/mechanical/mecha/vistor/vistororange
name = "vistor orange?"
icon = 'icons/mecha/mecha.dmi'
icon_state = "honker"
icon_living = "honker"
icon_dead = "honker"
maxHealth = 300
health = 300
movement_cooldown = 0
unsuitable_atoms_damage = 0
projectiletype = /obj/item/projectile/energy/gaussrifle
melee_attack_delay = 4 SECOND
wreckage = null
pilot_type = null
melee_damage_lower = 25
melee_damage_upper = 25
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
ranged_attack_delay = 3 SECONDS
loot_list = list(/obj/item/clothing/suit/armor/alien/vistor = 100,
/obj/item/clothing/suit/armor/alien/vistor = 50,
/obj/item/clothing/suit/armor/alien/vistor = 50
)
//obj/item/clothing/suit/armor/alien/vistor
//obj/item/clothing/suit/armor/tesla/vistor
//obj/item/clothing/suit/armor/reactive/vistor
//obj/item/clothing/suit/armor/protectionbubble

View File

@@ -0,0 +1,202 @@
/mob/living/simple_mob/vr
name = "vr creation"
desc = "A digital creature"
icon = 'icons/mob/animal_vg.dmi'
icon_state = "bookbat_purple"
icon_living = "bookbat_purple"
icon_dead = "bookbat_purple_dead"
mob_class = MOB_CLASS_ABERRATION
faction = "vr"
maxHealth = 125
health = 125
movement_cooldown = 1
unsuitable_atoms_damage = 0
projectiletype = /obj/item/projectile/energy/homing_bolt/wizard
melee_attack_delay = 4 SECOND
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
melee_damage_lower = 8
melee_damage_upper = 15
size_multiplier = 1.50
loot_list = list(/obj/item/clothing/head/vrwizard = 10,
/obj/item/clothing/suit/vrwizard = 10,
/obj/item/weapon/gun/magic/firestaff/vrwizard/fire = 10,
/obj/item/weapon/gun/magic/firestaff/vrwizard/frost = 10,
/obj/item/weapon/gun/magic/firestaff/vrwizard/poison = 10,
/obj/item/weapon/gun/magic/firestaff/vrwizard/lighting = 10
)
/mob/living/simple_mob/vr/firewiz
name = "vr creation"
icon_state = "bookbat_red"
icon_living = "bookbat_red"
icon_dead = "bookbat_red_dead"
projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/fire
/mob/living/simple_mob/vr/poisonwiz
name = "vr creation"
icon_state = "bookbat_green"
icon_living = "bookbat_green"
icon_dead = "bookbat_green_dead"
projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/poison
/mob/living/simple_mob/vr/lightingwiz
name = "vr creation"
icon_state = "bookbat_woody"
icon_living = "bookbat_woody"
icon_dead = "bookbat_woody_dead"
projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/lighting
/mob/living/simple_mob/vr/frostwiz
name = "vr creation"
icon_state = "bookbat_blue"
icon_living = "bookbat_blue"
icon_dead = "bookbat_blue_dead"
projectiletype = /obj/item/projectile/energy/homing_bolt/wizard/frost
/mob/living/simple_mob/vr/glitch
name = "glitch"
desc = "You shouldn't be seeing this, run"
icon = 'icons/mob/fish.dmi'
icon_state = ""
icon_living = ""
icon_dead = ""
projectiletype = null
maxHealth = 20
health = 20
movement_cooldown = -3
unsuitable_atoms_damage = 0
projectiletype = null
melee_attack_delay = 0 SECOND
melee_damage_lower = 8
melee_damage_upper = 8
/mob/living/simple_mob/vr/glitch/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
L.add_modifier(/datum/modifier/digitizing, 60 SECONDS)
/mob/living/simple_mob/vr/doomknight
name = "vr creation"
projectiletype = null
maxHealth = 250
health = 250
movement_cooldown = 4
unsuitable_atoms_damage = 0
projectiletype = null
melee_attack_delay = 8 SECOND
melee_damage_lower = 0
melee_damage_upper = 0
/mob/living/simple_mob/vr/doomknight/apply_melee_effects(var/atom/A) //If you get hit by this slow thing, you have 5 minuites to live.
if(isliving(A))
var/mob/living/L = A
L.add_modifier(/datum/modifier/doomed, 300 SECONDS)
//Spells
/obj/item/projectile/energy/homing_bolt/wizard
damage = 10
/obj/item/projectile/energy/homing_bolt/wizard/fire
modifier_type_to_apply = /datum/modifier/wizfire
modifier_duration = 6 SECONDS
/obj/item/projectile/energy/homing_bolt/wizard/lighting
modifier_type_to_apply = /datum/modifier/wizfire/lighting
modifier_duration = 6 SECONDS
/obj/item/projectile/energy/homing_bolt/wizard/poison
modifier_type_to_apply = /datum/modifier/wizpoison
modifier_duration = 6 SECONDS
/obj/item/projectile/energy/homing_bolt/wizard/frost
modifier_type_to_apply = /datum/modifier/wizpoison/frost
modifier_duration = 6 SECONDS
/datum/modifier/wizfire
name = "wizfire"
desc = "Can you even see this in game?"
mob_overlay_state = "on_fire"
on_created_text = "<span class='warning'>You are on digital fire.</span>"
on_expired_text = "<span class='notice'>You feel better.</span>"
stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot.
var/damage_per_tick = 0.2
bleeding_rate_percent = 0.7
/datum/modifier/wizfire/tick()
holder.inflict_heat_damage(damage_per_tick)
/datum/modifier/wizfire/lighting
name = "wizlighting"
desc = "Can you even see this in game?."
mob_overlay_state = "blue_electricity_constant"
on_created_text = "<span class='warning'>You are filled with digital lighting.</span>"
on_expired_text = "<span class='notice'>You feel better.</span>"
stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot.
damage_per_tick = 0.05
incoming_fire_damage_percent = 1.1
/datum/modifier/wizpoison
name = "wizpoison"
desc = "Can you even see this in game?."
mob_overlay_state = "poisoned"
on_created_text = "<span class='warning'>You are on digital poisoned.</span>"
on_expired_text = "<span class='notice'>You feel better.</span>"
stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot.
var/damage_per_tick = 3
/datum/modifier/wizpoison/tick()
if(holder.stat == DEAD)
expire(silent = TRUE)
holder.inflict_poison_damage(damage_per_tick)
/datum/modifier/wizpoison/frost
name = "wizfrost"
desc = "Can you even see this in game?."
mob_overlay_state = "chilled"
on_created_text = "<span class='warning'>You are on freezing, digitally.</span>"
on_expired_text = "<span class='notice'>You feel better.</span>"
stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot.
damage_per_tick = 1
slowdown = 0.5
/datum/modifier/digitizing
name = "digital"
desc = "Can you even see this in game?."
mob_overlay_state = "corana"
on_created_text = "<span class='warning'>You feel less real.</span>"
on_expired_text = "<span class='notice'>You feel real again.</span>"
stacks = MODIFIER_STACK_ALLOWED //How does this stack?
max_health_percent = 0.7
/datum/modifier/aura/crumbling
name = "crumbling"
desc = "Can you even see this in game?."
mob_overlay_state = "cult_aura"
on_created_text = "<span class='warning'>You feel like the end is nigh.</span>"
on_expired_text = "<span class='notice'>You feel safe for now.</span>"
aura_max_distance = 4
max_health_percent = 0.9
disable_duration_percent = 1.2
incoming_damage_percent = 1.2
incoming_oxy_damage_percent = 2
incoming_hal_damage_percent = 2
incoming_healing_percent = 0.8
/datum/modifier/aura/crumbling/superboss
aura_max_distance = 16

View File

@@ -0,0 +1,16 @@
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot
name = "ember hivebot"
desc = "A robot that appears to utilize fire to cook their enemies."
icon_state = "yellow"
icon_living = "yellow"
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/declone
name = "irradiating hivebot"
desc = "A robot that appears to utilize radiation to destablize their foes."
icon_state = "yellow"
icon_living = "yellow"
projectiletype = /obj/item/projectile/energy/declone
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege
projectiletype = /obj/item/projectile/arc //Polaris, don't make the same mob twice.

View File

@@ -0,0 +1,298 @@
/mob/living/simple_mob/slime/feral
cores = 3 // Xenobio will love getting their hands on these.
maxHealth = 150
movement_cooldown = 0
melee_damage_lower = 15
melee_damage_upper = 15
/mob/living/simple_mob/slime/feral/apply_melee_effects(mob/living/L)
if(istype(L) && a_intent == I_HURT)
// Pump them full of toxins, if able.
if(L.reagents && L.can_inject() && reagent_injected)
L.reagents.add_reagent(reagent_injected, injection_amount)
/mob/living/simple_mob/slime/feral/purple
desc = "This slime is rather toxic to handle, as it is poisonous."
color = "#CC23FF"
slime_color = "purple"
coretype = /obj/item/slime_extract/purple
reagent_injected = "toxin"
/mob/living/simple_mob/slime/feral/orange
desc = "This slime is known to be flammable and can ignite enemies."
color = "#FFA723"
slime_color = "orange"
coretype = /obj/item/slime_extract/orange
melee_damage_lower = 5
melee_damage_upper = 5
heat_resist = 1
/mob/living/simple_mob/slime/feral/orange/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
L.add_modifier(/datum/modifier/fire, 5 SECONDS)
/mob/living/simple_mob/slime/feral/blue
desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes."
color = "#19FFFF"
slime_color = "blue"
coretype = /obj/item/slime_extract/blue
reagent_injected = "cryotoxin"
cold_resist = 0.50
/mob/living/simple_mob/slime/feral/metal
desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface."
color = "#5F5F5F"
slime_color = "metal"
shiny = TRUE
coretype = /obj/item/slime_extract/metal
maxHealth = 250
armor = list(
"melee" = 25,
"bullet" = 25,
"laser" = 25,
"energy" = 50,
"bomb" = 80,
"bio" = 100,
"rad" = 100
)
armor_soak = list(
"melee" = 5,
"bullet" = 5,
"laser" = 5,
"energy" = 0,
"bomb" = 0,
"bio" = 0,
"rad" = 0
)
/mob/living/simple_mob/slime/feral/yellow
desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes."
color = "#FFF423"
slime_color = "yellow"
coretype = /obj/item/slime_extract/yellow
melee_damage_lower = 5
melee_damage_upper = 5
shock_resist = 1
projectiletype = /obj/item/projectile/energy/mob/electric_spider
/mob/living/simple_mob/slime/feral/yellow/apply_melee_effects(atom/A)
..()
if(isliving(A))
var/mob/living/L = A
L.inflict_shock_damage(10)
to_chat(src, span("span", "You shock \the [L]."))
to_chat(L, span("danger", "You've been shocked by \the [src]!"))
/mob/living/simple_mob/slime/feral/dark_purple
desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it."
color = "#660088"
slime_color = "dark purple"
coretype = /obj/item/slime_extract/dark_purple
reagent_injected = "phoron"
/mob/living/simple_mob/slime/feral/dark_purple/proc/ignite()
visible_message(span("critical", "\The [src] erupts in an inferno!"))
for(var/turf/simulated/target_turf in view(2, src))
target_turf.assume_gas("phoron", 30, 1500+T0C)
spawn(0)
target_turf.hotspot_expose(1500+T0C, 400)
qdel(src)
/mob/living/simple_mob/slime/feral/dark_purple/ex_act(severity)
log_and_message_admins("[src] ignited due to a chain reaction with an explosion.")
ignite()
/mob/living/simple_mob/slime/feral/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume)
log_and_message_admins("[src] ignited due to exposure to fire.")
ignite()
/mob/living/simple_mob/slime/feral/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone)
if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
ignite()
else
..()
/mob/living/simple_mob/slime/feral/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user)
if(istype(W) && W.force && W.damtype == BURN)
log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].")
ignite()
else
..()
/mob/living/simple_mob/slime/feral/silver
desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it."
color = "#AAAAAA"
slime_color = "silver"
coretype = /obj/item/slime_extract/silver
shiny = TRUE
/mob/living/simple_mob/slime/feral/silver/bullet_act(var/obj/item/projectile/P, var/def_zone)
if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy))
visible_message(span("danger", "\The [src] reflects \the [P]!"))
// Find a turf near or on the original location to bounce to
var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2)
var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2)
var/turf/curloc = get_turf(src)
// redirect the projectile
P.redirect(new_x, new_y, curloc, src)
P.reflected = TRUE
return PROJECTILE_CONTINUE // complete projectile permutation
else
..()
/mob/living/simple_mob/slime/feral/bluespace
desc = "Trapping this slime in a cell is generally futile, as it can teleport at will."
color = null
slime_color = "bluespace"
icon_state_override = "bluespace"
coretype = /obj/item/slime_extract/bluespace
special_attack_min_range = 3
special_attack_max_range = 7
special_attack_cooldown = 5 SECONDS
/mob/living/simple_mob/slime/feral/bluespace/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()
if(Adjacent(A))
attack_target(A)
/mob/living/simple_mob/slime/feral/ruby
desc = "This slime has great physical strength."
color = "#FF3333"
slime_color = "ruby"
shiny = TRUE
glow_toggle = TRUE
coretype = /obj/item/slime_extract/ruby
melee_attack_delay = 1 SECOND
/mob/living/simple_mob/slime/feral/ruby/Initialize()
add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole.
return ..()
/mob/living/simple_mob/slime/feral/ruby/apply_melee_effects(atom/A)
..()
if(isliving(A) && a_intent == I_HURT)
var/mob/living/L = A
if(L.mob_size <= MOB_MEDIUM)
visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!"))
playsound(src, "punch", 50, 1)
L.Weaken(1)
var/throwdir = get_dir(src, L)
L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
else
to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place."))
visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
playsound(src, "punch", 50, 1) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
/mob/living/simple_mob/slime/feral/red
desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here."
color = "#FF3333"
slime_color = "red"
coretype = /obj/item/slime_extract/red
movement_cooldown = -1 // See above.
/mob/living/simple_mob/slime/feral/green
desc = "This slime is radioactive."
color = "#14FF20"
slime_color = "green"
coretype = /obj/item/slime_extract/green
glow_toggle = TRUE
reagent_injected = "radium"
var/rads = 25
/mob/living/simple_mob/slime/feral/green/handle_special()
if(stat != DEAD)
irradiate()
..()
/mob/living/simple_mob/slime/feral/green/proc/irradiate()
SSradiation.radiate(src, rads)
/mob/living/simple_mob/slime/feral/pink
desc = "This slime has regenerative properties."
color = "#FF0080"
slime_color = "pink"
coretype = /obj/item/slime_extract/pink
glow_toggle = TRUE
/mob/living/simple_mob/slime/feral/pink/handle_special()
if(stat != DEAD)
heal_aura()
..()
/mob/living/simple_mob/slime/feral/pink/proc/heal_aura()
for(var/mob/living/L in view(src, 2))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/aura/slime_heal, null, src)
/mob/living/simple_mob/slime/feral/emerald
desc = "This slime is faster than usual, even more so than the red slimes."
color = "#22FF22"
shiny = TRUE
glow_toggle = TRUE
slime_color = "emerald"
coretype = /obj/item/slime_extract/emerald
/mob/living/simple_mob/slime/feral/emerald/handle_special()
if(stat != DEAD)
zoom_aura()
..()
/mob/living/simple_mob/slime/feral/emerald/proc/zoom_aura()
for(var/mob/living/L in view(src, 2))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/technomancer/haste, 5 SECONDS, src)

View File

@@ -0,0 +1,13 @@
/mob/living/simple_mob/vore/ashy
name = "ashy"
icon = 'icons/mob/ashspawn.dmi'
icon_state = "ash_welp"
icon_living = "ash_welp"
icon_dead = "ash_welp"
damage_fatigue_mult = 0
movement_cooldown = 0
maxHealth = 300
see_in_dark = 8
minbodytemp = 0
maxbodytemp = 30000
min_oxy = 0

View File

@@ -0,0 +1,231 @@
//Someone remind me to get someone to make actual sprites for this things.
/mob/living/simple_mob/vore/candy
name = "candy critter"
desc = "A creature made of candy"
icon = 'modular_chomp/icons/mob/candy.dmi'
icon_state = "drone0"
icon_living = "drone0"
icon_dead = "drone0"
mob_class = MOB_CLASS_ABERRATION
ai_holder_type = /datum/ai_holder/simple_mob/melee
faction = "candy"
maxHealth = 50
health = 50
movement_cooldown = 2
melee_attack_delay = 5 SECOND
can_be_drop_prey = TRUE
unsuitable_atoms_damage = 0
melee_damage_lower = 8
melee_damage_upper = 15
/mob/living/simple_mob/vore/candy/bluecabold //Adds protection
name = "gummy kobold"
desc = "A creature made of candy"
icon_state = "blue"
icon_living = "blue"
icon_dead = "blue"
maxHealth = 50
health = 50
melee_damage_lower = 7
melee_damage_upper = 12
/mob/living/simple_mob/vore/candy/bluecabold/handle_special()
if(stat != DEAD)
buff_aura()
..()
/mob/living/simple_mob/vore/candy/bluecabold/proc/buff_aura()
for(var/mob/living/L in view(src, 2))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/aura/candy_blue, null, src)
/mob/living/simple_mob/vore/candy/redcabold //Tanky boi
name = "gummy kobold"
desc = "A creature made of candy"
icon_state = "red"
icon_living = "red"
icon_dead = "red"
maxHealth = 125
health = 125
melee_damage_lower = 0
melee_damage_upper = 0
/mob/living/simple_mob/vore/candy/redcabold/apply_melee_effects(atom/A)
..()
if(isliving(A) && a_intent == I_HURT)
var/mob/living/L = A
if(L.mob_size <= MOB_MEDIUM)
visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!"))
playsound(src, "punch", 50, 1)
L.Weaken(1)
var/throwdir = get_dir(src, L)
L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
else
to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place."))
visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
playsound(src, "punch", 50, 1)
/mob/living/simple_mob/vore/candy/yellowcabold //Speeds folks
name = "gummy kobold"
desc = "A creature made of candy"
icon_state = "yellow"
icon_living = "yellow"
icon_dead = "yellow"
maxHealth = 50
health = 50
melee_damage_lower = 8
melee_damage_upper = 15
/mob/living/simple_mob/vore/candy/yellowcabold/handle_special()
if(stat != DEAD)
buff_aura()
..()
/mob/living/simple_mob/vore/candy/yellowcabold/proc/buff_aura()
for(var/mob/living/L in view(src, 2))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/aura/candy_yellow, null, src)
/mob/living/simple_mob/vore/candy/orangecabold //Increase melee damage
name = "gummy kobold"
desc = "A creature made of candy"
icon_state = "orange"
icon_living = "orange"
icon_dead = "orange"
maxHealth = 50
health = 50
melee_damage_lower = 7
melee_damage_upper = 12
/mob/living/simple_mob/vore/candy/orangecabold/handle_special()
if(stat != DEAD)
buff_aura()
..()
/mob/living/simple_mob/vore/candy/orangecabold/proc/buff_aura()
for(var/mob/living/L in view(src, 2))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/aura/candy_orange, null, src)
/mob/living/simple_mob/vore/candy/purplecabold //Heals folks
name = "gummy kobold"
desc = "A creature made of candy"
icon_state = "purple"
icon_living = "purple"
icon_dead = "purple"
maxHealth = 50
health = 50
melee_damage_lower = 7
melee_damage_upper = 12
/mob/living/simple_mob/vore/candy/purplecabold/handle_special()
if(stat != DEAD)
buff_aura()
..()
/mob/living/simple_mob/vore/candy/purplecabold/proc/buff_aura()
for(var/mob/living/L in view(src, 2))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/aura/candy_purple, null, src)
/mob/living/simple_mob/vore/candy/marshmellowserpent //Long range grab
name = "marshmellow serpent"
desc = "A creature made of candy"
icon_state = "marshmellow"
icon_living = "marshmellow"
icon_dead = "marshmellow"
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
maxHealth = 50
health = 50
melee_damage_lower = 4
melee_damage_upper = 8
special_attack_min_range = 1
special_attack_max_range = 14
special_attack_cooldown = 10
loot_list = list(/obj/item/clothing/head/psy_crown/candycrown = 30,
/obj/item/clothing/gloves/stamina = 30,
/obj/item/clothing/suit/armor/buffvest = 30,
/obj/item/weapon/melee/cullingcane = 30
)
/mob/living/simple_mob/vore/candy/marshmellowserpent/do_special_attack(atom/A)
set_AI_busy(TRUE)
do_windup_animation(A, 20)
addtimer(CALLBACK(src, .proc/chargeend, A), 20)
/mob/living/simple_mob/vore/candy/marshmellowserpent/proc/chargeend(atom/A)
if(stat) //you are dead
set_AI_busy(FALSE)
return
playsound(src, 'sound/vore/sunesound/pred/schlorp.ogg', 25)
var/obj/item/projectile/beam/appendage/appendage_attack = new /obj/item/projectile/beam/appendage(get_turf(loc))
appendage_attack.old_style_target(A, src)
appendage_attack.launch_projectile(A, BP_TORSO, src)
set_AI_busy(FALSE)
//Modifiers
/datum/modifier/aura/candy_purple //Healz
name = "candy_purple"
desc = "You feel somewhat gooey."
stacks = MODIFIER_STACK_FORBID
aura_max_distance = 5
/datum/modifier/aura/candy_purple/tick()
if(holder.stat == DEAD)
expire()
if(ishuman(holder)) // Robolimbs need this code sadly.
var/mob/living/carbon/human/H = holder
for(var/obj/item/organ/external/E in H.organs)
var/obj/item/organ/external/O = E
O.heal_damage(2, 2, 0, 1)
else
holder.adjustBruteLoss(-2)
holder.adjustFireLoss(-2)
holder.adjustToxLoss(-1)
/datum/modifier/aura/candy_orange //melee+
name = "candy orange"
desc = "You feel somewhat gooey."
stacks = MODIFIER_STACK_FORBID
aura_max_distance = 5
outgoing_melee_damage_percent = 1.5
/datum/modifier/aura/candy_yellow //speed
name = "candy yellow"
desc = "You feel somewhat gooey."
stacks = MODIFIER_STACK_FORBID
aura_max_distance = 5
slowdown = -1
/datum/modifier/aura/candy_blue //defense
name = "candy blue"
desc = "You feel somewhat gooey."
stacks = MODIFIER_STACK_FORBID
aura_max_distance = 5
incoming_damage_percent = 0.9

View File

@@ -0,0 +1,32 @@
/obj/item/weapon/gun/magic/firestaff/vrwizard
name = "vr staff"
desc = "A magical staff brimming with energy."
icon = 'icons/obj/wizard.dmi'
icon_state = "staffoffire"
item_state = "staff"
fire_sound = 'sound/weapons/emitter.ogg'
w_class = ITEMSIZE_HUGE
checks_antimagic = TRUE
max_charges = 10
charges = 0
recharge_rate = 2
charge_tick = 0
can_charge = TRUE
projectile_type = /obj/item/projectile/energy/homing_bolt/wizard
/obj/item/weapon/gun/magic/firestaff/vrwizard/fire
projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/fire
color = "#FF0000"
/obj/item/weapon/gun/magic/firestaff/vrwizard/lighting
projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/lighting
color = "#C1F20B"
/obj/item/weapon/gun/magic/firestaff/vrwizard/poison
projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/poison
color = "#003300"
/obj/item/weapon/gun/magic/firestaff/vrwizard/frost
projectile_type = /obj/item/projectile/energy/homing_bolt/wizard/frost
color = "#00CCFF"

View File

@@ -0,0 +1,12 @@
/obj/item/weapon/melee/cullingcane
name = "culling cane"
defend_chance = 15 // The base chance for the weapon to parry.
projectile_parry_chance = 15
sharp = TRUE
edge = TRUE
w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK
force = 35
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
can_cleave = TRUE
icon_state = "scythe0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -4588,6 +4588,7 @@
#include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_xeno.dm"
#include "modular_chomp\code\modules\clothing\clothing.dm"
#include "modular_chomp\code\modules\clothing\clothing_icons.dm"
#include "modular_chomp\code\modules\clothing\gateway\gateway.dm"
#include "modular_chomp\code\modules\clothing\spacesuits\rig\.behemoth.dm"
#include "modular_chomp\code\modules\clothing\spacesuits\rig\clockwork_ch.dm"
#include "modular_chomp\code\modules\clothing\spacesuits\rig\precursor.dm"
@@ -4666,6 +4667,9 @@
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\animal\spider.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\animal\space\alien.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\animal\space\mouse_army_ch.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\gateway\imperion.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\gateway\vistors.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\gateway\wizards.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\horror\Master.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\cultboss.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\humanoid\cultist_ch.dm"
@@ -4678,6 +4682,7 @@
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\drones\combat_drone.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\boss.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\hivebot.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\orginalAlts.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\precusor_hivebots.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\tank.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\combat.dm"
@@ -4686,12 +4691,15 @@
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\meteroid\metTypes.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\occult\constructs\construct.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\occult\constructs\juggernaut.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\slimess\feral.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\ashy.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\bigdragon.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\desert_planet_mobs.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\greatwolf.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\swoopie.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\wolf.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\gateway\candy.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\shadekin\shadekin.dm"
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_extra.dm"
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_tail.dm"
@@ -4708,6 +4716,7 @@
#include "modular_chomp\code\modules\projectiles\mob.dm"
#include "modular_chomp\code\modules\projectiles\clockwork\clockwork_guns_ch.dm"
#include "modular_chomp\code\modules\projectiles\guns\phase.dm"
#include "modular_chomp\code\modules\projectiles\guns\staffs.dm"
#include "modular_chomp\code\modules\reagents\machinery\dispenser\chem_synthesizer_ch.dm"
#include "modular_chomp\code\modules\reagents\reactions\instant\drinks.dm"
#include "modular_chomp\code\modules\reagents\reactions\instant\instant.dm"
@@ -4723,6 +4732,7 @@
#include "modular_chomp\code\modules\shieldgen\shield_gen.dm"
#include "modular_chomp\code\modules\vore\eating\exportpanel_ch.dm"
#include "modular_chomp\code\modules\vore\resizing\resize.dm"
#include "modular_chomp\code\modules\weapons\melee.dm"
#include "modular_chomp\code\modules\xenobio\machinery\monkey_processor.dm"
#include "modular_chomp\maps\overmap\space_pois\space_pois.dm"
// END_INCLUDE