initial commit - cross reference with 5th port - obviously has compile errors
This commit is contained in:
@@ -0,0 +1,239 @@
|
||||
//Easter start
|
||||
/datum/holiday/easter/greet()
|
||||
return "Greetings! Have a Happy Easter and keep an eye out for Easter Bunnies!"
|
||||
|
||||
/datum/round_event_control/easter
|
||||
name = "Easter Eggselence"
|
||||
holidayID = EASTER
|
||||
typepath = /datum/round_event/easter
|
||||
weight = -1
|
||||
max_occurrences = 1
|
||||
earliest_start = 0
|
||||
|
||||
/datum/round_event/easter/announce()
|
||||
priority_announce(pick("Hip-hop into Easter!","Find some Bunny's stash!","Today is National 'Hunt a Wabbit' Day.","Be kind, give Chocolate Eggs!"))
|
||||
|
||||
|
||||
/datum/round_event_control/rabbitrelease
|
||||
name = "Release the Rabbits!"
|
||||
holidayID = EASTER
|
||||
typepath = /datum/round_event/rabbitrelease
|
||||
weight = 5
|
||||
max_occurrences = 10
|
||||
|
||||
/datum/round_event/rabbitrelease/announce()
|
||||
priority_announce("Unidentified furry objects detected coming aboard [station_name()]. Beware of Adorable-ness.", "Fluffy Alert", 'sound/AI/aliens.ogg')
|
||||
|
||||
|
||||
/datum/round_event/rabbitrelease/start()
|
||||
for(var/obj/effect/landmark/R in landmarks_list)
|
||||
if(R.name != "blobspawn")
|
||||
if(prob(35))
|
||||
if(istype(R.loc,/turf/open/space))
|
||||
new /mob/living/simple_animal/chicken/rabbit/space(R.loc)
|
||||
else
|
||||
new /mob/living/simple_animal/chicken/rabbit(R.loc)
|
||||
|
||||
/mob/living/simple_animal/chicken/rabbit
|
||||
name = "\improper rabbit"
|
||||
desc = "The hippiest hop around."
|
||||
icon = 'icons/mob/Easter.dmi'
|
||||
icon_state = "rabbit_white"
|
||||
icon_living = "rabbit_white"
|
||||
icon_dead = "rabbit_white_dead"
|
||||
speak = list("Hop into Easter!","Come get your eggs!","Prizes for everyone!")
|
||||
speak_emote = list("sniffles","twitches")
|
||||
emote_hear = list("hops.")
|
||||
emote_see = list("hops around","bounces up and down")
|
||||
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
|
||||
egg_type = /obj/item/weapon/reagent_containers/food/snacks/egg/loaded
|
||||
food_type = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot
|
||||
eggsleft = 10
|
||||
eggsFertile = FALSE
|
||||
icon_prefix = "rabbit"
|
||||
feedMessages = list("It nibbles happily.","It noms happily.")
|
||||
layMessage = list("hides an egg.","scampers around suspiciously.","begins making a huge racket.","begins shuffling.")
|
||||
|
||||
/mob/living/simple_animal/chicken/rabbit/space
|
||||
icon_prefix = "s_rabbit"
|
||||
icon_state = "s_rabbit_white"
|
||||
icon_living = "s_rabbit_white"
|
||||
icon_dead = "s_rabbit_white_dead"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
unsuitable_atmos_damage = 0
|
||||
|
||||
//Easter Baskets
|
||||
/obj/item/weapon/storage/bag/easterbasket
|
||||
name = "Easter Basket"
|
||||
icon = 'icons/mob/Easter.dmi'
|
||||
icon_state = "basket"
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/egg,/obj/item/weapon/reagent_containers/food/snacks/chocolateegg,/obj/item/weapon/reagent_containers/food/snacks/boiledegg)
|
||||
|
||||
/obj/item/weapon/storage/bag/easterbasket/proc/countEggs()
|
||||
cut_overlays()
|
||||
add_overlay(image("icon" = icon, "icon_state" = "basket-grass", "layer" = -1))
|
||||
add_overlay(image("icon" = icon, "icon_state" = "basket-egg[contents.len <= 5 ? contents.len : 5]", "layer" = -1))
|
||||
|
||||
/obj/item/weapon/storage/bag/easterbasket/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||
..()
|
||||
countEggs()
|
||||
|
||||
/obj/item/weapon/storage/bag/easterbasket/handle_item_insertion(obj/item/I, prevent_warning = 0)
|
||||
. = ..()
|
||||
countEggs()
|
||||
|
||||
//Bunny Suit
|
||||
/obj/item/clothing/head/bunnyhead
|
||||
name = "Easter Bunny Head"
|
||||
icon_state = "bunnyhead"
|
||||
item_state = "bunnyhead"
|
||||
desc = "Considerably more cute than 'Frank'"
|
||||
slowdown = -1
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
|
||||
/obj/item/clothing/suit/bunnysuit
|
||||
name = "Easter Bunny Suit"
|
||||
desc = "Hop Hop Hop!"
|
||||
icon_state = "bunnysuit"
|
||||
item_state = "bunnysuit"
|
||||
slowdown = -1
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
//Egg prizes and egg spawns!
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg
|
||||
var/containsPrize = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/loaded
|
||||
containsPrize = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/loaded/New()
|
||||
..()
|
||||
var/color = pick("blue","green","mime","orange","purple","rainbow","red","yellow")
|
||||
icon_state = "egg-[color]"
|
||||
item_color = "[color]"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/proc/dispensePrize(turf/where)
|
||||
var/won = pick(/obj/item/clothing/head/bunnyhead,
|
||||
/obj/item/clothing/suit/bunnysuit,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolateegg,
|
||||
/obj/item/toy/balloon,
|
||||
/obj/item/toy/gun,
|
||||
/obj/item/toy/sword,
|
||||
/obj/item/toy/foamblade,
|
||||
/obj/item/toy/prize/ripley,
|
||||
/obj/item/toy/prize/honk,
|
||||
/obj/item/toy/carpplushie,
|
||||
/obj/item/toy/redbutton,
|
||||
/obj/item/clothing/head/collectable/rabbitears)
|
||||
new won(where)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/chocolateegg(where)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/attack_self(mob/user)
|
||||
..()
|
||||
if(containsPrize)
|
||||
user << "<span class='notice'>You unwrap the [src] and find a prize inside!</span>"
|
||||
dispensePrize(get_turf(user))
|
||||
containsPrize = FALSE
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spawner/lootdrop/maintenance/New()
|
||||
..()
|
||||
loot += list(/obj/item/weapon/reagent_containers/food/snacks/egg/loaded = 15, /obj/item/weapon/storage/bag/easterbasket = 15)
|
||||
|
||||
//Easter Recipes + food
|
||||
/obj/item/weapon/reagent_containers/food/snacks/hotcrossbun
|
||||
bitesize = 2
|
||||
name = "hot-cross bun"
|
||||
desc = "The Cross represents the Assistants that died for your sins."
|
||||
icon_state = "hotcrossbun"
|
||||
|
||||
/datum/crafting_recipe/food/food/hotcrossbun
|
||||
name = "Hot-Cross Bun"
|
||||
reqs = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/datum/reagent/consumable/sugar = 1
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/hotcrossbun
|
||||
category = CAT_FOOD
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/store/cake/brioche
|
||||
name = "brioche cake"
|
||||
desc = "A ring of sweet, glazed buns."
|
||||
icon_state = "briochecake"
|
||||
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/brioche
|
||||
slices_num = 6
|
||||
bonus_reagents = list("nutriment" = 10, "vitamin" = 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/brioche
|
||||
name = "brioche cake slice"
|
||||
desc = "Delicious sweet-bread. Who needs anything else?"
|
||||
icon_state = "briochecake_slice"
|
||||
filling_color = "#FFD700"
|
||||
|
||||
/datum/crafting_recipe/food/food/briochecake
|
||||
name = "Brioche cake"
|
||||
reqs = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/datum/reagent/consumable/sugar = 2
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/brioche
|
||||
category = CAT_FOOD
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/scotchegg
|
||||
name = "scotch egg"
|
||||
desc = "A boiled egg wrapped in a delicious, seasoned meatball."
|
||||
icon_state = "scotchegg"
|
||||
bonus_reagents = list("nutriment" = 2, "vitamin" = 2)
|
||||
bitesize = 3
|
||||
filling_color = "#FFFFF0"
|
||||
list_reagents = list("nutriment" = 6)
|
||||
|
||||
/datum/crafting_recipe/food/scotchegg
|
||||
name = "Scotch egg"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sodiumchloride = 1,
|
||||
/datum/reagent/consumable/blackpepper = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/boiledegg = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/faggot = 1
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/scotchegg
|
||||
category = CAT_FOOD
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soup/mammi
|
||||
name = "Mammi"
|
||||
desc = "A bowl of mushy bread and milk. It reminds you, not too fondly, of a bowel movement."
|
||||
icon_state = "mammi"
|
||||
bonus_reagents = list("nutriment" = 3, "vitamin" = 1)
|
||||
list_reagents = list("nutriment" = 8, "vitamin" = 1)
|
||||
|
||||
/datum/crafting_recipe/food/mammi
|
||||
name = "Mammi"
|
||||
reqs = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1,
|
||||
/datum/reagent/consumable/milk = 5
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/soup/mammi
|
||||
category = CAT_FOOD
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebunny
|
||||
name = "chocolate bunny"
|
||||
desc = "Contains less than 10% real rabbit!"
|
||||
icon_state = "chocolatebunny"
|
||||
bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
|
||||
list_reagents = list("nutriment" = 4, "sugar" = 2, "cocoa" = 2)
|
||||
filling_color = "#A0522D"
|
||||
|
||||
/datum/crafting_recipe/food/chocolatebunny
|
||||
name = "Chocolate bunny"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sugar = 2,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/chocolatebunny
|
||||
category = CAT_FOOD
|
||||
@@ -0,0 +1,292 @@
|
||||
//spooky halloween stuff. only tick on halloween!!!
|
||||
|
||||
|
||||
//uses super seekrit double proc definition stuffs. remember to call ..()!
|
||||
/*/mob/dead/observer/say(var/message) //this doesn't actually work vOv
|
||||
..()
|
||||
for(var/mob/M in hearers(src, 1))
|
||||
if(!M.stat)
|
||||
if(M.job == "Chaplain")
|
||||
if (prob (49))
|
||||
M.show_message("<span class='game'><i>You hear muffled speech... but nothing is there...</i></span>", 2)
|
||||
if(prob(20))
|
||||
playsound(loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1)
|
||||
else
|
||||
M.show_message("<span class='game'><i>You hear muffled speech... you can almost make out some words...</i></span>", 2)
|
||||
// M.show_message("<span class='game'><i>[stutter(message)]</i></span>", 2)
|
||||
if(prob(30))
|
||||
playsound(loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1)
|
||||
else
|
||||
if(prob(50))
|
||||
return
|
||||
else if(prob (95))
|
||||
M.show_message("<span class='game'><i>You hear muffled speech... but nothing is there...</i></span>", 2)
|
||||
if(prob(20))
|
||||
playsound(loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1)
|
||||
else
|
||||
M.show_message("<span class='game'><i>You hear muffled speech... you can almost make out some words...</i></span>", 2)
|
||||
// M.show_message("<span class='game'><i>[stutter(message)]</i></span>", 2)
|
||||
playsound(loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1)*/
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
///////////HALLOWEEN CONTENT///////////
|
||||
///////////////////////////////////////
|
||||
|
||||
|
||||
//spooky recipes
|
||||
|
||||
/datum/recipe/sugarcookie/spookyskull
|
||||
reagents = list("flour" = 5, "sugar" = 5, "milk" = 5)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookyskull
|
||||
|
||||
/datum/recipe/sugarcookie/spookycoffin
|
||||
reagents = list("flour" = 5, "sugar" = 5, "coffee" = 5)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookycoffin
|
||||
|
||||
//////////////////////////////
|
||||
//Spookoween trapped closets//
|
||||
//////////////////////////////
|
||||
|
||||
#define SPOOKY_SKELETON 1
|
||||
#define ANGRY_FAITHLESS 2
|
||||
#define SCARY_BATS 3
|
||||
#define INSANE_CLOWN 4
|
||||
#define HOWLING_GHOST 5
|
||||
|
||||
//Spookoween variables
|
||||
/obj/structure/closet
|
||||
var/trapped = 0
|
||||
var/mob/trapped_mob
|
||||
|
||||
/obj/structure/closet/initialize()
|
||||
..()
|
||||
if(prob(30))
|
||||
set_spooky_trap()
|
||||
|
||||
/obj/structure/closet/dump_contents()
|
||||
..()
|
||||
trigger_spooky_trap()
|
||||
|
||||
/obj/structure/closet/proc/set_spooky_trap()
|
||||
if(prob(0.1))
|
||||
trapped = INSANE_CLOWN
|
||||
return
|
||||
if(prob(1))
|
||||
trapped = ANGRY_FAITHLESS
|
||||
return
|
||||
if(prob(15))
|
||||
trapped = SCARY_BATS
|
||||
return
|
||||
if(prob(20))
|
||||
trapped = HOWLING_GHOST
|
||||
return
|
||||
else
|
||||
var/mob/living/carbon/human/H = new(loc)
|
||||
H.makeSkeleton()
|
||||
H.health = 1e5
|
||||
insert(H)
|
||||
trapped_mob = H
|
||||
trapped = SPOOKY_SKELETON
|
||||
return
|
||||
|
||||
/obj/structure/closet/proc/trigger_spooky_trap()
|
||||
if(!trapped)
|
||||
return
|
||||
|
||||
else if(trapped == SPOOKY_SKELETON)
|
||||
visible_message("<span class='userdanger'><font size='5'>BOO!</font></span>")
|
||||
playsound(loc, pick('sound/effects/xylophone1.ogg','sound/effects/xylophone2.ogg','sound/effects/xylophone3.ogg','sound/spookoween/girlscream.ogg'), 300, 1)
|
||||
trapped = 0
|
||||
spawn(90)
|
||||
if(trapped_mob && trapped_mob.loc)
|
||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new()
|
||||
smoke.set_up(1, 0, trapped_mob.loc, 0)
|
||||
smoke.start()
|
||||
qdel(trapped_mob)
|
||||
|
||||
else if(trapped == HOWLING_GHOST)
|
||||
visible_message("<span class='userdanger'><font size='5'>[pick("OooOOooooOOOoOoOOooooOOOOO", "BooOOooOooooOOOO", "BOO!", "WoOOoOoooOooo")]</font></span>")
|
||||
playsound(loc, 'sound/spookoween/ghosty_wind.ogg', 300, 1)
|
||||
new /mob/living/simple_animal/shade/howling_ghost(loc)
|
||||
trapped = 0
|
||||
|
||||
else if(trapped == SCARY_BATS)
|
||||
visible_message("<span class='userdanger'><font size='5'>Protect your hair!</font></span>")
|
||||
playsound(loc, 'sound/spookoween/bats.ogg', 300, 1)
|
||||
var/number = rand(1,3)
|
||||
for(var/i=0,i < number,i++)
|
||||
new /mob/living/simple_animal/hostile/retaliate/bat(loc)
|
||||
trapped = 0
|
||||
|
||||
else if(trapped == ANGRY_FAITHLESS)
|
||||
visible_message("<span class='userdanger'>The closet bursts open!</span>")
|
||||
visible_message("<span class='userdanger'><font size='5'>THIS BEING RADIATES PURE EVIL! YOU BETTER RUN!!!</font></span>")
|
||||
playsound(loc, 'sound/hallucinations/wail.ogg', 300, 1)
|
||||
var/mob/living/simple_animal/hostile/faithless/F = new(loc)
|
||||
F.stance = HOSTILE_STANCE_ATTACK
|
||||
F.GiveTarget(usr)
|
||||
trapped = 0
|
||||
spawn(120)
|
||||
if(F && F.loc)
|
||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new
|
||||
smoke.set_up(1,0, F.loc, 0)
|
||||
smoke.start()
|
||||
qdel(F)
|
||||
|
||||
else if(trapped == INSANE_CLOWN)
|
||||
visible_message("<span class='userdanger'><font size='5'>...</font></span>")
|
||||
playsound(loc, 'sound/spookoween/scary_clown_appear.ogg', 300, 1)
|
||||
var/mob/living/simple_animal/hostile/retaliate/clown/insane/IC = new (loc)
|
||||
IC.GiveTarget(usr)
|
||||
trapped = 0
|
||||
|
||||
//don't spawn in crates
|
||||
/obj/structure/closet/crate/trigger_spooky_trap()
|
||||
return
|
||||
|
||||
/obj/structure/closet/crate/set_spooky_trap()
|
||||
return
|
||||
|
||||
|
||||
////////////////////
|
||||
//Spookoween Ghost//
|
||||
////////////////////
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost
|
||||
name = "ghost"
|
||||
real_name = "ghost"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
maxHealth = 1e6
|
||||
health = 1e6
|
||||
speak_emote = list("howls")
|
||||
emote_hear = list("wails","screeches")
|
||||
density = 0
|
||||
anchored = 1
|
||||
incorporeal_move = 1
|
||||
layer = 4
|
||||
var/timer = 0
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/New()
|
||||
..()
|
||||
icon_state = pick("ghost","ghostian","ghostian2","ghostking","ghost1","ghost2")
|
||||
icon_living = icon_state
|
||||
status_flags |= GODMODE
|
||||
timer = rand(1,15)
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/Life()
|
||||
..()
|
||||
timer--
|
||||
if(prob(20))
|
||||
roam()
|
||||
if(timer == 0)
|
||||
spooky_ghosty()
|
||||
timer = rand(1,15)
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/proc/EtherealMove(direction)
|
||||
loc = get_step(src, direction)
|
||||
setDir(direction)
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/proc/roam()
|
||||
if(prob(80))
|
||||
var/direction = pick(NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST)
|
||||
EtherealMove(direction)
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/proc/spooky_ghosty()
|
||||
if(prob(20)) //haunt
|
||||
playsound(loc, pick('sound/spookoween/ghosty_wind.ogg','sound/spookoween/ghost_whisper.ogg','sound/spookoween/chain_rattling.ogg'), 300, 1)
|
||||
if(prob(10)) //flickers
|
||||
var/obj/machinery/light/L = locate(/obj/machinery/light) in view(5, src)
|
||||
if(L)
|
||||
L.flicker()
|
||||
if(prob(5)) //poltergeist
|
||||
var/obj/item/I = locate(/obj/item) in view(3, src)
|
||||
if(I)
|
||||
var/direction = pick(NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST)
|
||||
step(I,direction)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/adjustHealth()
|
||||
. = 0
|
||||
|
||||
/mob/living/simple_animal/shade/howling_ghost/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
return 1
|
||||
|
||||
|
||||
///////////////////////////
|
||||
//Spookoween Insane Clown//
|
||||
///////////////////////////
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane
|
||||
name = "insane clown"
|
||||
desc = "Some clowns do not manage to be accepted, and go insane. This is one of them."
|
||||
icon_state = "scary_clown"
|
||||
icon_living = "scary_clown"
|
||||
icon_dead = "scary_clown"
|
||||
icon_gib = "scary_clown"
|
||||
speak = list("...", ". . .")
|
||||
maxHealth = 1e6
|
||||
health = 1e6
|
||||
emote_see = list("silently stares")
|
||||
unsuitable_atmos_damage = 0
|
||||
var/timer
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/New()
|
||||
..()
|
||||
timer = rand(5,15)
|
||||
status_flags = (status_flags | GODMODE)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/Retaliate()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/ex_act()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/Life()
|
||||
timer--
|
||||
if(target)
|
||||
stalk()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/proc/stalk()
|
||||
var/mob/living/M = target
|
||||
if(M.stat == DEAD)
|
||||
playsound(M.loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1)
|
||||
qdel(src)
|
||||
if(timer == 0)
|
||||
timer = rand(5,15)
|
||||
playsound(M.loc, pick('sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 300, 1)
|
||||
spawn(12)
|
||||
loc = M.loc
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/MoveToTarget()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/AttackTarget()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/adjustHealth()
|
||||
. = 0
|
||||
if(prob(5))
|
||||
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/attackby(obj/item/O, mob/user)
|
||||
if(istype(O,/obj/item/weapon/nullrod))
|
||||
if(prob(5))
|
||||
visible_message("[src] finally found the peace it deserves. <i>You hear honks echoing off into the distance.</i>")
|
||||
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1)
|
||||
qdel(src)
|
||||
else
|
||||
visible_message("<span class='danger'>[src] seems to be resisting the effect!</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/insane/handle_temperature_damage()
|
||||
return
|
||||
@@ -0,0 +1,398 @@
|
||||
/datum/holiday
|
||||
var/name = "Bugsgiving"
|
||||
//Right now, only holidays that take place on a certain day or within a time period are supported
|
||||
//It would be nice to support things like "the second monday in march" or "the first sunday after the second sunday in june"
|
||||
var/begin_day = 1
|
||||
var/begin_month = 0
|
||||
var/end_day = 0 // Default of 0 means the holiday lasts a single day
|
||||
var/end_month = 0
|
||||
|
||||
// This proc gets run before the game starts when the holiday is activated. Do festive shit here.
|
||||
/datum/holiday/proc/celebrate()
|
||||
|
||||
// When the round starts, this proc is ran to get a text message to display to everyone to wish them a happy holiday
|
||||
/datum/holiday/proc/greet()
|
||||
return "Have a happy [name]!"
|
||||
|
||||
// Returns special prefixes for the station name on certain days. You wind up with names like "Christmas Object Epsilon". See new_station_name()
|
||||
/datum/holiday/proc/getStationPrefix()
|
||||
//get the first word of the Holiday and use that
|
||||
var/i = findtext(name," ",1,0)
|
||||
return copytext(name,1,i)
|
||||
|
||||
// Return 1 if this holidy should be celebrated today
|
||||
/datum/holiday/proc/shouldCelebrate(dd, mm, yy)
|
||||
if(!end_day)
|
||||
end_day = begin_day
|
||||
if(!end_month)
|
||||
end_month = begin_month
|
||||
|
||||
if(end_month > begin_month) //holiday spans multiple months in one year
|
||||
if(mm == end_month) //in final month
|
||||
if(dd <= end_day)
|
||||
return 1
|
||||
|
||||
else if(mm == begin_month)//in first month
|
||||
if(dd >= begin_day)
|
||||
return 1
|
||||
|
||||
else if(mm in begin_month to end_month) //holiday spans 3+ months and we're in the middle, day doesn't matter at all
|
||||
return 1
|
||||
|
||||
else if(end_month == begin_month) // starts and stops in same month, simplest case
|
||||
if(mm == begin_month && (dd in begin_day to end_day))
|
||||
return 1
|
||||
|
||||
else // starts in one year, ends in the next
|
||||
if(mm >= begin_month && dd >= begin_day) // Holiday ends next year
|
||||
return 1
|
||||
if(mm <= end_month && dd <= end_day) // Holiday started last year
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
// The actual holidays
|
||||
|
||||
/datum/holiday/new_year
|
||||
name = NEW_YEAR
|
||||
begin_day = 30
|
||||
begin_month = DECEMBER
|
||||
end_day = 2
|
||||
end_month = JANUARY
|
||||
|
||||
/datum/holiday/new_year/getStationPrefix()
|
||||
return pick("Party","New","Hangover","Resolution")
|
||||
|
||||
/datum/holiday/groundhog
|
||||
name = "Groundhog Day"
|
||||
begin_day = 2
|
||||
begin_month = FEBRUARY
|
||||
|
||||
/datum/holiday/valentines
|
||||
name = VALENTINES
|
||||
begin_day = 13
|
||||
end_day = 15
|
||||
begin_month = FEBRUARY
|
||||
|
||||
/datum/holiday/valentines/getStationPrefix()
|
||||
return pick("Love","Amore","Single","Smootch","Hug")
|
||||
|
||||
/datum/holiday/birthday
|
||||
name = "Birthday of Space Station 13"
|
||||
begin_day = 16
|
||||
begin_month = FEBRUARY
|
||||
|
||||
/datum/holiday/birthday/greet()
|
||||
var/game_age = text2num(time2text(world.timeofday, "YY")) - 3
|
||||
var/Fact
|
||||
switch(game_age)
|
||||
if(16)
|
||||
Fact = " SS13 is now old enough to drive!"
|
||||
if(18)
|
||||
Fact = " SS13 is now legal!"
|
||||
if(21)
|
||||
Fact = " SS13 can now drink!"
|
||||
if(26)
|
||||
Fact = " SS13 can now rent a car!"
|
||||
if(30)
|
||||
Fact = " SS13 can now go home and be a family man!"
|
||||
if(40)
|
||||
Fact = " SS13 can now suffer a midlife crisis!"
|
||||
if(50)
|
||||
Fact = " Happy golden anniversary!"
|
||||
if(65)
|
||||
Fact = " SS13 can now start thinking about retirement!"
|
||||
if(96)
|
||||
Fact = " Please send a time machine back to pick me up, I need to update the time formatting for this feature!" //See you later suckers
|
||||
if(!Fact)
|
||||
Fact = " SS13 is now [game_age] years old!"
|
||||
|
||||
return "Say 'Happy Birthday' to Space Station 13, first publicly playable on February 16th, 2003![Fact]"
|
||||
|
||||
/datum/holiday/random_kindness
|
||||
name = "Random Acts of Kindness Day"
|
||||
begin_day = 17
|
||||
begin_month = FEBRUARY
|
||||
|
||||
/datum/holiday/random_kindness/greet()
|
||||
return "Go do some random acts of kindness for a stranger!" //haha yeah right
|
||||
|
||||
/datum/holiday/leap
|
||||
name = "Leap Day"
|
||||
begin_day = 29
|
||||
begin_month = FEBRUARY
|
||||
|
||||
/datum/holiday/pi
|
||||
name = "Pi Day"
|
||||
begin_day = 14
|
||||
begin_month = MARCH
|
||||
|
||||
/datum/holiday/no_this_is_patrick
|
||||
name = "St. Patrick's Day"
|
||||
begin_day = 17
|
||||
begin_month = MARCH
|
||||
|
||||
/datum/holiday/no_this_is_patrick/getStationPrefix()
|
||||
return pick("Blarney","Green","Leprechaun","Booze")
|
||||
|
||||
/datum/holiday/april_fools
|
||||
name = APRIL_FOOLS
|
||||
begin_day = 1
|
||||
end_day = 2
|
||||
begin_month = APRIL
|
||||
|
||||
/datum/holiday/fourtwenty
|
||||
name = "Four-Twenty"
|
||||
begin_day = 20
|
||||
begin_month = APRIL
|
||||
|
||||
/datum/holiday/fourtwenty/getStationPrefix()
|
||||
return pick("Snoop","Blunt","Toke","Dank")
|
||||
|
||||
/datum/holiday/earth
|
||||
name = "Earth Day"
|
||||
begin_day = 22
|
||||
begin_month = APRIL
|
||||
|
||||
/datum/holiday/labor
|
||||
name = "Labor Day"
|
||||
begin_day = 1
|
||||
begin_month = MAY
|
||||
|
||||
/datum/holiday/firefighter
|
||||
name = "Firefighter's Day"
|
||||
begin_day = 4
|
||||
begin_month = MAY
|
||||
|
||||
/datum/holiday/firefighter/getStationPrefix()
|
||||
return pick("Burning","Blazing","Plasma","Fire")
|
||||
|
||||
/datum/holiday/summersolstice
|
||||
name = "Summer Solstice"
|
||||
begin_day = 21
|
||||
begin_month = JUNE
|
||||
|
||||
/datum/holiday/doctor
|
||||
name = "Doctor's Day"
|
||||
begin_day = 1
|
||||
begin_month = JULY
|
||||
|
||||
/datum/holiday/UFO
|
||||
name = "UFO Day"
|
||||
begin_day = 2
|
||||
begin_month = JULY
|
||||
|
||||
/datum/holiday/UFO/getStationPrefix() //Is such a thing even possible?
|
||||
return pick("Ayy","Truth","Tsoukalos","Mulder") //Yes it is!
|
||||
|
||||
/datum/holiday/writer
|
||||
name = "Writer's Day"
|
||||
begin_day = 8
|
||||
begin_month = JULY
|
||||
|
||||
/datum/holiday/friendship
|
||||
name = "Friendship Day"
|
||||
begin_day = 30
|
||||
begin_month = JULY
|
||||
|
||||
/datum/holiday/friendship/greet()
|
||||
return "Have a magical [name]!"
|
||||
|
||||
/datum/holiday/beer
|
||||
name = "Beer Day"
|
||||
begin_day = 5
|
||||
begin_month = AUGUST
|
||||
|
||||
/datum/holiday/pirate
|
||||
name = "Talk-Like-a-Pirate Day"
|
||||
begin_day = 19
|
||||
begin_month = SEPTEMBER
|
||||
|
||||
/datum/holiday/pirate/greet()
|
||||
return "Ye be talkin' like a pirate today or else ye'r walkin' tha plank, matey!"
|
||||
|
||||
/datum/holiday/pirate/getStationPrefix()
|
||||
return pick("Yarr","Scurvy","Yo-ho-ho")
|
||||
|
||||
/datum/holiday/programmers
|
||||
name = "Programmers' Day"
|
||||
|
||||
/datum/holiday/programmers/shouldCelebrate(dd, mm, yy) //Programmer's day falls on the 2^8th day of the year
|
||||
if(mm == 9)
|
||||
if(yy/4 == round(yy/4)) //Note: Won't work right on September 12th, 2200 (at least it's a Friday!)
|
||||
if(dd == 12)
|
||||
return 1
|
||||
else
|
||||
if(dd == 13)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/holiday/programmers/getStationPrefix()
|
||||
return pick("span>","DEBUG: ","null","/list","EVENT PREFIX NOT FOUND") //Portability
|
||||
|
||||
/datum/holiday/questions
|
||||
name = "Stupid-Questions Day"
|
||||
begin_day = 28
|
||||
begin_month = SEPTEMBER
|
||||
|
||||
/datum/holiday/questions/greet()
|
||||
return "Are you having a happy [name]?"
|
||||
|
||||
/datum/holiday/animal
|
||||
name = "Animal's Day"
|
||||
begin_day = 4
|
||||
begin_month = OCTOBER
|
||||
|
||||
/datum/holiday/animal/getStationPrefix()
|
||||
return pick("Parrot","Corgi","Cat","Pug","Goat","Fox")
|
||||
|
||||
/datum/holiday/smile
|
||||
name = "Smiling Day"
|
||||
begin_day = 7
|
||||
begin_month = OCTOBER
|
||||
|
||||
/datum/holiday/boss
|
||||
name = "Boss' Day"
|
||||
begin_day = 16
|
||||
begin_month = OCTOBER
|
||||
|
||||
/datum/holiday/halloween
|
||||
name = HALLOWEEN
|
||||
begin_day = 30
|
||||
begin_month = OCTOBER
|
||||
end_day = 2
|
||||
end_month = NOVEMBER
|
||||
|
||||
/datum/holiday/halloween/greet()
|
||||
return "Have a spooky Halloween!"
|
||||
|
||||
/datum/holiday/halloween/getStationPrefix()
|
||||
return pick("Bone-Rattling","Mr. Bones' Own","2SPOOKY","Spooky","Scary","Skeletons")
|
||||
|
||||
/datum/holiday/vegan
|
||||
name = "Vegan Day"
|
||||
begin_day = 1
|
||||
begin_month = NOVEMBER
|
||||
|
||||
/datum/holiday/kindness
|
||||
name = "Kindness Day"
|
||||
begin_day = 13
|
||||
begin_month = NOVEMBER
|
||||
|
||||
/datum/holiday/flowers
|
||||
name = "Flowers Day"
|
||||
begin_day = 19
|
||||
begin_month = NOVEMBER
|
||||
|
||||
/datum/holiday/hello
|
||||
name = "Saying-'Hello' Day"
|
||||
begin_day = 21
|
||||
begin_month = NOVEMBER
|
||||
|
||||
/datum/holiday/hello/greet()
|
||||
return "[pick(list("Aloha", "Bonjour", "Hello", "Hi", "Greetings", "Salutations", "Bienvenidos", "Hola", "Howdy"))]! " + ..()
|
||||
|
||||
/datum/holiday/human_rights
|
||||
name = "Human-Rights Day"
|
||||
begin_day = 10
|
||||
begin_month = DECEMBER
|
||||
|
||||
/datum/holiday/monkey
|
||||
name = "Monkey Day"
|
||||
begin_day = 14
|
||||
begin_month = DECEMBER
|
||||
|
||||
/datum/holiday/xmas
|
||||
name = CHRISTMAS
|
||||
begin_day = 23
|
||||
begin_month = DECEMBER
|
||||
end_day = 25
|
||||
|
||||
/datum/holiday/xmas/greet()
|
||||
return "Have a merry Christmas!"
|
||||
|
||||
/datum/holiday/boxing
|
||||
name = "Boxing Day"
|
||||
begin_day = 26
|
||||
begin_month = DECEMBER
|
||||
|
||||
/datum/holiday/friday_thirteenth
|
||||
name = "Friday the 13th"
|
||||
|
||||
/datum/holiday/friday_thirteenth/shouldCelebrate(dd, mm, yy)
|
||||
if(dd == 13)
|
||||
if(time2text(world.timeofday, "DDD") == "Fri")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/holiday/friday_thirteenth/getStationPrefix()
|
||||
return pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby")
|
||||
|
||||
/datum/holiday/easter
|
||||
name = EASTER
|
||||
var/const/days_early = 1 //to make editing the holiday easier
|
||||
var/const/days_extra = 1
|
||||
|
||||
/datum/holiday/easter/shouldCelebrate(dd, mm, yy)
|
||||
// Easter's celebration day is as snowflakey as Uhangi's code
|
||||
|
||||
if(!begin_month)
|
||||
|
||||
var/yy_string = "[yy]"
|
||||
// year = days after March 22that Easter falls on that year.
|
||||
// For 2015 Easter is on April 5th, so 2015 = 14 since the 5th is 14 days past the 22nd
|
||||
// If it's 2040 and this is still in use, invent a time machine and teach me a better way to do this. Also tell us about HL3.
|
||||
var/list/easters = list(
|
||||
"15" = 14,\
|
||||
"16" = 6,\
|
||||
"17" = 25,\
|
||||
"18" = 10,\
|
||||
"19" = 30,\
|
||||
"20" = 22,\
|
||||
"21" = 13,\
|
||||
"22" = 26,\
|
||||
"23" = 18,\
|
||||
"24" = 9,\
|
||||
"25" = 29,\
|
||||
"26" = 14,\
|
||||
"27" = 6,\
|
||||
"28" = 25,\
|
||||
"29" = 10,\
|
||||
"30" = 30,\
|
||||
"31" = 23,\
|
||||
"32" = 6,\
|
||||
"33" = 26,\
|
||||
"34" = 18,\
|
||||
"35" = 3,\
|
||||
"36" = 22,\
|
||||
"37" = 14,\
|
||||
"38" = 34,\
|
||||
"39" = 19,\
|
||||
"40" = 9,\
|
||||
)
|
||||
|
||||
begin_day = easters[yy_string]
|
||||
if(begin_day <= 9)
|
||||
begin_day += 22
|
||||
begin_month = MARCH
|
||||
else
|
||||
begin_day -= 9
|
||||
begin_month = APRIL
|
||||
|
||||
end_day = begin_day + days_extra
|
||||
end_month = begin_month
|
||||
if(end_day >= 32 && end_month == MARCH) //begins in march, ends in april
|
||||
end_day -= 31
|
||||
end_month++
|
||||
if(end_day >= 31 && end_month == APRIL) //begins in april, ends in june
|
||||
end_day -= 30
|
||||
end_month++
|
||||
|
||||
begin_day -= days_early
|
||||
if(begin_day <= 0)
|
||||
if(begin_month == APRIL)
|
||||
begin_day += 31
|
||||
begin_month-- //begins in march, ends in april
|
||||
|
||||
// world << "Easter calculates to be on [begin_day] of [begin_month] ([days_early] early) to [end_day] of [end_month] ([days_extra] extra) for 20[yy]"
|
||||
return ..()
|
||||
Reference in New Issue
Block a user