Merge branch 'master' into placeholder
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
@@ -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))
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 45 KiB |