Merge branch 'master' into placeholder

This commit is contained in:
Ferner
2020-12-11 10:38:19 +01:00
29 changed files with 344 additions and 101 deletions
-1
View File
@@ -794,7 +794,6 @@
#include "code\game\objects\items\draftingchalk.dm"
#include "code\game\objects\items\eightball.dm"
#include "code\game\objects\items\glassjar.dm"
#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\skrell.dm"
+3
View File
@@ -80,6 +80,9 @@
// fall_collateral if the next turf is not open space.
if (isopenturf(victim.loc) && victim.loc:is_hole)
victim.forceMove(below)
if(victim.pulledby)
var/mob/M = victim.pulledby
M.stop_pulling()
if (locate(/obj/structure/stairs) in victim.loc) // If there's stairs, we're probably going down them.
if (falling[victim] <= 1) // Just moving down a flight, skip damage.
+1 -1
View File
@@ -83,7 +83,7 @@ var/datum/controller/subsystem/traumas/SStraumas
/obj/machinery/cryopod/robot, /obj/machinery/robotic_fabricator, /obj/effect/decal/cleanable/blood/gibs/robot, /obj/effect/decal/remains/robot,
/obj/item/robot_parts, /obj/item/organ/internal/cell, /obj/item/organ/internal/data, /obj/item/toy/figure/borg)),
"nanotrasen" = typecacheof(list(/obj/item/toy/nanotrasenballoon, /obj/item/soap/nanotrasen, /obj/structure/sign/flag/nanotrasen,
"nanotrasen" = typecacheof(list(/obj/item/toy/balloon/nanotrasen, /obj/item/soap/nanotrasen, /obj/structure/sign/flag/nanotrasen,
/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen, /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen, /obj/item/storage/toolbox/lunchbox/nt,
/obj/structure/banner, /obj/structure/bed/chair/office/bridge, /obj/item/clothing/head/collectable/captain,
/obj/item/clothing/head/helmet/space/void/captain, /obj/item/clothing/suit/space/void/captain, /obj/item/clothing/suit/storage/hooded/wintercoat/captain,
+2 -2
View File
@@ -7,11 +7,11 @@
/datum/uplink_item/item/badassery/balloon
name = "For showing that You Are The BOSS (Useless Balloon)"
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
path = /obj/item/toy/syndicateballoon
path = /obj/item/toy/balloon/syndicate
/datum/uplink_item/item/badassery/balloon/NT
name = "For showing that you love NT SOO much (Useless Balloon)"
path = /obj/item/toy/nanotrasenballoon
path = /obj/item/toy/balloon/nanotrasen
/**************
* Random Item *
@@ -10,8 +10,8 @@
set category = "Hardware"
set name = "Destroy Core"
set desc = "Activates or deactivates self destruct sequence of your physical mainframe."
var/mob/living/silicon/ai/user = usr
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, 0, 1))
return
@@ -49,8 +49,8 @@
set category = "Hardware"
set name = "Toggle APU Generator"
set desc = "Activates or deactivates your APU generator, allowing you to operate even without power."
var/mob/living/silicon/ai/user = usr
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, 0, 1))
return
@@ -67,7 +67,12 @@
set category = "Hardware"
set name = "Destroy Station"
set desc = "Activates or deactivates self destruct sequence of this station. Sequence takes two minutes, and if you are shut down before timer reaches zero it will be cancelled."
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
var/obj/item/device/radio/radio = new/obj/item/device/radio()
var/datum/weakref/nuke
//Time control for the self destruct
@@ -100,6 +100,9 @@
/proc/ability_prechecks(var/mob/living/silicon/ai/user = null, var/check_price = 0, var/override = 0)
if(!user)
return 0
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return FALSE
if(!istype(user))
to_chat(user, "GAME ERROR: You tried to use ability that is only available for malfunctioning AIs, but you are not AI! Please report this.")
return 0
@@ -48,6 +48,7 @@
set desc = "25 CPU - Sends termination signal to quantum relay aborting current shuttle call."
set category = "Software"
var/price = 25
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
@@ -67,8 +68,8 @@
set desc = "125 CPU - Bypasses firewalls on Cyborg lock mechanism, allowing you to override lock command from robotics control console."
set category = "Software"
var/price = 125
var/mob/living/silicon/ai/user = usr
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
@@ -137,7 +138,12 @@
set desc = "2500 CPU - Allows you to hack a random active maintenance drone which is slaved to you. Bringing them under your control."
set category = "Software"
var/price = 2500
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
var/list/drone_list = list()
var/hacked_num = 0
for(var/mob/living/silicon/robot/drone/D in mob_list)
@@ -173,7 +179,11 @@
set desc = "350 CPU - Allows you to hack cyborgs which are not slaved to you, bringing them under your control."
set category = "Software"
var/price = 350
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
var/list/L = get_unlinked_cyborgs(user)
if(!L.len)
@@ -239,7 +249,11 @@
set desc = "600 CPU - Allows you to hack other AIs, slaving them under you."
set category = "Software"
var/price = 600
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
var/list/L = get_other_ais(user)
if(!L.len)
@@ -48,6 +48,7 @@
set desc = "50 CPU - Hacks a holopad shorting out its projector. Using a hacked holopad only turns on the audio feature."
set category = "Software"
var/price = 50
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price) || !ability_pay(user,price))
return
@@ -68,7 +69,11 @@
set desc = "100 CPU - Hacks existing camera, allowing you to add upgrade of your choice to it. Alternatively it lets you reactivate broken camera."
set category = "Software"
var/price = 100
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
if(target && !istype(target))
to_chat(user, "This is not a camera.")
@@ -129,6 +134,7 @@
set desc = "275 CPU - Uses station's emergency shielding system to create temporary barrier which lasts for few minutes, but won't resist gunfire."
set category = "Software"
var/price = 275
var/mob/living/silicon/ai/user = usr
if(!T || !istype(T))
return
@@ -148,8 +154,8 @@
set desc = "400 CPU - Causes cyclic short-circuit in machine, resulting in weak explosion after some time."
set category = "Software"
var/price = 400
var/mob/living/silicon/ai/user = usr
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
@@ -226,7 +232,12 @@
set desc = "300 CPU - Hacks the gravity generator. Making gravity reverse for short moment and making victims fall down really hard on the floor."
set category = "Software"
var/price = 300
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
var/area/Area = get_area(user?.eyeobj.loc)
if(!Area)
return
@@ -41,7 +41,11 @@
set name = "Basic Encryption Hack"
set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station."
var/price = 10
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
if(!A)
return
@@ -87,7 +91,11 @@
set name = "Advanced Encryption Hack"
set desc = "75 CPU - Attempts to bypass encryption on the Command Quantum Relay, giving you ability to fake legitimate messages. Has chance of failing."
var/price = 75
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
if(!ability_prechecks(user, price))
return
@@ -183,6 +191,7 @@
set name = "Elite Encryption Hack"
set desc = "200 CPU - Allows you to hack station's ALERTCON system, changing alert level. Has high chance of failing."
var/price = 200
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
@@ -210,7 +219,12 @@
set name = "System Override"
set desc = "500 CPU - Begins hacking station's primary firewall, quickly overtaking remaining APC systems. When completed grants access to station's self-destruct mechanism. Network administrators will probably notice this."
var/price = 500
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
if (alert(user, "Begin system override? This cannot be stopped once started. The network administrators will probably notice this.", "System Override:", "Yes", "No") != "Yes")
return
if (!ability_prechecks(user, price) || !ability_pay(user, price) || user.system_override)
@@ -43,6 +43,7 @@
set desc = "100 CPU - Forces a module reset on a cyborg that is enslaved to you. Has a chance of failing."
set category = "Software"
var/price = 100
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
@@ -109,7 +110,11 @@
set desc = "125 CPU - Infect an APC which can cause an IPC to become slaved to you if they download the files by trying to charge off of it. "
set category = "Software"
var/price = 125
var/mob/living/silicon/ai/user = usr
if(user.stat == DEAD)
to_chat(user, SPAN_WARNING("You are dead!"))
return
if(!A)
return
@@ -152,8 +157,8 @@
set desc = "300 CPU - Allows you to overclock a slaved cyborg granting them various improvements to their systems."
set category = "Software"
var/price = 300
var/mob/living/silicon/ai/user = usr
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
@@ -215,8 +220,8 @@
set desc = "450 CPU - Starts a takeover of the station enabling several abilities that relate to synthetic dominance."
set category = "Software"
var/price = 450
var/mob/living/silicon/ai/user = usr
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user,price))
return
@@ -913,16 +913,22 @@
to_chat(T, SPAN_NOTICE("<br>You are currently being turned into a vampire. You will die in the course of this, but you will be revived by the end. Please do not ghost out of your body until the process is complete."))
var/drained_all_blood = FALSE
while(do_mob(src, T, 50))
if(!mind.vampire)
to_chat(src, SPAN_WARNING("Your fangs have disappeared!"))
return
if(!T.vessel.get_reagent_amount(/datum/reagent/blood))
to_chat(src, SPAN_NOTICE("[T] is now drained of blood. You begin forcing your own blood into their body, spreading the corruption of the Veil to their body."))
drained_all_blood = TRUE
break
T.vessel.remove_reagent(/datum/reagent/blood, 50)
if(!drained_all_blood)
vampire.status &= ~VAMP_DRAINING
return
T.revive()
// You ain't goin' anywhere, bud.
-48
View File
@@ -1,48 +0,0 @@
/obj/item/latexballon
name = "latex glove"
desc = "A latex glove, usually used as a balloon."
icon_state = "latexballon"
item_state = "lgloves"
force = 0
throwforce = 0
w_class = ITEMSIZE_SMALL
throw_speed = 1
throw_range = 15
var/state
var/datum/gas_mixture/air_contents = null
/obj/item/latexballon/proc/blow(obj/item/tank/tank)
if (icon_state == "latexballon_bursted")
return
src.air_contents = tank.remove_air_volume(3)
icon_state = "latexballon_blow"
item_state = "latexballon"
/obj/item/latexballon/proc/burst()
if (!air_contents)
return
playsound(src, 'sound/weapons/gunshot/gunshot1.ogg', 100, 1)
icon_state = "latexballon_bursted"
item_state = "lgloves"
loc.assume_air(air_contents)
/obj/item/latexballon/ex_act(severity)
burst()
switch(severity)
if (1)
qdel(src)
if (2)
if (prob(50))
qdel(src)
/obj/item/latexballon/bullet_act()
burst()
/obj/item/latexballon/fire_act(datum/gas_mixture/air, temperature, volume)
if(temperature > T0C+100)
burst()
return
/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob)
if (can_puncture(W))
burst()
+183 -23
View File
@@ -33,25 +33,25 @@
pickup_sound = 'sound/items/pickup/gloves.ogg'
/*
* Balloons
* Water Balloons
*/
/obj/item/toy/balloon
/obj/item/toy/waterballoon
name = "water balloon"
desc = "A translucent balloon. There's nothing in it."
icon_state = "waterballoon-e"
item_state = "balloon-empty"
item_state = "waterballoon-e"
drop_sound = 'sound/items/drop/rubber.ogg'
pickup_sound = 'sound/items/pickup/rubber.ogg'
/obj/item/toy/balloon/New()
/obj/item/toy/waterballoon/New()
var/datum/reagents/R = new/datum/reagents(10)
reagents = R
R.my_atom = src
/obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob)
/obj/item/toy/waterballoon/attack(mob/living/carbon/human/M as mob, mob/user as mob)
return
/obj/item/toy/balloon/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
/obj/item/toy/waterballoon/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
if(!proximity) return
if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1)
A.reagents.trans_to_obj(src, 10)
@@ -60,7 +60,7 @@
src.update_icon()
return
/obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob)
/obj/item/toy/waterballoon/attackby(obj/O as obj, mob/user as mob)
if(istype(O, /obj/item/reagent_containers/glass))
if(O.reagents)
if(O.reagents.total_volume < 1)
@@ -77,7 +77,7 @@
src.update_icon()
return
/obj/item/toy/balloon/throw_impact(atom/hit_atom)
/obj/item/toy/waterballoon/throw_impact(atom/hit_atom)
if(src.reagents.total_volume >= 1)
src.visible_message("<span class='warning'>\The [src] bursts!</span>","You hear a pop and a splash.")
src.reagents.touch_turf(get_turf(hit_atom))
@@ -87,31 +87,191 @@
QDEL_IN(src, 5)
return
/obj/item/toy/balloon/update_icon()
/obj/item/toy/waterballoon/update_icon()
if(src.reagents.total_volume >= 1)
icon_state = "waterballoon"
item_state = "balloon"
else
icon_state = "waterballoon-e"
item_state = "balloon-empty"
item_state = icon_state
/obj/item/toy/syndicateballoon
name = "criminal balloon"
desc = "There is a tag on the back that reads \"FUK NT!11!\"."
/*
* Balloons
*/
#define BALLOON_NORMAL 0
#define BALLOON_BLOW 1
#define BALLOON_BURST 2
/obj/item/toy/balloon
name = "balloon"
desc_info = "You can fill it up with gas using a tank."
desc_fluff = "Thanks to the joint effort of the Research and Atmospherics teams, station enviroments have been set to allow balloons to float without helium. Look, it was the end of the month and we went under budget."
drop_sound = 'sound/items/drop/rubber.ogg'
pickup_sound = 'sound/items/pickup/rubber.ogg'
w_class = ITEMSIZE_HUGE
var/datum/gas_mixture/air_contents = null
var/status = 0 // 0 = normal, 1 = blow, 2 = burst
/obj/item/toy/balloon/attack_self(mob/user as mob)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(user.a_intent == I_HELP)
user.visible_message("<span class='notice'><b>\The [user]</b> pokes [src]!</span>","<span class='notice'>You poke [src]!</span>")
else if (user.a_intent == I_HURT)
user.visible_message("<span class='warning'><b>\The [user]</b> punches [src]!</span>","<span class='warning'>You punch [src]!</span>")
else if (user.a_intent == I_GRAB)
if(prob(66))
user.visible_message("<span class='warning'><b>\The [user]</b> attempts to pop [src]!</span>","<span class='warning'>You attempt to pop [src]!</span>")
else
user.visible_message("<span class='warning'><b>\The [user]</b> pops [src]!</span>","<span class='warning'>You pop [src]!</span>")
burst()
else
user.visible_message("<span class='notice'><b>\The [user]</b> lightly bats the [src].</span>","<span class='notice'>You lightly bat the [src].</span>")
/obj/item/toy/balloon/update_icon()
switch(status)
if(BALLOON_BURST)
if(("[initial(icon_state)]_burst") in icon_states(icon))
icon_state = "[initial(icon_state)]_burst"
item_state = icon_state
else
qdel(src) // Just qdel it if it doesn't have a burst state.
if(BALLOON_BLOW)
if(("[initial(icon_state)]_blow") in icon_states(icon)) //Only give blow icon_state if it has one. For those who can't be bothered to sprite. (Also a catch to prevent invisible sprites.)
icon_state = "[initial(icon_state)]_blow"
update_held_icon()
/obj/item/toy/balloon/proc/blow(obj/item/tank/T)
if(status == BALLOON_BURST)
return
else
src.air_contents = T.remove_air_volume(3)
status = BALLOON_BLOW
update_icon()
/obj/item/toy/balloon/proc/burst()
playsound(src, 'sound/weapons/gunshot/gunshot1.ogg', 100, 1)
status = BALLOON_BURST
update_icon()
if(air_contents)
loc.assume_air(air_contents)
/obj/item/toy/balloon/ex_act(severity)
burst()
switch(severity)
if(1)
qdel(src)
if(2)
if(prob(50))
qdel(src)
/obj/item/toy/balloon/bullet_act()
burst()
/obj/item/toy/balloon/fire_act(datum/gas_mixture/air, temperature, volume)
if(temperature > T0C+100)
burst()
return
/obj/item/toy/balloon/attackby(obj/item/W as obj, mob/user as mob)
if(can_puncture(W))
burst()
/obj/item/toy/balloon/latex
desc = "Leaves a starchy taste in your mouth after blowing into it."
icon_state = "latexballoon"
item_state = "latexballoon"
/obj/item/toy/balloon/latex/nitrile
desc = "I hope you aren't going to re-use these for medical purposes."
icon_state = "nitrileballoon"
item_state = "nitrileballoon"
/obj/item/toy/balloon/syndicate
name = "'criminal' balloon"
desc = "Across the balloon is printed: \"FUK CAPITALISM!11!\""
icon_state = "syndballoon"
item_state = "syndballoon"
drop_sound = 'sound/items/drop/rubber.ogg'
pickup_sound = 'sound/items/pickup/rubber.ogg'
w_class = ITEMSIZE_LARGE
/obj/item/toy/nanotrasenballoon
name = "nanotrasen balloon"
desc = "Across the balloon the following is printed: \"Man, I love NanoTrasen soooo much. I use only NT products. You have NO idea.\""
/obj/item/toy/balloon/nanotrasen
name = "'motivational' balloon"
desc = "Across the balloon is printed: \"Man, I love corporate soooo much. I use only brand name products. You have NO idea.\""
icon_state = "ntballoon"
item_state = "ntballoon"
w_class = ITEMSIZE_LARGE
drop_sound = 'sound/items/drop/rubber.ogg'
pickup_sound = 'sound/items/pickup/rubber.ogg'
/obj/item/toy/balloon/fellowship
name = "fellowship balloon"
desc = "Across the balloon is printed: \"Fellowship R Friends!\""
icon_state = "fellowshipballoon"
item_state = "fellowshipballoon"
/obj/item/toy/balloon/fellowshiphead
name = "fellowship head balloon"
desc = "Across the balloon is printed: \"Follow Fellows Forwards With The Fellowship!\""
icon_state = "fellowshipheadballoon"
item_state = "fellowshipheadballoon"
/obj/item/toy/balloon/contender
name = "contender balloon"
desc = "Across the balloon is printed: \"Contenders R Cool!\""
icon_state = "contenderballoon"
item_state = "contenderballoon"
/obj/item/toy/balloon/contenderhead
name = "contender head balloon"
desc = "Across the balloon is printed: \"Converge With Comrades in the Contenders!\""
icon_state = "contenderheadballoon"
item_state = "contenderheadballoon"
/obj/item/toy/balloon/bat
name = "giant bat balloon"
desc = "A large, kitschy balloon in the shape of a spooky bat with orange eyes."
desc_fluff = "There's a tag that reads: \"Apparition Halloween LLC.\""
icon_state = "batballoon"
/obj/item/toy/balloon/ghost
name = "giant ghost balloon"
desc = "Oh no, it's a ghost! Oh wait, it's just a kitschy balloon. Phew!"
desc_fluff = "There's a tag that reads: \"Apparition Halloween LLC.\""
icon_state = "ghostballoon"
/obj/item/toy/balloon/xmastree
name = "giant christmas tree balloon"
desc = "Mandatory at inter-generational christmas gatherings and office parties."
desc_fluff = "There's a tag that reads: \"On behalf of employee relations, the CCIA Department wishes you a happy non-denominational holiday season.\""
icon_state = "xmastreeballoon"
/obj/item/toy/balloon/candycane
name = "giant candy cane balloon"
desc = "Kris Kringle ain't got nothing on this candied confection."
desc_fluff = "There's a tag that reads: \"On behalf of employee relations, the CCIA Department wishes you a happy non-denominational holiday season.\""
icon_state = "candycaneballoon"
/obj/item/toy/balloon/color /// To color it, VV the 'color' var with a hex color code with the # included.
desc = "It's a plain little balloon. Comes in many colors!"
icon_state = "colorballoon"
item_state = "colorballoon"
build_from_parts = TRUE
worn_overlay = "string"
randpixel = 5
/obj/item/toy/balloon/color/Initialize()
. = ..()
if(build_from_parts)
color = pick(COLOR_BLUE, COLOR_RED, COLOR_PURPLE, COLOR_BROWN, COLOR_GREEN, COLOR_CYAN, COLOR_YELLOW)
update_icon()
randpixel_xy()
/obj/item/toy/balloon/color/update_icon() // Only color the balloon, not the string.
..()
if(status == BALLOON_BURST)
worn_overlay = null
cut_overlay()
if(worn_overlay)
add_overlay(overlay_image(icon, "[initial(icon_state)]_[worn_overlay]", flags=RESET_COLOR))
#undef BALLOON_NORMAL
#undef BALLOON_BLOW
#undef BALLOON_BURST
/*
* Fake telebeacon
@@ -83,7 +83,7 @@
/obj/item/bikehorn,
/obj/item/beach_ball,
/obj/item/beach_ball/holoball,
/obj/item/toy/balloon,
/obj/item/toy/waterballoon,
/obj/item/toy/blink,
/obj/item/toy/crossbow,
/obj/item/gun/projectile/revolver/capgun,
@@ -171,7 +171,7 @@
/obj/item/lipstick/random,
/obj/item/clothing/shoes/carp,
/obj/item/bikehorn,
/obj/item/toy/balloon,
/obj/item/toy/waterballoon,
/obj/item/toy/blink,
/obj/item/gun/projectile/revolver/capgun,
/obj/item/toy/prize/deathripley,
@@ -204,7 +204,7 @@
/obj/item/stack/material/animalhide/monkey,
/obj/item/stack/material/animalhide/xeno,
/obj/item/xmasgift/medium,
/obj/item/toy/syndicateballoon,
/obj/item/toy/balloon/syndicate,
/obj/item/toy/xmastree,
/obj/item/bluespace_crystal,
/obj/item/gun/energy/mousegun,
@@ -215,7 +215,7 @@
/obj/item/ore/coal,
/obj/item/stamp/clown,
/obj/item/organ/internal/heart/skrell,
/obj/item/latexballon)
/obj/item/toy/balloon/color)
var/atom/movable/I = new gift_type(get_turf(user))
user.remove_from_mob(src)
@@ -80,9 +80,10 @@
if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1)
var/obj/item/device/analyzer/A = W
A.analyze_gases(src, user)
else if (istype(W,/obj/item/latexballon))
var/obj/item/latexballon/LB = W
LB.blow(src)
if (istype(W, /obj/item/toy/balloon))
var/obj/item/toy/balloon/B = W
B.blow(src)
src.add_fingerprint(user)
if(istype(W, /obj/item/device/assembly_holder))
+23 -4
View File
@@ -342,6 +342,27 @@
/obj/item/toy/plushie/bearfire
)
/obj/random/balloon
name = "random balloon"
desc = "This is a random balloon."
icon = 'icons/obj/toy.dmi'
icon_state = "balloon"
spawnlist = list(
/obj/item/toy/balloon/color = 7,
/obj/item/toy/balloon/latex = 1,
/obj/item/toy/balloon/latex/nitrile = 1,
/obj/item/toy/balloon/syndicate = 2,
/obj/item/toy/balloon/nanotrasen = 2,
/obj/item/toy/balloon/fellowship = 1,
/obj/item/toy/balloon/fellowshiphead = 1,
/obj/item/toy/balloon/contender = 1,
/obj/item/toy/balloon/contenderhead = 1,
/obj/item/toy/balloon/bat = 1,
/obj/item/toy/balloon/ghost = 1,
/obj/item/toy/balloon/xmastree = 1,
/obj/item/toy/balloon/candycane = 1
)
/obj/random/smalltank
name = "random small tank"
@@ -1180,8 +1201,7 @@
/obj/random/action_figure = 11,
/obj/random/plushie = 44,
/obj/item/toy/cultsword = 5,
/obj/item/toy/syndicateballoon = 5,
/obj/item/toy/nanotrasenballoon = 5,
/obj/random/balloon = 22,
/obj/item/toy/katana = 11,
/obj/item/toy/bosunwhistle = 5,
/obj/item/storage/belt/champion = 11,
@@ -1218,8 +1238,7 @@
/obj/item/toy/crossbow = 11,
/obj/random/action_figure = 11,
/obj/item/toy/cultsword = 7,
/obj/item/toy/syndicateballoon = 10,
/obj/item/toy/nanotrasenballoon = 5,
/obj/random/balloon = 22,
/obj/item/toy/katana = 11,
/obj/random/plushie = 55,
/obj/item/storage/belt/champion = 11,
@@ -62,6 +62,7 @@
/obj/item/clothing/gloves/latex
name = "latex gloves"
desc = "Sterile latex gloves."
desc_info = "You can make balloons with these using some cable coil."
icon_state = "latex"
item_state = "latex"
siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC)
@@ -70,12 +71,25 @@
fingerprint_chance = 75
drop_sound = 'sound/items/drop/rubber.ogg'
pickup_sound = 'sound/items/pickup/rubber.ogg'
var/balloon = /obj/item/toy/balloon/latex
/obj/item/clothing/gloves/latex/attackby(var/obj/O, mob/user as mob)
if(istype(O, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = O
if(C.use(1))
var/obj/item/L = new src.balloon
user.drop_from_inventory(L,get_turf(src))
to_chat(user, "<span class='notice'>You make a balloon.</span>")
qdel(src)
else
to_chat(user, "<span class='warning'>You need one length of cable to finish the balloon!</span>")
/obj/item/clothing/gloves/latex/nitrile
name = "nitrile gloves"
desc = "Sterile nitrile gloves."
icon_state = "nitrile"
item_state = "nitrile"
balloon = /obj/item/toy/balloon/latex/nitrile
/obj/item/clothing/gloves/latex/nitrile/unathi
name = "unathi nitrile gloves"
+3 -2
View File
@@ -57,12 +57,13 @@
if(51 to 52) // Uncommon, 2% each
new /obj/item/melee/classic_baton(src)
if(53 to 54)
new /obj/item/latexballon(src)
var/newitem = pick(typesof(/obj/item/toy/balloon) - /obj/item/toy/balloon)
new newitem(src)
if(55 to 56)
var/newitem = pick(typesof(/obj/item/toy/prize) - /obj/item/toy/prize)
new newitem(src)
if(57 to 58)
new /obj/item/toy/syndicateballoon(src)
new /obj/item/toy/balloon/syndicate(src)
if(59 to 60)
new /obj/item/rig/eva(src)
if(61 to 62)
@@ -747,6 +747,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
to_chat(src, "<span class='info'>You are now visible!</span>")
invisibility = invisibility == INVISIBILITY_OBSERVER ? 0 : INVISIBILITY_OBSERVER
mouse_opacity = invisibility == INVISIBILITY_OBSERVER ? 0 : initial(mouse_opacity)
// Give the ghost a cult icon which should be visible only to itself
toggle_icon("cult")
+11 -2
View File
@@ -168,10 +168,19 @@ var/list/slot_equipment_priority = list( \
//Puts the item our active hand if possible. Failing that it tries our inactive hand. Returns 1 on success.
//If both fail it drops it on the floor and returns 0.
//This is probably the main one you need to know :)
/mob/proc/put_in_hands(var/obj/item/W)
/mob/proc/put_in_hands(var/obj/item/W, var/check_adjacency = FALSE)
if(!W || !istype(W))
return 0
W.forceMove(get_turf(src))
var/move_to_src = TRUE
if(check_adjacency)
move_to_src = FALSE
var/turf/origin = get_turf(W)
if(Adjacent(origin))
move_to_src = TRUE
if(move_to_src)
W.forceMove(get_turf(src))
else
W.forceMove(get_turf(W))
W.layer = initial(W.layer)
W.dropped()
return 0
@@ -1485,4 +1485,3 @@ There are several things that need to be remembered:
#undef UNDERSCORE_OR_NULL
#undef GET_BODY_TYPE
#undef GET_TAIL_LAYER
@@ -7,4 +7,7 @@
return
accent = chosen_accent
to_chat(src, SPAN_NOTICE("You have set your synthesizer to mimic the [chosen_accent] accent."))
to_chat(src, SPAN_NOTICE("You have set your synthesizer to mimic the [chosen_accent] accent."))
/mob/living/silicon/put_in_hands(obj/item/W)
..(W, TRUE)
+3 -3
View File
@@ -150,9 +150,9 @@ obj/item/organ/vaurca/neuralsocket/process()
else
to_chat(user, "<span class='notice'>Tank is empty!</span>")
src.add_fingerprint(user)
else if (istype(W,/obj/item/latexballon))
var/obj/item/latexballon/LB = W
LB.blow(src)
else if (istype(W,/obj/item/toy/balloon))
var/obj/item/toy/balloon/B = W
B.blow(src)
src.add_fingerprint(user)
/obj/item/organ/vaurca/preserve/attack_self(mob/user as mob)
+11
View File
@@ -35,6 +35,12 @@
-->
<div class="commit sansserif">
<h2 class="date">10 December 2020</h2>
<h3 class="author">Wowzewow (Wezzy) updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Adds a whole bunch of balloons, both seasonal and generic, as well as a whole bunch of features that they have.</li>
</ul>
<h2 class="date">09 December 2020</h2>
<h3 class="author">Geeves updated:</h3>
<ul class="changes bgimages16">
@@ -51,6 +57,11 @@
<li class="bugfix">Fixed maintenance-, mining-, and construction drones having weird lit up eyes. They should now update correctly.</li>
<li class="bugfix">Fixed the hat overlay of mining drones.</li>
<li class="bugfix">You can now punch people again.</li>
<li class="bugfix">Cult ghosts can no longer be clicked on or hovered over, thus they cannot block clicks.</li>
<li class="bugfix">Cancelling a vampire embrace by moving will no longer cause the target to instantly become a vampire.</li>
<li class="bugfix">You are no longer able to pull things when they fall down levels while you were pulling them.</li>
<li class="bugfix">Dead MALFs can no longer use their abilities.</li>
<li class="bugfix">Robots and AI no longer teleport things to themselves when ejecting them. (Like chem dispenser beakers).</li>
</ul>
<h3 class="author">JohnWildkins updated:</h3>
<ul class="changes bgimages16">
+13
View File
@@ -17369,6 +17369,15 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
up eyes. They should now update correctly.
- bugfix: Fixed the hat overlay of mining drones.
- bugfix: You can now punch people again.
- bugfix: Cult ghosts can no longer be clicked on or hovered over, thus they cannot
block clicks.
- bugfix: Cancelling a vampire embrace by moving will no longer cause the target
to instantly become a vampire.
- bugfix: You are no longer able to pull things when they fall down levels while
you were pulling them.
- bugfix: Dead MALFs can no longer use their abilities.
- bugfix: Robots and AI no longer teleport things to themselves when ejecting them.
(Like chem dispenser beakers).
JohnWildkins:
- bugfix: Vending machines spawned after mapload and/or by admins should no longer
have missing icons.
@@ -17382,3 +17391,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: Adds bronze badges for security officers.
- rscadd: Added detective badges to detective and forensic tech lockers, because
they weren't there for some reason.
2020-12-10:
Wowzewow (Wezzy):
- rscadd: Adds a whole bunch of balloons, both seasonal and generic, as well as
a whole bunch of features that they have.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 45 KiB