mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 03:27:05 +01:00
A red headcrab day (#12396)
This commit is contained in:
committed by
variableundefined
parent
3aba865458
commit
49a70daba0
@@ -181,7 +181,8 @@ var/list/event_last_fired = list()
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Revenant", /datum/event/revenant, 150),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Swarmer Spawn", /datum/event/spawn_swarmer, 150, is_one_shot = 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 40, is_one_shot = 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Disease Outbreak", /datum/event/disease_outbreak, 0, list(ASSIGNMENT_MEDICAL = 150), 1)
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Disease Outbreak", /datum/event/disease_outbreak, 0, list(ASSIGNMENT_MEDICAL = 150), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Headcrabs", /datum/event/headcrabs, 0, list(ASSIGNMENT_SECURITY = 20))
|
||||
)
|
||||
|
||||
/datum/event_container/major
|
||||
|
||||
@@ -1,114 +1,29 @@
|
||||
#define LOC_ATMOS_CONTROL 0
|
||||
#define LOC_FPMAINT 1
|
||||
#define LOC_FPMAINT2 2
|
||||
#define LOC_FSMAINT 3
|
||||
#define LOC_FSMAINT2 4
|
||||
#define LOC_ASMAINT 5
|
||||
#define LOC_ASMAINT2 6
|
||||
#define LOC_APMAINT 7
|
||||
#define LOC_MAINTCENTRAL 8
|
||||
#define LOC_FORE 9
|
||||
#define LOC_STARBOARD 10
|
||||
#define LOC_PORT 11
|
||||
#define LOC_AFT 12
|
||||
#define LOC_STORAGE 13
|
||||
#define LOC_DISPOSAL 14
|
||||
#define LOC_GENETICS 15
|
||||
#define LOC_ELECTRICAL 16
|
||||
#define LOC_ABANDONEDBAR 17
|
||||
#define LOC_ELECTRICAL_SHOP 18
|
||||
#define LOC_GAMBLING_DEN 19
|
||||
|
||||
#define HEADCRAB_NORMAL 0
|
||||
#define HEADCRAB_FASTMIX 1
|
||||
#define HEADCRAB_FAST 2
|
||||
#define HEADCRAB_POISONMIX 3
|
||||
#define HEADCRAB_POISON 4
|
||||
/*#define HEADCRAB_CLOWN 5 */ //Planned for the future. maybe
|
||||
#define HEADCRAB_SPAWNER 5
|
||||
|
||||
/datum/event/headcrabs
|
||||
announceWhen = 10
|
||||
endWhen = 11
|
||||
var/location
|
||||
var/locstring
|
||||
var/headcrab
|
||||
var/headcrab_type
|
||||
|
||||
/datum/event/headcrabs/start()
|
||||
|
||||
location = rand(0,19)
|
||||
var/list/availableareas = list()
|
||||
for(var/area/maintenance/A in world)
|
||||
availableareas += A
|
||||
var/area/randomarea = pick(availableareas)
|
||||
var/list/turf/simulated/floor/turfs = list()
|
||||
var/spawn_area_type
|
||||
switch(location)
|
||||
if(LOC_ATMOS_CONTROL)
|
||||
spawn_area_type = /area/maintenance/atmos_control
|
||||
locstring = "Atmospherics Maintenance"
|
||||
if(LOC_FPMAINT)
|
||||
spawn_area_type = /area/maintenance/fpmaint
|
||||
locstring = "EVA Maintenance"
|
||||
if(LOC_FPMAINT2)
|
||||
spawn_area_type = /area/maintenance/fpmaint2
|
||||
locstring = "Arrivals North Maintenance"
|
||||
if(LOC_FSMAINT)
|
||||
spawn_area_type = /area/maintenance/fsmaint
|
||||
locstring = "Dormitory Maintenance"
|
||||
if(LOC_FSMAINT2)
|
||||
spawn_area_type = /area/maintenance/fsmaint2
|
||||
locstring = "Bar Maintenance"
|
||||
if(LOC_ASMAINT)
|
||||
spawn_area_type = /area/maintenance/asmaint
|
||||
locstring = "Medbay Maintenance"
|
||||
if(LOC_ASMAINT2)
|
||||
spawn_area_type = /area/maintenance/asmaint2
|
||||
locstring = "Science Maintenance"
|
||||
if(LOC_APMAINT)
|
||||
spawn_area_type = /area/maintenance/apmaint
|
||||
locstring = "Cargo Maintenance"
|
||||
if(LOC_MAINTCENTRAL)
|
||||
spawn_area_type = /area/maintenance/maintcentral
|
||||
locstring = "Bridge Maintenance"
|
||||
if(LOC_FORE)
|
||||
spawn_area_type = /area/maintenance/fore
|
||||
locstring = "Fore Maintenance"
|
||||
if(LOC_STARBOARD)
|
||||
spawn_area_type = /area/maintenance/starboard
|
||||
locstring = "Starboard Maintenance"
|
||||
if(LOC_PORT)
|
||||
spawn_area_type = /area/maintenance/port
|
||||
locstring = "Locker Room Maintenance"
|
||||
if(LOC_AFT)
|
||||
spawn_area_type = /area/maintenance/aft
|
||||
locstring = "Engineering Maintenance"
|
||||
if(LOC_STORAGE)
|
||||
spawn_area_type = /area/maintenance/storage
|
||||
locstring = "Atmospherics Maintenance"
|
||||
if(LOC_DISPOSAL)
|
||||
spawn_area_type = /area/maintenance/disposal
|
||||
locstring = "Waste Disposal"
|
||||
if(LOC_GENETICS)
|
||||
spawn_area_type = /area/maintenance/genetics
|
||||
locstring = "Genetics Maintenance"
|
||||
if(LOC_ELECTRICAL)
|
||||
spawn_area_type = /area/maintenance/electrical
|
||||
locstring = "Electrical Maintenance"
|
||||
if(LOC_ABANDONEDBAR)
|
||||
spawn_area_type = /area/maintenance/abandonedbar
|
||||
locstring = "Maintenance Bar"
|
||||
if(LOC_ELECTRICAL_SHOP)
|
||||
spawn_area_type = /area/maintenance/electrical_shop
|
||||
locstring ="Electronics Den"
|
||||
if(LOC_GAMBLING_DEN)
|
||||
spawn_area_type = /area/maintenance/gambling_den
|
||||
locstring = "Gambling Den"
|
||||
for(var/areapath in typesof(spawn_area_type))
|
||||
var/area/A = locate(areapath)
|
||||
for(var/turf/simulated/floor/F in A.contents)
|
||||
if(turf_clear(F))
|
||||
turfs += F
|
||||
|
||||
for(var/turf/simulated/floor/F in randomarea)
|
||||
if(turf_clear(F))
|
||||
turfs += F
|
||||
var/list/spawn_types = list()
|
||||
var/max_number
|
||||
headcrab = rand(0, 4) //rand(0,x) for the future
|
||||
switch(headcrab) //Switch is for the future
|
||||
headcrab_type = rand(0, 5)
|
||||
switch(headcrab_type)
|
||||
if(HEADCRAB_NORMAL)
|
||||
spawn_types = list(/mob/living/simple_animal/hostile/headcrab)
|
||||
max_number = 6
|
||||
@@ -124,9 +39,13 @@
|
||||
if(HEADCRAB_POISON)
|
||||
spawn_types = list(/mob/living/simple_animal/hostile/headcrab/poison)
|
||||
max_number = 3
|
||||
if(HEADCRAB_SPAWNER)
|
||||
spawn_types = list(/obj/structure/spawner/headcrab)
|
||||
max_number = 2
|
||||
|
||||
|
||||
var/num = rand(2,max_number)
|
||||
|
||||
while(turfs.len > 0 && num > 0)
|
||||
var/turf/simulated/floor/T = pick(turfs)
|
||||
turfs.Remove(T)
|
||||
@@ -136,31 +55,11 @@
|
||||
|
||||
|
||||
/datum/event/headcrabs/announce()
|
||||
event_announcement.Announce("Bioscans indicate that creatures have been breeding in [locstring]. Clear them out, before this starts to affect productivity", "Lifesign Alert")
|
||||
|
||||
#undef LOC_ATMOS_CONTROL
|
||||
#undef LOC_FPMAINT
|
||||
#undef LOC_FPMAINT2
|
||||
#undef LOC_FSMAINT
|
||||
#undef LOC_FSMAINT2
|
||||
#undef LOC_ASMAINT
|
||||
#undef LOC_ASMAINT2
|
||||
#undef LOC_APMAINT
|
||||
#undef LOC_MAINTCENTRAL
|
||||
#undef LOC_FORE
|
||||
#undef LOC_STARBOARD
|
||||
#undef LOC_PORT
|
||||
#undef LOC_AFT
|
||||
#undef LOC_STORAGE
|
||||
#undef LOC_DISPOSAL
|
||||
#undef LOC_GENETICS
|
||||
#undef LOC_ELECTRICAL
|
||||
#undef LOC_ABANDONEDBAR
|
||||
#undef LOC_ELECTRICAL_SHOP
|
||||
#undef LOC_GAMBLING_DEN
|
||||
event_announcement.Announce("Bioscans indicate that headcrabs have been breeding on the station. Clear them out, before this starts to affect productivity", "Lifesign Alert")
|
||||
|
||||
#undef HEADCRAB_NORMAL
|
||||
#undef HEADCRAB_FASTMIX
|
||||
#undef HEADCRAB_FAST
|
||||
#undef HEADCRAB_POISONMIX
|
||||
#undef HEADCRAB_POISON
|
||||
#undef HEADCRAB_POISON
|
||||
#undef HEADCRAB_SPAWNER
|
||||
@@ -5,8 +5,9 @@
|
||||
icon_state = "headcrab"
|
||||
icon_living = "headcrab"
|
||||
icon_dead = "headcrab_dead"
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
health = 60
|
||||
maxHealth = 60
|
||||
dodging = 1
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 10
|
||||
ranged = 1
|
||||
@@ -18,7 +19,8 @@
|
||||
attack_sound = 'sound/creatures/headcrab_attack.ogg'
|
||||
speak_emote = list("hisses")
|
||||
var/is_zombie = 0
|
||||
stat_attack = DEAD //so they continue to attack when they are on the ground.
|
||||
stat_attack = DEAD //so they continue to attack when they are on the ground.
|
||||
robust_searching = 1
|
||||
var/host_species = ""
|
||||
var/list/human_overlays = list()
|
||||
|
||||
@@ -28,6 +30,17 @@
|
||||
if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD))
|
||||
Zombify(H)
|
||||
break
|
||||
var/cycles = 4
|
||||
if(cycles >= 4)
|
||||
for(var/mob/living/simple_animal/K in oview(src, 1)) //Only for corpse right next to/on same tile
|
||||
if(K.stat == DEAD || (!K.check_death_method() && K.health <= HEALTH_THRESHOLD_DEAD))
|
||||
visible_message("<span class='danger'>[src] consumes [target] whole!</span>")
|
||||
if(health < maxHealth)
|
||||
health += 10
|
||||
qdel(K)
|
||||
break
|
||||
cycles = 0
|
||||
cycles++
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/OpenFire(atom/A)
|
||||
@@ -51,7 +64,7 @@
|
||||
var/obj/item/clothing/suit/armor/A = H.wear_suit
|
||||
if(A.armor && A.armor["melee"])
|
||||
maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
|
||||
maxHealth += 50
|
||||
maxHealth += 200
|
||||
health = maxHealth
|
||||
name = "zombie"
|
||||
desc = "A corpse animated by the alien being on its head."
|
||||
@@ -114,8 +127,8 @@
|
||||
icon_state = "fast_headcrab"
|
||||
icon_living = "fast_headcrab"
|
||||
icon_dead = "fast_headcrab_dead"
|
||||
health = 30
|
||||
maxHealth = 30
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
ranged_cooldown_time = 30
|
||||
jumpdistance = 8
|
||||
jumpspeed = 2
|
||||
@@ -144,11 +157,13 @@
|
||||
icon_state = "poison_headcrab"
|
||||
icon_living = "poison_headcrab"
|
||||
icon_dead = "poison_headcrab_dead"
|
||||
health = 60
|
||||
maxHealth = 60
|
||||
health = 80
|
||||
maxHealth = 80
|
||||
ranged_cooldown_time = 50
|
||||
jumpdistance = 3
|
||||
jumpspeed = 1
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 20
|
||||
attack_sound = 'sound/creatures/ph_scream1.ogg'
|
||||
speak_emote = list("screech")
|
||||
|
||||
@@ -167,6 +182,10 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/poison/AttackingTarget()
|
||||
. = ..()
|
||||
var/mob/living/carbon/C = target
|
||||
if(C.can_inject(null, FALSE, "head", FALSE))
|
||||
C.reagents.add_reagent("lsd", 5)
|
||||
if(iscarbon(target) && target.reagents)
|
||||
var/inject_target = pick("chest", "head")
|
||||
var/mob/living/carbon/C = target
|
||||
if(C.stunned || C.can_inject(null, FALSE, inject_target, FALSE))
|
||||
if(C.eye_blurry < 60)
|
||||
C.AdjustEyeBlurry(10)
|
||||
visible_message("<span class='danger'>[src] buries its fangs deep into the [inject_target] of [target]!</span>")
|
||||
|
||||
Reference in New Issue
Block a user