mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Adds More Spiders. Touches cuff-code tangentially.
This commit is contained in:
@@ -210,25 +210,8 @@
|
|||||||
//=================
|
//=================
|
||||||
|
|
||||||
if(isturf(loc))
|
if(isturf(loc))
|
||||||
if(prob(25))
|
skitter()
|
||||||
var/list/nearby = trange(5, src) - loc
|
|
||||||
if(nearby.len)
|
|
||||||
var/target_atom = pick(nearby)
|
|
||||||
walk_to(src, target_atom, 5)
|
|
||||||
if(prob(25))
|
|
||||||
src.visible_message("<span class='notice'>\The [src] skitters[pick(" away"," around","")].</span>")
|
|
||||||
else if(prob(5))
|
|
||||||
//vent crawl!
|
|
||||||
for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src))
|
|
||||||
if(!v.welded)
|
|
||||||
entry_vent = v
|
|
||||||
walk_to(src, entry_vent, 5)
|
|
||||||
break
|
|
||||||
|
|
||||||
if(amount_grown >= 100)
|
|
||||||
var/spawn_type = pick(grow_as)
|
|
||||||
new spawn_type(src.loc, src)
|
|
||||||
qdel(src)
|
|
||||||
else if(isorgan(loc))
|
else if(isorgan(loc))
|
||||||
if(!amount_grown) amount_grown = 1
|
if(!amount_grown) amount_grown = 1
|
||||||
var/obj/item/organ/external/O = loc
|
var/obj/item/organ/external/O = loc
|
||||||
@@ -249,6 +232,27 @@
|
|||||||
if(amount_grown)
|
if(amount_grown)
|
||||||
amount_grown += rand(0,2)
|
amount_grown += rand(0,2)
|
||||||
|
|
||||||
|
/obj/effect/spider/spiderling/proc/skitter()
|
||||||
|
if(isturf(loc))
|
||||||
|
if(prob(25))
|
||||||
|
var/list/nearby = trange(5, src) - loc
|
||||||
|
if(nearby.len)
|
||||||
|
var/target_atom = pick(nearby)
|
||||||
|
walk_to(src, target_atom, 5)
|
||||||
|
if(prob(25))
|
||||||
|
src.visible_message("<span class='notice'>\The [src] skitters[pick(" away"," around","")].</span>")
|
||||||
|
else if(prob(5))
|
||||||
|
//vent crawl!
|
||||||
|
for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src))
|
||||||
|
if(!v.welded)
|
||||||
|
entry_vent = v
|
||||||
|
walk_to(src, entry_vent, 5)
|
||||||
|
break
|
||||||
|
if(amount_grown >= 100)
|
||||||
|
var/spawn_type = pick(grow_as)
|
||||||
|
new spawn_type(src.loc, src)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/obj/effect/decal/cleanable/spiderling_remains
|
/obj/effect/decal/cleanable/spiderling_remains
|
||||||
name = "spiderling remains"
|
name = "spiderling remains"
|
||||||
desc = "Green squishy mess."
|
desc = "Green squishy mess."
|
||||||
@@ -261,7 +265,7 @@
|
|||||||
icon_state = "cocoon1"
|
icon_state = "cocoon1"
|
||||||
health = 60
|
health = 60
|
||||||
|
|
||||||
New()
|
/obj/effect/spider/cocoon/New()
|
||||||
icon_state = pick("cocoon1","cocoon2","cocoon3")
|
icon_state = pick("cocoon1","cocoon2","cocoon3")
|
||||||
|
|
||||||
/obj/effect/spider/cocoon/Destroy()
|
/obj/effect/spider/cocoon/Destroy()
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes
|
var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes
|
||||||
var/cuff_sound = 'sound/weapons/handcuffs.ogg'
|
var/cuff_sound = 'sound/weapons/handcuffs.ogg'
|
||||||
var/cuff_type = "handcuffs"
|
var/cuff_type = "handcuffs"
|
||||||
|
var/use_time = 30
|
||||||
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/handcuffs.dmi')
|
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/handcuffs.dmi')
|
||||||
|
|
||||||
/obj/item/weapon/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user)
|
/obj/item/weapon/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user)
|
||||||
@@ -69,7 +70,7 @@
|
|||||||
|
|
||||||
user.visible_message("<span class='danger'>\The [user] is attempting to put [cuff_type] on \the [H]!</span>")
|
user.visible_message("<span class='danger'>\The [user] is attempting to put [cuff_type] on \the [H]!</span>")
|
||||||
|
|
||||||
if(!do_after(user,30))
|
if(!do_after(user,use_time))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime
|
if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime
|
||||||
@@ -199,6 +200,44 @@ var/last_chew = 0
|
|||||||
elastic = 0
|
elastic = 0
|
||||||
cuff_sound = 'sound/weapons/handcuffs.ogg' //This shold work for now.
|
cuff_sound = 'sound/weapons/handcuffs.ogg' //This shold work for now.
|
||||||
|
|
||||||
|
/obj/item/weapon/handcuffs/legcuffs/bola
|
||||||
|
name = "bola"
|
||||||
|
desc = "Keeps prey in line."
|
||||||
|
elastic = 1
|
||||||
|
use_time = 0
|
||||||
|
breakouttime = 30
|
||||||
|
cuff_sound = 'sound/weapons/towelwipe.ogg' //Is there anything this sound can't do?
|
||||||
|
|
||||||
|
/obj/item/weapon/handcuffs/legcuffs/bola/can_place(var/mob/target, var/mob/user)
|
||||||
|
if(user) //A ranged legcuff, until proper implementation as items it remains a projectile-only thing.
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/obj/item/weapon/handcuffs/legcuffs/bola/dropped()
|
||||||
|
visible_message("<span class='notice'>\The [src] falls apart!</span>")
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/item/weapon/handcuffs/legcuffs/bola/place_legcuffs(var/mob/living/carbon/target, var/mob/user)
|
||||||
|
playsound(src.loc, cuff_sound, 30, 1, -2)
|
||||||
|
|
||||||
|
var/mob/living/carbon/human/H = target
|
||||||
|
if(!istype(H))
|
||||||
|
src.dropped()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(!H.has_organ_for_slot(slot_legcuffed))
|
||||||
|
H.visible_message("<span class='notice'>\The [src] slams into [H], but slides off!</span>")
|
||||||
|
src.dropped()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
H.visible_message("<span class='danger'>\The [H] has been snared by \the [src]!</span>")
|
||||||
|
|
||||||
|
// Apply cuffs.
|
||||||
|
var/obj/item/weapon/handcuffs/legcuffs/lcuffs = src
|
||||||
|
lcuffs.loc = target
|
||||||
|
target.legcuffed = lcuffs
|
||||||
|
target.update_inv_legcuffed()
|
||||||
|
return 1
|
||||||
|
|
||||||
/obj/item/weapon/handcuffs/legcuffs/attack(var/mob/living/carbon/C, var/mob/living/user)
|
/obj/item/weapon/handcuffs/legcuffs/attack(var/mob/living/carbon/C, var/mob/living/user)
|
||||||
if(!user.IsAdvancedToolUser())
|
if(!user.IsAdvancedToolUser())
|
||||||
return
|
return
|
||||||
@@ -236,7 +275,7 @@ var/last_chew = 0
|
|||||||
|
|
||||||
user.visible_message("<span class='danger'>\The [user] is attempting to put [cuff_type] on \the [H]!</span>")
|
user.visible_message("<span class='danger'>\The [user] is attempting to put [cuff_type] on \the [H]!</span>")
|
||||||
|
|
||||||
if(!do_after(user,30))
|
if(!do_after(user,use_time))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime
|
if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime
|
||||||
|
|||||||
@@ -55,6 +55,10 @@
|
|||||||
/mob/living/simple_animal/hostile/giant_spider/proc/remove_eyes()
|
/mob/living/simple_animal/hostile/giant_spider/proc/remove_eyes()
|
||||||
overlays -= eye_layer
|
overlays -= eye_layer
|
||||||
|
|
||||||
|
/*
|
||||||
|
Nurse Family
|
||||||
|
*/
|
||||||
|
|
||||||
//nursemaids - these create webs and eggs
|
//nursemaids - these create webs and eggs
|
||||||
/mob/living/simple_animal/hostile/giant_spider/nurse
|
/mob/living/simple_animal/hostile/giant_spider/nurse
|
||||||
desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes."
|
desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes."
|
||||||
@@ -95,7 +99,105 @@
|
|||||||
old_x = -16
|
old_x = -16
|
||||||
old_y = -16
|
old_y = -16
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/webslinger
|
||||||
|
desc = "Furry and green, it makes you shudder to look at it. This one has brilliant green eyes, and a cloak of web."
|
||||||
|
icon_state = "webslinger"
|
||||||
|
icon_living = "webslinger"
|
||||||
|
icon_dead = "webslinger_dead"
|
||||||
|
|
||||||
|
maxHealth = 90
|
||||||
|
health = 90
|
||||||
|
|
||||||
|
projectilesound = 'sound/weapons/thudswoosh.ogg'
|
||||||
|
projectiletype = /obj/item/projectile/bola
|
||||||
|
ranged = 1
|
||||||
|
firing_lines = 1
|
||||||
|
cooperative = 1
|
||||||
|
shoot_range = 5
|
||||||
|
|
||||||
|
melee_damage_lower = 5
|
||||||
|
melee_damage_upper = 10
|
||||||
|
poison_per_bite = 2
|
||||||
|
poison_type = "psilocybin"
|
||||||
|
|
||||||
|
spattack_prob = 15
|
||||||
|
spattack_min_range = 0
|
||||||
|
spattack_max_range = 5
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/webslinger/AttackTarget() //One day.
|
||||||
|
var/mob/living/carbon/human/victim = null //Webslinger needs to know if its target is human later.
|
||||||
|
if(ishuman(target_mob))
|
||||||
|
victim = target_mob
|
||||||
|
if(!victim.legcuffed)
|
||||||
|
projectiletype = /obj/item/projectile/bola
|
||||||
|
shoot_range = 7
|
||||||
|
else
|
||||||
|
projectiletype = /obj/item/projectile/webball
|
||||||
|
shoot_range = 5
|
||||||
|
else
|
||||||
|
projectiletype = /obj/item/projectile/webball
|
||||||
|
shoot_range = 5
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/carrier
|
||||||
|
desc = "Furry, beige, and red, it makes you shudder to look at it. This one has luminous green eyes."
|
||||||
|
icon_state = "carrier"
|
||||||
|
icon_living = "carrier"
|
||||||
|
icon_dead = "carrier_dead"
|
||||||
|
|
||||||
|
maxHealth = 100
|
||||||
|
health = 100
|
||||||
|
|
||||||
|
melee_damage_lower = 5
|
||||||
|
melee_damage_upper = 20
|
||||||
|
|
||||||
|
poison_per_bite = 3
|
||||||
|
poison_type = "chloralhydrate"
|
||||||
|
|
||||||
|
var/spiderling_count = 0
|
||||||
|
var/spiderling_type = /obj/effect/spider/spiderling
|
||||||
|
var/swarmling_type = /mob/living/simple_animal/hostile/giant_spider/hunter
|
||||||
|
var/swarmling_faction = "spiders"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/carrier/New()
|
||||||
|
spiderling_count = rand(5,10)
|
||||||
|
adjust_scale(1.2)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/carrier/death()
|
||||||
|
visible_message("<span class='notice'>\The [src]'s abdomen splits as it rolls over, spiderlings crawling from the wound.</span>")
|
||||||
|
spawn(1)
|
||||||
|
for(var/I = 1 to spiderling_count)
|
||||||
|
if(prob(10) && src)
|
||||||
|
var/mob/living/simple_animal/hostile/giant_spider/swarmling = new swarmling_type(src.loc)
|
||||||
|
var/swarm_health = Floor(swarmling.maxHealth * 0.4)
|
||||||
|
var/swarm_dam_lower = Floor(melee_damage_lower * 0.4)
|
||||||
|
var/swarm_dam_upper = Floor(melee_damage_upper * 0.4)
|
||||||
|
swarmling.name = "spiderling"
|
||||||
|
swarmling.maxHealth = swarm_health
|
||||||
|
swarmling.health = swarm_health
|
||||||
|
swarmling.melee_damage_lower = swarm_dam_lower
|
||||||
|
swarmling.melee_damage_upper = swarm_dam_upper
|
||||||
|
swarmling.faction = swarmling_faction
|
||||||
|
swarmling.adjust_scale(0.75)
|
||||||
|
else if(src)
|
||||||
|
var/obj/effect/spider/spiderling/child = new spiderling_type(src.loc)
|
||||||
|
child.skitter()
|
||||||
|
else
|
||||||
|
break
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/carrier/recursive
|
||||||
|
desc = "Furry, beige, and red, it makes you shudder to look at it. This one has luminous green eyes. You have a distinctly <font face='comic sans ms'>bad</font> feeling about this."
|
||||||
|
|
||||||
|
swarmling_type = /mob/living/simple_animal/hostile/giant_spider/carrier/recursive
|
||||||
|
|
||||||
|
/*
|
||||||
|
Hunter Family
|
||||||
|
*/
|
||||||
|
|
||||||
//hunters have the most poison and move the fastest, so they can find prey
|
//hunters have the most poison and move the fastest, so they can find prey
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/giant_spider/hunter
|
/mob/living/simple_animal/hostile/giant_spider/hunter
|
||||||
desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes."
|
desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes."
|
||||||
icon_state = "hunter"
|
icon_state = "hunter"
|
||||||
@@ -111,6 +213,150 @@
|
|||||||
|
|
||||||
poison_per_bite = 5
|
poison_per_bite = 5
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/lurker
|
||||||
|
desc = "Translucent and white, it makes you shudder to look at it. This one has incandescent red eyes."
|
||||||
|
icon_state = "lurker"
|
||||||
|
icon_living = "lurker"
|
||||||
|
icon_dead = "lurker_dead"
|
||||||
|
alpha = 45
|
||||||
|
|
||||||
|
maxHealth = 100
|
||||||
|
health = 100
|
||||||
|
move_to_delay = 4
|
||||||
|
|
||||||
|
melee_damage_lower = 5
|
||||||
|
melee_damage_upper = 20
|
||||||
|
|
||||||
|
|
||||||
|
poison_chance = 20
|
||||||
|
poison_type = "cryptobiolin"
|
||||||
|
poison_per_bite = 2
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/lurker/death()
|
||||||
|
alpha = 255
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/tunneler
|
||||||
|
desc = "Sandy and brown, it makes you shudder to look at it. This one has glittering yellow eyes."
|
||||||
|
icon_state = "tunneler"
|
||||||
|
icon_living = "tunneler"
|
||||||
|
icon_dead = "tunneler_dead"
|
||||||
|
|
||||||
|
maxHealth = 120
|
||||||
|
health = 120
|
||||||
|
move_to_delay = 4
|
||||||
|
|
||||||
|
melee_damage_lower = 10
|
||||||
|
melee_damage_upper = 20
|
||||||
|
|
||||||
|
poison_chance = 15
|
||||||
|
poison_per_bite = 3
|
||||||
|
poison_type = "serotrotium_v"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/tunneler/death()
|
||||||
|
spawn(1)
|
||||||
|
for(var/I = 1 to rand(3,6))
|
||||||
|
if(src)
|
||||||
|
new/obj/item/weapon/ore/glass(src.loc)
|
||||||
|
else
|
||||||
|
break
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/*
|
||||||
|
Guard Family
|
||||||
|
*/
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/pepper
|
||||||
|
desc = "Red and brown, it makes you shudder to look at it. This one has glinting red eyes."
|
||||||
|
icon_state = "pepper"
|
||||||
|
icon_living = "pepper"
|
||||||
|
icon_dead = "pepper_dead"
|
||||||
|
|
||||||
|
maxHealth = 210
|
||||||
|
health = 210
|
||||||
|
|
||||||
|
melee_damage_lower = 5
|
||||||
|
melee_damage_upper = 10
|
||||||
|
|
||||||
|
poison_chance = 20
|
||||||
|
poison_per_bite = 5
|
||||||
|
poison_type = "condensedcapsaicin_v"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/pepper/New()
|
||||||
|
adjust_scale(1.1)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/thermic
|
||||||
|
desc = "Mirage-cloaked and orange, it makes you shudder to look at it. This one has simmering orange eyes."
|
||||||
|
icon_state = "pit"
|
||||||
|
icon_living = "pit"
|
||||||
|
icon_dead = "pit_dead"
|
||||||
|
|
||||||
|
maxHealth = 175
|
||||||
|
health = 175
|
||||||
|
|
||||||
|
melee_damage_lower = 5
|
||||||
|
melee_damage_upper = 15
|
||||||
|
|
||||||
|
poison_chance = 30
|
||||||
|
poison_per_bite = 1
|
||||||
|
poison_type = "thermite_v"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/electric
|
||||||
|
desc = "Spined and yellow, it makes you shudder to look at it. This one has flickering gold eyes."
|
||||||
|
icon_state = "spark"
|
||||||
|
icon_living = "spark"
|
||||||
|
icon_dead = "spark_dead"
|
||||||
|
|
||||||
|
maxHealth = 210
|
||||||
|
health = 210
|
||||||
|
taser_kill = 0 //It -is- the taser.
|
||||||
|
|
||||||
|
melee_damage_lower = 5
|
||||||
|
melee_damage_upper = 10
|
||||||
|
|
||||||
|
ranged = 1
|
||||||
|
projectilesound = 'sound/weapons/taser2.ogg'
|
||||||
|
projectiletype = /obj/item/projectile/beam/stun/weak
|
||||||
|
firing_lines = 1
|
||||||
|
cooperative = 1
|
||||||
|
|
||||||
|
poison_chance = 15
|
||||||
|
poison_per_bite = 3
|
||||||
|
poison_type = "stimm"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/phorogenic
|
||||||
|
desc = "Crystalline and purple, it makes you shudder to look at it. This one has haunting purple eyes."
|
||||||
|
icon_state = "phoron"
|
||||||
|
icon_living = "phoron"
|
||||||
|
icon_dead = "phoron_dead"
|
||||||
|
|
||||||
|
maxHealth = 225
|
||||||
|
health = 225
|
||||||
|
taser_kill = 0 //You will need more than a peashooter to kill the juggernaut.
|
||||||
|
|
||||||
|
melee_damage_lower = 10
|
||||||
|
melee_damage_upper = 20
|
||||||
|
|
||||||
|
poison_chance = 30
|
||||||
|
poison_per_bite = 0.5
|
||||||
|
poison_type = "phoron"
|
||||||
|
|
||||||
|
var/exploded = 0
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/phorogenic/New()
|
||||||
|
adjust_scale(1.25)
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/phorogenic/death()
|
||||||
|
visible_message("<span class='danger'>\The [src]'s body begins to rupture!</span>")
|
||||||
|
spawn(rand(1,5))
|
||||||
|
if(src && !exploded)
|
||||||
|
visible_message("<span class='critical'>\The [src]'s body detonates!</span>")
|
||||||
|
exploded = 1
|
||||||
|
explosion(src.loc, 1, 2, 4, 6)
|
||||||
|
return ..()
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/giant_spider/frost
|
/mob/living/simple_animal/hostile/giant_spider/frost
|
||||||
desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes."
|
desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes."
|
||||||
icon_state = "frost"
|
icon_state = "frost"
|
||||||
@@ -126,6 +372,9 @@
|
|||||||
poison_per_bite = 5
|
poison_per_bite = 5
|
||||||
poison_type = "cryotoxin"
|
poison_type = "cryotoxin"
|
||||||
|
|
||||||
|
/*
|
||||||
|
Spider Procs
|
||||||
|
*/
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/giant_spider/New(var/location, var/atom/parent)
|
/mob/living/simple_animal/hostile/giant_spider/New(var/location, var/atom/parent)
|
||||||
get_light_and_color(parent)
|
get_light_and_color(parent)
|
||||||
@@ -167,6 +416,16 @@
|
|||||||
O.implants += eggs
|
O.implants += eggs
|
||||||
to_chat(H, "<font size='3'><span class='warning'>\The [src] injects something into your [O.name]!</span></font>")
|
to_chat(H, "<font size='3'><span class='warning'>\The [src] injects something into your [O.name]!</span></font>")
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/giant_spider/webslinger/DoPunch(var/atom/A)
|
||||||
|
. = ..()
|
||||||
|
if(.) // If we succeeded in hitting.
|
||||||
|
if(isliving(A))
|
||||||
|
var/mob/living/L = A
|
||||||
|
var/obj/effect/spider/stickyweb/W = locate() in get_turf(L)
|
||||||
|
if(!W && prob(75))
|
||||||
|
visible_message("<span class='danger'>\The [src] throws a layer of web at \the [L]!</span>")
|
||||||
|
new /obj/effect/spider/stickyweb(L.loc)
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/giant_spider/handle_stance()
|
/mob/living/simple_animal/hostile/giant_spider/handle_stance()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(ai_inactive) return
|
if(ai_inactive) return
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
var/pulse_range = 1
|
var/pulse_range = 1
|
||||||
|
|
||||||
|
|
||||||
on_hit(var/atom/target, var/blocked = 0)
|
/obj/item/projectile/ion/on_hit(var/atom/target, var/blocked = 0)
|
||||||
empulse(target, pulse_range, pulse_range, pulse_range, pulse_range)
|
empulse(target, pulse_range, pulse_range, pulse_range, pulse_range)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
sharp = 1
|
sharp = 1
|
||||||
edge = 1
|
edge = 1
|
||||||
|
|
||||||
on_hit(var/atom/target, var/blocked = 0)
|
/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0)
|
||||||
explosion(target, -1, 0, 2)
|
explosion(target, -1, 0, 2)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
@@ -81,26 +81,26 @@
|
|||||||
nodamage = 1
|
nodamage = 1
|
||||||
check_armour = "bullet"
|
check_armour = "bullet"
|
||||||
|
|
||||||
Bump(atom/A as mob|obj|turf|area)
|
/obj/item/projectile/meteor/Bump(atom/A as mob|obj|turf|area)
|
||||||
if(A == firer)
|
if(A == firer)
|
||||||
loc = A.loc
|
loc = A.loc
|
||||||
return
|
return
|
||||||
|
|
||||||
sleep(-1) //Might not be important enough for a sleep(-1) but the sleep/spawn itself is necessary thanks to explosions and metoerhits
|
sleep(-1) //Might not be important enough for a sleep(-1) but the sleep/spawn itself is necessary thanks to explosions and metoerhits
|
||||||
|
|
||||||
if(src)//Do not add to this if() statement, otherwise the meteor won't delete them
|
if(src)//Do not add to this if() statement, otherwise the meteor won't delete them
|
||||||
if(A)
|
if(A)
|
||||||
|
|
||||||
A.ex_act(2)
|
A.ex_act(2)
|
||||||
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||||
|
|
||||||
for(var/mob/M in range(10, src))
|
for(var/mob/M in range(10, src))
|
||||||
if(!M.stat && !istype(M, /mob/living/silicon/ai))\
|
if(!M.stat && !istype(M, /mob/living/silicon/ai))\
|
||||||
shake_camera(M, 3, 1)
|
shake_camera(M, 3, 1)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/projectile/energy/floramut
|
/obj/item/projectile/energy/floramut
|
||||||
name = "alpha somatoray"
|
name = "alpha somatoray"
|
||||||
@@ -113,36 +113,36 @@
|
|||||||
light_power = 0.5
|
light_power = 0.5
|
||||||
light_color = "#33CC00"
|
light_color = "#33CC00"
|
||||||
|
|
||||||
on_hit(var/atom/target, var/blocked = 0)
|
/obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0)
|
||||||
var/mob/living/M = target
|
var/mob/living/M = target
|
||||||
if(ishuman(target))
|
if(ishuman(target))
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
|
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
|
||||||
if(prob(15))
|
if(prob(15))
|
||||||
M.apply_effect((rand(30,80)),IRRADIATE)
|
M.apply_effect((rand(30,80)),IRRADIATE)
|
||||||
M.Weaken(5)
|
M.Weaken(5)
|
||||||
for (var/mob/V in viewers(src))
|
for (var/mob/V in viewers(src))
|
||||||
V.show_message("<font color='red'>[M] writhes in pain as \his vacuoles boil.</font>", 3, "<font color='red'>You hear the crunching of leaves.</font>", 2)
|
V.show_message("<font color='red'>[M] writhes in pain as \his vacuoles boil.</font>", 3, "<font color='red'>You hear the crunching of leaves.</font>", 2)
|
||||||
if(prob(35))
|
if(prob(35))
|
||||||
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
|
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
|
||||||
// V.show_message("<font color='red'>[M] is mutated by the radiation beam.</font>", 3, "<font color='red'> You hear the snapping of twigs.</font>", 2)
|
// V.show_message("<font color='red'>[M] is mutated by the radiation beam.</font>", 3, "<font color='red'> You hear the snapping of twigs.</font>", 2)
|
||||||
if(prob(80))
|
if(prob(80))
|
||||||
randmutb(M)
|
randmutb(M)
|
||||||
domutcheck(M,null)
|
domutcheck(M,null)
|
||||||
else
|
|
||||||
randmutg(M)
|
|
||||||
domutcheck(M,null)
|
|
||||||
else
|
else
|
||||||
M.adjustFireLoss(rand(5,15))
|
randmutg(M)
|
||||||
M.show_message("<font color='red'>The radiation beam singes you!</font>")
|
domutcheck(M,null)
|
||||||
// for (var/mob/V in viewers(src))
|
else
|
||||||
// V.show_message("<font color='red'>[M] is singed by the radiation beam.</font>", 3, "<font color='red'> You hear the crackle of burning leaves.</font>", 2)
|
M.adjustFireLoss(rand(5,15))
|
||||||
else if(istype(target, /mob/living/carbon/))
|
M.show_message("<font color='red'>The radiation beam singes you!</font>")
|
||||||
// for (var/mob/V in viewers(src))
|
// for (var/mob/V in viewers(src))
|
||||||
// V.show_message("The radiation beam dissipates harmlessly through [M]", 3)
|
// V.show_message("<font color='red'>[M] is singed by the radiation beam.</font>", 3, "<font color='red'> You hear the crackle of burning leaves.</font>", 2)
|
||||||
M.show_message("<font color='blue'>The radiation beam dissipates harmlessly through your body.</font>")
|
else if(istype(target, /mob/living/carbon/))
|
||||||
else
|
// for (var/mob/V in viewers(src))
|
||||||
return 1
|
// V.show_message("The radiation beam dissipates harmlessly through [M]", 3)
|
||||||
|
M.show_message("<font color='blue'>The radiation beam dissipates harmlessly through your body.</font>")
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
|
||||||
/obj/item/projectile/energy/floramut/gene
|
/obj/item/projectile/energy/floramut/gene
|
||||||
name = "gamma somatoray"
|
name = "gamma somatoray"
|
||||||
@@ -164,25 +164,25 @@
|
|||||||
light_power = 0.5
|
light_power = 0.5
|
||||||
light_color = "#FFFFFF"
|
light_color = "#FFFFFF"
|
||||||
|
|
||||||
on_hit(var/atom/target, var/blocked = 0)
|
/obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0)
|
||||||
var/mob/M = target
|
var/mob/M = target
|
||||||
if(ishuman(target)) //These rays make plantmen fat.
|
if(ishuman(target)) //These rays make plantmen fat.
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
|
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
|
||||||
M.nutrition += 30
|
M.nutrition += 30
|
||||||
else if (istype(target, /mob/living/carbon/))
|
else if (istype(target, /mob/living/carbon/))
|
||||||
M.show_message("<font color='blue'>The radiation beam dissipates harmlessly through your body.</font>")
|
M.show_message("<font color='blue'>The radiation beam dissipates harmlessly through your body.</font>")
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
/obj/item/projectile/beam/mindflayer
|
/obj/item/projectile/beam/mindflayer
|
||||||
name = "flayer ray"
|
name = "flayer ray"
|
||||||
|
|
||||||
on_hit(var/atom/target, var/blocked = 0)
|
/obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0)
|
||||||
if(ishuman(target))
|
if(ishuman(target))
|
||||||
var/mob/living/carbon/human/M = target
|
var/mob/living/carbon/human/M = target
|
||||||
M.Confuse(rand(5,8))
|
M.Confuse(rand(5,8))
|
||||||
|
|
||||||
/obj/item/projectile/chameleon
|
/obj/item/projectile/chameleon
|
||||||
name = "bullet"
|
name = "bullet"
|
||||||
@@ -192,3 +192,36 @@
|
|||||||
nodamage = 1
|
nodamage = 1
|
||||||
damage_type = HALLOSS
|
damage_type = HALLOSS
|
||||||
muzzle_type = /obj/effect/projectile/bullet/muzzle
|
muzzle_type = /obj/effect/projectile/bullet/muzzle
|
||||||
|
|
||||||
|
/obj/item/projectile/bola
|
||||||
|
name = "bola"
|
||||||
|
icon_state = "bola"
|
||||||
|
damage = 5
|
||||||
|
embed_chance = 0 //Nada.
|
||||||
|
damage_type = HALLOSS
|
||||||
|
muzzle_type = null
|
||||||
|
|
||||||
|
/obj/item/projectile/bola/on_hit(var/atom/target, var/blocked = 0)
|
||||||
|
if(ishuman(target))
|
||||||
|
var/mob/living/carbon/human/M = target
|
||||||
|
var/obj/item/weapon/handcuffs/legcuffs/bola/B = new(src.loc)
|
||||||
|
if(!B.place_legcuffs(M,firer))
|
||||||
|
if(B)
|
||||||
|
qdel(B)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/projectile/webball
|
||||||
|
name = "ball of web"
|
||||||
|
icon_state = "bola"
|
||||||
|
damage = 10
|
||||||
|
embed_chance = 0 //Nada.
|
||||||
|
damage_type = BRUTE
|
||||||
|
muzzle_type = null
|
||||||
|
|
||||||
|
/obj/item/projectile/webball/on_hit(var/atom/target, var/blocked = 0)
|
||||||
|
if(isturf(target.loc))
|
||||||
|
var/obj/effect/spider/stickyweb/W = locate() in get_turf(target)
|
||||||
|
if(!W && prob(75))
|
||||||
|
visible_message("<span class='danger'>\The [src] splatters a layer of web on \the [target]!</span>")
|
||||||
|
new /obj/effect/spider/stickyweb(target.loc)
|
||||||
|
..()
|
||||||
|
|||||||
@@ -298,6 +298,49 @@
|
|||||||
power = 10
|
power = 10
|
||||||
meltdose = 4
|
meltdose = 4
|
||||||
|
|
||||||
|
/datum/reagent/thermite/venom
|
||||||
|
name = "Pyrotoxin"
|
||||||
|
id = "thermite_v"
|
||||||
|
description = "A biologically produced compound capable of melting steel or other metals, similarly to thermite."
|
||||||
|
taste_description = "sweet chalk"
|
||||||
|
reagent_state = SOLID
|
||||||
|
color = "#673910"
|
||||||
|
touch_met = 50
|
||||||
|
|
||||||
|
/datum/reagent/thermite/venom/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
|
M.adjustFireLoss(3 * removed)
|
||||||
|
if(M.fire_stacks <= 1.5)
|
||||||
|
M.adjust_fire_stacks(0.15)
|
||||||
|
if(alien == IS_DIONA)
|
||||||
|
return
|
||||||
|
if(prob(10))
|
||||||
|
to_chat(M,"<span class='warning'>Your veins feel like they're on fire!</span>")
|
||||||
|
M.adjust_fire_stacks(0.1)
|
||||||
|
else if(prob(5))
|
||||||
|
M.IgniteMob()
|
||||||
|
to_chat(M,"<span class='critical'>Some of your veins rupture, the exposed blood igniting!</span>")
|
||||||
|
|
||||||
|
/datum/reagent/condensedcapsaicin/venom
|
||||||
|
name = "Irritant toxin"
|
||||||
|
id = "condensedcapsaicin_v"
|
||||||
|
description = "A biological agent that acts similarly to pepperspray. This compound seems to be particularly cruel, however, capable of permeating the barriers of blood vessels."
|
||||||
|
taste_description = "fire"
|
||||||
|
color = "#B31008"
|
||||||
|
|
||||||
|
/datum/reagent/condensedcapsaicin/venom/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
|
if(alien == IS_DIONA)
|
||||||
|
return
|
||||||
|
if(prob(50))
|
||||||
|
M.adjustToxLoss(0.5 * removed)
|
||||||
|
if(prob(50))
|
||||||
|
M.apply_effect(4, AGONY, 0)
|
||||||
|
if(prob(20))
|
||||||
|
to_chat(M,"<span class='danger'>You feel like your insides are burning!</span>")
|
||||||
|
else if(prob(20))
|
||||||
|
M.visible_message("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!","rubs at their eyes!")]</span>")
|
||||||
|
else
|
||||||
|
M.eye_blurry = max(M.eye_blurry, 10)
|
||||||
|
|
||||||
/datum/reagent/lexorin
|
/datum/reagent/lexorin
|
||||||
name = "Lexorin"
|
name = "Lexorin"
|
||||||
id = "lexorin"
|
id = "lexorin"
|
||||||
@@ -542,6 +585,21 @@
|
|||||||
M.emote(pick("twitch", "drool", "moan", "gasp"))
|
M.emote(pick("twitch", "drool", "moan", "gasp"))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/datum/reagent/serotrotium/venom
|
||||||
|
name = "Serotropic venom"
|
||||||
|
id = "serotrotium_v"
|
||||||
|
description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans. This appears to be a biologically produced form, resulting in a specifically toxic nature."
|
||||||
|
taste_description = "chalky bitterness"
|
||||||
|
|
||||||
|
/datum/reagent/serotrotium/venom/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||||
|
if(alien == IS_DIONA)
|
||||||
|
return
|
||||||
|
if(prob(30))
|
||||||
|
if(prob(25))
|
||||||
|
M.emote(pick("shiver", "blink_r"))
|
||||||
|
M.adjustBrainLoss(0.2 * removed)
|
||||||
|
return ..()
|
||||||
|
|
||||||
/datum/reagent/cryptobiolin
|
/datum/reagent/cryptobiolin
|
||||||
name = "Cryptobiolin"
|
name = "Cryptobiolin"
|
||||||
id = "cryptobiolin"
|
id = "cryptobiolin"
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 52 KiB |
Reference in New Issue
Block a user