This commit is contained in:
keronshb
2021-10-16 00:02:05 -04:00
parent 84a94cb8ce
commit 3cfea7eb92
62 changed files with 5539 additions and 109 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,354 @@
//Halloween Fluff Papers!
/obj/item/paper/fluff/balls/spookyasylum/memo/cookmemo
name = "Memo: Cooks"
info = "If you're reading this, thank you for volunteering your culinary services! Not only are you helping to keep costs down by rendering bluespace catering unnecessary, but you're also helping to give this event an 'organic' touch!<br>This isn't your typical day on the job, so be sure to focus on quality, not quantity. People are expecting better food than normal, and we've given you higher-quality cuts than usual to work with. Ideally you'll have botany to help with produce - if not, we may be able to deliver you some.<br>Remember to account for crew dietary concerns and provide those with less flexible digestive systems with more than one option if possible. Lastly, be sure to avoid foods that are particularly dangerous, we aren't looking for meals to \"die for\"<br>-Generated by Organic Resources Department Bot #7004"
/obj/item/paper/fluff/balls/spookyasylum/memo/botanymemo
name = "Memo: Botanists"
info = "If you're reading this, thank you for lending us your \"green thumbs\"! Provided a cook is on duty, you'll save us the trouble of bluespace shipping produce, as well as giving us the privilege of saying it was \"locally sourced\"! If there isn't a chef...we may be able to put what you grow to good use yet.<br>Remember, your primary goal here is to produce produce. Not cannabis, not tomatoes that mutate people, we want things people can safely eat. Do what you can for the cook if there is one - otherwise, aspire for variety.<br>-Generated by Organic Resources Department Bot #7004"
/obj/item/paper/fluff/balls/spookyasylum/memo/janniememo
name = "Memo: Janitors"
info = "If you're reading this, thanks for volunteering your janitorial services! You're greatly appreciated today, as this event will likely remind you why Citadel custodians command a higher salary than their counterparts in other sectors.<br>On the bright side, you shouldn't expect much in the way of danger.<br>-Generated by Organic Resources Department Bot #7004"
/obj/item/paper/fluff/balls/spookyasylum/memo/securitymemo
name = "Security Debrief"
info = "<b>Greetings Security Officers,</b><br>Whether you've chosen or been chosen to help oversee this event, we appreciate your service today. Although this may come as a disappointment to some of you, we can absolutely confirm a lack of credible threats for once. As such, your primary mission is to keep the peace.<br>Central Command understands this may be difficult for those of you from military backgrounds - fortunately, we intend to be far more accessible for the sake of this event. Feel free to contact us if you have any uncertainties how to handle a situation, as cost is not the concern it normally is. However, you're expected to follow any orders we give to the best of your ability.<br>Some other things you should be aware of:<br>- You may see civilians in security apparel - this is to be expected as \"shitsec\" costumes are trending on the NTnet. For this reason we have issued you special uniforms. If you see a partygoer in THOSE, THEN you may have reason for concern.<br>- Items that may normally be cause for alarm can generally be assumed to be toys and/or replicas, potentially as part of a costume. You'll be informed whether an item is to be of concern, as Central Command will be handling much of the surveillance work.<br>- Speaking of surveillance, the chapel and larger building to the east are not equipped with cameras. The chapel has been fully investigated by an Inquistion, but due to \[REDACTED] they were unable to do the same for the east compound. You are not responsible for what goes on in these areas and partygoers have been warned to enter at their own risk.<br>-Central Command"
/obj/item/paper/fluff/balls/spookyasylum/diary/diary01
name = "7/31/2559"
info = "People who say they can't afford any more than a nanoapartment really need to broaden their horizons. You'd be amazed by what you can find if you're willing to put up with a longer commute! I mean look at me, I got a place with square footage that'd put First Victorians to shame!<br>Part of why this place was so cheap was because some \"terrible things\" happened here in the past, apparently. Still, what's in the past is in the past, is it not?"
/obj/item/paper/fluff/balls/spookyasylum/diary/diary02
name = "8/2/2559"
info = "Nice as this place is, it's kind of lonely. It also might be a bit tough to maintain all by myself, so what if I made it a hotel? Something like this'd surely stand out, especially when most of the hotels around here are Twin Nexuses.<br>It's not that they're not nice places - it's just that when you've been to one, you've been to them all. A hotel here? It'd be one of a kind!"
/obj/item/paper/fluff/balls/spookyasylum/diary/diary03
name = "9/13/2559"
info = "<center>All hell has broken loose.</center><br>In the early evening, hundreds, maybe thousands of ghosts burst out of the chapel and old medical wing. They rushed through the halls, breaking any lights they passed. Then it happened.<br>We had quite a few doctors present that night, and suddenly they all went insane. One barged into the kitchen and dove headfirst into the gibber. The rest charged into medbay, each seeming to choose a unique method of suicide. Lethal injections, the electric chair, self-lobotomy - each seemed to top the last in absurdity. Then the ghosts all converged back in the chapel, appearing to vanish as quickly as they arrived.<br>All my remaining guests and staff have fled. Everyone seemed to have somewhere they could go...except for me. I can only pray these spirits don't take me in my sleep..."
/obj/item/paper/fluff/balls/spookyasylum/diary/diary04
name = "9/16/2559"
info = "Word travels a lot faster than I thought, I haven't seen a customer in days...<br>The good news is that whatever happened a few days hasn't repeated itself. It's just me here - any staff I had resigned immediately after what went down on the 13th. I'm sure I could handle a few guests but am I gonna see one anytime soon?"
/obj/item/paper/fluff/balls/spookyasylum/diary/diary05
name = "10/7/2559"
info = "Finally, I'm free of this nightmare.<br>Some folks showed up for the first time in weeks, said they were a part of \"NanoTransen\" or something. They seemed shocked I haven't heard of them, but all I care about is the fact they were willing to buy this place. I figured I'd at least get what I invested at this place, but for a \"megacorporation\" they sure seemed like a bunch of tightwads. Still, I took their offer.<br>It's their problem now."
/obj/item/paper/fluff/balls/spookyasylum/cell03
name = "Cell 3 Patient Information"
info = "<b>Name:</b> J. Crane<br><b>Age:</b> 46 <b>Gender:</b> M <b>Height:</b> 183cm <b>Weight:</b> 81kg<br><b>Notes:</b> Patient exhibits violent tendencies and is not to be released from restraints under any circumstances. To reduce risk of violent outbreaks, birds; which patient has a strong phobia towards; are no longer allowed in proximity of cells, this includes the chief of staff's pet parrot."
/obj/item/paper/fluff/balls/spookyasylum/cell04
name = "Cell 4 Patient Information"
info = "<b>Name:</b> Fidel S.<br><b>Age:</b> 20 <b>Gender:</b> M <b>Height:</b> 170cm <b>Weight:</b> 68kg<br><b>Notes:</b> Patient appears to be under the delusion that he is a dog, suffers from incontinence, and bites staff. Patient to be kept restrained in cell after attacking orderly Robinson, do not remove patient's muzzle outside designated meal periods."
/obj/item/paper/fluff/balls/spookyasylum/traffickingvictim
name = "Cell 1 Patient Information"
info = "<b>Name:</b> S. Albright<br><b>Age:</b> 26 <b>Gender:</b> F <b>Height:</b> 174cm <b>Weight:</b> 63kg<br><b>Notes:</b> \[The notes are crossed out and unreadable, but there is writing on the back of the paper] Buyer found in Sol system, wealthy Martian man looking for a cheap bride, doesn't mind poor condition of the merchandise. Will be packaging with the next supply ship for transport."
/obj/item/paper/fluff/balls/spookyasylum/healstaffnote
name = "Shipping Manifest 'Healing Staves'"
info = "Contained in this chest are several magical healing staves created by NT sanctioned warlocks, please use them in the event an employee is injured during the festivities. We hope you have a safe and enjoyable celebration, remember you are expected to return to work promptly at its conclusion.<br>We apologize in the unlikely event the contents of the crate are scattered around the asylum by its teleportation."
//Dorm Buttons
/obj/machinery/button/door/dorms/dorm01
name = "dorm 1 button"
id = "D100"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm02
name = "dorm 2 button"
id = "D101"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm03
name = "dorm 3 button"
id = "D102"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm04
name = "dorm 4 button"
id = "D103"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm05
name = "dorm 5 button"
id = "D104"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm06
name = "dorm 6 button"
id = "D105"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm07
name = "dorm 7 button"
id = "D106"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm08
name = "dorm 8 button"
id = "D107"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm09
name = "dorm 9 button"
id = "D108"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm10
name = "dorm 10 button"
id = "D109"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm11
name = "dorm 11 button"
id = "D110"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm12
name = "dorm 12 button"
id = "D111"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm13
name = "dorm 13 button"
id = "D112"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm14
name = "dorm 14 button"
id = "D113"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm15
name = "dorm 15 button"
id = "D114"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm16
name = "dorm 16 button"
id = "D115"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm17
name = "dorm 17 button"
id = "D116"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm18
name = "dorm 18 button"
id = "D117"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm19
name = "dorm 19 button"
id = "D118"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm20
name = "dorm 20 button"
id = "D119"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/patient1
name = "door bolt"
id = "D120"
normaldoorcontrol = 1
pixel_x = 24
pixel_y = -8
specialfunctions = 4
/obj/machinery/button/door/dorms/patient2
name = "door bolt"
id = "D121"
normaldoorcontrol = 1
pixel_x = 24
pixel_y = -8
specialfunctions = 4
/obj/machinery/button/door/dorms/luxury1
name = "Privacy Shutter Control"
id = "L00"
pixel_x = -8
pixel_y = -24
/obj/machinery/button/door/dorms/luxury2
name = "Privacy Shutter Control"
id = "L01"
pixel_x = 8
pixel_y = -24
/obj/machinery/button/door/dorms/luxury3
name = "Privacy Shutter Control"
id = "L02"
pixel_x = 8
pixel_y = 24
/obj/machinery/button/door/dorms/luxury4
name = "Privacy Shutter Control"
id = "L03"
pixel_x = -24
pixel_y = 8
//Dorm Doors
/obj/machinery/door/airlock/wood/dorms/dorm01
name = "Room 1"
id_tag = "D100"
/obj/machinery/door/airlock/wood/dorms/dorm02
name = "Room 2"
id_tag = "D101"
/obj/machinery/door/airlock/wood/dorms/dorm03
name = "Room 3"
id_tag = "D102"
/obj/machinery/door/airlock/wood/dorms/dorm04
name = "Room 4"
id_tag = "D103"
/obj/machinery/door/airlock/wood/dorms/dorm05
name = "Room 5"
id_tag = "D104"
/obj/machinery/door/airlock/wood/dorms/dorm06
name = "Room 6"
id_tag = "D105"
/obj/machinery/door/airlock/wood/dorms/dorm07
name = "Room 7"
id_tag = "D106"
/obj/machinery/door/airlock/wood/dorms/dorm08
name = "Room 8"
id_tag = "D107"
/obj/machinery/door/airlock/wood/dorms/dorm09
name = "Room 9"
id_tag = "D108"
/obj/machinery/door/airlock/wood/dorms/dorm10
name = "Room 10"
id_tag = "D109"
/obj/machinery/door/airlock/wood/dorms/dorm11
name = "Room 11"
id_tag = "D110"
/obj/machinery/door/airlock/wood/dorms/dorm12
name = "Room 12"
id_tag = "D111"
/obj/machinery/door/airlock/wood/dorms/dorm13
name = "Room 13"
id_tag = "D112"
/obj/machinery/door/airlock/wood/dorms/dorm14
name = "Room 14"
id_tag = "D113"
/obj/machinery/door/airlock/wood/dorms/dorm15
name = "Room 15"
id_tag = "D114"
/obj/machinery/door/airlock/wood/dorms/dorm16
name = "Room 16"
id_tag = "D115"
/obj/machinery/door/airlock/wood/dorms/dorm17
name = "Room 17"
id_tag = "D116"
/obj/machinery/door/airlock/wood/dorms/dorm18
name = "Room 18"
id_tag = "D117"
/obj/machinery/door/airlock/wood/dorms/dorm19
name = "Room 19"
id_tag = "D118"
/obj/machinery/door/airlock/wood/dorms/dorm20
name = "Room 20"
id_tag = "D119"
/obj/machinery/door/airlock/wood/dorms/patient1
name = "Recovery Room 1"
id_tag = "D120"
/obj/machinery/door/airlock/wood/dorms/patient2
name = "Recovery Room 2"
id_tag = "D121"
//Luxury Dorm Shutters
/obj/machinery/door/poddoor/shutters/preopen/luxury_dorms/luxury01
name = "Luxury Dorm 1"
id = "L00"
/obj/machinery/door/poddoor/shutters/preopen/luxury_dorms/luxury02
name = "Luxury Dorm 2"
id = "L01"
/obj/machinery/door/poddoor/shutters/preopen/luxury_dorms/luxury03
name = "Luxury Dorm 3"
id = "L02"
/obj/machinery/door/poddoor/shutters/preopen/luxury_dorms/luxury04
name = "Luxury Dorm 4"
id = "L03"
//This is just so I don't have to mass varedit!
/obj/structure/falsewall/halloweenBall/wood
name = "wooden wall"
desc = "A wall with wooden plating. Stiff."
icon = 'icons/turf/walls/wood_wall.dmi'
icon_state = "wood"
mineral = /obj/item/stack/sheet/mineral/wood
walltype = /turf/closed/wall/mineral/wood
canSmoothWith = list(/obj/structure/falsewall/wood, /turf/closed/wall/mineral/wood, /turf/closed/indestructible/wood)

View File

@@ -0,0 +1,12 @@
#define JOB_MODIFICATION_MAP_NAME "SpookyStation"
/turf
baseturfs = /turf/open/floor/spooktime/spooktimegrass
MAP_REMOVE_JOB(geneticist)
MAP_REMOVE_JOB(virologist)
MAP_REMOVE_JOB(lawyer)
MAP_REMOVE_JOB(scientist)
MAP_REMOVE_JOB(lawyer)
MAP_REMOVE_JOB(shaft_miner)
MAP_REMOVE_JOB(AI)

4
_maps/spookystation.dm Normal file
View File

@@ -0,0 +1,4 @@
#define FORCE_MAP "_maps/spookystation.json"
/turf
baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint

11
_maps/spookystation.json Normal file
View File

@@ -0,0 +1,11 @@
{
"map_name": "SpookyStation",
"map_path": "map_files/SpookyStation",
"map_file": "SpookyStation.dmm",
"shuttles": {
"emergency": "emergency_pubby",
"whiteship": "whiteship_pubby",
"ferry": "ferry_fancy",
"cargo": "cargo_box"
}
}

View File

@@ -1,4 +1,4 @@
#define LOG_BURN_TIMER 150
#define LOG_BURN_TIMER 400
#define PAPER_BURN_TIMER 5
#define MAXIMUM_BURN_TIMER 3000
@@ -12,6 +12,7 @@
pixel_x = -16
resistance_flags = FIRE_PROOF
var/lit = FALSE
light_color = "#E38C2D"
var/fuel_added = 0
var/flame_expiry_timer
@@ -64,6 +65,12 @@
</span>")
adjust_fuel_timer(PAPER_BURN_TIMER)
qdel(T)
else if(istype(T,/obj/item/grown/log))
user.visible_message("<span class='notice'>[user] tosses some \
wood into [src].</span>", "<span class='notice'>You add \
some fuel to [src].</span>")
adjust_fuel_timer(LOG_BURN_TIMER)
qdel(T)
else if(try_light(T,user))
return
else

View File

@@ -16,11 +16,11 @@
if(log_amount && (!(flags_1 & NODECONSTRUCT_1)))
if(W.sharpness && W.force > 0)
if(W.hitsound)
playsound(get_turf(src), W.hitsound, 100, 0, 0)
playsound(get_turf(src), 'modular_citadel/code/modules/eventmaps/Spookystation/woodchop.ogg', 100, 0, 0)
user.visible_message("<span class='notice'>[user] begins to cut down [src] with [W].</span>","<span class='notice'>You begin to cut down [src] with [W].</span>", "You hear the sound of sawing.")
if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
user.visible_message("<span class='notice'>[user] fells [src] with the [W].</span>","<span class='notice'>You fell [src] with the [W].</span>", "You hear the sound of a tree falling.")
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
playsound(get_turf(src), 'modular_citadel/code/modules/eventmaps/Spookystation/treefall.ogg', 100 , 0, 0)
for(var/i=1 to log_amount)
new /obj/item/grown/log/tree(get_turf(src))
@@ -40,6 +40,16 @@
density = FALSE
pixel_x = -16
/obj/structure/flora/stump/attackby(obj/item/W, mob/user, params)
if((W.tool_behaviour == TOOL_SHOVEL) && params)
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
if(do_after(user, 20))
new /obj/item/grown/log/tree(get_turf(src))
user.visible_message("[user] digs up [src].", "<span class='notice'>You dig up [src].</span>")
qdel(src)
else
return ..()
/obj/structure/flora/tree/pine
name = "pine tree"
desc = "A coniferous pine tree."

View File

@@ -752,14 +752,12 @@
if(!open)
icon_state = "closed"
layer = WALL_OBJ_LAYER
density = TRUE
open = FALSE
opacity = TRUE
else
icon_state = "open"
layer = SIGN_LAYER
density = FALSE
open = TRUE
opacity = FALSE

View File

@@ -70,6 +70,7 @@
icon_state = "wood"
baseturfs = /turf/closed/indestructible/wood
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/falsewall/wood, /turf/closed/wall/mineral/wood, /turf/closed/indestructible/wood)
/turf/closed/indestructible/oldshuttle/corner
icon_state = "corner"

View File

@@ -459,7 +459,7 @@
// base_icon_state = "rock_wall"
smooth = SMOOTH_MORE|SMOOTH_BORDER
canSmoothWith = list (/turf/closed)
baseturfs = /turf/open/floor/plating/ashplanet/wateryrock
baseturfs = /turf/open/floor/spooktime/dirtpatch
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
environment_type = "waste"
turf_type = /turf/open/floor/plating/ashplanet/rocky

View File

@@ -9,6 +9,7 @@
var/items_list = list()
speech_span = "spooky"
var/active = TRUE
var/BallTutorial = FALSE
/obj/item/barthpot/Destroy()
var/obj/item/barthpot/n = new src(loc)
@@ -17,6 +18,9 @@
/obj/item/barthpot/attackby(obj/item/I, mob/user, params)
if(BallTutorial)
say("Hello and welcome to the annual Citadelstation Spookyball 2021! Centcomm requisitioned this old hospital as a new colony site two years ago, and were back again after a few additions here and there. Next to me you can find all the tools youll need to build a nice private house, if youre here for that kind of thing. The axes will chop trees, and give you wood. Shovels will remove grass and things, which you can use the grass to make beds and backets. The pickaxe will allow you pick out the nearby rocks, if youre more interested in building a cave dwelling. Finally the umbrella and light sources are because its spooky, and it might rain! As for interesting spots; Theres the old abandoned mansion which you can get to by going through the entrance and towards the east. Theres also a mech arena directly south, and a racetrack in the caves to the right of the arena, follow the lanterns. And make sure to explore the caves too! Lots of neat things to find!")
return
if(!active)
say("Meow!")
return
@@ -32,6 +36,9 @@
say("It doesn't seem like that's magical enough!")
/obj/item/barthpot/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
if(BallTutorial)
say("Hello and welcome to the annual Citadelstation Spookyball 2021! Centcomm requisitioned this old hospital as a new colony site two years ago, and were back again after a few additions here and there. Next to me you can find all the tools youll need to build a nice private house, if youre here for that kind of thing. The axes will chop trees, and give you wood. Shovels will remove grass and things, which you can use the grass to make beds and backets. The pickaxe will allow you pick out the nearby rocks, if youre more interested in building a cave dwelling. Finally the umbrella and light sources are because its spooky, and it might rain! As for interesting spots; Theres the old abandoned mansion which you can get to by going through the entrance and towards the east. Theres also a mech arena directly south, and a racetrack in the caves to the right of the arena, follow the lanterns. And make sure to explore the caves too! Lots of neat things to find!")
return
if(!active)
say("Meow!")
return

View File

@@ -268,3 +268,66 @@
category = "Holiday"
item = /obj/item/card/emag/halloween
surplus = 0
/////////////////////////
// Ball map Items //
/////////////////////////
/obj/item/wisp_lantern/pumpkin
name = "Pumpkin lantern"
desc = "This lantern gives off no light, but is home to a friendly Jacq o' latern."
icon_state = "lantern-on"
var/obj/effect/wisp/pumpkin/wisp2
//Hoooo boy that's some wild code there.
/obj/item/wisp_lantern/pumpkin/Initialize()
. = ..()
qdel(wisp)
wisp2 = new(src)
wisp = wisp2
/obj/effect/wisp/pumpkin
name = "Friendly pumpkin"
desc = "Happy to spook your way."
icon = 'icons/obj/clothing/hats.dmi'
icon_state = "hardhat1_pumpkin_j"
light_range = 5
light_color = "#EE9933"
layer = 0
sight_flags = SEE_MOBS
lighting_alpha = 0
/obj/effect/wisp/pumpkin/update_user_sight(mob/user) //Disables SUPERLIGHTS
return
//Damnit LazyBones
/mob/living/simple_animal/lazy_bones
name = "Lazy Bones"
desc = "Simply refuses to get out of bed!"
icon = 'icons/mob/simple_human.dmi'
icon_state = "skeleton"
icon_living = "skeleton"
icon_dead = "skeleton"
gender = NEUTER
mob_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
turns_per_move = 5
speak_emote = list("rattles")
emote_see = list("rattles")
maxHealth = 40
health = 40
speed = 0
harm_intent_damage = 0
melee_damage_lower = 0
melee_damage_upper = 0
minbodytemp = 0
maxbodytemp = 1500
faction = list("skeleton")
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
deathmessage = "collapses into a pile of bones!"
del_on_death = 1
loot = list(/obj/effect/decal/remains/human)
do_footstep = TRUE
canmove = FALSE

View File

@@ -50,6 +50,7 @@
var/cached_z
/// I'm busy, don't move.
var/busy = FALSE
var/spawn_cars = TRUE
var/static/blacklisted_items = typecacheof(list(
/obj/effect,
@@ -87,6 +88,9 @@
poof()
/mob/living/simple_animal/jacq/on_attack_hand(mob/living/carbon/human/M)
if(spawn_cars)
spawn_cars(M)
return ..()
if(!active)
say("Hello there [gender_check(M)]!")
return ..()
@@ -97,6 +101,9 @@
..()
/mob/living/simple_animal/jacq/attack_paw(mob/living/carbon/monkey/M)
if(spawn_cars)
spawn_cars(M)
return ..()
if(!active)
say("Hello there [gender_check(M)]!")
return ..()
@@ -124,6 +131,8 @@
/mob/living/simple_animal/jacq/proc/poof()
if(!active)//if disabled, don't poof
return
last_poof = world.realtime
var/datum/reagents/R = new/datum/reagents(100)//Hey, just in case.
var/datum/effect_system/smoke_spread/chem/s = new()
@@ -466,6 +475,30 @@
sleep(20)
poof()
/mob/living/simple_animal/jacq/proc/spawn_cars(mob/living/carbon/C)
visible_message("<b>[src]</b> gives off a glowing smile, <span class='spooky'>\"What ken Ah offer ye? I can magic up a vectorcraft in manual or automatic fer ye.\"</span>")
var/choices_reward = list("Manual", "Automatic", "How do Automatics work?", "Nothing, thanks")
var/choice_reward = input(usr, "Trick or Treat?", "Trick or Treat?") in choices_reward
switch(choice_reward)
if("Manual")
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"Great choice! 'Ere's yer car.\"</span>")
jacqrunes("Great choice! 'Ere's yer car.", C)
new /obj/vehicle/sealed/vectorcraft(loc)
if("Automatic")
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"'Ere's yer car. Not as fast as an automatic mind.\"</span>")
jacqrunes("'Ere's yer car. Not as fast as an automatic mind.", C)
new /obj/vehicle/sealed/vectorcraft/auto(loc)
if("How do Automatics work?")
visible_message("<b>[src]</b> smiles, <span class='spooky'>\"Hold wasd to gain speed in a direction, c to enable/disable the clutch, 1 2 3 4 to change gears (help is gear 1, disarm is gear 2, grab is gear 3 and harm is gear 4) while holding a direction (make sure the clutch is enabled when you change gears, you should hear a sound when you've successfully changed gears), r to toggle handbrake, hold alt for brake and press shift for boost (the machine will beep when the boost is recharged)! If you hear an ebbing sound like \"brbrbrbrbr\" you need to gear down, the whining sound means you need to gear up. Hearing a pleasant \"whumwhumwhum\" is optimal gearage! It can be a lil slow to start, so make sure you're in the 1st gear, andusing a boost to get you started is a good idea. If you've got a good speed you'll likely never need to dip down to gear 1 again, and make sure to hold the acceleration pedal down while changing gears (hold a direction). 1st gear is for slow movement, and it's a good idea to mvoe to 2nd gear as quick as you can, you can coldstart a car from gear one by slowly moving, then using the boost to jump you up to gear 2 speeds. The upper gears are for unlimiting your top speed.\"</span>")
jacqrunes("They're a bit tricky, aye. Basically;", C)
if("Nothing, thanks")
visible_message("<b>[src]</b> shrugs, <span class='spooky'>\"Suit yerself.\"</span>")
jacqrunes("Suit yerself.", C)
visible_message("<b>[src]</b> shrugs, <span class='spooky'>\"Oh and look after the crafts, aye? They can get a wee bit... explosive if banged up a tad too much. They move slower damaged too like. Ye can repair 'em with the welders o'er there.\"</span>")
jacqrunes("Oh and look after the crafts, aye? They can get a wee bit... explosive if banged up a tad too much. They move slower damaged too like. Ye can repair 'em with the welders o'er there. ", C)
/mob/living/simple_animal/jacq/update_mobility()
. = ..()
if(busy)

View File

@@ -379,7 +379,7 @@
else
to_chat(user, "<span class='notice'>You return the wisp to the lantern.</span>")
icon_state = "lantern-blue"
icon_state = initial(icon_state)
wisp.forceMove(src)
SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Returned")

View File

@@ -37,7 +37,8 @@
return BULLET_ACT_BLOCK
if(iscarbon(target))
var/mob/living/carbon/C = target
C.regenerate_limbs()
if(!is_species(C, /datum/species/dullahan)) //No accidental instagibbing dullahans please
C.regenerate_limbs()
C.regenerate_organs()
if(target.revive(full_heal = 1))
target.grab_ghost(force = TRUE) // even suicides

View File

@@ -106,6 +106,16 @@
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/bluespace_carrier
name = "Bluespace Jar"
desc = "A jar used to contain creatures, using the power of bluespace."
id = "bluespace_carrier"
build_type = PROTOLATHE
build_path = /obj/item/pet_carrier/bluespace
materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 600)
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/bluespace_pipe
name = "Bluespace Pipe"
desc = "A pipe that teleports gases."

View File

@@ -110,7 +110,7 @@
name = "\"Phazon\" Central Control module"
desc = "Allows for the construction of a \"Phazon\" Central Control module."
id = "phazon_main"
materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 100)
materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100)
build_path = /obj/item/circuitboard/mecha/phazon/main
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
@@ -119,7 +119,7 @@
name = "\"Phazon\" Peripherals Control module"
desc = "Allows for the construction of a \"Phazon\" Peripheral Control module."
id = "phazon_peri"
materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 100)
materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100)
build_path = /obj/item/circuitboard/mecha/phazon/peripherals
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
@@ -128,7 +128,7 @@
name = "\"Phazon\" Weapons & Targeting Control module"
desc = "Allows for the construction of a \"Phazon\" Weapons & Targeting Control module."
id = "phazon_targ"
materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 100)
materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100)
build_path = /obj/item/circuitboard/mecha/phazon/targeting
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
@@ -143,7 +143,7 @@
id = "mech_scattershot"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
materials = list(/datum/material/iron=10000)
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -153,49 +153,27 @@
id = "mech_seedscatter"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/seedscatter
materials = list(/datum/material/iron=10000, /datum/material/glass = 10000)
materials = list(MAT_METAL=10000, MAT_GLASS = 10000)
construction_time = 70
category = list("Exosuit Equipment")
/datum/design/mech_scattershot_ammo
name = "Scattershot Ammunition"
desc = "Ammunition for the LBX AC 10 and Melon Seed exosuit weapon."
id = "mech_scattershot_ammo"
build_type = PROTOLATHE | MECHFAB
build_path = /obj/item/mecha_ammo/scattershot
materials = list(/datum/material/iron=6000)
construction_time = 20
category = list("Exosuit Ammunition", "Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mech_carbine
name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)"
desc = "Allows for the construction of FNX-99 \"Hades\" Carbine."
id = "mech_carbine"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
materials = list(/datum/material/iron=10000)
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/mech_carbine_ammo
name = "FNX-99 Carbine Ammunition"
desc = "Ammunition for the FNX-99 \"Hades\" Carbine."
id = "mech_carbine_ammo"
build_type = PROTOLATHE | MECHFAB
build_path = /obj/item/mecha_ammo/incendiary
materials = list(/datum/material/iron=6000)
construction_time = 20
category = list("Exosuit Ammunition", "Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mech_ion
name = "Exosuit Weapon (MKIV Ion Heavy Cannon)"
desc = "Allows for the construction of MKIV Ion Heavy Cannon."
id = "mech_ion"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
materials = list(/datum/material/iron=20000,/datum/material/silver=6000,/datum/material/uranium=2000)
materials = list(MAT_METAL=20000,MAT_SILVER=6000,MAT_URANIUM=2000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -205,7 +183,7 @@
id = "mech_tesla"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla
materials = list(/datum/material/iron=20000,/datum/material/silver=8000)
materials = list(MAT_METAL=20000,MAT_SILVER=8000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -215,7 +193,7 @@
id = "mech_laser"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
materials = list(/datum/material/iron=10000)
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -225,7 +203,7 @@
id = "mech_laser_heavy"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
materials = list(/datum/material/iron=10000)
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -235,70 +213,37 @@
id = "mech_grenade_launcher"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang
materials = list(/datum/material/iron=22000,/datum/material/gold=6000,/datum/material/silver=8000)
materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000)
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/mech_grenade_launcher_ammo
name = "SGL-6 Grenade Launcher Ammunition"
desc = "Ammunition for the SGL-6 Grenade Launcher."
id = "mech_grenade_launcher_ammo"
build_type = PROTOLATHE | MECHFAB
build_path = /obj/item/mecha_ammo/flashbang
materials = list(/datum/material/iron=4000,/datum/material/gold=500,/datum/material/silver=500)
construction_time = 20
category = list("Exosuit Ammunition", "Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mech_missile_rack
name = "Exosuit Weapon (BRM-6 Missile Rack)"
desc = "Allows for the construction of an BRM-6 Breaching Missile Rack."
name = "Exosuit Weapon (SRM-8 Missile Rack)"
desc = "Allows for the construction of an SRM-8 Missile Rack."
id = "mech_missile_rack"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching
materials = list(/datum/material/iron=22000,/datum/material/gold=6000,/datum/material/silver=8000)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack
materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000)
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/mech_missile_rack_ammo
name = "SRM-8 Missile Rack Ammunition"
desc = "Ammunition for the SRM-8 Missile Rack."
id = "mech_missile_rack_ammo"
build_type = PROTOLATHE | MECHFAB
build_path = /obj/item/mecha_ammo/missiles_br
materials = list(/datum/material/iron=8000,/datum/material/gold=500,/datum/material/silver=500)
construction_time = 20
category = list("Exosuit Ammunition", "Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/clusterbang_launcher
name = "Exosuit Module (SOB-3 Clusterbang Launcher)"
desc = "A weapon that violates the Geneva Convention at 3 rounds per minute"
id = "clusterbang_launcher"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang
materials = list(/datum/material/iron=20000,/datum/material/gold=10000,/datum/material/uranium=10000)
materials = list(MAT_METAL=20000,MAT_GOLD=10000,MAT_URANIUM=10000)
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/clusterbang_launcher_ammo
name = "SOB-3 Clusterbang Launcher Ammunition"
desc = "Ammunition for the SOB-3 Clusterbang Launcher"
id = "clusterbang_launcher_ammo"
build_type = PROTOLATHE | MECHFAB
build_path = /obj/item/mecha_ammo/clusterbang
materials = list(/datum/material/iron=6000,/datum/material/gold=1500,/datum/material/uranium=1500)
construction_time = 20
category = list("Exosuit Ammunition", "Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mech_wormhole_gen
name = "Exosuit Module (Localized Wormhole Generator)"
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
id = "mech_wormhole_gen"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator
materials = list(/datum/material/iron=10000)
build_path = /obj/item/reagent_containers/food/snacks/pie/cream //Temporary fix for the ball so someone doesn't griff
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -307,8 +252,8 @@
desc = "An exosuit module that allows exosuits to teleport to any position in view."
id = "mech_teleporter"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/teleporter
materials = list(/datum/material/iron=10000,/datum/material/diamond=10000)
build_path = /obj/item/reagent_containers/food/snacks/pie/cream //Temporary fix for the ball so someone doesn't griff
materials = list(MAT_METAL=10000,MAT_DIAMOND=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -318,7 +263,7 @@
id = "mech_rcd"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/rcd
materials = list(/datum/material/iron=30000,/datum/material/gold=20000,/datum/material/plasma=25000,/datum/material/silver=20000)
materials = list(MAT_METAL=30000,MAT_GOLD=20000,MAT_PLASMA=25000,MAT_SILVER=20000)
construction_time = 1200
category = list("Exosuit Equipment")
@@ -328,7 +273,7 @@
id = "mech_gravcatapult"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult
materials = list(/datum/material/iron=10000)
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -338,7 +283,7 @@
id = "mech_repair_droid"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
materials = list(/datum/material/iron=10000,/datum/material/glass=5000,/datum/material/gold=1000,/datum/material/silver=2000)
materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -348,7 +293,7 @@
id = "mech_energy_relay"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
materials = list(/datum/material/iron=10000,/datum/material/glass=2000,/datum/material/gold=2000,/datum/material/silver=3000)
materials = list(MAT_METAL=10000,MAT_GLASS=2000,MAT_GOLD=2000,MAT_SILVER=3000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -358,7 +303,7 @@
id = "mech_ccw_armor"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
materials = list(/datum/material/iron=20000,/datum/material/silver=5000)
materials = list(MAT_METAL=20000,MAT_SILVER=5000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -368,7 +313,7 @@
id = "mech_proj_armor"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
materials = list(/datum/material/iron=20000,/datum/material/gold=5000)
materials = list(MAT_METAL=20000,MAT_GOLD=5000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -378,7 +323,7 @@
id = "mech_diamond_drill"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill
materials = list(/datum/material/iron=10000,/datum/material/diamond=6500)
materials = list(MAT_METAL=10000,MAT_DIAMOND=6500)
construction_time = 100
category = list("Exosuit Equipment")
@@ -388,7 +333,7 @@
id = "mech_generator_nuclear"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
materials = list(/datum/material/iron=10000,/datum/material/glass=1000,/datum/material/silver=500)
materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=500)
construction_time = 100
category = list("Exosuit Equipment")
@@ -398,7 +343,7 @@
id = "mech_plasma_cutter"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma
materials = list(/datum/material/iron = 8000, /datum/material/glass = 1000, /datum/material/plasma = 2000)
materials = list(MAT_METAL = 8000, MAT_GLASS = 1000, MAT_PLASMA = 2000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -408,7 +353,7 @@
id = "mech_taser"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
materials = list(/datum/material/iron=10000)
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -418,28 +363,17 @@
id = "mech_lmg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
materials = list(/datum/material/iron=10000)
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/mech_lmg_ammo
name = "Ultra AC 2 Ammunition"
desc = "Ammunition for the Ultra AC 2 LMG"
id = "mech_lmg_ammo"
build_type = PROTOLATHE | MECHFAB
build_path = /obj/item/mecha_ammo/lmg
materials = list(/datum/material/iron=4000)
construction_time = 20
category = list("Exosuit Ammunition", "Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mech_sleeper
name = "Exosuit Medical Equipment (Mounted Sleeper)"
desc = "Equipment for medical exosuits. A mounted sleeper that stabilizes patients and can inject reagents in the exosuit's reserves."
id = "mech_sleeper"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/medical/sleeper
materials = list(/datum/material/iron=5000,/datum/material/glass=10000)
materials = list(MAT_METAL=5000,MAT_GLASS=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -449,7 +383,7 @@
id = "mech_syringe_gun"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun
materials = list(/datum/material/iron=3000,/datum/material/glass=2000)
materials = list(MAT_METAL=3000,MAT_GLASS=2000)
construction_time = 200
category = list("Exosuit Equipment")
@@ -458,7 +392,7 @@
desc = "Equipment for medical exosuits. A mounted medical nanite projector which will treat patients with a focused beam."
id = "mech_medi_beam"
build_type = MECHFAB
materials = list(/datum/material/iron = 15000, /datum/material/glass = 8000, /datum/material/plasma = 3000, /datum/material/gold = 8000, /datum/material/diamond = 2000)
materials = list(MAT_METAL = 15000, MAT_GLASS = 8000, MAT_PLASMA = 3000, MAT_GOLD = 8000, MAT_DIAMOND = 2000)
construction_time = 250
build_path = /obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam
category = list("Exosuit Equipment")

View File

@@ -192,7 +192,8 @@
/obj/item/clothing/under/costume/cheongsam = 3,
/obj/item/clothing/under/costume/cheongsam/white = 3,
/obj/item/clothing/under/costume/cheongsam/red = 3,
/obj/item/storage/backpack/snail = 3)
/obj/item/storage/backpack/snail = 3,
/obj/item/umbrella = 5)
contraband = list(/obj/item/clothing/accessory/turtleneck/tactifool/syndicate = 3,
/obj/item/clothing/under/syndicate/tacticool = 3,
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,

View File

@@ -43,6 +43,10 @@ endmap
map runtimestation
endmap
map spookystation
minplayers 150
endmap
map multiz_debug
endmap

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 101 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,311 @@
//Halloween Fluff Papers!
/obj/item/paper/pamphlet/balls/spookyasylum
name = "ASYLUMNAME Pamphlet"
info = "<center><b>The Twin Nexus Hotel</center></b><br><center><i>A place of Sanctuary</i></center><br><br><center>Welcome to The Twin-Nexus Hotel, \[insert name here]! The loyal staff stride to their best effort to cater for the best possible experience for all space(wo)men! If you have any questions or comments, please ask one of our on-board staff for more information.</center>"
/obj/item/paper/fluff/balls/spookyasylum/cell03
name = "Cell 3 Patient Information"
info = "<b>Name:</b> J. Crane<br><b>Age:</b> 46 <b>Gender:</b> M <b>Height:</b> 183cm <b>Weight:</b> 81kg<br><b>Notes:</b> Patient exhibits violent tendencies and is not to be released from restraints under any circumstances. To reduce risk of violent outbreaks, birds; which patient has a strong phobia towards; are no longer allowed in proximity of cells, this includes the chief of staff's pet parrot."
/obj/item/paper/fluff/balls/spookyasylum/cell04
name = "Cell 4 Patient Information"
info = "<b>Name:</b> Fidel S.<br><b>Age:</b> 20 <b>Gender:</b> M <b>Height:</b> 170cm <b>Weight:</b> 68kg<br><b>Notes:</b> Patient appears to be under the delusion that he is a dog, suffers from incontinence, and bites staff. Patient to be kept restrained in cell after attacking orderly Robinson, do not remove patient's muzzle outside designated meal periods."
/obj/item/paper/fluff/balls/spookyasylum/traffickingvictim
name = "Cell 1 Patient Information"
info = "<b>Name:</b> S. Albright<br><b>Age:</b> 26 <b>Gender:</b> F <b>Height:</b> 174cm <b>Weight:</b> 63kg<br><b>Notes:</b> \[The notes are crossed out and unreadable, but there is writing on the back of the paper] Buyer found in Sol system, wealthy Martian man looking for a cheap bride, doesn't mind poor condition of the merchandise. Will be packaging with the next supply ship for transport."
/obj/item/paper/fluff/balls/spookyasylum/healstaffnote
name = "Shipping Manifest 'Healing Staves'"
info = "Contained in this chest are several magical healing staves created by NT sanctioned warlocks, please use them in the event an employee is injured during the festivities. We hope you have a safe and enjoyable celebration, remember you are expected to return to work promptly at its conclusion.<br>We apologize in the unlikely event the contents of the crate are scattered around the asylum by its teleportation."
//Dorm Buttons
/obj/machinery/button/door/dorms/dorm01
name = "dorm 1 button"
id = "D100"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm02
name = "dorm 2 button"
id = "D101"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm03
name = "dorm 3 button"
id = "D102"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm04
name = "dorm 4 button"
id = "D103"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm05
name = "dorm 5 button"
id = "D104"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm06
name = "dorm 6 button"
id = "D105"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm07
name = "dorm 7 button"
id = "D106"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm08
name = "dorm 8 button"
id = "D107"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm09
name = "dorm 9 button"
id = "D108"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm10
name = "dorm 10 button"
id = "D109"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm11
name = "dorm 11 button"
id = "D110"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm12
name = "dorm 12 button"
id = "D111"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm13
name = "dorm 13 button"
id = "D112"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm14
name = "dorm 14 button"
id = "D113"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm15
name = "dorm 15 button"
id = "D114"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm16
name = "dorm 16 button"
id = "D115"
normaldoorcontrol = 1
pixel_x = 24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm17
name = "dorm 17 button"
id = "D116"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm18
name = "dorm 18 button"
id = "D117"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm19
name = "dorm 19 button"
id = "D118"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/dorm20
name = "dorm 20 button"
id = "D119"
normaldoorcontrol = 1
pixel_x = -24
specialfunctions = 4
/obj/machinery/button/door/dorms/patient1
name = "door bolt"
id = "D120"
normaldoorcontrol = 1
pixel_x = 24
pixel_y = -8
specialfunctions = 4
/obj/machinery/button/door/dorms/patient2
name = "door bolt"
id = "D121"
normaldoorcontrol = 1
pixel_x = 24
pixel_y = -8
specialfunctions = 4
/obj/machinery/button/door/dorms/luxury1
name = "Privacy Shutter Control"
id = "L00"
pixel_x = -8
pixel_y = -24
/obj/machinery/button/door/dorms/luxury2
name = "Privacy Shutter Control"
id = "L01"
pixel_x = 8
pixel_y = -24
/obj/machinery/button/door/dorms/luxury3
name = "Privacy Shutter Control"
id = "L02"
pixel_x = 8
pixel_y = 24
/obj/machinery/button/door/dorms/luxury4
name = "Privacy Shutter Control"
id = "L03"
pixel_x = -24
pixel_y = 8
//Dorm Doors
/obj/machinery/door/airlock/wood/dorms/dorm01
name = "Room 1"
id_tag = "D100"
/obj/machinery/door/airlock/wood/dorms/dorm02
name = "Room 2"
id_tag = "D101"
/obj/machinery/door/airlock/wood/dorms/dorm03
name = "Room 3"
id_tag = "D102"
/obj/machinery/door/airlock/wood/dorms/dorm04
name = "Room 4"
id_tag = "D103"
/obj/machinery/door/airlock/wood/dorms/dorm05
name = "Room 5"
id_tag = "D104"
/obj/machinery/door/airlock/wood/dorms/dorm06
name = "Room 6"
id_tag = "D105"
/obj/machinery/door/airlock/wood/dorms/dorm07
name = "Room 7"
id_tag = "D106"
/obj/machinery/door/airlock/wood/dorms/dorm08
name = "Room 8"
id_tag = "D107"
/obj/machinery/door/airlock/wood/dorms/dorm09
name = "Room 9"
id_tag = "D108"
/obj/machinery/door/airlock/wood/dorms/dorm10
name = "Room 10"
id_tag = "D109"
/obj/machinery/door/airlock/wood/dorms/dorm11
name = "Room 11"
id_tag = "D110"
/obj/machinery/door/airlock/wood/dorms/dorm12
name = "Room 12"
id_tag = "D111"
/obj/machinery/door/airlock/wood/dorms/dorm13
name = "Room 13"
id_tag = "D112"
/obj/machinery/door/airlock/wood/dorms/dorm14
name = "Room 14"
id_tag = "D113"
/obj/machinery/door/airlock/wood/dorms/dorm15
name = "Room 15"
id_tag = "D114"
/obj/machinery/door/airlock/wood/dorms/dorm16
name = "Room 16"
id_tag = "D115"
/obj/machinery/door/airlock/wood/dorms/dorm17
name = "Room 17"
id_tag = "D116"
/obj/machinery/door/airlock/wood/dorms/dorm18
name = "Room 18"
id_tag = "D117"
/obj/machinery/door/airlock/wood/dorms/dorm19
name = "Room 19"
id_tag = "D118"
/obj/machinery/door/airlock/wood/dorms/dorm20
name = "Room 20"
id_tag = "D119"
/obj/machinery/door/airlock/wood/dorms/patient1
name = "Recovery Room 1"
id_tag = "D120"
/obj/machinery/door/airlock/wood/dorms/patient2
name = "Recovery Room 2"
id_tag = "D121"
//Luxury Dorm Shutters
/obj/machinery/door/poddoor/shutters/preopen/luxury_dorms/luxury01
name = "Privacy Shutters"
id = "L00"
/obj/machinery/door/poddoor/shutters/preopen/luxury_dorms/luxury02
name = "Privacy Shutters"
id = "L01"
/obj/machinery/door/poddoor/shutters/preopen/luxury_dorms/luxury03
name = "Privacy Shutters"
id = "L02"
/obj/machinery/door/poddoor/shutters/preopen/luxury_dorms/luxury04
name = "Privacy Shutters"
id = "L03"

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -0,0 +1,28 @@
PROCESSING_SUBSYSTEM_DEF(vectorcraft)
name = "Vectorcraft Movement"
priority = 40
wait = 2
stat_tag = "VC"
flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING
//var/flightsuit_processing = FLIGHTSUIT_PROCESSING_FULL
/* unsure if needed
/datum/controller/subsystem/processing/vectorcraft/Initialize()
sync_flightsuit_processing()
/datum/controller/subsystem/processing/vectorcraft/vv_edit_var(var_name, var_value)
..()
switch(var_name)
if("flightsuit_processing")
sync_flightsuit_processing()
/datum/controller/subsystem/processing/vectorcraft/proc/sync_flightsuit_processing()
for(var/obj/vehicle/sealed/vectorcraft/VC in processing)
VC.sync_processing(src)
if(flightsuit_processing == FLIGHTSUIT_PROCESSING_NONE) //Don't even bother firing.
can_fire = FALSE
else
can_fire = TRUE
*/

View File

@@ -0,0 +1,28 @@
/obj/vehicle/sealed/vectorcraft/CMO
name = "CMO's hovercar"
icon_state = "zoomscoot_CMO"
/obj/vehicle/sealed/vectorcraft/RD
name = "RD's hovercar"
icon_state = "zoomscoot_RD"
/obj/vehicle/sealed/vectorcraft/hop
name = "HOP\'s hovercar"
icon_state = "zoomscoot_HOP"
/obj/vehicle/sealed/vectorcraft/hos
name = "HOS\'s hovercar"
icon_state = "zoomscoot_HOS"
/obj/vehicle/sealed/vectorcraft/CE
name = "CE\'s hovercar"
icon_state = "zoomscoot_CE"
/obj/vehicle/sealed/vectorcraft/QM
name = "QM\'s hovercar"
icon_state = "zoomscoot_QM"
/obj/vehicle/sealed/vectorcraft/CAPT
name = "Captain\'s hovercar"
icon_state = "zoomscoot_CAPT"
boost_power = 20 //gosh capt how come CC lets you have more boost power?

View File

@@ -0,0 +1,603 @@
#define SPEED_MOD 5
#define PX_OFFSET 16 //half of total px size of sprite
//Cars that drfit
//By Fermi!
/obj/vehicle/sealed/vectorcraft
name = "all-terrain hovercraft"
desc = "An all-terrain vehicle built for traversing rough terrain with ease. One of the few old-Earth technologies that are still relevant on most planet-bound outposts."
icon_state = "zoomscoot"
movedelay = 5
//allow_diagonal_dir = TRUE - find fix for this later
inertia_moving = FALSE
animate_movement = 0
max_integrity = 100
//key_type = /obj/item/key
var/obj/structure/trunk //Trunkspace of craft
var/vector = list("x" = 0, "y" = 0) //vector math
var/tile_loc = list("x" = 0, "y" = 0) //x y offset of tile
var/max_acceleration = 5.25
var/accel_step = 0.3
var/acceleration = 0.4
var/max_deceleration = 2
var/max_velocity = 110
var/boost_power = 15
var/enginesound_delay = 0
var/gear
var/boost_cooldown
var/mob/living/carbon/human/driver
/obj/vehicle/sealed/vectorcraft/mob_enter(mob/living/M)
if(!driver)
driver = M
if(gear != "auto")
gear = driver.a_intent
start_engine()
to_chat(M, "<span class='big notice'>How to drive:</span> \n<span class='notice'><i>Hold wasd to gain speed in a direction, c to enable/disable the clutch, 1 2 3 4 to change gears while holding a direction (make sure the clutch is enabled when you change gears, you should hear a sound when you've successfully changed gears), r to toggle handbrake, hold alt for brake and press shift for boost (the machine will beep when the boost is recharged)! If you hear an ebbing sound like \"brbrbrbrbr\" you need to gear down, the whining sound means you need to gear up. Hearing a pleasant \"whumwhumwhum\" is optimal gearage! It can be a lil slow to start, so make sure you're in the 1st gear.\n</i></span>")
return ..()
/obj/vehicle/sealed/vectorcraft/mob_exit(mob/living/M)
.=..()
if(!driver)
stop_engine()
return
if(driver.client)
driver.client.pixel_x = 0
driver.client.pixel_y = 0
driver.pixel_x = 0
driver.pixel_y = 0
if(M == driver)
driver = null
gear = initial(gear)
stop_engine()
//////////////////////////////////////////////////////////////
// Main driving checks //
//////////////////////////////////////////////////////////////
/obj/vehicle/sealed/vectorcraft/proc/start_engine()
if(dead_check())
return
START_PROCESSING(SSvectorcraft, src)
check_gears()
if(!driver)
stop_engine()
/obj/vehicle/sealed/vectorcraft/proc/stop_engine()
STOP_PROCESSING(SSvectorcraft, src)
vector = list("x" = 0, "y" = 0)
acceleration = initial(acceleration)
/obj/vehicle/sealed/vectorcraft/proc/dead_check()
if(driver.stat > 0)
mob_exit(driver)
stop_engine()
return TRUE
return FALSE
//Move the damn car
/obj/vehicle/sealed/vectorcraft/vehicle_move(cached_direction)
if(!driver)
stop_engine()
if(driver.stat == DEAD)
mob_exit(driver)
dir = cached_direction
check_gears()
check_boost()
calc_acceleration()
calc_vector(cached_direction)
/*
var/direction = calc_angle()
if(!direction)
direction = cached_direction
return
*/
/* depreciated
//movespeed
if(lastmove + movedelay > world.time)
return FALSE
lastmove = world.time
if(trailer)
var/dir_to_move = get_dir(trailer.loc, loc)
var/did_move = step(src, direction)
if(did_move)
step(trailer, dir_to_move)
return did_move
else
after_move(direction)
return step(src, direction)
*/
//Passive hover drift
/obj/vehicle/sealed/vectorcraft/proc/hover_loop()
check_boost()
if(driver.m_intent == MOVE_INTENT_WALK)
var/deceleration = max_deceleration
if(driver.in_throw_mode)
deceleration *= 1.5
friction(deceleration, TRUE)
else if(driver.in_throw_mode)
friction(max_deceleration*1.2, TRUE)
friction(max_deceleration/4)
if(trailer)
var/dir_to_move = get_dir(trailer.loc, loc)
var/did_move = move_car()
if(did_move)
step(trailer, dir_to_move)
trailer.pixel_x = tile_loc["x"]
trailer.pixel_y = tile_loc["y"]
after_move(did_move)
return did_move
else
var/direction = move_car()
after_move(direction)
return direction
//I got over messy process procs
/obj/vehicle/sealed/vectorcraft/process()
hover_loop()
dead_check()
//////////////////////////////////////////////////////////////
// Movement procs //
//////////////////////////////////////////////////////////////
/obj/vehicle/sealed/vectorcraft/proc/move_car()
if(GLOB.Debug2)
message_admins("Pre_ Tile_loc: [tile_loc["x"]], [tile_loc["y"]] Vector: [vector["x"]],[vector["y"]]")
var/cached_tile = tile_loc
tile_loc["x"] += vector["x"]/SPEED_MOD
tile_loc["y"] += vector["y"]/SPEED_MOD
//range = -16 to 16
var/x_move = 0
if(tile_loc["x"] > PX_OFFSET)
x_move = round((tile_loc["x"]+PX_OFFSET) / (PX_OFFSET*2), 1)
tile_loc["x"] = ((tile_loc["x"]+PX_OFFSET) % (PX_OFFSET*2))-PX_OFFSET
else if(tile_loc["x"] < -PX_OFFSET)
x_move = round((tile_loc["x"]-PX_OFFSET) / (PX_OFFSET*2), 1)
tile_loc["x"] = ((tile_loc["x"]-PX_OFFSET) % -(PX_OFFSET*2))+PX_OFFSET
var/y_move = 0
if(tile_loc["y"] > PX_OFFSET)
y_move = round((tile_loc["y"]+PX_OFFSET) / (PX_OFFSET*2), 1)
tile_loc["y"] = ((tile_loc["y"]+PX_OFFSET) % (PX_OFFSET*2))-PX_OFFSET
else if(tile_loc["y"] < -PX_OFFSET)
y_move = round((tile_loc["y"]-PX_OFFSET) / (PX_OFFSET*2), 1)
tile_loc["y"] = ((tile_loc["y"]-PX_OFFSET) % -(PX_OFFSET*2))+PX_OFFSET
if(!(x_move == 0 && y_move == 0))
var/turf/T = get_offset_target_turf(src, x_move, y_move)
for(var/atom/A in T.contents)
Bump(A)
if(A.density)
ricochet()
tile_loc = cached_tile
return FALSE
if(T.density)
ricochet()
tile_loc = cached_tile
return FALSE
x += x_move
y += y_move
pixel_x = round(tile_loc["x"], 1)
pixel_y = round(tile_loc["y"], 1)
if(driver && driver.client)
driver.client.pixel_x = pixel_x
driver.client.pixel_y = pixel_y
if(GLOB.Debug2)
message_admins("Post TileLoc:[tile_loc["x"]], [tile_loc["y"]] Movement: [x_move],[y_move]")
message_admins("Pix:[pixel_x],[pixel_y] TileLoc:[tile_loc["x"]], [tile_loc["y"]]. [round(tile_loc["x"])], [round(tile_loc["y"])]")
//no tile movement
if(x_move == 0 && y_move == 0)
return FALSE
//var/direction = calc_step_angle(x_move, y_move)
//if(direction) //If the movement is greater than 2
// step(src, direction)
// after_move(direction)
return TRUE
//////////////////////////////////////////////////////////////
// Check procs //
//////////////////////////////////////////////////////////////
//check the cooldown on the boost
/obj/vehicle/sealed/vectorcraft/proc/check_boost()
if(enginesound_delay < world.time)
enginesound_delay = 0
if(!boost_cooldown)
return
if(boost_cooldown < world.time)
boost_cooldown = 0
playsound(src.loc,'sound/vehicles/boost_ready.ogg', 65, 0)
return
//Make sure the clutch is on while changing gears!!
/obj/vehicle/sealed/vectorcraft/proc/check_gears()
if(!driver)
for(var/i in contents)
if(iscarbon(i))
var/mob/living/carbon/C = i
driver = C
to_chat(driver, "<span class='notice'><b>You shuffle across to the driver's seat of the [src]</b></span>")
start_engine()
break
if(!driver)
stop_engine()
return
if(!gear)
gear = driver.a_intent
if(gear == "auto")
return
//USE THE CCLUUUTCHHH
if(gear != driver.a_intent && SEND_SIGNAL(driver, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_INACTIVE))
//playsound
to_chat(driver, "<span class='warning'><b>The gearbox gives out a horrific sound!</b></span>")
playsound(src.loc,'sound/vehicles/clutch_fail.ogg', 70, 0)
apply_damage(5)
acceleration = acceleration/2
else if(gear != driver.a_intent && SEND_SIGNAL(driver, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE))
playsound(src.loc,'sound/vehicles/clutch_win.ogg', 100, 0)
gear = driver.a_intent
//Bounce the car off a wall
/obj/vehicle/sealed/vectorcraft/proc/bounce()
vector["x"] = -vector["x"]/2
vector["y"] = -vector["y"]/2
acceleration /= 2
/obj/vehicle/sealed/vectorcraft/proc/ricochet(x_move, y_move)
var/speed = calc_speed()
apply_damage(speed/10)
bounce()
//////////////////////////////////////////////////////////////
// Damage procs //
//////////////////////////////////////////////////////////////
//Repairing
/obj/vehicle/sealed/vectorcraft/attackby(obj/item/O, mob/user, params)
.=..()
if(istype(O, /obj/item/weldingtool) && user.a_intent != INTENT_HARM)
if(obj_integrity < max_integrity)
if(!O.tool_start_check(user, amount=0))
return
user.visible_message("[user] begins repairing [src].", \
"<span class='notice'>You begin repairing [src]...</span>", \
"<span class='italics'>You hear welding.</span>")
if(O.use_tool(src, user, 40, volume=50))
to_chat(user, "<span class='notice'>You repair [src].</span>")
apply_damage(-max_integrity)
else
to_chat(user, "<span class='notice'>[src] does not need repairs.</span>")
/obj/vehicle/sealed/vectorcraft/attack_hand(mob/user)
remove_key(driver)
..()
//Heals/damages the car
/obj/vehicle/sealed/vectorcraft/proc/apply_damage(damage)
obj_integrity -= damage
var/healthratio = ((obj_integrity/max_integrity)/4) + 0.75
max_acceleration = initial(max_acceleration) * healthratio
max_deceleration = initial(max_deceleration) * healthratio
boost_power = initial(boost_power) * healthratio
if(obj_integrity <= 0)
mob_exit(driver)
var/datum/effect_system/reagents_explosion/e = new()
var/turf/T = get_turf(src)
e.set_up(1, T, 1, 3)
e.start()
visible_message("The [src] explodes from taking too much damage!")
qdel(src)
if(obj_integrity > max_integrity)
obj_integrity = max_integrity
//
/obj/vehicle/sealed/vectorcraft/Bump(atom/M)
var/speed = calc_speed()
if(isliving(M))
var/mob/living/C = M
if(!C.anchored)
var/atom/throw_target = get_edge_target_turf(C, calc_angle())
C.throw_at(throw_target, 10, 14)
to_chat(C, "<span class='warning'><b>You are hit by the [src]!</b></span>")
to_chat(driver, "<span class='warning'><b>You just ran into [C] you crazy lunatic!</b></span>")
C.adjustBruteLoss(speed/10)
return ..()
//playsound
if(istype(M, /obj/vehicle/sealed/vectorcraft))
var/obj/vehicle/sealed/vectorcraft/Vc = M
Vc.apply_damage(speed/5)
Vc.vector["x"] += vector["x"]/2
Vc.vector["y"] += vector["y"]/2
apply_damage(speed/10)
bounce()
return ..()
if(istype(M, /obj/))
var/obj/O = M
if(O.density)
O.take_damage(speed*2.5)
return ..()
//////////////////////////////////////////////////////////////
// Calc procs //
//////////////////////////////////////////////////////////////
/*Calc_step_angle calculates angle based off pixel x,y movement (x,y in)
Calc angle calcus angle based off vectors
calc_speed() returns the highest var of x or y relative
calc accel calculates the acceleration to be added to vector
calc vector updates the internal vector
friction reduces the vector by an ammount to both axis*/
//How fast the car is going atm
/obj/vehicle/sealed/vectorcraft/proc/calc_velocity() //Depreciated.
var/speed = calc_speed()
switch(speed)
if(-INFINITY to 10)
movedelay = 5
inertia_move_delay = 5
if(10 to 20)
movedelay = 4
inertia_move_delay = 4
if(20 to 35)
movedelay = 3
inertia_move_delay = 3
if(35 to 60)
movedelay = 2
inertia_move_delay = 2
if(60 to 90)
movedelay = 1
inertia_move_delay = 1
if(90 to INFINITY)
movedelay = 0
inertia_move_delay = 0
return
/*
if(driver.sprinting && !(boost_cooldown))
acceleration += boost_power //You got boost power!
boost_cooldown = world.time + 150
playsound(src.loc,'sound/vehicles/boost.ogg', 50, 0)
//playsound
*/
/obj/vehicle/sealed/vectorcraft/proc/calc_step_angle(x, y)
if((sqrt(x**2))>1 || (sqrt(y**2))>1) //Too large a movement for a step
return FALSE
if(x == 1)
if (y == 1)
return NORTHEAST
else if (y == -1)
return SOUTHEAST
else if (y == 0)
return EAST
else
message_admins("something went wrong; y = [y]")
else if (x == -1)
if (y == 1)
return NORTHWEST
else if (y == -1)
return SOUTHWEST
else if (y == 0)
return WEST
else
message_admins("something went wrong; y = [y]")
else if (x != 0)
message_admins("something went wrong; x = [x]")
if (y == 1)
return NORTH
else if (y == -1)
return SOUTH
else if (x != 0)
message_admins("something went wrong; y = [y]")
return FALSE
//Returns the angle to move towards
/obj/vehicle/sealed/vectorcraft/proc/calc_angle()
var/x = round(vector["x"], 1)
var/y = round(vector["y"], 1)
if(y == 0)
if(x > 0)
return EAST
else if(x < 0)
return WEST
if(x == 0)
if(y > 0)
return NORTH
else if(y < 0)
return SOUTH
if(x == 0 || y == 0)
return FALSE
var/angle = (ATAN2(x,y))
//if(angle < 0)
// angle += 360
//message_admins("x:[x], y: [y], angle:[angle]")
//I WISH I HAD RADIANSSSSSSSSSS
if(angle > 0)
switch(angle)
if(0 to 22)
return EAST
if(22 to 67)
return NORTHEAST
if(67 to 112)
return NORTH
if(112 to 157)
return NORTHWEST
if(157 to 180)
return WEST
else
switch(angle)
if(0 to -22)
return EAST
if(-22 to -67)
return SOUTHEAST
if(-67 to -112)
return SOUTH
if(-112 to -157)
return SOUTHWEST
if(-157 to -180)
return WEST
//updates the internal speed of the car (used for crashing)
/obj/vehicle/sealed/vectorcraft/proc/calc_speed()
var/speed = max(sqrt((vector["x"]**2)), sqrt((vector["y"]**2)))
return speed
//Converts "gear" from intent to numerics
/obj/vehicle/sealed/vectorcraft/proc/convert_gear()
switch(gear)
if("help")
return 1
if("disarm")
return 2
if("grab")
return 3
if("harm")
return 4
//Calculates the acceleration
/obj/vehicle/sealed/vectorcraft/proc/calc_acceleration() //Make speed 0 - 100 regardless of gear here
if(SEND_SIGNAL(driver, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE))//clutch is on
return FALSE
if(gear == "auto")
acceleration += accel_step
acceleration = clamp(acceleration, initial(acceleration), max_acceleration)
if(!enginesound_delay)
playsound(src.loc,'sound/vehicles/norm_eng.ogg', 25, 0)
enginesound_delay = world.time + 16
return
var/gear_val = convert_gear()
var/min_accel = max_acceleration*( (((gear_val-1) * 20) + ((gear_val-1)*5)) /100)
var/max_accel = max_acceleration*((gear_val * 25)/100) //1.25 - 5
if(acceleration < min_accel)
acceleration += accel_step/10
if(!enginesound_delay)
playsound(src.loc,'sound/vehicles/low_eng.ogg', 25, 0)
enginesound_delay = world.time + 16
else if (acceleration > max_accel)
acceleration -= accel_step
if(!enginesound_delay)
playsound(src.loc,'sound/vehicles/high_eng.ogg', 25, 0)
enginesound_delay = world.time + 16
else
if(gear_val == 1)
acceleration += accel_step*3.5
else
acceleration += accel_step
if(!enginesound_delay)
playsound(src.loc,'sound/vehicles/norm_eng.ogg', 25, 0)
enginesound_delay = world.time + 16
if(acceleration > ((max_acceleration*calc_speed())/90) && acceleration > max_acceleration/5)
acceleration -= accel_step*2
if(!enginesound_delay)
playsound(src.loc,'sound/vehicles/high_eng.ogg', 25, 0)
enginesound_delay = world.time + 16
return
acceleration = clamp(acceleration, initial(acceleration), max_acceleration)
//calulate the vector change
/obj/vehicle/sealed/vectorcraft/proc/calc_vector(direction)
if(SEND_SIGNAL(driver, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE))//clutch is on
return FALSE
var/cached_acceleration = acceleration
var/boost_active = FALSE
if((driver.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) && !(boost_cooldown))
cached_acceleration += boost_power //You got boost power!
boost_cooldown = world.time + 80
playsound(src.loc,'sound/vehicles/boost.ogg', 100, 0)
boost_active = TRUE
//playsound
var/result_vector = vector
switch(direction)
if(NORTH)
result_vector["y"] += cached_acceleration
if(NORTHEAST)
result_vector["x"] += cached_acceleration/1.4
result_vector["y"] += cached_acceleration/1.4
if(EAST)
result_vector["x"] += cached_acceleration
if(SOUTHEAST)
result_vector["x"] += cached_acceleration/1.4
result_vector["y"] -= cached_acceleration/1.4
if(SOUTH)
result_vector["y"] -= cached_acceleration
if(SOUTHWEST)
result_vector["x"] -= cached_acceleration/1.4
result_vector["y"] -= cached_acceleration/1.4
if(WEST)
result_vector["x"] -= cached_acceleration
if(NORTHWEST)
result_vector["y"] += cached_acceleration/1.4
result_vector["x"] -= cached_acceleration/1.4
if(boost_active)
vector["x"] = result_vector["x"]
vector["y"] = result_vector["y"]
else
vector["x"] = clamp(result_vector["x"], -max_velocity, max_velocity)
vector["y"] = clamp(result_vector["y"], -max_velocity, max_velocity)
if(vector["x"] > max_velocity || vector["x"] < -max_velocity)
vector["x"] = vector["x"] - (vector["x"]/10)
vector["x"] = clamp(vector["x"], -250, 250)
if(vector["y"] > max_velocity || vector["y"] < -max_velocity)
vector["y"] = vector["y"] - (vector["y"]/10)
vector["y"] = clamp(vector["y"], -250, 250)
return
//Reduces speed
/obj/vehicle/sealed/vectorcraft/proc/friction(change, sfx = FALSE)
//decell X
if(vector["x"] == 0 && vector["y"] == 0)
return
if(vector["x"] <= -change)
vector["x"] += change
else if(vector["x"] >= change)
vector["x"] -= change
else
vector["x"] = 0
//decell Y
if(vector["y"] <= -change)
vector["y"] += change
else if(vector["y"] >= change)
vector["y"] -= change
else
vector["y"] = 0
if(sfx)
playsound(src.loc,'sound/vehicles/skid.ogg', 50, 0)

View File

@@ -0,0 +1,57 @@
/obj/vehicle/sealed/vectorcraft/cyber
name = "Cyberscuttle"
desc = "A robust hovercar that, until recently, could self drive. Unfortunately it was found that the AI was terrified of orbs and drove away from them at all costs. Overall a smashing hovercar."
max_acceleration = 4.5
accel_step = 0.4
acceleration = 0.5
max_deceleration = 3.5
max_velocity = 95
max_integrity = 150
icon_state = "cyber"
/obj/vehicle/sealed/vectorcraft/clown
name = "Clowncraft"
icon_state = "clowncar"
max_acceleration = 4.7
accel_step = 0.4
acceleration = 0.5
max_deceleration = 4
max_velocity = 90
boost_power = 25
max_integrity = 80
/obj/vehicle/sealed/vectorcraft/truck
name = "Hovertruck"
desc = "An all-terrain vehicle built for traversing rough terrain with ease."
gear = "auto"
icon_state = "truck"
max_acceleration = 4.25
accel_step = 0.4
acceleration = 0.5
max_deceleration = 5
max_velocity = 90
boost_power = 10
max_integrity = 200
/obj/vehicle/sealed/vectorcraft/ambulance
name = "Ambulance"
icon_state = "ambutruck"
max_acceleration = 4.25
accel_step = 0.4
acceleration = 0.5
max_deceleration = 5
max_velocity = 90
boost_power = 40
max_integrity = 200
/obj/vehicle/sealed/vectorcraft/auto
name = "Automatic hovercraft"
gear = "auto"
icon_state = "zoomscoot_auto"
max_acceleration = 4
accel_step = 0.22
acceleration = 0.30
max_deceleration = 2
max_velocity = 90
boost_power = 5
max_integrity = 100

BIN
sound/vehicles/boost.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sound/vehicles/high_eng.ogg Normal file

Binary file not shown.

BIN
sound/vehicles/low_eng.ogg Normal file

Binary file not shown.

BIN
sound/vehicles/norm_eng.ogg Normal file

Binary file not shown.

BIN
sound/vehicles/skid.ogg Normal file

Binary file not shown.

View File

@@ -15,6 +15,10 @@
// BEGIN_INCLUDE
#include "_maps\_basemap.dm"
#include "_maps\spookystation.dm"
#include "_maps\map_files\SpookyStation\halloweenPersiWork.dm"
#include "_maps\map_files\SpookyStation\job_changes.dm"
#include "_maps\map_files\SpookyStation\SpookyStation.dmm"
#include "code\_compile_options.dm"
#include "code\world.dm"
#include "code\__DEFINES\_auxtools.dm"
@@ -2241,6 +2245,7 @@
#include "code\modules\holiday\easter.dm"
#include "code\modules\holiday\holidays.dm"
#include "code\modules\holiday\halloween\bartholomew.dm"
#include "code\modules\holiday\halloween\halloween.dm"
#include "code\modules\holiday\halloween\jacqueen.dm"
#include "code\modules\holodeck\area_copy.dm"
#include "code\modules\holodeck\computer.dm"
@@ -3752,6 +3757,8 @@
#include "modular_citadel\code\modules\custom_loadout\custom_items.dm"
#include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm"
#include "modular_citadel\code\modules\custom_loadout\read_from_file.dm"
#include "modular_citadel\code\modules\eventmaps\Spookystation\halloweenPersiWork.dm"
#include "modular_citadel\code\modules\eventmaps\Spookystation\JTGSZwork.dm"
#include "modular_citadel\code\modules\mentor\dementor.dm"
#include "modular_citadel\code\modules\mentor\follow.dm"
#include "modular_citadel\code\modules\mentor\mentor.dm"
@@ -3790,4 +3797,8 @@
#include "modular_citadel\code\modules\reagents\chemistry\recipes\fermi.dm"
#include "modular_citadel\code\modules\reagents\objects\clothes.dm"
#include "modular_citadel\code\modules\reagents\objects\items.dm"
#include "modular_citadel\code\modules\vectorcrafts\vector_process.dm"
#include "modular_citadel\code\modules\vectorcrafts\vectorcar_heads.dm"
#include "modular_citadel\code\modules\vectorcrafts\vectorcraft.dm"
#include "modular_citadel\code\modules\vectorcrafts\vectorvariants.dm"
// END_INCLUDE