mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-09 00:43:55 +00:00
Merge branch 'master' into craft
This commit is contained in:
161
modular_chomp/code/game/objects/items/weapons/cigs_lighters.dm
Normal file
161
modular_chomp/code/game/objects/items/weapons/cigs_lighters.dm
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user