renamed a file, added rogue drones random event (laser drones spawn and fly around the map, teleport out after a while), added infestation random event (lizards, mice, slimes spawn on the map in some rooms)

Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
Cael_Aislinn
2013-02-13 17:50:57 +10:00
parent e6e4b89819
commit d89c4e744f
7 changed files with 409 additions and 16 deletions

View File

@@ -734,27 +734,33 @@
#include "code\modules\DetectiveWork\detective_work.dm" #include "code\modules\DetectiveWork\detective_work.dm"
#include "code\modules\DetectiveWork\evidence.dm" #include "code\modules\DetectiveWork\evidence.dm"
#include "code\modules\DetectiveWork\footprints_and_rag.dm" #include "code\modules\DetectiveWork\footprints_and_rag.dm"
#include "code\modules\DetectiveWork\scanner.dm"#include "code\modules\events\alien_infestation.dm" #include "code\modules\DetectiveWork\scanner.dm"
#include "code\modules\events\alien_infestation.dm"
#include "code\modules\events\blob.dm" #include "code\modules\events\blob.dm"
#include "code\modules\events\brand_intelligence.dm" #include "code\modules\events\brand_intelligence.dm"
#include "code\modules\events\carp_migration.dm" #include "code\modules\events\carp_migration.dm"
#include "code\modules\events\comms_blackout.dm" #include "code\modules\events\comms_blackout.dm"
#include "code\modules\events\communications_blackout.dm" #include "code\modules\events\communications_blackout.dm"
#include "code\modules\events\disease_outbreak.dm" #include "code\modules\events\disease_outbreak.dm"
#include "code\modules\events\dynamic_events.dm"
#include "code\modules\events\electrical_storm.dm" #include "code\modules\events\electrical_storm.dm"
#include "code\modules\events\event.dm" #include "code\modules\events\event.dm"
#include "code\modules\events\event_dynamic.dm"
#include "code\modules\events\event_manager.dm" #include "code\modules\events\event_manager.dm"
#include "code\modules\events\grid_check.dm" #include "code\modules\events\grid_check.dm"
#include "code\modules\events\infestation.dm"
#include "code\modules\events\ion_storm.dm" #include "code\modules\events\ion_storm.dm"
#include "code\modules\events\meteors.dm"#include "code\modules\events\prison_break.dm" #include "code\modules\events\meteors.dm"
#include "code\modules\events\prison_break.dm"
#include "code\modules\events\radiation_storm.dm" #include "code\modules\events\radiation_storm.dm"
#include "code\modules\events\rogue_drones.dm"
#include "code\modules\events\rogue_viscerators.dm"
#include "code\modules\events\space_ninja.dm" #include "code\modules\events\space_ninja.dm"
#include "code\modules\events\spacevine.dm" #include "code\modules\events\spacevine.dm"
#include "code\modules\events\spider_infestation.dm" #include "code\modules\events\spider_infestation.dm"
#include "code\modules\events\spontaneous_appendicitis.dm" #include "code\modules\events\spontaneous_appendicitis.dm"
#include "code\modules\events\viral_infection.dm" #include "code\modules\events\viral_infection.dm"
#include "code\modules\events\viral_outbreak.dm"#include "code\modules\flufftext\Dreaming.dm" #include "code\modules\events\viral_outbreak.dm"
#include "code\modules\flufftext\Dreaming.dm"
#include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\TextFilters.dm" #include "code\modules\flufftext\TextFilters.dm"
#include "code\modules\food\recipes_microwave.dm" #include "code\modules\food\recipes_microwave.dm"
@@ -957,6 +963,7 @@
#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" #include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"
#include "code\modules\mob\living\simple_animal\hostile\tree.dm" #include "code\modules\mob\living\simple_animal\hostile\tree.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm"
#include "code\modules\mob\new_player\hud.dm" #include "code\modules\mob\new_player\hud.dm"
#include "code\modules\mob\new_player\login.dm" #include "code\modules\mob\new_player\login.dm"
@@ -1167,7 +1174,8 @@
#include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm"
#include "code\WorkInProgress\Chinsky\ashtray.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm"
#include "code\WorkInProgress\Cib\MedicalSideEffects.dm" #include "code\WorkInProgress\Cib\MedicalSideEffects.dm"
#include "code\WorkInProgress\Mini\ATM.dm"#include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\Mini\ATM.dm"
#include "code\WorkInProgress\Ported\policetape.dm"
#include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm" #include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm"
#include "code\WorkInProgress\Susan\susan_desert_turfs.dm" #include "code\WorkInProgress\Susan\susan_desert_turfs.dm"
#include "code\WorkInProgress\virus2\analyser.dm" #include "code\WorkInProgress\virus2\analyser.dm"

View File

@@ -41,26 +41,26 @@
// Check for additional possible events // Check for additional possible events
possibleEvents[/datum/event/economic_event] = 100 //see Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events.dm possibleEvents[/datum/event/economic_event] = 100 //see Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events.dm
possibleEvents[/datum/event/carp_migration] = 50 + 50 * active_with_role["Engineer"] possibleEvents[/datum/event/carp_migration] = 50 + 50 * active_with_role["Engineer"]
possibleEvents[/datum/event/brand_intelligence] = 50 + 25 * active_with_role["Janitor"]
possibleEvents[/datum/event/rogue_drone] = 50 + 25 * active_with_role["Engineer"] + 25 * active_with_role["Security"]
possibleEvents[/datum/event/infestation] = 50 + 25 * active_with_role["Janitor"]
possibleEvents[/datum/event/communications_blackout] = 50 + 25 * active_with_role["AI"] + active_with_role["Scientist"] * 25 possibleEvents[/datum/event/communications_blackout] = 50 + 25 * active_with_role["AI"] + active_with_role["Scientist"] * 25
possibleEvents[/datum/event/ionstorm] = active_with_role["AI"] * 25 + active_with_role["Cyborg"] * 25 + active_with_role["Engineer"] * 10 + active_with_role["Scientist"] * 5
possibleEvents[/datum/event/grid_check] = 10 * active_with_role["Engineer"]
possibleEvents[/datum/event/electrical_storm] = 75 + 25 * active_with_role["Janitor"] + 5 * active_with_role["Engineer"]
if(active_with_role["AI"] > 0 || active_with_role["Cyborg"] > 0) if(!spacevines_spawned)
possibleEvents[/datum/event/ionstorm] = active_with_role["AI"] * 25 + active_with_role["Cyborg"] * 25 + active_with_role["Engineer"] * 10 + active_with_role["Scientist"] * 5 possibleEvents[/datum/event/spacevine] = 5 + 10 * active_with_role["Engineer"]
if(active_with_role["Janitor"] > 0)
possibleEvents[/datum/event/brand_intelligence] = 50 + 25 * active_with_role["Janitor"]
if(active_with_role["Engineer"] > 0 && minutes_passed >= 30) // Give engineers time to set up engine if(active_with_role["Engineer"] > 0 && minutes_passed >= 30) // Give engineers time to set up engine
possibleEvents[/datum/event/meteor_wave] = 20 * active_with_role["Engineer"] possibleEvents[/datum/event/meteor_wave] = 20 * active_with_role["Engineer"]
possibleEvents[/datum/event/meteor_shower] = 80 * active_with_role["Engineer"] possibleEvents[/datum/event/meteor_shower] = 80 * active_with_role["Engineer"]
possibleEvents[/datum/event/blob] = 30 * active_with_role["Engineer"] possibleEvents[/datum/event/blob] = 30 * active_with_role["Engineer"]
if(!spacevines_spawned)
possibleEvents[/datum/event/spacevine] = 10 * active_with_role["Engineer"]
possibleEvents[/datum/event/grid_check] = 10 * active_with_role["Engineer"]
possibleEvents[/datum/event/electrical_storm] = 75 + 25 * active_with_role["Janitor"] + 5 * active_with_role["Engineer"]
possibleEvents[/datum/event/viral_infection] = active_with_role["Medical"] * 50
if(active_with_role["Medical"] > 0) if(active_with_role["Medical"] > 0)
possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 100 possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 100
possibleEvents[/datum/event/viral_infection] = active_with_role["Medical"] * 50
possibleEvents[/datum/event/viral_outbreak] = active_with_role["Medical"] * 25 possibleEvents[/datum/event/viral_outbreak] = active_with_role["Medical"] * 25
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 50 possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 50

View File

@@ -0,0 +1,114 @@
#define LOC_KITCHEN 0
#define LOC_ATMOS 1
#define LOC_INCIN 2
#define LOC_CHAPEL 3
#define LOC_LIBRARY 4
#define LOC_HYDRO 5
#define LOC_VAULT 6
#define LOC_CONSTR 7
#define LOC_TECH 8
#define LOC_ASSEMBLY 9
#define VERM_MICE 0
#define VERM_LIZARDS 1
#define VERM_SLIMES 2
/datum/event/infestation
announceWhen = 10
endWhen = 11
var/location
var/locstring
var/vermin
var/vermstring
/datum/event/infestation/start()
location = rand(0,9)
var/list/turf/simulated/floor/turfs = list()
var/spawn_area_type
switch(location)
if(LOC_KITCHEN)
spawn_area_type = /area/crew_quarters/kitchen
locstring = "the kitchen"
if(LOC_ATMOS)
spawn_area_type = /area/atmos
locstring = "atmospherics"
if(LOC_INCIN)
spawn_area_type = /area/maintenance/incinerator
locstring = "the incinerator"
if(LOC_CHAPEL)
spawn_area_type = /area/chapel/main
locstring = "the chapel"
if(LOC_LIBRARY)
spawn_area_type = /area/library
locstring = "the library"
if(LOC_HYDRO)
spawn_area_type = /area/hydroponics
locstring = "hydroponics"
if(LOC_VAULT)
spawn_area_type = /area/security/nuke_storage
locstring = "the vault"
if(LOC_CONSTR)
spawn_area_type = /area/construction
locstring = "the construction area"
if(LOC_TECH)
spawn_area_type = /area/storage/tech
locstring = "technical storage"
if(LOC_ASSEMBLY)
spawn_area_type = /area/assembly/assembly_line
locstring = "the unused assembly line"
world << "looking for [spawn_area_type]"
for(var/areapath in typesof(spawn_area_type))
world << " checking [areapath]"
var/area/A = locate(areapath)
world << " A: [A], contents.len: [A.contents.len]"
for(var/area/B in A.related)
world << " B: [B], contents.len: [B.contents.len]"
for(var/turf/simulated/floor/F in B.contents)
if(!F.contents.len)
turfs += F
var/list/spawn_types = list()
var/max_number
vermin = rand(0,2)
switch(vermin)
if(VERM_MICE)
spawn_types = list(/mob/living/simple_animal/mouse/gray, /mob/living/simple_animal/mouse/brown, /mob/living/simple_animal/mouse/white)
max_number = 12
vermstring = "mice"
if(VERM_LIZARDS)
spawn_types = list(/mob/living/simple_animal/lizard)
max_number = 6
vermstring = "lizards"
if(VERM_SLIMES)
spawn_types = list(/mob/living/carbon/slime)
max_number = 3
vermstring = "slimes"
spawn(0)
var/num = rand(2,max_number)
while(turfs.len > 0 && num > 0)
var/turf/simulated/floor/T = pick(turfs)
turfs.Remove(T)
var/spawn_type = pick(spawn_types)
new spawn_type(T)
num--
world << "[vermstring] spawned in [spawn_area_type]"
/datum/event/infestation/announce()
command_alert("Bioscans indicate that [vermstring] have been breeding in [locstring]. Clear them out, before this starts to affect productivity.", "Vermin infestation")
#undef LOC_KITCHEN
#undef LOC_ATMOS
#undef LOC_INCIN
#undef LOC_CHAPEL
#undef LOC_LIBRARY
#undef LOC_HYDRO
#undef LOC_VAULT
#undef LOC_TECH
#undef LOC_ASSEMBLY
#undef VERM_MICE
#undef VERM_LIZARDS
#undef VERM_SLIMES

View File

@@ -0,0 +1,53 @@
/datum/event/rogue_drone
startWhen = 10
endWhen = 1000
var/list/drones_list = list()
/datum/event/rogue_drone/start()
//spawn them at the same place as carp
var/list/possible_spawns = list()
for(var/obj/effect/landmark/C in landmarks_list)
if(C.name == "carpspawn")
possible_spawns.Add(C)
//25% chance for this to be a false alarm
var/num
if(prob(25))
num = 0
else
num = rand(2,6)
for(var/i=0, i<num, i++)
var/mob/living/simple_animal/hostile/retaliate/malf_drone/D = new(get_turf(pick(possible_spawns)))
drones_list.Add(D)
if(prob(25))
D.disabled = rand(15, 60)
/datum/event/rogue_drone/announce()
var/msg
if(prob(33))
msg = "A combat drone wing operating out of the NMV Icarus has failed to return from a sweep of this sector, if any are sighted approach with caution."
else if(prob(50))
msg = "Contact has been lost with a combat drone wing operating out of the NMV Icarus. If any are sighted in the area, approach with caution."
else
msg = "Syndicate saboteurs have targetted a combat drone wing deployed from the NMV Icarus. If any are sighted in the area, approach with caution."
command_alert(msg, "Rogue drone alert")
/datum/event/rogue_drone/tick()
return
/datum/event/rogue_drone/end()
var/num_recovered = 0
for(var/mob/living/simple_animal/hostile/retaliate/malf_drone/D in drones_list)
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, D.loc)
sparks.start()
D.z = 2
D.has_loot = 0
del(D)
num_recovered++
if(num_recovered > drones_list.len * 0.75)
command_alert("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert")
else
command_alert("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert")

View File

@@ -20,6 +20,9 @@
stop_automated_movement = 0 stop_automated_movement = 0
for(var/atom/A in ListTargets()) for(var/atom/A in ListTargets())
if(A == src)
continue
var/atom/F = Found(A) var/atom/F = Found(A)
if(F) if(F)
T = F T = F

View File

@@ -0,0 +1,215 @@
//malfunctioning combat drones
/mob/living/simple_animal/hostile/retaliate/malf_drone
name = "combat drone"
desc = "An automated combat drone armed with state of the art weaponry and shielding."
icon_state = "drone3"
icon_living = "drone3"
icon_dead = "drone_dead"
ranged = 1
rapid = 1
speak_chance = 5
turns_per_move = 3
response_help = "pokes the"
response_disarm = "gently pushes aside the"
response_harm = "hits the"
speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.")
emote_see = list("beeps menacingly","whirrs threateningly","scans it's immediate vicinity")
a_intent = "harm"
stop_automated_movement_when_pulled = 0
maxHealth = 100
health = 100
speed = 4
projectiletype = /obj/item/projectile/beam
projectilesound = 'sound/weapons/laser3.ogg'
destroy_surroundings = 0
var/datum/effect/effect/system/ion_trail_follow/ion_trail
//the drone randomly switches between these states because it's malfunctioning
var/hostile_drone = 0
//0 - retaliate, only attack enemies that attack it
//1 - hostile, attack everything that comes near
var/turf/patrol_target
var/explode_chance = 1
var/disabled = 0
min_oxy = 0
max_tox = 0
max_co2 = 0
minbodytemp = 0
maxbodytemp = 600
var/has_loot = 1
faction = "malf_drone"
/mob/living/simple_animal/hostile/retaliate/malf_drone/New()
..()
if(prob(5))
projectiletype = /obj/item/projectile/beam/pulse
projectilesound = 'sound/weapons/pulse2.ogg'
ion_trail = new
ion_trail.set_up(src)
ion_trail.start()
/mob/living/simple_animal/hostile/retaliate/malf_drone/Process_Spacemove(var/check_drift = 0)
return 1
/mob/living/simple_animal/hostile/retaliate/malf_drone/ListTargets()
if(hostile_drone)
return view(src, 10)
else
return ..()
//self repair systems have a chance to bring the drone back to life
/mob/living/simple_animal/hostile/retaliate/malf_drone/Life()
if(disabled > 0)
stat = UNCONSCIOUS
icon_state = "drone_dead"
disabled--
if(disabled <= 0)
stat = CONSCIOUS
icon_state = "drone0"
else
return
if(prob(1))
src.visible_message("\red \icon[src] [src] shudders and shakes.")
if(stat == DEAD)
health = rand(5,15)
else if(health < maxHealth)
health += rand(5,15)
if(prob(disabled ? 0 : 1))
if(hostile_drone)
src.visible_message("\red \icon[src] [src] retracts several targetting vanes, and dulls it's running lights.")
hostile_drone = 0
else
src.visible_message("\red \icon[src] [src] suddenly lights up, and additional targetting vanes slide into place.")
hostile_drone = 1
if(health / maxHealth > 0.75)
icon_state = "drone3"
explode_chance = 0
else if(health / maxHealth > 0.5)
icon_state = "drone2"
explode_chance = 0
else if(health / maxHealth > 0.25)
icon_state = "drone1"
explode_chance = 0.5
else
icon_state = "drone0"
explode_chance = 5
if(!disabled && prob(explode_chance))
src.visible_message("\red \icon[src] [src] begins to spark and shake violenty!")
spawn(rand(30,100))
if(!disabled)
explosion(get_turf(src), 1, 2, 3, 7)
..()
//ion rifle!
/mob/living/simple_animal/hostile/retaliate/malf_drone/emp_act(severity)
health -= rand(3,15) * (severity + 1)
disabled = rand(150, 600)
hostile_drone = 0
/mob/living/simple_animal/hostile/retaliate/malf_drone/Del()
//some random debris left behind
if(has_loot)
var/obj/O
//shards
O = new /obj/item/weapon/shard(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
O = new /obj/item/weapon/shard(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
O = new /obj/item/weapon/shard(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
O = new /obj/item/weapon/shard(src.loc)
step_to(O, get_turf(pick(view(7, src))))
//rods
O = new /obj/item/stack/rods(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
O = new /obj/item/stack/rods(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
O = new /obj/item/stack/rods(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
O = new /obj/item/stack/rods(src.loc)
step_to(O, get_turf(pick(view(7, src))))
//plasteel
O = new /obj/item/stack/sheet/plasteel(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
O = new /obj/item/stack/sheet/plasteel(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
O = new /obj/item/stack/sheet/plasteel(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
O = new /obj/item/stack/sheet/plasteel(src.loc)
step_to(O, get_turf(pick(view(7, src))))
//also drop dummy circuit boards deconstructable for research (loot)
var/obj/item/weapon/circuitboard/C
if(prob(25))
C = new(src.loc)
C.name = "Drone CPU motherboard"
C.origin_tech = "programming=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone neural interface"
C.origin_tech = "biotech=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone suspension processor"
C.origin_tech = "magnets=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone shielding controller"
C.origin_tech = "bluespace=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone power capacitor"
C.origin_tech = "powerstorage=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone hull reinforcer"
C.origin_tech = "materials=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone auto-repair system"
C.origin_tech = "engineering=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone plasma overcharge counter"
C.origin_tech = "plasma=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone targetting circuitboard"
C.origin_tech = "combat=[rand(3,10)]"
if(prob(25))
C = new(src.loc)
C.name = "Drone morality core"
C.origin_tech = "illegal=[rand(3,10)]"
..()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

After

Width:  |  Height:  |  Size: 185 KiB