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

View File

@@ -0,0 +1,161 @@
/obj/item/weapon/flame/lighter/safesmzippo
name = "Supermatter Zippo"
desc = "State of the Art Supermatter Lighter."
description_fluff = "A zippo style lighter with a tiny supermatter sliver held by a hardlight shield. When lighting a cigar, make sure to hover the tip near the sliver, not against it!"
icon = 'icons/obj/zippo_ch.dmi'
icon_state = "SMzippo"
item_state = "SMzippo"
activation_sound = 'modular_chomp/sound/items/open.ogg'
deactivation_sound = 'sound/items/zippo_off.ogg'
/obj/item/weapon/flame/lighter/syndismzippo
name = "Syndicate SM Zippo"
desc = "State of the Art Supermatter Lighter."
description_fluff = "A red zippo style lighter with a tiny supermatter sliver held by a phoron field."
icon = 'icons/obj/zippo_ch.dmi'
icon_state = "SyndiSMzippo"
item_state = "SyndiSMzippo"
activation_sound = 'modular_chomp/sound/items/open.ogg'
deactivation_sound = 'sound/items/zippo_off.ogg'
// safe smzippo
/obj/item/weapon/flame/lighter/safesmzippo/attack_self(mob/living/user)
if(!base_state)
base_state = icon_state
if(!lit)
lit = 1
icon_state = "[base_state]on"
item_state = "[base_state]on"
playsound(src, activation_sound, 75, 1)
if(prob(50))
user.visible_message("<span class='rose'>[user] safely activates the [src] with a push of a button!</span>")
else
if(prob(95))
user.visible_message("<span class='notice'>After a few attempts, [user] manages to excite the supermatter within the [src].</span>")
else
to_chat(user, "<span class='warning'>You hurt yourself on the shielding!</span>")
if (user.get_left_hand() == src)
user.apply_damage(1,SEARING,"l_hand")
user.apply_damage(2,ELECTROCUTE,"l_hand")
user.apply_damage(3,CLONE,"l_hand")
user.apply_damage(4,ELECTROMAG,"l_hand")
else
user.apply_damage(1,SEARING,"l_hand")
user.apply_damage(2,ELECTROCUTE,"r_hand")
user.apply_damage(3,CLONE,"r_hand")
user.apply_damage(4,ELECTROMAG,"l_hand")
user.visible_message("<span class='notice'>After a few attempts, [user] manages to activate the [src], they however sting themselves on the shielding!</span>")
set_light(2)
START_PROCESSING(SSobj, src)
else
lit = 0
icon_state = "[base_state]"
item_state = "[base_state]"
playsound(src, deactivation_sound, 75, 1)
if(istype(src, /obj/item/weapon/flame/lighter/safesmzippo) )
user.visible_message("<span class='rose'>You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing.</span>")
else
user.visible_message("<span class='notice'>[user] quietly shuts the [src].</span>")
set_light(0)
STOP_PROCESSING(SSobj, src)
return
/obj/item/weapon/flame/lighter/safesmzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M, /mob))
return
if(lit == 1)
M.IgniteMob()
add_attack_logs(user,M,"Lit on fire with [src]")
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
if(M == user)
cig.attackby(src, user)
else
if(istype(src, /obj/item/weapon/flame/lighter/zippo))
cig.light("<span class='rose'>[user] whips the [name] out and holds it for [M].</span>")
else
cig.light("<span class='notice'>[user] holds the [name] out for [M], and lights the [cig.name].</span>")
else
..()
/obj/item/weapon/flame/lighter/safesmzippo/process()
var/turf/location = get_turf(src)
if(location)
location.hotspot_expose(700, 5)
return
// syndicate smzippo
/obj/item/weapon/flame/lighter/syndismzippo/attack_self(mob/living/user)
if(!base_state)
base_state = icon_state
if(!lit)
lit = 1
icon_state = "[base_state]on"
item_state = "[base_state]on"
playsound(src, activation_sound, 75, 1)
if(prob(50))
user.visible_message("<span class='rose'>[user] safely activates the [src] with a push of a button!</span>")
else
if(prob(99))
user.visible_message("<span class='notice'>After a few attempts, [user] manages to excite the supermatter within the [src].</span>")
else
to_chat(user, "<span class='warning'>You singe yourself on the phoron shielding the excited supermatter!</span>")
if (user.get_left_hand() == src)
user.apply_damage(30,HALLOSS,"l_hand")
user.apply_damage(20,CLONE,"l_hand")
user.apply_damage(5,BURN,"l_hand")
user.apply_damage(5,ELECTROCUTE,"l_hand")
else
user.apply_damage(30,HALLOSS,"r_hand")
user.apply_damage(20,CLONE,"r_hand")
user.apply_damage(5,BURN,"r_hand")
user.apply_damage(5,ELECTROCUTE,"r_hand")
user.visible_message("<span class='notice'>After a few attempts, [user] manages to activate the [src], they however burn themselves with the heated phoron field!</span>")
set_light(2)
START_PROCESSING(SSobj, src)
else
lit = 0
icon_state = "[base_state]"
item_state = "[base_state]"
playsound(src, deactivation_sound, 75, 1)
if(istype(src, /obj/item/weapon/flame/lighter/syndismzippo) )
user.visible_message("<span class='rose'>You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing.</span>")
else
user.visible_message("<span class='notice'>[user] quietly shuts the [src].</span>")
set_light(0)
STOP_PROCESSING(SSobj, src)
return
/obj/item/weapon/flame/lighter/syndismzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M, /mob))
return
if(lit == 1)
M.IgniteMob()
add_attack_logs(user,M,"Lit on fire with [src]")
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
if(M == user)
cig.attackby(src, user)
else
if(istype(src, /obj/item/weapon/flame/lighter/syndismzippo))
cig.light("<span class='rose'>[user] whips the [name] out and holds it for [M].</span>")
else
cig.light("<span class='notice'>[user] holds the [name] out for [M], and lights the [cig.name].</span>")
else
..()
/obj/item/weapon/flame/lighter/process()
var/turf/location = get_turf(src)
if(location)
location.hotspot_expose(700, 5)
return

View File

@@ -81,4 +81,77 @@
/obj/item/clothing/under/equipped(var/mob/user, var/slot)
. = ..()
handle_digitigrade(user)
handle_digitigrade(user)
//In shoe steppies!
/obj/item/clothing/shoes/proc/handle_inshoe_stepping(var/mob/living/carbon/human/pred, var/mob/living/carbon/human/prey)
if(!istype(pred)) return //Sorry, inshoe steppies only for carbon/human/ for now. Based on the regular stepping mechanics
if(!istype(prey)) return
if(!pred.canmove || pred.buckled) return //We can't be stepping on anyone if buckled or incapable of moving
if(pred in buckled_mobs) return
if(pred.flying) return //If we're flying, can't really step.
// I kept interactions very similar to normal steppies, and removed some attack logs unless harm intent:
// I_HELP: No painful description, messages only sent to prey. Similar to inshoe steppies from before.
// I_DISARM: Painful yet harmless descriptions, weaken on walk. Attack logs on weaken.
// I_GRAB: Grabby/Squishing descriptions, weaken on walk. Attack logs on weaken.
// I_HARM: Rand .5-1.5 multiplied by .25 min or 1.75 max, multiplied by 3.5 on walk. Ranges from .125 min to 9.1875 max damage to each limb
var/message_pred = null
var/message_prey = null
switch(pred.a_intent)
if(I_HELP)
if(pred.m_intent == "run")
message_prey = "[pred] moves, pressing down on you within their [name] with each step."
else
message_prey = "As [pred] walks, their foot presses you tightly against the sole of their [name]!"
if(I_DISARM)
if(pred.m_intent == "run")
message_pred = "You step on [prey], squishing and pinning them within your [name]!"
message_prey = "[pred] steps on you, squishing and pinning you within their [name]!"
else
message_pred = "You firmly push your foot down on [prey], painfully but harmlessly pinning them to the sole of your [name]!"
message_prey = "[pred] firmly pushes their foot down on you, painfully but harmlessly pinning you to the sole of their [name]!"
prey.Weaken(5) // For flavour, only noticed prey if tossed out of shoe
add_attack_logs(pred, prey, "Pinned inshoe (walk, weaken(5))")
if(I_GRAB)
if(pred.m_intent == "run")
message_pred = "You step down onto [prey], squishing and trapping them inbetween your toes!"
message_prey = "[pred] steps down on you, squishing and trapping you inbetween their toes!"
else
message_pred = "You pin [prey] down against the sole of your [name] with your foot, your toes curling up around their body, tightly trapping them inbetween them!"
message_prey = "[pred] pins you down against the sole of their [name] with their foot, their toes curling up around your body, tighly trapping you inbetween them!"
prey.Weaken(5) // For flavour, only noticed prey if tossed out of shoe
add_attack_logs(pred, prey, "Grabbed inshoe (walk, weaken(5))")
if(I_HURT)
var/size_damage_multiplier = pred.size_multiplier - prey.size_multiplier
if(size_damage_multiplier < 0) // In case of odd situations such as wearing a shoe containing someone bigger than you.
size_damage_multiplier = 0
//Assuming regular micro pickup sizes outside dorms, size_damage multiplier should range from .25 to 1.75... right?
var/damage = (rand(5, 15) * size_damage_multiplier) / 10 // This will sting, but not kill unless pred walks. Will range from .125 to 2.625 damage, randomly, to each limb
if(pred.m_intent == "run")
message_pred = "You carelessly step down onto [prey], crushing them within your [name]!"
message_prey = "[pred] steps carelessly on your body, crushing you within their [name]!"
add_attack_logs(pred, prey, "Crushed underfoot (run, about [damage] damage per limb)")
else
message_pred = "You methodically place your foot down upon [prey]'s body, applying pressure, crushing them against the sole of your [name]!"
message_prey = "[pred] methodically places their foot upon your body, applying pressure, crushing you against the sole of their [name]!"
damage *= 3.5 //Walking damage multiplier
add_attack_logs(pred, prey, "Crushed underfoot (walk, about [damage] damage per limb)")
for(var/obj/item/organ/external/I in prey.organs)
// Running Total: 1.50 damage min, 28.875 damage max, depending on size & RNG.
// Walking Total: 5.25 damage min, 101.0625 damage max, depending on size & RNG. Ouch.
I.take_damage(damage, 0)
if(message_pred != null)
to_chat(pred, "<span class='warning'>[message_pred]</span>")
to_chat(prey, "<span class='warning'>[message_prey]</span>")
return

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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 ..()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)"

View File

@@ -49,7 +49,9 @@ When editing the list, please try and keep similar probabilities near each other
prob(10); "[info] Not every hostile NPC you encounter while mining or exploring need to be defeated. Sometimes, it's better to avoid or run away from them.",
prob(1); "[info] Stay robust, my friends.",
prob(35); "[info] You can insert your I.D into your PDA. This frees up your belt from having to carry your PDA. Furthermore, by clicking and dragging the PDA to game screen, you can use it without holding it!",
prob(35); "[info] Your vore-bellies have multiple add-ons! Muffling is excellent to ensure your prey does not accidentally inform everyone about their predicament, and jam suit sensors is a great courtesy to avoid medical being worried about your prey!"
prob(35); "[info] Your vore-bellies have multiple add-ons! Muffling is excellent to ensure your prey does not accidentally inform everyone about their predicament, and jam suit sensors is a great courtesy to avoid medical being worried about your prey!",
prob(35); "[info] Remember to check your vore panel preferences! There you can find toggles for things other than just vore(tm), such as stepping mechanics and spontaneous transformation.",
prob(25); "[info] If you would like to toggle stepping mechanics, head to the vore panel and click on personal preferences! Disabling stepping mechanics will disable stepping descriptions and will prevent your character from taking damage if a bigger character walks over yours with harm intent. Your character will still be stunned, however."
)
if("roleplay")

View File

@@ -127,7 +127,7 @@
self_recharge = TRUE
charge_amount = 60 //2.5%
charge_delay = 75
origin_tech = list(TECH_POWER = 5, TECH_PRECURSOR = 1)
origin_tech = list(TECH_POWER = 5, TECH_ARCANE = 1)
/*
* Captain's Self-charging Weapon

View File

@@ -75,4 +75,36 @@
hud_state = "plasma_rifle"
damage = 48
armor_penetration = 10
armor_penetration = 10
//Eclipse mob stuff
/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 = 20
ricochets = 1
ricochets_max = 8
ricochet_chance = 100
/obj/item/projectile/energy/electrode/eclipse
damage = 20
damage_type = BURN
color = "#38b9ff"
/obj/item/projectile/beam/sniper/eclipse
armor_penetration = 50
damage = 30
/obj/item/projectile/energy/declone/burn
damage = 10
armor_penetration = 10
nodamage = 0