mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-25 14:16:58 +01:00
Further Polishing (#7167)
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
name = "wizard hat"
|
||||
desc = "A pointy pixelated-looking hat, 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)
|
||||
armor = list(melee = 20, bullet = 20, laser = 60, energy = 60, bomb = 70, bio = 50, rad = 50)
|
||||
siemens_coefficient = 0.1
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
@@ -16,7 +16,7 @@
|
||||
name = "wizard robes"
|
||||
desc = "A silky robe with 0s and 1s flying off the seams."
|
||||
icon_state = "redwizard"
|
||||
armor = list(melee = 30, bullet = 30, laser = 65, energy = 65, bomb = 70, bio = 100, rad = 100)
|
||||
armor = list(melee = 20, bullet = 20, laser = 60, energy = 60, bomb = 70, bio = 50, rad = 50)
|
||||
siemens_coefficient = 0.1
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
@@ -30,7 +30,7 @@
|
||||
desc = "The hat holding the most attack and defense"
|
||||
icon_state = "redwizard"
|
||||
color = "#660066"
|
||||
armor = list(melee = 70, bullet = 70, laser = 40, energy = 40, bomb = 70, bio = 100, rad = 100)
|
||||
armor = list(melee = 70, bullet = 70, laser = 40, energy = 40, bomb = 90, bio = 70, rad = 70)
|
||||
siemens_coefficient = 0.1
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
@@ -43,7 +43,7 @@
|
||||
name = "wizard robes"
|
||||
desc = "Robes holding the most attack and defense."
|
||||
icon_state = "psyamp"
|
||||
armor = list(melee = 70, bullet = 70, laser = 40, energy = 40, bomb = 70, bio = 100, rad = 100)
|
||||
armor = list(melee = 70, bullet = 70, laser = 40, energy = 40, bomb = 90, bio = 70, rad = 70)
|
||||
siemens_coefficient = 0.1
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
value = CATALOGUER_REWARD_HARD
|
||||
|
||||
/mob/living/simple_mob/vr/alchemistbee
|
||||
name = "vr creation"
|
||||
name = "large hardlight creature"
|
||||
desc = "A digital creature"
|
||||
icon = 'modular_chomp/icons/mob/alchemistbee.dmi'
|
||||
icon_state = "beeliving"
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
icon_state = "imperion"
|
||||
icon_living = "imperion"
|
||||
desc = "A strange precursor mecha"
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
maxHealth = 300
|
||||
health = 300
|
||||
movement_cooldown = -1
|
||||
unsuitable_atoms_damage = 0
|
||||
projectiletype = /obj/item/projectile/energy/gaussrifle
|
||||
@@ -20,6 +20,8 @@
|
||||
damage_fatigue_mult = 0
|
||||
has_repair_droid = TRUE
|
||||
|
||||
size_multiplier = 2.50
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
|
||||
ranged_attack_delay = 1.5 SECONDS
|
||||
@@ -85,6 +87,8 @@
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
|
||||
size_multiplier = 2.50
|
||||
|
||||
wreckage = null
|
||||
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase2
|
||||
|
||||
@@ -117,7 +121,7 @@
|
||||
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/launch_rockets(atom/target)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/dart(get_turf(src))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/excavate(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase1/proc/launch_microsingularity(atom/target)
|
||||
@@ -131,6 +135,7 @@
|
||||
alpha = 215
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
size_multiplier = 2.25
|
||||
|
||||
wreckage = null
|
||||
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase3
|
||||
@@ -163,13 +168,14 @@
|
||||
melee_attack_delay = 2 SECOND
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/meleeimperion
|
||||
size_multiplier = 2.00
|
||||
|
||||
wreckage = null
|
||||
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase4
|
||||
|
||||
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
|
||||
special_attack_cooldown = 2 SECONDS
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/imperion/phase3/do_special_attack(atom/A)
|
||||
// Teleport attack.
|
||||
@@ -230,6 +236,8 @@
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
|
||||
size_multiplier = 1.75
|
||||
|
||||
wreckage = null
|
||||
pilot_type = /mob/living/simple_mob/mechanical/mecha/imperion/phase5
|
||||
|
||||
@@ -327,6 +335,8 @@
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
melee_attack_delay = 1 SECOND
|
||||
|
||||
size_multiplier = 1.50
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
|
||||
|
||||
wreckage = null
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
|
||||
faction = "vr"
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
maxHealth = 40
|
||||
health = 40
|
||||
movement_cooldown = 1
|
||||
unsuitable_atoms_damage = 0
|
||||
projectiletype = /obj/item/projectile/energy/homing_bolt/wizard
|
||||
@@ -39,28 +39,28 @@
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vr/firewiz
|
||||
name = "vr creation"
|
||||
name = "hardlight creation fire"
|
||||
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"
|
||||
name = "hardlight creation poison"
|
||||
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"
|
||||
name = "hardlight creation lighting"
|
||||
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"
|
||||
name = "hardlight creation frost"
|
||||
icon_state = "bookbat_blue"
|
||||
icon_living = "bookbat_blue"
|
||||
icon_dead = "bookbat_blue_dead"
|
||||
@@ -82,8 +82,8 @@
|
||||
projectiletype = null
|
||||
melee_attack_delay = 0 SECOND
|
||||
|
||||
melee_damage_lower = 6
|
||||
melee_damage_upper = 6
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 8
|
||||
|
||||
/mob/living/simple_mob/vr/glitch/apply_melee_effects(var/atom/A)
|
||||
if(isliving(A))
|
||||
@@ -91,18 +91,18 @@
|
||||
L.add_modifier(/datum/modifier/digitizing, 60 SECONDS)
|
||||
|
||||
/mob/living/simple_mob/vr/doomknight
|
||||
name = "vr creation"
|
||||
name = "hardlight creation doomknight"
|
||||
projectiletype = null
|
||||
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
maxHealth = 70
|
||||
health = 70
|
||||
movement_cooldown = 4
|
||||
unsuitable_atoms_damage = 0
|
||||
projectiletype = null
|
||||
melee_attack_delay = 8 SECOND
|
||||
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
|
||||
/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))
|
||||
@@ -113,6 +113,7 @@
|
||||
//Spells
|
||||
/obj/item/projectile/energy/homing_bolt/wizard
|
||||
damage = 15
|
||||
speed = 1.0
|
||||
|
||||
/obj/item/projectile/energy/homing_bolt/wizard/fire
|
||||
modifier_type_to_apply = /datum/modifier/wizfire
|
||||
@@ -141,7 +142,7 @@
|
||||
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
|
||||
var/damage_per_tick = 1.5
|
||||
bleeding_rate_percent = 0.7
|
||||
|
||||
/datum/modifier/wizfire/tick()
|
||||
@@ -155,7 +156,7 @@
|
||||
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
|
||||
damage_per_tick = 1.0
|
||||
incoming_fire_damage_percent = 1.1
|
||||
|
||||
/datum/modifier/wizpoison
|
||||
|
||||
@@ -6,17 +6,11 @@
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 22
|
||||
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.5
|
||||
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 = 12 SECOND
|
||||
melee_attack_delay = 4 SECOND
|
||||
ranged_attack_delay = 1.5 SECONDS
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 7
|
||||
@@ -75,190 +69,53 @@
|
||||
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)
|
||||
new /mob/living/simple_mob/vore/demonAI (src.loc)
|
||||
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/electric_defense(atom/target)
|
||||
set waitfor = FALSE
|
||||
set_AI_busy(TRUE)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/fireball(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
// 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"
|
||||
/mob/living/simple_mob/humanoid/cultist/magus/rift/proc/launch_rockets(atom/target)
|
||||
if(!target)
|
||||
to_chat(src, span("warning", "There's nothing to teleport to."))
|
||||
return FALSE
|
||||
|
||||
// Did we make it?
|
||||
if(!(src in destination))
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",target)
|
||||
return FALSE
|
||||
var/list/nearby_things = range(1, target)
|
||||
var/list/valid_turfs = list()
|
||||
|
||||
var/overshoot = TRUE
|
||||
|
||||
// Test if something is at destination.
|
||||
for(var/mob/living/L in destination)
|
||||
if(L == src)
|
||||
// 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)
|
||||
|
||||
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)
|
||||
if(!(valid_turfs.len))
|
||||
to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
|
||||
return FALSE
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
icon_state = "bloodout"
|
||||
flick("phase_shift2",target)
|
||||
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/smoke_spread
|
||||
s1.set_up(5, 1, T)
|
||||
var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/smoke_spread
|
||||
s2.set_up(5, 1, target_turf)
|
||||
|
||||
|
||||
T.visible_message(span("notice", "\The [src] vanishes!"))
|
||||
s1.start()
|
||||
|
||||
/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
|
||||
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()
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/riftwallers
|
||||
name = "manhack delivery grenade"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//Cataloguer things
|
||||
//Cataloguer things
|
||||
/datum/category_item/catalogue/fauna/livingcandy
|
||||
name = "Living Candy"
|
||||
desc = "Upon investigation of the strange creatures, a mix of \
|
||||
@@ -23,15 +23,17 @@
|
||||
|
||||
faction = "candy"
|
||||
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
maxHealth = 20
|
||||
health = 20
|
||||
movement_cooldown = 2
|
||||
melee_attack_delay = 3 SECOND
|
||||
melee_attack_delay = 2 SECOND
|
||||
can_be_drop_prey = TRUE
|
||||
unsuitable_atoms_damage = 0
|
||||
melee_miss_chance = 0
|
||||
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 15
|
||||
damage_fatigue_mult = 0 //Candy creatures. They will fight to the bitter end unaffected by their wounds. Also they have 25 health, do they really need slowdown?
|
||||
|
||||
/mob/living/simple_mob/vore/candy
|
||||
vore_active = 1
|
||||
@@ -206,9 +208,6 @@
|
||||
icon_living = "blue"
|
||||
icon_dead = "blue_dead"
|
||||
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
|
||||
melee_damage_lower = 7
|
||||
melee_damage_upper = 12
|
||||
|
||||
@@ -230,11 +229,11 @@
|
||||
icon_living = "red"
|
||||
icon_dead = "red_dead"
|
||||
|
||||
maxHealth = 82
|
||||
health = 82
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 2
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 25
|
||||
|
||||
/mob/living/simple_mob/vore/candy/redcabold/apply_melee_effects(atom/A)
|
||||
..()
|
||||
@@ -259,9 +258,6 @@
|
||||
icon_living = "yellow"
|
||||
icon_dead = "yellow_dead"
|
||||
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 15
|
||||
|
||||
@@ -283,9 +279,6 @@
|
||||
icon_living = "orange"
|
||||
icon_dead = "orange_dead"
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
|
||||
melee_damage_lower = 7
|
||||
melee_damage_upper = 12
|
||||
|
||||
@@ -307,9 +300,6 @@
|
||||
icon_living = "purple"
|
||||
icon_dead = "purple_dead"
|
||||
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
|
||||
melee_damage_lower = 7
|
||||
melee_damage_upper = 12
|
||||
|
||||
@@ -324,6 +314,25 @@
|
||||
continue
|
||||
L.add_modifier(/datum/modifier/aura/candy_purple, null, src)
|
||||
|
||||
/mob/living/simple_mob/vore/candy/greencabold //Nyoooooom
|
||||
name = "gummy kobold"
|
||||
desc = "A creature made of candy"
|
||||
icon_state = "green"
|
||||
icon_living = "green"
|
||||
icon_dead = "green_dead"
|
||||
|
||||
movement_cooldown = -2
|
||||
|
||||
melee_attack_delay = 1 SECOND
|
||||
melee_damage_lower = 7
|
||||
melee_damage_upper = 12
|
||||
|
||||
/mob/living/simple_mob/vore/candy/greencabold/apply_melee_effects(var/atom/A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
L.add_modifier(/datum/modifier/deep_wounds, 15 SECONDS)
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/candy/marshmellowserpent //Long range grab
|
||||
name = "marshmellow serpent"
|
||||
desc = "A creature made of candy"
|
||||
@@ -333,9 +342,6 @@
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
|
||||
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
|
||||
melee_damage_lower = 4
|
||||
melee_damage_upper = 8
|
||||
|
||||
@@ -405,4 +411,313 @@
|
||||
desc = "You feel somewhat gooey."
|
||||
stacks = MODIFIER_STACK_FORBID
|
||||
aura_max_distance = 5
|
||||
incoming_damage_percent = 0.9
|
||||
incoming_damage_percent = 0.9
|
||||
|
||||
//Boss Fight
|
||||
/mob/living/simple_mob/vore/candy/ouroboros
|
||||
name = "candy critter"
|
||||
desc = "A creature made of candy"
|
||||
icon = 'modular_chomp/icons/mob/candy.dmi'
|
||||
icon_state = "ouroboros"
|
||||
icon_living = "ouroboros"
|
||||
icon_dead = "slainouroboros"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/livingcandy)
|
||||
|
||||
mob_class = MOB_CLASS_ABERRATION
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee
|
||||
|
||||
faction = "candy"
|
||||
icon_state = "ouroboros"
|
||||
icon_living = "ouroboros"
|
||||
icon_dead = "slainouroboros"
|
||||
|
||||
maxHealth = 300
|
||||
health = 300
|
||||
armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 20, bio = 100, rad = 100) //armor cause boss
|
||||
movement_cooldown = 0
|
||||
melee_attack_delay = 1 SECOND
|
||||
can_be_drop_prey = TRUE
|
||||
unsuitable_atoms_damage = 0
|
||||
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 35
|
||||
var/grenade_type = /obj/item/weapon/grenade/concussion
|
||||
var/grenade_timer = 1
|
||||
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 15
|
||||
special_attack_cooldown = 7 SECONDS
|
||||
|
||||
/mob/living/simple_mob/vore/candy/ouroboros/bullet_act(var/obj/item/projectile/Proj)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
|
||||
/mob/living/simple_mob/vore/candy/ouroboros/do_special_attack(atom/A)
|
||||
switch(a_intent)
|
||||
if(I_GRAB)
|
||||
summon_combo(A)
|
||||
if(I_HURT)
|
||||
barrage_combo(A)
|
||||
if(I_DISARM)
|
||||
debuff_combo(A)
|
||||
|
||||
/mob/living/simple_mob/vore/candy/ouroboros/proc/summon_combo(atom/target)
|
||||
visible_message(span("warning", "\The [src] calls for help!"))
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
sleep(2.0 SECONDS)
|
||||
visible_message(span("warning", "\The [src] calls for help!"))
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
sleep(1.5 SECONDS)
|
||||
visible_message(span("warning", "\The [src] calls for help!"))
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
sleep(1.0 SECONDS)
|
||||
visible_message(span("warning", "\The [src] calls for help!"))
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
visible_message(span("warning", "\The [src] begins to heal!"))
|
||||
sleep(3.5 SECONDS)
|
||||
adjustBruteLoss(-35)
|
||||
adjustFireLoss(-35)
|
||||
adjustToxLoss(-35)
|
||||
adjustOxyLoss(-35)
|
||||
adjustCloneLoss(-35)
|
||||
|
||||
/mob/living/simple_mob/vore/candy/ouroboros/proc/barrage_combo(atom/target)
|
||||
if(prob(50))
|
||||
sleep(0.5 SECONDS)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/arc/fragmentation/cherrybomb(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
if(prob(50))
|
||||
sleep(0.5 SECONDS)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
else
|
||||
sleep(0.5 SECONDS)
|
||||
var/obj/item/projectile/V = new /obj/item/projectile/bullet/cmblast(get_turf(src))
|
||||
V.launch_projectile(target, BP_TORSO, src)
|
||||
else
|
||||
sleep(0.5 SECONDS)
|
||||
var/obj/item/projectile/A = new /obj/item/projectile/bullet/cmblast(get_turf(src))
|
||||
A.launch_projectile(target, BP_TORSO, src)
|
||||
if(prob(50))
|
||||
sleep(0.5 SECONDS)
|
||||
var/obj/item/projectile/B = new /obj/item/projectile/arc/fragmentation/cherrybomb(get_turf(src))
|
||||
B.launch_projectile(target, BP_TORSO, src)
|
||||
else
|
||||
sleep(0.5 SECONDS)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
|
||||
/mob/living/simple_mob/vore/candy/ouroboros/proc/debuff_combo(atom/target)
|
||||
visible_message(span("warning", "\The [src] prepares to let out a thunderous roar!"))
|
||||
sleep(1.5 SECONDS)
|
||||
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
|
||||
if(prob(25))
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
else
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/cmblast(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
sleep(0.5)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
/datum/ai_holder/simple_mob/intentional/ouroboros
|
||||
unconscious_vore = TRUE
|
||||
handle_corpse = TRUE
|
||||
vision_range = 13
|
||||
respect_alpha = FALSE
|
||||
lose_target_timeout = 60 SECONDS
|
||||
intelligence_level = AI_SMART
|
||||
|
||||
/datum/ai_holder/simple_mob/intentional/ouroboros/proc/update_health()
|
||||
if(prob(35))
|
||||
holder.a_intent = I_GRAB
|
||||
if(prob(35))
|
||||
holder.a_intent = I_DISARM
|
||||
else
|
||||
holder.a_intent = I_HURT
|
||||
|
||||
|
||||
/obj/random/mob/candycritter
|
||||
name = "Random Gummy Candy Critter"
|
||||
desc = "This is a random candy critter."
|
||||
overwrite_hostility = 1
|
||||
|
||||
mob_faction = "candy"
|
||||
|
||||
/obj/random/mob/candycritter/item_to_spawn()
|
||||
return pick(prob(40);/mob/living/simple_mob/vore/candy/purplecabold,
|
||||
prob(40);/mob/living/simple_mob/vore/candy/bluecabold,
|
||||
prob(40);/mob/living/simple_mob/vore/candy/greencabold,
|
||||
prob(40);/mob/living/simple_mob/vore/candy/yellowcabold,
|
||||
prob(40);/mob/living/simple_mob/vore/candy/orangecabold,
|
||||
prob(40);/mob/living/simple_mob/vore/candy/redcabold,
|
||||
prob(40);/mob/living/simple_mob/vore/candy/peppermint
|
||||
)
|
||||
|
||||
/obj/item/projectile/bullet/cmblast
|
||||
use_submunitions = 1
|
||||
only_submunitions = 1
|
||||
range = 0
|
||||
embed_chance = 0
|
||||
submunition_spread_max = 1800
|
||||
submunition_spread_min = 500
|
||||
submunitions = list(/obj/item/projectile/energy/chocosphere = 12)
|
||||
|
||||
/obj/item/projectile/energy/chocosphere
|
||||
name = "choclate sphere"
|
||||
icon = 'modular_chomp/icons/mob/candy.dmi'
|
||||
icon_state = "choclate_sphere"
|
||||
damage = 20
|
||||
armor_penetration = 30
|
||||
damage_type = BURN
|
||||
check_armour = "energy"
|
||||
speed = 4.0
|
||||
flash_strength = 0
|
||||
modifier_type_to_apply = /datum/modifier/chilled
|
||||
modifier_duration = 6 SECONDS
|
||||
|
||||
/obj/item/projectile/energy/canearrow
|
||||
name = "candy cane arrow"
|
||||
icon = 'modular_chomp/icons/mob/candy.dmi'
|
||||
icon_state = "choclate_sphere"
|
||||
damage = 15
|
||||
armor_penetration = 40
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
speed = 2.5
|
||||
flash_strength = 0
|
||||
modifier_type_to_apply = /datum/modifier/grievous_wounds
|
||||
modifier_duration = 12 SECONDS
|
||||
|
||||
/obj/item/projectile/arc/fragmentation/cherrybomb
|
||||
name = "cherry bomb"
|
||||
icon = 'modular_chomp/icons/mob/candy.dmi'
|
||||
icon_state = "cherry_bomb"
|
||||
fragment_amount = 3
|
||||
spread_range = 7
|
||||
speed = 1.5
|
||||
fragment_types = list(
|
||||
/obj/item/projectile/bullet/cherrypit
|
||||
)
|
||||
|
||||
/obj/item/projectile/bullet/cherrypit
|
||||
name = "cherry bomb"
|
||||
icon = 'modular_chomp/icons/mob/candy.dmi'
|
||||
icon_state = "cherry_pit"
|
||||
damage = 25
|
||||
armor_penetration = 30
|
||||
|
||||
//more critters
|
||||
//antimelee
|
||||
|
||||
/mob/living/simple_mob/vore/candy/peppermint
|
||||
name = "peppermint turtle"
|
||||
desc = "A creature made of candy, it's peppermint looking shell seeming diffcult to get a good hit on, but fragile if well struck."
|
||||
icon = 'modular_chomp/icons/mob/candy.dmi'
|
||||
icon_state = "peppermint"
|
||||
icon_living = "peppermint"
|
||||
icon_dead = "peppermint_dead"
|
||||
|
||||
faction = "candy"
|
||||
|
||||
maxHealth = 10
|
||||
health = 10
|
||||
|
||||
/mob/living/simple_mob/vore/candy/peppermint/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(O.force)
|
||||
if(prob(80))
|
||||
visible_message("<span class='danger'>\The [src] deflects \the [O] with its shell!</span>")
|
||||
if(user)
|
||||
ai_holder.react_to_attack(user)
|
||||
return
|
||||
else
|
||||
..()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>This weapon is ineffective, it does no damage.</span>")
|
||||
visible_message("<span class='warning'>\The [user] gently taps [src] with \the [O].</span>")
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/candy/worm
|
||||
name = "hardcandy worm"
|
||||
desc = "A creature made of candy."
|
||||
icon = 'modular_chomp/icons/mob/candy.dmi'
|
||||
icon_state = "worm"
|
||||
icon_living = "worm"
|
||||
icon_dead = "worm_dead"
|
||||
|
||||
faction = "candy"
|
||||
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
|
||||
/mob/living/simple_mob/vore/candy/worm/death()
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
new /obj/random/mob/candycritter (src.loc)
|
||||
|
||||
/mob/living/simple_mob/vore/candy/worm/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/worm/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/vore/candy/worm/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!")
|
||||
|
||||
/mob/living/simple_mob/vore/candy/peppermint/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/peppermint/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/vore/candy/peppermint/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!")
|
||||
|
||||
v
|
||||
@@ -1,12 +1,12 @@
|
||||
/obj/item/weapon/gun/magic/firestaff/vrwizard
|
||||
name = "vr staff"
|
||||
name = "hardlight 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
|
||||
checks_antimagic = FALSE
|
||||
max_charges = 10
|
||||
charges = 0
|
||||
recharge_rate = 2
|
||||
@@ -38,5 +38,4 @@
|
||||
/obj/item/weapon/gun/magic/firestaff/vrwizard/nuclear
|
||||
description_info = "A high powered staff that burns through energy quickly but unleashes high energy bolts."
|
||||
projectile_type = /obj/item/projectile/energy/nuclearblast
|
||||
color = "#660066"
|
||||
max_charges = 4
|
||||
color = "#660066"
|
||||
Reference in New Issue
Block a user