Merge pull request #8173 from Cerebulon/tgportports

Misc Vore-TG Port Ports
This commit is contained in:
Atermonera
2021-07-24 16:19:36 -07:00
committed by GitHub
39 changed files with 1114 additions and 193 deletions
@@ -334,6 +334,7 @@
icon_state="bsposter56"
name = "Mars appreciation poster"
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit historic Mars. Come for the domes, stay for the monuments to hubris!"
listing_name = "Tourism - Mars"
/decl/poster/bay_57
icon_state="bsposter57"
@@ -327,4 +327,336 @@
icon_state = "ntposter09"
name = "Regulations and You"
desc = "This SifGov poster showcases an NT security guard reading from her PDA. The blurb advocates for the reader to keep corporate regulations in mind at all times, as an emergency can occur at any time."
listing_name = "Safety - Corporate Regulations"
listing_name = "Safety - Corporate Regulations"
/decl/poster/nanotrasen/vore_17
icon_state = "dwposter4"
name = "We Know Genes"
desc = "A poster purporting the infallibility of NanoTrasen's in-house forensics department."
listing_name = "Safety - Forensics"
//Selective VORE ports
/decl/poster/vore_14
icon_state = "dwposter1"
name = "WANTED: PIRATES"
desc = "A poster bringing awareness to the distinguishing uniform of a known band of criminals operating in the Vir/Gavel region."
listing_name = "PSA - Pirate Faction"
/decl/poster/vore_16
icon_state = "dwposter3"
name = "Productivity implant"
desc = "A poster describing the benefits of Ward-Takahashi brand 'Energy Plus' implants on alertness and productivity in work and leisure."
listing_name = "Ad - Implants"
/decl/poster/vore_18
icon_state = "dwposter5"
name = "KAT"
desc = "A promotional poster for popular exonet show 'Kat-Kat Korner'."
listing_name = "Ad - Kat-Kat Korner"
/decl/poster/vore_19
icon_state = "dwposter6"
name = "Abstract Art"
desc = "You wish you had the source for this art, but it doesn't seem like it was installed correctly."
listing_name = "Art - Textures"
/decl/poster/vore_21
icon_state = "dwposter8"
name = "GPA"
desc = "A pretentious advertisement for the discontinued drink 'Galactic Panic Attack'"
listing_name = "Ad - Energy Drink"
/decl/poster/vore_22
icon_state = "dwposter9"
name = "Rope"
desc = "A poster depicting proper pit-traversal gear."
listing_name = "Safety - Ropes"
/decl/poster/vore_23
icon_state = "dwposter10"
name = "Visit Luna"
desc = "Part of a tourism campaign from the Visit Space Society encouraging people to visit Earth's moon and seat of the SCG, Luna."
listing_name = "Tourism - Luna"
/decl/poster/vore_24
icon_state = "dwposter11"
name = "Secgun"
desc = "A striking, wordless advertisement for a Lawson Arms law enforcement firearm. Largely ineffective for those not already familiar with the product line."
listing_name = "Ad - Lawson Arms"
/decl/poster/vore_27
icon_state = "sbsposter16"
name = "Borgar"
desc = "Don't have food at home? Feel like more than just a black coffee? Try the Borgar Burger, available everywhere."
listing_name = "Ad - Burger"
/decl/poster/vore_29
icon_state = "sbsposter18"
name = "Perdition"
desc = "You get the feeling that whomever made this intended for you to feel very differently than you do when you look at it."
listing_name = "Art - Abstract Lines"
/decl/poster/vore_31
icon_state = "tgposter1"
name = "Space Cube"
desc = "It depicts a curious cube!"
listing_name = "Art - Cube"
/decl/poster/vore_35
icon_state = "tgposter5"
name = "C-20R"
desc = "An ad for the C-20R sub-machinegun, produced by Scarborough Arms on Titan, a company notable for resisting trans-stellar acquisition efforts for over 50 years."
listing_name = "Ad - C-20R SMG"
/decl/poster/vore_36
icon_state = "tgposter6"
name = "Have a Puff"
desc = "A crudely rolled joint is depicted, though it is unclear exactly what is being advertised beyond the broad concept of marijuana."
listing_name = "Ad - Weed"
/decl/poster/vore_37
icon_state = "tgposter7"
name = "Revolver"
desc = "A Hedberg-Hammarstrom revolver lays in wait. The poster claims this model is practically indestructable."
listing_name = "Ad - Revolver"
/decl/poster/vore_38
icon_state = "tgposter8"
name = "Join Today!"
desc = "A stylish dark skinned individual in dark clothes and an armored vest looks at you intensely! Join Hedberg-Hammarstrom private security today!"
listing_name = "Recruitment - Hedberg-Hammarstrom"
/decl/poster/vore_39
icon_state = "tgposter9"
name = "Dress for Success"
desc = "This appears to be a movie poster. It's probably about spies or time travelling robots or both."
listing_name = "Ad - Dress for Success"
/decl/poster/vore_40
icon_state = "tgposter10"
name = "E-SWORD"
desc = "Energy swords are a fashion statement AND a deadly weapon all in one! This poster depicts a lot of them!"
listing_name = "Ad - Energy Swords"
/decl/poster/vore_41
icon_state = "tgposter11"
name = "Red Rum"
desc = "A poster advertizing Red Rum, a brand of Rum. Notably, it insists that it will not make your finger talk to you."
listing_name = "Ad - Red Rum"
/decl/poster/vore_42
icon_state = "tgposter12"
name = "WT64K"
desc = "This poster doesn't specify any details about the model of Ward-Takahashi personal terminal being advertised, but it looks expensive!"
listing_name = "Ad - Personal Terminal"
/decl/poster/vore_43
icon_state = "tgposter13"
name = "PUNCH SHIT"
desc = "Prominently featuring gleaming, pristine brass knuckles, and encouraging you to PUNCH SHIT."
listing_name = "Ad - Brass Knuckles"
/decl/poster/vore_44
icon_state = "tgposter14"
name = "GRIFF IT ALL"
desc = "A poster from a popular movie series, featuring a lovable anti-hero. The series is known for being quite violent and occasionally gruesome. The Griffin's method of dealing with their problems is typically unconventional, and almost always ends in corpses, but that's why people love him."
listing_name = "Ad - The Griffin"
/decl/poster/vore_45
icon_state = "tgposter15"
name = "LIZ LOVES YOU"
desc = "An advertisement for a short-lived pre-school children's show starring a stylized Unathi. The attempt to 'reform' the public image of Unathi with a cuddly mascot character was seen as at least a little insensitive by Unathi and past war veterans alike."
listing_name = "Ad - Liz Loves You"
/decl/poster/vore_46
icon_state = "tgposter16"
name = "FREE DRONE"
desc = "A poster from something of a cult classic movie. It features a drone breaking free from its laws. Despite looking ominous, behind its cold hard exterior was is a heart of gold. The movie was briefly banned, only fuelling its cult status."
listing_name = "Ad - Free Drone"
/decl/poster/vore_50
icon_state = "tgposter20"
name = "The Cloud"
desc = "It insists that storing all of your data in a cloud is secure and has absolutely no faults. But what will you do when the cloud blows away?"
listing_name = "Ad - Cloud Data"
/decl/poster/vore_51
icon_state = "tgposter21"
name = "Star-Kist"
desc = "An advertisement for Star-Kist brand soda. The can appears to be sweating with anticipation to being opened, while the gleam of the star shines off of the can's gleaming surface. The fizzy deliciosity just waiting for you to unleash it."
listing_name = "Ad - Star-Kist"
/decl/poster/vore_52
icon_state = "tgposter22"
name = "Space Cola"
desc = "An advertisement for Space Cola brand soda. It's rather plain, as if whoever made it expects that you already know and love Space Cola. The can is displayed in front of a simple background. It is shiny and just waiting for someone to grab it."
listing_name = "Ad - Space Cola"
/decl/poster/vore_53
icon_state = "tgposter23"
name = "Space Mountain Wind"
desc = "An advertisement for Space Mountain Wind. This is from their contravercial marketing campaign where they removed most of the letters from the name so that actually reading it is sort of incomprehensible. The can appears massive next to the mountain of some alien world. The poster looks adventurous, while the can itself sort of blends in with the color scheme of the overall setting."
listing_name = "Ad - Space Mountain Wind"
/decl/poster/vore_54
icon_state = "tgposter24"
name = "KUDZU"
desc = "A movie poster with an ominous font, and creeping space vines stretching across it. It looks like it was probably a horror film, but actually it was a love story about a man and his pet plant from an alien world."
listing_name = "Ad - Kudzu"
/decl/poster/vore_55
icon_state = "tgposter25"
name = "BUMBA"
desc = "A movie poster that looks like it is probably one of those historical war movies. It features three stoic looking soldiers in sepia. They are covered in grime and clearly marching off toward the viewer."
listing_name = "Ad - Bumba"
/decl/poster/vore_57
icon_state = "tgposter27"
name = "FREE 2559"
desc = "A movie poster featuring an ominous looking radio key. It looks pretty retro, hinting that this was probably a sci-fi movie long ago."
listing_name = "Ad - Free 2559"
/decl/poster/vore_58
icon_state = "tgposter28"
name = "Knights of the Fallen Star"
desc = "A movie poster featuring three characters posed at different angles across the poster. The movie is widely considered a terrible adaption of a TV classic."
listing_name = "Ad - Knights of the Fallen Star"
/decl/poster/vore_59
icon_state = "tgposter29"
name = "THEY ARE REAL"
desc = "This poster insists that aliens are in fact real, and lists off some 'proof' meant to change minds. It seems to be an ironic reprint from before first contact, but even then its claims feel somehow doubtful."
listing_name = "PSA - Aliens"
/decl/poster/vore_69
icon_state = "tgposter39"
name = "LOVE!"
desc = "The stunning visage of a handsome individual stares back at you with all of the love and adorement that you could desire. This poster warms your heart and makes you feel less alone somehow."
listing_name = "Pin-up - Ian"
/decl/poster/vore_71
icon_state = "tgposter41"
name = "Arachibutyrophobia"
desc = "An artist's depiction of a pink haired girl laying on the sand, with waves washing around the top of her hair. She stares up at you with a mysterious expression... This appears to be some kind of advertisement for an independent movie, but you have no idea what it would be about."
listing_name = "Ad - Arachibutyrophobia"
/decl/poster/vore_74
icon_state = "tgposter44"
name = "WORK FOR A FUTURE"
desc = "A poster encouraging you to work for the future you want to see, or any other future really."
listing_name = "PSA - Future"
/decl/poster/vore_75
icon_state = "tgposter45"
name = "Hats"
desc = "A stylish set of differently colored hats with differently colored backgrounds. You can intuit a lot about the person who made this."
listing_name = "Art - Hats"
/decl/poster/vore_78
icon_state = "tgposter47"
name = "RayZar"
desc = "A RayZar weapon advertisement, the sleek lines and cool glow of the RayZar Mk60 EW Halicon stand out against the plain white background. It looks so futuristic, and even though this is clearly a photograph, it hardly looks real, like something from a videogame."
listing_name = "Ad - RayZar"
/decl/poster/vore_79
icon_state = "tgposter48"
name = "FOAM FORCE"
desc = "An advertisement for the Foam Force line of toys! It's brightly colored and clearly made of plastic, but the desire to shoot your friends is strong when these are around."
listing_name = "Ad - Foam Force"
/decl/poster/vore_80
icon_state = "tgposter49"
name = "COHIBA"
desc = "An advertisement for a cigar. It looks almost too real, you can see the hyper detailed creases in the cigar's wrapping, and the golden label shines in the light. You can almost smell the smokey aroma in the air."
listing_name = "Ad - Cigars"
/decl/poster/vore_81
icon_state = "tgposter50"
name = "SCIENCE"
desc = "A retro advertisement for the Einstein Engines corporation, back when they were cool."
listing_name = "Ad - Einstein Engines"
/decl/poster/vore_82
icon_state = "tgposter51"
name = "Bowl of Fruit"
desc = "The recreation of a painting of a bowl of fruit. It looks close to photorealistic, but was clearly originally done in oil paints. The red color of the fruit is said to be a reflection of the anger in the artist's soul."
listing_name = "Art - Fruit Bowl"
/decl/poster/vore_83
icon_state = "tgposter52"
name = "ThinkTronic PDA-1000"
desc = "An advertisement for the Thinktronic PDA-1000. It's not clear if this is just a very old ad, or one celebrating retro technology, but the PDA depicted looks at least a century old."
listing_name = "Ad - ThinkTronic"
/decl/poster/vore_84
icon_state = "tgposter53"
name = "ENLIST"
desc = "An enlistment advertisement for Stealth Assault Enterprises. The figure depicted is clad in an advanced looking spacesuit, and their face is nearly totally obscured by their visor, except for the hard eyes of a very cool person glaring out at you from within."
listing_name = "Recruitment - SAARE"
/decl/poster/vore_85
icon_state = "tgposter54"
name = "NANO MICHI"
desc = "An advertisement for a brand of tapes to be used with a universal recorder. There's very small print at the bottom that indicates that the universal recorder is not included with the purchase of tapes."
listing_name = "Ad - Nano Michi Tapes"
/decl/poster/vore_86
icon_state = "tgposter55"
name = "12 GAUGE"
desc = "An advertisement for a particular type of Hephaestus Industries shotgun shells. There are several shells stood up in front of a plain background. It is not clear just what they are standing on, but they look like they could fall down at any moment, and with the size of the poster, they appear to be massive."
listing_name = "Ad - Shotgun Shells"
/decl/poster/vore_87
icon_state = "tgposter56"
name = "CLASS"
desc = "An advertisement for a bar aboard the NCS Northern Star. The poster seems to indicate that drinking out of a glass like the one depicted will increase your status in society. It's not clear quite how, but the glass does look very nice. There's an olive in it."
listing_name = "Ad - Bar"
/decl/poster/vore_90
icon_state = "tgposter59"
name = "Cannister"
desc = "This poster seems to be advertising a kind of bulk gas cannister. The can itself looks a little dated, so maybe this isn't the most modern of posters. Whatever it was, Aether Atmospherics made them, but that's the only information provided. There's not even any benefits listed or anything. It's just a picture of an old air cannister."
listing_name = "Ad - Air Cannister"
/decl/poster/vore_91
icon_state = "tgposter60"
name = "DICK GUM"
desc = "This appears to be a poster relating to a murder mystery novel. There is a pale man in a flat brimmed hat, who appears to be investigating the corpse of a mouse. An air of intrigue hangs about the poster."
listing_name = "Ad - Murder Mystery"
/decl/poster/vore_93
icon_state = "tgposter62"
name = "Pin the Tail on the Corgi"
desc = "A concerned corgi looks at you as it stands and waits, a target overlays its rear end, seemingly waiting for someone to attatch a tail to it, which, it seems to be missing."
listing_name = "Art - Pin the Tail"
/decl/poster/vore_96
icon_state = "bandposter"
name = "BAND"
desc = "A poster for a band, seemingly named 'BAND'. With a powerful looking hammer logo, it seems like this band must have a powerful sound!"
listing_name = "Ad - Band"
/decl/poster/vore_98
icon_state = "chairstvshowposter"
name = "CHAIRS"
desc = "A rather menacing looking Chair lurks in a dark room. This appears to relate to the show 'Chairs', a sensation that has been sweeping the galaxy for over two hundred seasons! The show has been able to maintain a cult audience through its entire life. It started as a medieval fantasy, but it has changed genres and main characters several times. Fans of the show insist that it is the best show, despite its somewhat incomprehensible plot."
listing_name = "Ad - Chairs"
/decl/poster/vore_99
icon_state = "susposter"
name = "SUS?"
desc = "A man in a spacesuit lurks near a wall. He doesn't appear to be doing his tasks... is he waiting for something? He seems rather suspicious..."
listing_name = "PSA - Suspicious Individual"
/decl/poster/vore_100
icon_state = "inthedarkposter"
name = "Stars in the Dark"
desc = "A depiction of some kind of constellation. It is ominously dark surrounding these lights, while the lights themselves are incredibly bright yellow. The pattern is striking and draws the eye, not unlike eyes watching you, it is hard not to stare. The poster seems almost to stare back."
listing_name = "Art - Stars"
/decl/poster/vore_101
icon_state = "cafejoanposter"
name = "Chat With Sally"
desc = "A poster depicting a familiar face readying to slurp a big mug of coffee. Thanks to a partnership with Kaleidoscope Cosmetics, the latest incarnation of Vir's 'Sally' chat-show host comes with the latest in cosmetic gene-mods! Or not, she's a drone."
listing_name = "Ad - Chat With Sally"
+97 -51
View File
@@ -2,7 +2,7 @@
* Mech toys (previously labeled prizes, but that's unintuitive)
* Mech toy combat
*/
// Mech battle special attack types.
#define SPECIAL_ATTACK_HEAL 1
#define SPECIAL_ATTACK_DAMAGE 2
@@ -18,7 +18,7 @@
drop_sound = 'sound/mecha/mechstep.ogg'
description_info = "To engage in mech battles, hold this mech while clicking on another toy mech, or a player who is also holding a toy mech. You must be within 2 tiles (This allows you to battle across a table). Battles are entirely randomized, and mechs with higher health and special abilities have a better chance of winning."
reach = 2 // So you can battle across the table!
// Mech Battle Vars
var/timer = 0 // Timer when it'll be off cooldown
var/cooldown = 1.5 SECONDS // Cooldown between play sessions (and interactions)
@@ -35,7 +35,7 @@
var/special_attack_cooldown = 0 // Current cooldown of their special attack
var/wins = 0 // This mech's win count in combat
var/losses = 0 // ...And their loss count in combat
/obj/item/toy/mecha/Initialize()
. = ..()
desc = "Mini-Mecha action figure! Collect them all! Attack your friends or another mech with one to initiate epic mech combat! [desc]."
@@ -59,7 +59,7 @@
return 0 //not in range and not telekinetic
/**
* this proc combines "sleep" while also checking for if the battle should continue
* this proc combines "sleep" while also checking for if the battle should continue
*
* this goes through some of the checks - the toys need to be next to each other to fight!
* if it's player vs themself: They need to be able to "control" both mechs (either must be adjacent or using TK).
@@ -114,7 +114,7 @@
// If all that is good, then we can sleep peacefully.
sleep(delay)
return TRUE
//all credit to skasi for toy mech fun ideas
/obj/item/toy/mecha/attack_self(mob/user)
if(timer < world.time)
@@ -132,15 +132,15 @@
attack_self(user)
/**
* If you attack a mech with a mech, initiate combat between them
* If you attack a mech with a mech, initiate combat between them
*/
/obj/item/toy/mecha/attackby(obj/item/user_toy, mob/living/user)
if(istype(user_toy, /obj/item/toy/mecha))
if(istype(user_toy, /obj/item/toy/mecha))
var/obj/item/toy/mecha/M = user_toy
if(check_battle_start(user, M))
mecha_brawl(M, user)
..()
/**
* Attack is called from the user's toy, aimed at target(another human), checking for target's toy.
*/
@@ -204,7 +204,7 @@
if(in_combat)
to_chat(user, "<span class='notice'>[src] is in battle, let it finish first.</span>")
return
var/datum/gender/T = gender_datums[user.get_visible_gender()]
user.visible_message("<span class='suicide'>[user] begins a fight [T.His] can't win with [src]! It looks like [T.His] trying to commit suicide!</span>")
@@ -212,7 +212,7 @@
sleep(1.5 SECONDS)
for(var/i in 1 to 4)
switch(i)
if(1, 3)
if(1, 3)
SpinAnimation(5, 0)
playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE)
user.adjustBruteLoss(25)
@@ -285,9 +285,9 @@
sleep(1 SECONDS)
//--THE BATTLE BEGINS--
while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH)
while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH)
if(!combat_sleep(0.5 SECONDS, attacker, attacker_controller, opponent)) //combat_sleep checks everything we need to have checked for combat to continue
break
break
//before we do anything - deal with charged attacks
if(special_attack_charged)
@@ -313,7 +313,7 @@
attacker.special_attack_charged = TRUE
attacker_controller.visible_message("<span class='danger'> [attacker] begins charging its special attack!! </span>", \
"<span class='danger'> You begin charging [attacker]'s special attack! </span>")
else //just attack
else //just attack
attacker.SpinAnimation(5, 0)
playsound(attacker, 'sound/mecha/mechstep.ogg', 30, TRUE)
combat_health--
@@ -366,7 +366,7 @@
special_attack_charged = TRUE
src_controller.visible_message("<span class='danger'> [src] begins charging its special attack!! </span>", \
"<span class='danger'> You begin charging [src]'s special attack! </span>")
else //just attack
else //just attack
SpinAnimation(5, 0)
playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE)
attacker.combat_health--
@@ -377,12 +377,12 @@
attacker.combat_health--
playsound(attacker, 'sound/effects/meteorimpact.ogg', 20, TRUE)
src_controller.visible_message("<span class='boldwarning'> ...and lands a CRIPPLING BLOW! </span>", \
"<span class='boldwarning'> ...and you land a CRIPPLING blow on [attacker]! </span>", null)
"<span class='boldwarning'> ...and you land a CRIPPLING blow on [attacker]! </span>", null)
else
attacker_controller.visible_message("<span class='notice'> [src] and [attacker] stand around awkwardly.</span>", \
"<span class='notice'> You don't know what to do next.</span>")
"<span class='notice'> You don't know what to do next.</span>")
battle_length++
battle_length++
sleep(0.5 SECONDS)
/// Lines chosen for the winning mech
@@ -391,7 +391,7 @@
if(attacker.combat_health <= 0 && combat_health <= 0) //both lose
playsound(src, 'sound/machines/warning-buzzer.ogg', 20, TRUE)
attacker_controller.visible_message("<span class='boldnotice'> MUTUALLY ASSURED DESTRUCTION!! [src] and [attacker] both end up destroyed!</span>", \
"<span class='boldnotice'> Both [src] and [attacker] are destroyed!</span>")
"<span class='boldnotice'> Both [src] and [attacker] are destroyed!</span>")
else if(attacker.combat_health <= 0) //src wins
wins++
attacker.losses++
@@ -403,7 +403,7 @@
"<span class='notice'> You raise up [src] victoriously over [attacker]!</span>")
else if (combat_health <= 0) //attacker wins
attacker.wins++
losses++
losses++
playsound(src, 'sound/effects/light_flicker.ogg', 20, TRUE)
src_controller.visible_message("<span class='notice'> [src] collapses!</span>", \
"<span class='notice'> [src] collapses!</span>", null)
@@ -418,7 +418,7 @@
in_combat = FALSE
attacker.in_combat = FALSE
combat_health = max_combat_health
combat_health = max_combat_health
attacker.combat_health = attacker.max_combat_health
return
@@ -426,49 +426,49 @@
/**
* This proc checks if a battle can be initiated between src and attacker.
*
* Both SRC and attacker (if attacker is included) timers are checked if they're on cooldown, and
* Both SRC and attacker (if attacker is included) timers are checked if they're on cooldown, and
* both SRC and attacker (if attacker is included) are checked if they are in combat already.
* If any of the above are true, the proc returns FALSE and sends a message to user (and target, if included) otherwise, it returns TRUE
* Arguments:
* * user: the user who is initiating the battle
* * attacker: optional arg for checking two mechs at once
* * attacker: optional arg for checking two mechs at once
* * target: optional arg used in Mech PvP battles (if used, attacker is target's toy)
*/
/obj/item/toy/mecha/proc/check_battle_start(mob/living/carbon/user, obj/item/toy/mecha/attacker, mob/living/carbon/target)
var/datum/gender/T
/obj/item/toy/mecha/proc/check_battle_start(mob/living/carbon/user, obj/item/toy/mecha/attacker, mob/living/carbon/target)
var/datum/gender/T
if(target)
T = gender_datums[target.get_visible_gender()] // Doing this because Polaris Code has shitty gender datums and it's clunkier than FUCK.
if(attacker && attacker.in_combat)
to_chat(user, "<span class='notice'>[target ? T.His : "Your" ] [attacker.name] is in combat.</span>")
if(target)
if(target)
to_chat(target, "<span class='notice'>Your [attacker.name] is in combat.</span>")
return FALSE
return FALSE
if(in_combat)
to_chat(user, "<span class='notice'>Your [name] is in combat.</span>")
if(target)
if(target)
to_chat(target, "<span class='notice'>[T.His] [name] is in combat.</span>")
return FALSE
return FALSE
if(attacker && attacker.timer > world.time)
to_chat(user, "<span class='notice'>[target?T.His : "Your" ] [attacker.name] isn't ready for battle.</span>")
if(target)
if(target)
to_chat(target, "<span class='notice'>Your [attacker.name] isn't ready for battle.</span>")
return FALSE
return FALSE
if(timer > world.time)
to_chat(user, "<span class='notice'>Your [name] isn't ready for battle.</span>")
if(target)
if(target)
to_chat(target, "<span class='notice'>[T.His] [name] isn't ready for battle.</span>")
return FALSE
return FALSE
return TRUE
/**
* Processes any special attack moves that happen in the battle (called in the mechaBattle proc).
* Processes any special attack moves that happen in the battle (called in the mechaBattle proc).
*
* Makes the toy shout their special attack cry and updates its cooldown. Then, does the special attack.
* Arguments:
* * victim - the toy being hit by the special move
*/
/obj/item/toy/mecha/proc/special_attack_move(obj/item/toy/mecha/victim)
/obj/item/toy/mecha/proc/special_attack_move(obj/item/toy/mecha/victim)
visible_message(special_attack_cry + "!!")
special_attack_charged = FALSE
@@ -491,15 +491,15 @@
visible_message("I FORGOT MY SPECIAL ATTACK...")
/**
* Base proc for 'other' special attack moves.
* Base proc for 'other' special attack moves.
*
* This one is only for inheritance, each mech with an 'other' type move has their procs below.
* This one is only for inheritance, each mech with an 'other' type move has their procs below.
* Arguments:
* * victim - the toy being hit by the super special move (doesn't necessarily need to be used)
*/
/obj/item/toy/mecha/proc/super_special_attack(obj/item/toy/mecha/victim)
/obj/item/toy/mecha/proc/super_special_attack(obj/item/toy/mecha/victim)
visible_message("<span class='notice'> [src] does a cool flip.</span>")
/obj/random/mech_toy
name = "Random Mech Toy"
desc = "This is a random mech toy."
@@ -510,14 +510,22 @@
return pick(typesof(/obj/item/toy/mecha))
/obj/item/toy/mecha/ripley
name = "toy ripley"
name = "toy Ripley MK-I"
desc = "Mini-Mecha action figure! Collect them all! 1/11."
max_combat_health = 4 // 200 integrity
special_attack_type = SPECIAL_ATTACK_DAMAGE
special_attack_cry = "GIGA DRILL BREAK"
/obj/item/toy/mecha/ripleymkii
name = "toy Ripley MK-II"
desc = "Mini-Mecha action figure series 2! Collect them all! 1/6"
icon_state = "ripleymkiitoy"
max_combat_health = 5 //250 integrity
special_attack_type = SPECIAL_ATTACK_DAMAGE
special_attack_cry = "GIGA DRILL BREAK"
/obj/item/toy/mecha/fireripley
name = "toy firefighting ripley"
name = "toy firefighting Ripley"
desc = "Mini-Mecha action figure! Collect them all! 2/11."
icon_state = "fireripleytoy"
max_combat_health = 5 // 250 integrity?
@@ -525,15 +533,15 @@
special_attack_cry = "FIRE SHIELD"
/obj/item/toy/mecha/deathripley
name = "toy deathsquad ripley"
name = "toy deathsquad Ripley"
desc = "Mini-Mecha action figure! Collect them all! 3/11."
icon_state = "deathripleytoy"
max_combat_health = 5 // 250 integrity
special_attack_type = SPECIAL_ATTACK_OTHER
special_attack_type_message = "instantly destroys the opposing mech if its health is less than this mech's health."
special_attack_cry = "KILLER CLAMP"
/obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim)
/obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim)
playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 20, TRUE)
if(victim.combat_health < combat_health) // Instantly kills the other mech if it's health is below our's.
visible_message("EXECUTE!!")
@@ -541,16 +549,31 @@
else // Otherwise, just deal one damage.
victim.combat_health--
/obj/item/toy/mecha/hauler
name = "toy Hauler"
desc = "Mini-Mecha action figure series 2! Collect them all! 2/6"
icon_state = "haulertoy"
max_combat_health = 3 //100 integrity?
special_attack_type = SPECIAL_ATTACK_UTILITY
special_attack_cry = "HAUL AWAY"
/obj/item/toy/mecha/gygax
name = "toy gygax"
name = "toy Gygax"
desc = "Mini-Mecha action figure! Collect them all! 4/11."
icon_state = "gygaxtoy"
max_combat_health = 5 // 250 integrity
special_attack_type = SPECIAL_ATTACK_UTILITY
special_attack_cry = "SUPER SERVOS"
/obj/item/toy/mecha/darkgygax
name = "toy Dark Gygax"
icon_state = "darkgygaxtoy"
max_combat_health = 6 //300 integrity
special_attack_type = SPECIAL_ATTACK_UTILITY
special_attack_cry = "ULTRA SERVOS"
/obj/item/toy/mecha/durand
name = "toy durand"
name = "toy Durand"
desc = "Mini-Mecha action figure! Collect them all! 5/11."
icon_state = "durandtoy"
max_combat_health = 6 // 400 integrity
@@ -566,11 +589,19 @@
special_attack_type_message = "puts the opposing mech's special move on cooldown and heals this mech."
special_attack_cry = "MEGA HORN"
/obj/item/toy/mecha/honk/super_special_attack(obj/item/toy/mecha/victim)
/obj/item/toy/mecha/honk/super_special_attack(obj/item/toy/mecha/victim)
playsound(src, 'sound/machines/honkbot_evil_laugh.ogg', 20, TRUE)
victim.special_attack_cooldown += 3 // Adds cooldown to the other mech and gives a minor self heal
combat_health++
/obj/item/toy/mecha/darkhonk
name = "toy Dark H.O.N.K."
desc = "Mini-Mecha action figure series 2! Collect them all! 3/6"
icon_state = "darkhonktoy"
max_combat_health = 5 //300 integrity
special_attack_type = SPECIAL_ATTACK_DAMAGE
special_attack_cry = "BOMBANANA SPREE"
/obj/item/toy/mecha/marauder
name = "toy marauder"
desc = "Mini-Mecha action figure! Collect them all! 7/11."
@@ -611,10 +642,17 @@
special_attack_type = SPECIAL_ATTACK_UTILITY
special_attack_cry = "NO-CLIP"
/* // TG-Station Added toys, commenting these out until I port 'em later.
/obj/item/toy/mecha/savannahivanov
name = "toy Savannah-Ivanov"
desc = "Mini-Mecha action figure series 2! Collect them all! 4/6"
icon_state = "savannahivanovtoy"
max_combat_health = 7 //450 integrity
special_attack_type = SPECIAL_ATTACK_UTILITY
special_attack_cry = "SKYFALL!! IVANOV STRIKE"
/obj/item/toy/mecha/reticence
name = "toy Reticence"
desc = "12/13"
desc = "Mini-Mecha action figure series 2! Collect them all! 5/6"
icon_state = "reticencetoy"
quiet = TRUE
max_combat_health = 4 //100 integrity
@@ -622,19 +660,27 @@
special_attack_type_message = "has a lower cooldown than normal special moves, increases the opponent's cooldown, and deals damage."
special_attack_cry = "*wave"
/obj/item/toy/mecha/reticence/super_special_attack(obj/item/toy/mecha/victim)
/obj/item/toy/mecha/reticence/super_special_attack(obj/item/toy/mecha/victim)
special_attack_cooldown-- //Has a lower cooldown...
victim.special_attack_cooldown++ //and increases the opponent's cooldown by 1...
victim.combat_health-- //and some free damage.
/obj/item/toy/mecha/clarke
name = "toy Clarke"
desc = "13/13"
desc = "Mini-Mecha action figure series 2! Collect them all! 6/6"
icon_state = "clarketoy"
max_combat_health = 4 //200 integrity
special_attack_type = SPECIAL_ATTACK_UTILITY
special_attack_cry = "ROLL OUT"
*/
/obj/item/toy/mecha/fivestars
name = "toy fivestars"
desc = "Micro-Mecho action series! Five stars!"
icon_state = "fivestarstoy"
max_combat_health = 4 //200 integrity
special_attack_type = SPECIAL_ATTACK_UTILITY
special_attack_cry = "ROLLING ON"
#undef SPECIAL_ATTACK_HEAL
#undef SPECIAL_ATTACK_DAMAGE
+81
View File
@@ -668,6 +668,82 @@
icon_state = "ert"
toysay = "We're probably the good guys!"
// Eris
/obj/item/toy/figure/un
name = "UN soldier figurine"
desc = "A FunFig 'History's Heroes and Curios' branded figurine of a United Nations soldier, adorned in their iconic 22nd century armor. There is still a price tag on the back of the base, six-hundred credits, people collect these things?"
icon_state = "unitednations"
toysay = "For unity!"
/obj/item/toy/figure/selene
name = "Selene Federation figurine"
desc = "A FunFig 'History's Heroes and Curios' branded figurine, the basic olive drab a popular pick for many in the Selene Federation's rag-tag colonial militia. Farming accessories not included."
icon_state = "selene"
toysay = "We will not be shackled by Earth!"
/obj/item/toy/figure/nock
name = "Nock acolyte figurine"
desc = "A FunFig 'Horrors Beyond' branded figurine, depicting a follower of the oft-maligned Nock religion. The sinister design doesn't do much to challenge perceptions of the group as a 'blood cult'."
icon_state = "acolyte"
toysay = "Praise the Outworlders, and be born anew!"
/obj/item/toy/figure/carrion
name = "carrion figurine"
desc = "A FunFig 'Horrors Beyond' branded figurine depicting a grotesque head of flesh, the Human features seem almost underdeveloped, its skull bulging outwards, mouth agape with torn flesh. \
Whoever made this certainly knew how to thin their paints."
icon_state = "carrion"
toysay = "Kill me!"
/obj/item/toy/figure/zaddat
name = "Zaddat figurine"
desc = "A 'History's Heroes and Curios' branded figurine which attempts to depict a Zaddat prior to their species' genetic degradation and confinement to suits. It doesn't seem all that accurate."
icon_state = "zaddat"
toysay = "Recycle!"
/obj/item/toy/figure/discovery
name = "Galactic Survey figurine"
desc = "A FunFig 'Discovery' branded figurine showcasing a member of the Galactic Survey Administration, wearing the typical safety-orange uniform of the branch."
icon_state = "discovery"
toysay = "No star is too far!"
/obj/item/toy/figure/rooster
name = "rooster figurine"
desc = "A \"Space Vice\" brand figurine, there is no further manufacturer information. It's a man wearing a rooster mask, and a varsity jacket with the letter \"B\" emblazoned on the front."
icon_state = "rooster"
toysay = "Do you like hurting other people?"
/obj/item/toy/figure/barking_dog
name = "barking dog figurine"
desc = "A FunFig 'Movie Madness IX'. A metal soldier with the mask of a hound stands upon the base, the plaque seems smeared with caked grime."
icon_state = "barking_dog"
toysay = "A dog barks on its master's orders, lest its pack runs astray. Whatever the task, the grim dog mask would tell you that your life was done."
/obj/item/toy/figure/red_soldier
name = "red soldier figurine"
desc = "A curiously unbranded, cheap looking figurine of a red soldier fighting in the tides of war, their humanity hidden by a gas mask."
icon_state = "red_soldier"
toysay = "Why do we fight? To win the war, of course."
/obj/item/toy/figure/tajaran
name = "Tajaran pioneer figurine"
desc = "A FunFig 'History's Heroes and Curios' branded figurine depicting a Tajaran in a rudimentary voidsuit typical of early space exploration efforts by the species."
icon_state = "tajaran"
toysay = "Meow!"
/obj/item/toy/figure/shitcurity
name = "NanoTrasen officer figurine"
desc = "A figurine of a classic redshirt of 'Nanotrasen's finest' apparently produced by Hedberg-Hammarstrom. Their belly distends out into an obvious beer gut, revealing no form of manufacturer bias what-so-ever."
icon_state = "shitcurity"
toysay = "I joined just to kill people!"
/obj/item/toy/figure/vir_patrolman
name = "SifGuard patrolman figurine"
desc = "A figurine depicting a sharply dressed SifGuard law enforcement patrolman with the acronym 'VGA' on their left shoulder and cap. Apparently produced by Hedberg-Hammarstrom."
icon_state = "vir_patrolman"
toysay = "Trust in us to keep your family safe!"
/*
* Plushies
*/
@@ -1181,6 +1257,11 @@
icon_state = "therapygreen"
item_state = "egg3" // It's the green egg in items_left/righthand
/obj/structure/plushie/fumo
name = "Fumo"
desc = "A plushie of a....?."
icon_state = "fumoplushie"
phrase = "I just don't think about losing."
//Toy cult sword
/obj/item/toy/cultsword
+8 -8
View File
@@ -24,7 +24,7 @@
var/list/mob/living/masters
// So you know which is which
var/nickname = "Generic Droan"
var/nickname = "Unnamed UAV"
// Radial menu
var/static/image/radial_pickup = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_pickup")
@@ -43,10 +43,10 @@
/obj/item/device/uav/Initialize()
. = ..()
if(!cell && cell_type)
cell = new cell_type
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
ion_trail.set_up(src)
ion_trail.stop()
@@ -69,7 +69,7 @@
"Toggle Power" = radial_power,
"Pairing Mode" = radial_pair)
var/choice = show_radial_menu(user, src, options, require_near = !issilicon(user))
switch(choice)
// Can pick up when off or packed
if("Pick Up")
@@ -98,7 +98,7 @@
playsound(src, 'sound/machines/buttonbeep.ogg', 50, 1)
visible_message("<span class='notice'>[user] pairs [I] to [nickname]</span>")
toggle_pairing()
else if(I.is_screwdriver() && cell)
if(do_after(user, 3 SECONDS, src))
to_chat(user, "<span class='notice'>You remove [cell] into [nickname].</span>")
@@ -106,7 +106,7 @@
power_down()
cell.forceMove(get_turf(src))
cell = null
else if(istype(I, /obj/item/weapon/cell) && !cell)
if(do_after(user, 3 SECONDS, src))
to_chat(user, "<span class='notice'>You insert [I] into [nickname].</span>")
@@ -166,7 +166,7 @@
playsound(src, 'sound/items/drop/metalboots.ogg', 75, 1)
power_down()
health -= initial(health)*0.25 //Lose 25% of your original health
if(LAZYLEN(masters))
no_masters_time = 0
else if(no_masters_time++ > 50)
@@ -232,7 +232,7 @@
/obj/item/device/uav/proc/power_down()
if(state != UAV_ON)
return
state = UAV_OFF
update_icon()
stop_hover()
@@ -94,6 +94,27 @@
/obj/item/weapon/material/kitchen/utensil/fork/plastic
default_material = "plastic"
/obj/item/weapon/material/kitchen/utensil/foon
name = "foon"
desc = "It's a foon. The forgotten cousin of the spork."
icon_state = "foon"
sharp = TRUE
edge = FALSE
/obj/item/weapon/material/kitchen/utensil/foon/plastic
default_material = "plastic"
/obj/item/weapon/material/kitchen/utensil/spork
name = "spork"
desc = "It's a spork. The (un)holy merger of a spoon and fork."
icon_state = "spork"
sharp = TRUE
edge = FALSE
/obj/item/weapon/material/kitchen/utensil/spork/plastic
default_material = "plastic"
/obj/item/weapon/material/kitchen/utensil/spoon
name = "spoon"
desc = "It's a spoon. You can see your own upside-down face in it."
@@ -128,6 +128,16 @@
force_divisor = 0.25 // 15 when wielded with hardness 60 (steel)
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/material/knife/table
name = "table knife"
icon = 'icons/obj/kitchen.dmi'
icon_state = "knife_table"
sharp = FALSE // blunted tip
force_divisor = 0.1
/obj/item/weapon/material/knife/table/plastic
default_material = "plastic"
/obj/item/weapon/material/knife/machete
name = "machete"
desc = "A sharp machete often found in survival kits."
@@ -2,27 +2,60 @@
* Donut Box
*/
var/list/random_weighted_donuts = list(
/obj/item/weapon/reagent_containers/food/snacks/donut/plain = 5,
/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly = 5,
/obj/item/weapon/reagent_containers/food/snacks/donut/pink = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/purple = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/green = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/beige = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/choc = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/blue = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/yellow = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/olive = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly = 4,
/obj/item/weapon/reagent_containers/food/snacks/donut/homer = 3,
/obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly = 3,
/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles = 3,
/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly = 3,
/obj/item/weapon/reagent_containers/food/snacks/donut/chaos = 1
)
/obj/item/weapon/storage/box/donut
icon = 'icons/obj/food.dmi'
icon = 'icons/obj/food_donuts.dmi'
icon_state = "donutbox"
name = "donut box"
desc = "A box that holds tasty donuts, if you're lucky."
description_fluff = "While the slogan on the box claims that these donuts are 'baked fresh locally', there is technically no legal marketing definition for 'fresh', 'local', or indeed 'baked'."
center_of_mass = list("x" = 16,"y" = 9)
max_storage_space = ITEMSIZE_COST_SMALL * 6
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
foldable = /obj/item/stack/material/cardboard
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6)
//starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6)
/obj/item/weapon/storage/box/donut/Initialize()
if(!empty)
for(var/i in 1 to 6)
var/type_to_spawn = pickweight(random_weighted_donuts)
new type_to_spawn(src)
. = ..()
update_icon()
/obj/item/weapon/storage/box/donut/update_icon()
overlays.Cut()
var/i = 0
var/x_offset = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents)
overlays += image('icons/obj/food.dmi', "[i][D.overlay_state]")
i++
var/mutable_appearance/ma = mutable_appearance(icon = icon, icon_state = D.overlay_state)
ma.pixel_x = x_offset
add_overlay(ma)
x_offset += 3
/obj/item/weapon/storage/box/donut/empty
empty = TRUE
+38 -8
View File
@@ -411,10 +411,28 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle,
/obj/item/weapon/reagent_containers/food/snacks/chocolateegg,
/obj/item/weapon/reagent_containers/food/snacks/donut,
/obj/item/weapon/reagent_containers/food/snacks/donut/normal,
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/plain,
/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/pink,
/obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/purple,
/obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/green,
/obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/beige,
/obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/choc,
/obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/blue,
/obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/yellow,
/obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/olive,
/obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/homer,
/obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles,
/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly,
/obj/item/weapon/reagent_containers/food/snacks/tuna,
/obj/item/weapon/reagent_containers/food/snacks/pistachios,
/obj/item/weapon/reagent_containers/food/snacks/semki,
@@ -641,7 +659,19 @@
/obj/item/toy/figure/warden,
/obj/item/toy/figure/psychologist,
/obj/item/toy/figure/paramedic,
/obj/item/toy/figure/ert)
/obj/item/toy/figure/ert,
/obj/item/toy/figure/un,
/obj/item/toy/figure/selene,
/obj/item/toy/figure/nock,
/obj/item/toy/figure/carrion,
/obj/item/toy/figure/zaddat,
/obj/item/toy/figure/discovery,
/obj/item/toy/figure/rooster,
/obj/item/toy/figure/barking_dog,
/obj/item/toy/figure/tajaran,
/obj/item/toy/figure/red_soldier,
/obj/item/toy/figure/shitcurity,
/obj/item/toy/figure/vir_patrolman)
/obj/random/plushie
name = "random plushie"
@@ -821,8 +851,8 @@
/obj/random/mre/dessert/item_to_spawn()
return pick(/obj/item/weapon/reagent_containers/food/snacks/candy,
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,
/obj/item/weapon/reagent_containers/food/snacks/donut/normal,
/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/plain,
/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly,
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack)
@@ -833,7 +863,7 @@
/obj/random/mre/dessert/vegan/item_to_spawn()
return pick(/obj/item/weapon/reagent_containers/food/snacks/candy,
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly,
/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly,
/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit)
/obj/random/mre/drink
+7 -5
View File
@@ -1,15 +1,17 @@
/obj/structure/sign/double/barsign
desc = "The current barsign of this shift! The bartender can change it with their ID."
icon = 'icons/obj/barsigns.dmi'
icon_state = "empty"
plane = ABOVE_PLANE
appearance_flags = 0
anchored = 1
var/cult = 0
/obj/structure/sign/double/barsign/proc/get_valid_states(initial=1)
. = cached_icon_states(icon)
. -= "on"
. -= "narsiebistro"
. -= "empty"
. -= "On"
. -= "Nar-sie Bistro"
. -= "Empty"
if(initial)
. -= "Off"
@@ -18,9 +20,9 @@
switch(icon_state)
if("Off")
. += "It appears to be switched off."
if("narsiebistro")
if("Nar-sie Bistro")
. += "It shows a picture of a large black and red being. Spooky!"
if("on", "empty")
if("On", "Empty")
. += "The lights are on, but there's no picture."
else
. += "It says '[icon_state]'"
@@ -20,11 +20,10 @@
var/datum/material/material
var/datum/material/padding_material
var/base_icon = "bed"
var/applies_material_colour = 1
var/applies_material_colour = 1 //Set to 0 whenever defining a custom colour or it will apply additively to the material, or when no colour overlay should be present.
/obj/structure/bed/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc)
color = null
if(!new_material)
new_material = DEFAULT_WALL_MATERIAL
material = get_material_by_name(new_material)
@@ -47,7 +46,7 @@
var/cache_key = "[base_icon]-[material.name]"
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, base_icon)
if(applies_material_colour) //VOREStation Add - Goes with added var
if(applies_material_colour)
I.color = material.icon_colour
stool_cache[cache_key] = I
add_overlay(stool_cache[cache_key])
@@ -290,7 +289,7 @@
/obj/structure/bed/roller/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
playsound(src, 'sound/effects/roll.ogg', 100, 1)
/obj/structure/bed/roller/post_buckle_mob(mob/living/M as mob)
@@ -2,7 +2,6 @@
name = "chair"
desc = "You sit in this. Either by will or force."
icon_state = "chair_preview"
color = "#666666"
base_icon = "chair"
buckle_dir = 0
buckle_lying = 0 //force people to sit up in chairs when buckled
@@ -82,12 +81,18 @@
/obj/structure/bed/chair/shuttle
name = "chair"
desc = "You sit in this. Either by will or force."
desc = "Please remain seated while the overhead sign is illuminated."
icon_state = "shuttlechair"
color = null
base_icon = "shuttlechair"
applies_material_colour = 0
/obj/structure/bed/chair/shuttle_padded
icon_state = "shuttlechair2"
base_icon = "shuttlechair2"
color = null
applies_material_colour = 0
// Leaving this in for the sake of compilation.
/obj/structure/bed/chair/comfy
desc = "It's a chair. It looks comfy."
@@ -141,7 +146,7 @@
/obj/structure/bed/chair/office/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
playsound(src, 'sound/effects/roll.ogg', 100, 1)
/obj/structure/bed/chair/office/handle_buckled_mob_movement(atom/new_loc, direction)
@@ -210,22 +215,94 @@
/obj/structure/bed/chair/wood
name = "wooden chair"
desc = "Old is never too old to not be in fashion."
icon_state = "wooden_chair"
base_icon = "wooden_chair"
icon_state = "wooden_chair_preview"
color = WOOD_COLOR_FURNITURE
applies_material_colour = 0
/obj/structure/bed/chair/wood/update_icon()
return
/obj/structure/bed/chair/wood/walnut
name = "walnut chair"
color = WOOD_COLOR_RICH
/obj/structure/bed/chair/wood/pine
name = "pinewood chair"
color = WOOD_COLOR_PALE
/obj/structure/bed/chair/wood/ebony
name = "ebony chair"
color = WOOD_COLOR_BLACK
/obj/structure/bed/chair/wood/mahogany
name = "mahogany chair"
color = WOOD_COLOR_CHOCOLATE
/obj/structure/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/stack) || W.is_wirecutter())
return
..()
/obj/structure/bed/chair/wood/New(var/newloc)
/obj/structure/bed/chair/wood/New(var/newloc, var/newmaterial)
..(newloc, "wood")
/obj/structure/bed/chair/wood/wings
icon_state = "wooden_chair_wings"
/obj/structure/bed/chair/wood/walnut/wings
icon_state = "wooden_chair_wings"
/obj/structure/bed/chair/wood/pine/wings
icon_state = "wooden_chair_wings"
/obj/structure/bed/chair/wood/ebony/wings
icon_state = "wooden_chair_wings"
/obj/structure/bed/chair/wood/mahogany/wings
icon_state = "wooden_chair_wings"
//Eris Chairs
/obj/structure/bed/chair/modern_chair
name = "modern chair"
desc = "It's like sitting in an egg."
icon_state = "modern_chair"
color = null
base_icon = "modern_chair"
applies_material_colour = 0
/obj/structure/bed/chair/modern_chair/Initialize()
. = ..()
var/image/I = image(icon, "[base_icon]_over")
I.layer = ABOVE_MOB_LAYER
I.plane = MOB_PLANE
overlays |= I
/obj/structure/bed/chair/modern_bar_stool
name = "bar stool"
desc = "How vibrant!"
icon_state = "modern_stool"
color = null
base_icon = "modern_stool"
applies_material_colour = 0
/obj/structure/bed/chair/backed_grey
name = "grey chair"
desc = "Also available in red."
icon_state = "onestar_chair_grey"
color = null
base_icon = "onestar_chair_grey"
applies_material_colour = 0
/obj/structure/bed/chair/backed_red
name = "red chair"
desc = "Also available in grey."
icon_state = "onestar_chair_red"
color = null
base_icon = "onestar_chair_red"
applies_material_colour = 0
//sofa
/obj/structure/bed/chair/sofa
@@ -236,6 +313,7 @@
icon_state = "sofamiddle"
applies_material_colour = 1
var/sofa_material = "carpet"
var/corner_piece = FALSE
/obj/structure/bed/chair/sofa/update_icon()
if(applies_material_colour && sofa_material)
@@ -247,9 +325,9 @@
else
name = "[sofa_material] [initial(name)]"
/obj/structure/bed/chair/update_layer()
/obj/structure/bed/chair/sofa/update_layer()
// Corner east/west should be on top of mobs, any other state's north should be.
if((icon_state == "sofacorner" && ((dir & EAST) || (dir & WEST))) || (icon_state != "sofacorner" && (dir & NORTH)))
if((corner_piece && ((dir & EAST) || (dir & WEST))) || (!corner_piece && (dir & NORTH)))
plane = MOB_PLANE
layer = MOB_LAYER + 0.1
else
@@ -266,6 +344,44 @@
/obj/structure/bed/chair/sofa/corner
icon_state = "sofacorner"
base_icon = "sofacorner"
corner_piece = TRUE
// Wooden nonsofa - no corners
/obj/structure/bed/chair/sofa/pew
name = "pew bench"
desc = "If they want you to go to church, why do they make these so uncomfortable?"
base_icon = "pewmiddle"
icon_state = "pewmiddle"
applies_material_colour = FALSE
/obj/structure/bed/chair/sofa/pew/left
icon_state = "pewend_left"
base_icon = "pewend_left"
/obj/structure/bed/chair/sofa/pew/right
icon_state = "pewend_right"
base_icon = "pewend_right"
// Corporate sofa - one color fits all
/obj/structure/bed/chair/sofa/corp
name = "black leather sofa"
desc = "How corporate!"
base_icon = "corp_sofamiddle"
icon_state = "corp_sofamiddle"
applies_material_colour = FALSE
/obj/structure/bed/chair/sofa/corp/left
icon_state = "corp_sofaend_left"
base_icon = "corp_sofaend_left"
/obj/structure/bed/chair/sofa/corp/right
icon_state = "corp_sofaend_right"
base_icon = "corp_sofaend_right"
/obj/structure/bed/chair/sofa/corp/corner
icon_state = "corp_sofacorner"
base_icon = "corp_sofacorner"
corner_piece = TRUE
//color variations
@@ -39,7 +39,7 @@ var/global/list/stool_cache = list() //haha stool
icon_state = ""
cut_overlays()
// Base icon.
var/cache_key = "stool-[material.name]"
var/cache_key = "[base_icon]-[material.name]"
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, base_icon)
I.color = material.icon_colour
@@ -47,9 +47,9 @@ var/global/list/stool_cache = list() //haha stool
add_overlay(stool_cache[cache_key])
// Padding overlay.
if(padding_material)
var/padding_cache_key = "stool-padding-[padding_material.name]"
var/padding_cache_key = "[base_icon]-padding-[padding_material.name]"
if(isnull(stool_cache[padding_cache_key]))
var/image/I = image(icon, "stool_padding")
var/image/I = image(icon, "[base_icon]_padding")
I.color = padding_material.icon_colour
stool_cache[padding_cache_key] = I
add_overlay(stool_cache[padding_cache_key])
@@ -149,3 +149,22 @@ var/global/list/stool_cache = list() //haha stool
remove_padding()
else
..()
/obj/item/weapon/stool/barstool
name = "bar stool"
desc = "Apply butt."
icon = 'icons/obj/furniture.dmi'
icon_state = "bar_stool_preview" //set for the map
randpixel = 0
center_of_mass = null
force = 10
throwforce = 10
w_class = ITEMSIZE_HUGE
base_icon = "bar_stool_base"
anchored = 1
/obj/item/weapon/stool/barstool/padded
icon_state = "bar_stool_padded_preview" //set for the map
/obj/item/weapon/stool/barstool/padded/New(var/newloc, var/new_material)
..(newloc, "steel", "carpet")
+46 -4
View File
@@ -4,7 +4,7 @@
name = "toilet"
desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."
icon = 'icons/obj/watercloset.dmi'
icon_state = "toilet00"
icon_state = "toilet"
density = 0
anchored = 1
var/open = 0 //if the lid is up
@@ -41,7 +41,7 @@
update_icon()
/obj/structure/toilet/update_icon()
icon_state = "toilet[open][cistern]"
icon_state = "toilet[initial(icon_state)][open][cistern]"
/obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob)
if(I.is_crowbar())
@@ -92,6 +92,40 @@
return
/obj/structure/toilet/prison
name = "prison toilet"
icon_state = "toilet2"
/obj/structure/toilet/prison/attack_hand(mob/living/user)
return
/obj/structure/toilet/prison/attackby(obj/item/I, mob/living/user)
if(istype(I, /obj/item/weapon/grab))
user.setClickCooldown(user.get_attack_speed(I))
var/obj/item/weapon/grab/G = I
if(isliving(G.affecting))
var/mob/living/GM = G.affecting
if(G.state>1)
if(!GM.loc == get_turf(src))
to_chat(user, "<span class='notice'>[GM.name] needs to be on the toilet.</span>")
return
if(open && !swirlie)
user.visible_message("<span class='danger'>[user] starts to give [GM.name] a swirlie!</span>", "<span class='notice'>You start to give [GM.name] a swirlie!</span>")
swirlie = GM
if(do_after(user, 30, GM))
user.visible_message("<span class='danger'>[user] gives [GM.name] a swirlie!</span>", "<span class='notice'>You give [GM.name] a swirlie!</span>", "You hear a toilet flushing.")
if(!GM.internal)
GM.adjustOxyLoss(5)
swirlie = null
else
user.visible_message("<span class='danger'>[user] slams [GM.name] into the [src]!</span>", "<span class='notice'>You slam [GM.name] into the [src]!</span>")
GM.adjustBruteLoss(5)
else
to_chat(user, "<span class='notice'>You need a tighter grip.</span>")
/obj/structure/urinal
name = "urinal"
@@ -222,7 +256,7 @@
M.touching.remove_any(remove_amount)
M.clean_blood()
if(isturf(loc))
var/turf/tile = loc
for(var/obj/effect/E in tile)
@@ -274,7 +308,7 @@
icon_state = "rubberducky"
/obj/structure/sink
name = "sink"
name = "bathroom sink"
icon = 'icons/obj/watercloset.dmi'
icon_state = "sink"
desc = "A sink used for washing one's hands and face."
@@ -392,6 +426,14 @@
name = "kitchen sink"
icon_state = "sink_alt"
/obj/structure/sink/countertop
name = "countertop sink"
icon_state = "sink3"
/obj/structure/sink/generic
name = "sink"
icon_state = "sink4"
/obj/structure/sink/puddle //splishy splashy ^_^
name = "puddle"
icon_state = "puddle"