Merge branch 'master' into craft

This commit is contained in:
FluffMedic
2023-06-20 15:26:56 -04:00
committed by GitHub
1233 changed files with 35670 additions and 14297 deletions
@@ -0,0 +1,50 @@
//There is already a station file, but feels wrong to put zaddat balancing changes with the restriction file, and feels wrong to lump them in with a modular station_vr so hello station_ch file
/datum/species/zaddat
toxins_mod = 0.5 //toxins rarely come into play, and zaddat just has negatives. Along with their parasite letting them survive in their polluted planet, this seems reasonable.
//So both of this are based off Fennec foxes I belivive. Those are desert critters, giving them more warm focused levels. And for variety giving them minor brute weakness and minor burn resistant
//I also want to make a dig because fennec foxes actually make burrows and such, but I can't figure out how to do it in a way that is both flavorful but not abuseable
/datum/species/hi_zoxxen //zorrens get wierd chemistry because of their past of expirementing on themselves. Check the cataloguer for deathclaws
chemOD_threshold = 0.75
radiation_mod = 0.5
brute_mod = 1.1
burn_mod = 0.9
cold_level_1 = 270 //Default 260 - Lower is better
cold_level_2 = 210 //Default 200
cold_level_3 = 120 //Default 120
breath_cold_level_1 = 250 //Default 240 - Lower is better
breath_cold_level_2 = 190 //Default 180
breath_cold_level_3 = 100 //Default 100
heat_level_1 = 400 //Default 360 - Higher is better
heat_level_2 = 460 //Default 400
heat_level_3 = 1080 //Default 1000
breath_heat_level_1 = 430 //Default 380 - Higher is better
breath_heat_level_2 = 510 //Default 450
breath_heat_level_3 = 1200 //Default 1250
/datum/species/fl_zorren
item_slowdown_mod = 1.2
slowdown = -0.2
brute_mod = 1.1
burn_mod = 0.9
cold_level_1 = 270 //Default 260 - Lower is better
cold_level_2 = 210 //Default 200
cold_level_3 = 120 //Default 120
breath_cold_level_1 = 250 //Default 240 - Lower is better
breath_cold_level_2 = 190 //Default 180
breath_cold_level_3 = 100 //Default 100
heat_level_1 = 400 //Default 360 - Higher is better
heat_level_2 = 460 //Default 400
heat_level_3 = 1080 //Default 1000
breath_heat_level_1 = 430 //Default 380 - Higher is better
breath_heat_level_2 = 510 //Default 450
breath_heat_level_3 = 1200 //Default 1250
@@ -11,6 +11,8 @@
var/species_sounds = "None" // By default, we have nothing.
var/death_sound_override = null
var/virtual_reality_mob = FALSE // gross boolean for keeping VR mobs in VR
var/datum/looping_sound/mob/on_fire/firesoundloop
// var/datum/looping_sound/mob/stunned/stunnedloop
/* // Not sure if needed, screams aren't a carbon thing rn.
var/scream_sound = null
var/female_scream_sound = null
@@ -22,11 +24,23 @@
. = ..()
deaf_loop = new(list(src), FALSE)
firesoundloop = new(list(src), FALSE)
// stunnedloop = new(list(src), FALSE)
if(firesoundloop) // Partly safety, partly so we can have different probs for randomization
if(prob(40)) // Randomize our end_sound. Can't really do this easily in looping_sound without some work
if(prob(30))
firesoundloop.end_sound = 'sound/effects/mob_effects/on_fire/fire_extinguish2.ogg'
else if(prob(20))
firesoundloop.end_sound = 'sound/effects/mob_effects/on_fire/fire_extinguish3.ogg'
else
firesoundloop.end_sound = 'sound/effects/mob_effects/on_fire/fire_extinguish4.ogg'
/mob/living/Destroy()
. = ..()
QDEL_NULL(deaf_loop)
QDEL_NULL(firesoundloop)
// QDEL_NULL(stunnedloop)
/mob/living/proc/vs_animate(var/belly_to_animate)
return
@@ -29,7 +29,8 @@
vore_bump_chance = 20
size_multiplier = 1.10
faction = "demon"
damage_fatigue_mult = 0
damage_fatigue_mult = 0.5 // We don't want to give them a flat, huge boost to attack speed, but at the same time, make them fight harder the closer they are to dying.
injury_enrages = TRUE
armor_soak = list(
"melee" = 5,
@@ -371,4 +372,4 @@
spawn_mob_type = /mob/living/simple_mob/vore/demonAI
/obj/item/capture_crystal/wendigo
spawn_mob_type = /mob/living/simple_mob/vore/demonAI/wendigo
spawn_mob_type = /mob/living/simple_mob/vore/demonAI/wendigo
@@ -33,6 +33,7 @@
projectile_dispersion = 8
projectile_accuracy = -20
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100) // Simple mob immunuties plus base Eclipse foe stuff
ranged_cooldown = 4
can_be_drop_prey = FALSE //CHOMP Add
pass_flags = PASSTABLE //mostly for the melee mobs.
@@ -57,7 +58,7 @@
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse/ranged
// Grenade special attack vars
var/grenade_type = /obj/item/weapon/grenade/shooter/energy/laser
var/grenade_type = /obj/item/weapon/grenade/shooter/rubber
var/grenade_timer = 50 //CHOMPEdit
special_attack_cooldown = 45 SECONDS
special_attack_min_range = 2
@@ -327,7 +328,7 @@
icon_state = "eclipse_shotwuff"
icon_living = "eclipse_shotwuff"
projectiletype = /obj/item/projectile/bullet/pellet/shotgun/eclipse
projectiletype = /obj/item/projectile/bullet/pellet/shotgun
ranged_attack_delay = 0.5 SECONDS
@@ -357,7 +358,9 @@
attack_armor_pen = 25
melee_damage_lower = 20
melee_damage_upper = 25
melee_damage_upper = 20
melee_attack_delay = 4
projectiletype = null
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse
@@ -367,42 +370,6 @@
var/poison_type = "hyperzine"
/obj/item/projectile/energy/blob/moth
damage = 20
armor_penetration = 25
my_chems = list("fuel", "mold")
flammability = 0.25
modifier_type_to_apply = /datum/modifier/fire
modifier_duration = 6 SECONDS
color = "#38b9ff"
/obj/item/projectile/bullet/pistol/medium/ap/eclipse
armor_penetration = 25
ricochets = 1
ricochets_max = 5
ricochet_chance = 100
/obj/item/projectile/energy/electrode/eclipse
damage = 30
damage_type = BURN
color = "#38b9ff"
/obj/item/projectile/bullet/pellet/shotgun/eclipse
pellets = 8
range_step = 1
spread_step = 1
/obj/item/projectile/beam/sniper/eclipse
armor_penetration = 50
damage = 30
/obj/item/projectile/energy/declone/burn
damage = 20
armor_penetration = 25
nodamage = 0
//////////////////////////////////////////////
//Boss mob time. Or somewhat bosses anyway.
/////////////////////////////////////////////
@@ -412,12 +379,11 @@
health = 150
maxHealth = 150
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
projectiletype = /obj/item/projectile/energy/flash
projectiletype = null //Flashing was to much for this mob.
movement_cooldown = -1
melee_damage_lower = 20
melee_damage_upper = 35
melee_damage_upper = 20
attack_armor_pen = 20
reload_max = 5
icon_state = "eclipse_hound"
icon_living = "eclipse_hound"
size_multiplier = 1.25
@@ -425,19 +391,20 @@
var/poison_per_bite = 4
var/poison_type = "stoxin"
melee_attack_delay = 4
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel
name = "Lunar Eclipse Armadillo"
health = 150
maxHealth = 150
melee_damage_lower = 15
melee_damage_upper = 25
melee_damage_lower = 10
melee_damage_upper = 10
attack_armor_pen = 50
reload_max = 1
icon_state = "eclipse_wheel"
icon_living = "eclipse_wheel"
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
projectiletype = /obj/item/projectile/beam/energy_net
projectiletype = null //the net idea was fun but seemed to painful.
movement_cooldown = -0.5
var/cloaked_alpha = 60 // Lower = Harder to see.
@@ -544,10 +511,10 @@
/mob/living/simple_mob/humanoid/eclipse/lunar/pummler
name = "Lunar Eclipse Pummeler"
projectiletype = /obj/item/projectile/bullet/shotgun/ion/eclipse
projectiletype = /obj/item/projectile/bullet/shotgun/ion
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
melee_damage_lower = 10
melee_damage_upper = 30
melee_damage_upper = 10
attack_armor_pen = 30
movement_cooldown = 0
icon_state = "eclipse_pummler"
@@ -583,9 +550,4 @@
/mob/living/simple_mob/humanoid/eclipse/lunar/pummler/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel a small shock rushing through your veins.</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
/obj/item/projectile/bullet/shotgun/ion/eclipse
damage = 25
armor_penetration = 30
L.reagents.add_reagent(poison_type, poison_per_bite)
@@ -18,11 +18,12 @@
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
var/grenade_type = /obj/item/weapon/grenade/shooter/energy/tesla
var/grenade_timer = 10
var/grenade_type2 = /obj/item/weapon/grenade/spawnboss/hivebot
size_multiplier = 1.75
shock_resist = 3
water_resist = 3
armor = list(melee = 0, bullet = 40, laser = 40, energy = 40, bomb = 40, bio = 100, rad = 100)
armor = list(melee = -50, bullet = 40, laser = 40, energy = 40, bomb = 40, bio = 100, rad = 100)
armor_soak = list(
"melee" = 0,
@@ -34,19 +35,19 @@
"rad" = 0
)
loot_list = list(/obj/item/clothing/suit/armor/alien = 20,
/obj/item/clothing/suit/armor/alien/tank = 20,
/obj/item/prop/alien/junk = 20,
/obj/item/prop/alien/junk = 20,
/obj/item/prop/alien/junk = 20,
/obj/item/prop/alien/junk = 20,
/obj/item/prop/alien/junk = 20,
/obj/item/weapon/gun/energy/alien = 20,
/obj/item/weapon/gun/energy/alien = 20,
/obj/random/tool/alien = 20,
/obj/random/tool/alien = 20,
/obj/item/weapon/cell/device/weapon/recharge/alien/omni = 20,
/obj/item/weapon/cell/device/weapon/recharge/alien/omni = 20
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
)
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/apply_melee_effects(atom/A)
@@ -66,8 +67,9 @@
launch_microsingularity(A)
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/electric_defense(atom/target)
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_microsingularity(atom/target)
set waitfor = FALSE
visible_message(span("warning", "\The [src] drops a ticking time bomb!"))
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
if(istype(G))
@@ -77,36 +79,54 @@
set_AI_busy(FALSE)
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_microsingularity(atom/target)
set waitfor = FALSE
// Telegraph our next move.
Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
visible_message(span("warning", "\The [src] deploys a missile rack!"))
playsound(src, 'sound/effects/turret/move1.wav', 50, 1)
sleep(0.5 SECONDS)
for(var/i = 1 to 4)
if(target) // Might get deleted in the meantime.
var/turf/T = get_turf(target)
if(T)
visible_message(span("warning", "\The [src] fires a rocket into the air!"))
playsound(src, 'sound/weapons/rpg.ogg', 70, 1)
face_atom(T)
var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc)
rocket.old_style_target(T, src)
rocket.fire()
sleep(1 SECOND)
visible_message(span("warning", "\The [src] retracts the missile rack."))
playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
/mob/living/simple_mob/mechanical/hivebot/precusor/chrono/proc/launch_rockets(atom/target)
set waitfor = FALSE
visible_message(span("warning", "\The [src] creates weak looking hivebots!"))
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/hivebot/precusor/chrono/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()
sphere.fire()
//Screw it scuffed way
/obj/item/weapon/grenade/spawnboss
desc = "It is set to detonate in 5 seconds. It will unleash an unspecified anomaly into the vicinity."
name = "delivery grenade"
icon = 'icons/obj/grenade.dmi'
icon_state = "delivery"
item_state = "flashbang"
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4)
var/banglet = 0
var/spawner_type = null // must be an object path
var/deliveryamt = 1 // amount of type to deliver
/obj/item/weapon/grenade/spawnergrenade/detonate()
if(spawner_type && deliveryamt)
// Make a quick flash
var/turf/T = get_turf(src)
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
for(var/i=1, i<=deliveryamt, i++)
var/atom/movable/x = new spawner_type(T)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(x, pick(NORTH,SOUTH,EAST,WEST))
qdel(src)
return
/obj/item/weapon/grenade/spawnboss/hivebot
spawner_type = /mob/living/simple_mob/mechanical/hivebot/swarm
deliveryamt = 3
@@ -6,14 +6,18 @@
icon_state = "precursorhive"
icon_living = "precursorhive"
attacktext = list("prodded")
maxHealth = 5 LASERS_TO_KILL // 150 health
health = 5 LASERS_TO_KILL
maxHealth = 3 LASERS_TO_KILL // 150 health
health = 3 LASERS_TO_KILL
movement_cooldown = 4
melee_damage_lower = 15
melee_damage_upper = 15
var/obj/item/shield_projector/shields = null
loot_list = list(/obj/item/prop/alien/junk = 20,
/obj/item/prop/alien/junk = 20
)
/mob/living/simple_mob/mechanical/hivebot/precusor/Initialize(mapload)
shields = new /obj/item/shield_projector/rectangle/automatic/hivebot_drone(src)
return ..()
@@ -1,20 +1,26 @@
/mob/living/simple_mob/mechanical/mecha/combat/phazon
projectiletype = /obj/item/projectile/bullet/magnetic/fuelrod
/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced
name = "Advanced phazon"
movement_cooldown = 1
wreckage = /obj/structure/loot_pile/mecha/phazon
color = "#ffffff"
health = 500
maxHealth = 500
evasion = 30
evasion = 10
special_attack_min_range = 1
special_attack_max_range = 9
special_attack_cooldown = 15 SECONDS
special_attack_cooldown = 30 SECONDS
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
size_multiplier = 1.25
shock_resist = 0.9
shock_resist = 0.5
ranged_attack_delay = 1 SECONDS
projectilesound = 'sound/weapons/gauss_shoot.ogg'
damage_fatigue_mult = 0
projectiletype = /obj/item/projectile/bullet/rifle/a545/ap
@@ -37,7 +43,7 @@
playsound(src, 'sound/effects/turret/move1.wav', 50, 1)
sleep(0.5 SECONDS)
for(var/i = 1 to 5)
for(var/i = 1 to 2)
if(target) // Might get deleted in the meantime.
var/turf/T = get_turf(target)
if(T)
@@ -59,7 +65,7 @@
/obj/item/projectile/arc/explosive_rocket/big/on_impact(turf/T)
new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently.
explosion(T, 1, 2, 3, adminlog = FALSE)
explosion(T, 1, 1, 1, adminlog = FALSE)
/mob/living/simple_mob/mechanical/mecha/combat/phazon/advanced/proc/launch_rockets(atom/target)
set waitfor = FALSE
@@ -70,7 +76,7 @@
playsound(src, 'sound/effects/turret/move1.wav', 50, 1)
sleep(0.5 SECONDS)
for(var/i = 1 to 3)
for(var/i = 1 to 2)
if(target) // Might get deleted in the meantime.
var/turf/T = get_turf(target)
if(T)
@@ -125,4 +131,4 @@
/obj/item/projectile/arc/explosive_rocket/spread/on_impact(turf/T)
new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently.
explosion(T, 0, 0, 5, adminlog = FALSE)
explosion(T, 0, 0, 2, adminlog = FALSE)
@@ -0,0 +1,8 @@
/datum/sprite_accessory/marking/vox/vox_alt_eyes
icon = 'modular_chomp/icons/mob/human_races/markings_vox.dmi'
/datum/sprite_accessory/marking/vox/vox_underbeak
name = "Vox Underbeak"
icon = 'modular_chomp/icons/mob/human_races/markings_vox.dmi'
icon_state = "vox_underbeak"
body_parts = list(BP_HEAD)
@@ -117,6 +117,9 @@
icon_state = "fox"
extra_overlay = "fox_markings"
extra_overlay2 = "fox_markings2"
can_loaf = TRUE
icon_loaf = 'icons/mob/vore/taurs_ch_loaf.dmi'
loaf_offset = 4
/datum/sprite_accessory/tail/taur/ch/sectdrone
name = "Sect Drone (Taur)"