mirror of
https://github.com/goonstation/goonstation-2020.git
synced 2026-07-11 07:02:20 +01:00
1555 lines
58 KiB
Plaintext
1555 lines
58 KiB
Plaintext
//Content related to Operation Fuckable Owls
|
|
obj/decal/floor/displays/owlsign
|
|
|
|
|
|
|
|
icon = 'icons/misc/Owlzone.dmi'
|
|
icon_state = "owlsign-left"
|
|
|
|
|
|
/obj/item/paper/postcard/owlery
|
|
name = "Owlery post card"
|
|
desc = "It's pretty scuffed up. Someone has scrawled the words 'ROAD TRIP? Call Me! -J' on the back."
|
|
icon_state = "postcard-owlery"
|
|
interesting = "There are traces of hydrocarbons, collagens, proteins, and sugars deposited in the cellulose of the card"
|
|
|
|
sizex = 1066
|
|
sizey = 735
|
|
|
|
New()
|
|
..()
|
|
pixel_x = rand(-8, 8)
|
|
pixel_y = rand(-8, 8)
|
|
info = "<html><body style='margin:2px'><img src='[resource("images/arts/postcard_Owlery.png")]'></body></html>"
|
|
|
|
examine()
|
|
..()
|
|
|
|
attackby()
|
|
return
|
|
|
|
|
|
obj/item/paper/bombininote
|
|
name = "smelly note"
|
|
interesting = "There are traces of Escherichia Coli, Salmonella, and synthetic grasslike fibers dusted across the note. The handwriting seems mechanical."
|
|
desc = "A note which smells faintly of... Owls?"
|
|
info = {"We have your Bee, Bombini. We want 5 mill-ion dosh credits or your Bee friend will be spaced. Do not try to HOOTIN find us. We are very powerful and our location is impossible to find. -THE OWLS
|
|
<br>
|
|
<br><b>(This message brought to you by Gaggle Translation services, this message was translated to ENGLISH from OWL.)"}
|
|
|
|
obj/item/paper/paperwelcome
|
|
name = "paper- 'crumpled paper'"
|
|
desc = "This paper seems like a script for a speech, it's all crumpled up."
|
|
interesting = "A faint scent of butterscotch lingers on this paper"
|
|
info = {"<i>*cheerful*</i>Hallo and Welcome to the newly reopened Frontier Space Owlery!
|
|
<br>I'm Professor Reuben van der Hootens and I'm glad you're here! You're just in time for Hootenany Week 2053.
|
|
<br><i> *pause, cough out loud*</i>
|
|
<br><i> *speak quietly, rushed* </i>Due to ongoing and completely unfounded litigation, all persons entering this facility
|
|
<br>hereby fully waive all liability for any and all incidental damages or injuries.
|
|
<br>The Frontier Space Owlery is not responsible for any injury, loss, or damage sustained by any
|
|
<br>persons within the Owlery facilities under any circumstances.
|
|
<br><i> *cough loudly*</i>
|
|
<br><i> *sip water*</i>
|
|
<br><i> *cheerful* </i> Sorry about that folks! Have a safe and happy visit, bedankt, we have just a few rules to go over.
|
|
<ul>
|
|
<li>Keep your hands to yourselves at all times</li>
|
|
<li>Do not feed the owls</li>
|
|
<li>Do not make extended eye contact with the owls</li>
|
|
<li>Do not hoot at the owls, they find this very rude</li>
|
|
<li>Do not leave any objects or possessions in the Owldome</li>
|
|
<li>Do be sure to visit the Gift Shop next to the Cafeteria</li>
|
|
</ul>
|
|
<br>We appreciate your cooperation, and so will the owls!
|
|
<h5>The rest of the note is torn off.</h5>"}
|
|
|
|
obj/item/paper/rippednote
|
|
name = "paper- 'torn Up paper'"
|
|
desc = "This paper is barely able to be read, it looks like a bird ripped it up or something."
|
|
info = {"Kyle, I'm leaving this note here for when you find this. <i>What. The. Fuck.</i>
|
|
<br>Why did you decide this was a good spot for an APC? Come on man.
|
|
<br>The birds are going to destroy this thing here. Get this fixed you idiot and report to my office once you're done. -Alex"}
|
|
|
|
obj/item/paper/hootening
|
|
name = "paper- 'Experiment #620'"
|
|
desc = "An experiment log, part of it is obscured by a coffee stain."
|
|
info = {"<b>Experiment Log #620.</b>
|
|
<br>
|
|
<br>Hypothesis: Slow infusion of mutagens, stimulants, and Space Owl blood administered to captive SUBJECT #620-JA may induce
|
|
<br>glandular synthesis of the Hootagen compound. Cardiac stimulants included in mixture to avoid a repeat of Experiment #613.
|
|
<br>
|
|
<br>Hour 1: Beginning IV-transfusion of owl blood, mutagen and stimulant mixture to sedated SUBJECT #620-JA.
|
|
<br>Subject awakened immediately in significant distress. H.R. 125 bpm, B.P. 145/85
|
|
<br>Hour 2: Subject exhibiting 23% increased activity of the amygdala region and 28% increased blood serum levels of adrenaline.
|
|
<br>H.R. 158 bpm. B.P. 185/98
|
|
<br>Hour 3: Subject displaying onset of desired genetic drift. Additional 35% amygdala activation and addtional 42% rise of adrenaline count.
|
|
<br>Subject experiencing brief seizures. H.R. 229 bpm, B.P. 248/125, severe arryhthmia.
|
|
<br>Hour 4: Morphology changes consistent with Space Owl morphology continue steadily. Subject deliriously agitated. Snapped off three needles while I was
|
|
<br>extracting blood samples. Attempting to administer haloperidol.
|
|
<br>Hour 5: Halo FAILED suject brokem restraint , arm is broken. have
|
|
<br>been forced to seal and abandon chamber samples INTACT "}
|
|
|
|
obj/item/paper/cleanerorder
|
|
name = "paper- 'Mission Statement'"
|
|
info = {"<b>Mission Statement for NT/SEC/FORN #36322</b>
|
|
<br>Arrange civilian transport to Designated Facility (DF) 'Frontier Space Owlery' under assigned cover, rank: Substitute Custodian
|
|
<br>Note: This job position has been opened by on-site agent NT/SCI #41903 for you.
|
|
<br>
|
|
<br>
|
|
<br>RESTRICTIONS: UNDER NO CIRCUMSTANCES ARE YOU TO DAMAGE THE FACILITY AT LARGE OR HARM THE OWLS
|
|
<br>Maintain discretion and cover to prevent any unnecessary conflict with non-cleared facility employees
|
|
<br>
|
|
<br>Objectives:
|
|
<br>NT/SCI #41903 requests total data recovery and forensics redaction within the verbally described Clandestine Compartment (CC).
|
|
<br>Recover all primary documents within CC and destroy all further copies
|
|
<br>Recover all chemical and biological samples within CC with strict adherence to HAZ/BIO/L3 exfiltration procedures
|
|
<br>Terminate and redact hostile SUBJECT 620-JA within the CC Operating Chamber
|
|
<br>Perform a complete Chemical Redaction deployment against all forensic vectors and surfaces within the CC
|
|
<br>Secure CC entrance from unauthorized access or discovery
|
|
<br>Depart from DF with all recovered materials and assets and discreetly return to Minerva-5 for debriefing by NT/ADMIN/SCI #51352
|
|
<br>
|
|
<br>Mission Equipment:
|
|
<ul>
|
|
<li>1 Light Machine Gun with 3 Clips (CONDITION: USE ONLY IN CASE OF EXISTENTIAL THREAT TO FACILITY)
|
|
<li>1 .22 Caliber Suppressed Sidearm with 3 Clips (CONDITION: SELF-DEFENSE)
|
|
<li>10 Stealth Storages
|
|
<li>6 BLAM!-brand Cleaning Grenades
|
|
<li>1 'Sleepypen' Ketamine Injector (CONDITION: OPERATIONAL SECURITY)"}
|
|
|
|
obj/item/paper/cargoinvoice
|
|
name = "paper- 'Daily Order'"
|
|
desc = "This paper is barely able to be read, it looks like someone spilled coffee on it."
|
|
info = {"<b>Frontier Space Owlery: Daily Order</b>
|
|
<br>
|
|
<br>Shipment Contents:
|
|
<br><li>4 5-liter jugs of Hootin' Dan's Owl Nutrients
|
|
<br><li>5 Crates 144/ct Donk Pockets, Frozen
|
|
<br><li>1 copy of "A Qualitative Metholodogy of Applied Mutagenics, Vol. 3" by Dr. Amy Habicht."}
|
|
|
|
obj/item/paper/shuttle_heist
|
|
name = "DEAR FIRST SHIFT TEAM"
|
|
desc = "This note looks ANGRY."
|
|
info = {"<b>WHY: I ASK YOU</b>
|
|
<br>
|
|
<br>WHY
|
|
<br>WHY did you idiots let some drunk-ass drifter into our cargo dock
|
|
<br>WHY did you believe him when he said he works here
|
|
<br>WHY did you let him haul away a bunch of our kitchen crates
|
|
<br>AND WHY did you let him STEAL ONE OF OUR GODDAMN SHUTTLES"}
|
|
|
|
|
|
|
|
|
|
obj/item/paper/randomencounter
|
|
name = "paper- 'Weird-ass guy'"
|
|
info = {"Hey its me Jacob, shifts have just about changed but we ran into a crazy dude just now.
|
|
<br>Guy came running in from the tour route holding a fucking flamethrower!
|
|
<br>We were able to take him down before he could use the fucking thing. But im not really sure what to do with his stuff. For now we left it inside the confiscated items locker."}
|
|
|
|
obj/item/paper/getaway
|
|
name = "paper- 'Experiment #621: Success'"
|
|
info = {"As of writing this experiment #621 has been a success. With the blood samples from Experiment #620, I have finally created a reliable synthesis method for this 'Hootagen' shit.
|
|
<br>I will be presenting my findings in person to AH and the Professor at Aurora's. I'll have to leave James in charge here.
|
|
<br>He's an idiot but I doubt he could fuck up too badly in just a couple days.
|
|
<br>Had to tell the crew here I busted my arm when I slipped on spilled coffee. Blamed Addle for it and wrote him up, he's a klutz anyways.
|
|
<br>I'll call in a cleaner to wipe this lab down, can't be too careful nowadays with NT snooping around everywhere."}
|
|
|
|
obj/item/paper/fuckingidiot
|
|
name = "paper- 'Memo'"
|
|
info = {"Hey Alex, James here. Just leaving this note here for when you come back. Kyle and I were fixing a disposals jam and found one of the missing jugs of Owl Nutrients stuck in one of the tubes.
|
|
<br>Dang janitor must have tossed some full jugs out by accident before he took off. So I tossed it in with the rest of the supplies. Kinda gross, why's this Formula 620 stuff smell like rotting plants?
|
|
<br>Are you buying from a new producer? I heard it's unhealthy to switch owl feed brands like that."}
|
|
|
|
obj/item/paper/failedexperiment
|
|
name = "paper- 'Experiment #616 results'"
|
|
info = {"Experiment #616 has been a failure, the chemical synthesis method again did not yield the "Hootagen" I seek.
|
|
<br>Strangly though instead of the usual flash, explosion or dangerous gas reaction it seems it preciptated into a drab green substance smelling of decayed vegetation.
|
|
<br>I am experiencing severely intrusive violent thoughts and a really fucking bad headache I suspect stemmed from this brief exposure. Should be more careful around this fucking owl gunk."}
|
|
|
|
obj/item/paper/employment
|
|
name = "paper- 'New Horizons'"
|
|
info = {"So since this started happening I have decided to begin keeping a journal incase this all blows up in my face.
|
|
<br>Recently I was contacted by my old college friend Amy on behalf of her employer. Seems this Professor Hootens guy heard about my incident getting fired from NT14.
|
|
<br>He needs someone with my kinda background and rap sheet in advanced chemistry and genetics to do some classified research with Owls.
|
|
<br>Yep. Friggin' owl guy from the broadcasts needs me for some cloak and dagger shit.
|
|
<br>The deal is I'm supposed to run this tourist trap for the public, but secretly, continue the last RD's research on this synthetic compound named "Hootagen."
|
|
<br>Really weird vibe from this Professor fella but the pay and stock options are wild.
|
|
<br>Apparently the last guy on this assignment died from self inflicted stress wounds. He managed to ruin most of his research notes in the incident too, what an asshole.
|
|
<br>
|
|
<br>They have assigned me command of this small station on the frontier as Research Director and have a provided a significant operations budget
|
|
<br>with the expectation that I'll keep up appearances for the normal tourist nonsense while I'm here.
|
|
<br>So I have decided, probably against my better judgment to accept their offer. I can only hope these guys don't plan to off me once its all said and done. -Dr. Alex Cornwall, PhD."}
|
|
|
|
obj/item/paper/hootagenhint
|
|
name = "paper- 'Hootagen Research Notes'"
|
|
info = {"Do research on things that turn into other things because you need to turn the person into another thing? Like a chameleon but different maybe?
|
|
<br>
|
|
<br>How the fuck am I supposed to turn somebody into an owl without them fucking dying?
|
|
<br>
|
|
<br>What do owls do? Fly? How the fuck can a human fly thats impossible."}
|
|
|
|
/obj/item/paper/janitorlist
|
|
name = "steve's daily notes"
|
|
info = {"<h3>steve's daily notes</h3>
|
|
<hr>
|
|
<p>
|
|
<br>grand re-opening week is almost here
|
|
<br>this place needs to sparkle!
|
|
</p>
|
|
<p>
|
|
<br><i>6:30 - 7:00</i>
|
|
<br>sorted and ejected overnight disposals
|
|
<br>minimal trash
|
|
<br>
|
|
<br><i>7:00 - 9:00</i>
|
|
<br>cleaned owl pens after morning feeding
|
|
<br>sanitized owl feeding troughs
|
|
<br>friggin' Bitey ruined another one of my mops
|
|
<br>need to order some spares tonight
|
|
<br>
|
|
<br><i>9:00 - 9:30</i>
|
|
<br>skimmed filtration pond
|
|
<br>filters 4 and 7 will need to be replaced soon
|
|
<br>waste water storage at 65% capacity
|
|
<br>fresh water reservoirs at 77% capacity
|
|
<br>
|
|
<br><i>9:45 - 11:30</i>
|
|
<br>inspected and cleaned owl dome
|
|
<br>pathways and water features cleaned
|
|
<br>raked up dead foliage
|
|
<br>disposed of 6 owl pellets, birds have been busy
|
|
<br>
|
|
<br>
|
|
<br><i>11:30 - 13:00</i>
|
|
<br>shower break, lunch with Greg
|
|
<br>
|
|
<br><i>13:00 - 14:00</i>
|
|
<br>scrubbed and waxed cafeteria floors. lookin good!
|
|
<br>repaired loose sink knob in cafe
|
|
<br>we're not even open to the public yet, who
|
|
<br>keeps sticking gum under the tables?
|
|
<br>
|
|
<br><i>14:00 - 15:00</i>
|
|
<br>cleaned kitchen floors and fixtures, chatted with chef about opening week preparations.
|
|
<br>sloppy joes tomorrow!
|
|
<br>
|
|
<br><i>15:00 - 16:30</i>
|
|
<br>cleaned lobby, main hall junction, annex, public restrooms
|
|
<br>tidied up the prof hootens bot, got it all nice and polished up
|
|
<br>real hootens is gonna be here in a couple days, don't wanna disappoint!
|
|
<br>always a big day when he's around
|
|
<br>
|
|
<br><i>16:30 - 17:45</i>
|
|
<br>cleaned staff wing and head offices. restocked restrooms.
|
|
<br>
|
|
<br><i>17:45 - 18:30</i>
|
|
<br>swept maintenance tunnels. found a leak in the plumbing near the office wing.
|
|
<br>NOT water. corrosive puddle burned up another of my damn mops!
|
|
<br>schematics don't indicate any hazardous materials plumbing around this area
|
|
<br>who the hell installed this?
|
|
<br>needs further inspection, this shit ain't safe
|
|
<br>
|
|
<br><i>19:45</i>
|
|
<br>found even more non-standard plumbing containing volatile liquids. lacks proper labelling. serious fire and safety risks!
|
|
<br>cornwall has no idea what i'm talking about and said that area is off limits and that i should mind my own business
|
|
<br>does james know about this?
|
|
<br>safety is never off limits!! this IS my business!
|
|
<br>now i gotta write up another friggin incident report and a formal complaint
|
|
</p>"}
|
|
|
|
/obj/item/audio_tape/beecrash
|
|
New()
|
|
..()
|
|
messages = list("Jeez B, I think we emptied out your keg, you sure it's safe to be flying around this late?",
|
|
"*rowdy buzzing*",
|
|
"*rowdy hooting*",
|
|
"*BANG*",
|
|
"*KEEERRUUUUUUNCHHHH*",
|
|
"*alarms*",
|
|
"*hissing air*",
|
|
"...",
|
|
"Bombini, are you alright? Damn you really messed up your ship.",
|
|
"*solemn buzzing*",
|
|
"*reassuring hoots*",
|
|
"I think we should get out of here guys!")
|
|
speakers = list("Robotic voice", "Bombini", "Unknown Owl", "???", "***", "!!!", "???", "...", "Robotic voice", "Bombini", "Unknown Owl", "Robotic voice")
|
|
|
|
/obj/item/audio_tape/beepoker
|
|
New()
|
|
..()
|
|
messages = list("Come on B, cheer up! You're on quite the winning streak tonight!",
|
|
"*buzzing*",
|
|
"*pondering hoots*",
|
|
"Alright everyone place your bets.",
|
|
"...",
|
|
"Bombini raises. Bitey raises. Fluffums folds.",
|
|
"*pensive hoots*",
|
|
"Bombini raises. Bitey raises.",
|
|
"Erm, Bombini are you sure? Do you even have that kind of cash?",
|
|
"*confident buzzing*")
|
|
speakers = list("Robotic voice", "Bombini", "Unknown Owl", "Robotic voice", "???", "Robotic voice", "Unknown Owl", "Robotic voice", "Bombini")
|
|
|
|
//FUCKABLE TURFS
|
|
/turf/unsimulated/wall/setpieces/fakewindow
|
|
name = "Strong Window"
|
|
desc = "Wow this looks like a tough god damn window, damn."
|
|
icon = 'icons/obj/window.dmi'
|
|
icon_state = "rwindow"
|
|
opacity = 0
|
|
|
|
|
|
// setpiece decals
|
|
|
|
/obj/decal/fakeobjects/sealed_door/owlery
|
|
name = "Busted Airlock"
|
|
desc = "This airlock is all shot up. The control panel seems to have taken several hits and is beyond repair."
|
|
icon = 'icons/misc/Owlzone.dmi'
|
|
icon_state = "airlock_broken"
|
|
|
|
/obj/decal/fakeobjects/pipe/radioactive
|
|
desc = "This pipe is kinda warm. Huh."
|
|
interesting = "Radiological decay detected."
|
|
|
|
/obj/decal/fakeobjects/pipe/sarin
|
|
desc = "This pipe seems totally normal."
|
|
interesting = "Trace amounts of hazardous nerve agent detected."
|
|
|
|
/obj/decal/fakeobjects/pipe/acid
|
|
desc = "This pipe is pretty corroded around the fittings. Huh."
|
|
interesting = "Pipe fittings and adjacent metals exhibit damage consistent with exposure to strong acids."
|
|
|
|
|
|
//FUCKABLE ITEMS
|
|
|
|
/obj/item/card/id/owlmaint
|
|
icon_state = "id_com"
|
|
access = list(access_owlerymaint)
|
|
registered = null
|
|
assignment = null
|
|
title = null
|
|
|
|
/obj/item/card/id/owlsecurity
|
|
icon_state = "id_sec"
|
|
access = list(access_owlerysec)
|
|
registered = null
|
|
assignment = null
|
|
title = null
|
|
|
|
/obj/item/card/id/owlgold
|
|
name = "identification card"
|
|
icon_state = "gold"
|
|
item_state = "gold_id"
|
|
desc = "This card is important!"
|
|
access = list(access_owlerycommand, access_owlerysec, access_owlerymaint)
|
|
registered = null
|
|
assignment = null
|
|
title = null
|
|
|
|
obj/decal/fakeobjects/bustedpod
|
|
name = "Busted Escape Pod"
|
|
desc = "A escape pod for escaping. It seems to be busted."
|
|
icon = 'icons/obj/ship.dmi'
|
|
icon_state = "escape"
|
|
density = 1
|
|
anchored = 1
|
|
|
|
/obj/item/reagent_containers/food/snacks/ingredient/egg/critter/owl/madness
|
|
critter_type = /obj/critter/madnessowl
|
|
|
|
obj/item/gnomechompski/elf
|
|
name = "Gnelf Cnompski"
|
|
desc = "Wait this isn't a gnome..."
|
|
icon = 'icons/obj/junk.dmi'
|
|
icon_state = "gnelf"
|
|
item_state = "gnelf"
|
|
|
|
/obj/item/gun/russianhootolver
|
|
desc = "Rootin hootin tootin fun for the whole family!"
|
|
name = "Russian Hootolver"
|
|
icon = 'icons/obj/gun.dmi'
|
|
icon_state = "hootolver"
|
|
w_class = 3.0
|
|
throw_speed = 2
|
|
throw_range = 10
|
|
m_amt = 2000
|
|
contraband = 0
|
|
var/shotsLeft = 0
|
|
var/shotsMax = 6
|
|
|
|
New()
|
|
src.shotsLeft = rand(1,shotsMax)
|
|
..()
|
|
return
|
|
|
|
attack_self(mob/user as mob)
|
|
reload_gun(user)
|
|
|
|
|
|
attack(mob/M as mob, mob/user as mob)
|
|
fire_gun(user)
|
|
|
|
proc/fire_gun(mob/user as mob)
|
|
if(src.shotsLeft > 1)
|
|
src.shotsLeft--
|
|
for(var/mob/O in AIviewers(user, null))
|
|
if (O.client)
|
|
O.show_message("<span style=\"color:red\">[user] points the gun at \his head. Wonk!</span>", 1, "<span style=\"color:red\">Wonk!</span>", 2)
|
|
playsound(user, "sound/vox/wonk.ogg", 70, 1)
|
|
|
|
return 0
|
|
else if(src.shotsLeft == 1)
|
|
src.shotsLeft = 0
|
|
playsound(user, "sound/voice/animal/hoot.ogg", 70, 1)
|
|
for(var/mob/O in AIviewers(user, null))
|
|
if (O.client) O.show_message("<span style=\"color:red\"><B>HOOT!</B> [user] explodes revealing an owl within.</span>", 1, "<span style=\"color:red\">You hear an owl.</span>", 2)
|
|
SPAWN_DBG(1 DECI SECOND)
|
|
user.owlgib()
|
|
return 1
|
|
else
|
|
boutput(user, "<span style=\"color:blue\">You need to reload the gun.</span>")
|
|
return 0
|
|
|
|
proc/reload_gun(mob/user as mob)
|
|
if(src.shotsLeft <= 0)
|
|
user.visible_message("<span style=\"color:blue\">[user] finds a bullet on the ground and loads it into the gun, spinning the cylinder.</span>", "<span style=\"color:blue\">You find a bullet on the ground and load it into the gun, spinning the cylinder.</span>")
|
|
src.shotsLeft = rand(1, shotsMax)
|
|
else if(src.shotsLeft >= 1)
|
|
user.visible_message("<span style=\"color:blue\">[user] spins the cylinder.</span>", "<span style=\"color:blue\">You spin the cylinder.</span>")
|
|
src.shotsLeft = rand(1, shotsMax)
|
|
|
|
/obj/item/plutonium_core/hootonium_core
|
|
name = "Hootonium Core"
|
|
desc = "A core of pure Hootonium, you can feel immense power radiating from within it."
|
|
icon = 'icons/misc/owlzone.dmi'
|
|
icon_state = "hootonium"
|
|
var/chosen = 0
|
|
|
|
plutonize(var/usrverbs)
|
|
usrverbs += /proc/owl_slam
|
|
|
|
unplutonize(var/usrverbs)
|
|
usrverbs -= /proc/owl_slam
|
|
|
|
attack_self(mob/user as mob)
|
|
var/input = alert("Would you like to attempt to absorb the core into your body?","Hoot or not to hoot.", "Yes","No")
|
|
if (input == "Yes" && chosen == 0)
|
|
chosen = 1
|
|
usr.visible_message("<span style=\"color:red\"><b>[usr] absorbs the [src] into their body!")
|
|
sleep(15)
|
|
playsound(user.loc, "sound/items/eatfood.ogg", rand(10,50), 1)
|
|
usr.reagents.add_reagent("hootonium", 10)
|
|
qdel(src)
|
|
|
|
/datum/ailment/disease/hootonium
|
|
name = "Hyperhootemia"
|
|
scantype = "Virus"
|
|
cure = "Space Owl Diffusion"
|
|
max_stages = 3
|
|
associated_reagent = "hootonium" // associated reagent, duh
|
|
|
|
/datum/ailment/disease/hootonium/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D)
|
|
|
|
if (..())
|
|
return
|
|
switch(D.stage)
|
|
if(1)
|
|
if (prob(25))
|
|
boutput(affected_mob, "<B>[pick("It feels wrong, I feel wrong.", "Am I okay?", "I can feel it, its under my skin.", "I need help, I WANT HELP!")]<B/>")
|
|
if (prob(50))
|
|
affected_mob.make_jittery(25)
|
|
if (prob(15))
|
|
playsound(get_turf(affected_mob), pick('sound/impact_sounds/Slimy_Splat_1.ogg','sound/misc/meat_plop.ogg'), 100, 1)
|
|
make_cleanable( /obj/decal/cleanable/vomit, affected_mob.loc)
|
|
new /mob/living/critter/small_animal/bird/owl(get_turf(affected_mob))
|
|
for(var/mob/O in viewers(affected_mob, null))
|
|
boutput(O, "<span style=\"color:red\"><b>[affected_mob] [pick("horks", "vomits", "spews")] up an Owl!</b>")
|
|
|
|
if(2)
|
|
playsound(affected_mob, "sound/effects/Heart Beat.ogg", 70, 1)
|
|
if (prob(50))
|
|
for(var/mob/O in viewers(affected_mob, null))
|
|
playsound(O, "sound/voice/animal/hoot.ogg", 70, 1)
|
|
O.show_message(text("<span style=\"color:red\"><B>[]</B> hoots uncontrollably!</span>", affected_mob), 1)
|
|
affected_mob.changeStatus("stunned", 10 SECONDS)
|
|
affected_mob.changeStatus("weakened", 10 SECONDS)
|
|
affected_mob.make_jittery(250)
|
|
affected_mob.drop_item()
|
|
affected_mob.hand = !affected_mob.hand
|
|
affected_mob.drop_item()
|
|
affected_mob.hand = !affected_mob.hand
|
|
if (prob(35))
|
|
boutput(affected_mob, "<B>[pick("Oh g-HOOT", "Whats happe-ho-ing to me?", "It hurts!")]</B>")
|
|
if (prob(15))
|
|
playsound(get_turf(affected_mob), pick('sound/impact_sounds/Slimy_Splat_1.ogg','sound/misc/meat_plop.ogg'), 100, 1)
|
|
make_cleanable( /obj/decal/cleanable/vomit, affected_mob.loc)
|
|
new /mob/living/critter/small_animal/bird/owl(get_turf(affected_mob))
|
|
for(var/mob/O in viewers(affected_mob, null))
|
|
boutput(O, "<span style=\"color:red\"><b>[affected_mob] [pick("horks", "vomits", "spews")] up an Owl!</b>")
|
|
|
|
if(3)
|
|
if(prob(25))
|
|
boutput(affected_mob, "<span style=\"color:red\">You feel your skin getting rougher!</span>")
|
|
boutput(affected_mob, "<span style=\"color:red\">Your body convulses painfully!</span>")
|
|
if(prob(25))
|
|
affected_mob.drop_item()
|
|
affected_mob.hand = !affected_mob.hand
|
|
affected_mob.drop_item()
|
|
affected_mob.hand = !affected_mob.hand
|
|
random_brute_damage(affected_mob, 5)
|
|
affected_mob.take_oxygen_deprivation(5)
|
|
affected_mob.updatehealth()
|
|
affected_mob.changeStatus("stunned", 10 SECONDS)
|
|
affected_mob.changeStatus("weakened", 10 SECONDS)
|
|
affected_mob.make_jittery(250)
|
|
for(var/mob/O in viewers(affected_mob, null))
|
|
playsound(O, "sound/voice/animal/hoot.ogg", 70, 1)
|
|
O.show_message(text("<span style=\"color:red\"><B>[]</B> hoots uncontrollably!</span>", affected_mob), 1)
|
|
if(prob(25))
|
|
boutput(affected_mob, "<B>[pick("Who-WHO", "HOoooT", "neST!")]</B>")
|
|
if (prob(15))
|
|
playsound(get_turf(affected_mob), pick('sound/impact_sounds/Slimy_Splat_1.ogg','sound/misc/meat_plop.ogg'), 100, 1)
|
|
make_cleanable( /obj/decal/cleanable/vomit, affected_mob.loc)
|
|
new /mob/living/critter/small_animal/bird/owl(get_turf(affected_mob))
|
|
for(var/mob/O in viewers(affected_mob, null))
|
|
boutput(O, "<span style=\"color:red\"><b>[affected_mob] [pick("horks", "vomits", "spews")] up an Owl!</b>")
|
|
if(prob(10))
|
|
var/obj/critter/hootening/P = new/obj/critter/hootening(affected_mob.loc)
|
|
P.name = affected_mob.real_name
|
|
affected_mob.gib()
|
|
|
|
/obj/item/reagent_containers/food/snacks/candy/butterscotch
|
|
name = "butterscotch candy"
|
|
desc = "It's one of those old timey butterscotch candies like your grampa used to have."
|
|
real_name = "butterscotch"
|
|
icon_state = "butterscotch"
|
|
food_effects = list("food_energized")
|
|
|
|
/obj/machinery/floorflusher/bathtub
|
|
name = "bathtub"
|
|
desc = "Now, that looks cosy!"
|
|
icon = 'icons/misc/owlzone.dmi'
|
|
icon_state = "floorflush_c"
|
|
|
|
/obj/item/poster/titled_photo/bee
|
|
name = "Er- Found? Poster"
|
|
desc = "A poster of a m------ Bee loved by all."
|
|
poster_image = 'icons/missingbee.png'
|
|
line_b1 = "<center><b> THANK YOU </b></center>"
|
|
line_b2 = "<b>LAST SEEN:</b> New Store!"
|
|
line_b3 = "<b>NOTES:</b> Responds to being called Bombini"
|
|
line_below_photo = "HAVE YOU SEEN THIS BEE? YES YOU HAVE"
|
|
line_photo_subtitle = "2nd MOST RECENT PHOTO"
|
|
line_title = "YOU HAVE SEEN THIS BEE?"
|
|
|
|
/obj/reagent_dispensers/beerkeg/owldrugs
|
|
name = "Hootin' Dan's Owl Nutrients"
|
|
desc = "A mix of drugs to stimulate owl growth. A label on the side says 'DON'T' The rest has been pecked off."
|
|
icon = 'icons/misc/owlzone.dmi'
|
|
icon_state = "owlfeed"
|
|
|
|
New()
|
|
..()
|
|
reagents.remove_reagent("beer",1000)
|
|
reagents.add_reagent("omnizine",150)
|
|
reagents.add_reagent("teporone", 150)
|
|
reagents.add_reagent("synaptizine", 150)
|
|
reagents.add_reagent("saline", 150)
|
|
reagents.add_reagent("salbutamol", 150)
|
|
reagents.add_reagent("methamphetamine", 150)
|
|
|
|
/obj/reagent_dispensers/beerkeg/owlfeed
|
|
name = "Hootin' Dan's Owl Feed"
|
|
desc = "A mixture of bread, nutrients and preservatives for owls. Smells like gross plants."
|
|
icon = 'icons/misc/owlzone.dmi'
|
|
icon_state = "owlfeed"
|
|
|
|
New()
|
|
..()
|
|
reagents.remove_reagent("beer",1000)
|
|
reagents.add_reagent("bread",800)
|
|
reagents.add_reagent("silicate", 50)
|
|
reagents.add_reagent("madness_toxin", 50)
|
|
reagents.add_reagent("lexorin", 50)
|
|
reagents.add_reagent("formaldehyde", 50)
|
|
|
|
|
|
/obj/machinery/power/apc/owlery
|
|
noalerts = 1
|
|
start_charge = 0
|
|
req_access = access_owlerymaint
|
|
|
|
|
|
/obj/owlerysign/owlplaque
|
|
desc = "Beyond here lies the Owl Habitation Wing."
|
|
name = "Informational Plaque"
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "rip"
|
|
anchored = 1.0
|
|
opacity = 0
|
|
density = 0
|
|
|
|
/obj/owlerysign/officeplaque
|
|
desc = "Beyond here lies the office wing."
|
|
name = "Informational Plaque"
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "rip"
|
|
anchored = 1.0
|
|
opacity = 0
|
|
density = 0
|
|
|
|
/obj/owlerysign/staffplaque
|
|
desc = "Beyond here lies the staff wing."
|
|
name = "Informational Plaque"
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "rip"
|
|
anchored = 1.0
|
|
opacity = 0
|
|
density = 0
|
|
|
|
/obj/item/device/key/owl
|
|
name = "Owlish Key"
|
|
desc = "This key was found in an owl pellet. Yuck."
|
|
icon = 'icons/misc/aprilfools.dmi'
|
|
interesting = "Filthy. GROSS"
|
|
icon_state = "key"
|
|
|
|
/obj/owldoor
|
|
name = "Strange Looking Wall"
|
|
desc = "This wall has a small slit in middle, huh."
|
|
icon = 'icons/turf/walls_auto.dmi'
|
|
icon_state = "mapwall_r"
|
|
density = 1
|
|
opacity = 1
|
|
anchored = 1
|
|
|
|
attackby(var/obj/item/W, var/mob/user)
|
|
if (istype(W, /obj/item/device/key/owl))
|
|
boutput(usr, "You insert the key into the wall causing it to slide into a crevice below!")
|
|
playsound(src.loc, "sound/effects/rockscrape.ogg", 50, 1, -1)
|
|
qdel(src)
|
|
|
|
/datum/projectile/wonk
|
|
power = 10
|
|
cost = 20
|
|
dissipation_rate = 1
|
|
ks_ratio = 0.0
|
|
shot_sound = 'sound/vox/wonk.ogg'
|
|
sname = "Wonkonize"
|
|
shot_number = 1
|
|
window_pass = 1
|
|
icon = 'icons/effects/hallucinations.dmi'
|
|
icon_state = "yee"
|
|
|
|
on_hit(atom/hit)
|
|
if(istype(hit,/mob/living/carbon/human))
|
|
var/mob/living/carbon/human/M = hit
|
|
if (!(M.wear_mask && istype(M.wear_mask, /obj/item/clothing/mask/owl_mask)))
|
|
for(var/obj/item/clothing/O in M)
|
|
M.u_equip(O)
|
|
if (O)
|
|
O.set_loc(M.loc)
|
|
O.dropped(M)
|
|
O.layer = initial(O.layer)
|
|
|
|
var/obj/item/clothing/under/gimmick/owl/owlsuit = new /obj/item/clothing/under/gimmick/owl(M)
|
|
owlsuit.cant_self_remove = 1
|
|
var/obj/item/clothing/mask/owl_mask/owlmask = new /obj/item/clothing/mask/owl_mask(M)
|
|
owlmask.cant_self_remove = 1
|
|
|
|
M.equip_if_possible(owlsuit, M.slot_w_uniform)
|
|
M.equip_if_possible(owlmask, M.slot_wear_mask)
|
|
M.set_clothing_icon_dirty()
|
|
|
|
/obj/item/gun/energy/wonkgun
|
|
name = "Prototype W.0-NK Laser Rifle"
|
|
desc = "Wonk!"
|
|
item_state = "gun"
|
|
force = 5.0
|
|
icon_state = "bullpup"
|
|
rechargeable = 0
|
|
custom_cell_max_capacity = 100
|
|
|
|
New()
|
|
cell = new/obj/item/ammo/power_cell/self_charging
|
|
current_projectile = new/datum/projectile/wonk
|
|
projectiles = list(current_projectile)
|
|
..()
|
|
|
|
update_icon()
|
|
if(cell)
|
|
var/ratio = min(1, src.cell.charge / src.cell.max_charge)
|
|
ratio = round(ratio, 0.25) * 100
|
|
src.icon_state = "bullpup[ratio]"
|
|
|
|
//FUCKABLE MOBS
|
|
/obj/critter/owl_mannequin
|
|
name = "Animatronic Owl"
|
|
desc = "An owl made of cogs and gears. It smells faintly of oil and ozone."
|
|
icon = 'icons/misc/bird.dmi'
|
|
icon_state = "smallowl"
|
|
dead_state = "smallowl-dead"
|
|
atkcarbon = 0
|
|
atksilicon = 0
|
|
health = 10
|
|
firevuln = 1 //Typical store display mannequin has a styrofoam body and metal skeleton. Styrofoam /burns/
|
|
brutevuln = 0.5
|
|
aggressive = 0
|
|
defensive = 0
|
|
wanderer = 0
|
|
generic = 0
|
|
flying = 0
|
|
death_text = "%src% tips over, its joints seizing and locking up. It does not move again."
|
|
angertext = "seems to stare at"
|
|
|
|
var/does_creepy_stuff = 1
|
|
var/typeName = "Generic"
|
|
|
|
process()
|
|
if(!..())
|
|
return 0
|
|
if (!alive || !does_creepy_stuff)
|
|
return
|
|
|
|
if (prob(6))
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 60, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] emits [pick("a soft", "a quiet", "a curious", "an odd", "an ominous", "a strange", "a forboding", "a peculiar", "a faint")] [pick("ticking", "tocking", "humming", "droning", "clicking")] hoot.</span>")
|
|
|
|
if (prob(6))
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 60, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] emits [pick("a peculiar", "a worried", "a suspicious", "a reassuring", "a gentle", "a perturbed", "a calm", "an annoyed", "an unusual")] [pick("ratcheting", "rattling", "clacking", "whirring")] hoot.</span>")
|
|
|
|
/obj/machinery/portableowl/owlzone
|
|
name = "Disabled Animatronic Owl"
|
|
desc = "A disabled robot owl."
|
|
icon = 'icons/misc/bird.dmi'
|
|
icon_state = "smallowl"
|
|
event_handler_flags = USE_PROXIMITY | USE_FLUID_ENTER
|
|
anchored = 1
|
|
density = 1
|
|
last_flash = 0
|
|
flash_prob = 80
|
|
|
|
flash()
|
|
if (src.last_flash && world.time < src.last_flash + 10)
|
|
return
|
|
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 70, 1)
|
|
flick("smallowl-flap", src)
|
|
src.last_flash = world.time
|
|
|
|
HasProximity(atom/movable/AM as mob|obj)
|
|
if (src.last_flash && world.time < src.last_flash + 10)
|
|
return
|
|
|
|
if (iscarbon(AM))
|
|
var/mob/living/carbon/M = AM
|
|
if ((M.m_intent != "walk") && (src.anchored))
|
|
if (M.client) // I can't take it anymore I can't take the destiny owls reacting to the monkey it's driving me mad
|
|
if (prob(flash_prob))
|
|
src.flash()
|
|
|
|
attackby(obj/item/W as obj, mob/user as mob)
|
|
if (iswrenchingtool(W))
|
|
add_fingerprint(user)
|
|
src.anchored = !src.anchored
|
|
|
|
if (!src.anchored)
|
|
user.show_message(text("<span style=\"color:red\">[src] can now be moved.</span>"))
|
|
|
|
else if (src.anchored)
|
|
user.show_message(text("<span style=\"color:red\">[src] is now secured.</span>"))
|
|
|
|
attack_hand(user)
|
|
if (src.anchored)
|
|
if (src.last_flash && world.time < src.last_flash + 10)
|
|
return
|
|
name = "Not so Disabled Animatronic Owl"
|
|
src.flash()
|
|
|
|
/obj/critter/owl_presentor
|
|
name = "Professor Hootens"
|
|
desc = "It's Professor Hootens! The leading expert on Space Owls, if it was the real Hootens of course. This is just an animatronic stand-in."
|
|
icon = 'icons/misc/lunar.dmi'
|
|
icon_state = "jammannequin"
|
|
dead_state = "jammannequin-dead"
|
|
atkcarbon = 0
|
|
atksilicon = 0
|
|
health = 10
|
|
firevuln = 1 //Typical store display mannequin has a styrofoam body and metal skeleton. Styrofoam /burns/
|
|
brutevuln = 0.5
|
|
aggressive = 0
|
|
defensive = 0
|
|
wanderer = 0
|
|
generic = 0
|
|
flying = 0
|
|
death_text = "%src% tips over, its joints seizing and locking up. It does not move again."
|
|
angertext = "seems to stare at"
|
|
|
|
var/does_creepy_stuff = 1
|
|
var/typeName = "Generic"
|
|
|
|
process()
|
|
if(!..())
|
|
return 0
|
|
if (!alive || !does_creepy_stuff)
|
|
return
|
|
|
|
if (prob(5))
|
|
playsound(src.loc, "sound/misc/automaton_ratchet.ogg", 50, 1)
|
|
src.visible_message("<span class='game say'><span class='name'>[src]</span> says, \"[pick("The Owls are fine!", "Welcome to the Frontier Space Owlery, please follow the glowing signs. A tour guide will be waiting for you.", "Did you know? By 2063, it is expected that there will be more owls on Earth than human beings.", "Remember, do not touch the owls. Ddon't do it.", "By entering the 50 square kilometers surrounding the Frontier Space Owlery you agree to remove your right to file a civil lawsuit against the owlery for any reason including death.", "Please keep all pets away from Owl feed or the Owls.", "Remember to say 'HI!' to Greg, our friendly cyborg.", "The Frontier Space Owlery thanks our generous benefactors at Donk Co., LLC. The sole creators and copyright holders of Donk Pockets TM!")]\"")
|
|
if (prob(5))
|
|
playsound(src.loc, "sound/misc/automaton_spaz.ogg", 50, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src]</b> [pick("turns", "pivots", "twitches", "spins")].</span>")
|
|
src.dir = pick(alldirs)
|
|
|
|
obj/critter/madnessowl
|
|
name = "space owl"
|
|
desc = "This owl has bloodshot eyes and seems to be snarling at you. What the fuck."
|
|
icon = 'icons/misc/Owlzone.dmi'
|
|
icon_state = "madsmallowl-flap"
|
|
dead_state = "madsmallowl-dead"
|
|
density = 1
|
|
health = 25
|
|
aggressive = 1
|
|
defensive = 1
|
|
wanderer = 1
|
|
opensdoors = 0
|
|
atkcarbon = 1
|
|
atksilicon = 1
|
|
firevuln = 1
|
|
brutevuln = 1
|
|
angertext = "hoots angrily at"
|
|
death_text = "%src% falls into a heap on the floor and releases a gargled hoot."
|
|
butcherable = 2
|
|
flying = 1
|
|
chases_food = 1
|
|
scavenger = 1
|
|
var/turftarget = null
|
|
|
|
Bump(atom/movable/AM)
|
|
..()
|
|
if(isobj(AM))
|
|
|
|
if(istype(AM, /obj/window))
|
|
AM:health = 0
|
|
AM:smash()
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> smashes into \the [AM]!</span>")
|
|
else
|
|
return
|
|
|
|
ai_think()
|
|
..()
|
|
if (task == "thinking" || task == "wandering" || task == "chasing")
|
|
if (prob(10))
|
|
if (!src.muted)
|
|
src.visible_message("<b>[src]</b> hoots!")
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 50, 1)
|
|
else
|
|
if (prob(10))
|
|
flick("[src.icon_state]-flap", src)
|
|
src.visible_message("<b>[src]</b> flaps.")
|
|
playsound(src.loc, pick(sounds_rustle), 50, 1)
|
|
|
|
|
|
on_grump()
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 60, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] hoots angrily!</b></span>", 1)
|
|
|
|
CritterAttack(mob/M)
|
|
playsound(src.loc, pick(sounds_rustle), 60, 1, -1)
|
|
if(ismob(M))
|
|
src.visible_message("<span class='combat'><B>[src]</B> swoops at [src.target] and bites a chunk off off them!</span>")
|
|
random_brute_damage(src.target, 10)
|
|
playsound(src.loc, "sound/impact_sounds/Flesh_tear_1.ogg", 35, 1, -1)
|
|
src.pixel_x = -5
|
|
src.pixel_y = -5
|
|
sleep(rand(4,6))
|
|
turftarget = get_turf(target)
|
|
src.set_loc(turftarget)
|
|
playsound(src.loc, "sound/impact_sounds/Flesh_tear_3.ogg", 35, 1, -1)
|
|
random_brute_damage(src.target, 2)
|
|
SPAWN_DBG(rand(1,10))
|
|
src.attacking = 0
|
|
|
|
return
|
|
|
|
ChaseAttack(mob/M)
|
|
if(prob(25))
|
|
playsound(src.loc, pick(sounds_rustle), 60, 1, -1)
|
|
if(ismob(M))
|
|
src.visible_message("<span class='combat'><B>[src]</B> swoops around and circles [src.target] before biting a chunk off off them!</span>")
|
|
random_brute_damage(src.target, 10)
|
|
playsound(src.loc, "sound/impact_sounds/Flesh_tear_1.ogg", 35, 1, -1)
|
|
src.pixel_x = -5
|
|
src.pixel_y = -5
|
|
sleep(rand(4,6))
|
|
turftarget = get_turf(target)
|
|
src.set_loc(turftarget)
|
|
playsound(src.loc, "sound/impact_sounds/Flesh_tear_2.ogg", 35, 1, -1)
|
|
sleep(10)
|
|
|
|
obj/critter/madnessowl/gun
|
|
name = "space owl with a gun"
|
|
icon_state = "madsmallowlgun"
|
|
dead_state = "madsmallowlgun-dead"
|
|
desc = "WATCH OUT IT HAS A GUN!"
|
|
|
|
seek_target()
|
|
src.anchored = 0
|
|
for (var/mob/living/C in hearers(src.seekrange,src))
|
|
if (!src.alive) break
|
|
if (C.health < 0) continue
|
|
if (C.name == src.attacker) src.attack = 1
|
|
if (iscarbon(C) && src.atkcarbon) src.attack = 1
|
|
if (istype(C, /mob/living/silicon/) && src.atksilicon) src.attack = 1
|
|
|
|
if (src.attack)
|
|
|
|
src.target = C
|
|
src.oldtarget_name = C.name
|
|
|
|
src.visible_message("<span style=\"color:red\"><b>[src]</b> fires at [src.target]!</span>")
|
|
|
|
var/tturf = get_turf(target)
|
|
SPAWN_DBG(rand(2,7))
|
|
Shoot(tturf, src.loc, src)
|
|
// SPAWN_DBG(rand(8,12))
|
|
|
|
src.attack = 0
|
|
return
|
|
|
|
obj/critter/madnessowl/switchblade
|
|
name = "space owl with a switchblade"
|
|
desc = "Oh god it found a knife, how more dangerous can they get?"
|
|
icon_state = "madsmallowlknife"
|
|
dead_state = "madsmallowlknife-dead"
|
|
health = 85
|
|
|
|
CritterAttack(mob/M)
|
|
if(ismob(M))
|
|
src.attacking = 1
|
|
src.visible_message("<span class='combat'><B>[src]</B> shanks [src.target]!</span>")
|
|
playsound(src.loc, "sound/impact_sounds/blade_small.ogg", 40, 1, -1)
|
|
random_brute_damage(src.target, 5)
|
|
sleep(rand(4,7))
|
|
playsound(src.loc, "sound/impact_sounds/blade_small.ogg", 40, 1, -1)
|
|
random_brute_damage(src.target, 5)
|
|
take_bleeding_damage(target, null, 5, DAMAGE_STAB, 1, get_turf(target))
|
|
SPAWN_DBG(rand(1,10))
|
|
src.attacking = 0
|
|
|
|
|
|
|
|
return
|
|
|
|
ChaseAttack(mob/M)
|
|
flick("[src.icon_state]-flaploop", src)
|
|
if(prob(50))
|
|
playsound(src.loc, pick(sounds_rustle), 50, 1, -1)
|
|
if(ismob(M))
|
|
src.attacking =1
|
|
|
|
if(prob(20))
|
|
src.visible_message("<span class='combat'><B>[src]</B> swoops down upon [M] and plunges a blade deep into their back!</span>")
|
|
playsound(src.loc, "sound/impact_sounds/blade_small.ogg", 40, 1, -1)
|
|
random_brute_damage(src.target, 10)
|
|
take_bleeding_damage(target, null, 5, DAMAGE_STAB, 1, get_turf(target))
|
|
M.changeStatus("stunned", 2 SECONDS)
|
|
M.changeStatus("weakened", 2 SECONDS)
|
|
if(!M.stat)
|
|
M.emote("scream")
|
|
else
|
|
src.visible_message("<span class='combat'><B>[src]</B> swoops down and slashes [M]!</span>")
|
|
playsound(src.loc, "sound/impact_sounds/blade_small.ogg", 40, 1, -1)
|
|
random_brute_damage(src.target, 3)
|
|
take_bleeding_damage(target, null, 2, DAMAGE_STAB, 1, get_turf(target))
|
|
SPAWN_DBG(rand(1,10))
|
|
src.attacking = 0
|
|
return
|
|
|
|
/obj/critter/gunbot/drone/hootening //If anyone wants to take a crack at it, this guy was originally supposed to start doing melee after half HP but fuck critter code.
|
|
name = "The Hootening"
|
|
desc = "Wait you recognize them from somewhere, oh shit wait they have a gun!"
|
|
icon = 'icons/misc/owlzone.dmi'
|
|
icon_state = "hootening"
|
|
dead_state = "deadhoot"
|
|
death_text = "%src% collapses and explodes into pieces?"
|
|
density = 1
|
|
health = 500
|
|
maxhealth = 500
|
|
opensdoors = 1
|
|
firevuln = 1.5
|
|
brutevuln = 1
|
|
flying = 1
|
|
score = 100
|
|
droploot = null
|
|
alertsound1 = 'sound/voice/animal/hoot.ogg'
|
|
alertsound2 = 'sound/voice/animal/yetigrowl.ogg'
|
|
projectile_type = /datum/projectile/bullet/lmg
|
|
current_projectile = new/datum/projectile/bullet/lmg
|
|
projectile_spread = 20
|
|
attack_cooldown = 35
|
|
must_drop_loot = 1
|
|
smashes_shit = 1
|
|
|
|
select_target(var/atom/newtarget)
|
|
src.target = newtarget
|
|
src.oldtarget_name = newtarget.name
|
|
playsound(src.loc, ismob(newtarget) ? alertsound2 : alertsound1, 55, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src]</b> rotates its head a full 360 degrees and begins chasing [src.target]!</span>")
|
|
task = "chasing"
|
|
|
|
New()
|
|
..()
|
|
name = "The Hootening"
|
|
return
|
|
|
|
|
|
/// ALTERNATE HOOTENING ATTEMPT
|
|
|
|
/obj/critter/hootening
|
|
name = "THE HOOTENING"
|
|
desc = "What has science done???"
|
|
icon = 'icons/misc/owlzone.dmi'
|
|
icon_state = "owlmutant"
|
|
dead_state = "owlmutant-dead"
|
|
health = 666
|
|
flying = 1
|
|
firevuln = 1
|
|
brutevuln = 0.5
|
|
aggressive = 1
|
|
defensive = 1
|
|
wanderer = 1
|
|
opensdoors = 0
|
|
seekrange = 6
|
|
density = 1
|
|
butcherable = 1
|
|
can_revive = 0
|
|
var/boredom_countdown = 0
|
|
var/spazzing = 0
|
|
var/frenzied = 0
|
|
|
|
|
|
|
|
CritterDeath()
|
|
if (src.alive)
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 65, 1)
|
|
src.visible_message("<b> [src] collapses, releasing a final hoot and regurgitating a Hootonium Core. What? <b/>")
|
|
src.alive = 0
|
|
walk_to(src,0)
|
|
anchored = 0
|
|
set_density(0)
|
|
layer = initial(layer)
|
|
icon = "owlmutant-dead"
|
|
new /obj/item/plutonium_core/hootonium_core (src.loc)
|
|
|
|
seek_target()
|
|
src.anchored = 0
|
|
if (src.target)
|
|
src.task = "chasing"
|
|
return
|
|
for (var/mob/living/C in hearers(src.seekrange,src))
|
|
if (!isrobot(C) && !ishuman(C)) continue
|
|
if ((C.name == src.oldtarget_name) && (world.time < src.last_found + 100)) continue
|
|
//if (C.stat || C.health < 0) continue
|
|
|
|
if(ishuman(C))
|
|
var/mob/living/carbon/human/H = C
|
|
if(iswerewolf(H))
|
|
src.visible_message("<span style=\"color:red\"><b>[src] backs away in fear!</b></span>")
|
|
step_away(src, H, 15)
|
|
src.dir = get_dir(src, H)
|
|
continue
|
|
|
|
src.boredom_countdown = rand(1,4)
|
|
src.target = C
|
|
src.oldtarget_name = C.name
|
|
src.task = "chasing"
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 75, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] hoots!</b></span>", 1)
|
|
break
|
|
|
|
|
|
attackby(obj/item/W as obj, mob/living/user as mob) //ARRRRGH WHY
|
|
user.lastattacked = src
|
|
|
|
var/attack_force = 0
|
|
var/damage_type = "brute"
|
|
if (istype(W, /obj/item/artifact/melee_weapon))
|
|
var/datum/artifact/melee/ME = W.artifact
|
|
attack_force = ME.dmg_amount
|
|
damage_type = ME.damtype
|
|
else
|
|
attack_force = W.force
|
|
damage_type = W.damtype
|
|
switch(damage_type)
|
|
if("fire")
|
|
src.health -= attack_force * src.firevuln
|
|
if("brute")
|
|
src.health -= attack_force * src.brutevuln
|
|
else
|
|
src.health -= attack_force * src.miscvuln
|
|
for(var/mob/O in viewers(src, null))
|
|
O.show_message("<span style=\"color:red\"><b>[user]</b> hits [src] with [W]!</span>", 1)
|
|
if(prob(30))
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 60, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] hoots!</b></span>", 1)
|
|
if(prob(25) && alive)
|
|
src.target = user
|
|
src.oldtarget_name = user.name
|
|
src.task = "chasing"
|
|
playsound(src.loc, "sound/impact_sounds/Generic_Hit_1.ogg", 60, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src]</b> freaks out at [src.target]!</span>")
|
|
frenzy(src.target)
|
|
if(prob(10) && alive)
|
|
src.target = user
|
|
src.oldtarget_name = user.name
|
|
random_brute_damage(user, 15)
|
|
playsound(user.loc, "swing_hit", 60, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src]</b> preforms a counterattack and dragonkicks [user.name] square in the chest!</span>")
|
|
animate_spin(src, prob(50) ? "L" : "R", 1, 0)
|
|
var/turf/T = get_edge_target_turf(user, get_dir(user, get_step_away(user, src)))
|
|
if (T && isturf(T))
|
|
SPAWN_DBG(0)
|
|
user.throw_at(T, 3, 2)
|
|
user.changeStatus("weakened", 5)
|
|
user.changeStatus("stunned", 5)
|
|
|
|
|
|
if (src.alive && src.health <= 0) src.CritterDeath()
|
|
|
|
//src.boredom_countdown = rand(5,10)
|
|
src.target = user
|
|
src.oldtarget_name = user.name
|
|
src.task = "chasing"
|
|
|
|
attack_hand(var/mob/user as mob)
|
|
user.lastattacked = src
|
|
if (!src.alive)
|
|
..()
|
|
return
|
|
if (user.a_intent == INTENT_HARM)
|
|
src.health -= rand(1,2) * src.brutevuln
|
|
on_damaged(src)
|
|
for(var/mob/O in viewers(src, null))
|
|
O.show_message("<span style=\"color:red\"><b>[user]</b> punches [src]!</span>", 1)
|
|
playsound(src.loc, "sound/impact_sounds/Generic_Punch_[(rand(1, 5))].ogg", 50, 1)
|
|
if(prob(30))
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 60, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] hoots!</b></span>", 1)
|
|
if(prob(20) && alive) // crowd beatdown fix
|
|
src.target = user
|
|
src.oldtarget_name = user.name
|
|
src.task = "chasing"
|
|
playsound(src.loc, "sound/impact_sounds/Generic_Hit_1.ogg", 50, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src]</b> flips out at [src.target]!</span>")
|
|
frenzy(src.target)
|
|
if (src.alive && src.health <= 0) src.CritterDeath()
|
|
|
|
//src.boredom_countdown = rand(5,10)
|
|
src.target = user
|
|
src.oldtarget_name = user.name
|
|
src.task = "chasing"
|
|
else
|
|
src.visible_message("<span style=\"color:red\"><b>[user]</b> pets [src]!</span>", 1)
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 60, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] hoots!</b></span>", 1)
|
|
|
|
|
|
ChaseAttack(mob/M)
|
|
if(!spazzing) src.spaz()
|
|
if(prob(10))
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 75, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] hoots!</b></span>", 1)
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> tackles [M]!</span>")
|
|
playsound(src.loc, "sound/impact_sounds/Generic_Hit_1.ogg", 50, 1, -1)
|
|
if(ismob(M))
|
|
M.changeStatus("stunned", 2 SECONDS)
|
|
M.changeStatus("weakened", 2 SECONDS)
|
|
|
|
CritterAttack(mob/M)
|
|
src.attacking = 1
|
|
var/attack_delay = rand(3,15)
|
|
if (isrobot(M))
|
|
var/mob/living/silicon/robot/BORG = M
|
|
if (!BORG.part_head)
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> pecks at [BORG.name].</span>")
|
|
sleep(15)
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> throws a tantrum and smashes [BORG.name] to pieces!</span>")
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 75, 1)
|
|
playsound(src.loc, 'sound/impact_sounds/Metal_Hit_Lowfi_1.ogg', 70, 1)
|
|
BORG.gib()
|
|
src.target = null
|
|
src.boredom_countdown = 0
|
|
else
|
|
if (BORG.part_head.ropart_get_damage_percentage() >= 85)
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> grabs [BORG.name]'s head and wrenches it right off!</span>")
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 70, 1)
|
|
playsound(src.loc, 'sound/impact_sounds/Metal_Hit_Lowfi_1.ogg', 70, 1)
|
|
BORG.compborg_lose_limb(BORG.part_head)
|
|
sleep(15)
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> ravenously eats the mangled brain remnants out of the decapitated head!</span>")
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 80, 1)
|
|
make_cleanable( /obj/decal/cleanable/blood,src.loc)
|
|
src.target = null
|
|
else
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> pounds on [BORG.name]'s head furiously!</span>")
|
|
playsound(src.loc, "sound/impact_sounds/Wood_Hit_1.ogg", 50, 1)
|
|
BORG.part_head.ropart_take_damage(rand(20,40),0)
|
|
if (prob(33)) playsound(src.loc, "sound/voice/animal/hoot.ogg", 75, 1)
|
|
attack_delay = 5
|
|
else
|
|
if (boredom_countdown-- > 0)
|
|
if(prob(70))
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> [pick("bites", "nibbles", "chews on", "gnaws on")] [src.target]!</span>")
|
|
playsound(src.loc, "sound/impact_sounds/Flesh_Stab_1.ogg", 50, 1)
|
|
playsound(src.loc, "sound/items/eatfood.ogg", 50, 1)
|
|
random_brute_damage(target, 10)
|
|
take_bleeding_damage(target, null, 5, DAMAGE_STAB, 1, get_turf(target))
|
|
if(prob(40))
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 70, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] hoots!</b></span>", 1)
|
|
else
|
|
src.visible_message("<span style=\"color:red\"><B>[src]</B> [pick("slashes", "swipes", "rips", "tears")] a chunk out of [src.target] with its talons!</span>")
|
|
playsound(src.loc, "sound/impact_sounds/Flesh_Stab_1.ogg", 50, 1)
|
|
random_brute_damage(target, 20)
|
|
take_bleeding_damage(target, null, 10, DAMAGE_CUT, 0, get_turf(target))
|
|
playsound(src.loc, "sound/impact_sounds/Slimy_Splat_1.ogg", 50, 1)
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 75, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] hoots!</b></span>", 1)
|
|
if(!M.stat) M.emote("scream") // don't scream while dead/asleep
|
|
|
|
else // flip the fuck out
|
|
playsound(src.loc, "sound/impact_sounds/Generic_Hit_1.ogg", 50, 1)
|
|
src.visible_message("<span style=\"color:red\"><b>[src]</b> slams into [src.target]!</span>")
|
|
if(iscarbon(M))
|
|
M.changeStatus("weakened", 4)
|
|
frenzy(src.target)
|
|
|
|
if (isdead(M)) // devour corpses
|
|
src.visible_message("<span style=\"color:red\"><b>[src] devours [src.target]! Holy shit!</b></span>")
|
|
playsound(src.loc, "sound/impact_sounds/Flesh_Break_1.ogg", 50, 1)
|
|
M.ghostize()
|
|
new /obj/decal/skeleton(M.loc)
|
|
M.gib()
|
|
src.target = null
|
|
|
|
SPAWN_DBG(attack_delay)
|
|
src.attacking = 0
|
|
|
|
|
|
proc/spaz()
|
|
if (spazzing)
|
|
return
|
|
|
|
spazzing = 25
|
|
SPAWN_DBG(0)
|
|
while(spazzing-- > 0)
|
|
src.pixel_x = rand(-2,2) * 2
|
|
src.pixel_y = rand(-2,2) * 2
|
|
src.dir = pick(alldirs)
|
|
sleep(4)
|
|
src.pixel_x = 0
|
|
src.pixel_y = 0
|
|
if(spazzing < 0)
|
|
spazzing = 0
|
|
|
|
|
|
// go crazy and make a huge goddamn mess
|
|
proc/frenzy(mob/M)
|
|
if (src.frenzied)
|
|
return
|
|
|
|
SPAWN_DBG(0)
|
|
src.visible_message("<span style=\"color:red\"><b>[src] goes [pick("on a rampage", "into a bloodlust", "berserk", "hog wild", "feral")]!</b></span>")
|
|
playsound(src.loc, "sound/voice/animal/hoot.ogg", 70, 1)
|
|
SPAWN_DBG(1 DECI SECOND)
|
|
if(!spazzing) src.spaz()
|
|
src.set_loc(M.loc)
|
|
src.frenzied = 20
|
|
while(src.target && src.frenzied && src.alive && src.loc == M.loc )
|
|
src.visible_message("<span style=\"color:red\"><b>[src] [pick("pecks", "claws", "slashes", "tears at", "lacerates", "mangles")] [src.target]!</b></span>")
|
|
random_brute_damage(target, 10)
|
|
take_bleeding_damage(target, null, 5, DAMAGE_CUT, 0, get_turf(target))
|
|
if(prob(33)) // don't make quite so much mess
|
|
bleed(target, 5, 5, get_step(src.loc, pick(alldirs)), 1)
|
|
sleep(4)
|
|
src.frenzied--
|
|
src.frenzied = 0
|
|
|
|
|
|
|
|
//FUCKABLE AREAS!!
|
|
var/list/owlery_sounds = list('sound/voice/animal/hoot.ogg','sound/ambience/owlzone/owlsfx1.ogg','sound/ambience/owlzone/owlsfx2.ogg','sound/ambience/owlzone/owlsfx3.ogg','sound/ambience/owlzone/owlsfx4.ogg','sound/ambience/owlzone/owlsfx5.ogg','sound/machines/hiss.ogg')
|
|
|
|
/area/owlery
|
|
name = "owl fuckery"
|
|
sound_group = "owl"
|
|
teleport_blocked = 1
|
|
sound_environment = 12
|
|
|
|
New()
|
|
..()
|
|
SPAWN_DBG(1 SECOND)
|
|
process()
|
|
|
|
proc/process()
|
|
while(current_state < GAME_STATE_FINISHED)
|
|
sleep(100)
|
|
if (current_state == GAME_STATE_PLAYING)
|
|
if(!played_fx_2 && prob(15))
|
|
sound_fx_2 = pick(owlery_sounds)
|
|
for(var/mob/M in src)
|
|
if (M.client)
|
|
M.client.playAmbience(src, AMBIENCE_FX_2, 50)
|
|
|
|
|
|
/area/owlery/Owlopen
|
|
name = "Owlery Arrivals"
|
|
icon_state = "green"
|
|
sound_loop = 'sound/ambience/owlzone/owlbanjo.ogg'
|
|
sound_group = "owl_banjo"
|
|
|
|
/area/owlery/owllock
|
|
name = "Owl Observatory Room"
|
|
icon_state = "yellow"
|
|
sound_loop = 'sound/ambience/owlzone/owlambi3.ogg'
|
|
sound_group = "owl_amb3"
|
|
|
|
/area/owlery/owleryhall
|
|
name = "Owlery Hall Junction"
|
|
icon_state = "orange"
|
|
sound_loop = 'sound/ambience/owlzone/owlbanjo.ogg'
|
|
sound_group = "owl_banjo"
|
|
|
|
/area/owlery/gangzone
|
|
name = "Mad Owl Den"
|
|
icon_state = "purple"
|
|
sound_loop = 'sound/ambience/owlzone/owlambi2.ogg'
|
|
sound_group = "owl_amb2"
|
|
|
|
/area/owlery/staffhall
|
|
name = "Staff Hall"
|
|
icon_state = "crewquarters"
|
|
sound_loop = 'sound/ambience/owlzone/owlbanjo.ogg'
|
|
sound_group = "owl_banjo"
|
|
|
|
/area/owlery/office
|
|
name = "Office Wing"
|
|
icon_state = "red"
|
|
sound_loop = 'sound/ambience/owlzone/owlbanjo.ogg'
|
|
sound_group = "owl_banjo"
|
|
|
|
/area/owlery/lab
|
|
name = "Perfectly Legal Laboratory"
|
|
icon_state = "blue"
|
|
sound_loop = 'sound/ambience/owlzone/owlambi5.ogg'
|
|
|
|
/area/owlery/Owlmait
|
|
name = "Owl Maintenance"
|
|
icon_state = "dk_yellow"
|
|
sound_loop = 'sound/ambience/owlzone/owlbanjo.ogg'
|
|
sound_group = "owl_banjo"
|
|
|
|
/area/owlery/solars
|
|
name = "Listening Post Solar Array"
|
|
icon_state = "yellow"
|
|
requires_power = 0
|
|
luminosity = 1
|
|
force_fullbright = 1
|
|
teleport_blocked = 0
|
|
|
|
/area/owlery/Owlmait2
|
|
name = "River Loop Maintenance"
|
|
icon_state = "dk_yellow"
|
|
sound_loop = 'sound/ambience/owlzone/owlambi3.ogg'
|
|
sound_group = "owl_amb3"
|
|
|
|
/area/syndicate/minerva5/command
|
|
name = "Administrator's Office"
|
|
icon_state = "red"
|
|
sound_loop = 'sound/ambience/station/JazzLounge1.ogg'
|
|
|
|
|
|
//Other fuckable things
|
|
/proc/owl_slam()
|
|
set category = "Spells"
|
|
set name = "Owl Slam"
|
|
set desc = "Hoot the entire station with the power of an owl."
|
|
|
|
var/mob/M = src
|
|
|
|
if(M.stat)
|
|
boutput(M, "Not when you're incapacitated.")
|
|
return
|
|
|
|
var/equipped_thing = M.equipped()
|
|
if(istype(equipped_thing, /obj/item/basketball))
|
|
var/obj/item/basketball/BB = equipped_thing
|
|
if(!BB.payload)
|
|
boutput(M, __red("This b-ball doesn't have the right heft to it!"))
|
|
return
|
|
else //Safety thing to ensure the hootonium core is only good for one dunk
|
|
var/pl = BB.payload
|
|
BB.payload = null
|
|
qdel(pl)
|
|
else
|
|
boutput(M, __red("You can't slam without a b-ball, yo!"))
|
|
return
|
|
|
|
M.verbs -= /proc/owl_slam
|
|
|
|
logTheThing("combat", M, null, "<b>triggers a owl slam in [M.loc.loc] ([showCoords(M.x, M.y, M.z)])!</b>")
|
|
|
|
M.visible_message("<span style=\"color:red\">[M] flies through the ceiling!</span>")
|
|
playsound(M.loc, "sound/effects/bionic_sound.ogg", 50)
|
|
|
|
for(var/i = 0, i < 50, i++)
|
|
M.pixel_y += 6
|
|
M.dir = turn(M.dir, 90)
|
|
sleep(1)
|
|
M.layer = 0
|
|
var/sound/siren = sound('sound/misc/airraid_loop_short.ogg')
|
|
siren.repeat = 1
|
|
siren.channel = 5
|
|
world << siren
|
|
command_alert("A massive influx of Owl Quarks has been detected in [get_area(M)]. A Owl Slam is imminent. All personnel currently on [station_name()] have 10 seconds to reach minimum safe distance. This is not a test.")
|
|
for(var/mob/N in mobs)
|
|
SPAWN_DBG(0)
|
|
shake_camera(N, 120, 2)
|
|
SPAWN_DBG(0)
|
|
var/thunder = 70
|
|
while(thunder > 0)
|
|
thunder--
|
|
if(prob(15))
|
|
world << sound('sound/voice/animal/hoot.ogg', volume = 80) ///////////////////////////////////////////
|
|
for(var/mob/N in mobs)
|
|
N.flash(30)
|
|
sleep(5)
|
|
sleep(200)
|
|
playsound(M.loc, "sound/effects/bionic_sound.ogg", 50)
|
|
M.layer = EFFECTS_LAYER_BASE
|
|
for(var/i = 0, i < 20, i++)
|
|
M.pixel_y -= 12
|
|
M.dir = turn(M.dir, 90)
|
|
sleep(1)
|
|
sleep(1)
|
|
siren.repeat = 0
|
|
siren.status = SOUND_UPDATE
|
|
siren.channel = 5
|
|
world << siren
|
|
M.visible_message("<span style=\"color:red\">[M] successfully executes a Owl Slam!</span>")
|
|
explosion_new(src, get_turf(M), 1, 75)
|
|
for(var/mob/living/carbon/human/M1 in range(5, src))
|
|
SPAWN_DBG(0)
|
|
M1.owlgib()
|
|
for(var/mob/living/carbon/human/M2 in range(50, src))
|
|
SPAWN_DBG(0)
|
|
if (!(M2.wear_mask && istype(M2.wear_mask, /obj/item/clothing/mask/owl_mask)))
|
|
for(var/obj/item/clothing/O in M2)
|
|
M2.u_equip(O)
|
|
if (O)
|
|
O.set_loc(M2.loc)
|
|
O.dropped(M2)
|
|
O.layer = initial(O.layer)
|
|
|
|
var/obj/item/clothing/under/gimmick/owl/owlsuit = new /obj/item/clothing/under/gimmick/owl(M2)
|
|
owlsuit.cant_self_remove = 1
|
|
var/obj/item/clothing/mask/owl_mask/owlmask = new /obj/item/clothing/mask/owl_mask(M2)
|
|
owlmask.cant_self_remove = 1
|
|
|
|
M2.equip_if_possible(owlsuit, M2.slot_w_uniform)
|
|
M2.equip_if_possible(owlmask, M2.slot_wear_mask)
|
|
M2.set_clothing_icon_dirty()
|
|
|
|
///////GREG THE COOL AWESOME ROBOT TRADER/////////////////
|
|
/obj/npc/trader/greg
|
|
icon = 'icons/obj/trader.dmi'
|
|
icon_state = "greg"
|
|
picture = "robot.png"
|
|
name = "Greg"
|
|
desc = "Oh hey its Greg! Everyone loves him, but you don't seem to remember why."
|
|
trader_area = "/area/owlery/staffhall"
|
|
|
|
New()
|
|
..()
|
|
/////////////////////////////////////////////////////////
|
|
//// sell list //////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////
|
|
src.goods_sell += new /datum/commodity/airzooka(src)
|
|
src.goods_sell += new /datum/commodity/airbag(src)
|
|
src.goods_sell += new /datum/commodity/dangerbag(src)
|
|
src.goods_sell += new /datum/commodity/hat/dailyspecial/greg
|
|
src.goods_sell += new /datum/commodity/crayons/greg
|
|
src.goods_sell += new /datum/commodity/drugs/poppies/greg
|
|
src.goods_sell += new /datum/commodity/owlpaint
|
|
/////////////////////////////////////////////////////////
|
|
//// buy list ///////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////
|
|
src.goods_buy += new /datum/commodity/owleggs(src)
|
|
/////////////////////////////////////////////////////////
|
|
|
|
greeting= {"Hey there kid! Welcome to the gift shop. Im Greg, Professor Hootens loveable assistant! And this little fella on my hand is Howard the Hooter, say "Hi" Howard!."}
|
|
|
|
portrait_setup = "<img src='[resource("images/traders/[src.picture]")]'><HR><B>[src.name]</B><HR>"
|
|
|
|
sell_dialogue = "Howards lost some of his eggs, can you find them all?."
|
|
|
|
buy_dialogue = "Are you interested in some Owl accessories?"
|
|
|
|
successful_purchase_dialogue = list("Thank you for your purchase!", "Please enjoy your purchase.",
|
|
"Thank you for your continued support of the Owlery!")
|
|
|
|
failed_sale_dialogue = list("Sorry, we're not currently accepting donations of that variety.")
|
|
|
|
successful_sale_dialogue = list("Thank you for your contribution to the Owlery, your personalized thank you card will arrive in 3 to 300 business days.")
|
|
|
|
failed_purchase_dialogue = list("Im sorry but it appears the transaction as reached a fatal error, please contact your cards provider for more info.")
|
|
|
|
pickupdialogue = "Your purchase has been delivered."
|
|
|
|
pickupdialoguefailure = "I don't believe you have added anything to your virtu-cart."
|
|
|
|
/obj/item/lilgreg
|
|
name = "Greg Jr"
|
|
desc = "Gregs adopted son! He seems to have gotten caught up with a bad crowd."
|
|
icon = 'icons/misc/owlzone.dmi'
|
|
icon_state = "gregjr"
|
|
|
|
var/seensol = 0
|
|
var/cantalk = 1
|
|
|
|
attack_self(mob/user as mob)
|
|
if(cantalk == 1)
|
|
cantalk = 0
|
|
if(prob(5))
|
|
playsound(src.loc, "sound/ambience/owlzone/owlsfx[rand(1,5)].ogg", 50, 1)
|
|
usr.visible_message("<span style=\"color:blue\">Greg Jr emits a haunting hoot as you pull the string on their back.")
|
|
cantalk = 1
|
|
else
|
|
playsound(src.loc, "sound/misc/automaton_ratchet.ogg", 50, 1)
|
|
usr.visible_message("<span style=\"color:blue\">[usr] pull the string located at the back of Greg Jr.")
|
|
sleep(30)
|
|
if (istype(get_area(src), /area/solarium) && seensol == 0)
|
|
usr.visible_message("<span class='game say'><span class='name'>[src]</span> says, \"Woah, so thats what the sun looks like. It's kind of smaller then I expected though?\"")
|
|
sleep(10)
|
|
usr.visible_message("<B>[src]</b> says, \"Hm, looks like my internal camera is out of storage. Mind holding this tape real quick while I add some film?\"")
|
|
new /obj/item/audio_tape/beepoker(get_turf(usr))
|
|
seensol = 1
|
|
cantalk = 1
|
|
return
|
|
else
|
|
usr.visible_message("<span class='game say'><span class='name'>[src]</span> says, \"[pick("Hey there pal! How's your day been?", "You ever been to that weird satilite with the giant guardbuddy?", "Hey have you ever heard about Greg? He's a real swell guy.", "Ever eaten a Lemon Square? I haven't, I wonder what they taste like.","Did you catch last nights Professor Hootens story hour? I must have missed it.", "Those darn Owls scratched my paintjob.", "Ever meet that guy with the big beard and giant heart?", "I wonder where Greg is today, have you seen him?", "I wish I could see that sun thing people keep talking about.")]\"")
|
|
sleep(30)
|
|
cantalk = 1
|
|
sleep(20)
|
|
return
|
|
|
|
hear_talk(var/mob/living/carbon/speaker, text, real_name)
|
|
if(prob(10))
|
|
usr.visible_message("<span class='game say'><span class='name'>[src]</span> says, \"Woah [real_name] thats [pick("radical", "awesome", "sweet", "delicious", "100% spectacular", "better then sliced bread", "hootacular", "horrible", "hootastic", "dab worthy")]!\"")
|
|
return
|
|
|
|
|
|
|
|
|