diff --git a/code/defines/obj.dm b/code/defines/obj.dm
deleted file mode 100644
index 4e620df5fc2..00000000000
--- a/code/defines/obj.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/obj/structure/signpost
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "signpost"
- anchored = 1
- density = 1
-
-/obj/structure/signpost/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- return attack_hand(user)
-
-/obj/structure/signpost/attack_hand(mob/user as mob)
- switch(alert("Travel back to ss13?",,"Yes","No"))
- if("Yes")
- if(user.z != src.z) return
- user.loc.loc.Exited(user)
- user.loc = pick(latejoin)
- if("No")
- return
-
-/obj/effect/mark
- var/mark = ""
- icon = 'icons/misc/mark.dmi'
- icon_state = "blank"
- anchored = 1
- layer = 99
- mouse_opacity = 0
- unacidable = 1//Just to be sure.
-
-/obj/effect/beam
- name = "beam"
- unacidable = 1//Just to be sure.
- var/def_zone
- pass_flags = PASSTABLE
-
-/obj/effect/list_container
- name = "list container"
-
-/obj/effect/list_container/mobl
- name = "mobl"
- var/master = null
-
- var/list/container = list( )
-
-/obj/structure/showcase
- name = "showcase"
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "showcase_1"
- desc = "A stand with the empty body of a cyborg bolted to it."
- density = 1
- anchored = 1
- unacidable = 1//temporary until I decide whether the borg can be removed. -veyveyr
-
-/obj/structure/showcase/fakeid
- name = "\improper Centcom identification console"
- desc = "You can use this to change ID's."
- icon = 'icons/obj/computer.dmi'
- icon_state = "id"
-
-/obj/structure/showcase/fakesec
- name = "\improper Centcom security records"
- desc = "Used to view and edit personnel's security records"
- icon = 'icons/obj/computer.dmi'
- icon_state = "security"
-
-/obj/item/mouse_drag_pointer = MOUSE_ACTIVE_POINTER
-
-/obj/item/weapon/beach_ball
- icon = 'icons/misc/beach.dmi'
- icon_state = "ball"
- name = "beach ball"
- item_state = "beachball"
- density = 0
- anchored = 0
- w_class = 1.0
- force = 0.0
- throwforce = 0.0
- throw_speed = 2
- throw_range = 7
-
-/obj/item/weapon/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
- user.drop_item()
- src.throw_at(target, throw_range, throw_speed)
-
-/obj/effect/spawner
- name = "object spawner"
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 6d127808ceb..bc10565b0b4 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -390,21 +390,20 @@
//BASKETBALL OBJECTS
-/obj/item/weapon/beach_ball/holoball
+/obj/item/toy/beach_ball/holoball
name = "basketball"
icon = 'icons/obj/basketball.dmi'
icon_state = "basketball"
item_state = "basketball"
desc = "Here's your chance, do your dance at the Space Jam."
- w_class = 4 //Stops people from hiding it in their bags/pockets
-/obj/item/weapon/beach_ball/holoball/dodgeball
+/obj/item/toy/beach_ball/holoball/dodgeball
name = "dodgeball"
icon_state = "dodgeball"
item_state = "dodgeball"
desc = "Used for playing the most violent and degrading of childhood games."
-/obj/item/weapon/beach_ball/holoball/dodgeball/throw_impact(atom/hit_atom)
+/obj/item/toy/beach_ball/holoball/dodgeball/throw_impact(atom/hit_atom)
..()
if((ishuman(hit_atom)))
var/mob/living/carbon/M = hit_atom
diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm
index c2f590c5613..4d621cf0fdd 100644
--- a/code/game/objects/effects/misc.dm
+++ b/code/game/objects/effects/misc.dm
@@ -5,4 +5,31 @@
icon = 'icons/obj/items.dmi'
icon_state = "strangepresent"
density = 1
- anchored = 0
\ No newline at end of file
+ anchored = 0
+
+/obj/effect/mark
+ var/mark = ""
+ icon = 'icons/misc/mark.dmi'
+ icon_state = "blank"
+ anchored = 1
+ layer = 99
+ mouse_opacity = 0
+ unacidable = 1//Just to be sure.
+
+/obj/effect/beam
+ name = "beam"
+ unacidable = 1//Just to be sure.
+ var/def_zone
+ pass_flags = PASSTABLE
+
+/obj/effect/spawner
+ name = "object spawner"
+
+/obj/effect/list_container
+ name = "list container"
+
+/obj/effect/list_container/mobl
+ name = "mobl"
+ var/master = null
+
+ var/list/container = list( )
\ No newline at end of file
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index 5e1ef66ee32..2557171bcbc 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -1,110 +1,3 @@
-/* The old single tank bombs that dont really work anymore
-/obj/effect/spawner/bomb
- name = "bomb"
- icon = 'icons/mob/screen_gen.dmi'
- icon_state = "x"
- var/btype = 0 //0 = radio, 1= prox, 2=time
- var/explosive = 1 // 0= firebomb
- var/btemp = 500 // bomb temperature (degC)
- var/active = 0
-
-/obj/effect/spawner/bomb/radio
- btype = 0
-
-/obj/effect/spawner/bomb/proximity
- btype = 1
-
-/obj/effect/spawner/bomb/timer
- btype = 2
-
-/obj/effect/spawner/bomb/timer/syndicate
- btemp = 450
-
-/obj/effect/spawner/bomb/suicide
- btype = 3
-
-/obj/effect/spawner/bomb/New()
- ..()
-
- switch (src.btype)
- // radio
- if (0)
- var/obj/item/assembly/r_i_ptank/R = new /obj/item/assembly/r_i_ptank(src.loc)
- var/obj/item/weapon/tank/internals/plasma/p3 = new /obj/item/weapon/tank/internals/plasma(R)
- var/obj/item/device/radio/signaler/p1 = new /obj/item/device/radio/signaler(R)
- var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
- R.part1 = p1
- R.part2 = p2
- R.part3 = p3
- p1.master = R
- p2.master = R
- p3.master = R
- R.status = explosive
- p1.b_stat = 0
- p2.secured = 1
- p3.air_contents.temperature = btemp + T0C
-
- // proximity
- if (1)
- var/obj/item/assembly/m_i_ptank/R = new /obj/item/assembly/m_i_ptank(src.loc)
- var/obj/item/weapon/tank/internals/plasma/p3 = new /obj/item/weapon/tank/internals/plasma(R)
- var/obj/item/device/prox_sensor/p1 = new /obj/item/device/prox_sensor(R)
- var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
- R.part1 = p1
- R.part2 = p2
- R.part3 = p3
- p1.master = R
- p2.master = R
- p3.master = R
- R.status = explosive
-
- p3.air_contents.temperature = btemp + T0C
- p2.secured = 1
-
- if(src.active)
- R.part1.secured = 1
- R.part1.icon_state = text("motion[]", 1)
- R.c_state(1, src)
-
- // timer
- if (2)
- var/obj/item/assembly/t_i_ptank/R = new /obj/item/assembly/t_i_ptank(src.loc)
- var/obj/item/weapon/tank/internals/plasma/p3 = new /obj/item/weapon/tank/internals/plasma(R)
- var/obj/item/device/timer/p1 = new /obj/item/device/timer(R)
- var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
- R.part1 = p1
- R.part2 = p2
- R.part3 = p3
- p1.master = R
- p2.master = R
- p3.master = R
- R.status = explosive
-
- p3.air_contents.temperature = btemp + T0C
- p2.secured = 1
- //bombvest
- if(3)
- var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new /obj/item/clothing/suit/armor/a_i_a_ptank(src.loc)
- var/obj/item/weapon/tank/internals/plasma/p4 = new /obj/item/weapon/tank/internals/plasma(R)
- var/obj/item/device/healthanalyzer/p1 = new /obj/item/device/healthanalyzer(R)
- var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
- var/obj/item/clothing/suit/armor/vest/p3 = new /obj/item/clothing/suit/armor/vest(R)
- R.part1 = p1
- R.part2 = p2
- R.part3 = p3
- R.part4 = p4
- p1.master = R
- p2.master = R
- p3.master = R
- p4.master = R
- R.status = explosive
-
- p4.air_contents.temperature = btemp + T0C
- p2.secured = 1
-
- qdel(src)
-*/
-
/obj/effect/spawner/newbomb
name = "bomb"
icon = 'icons/mob/screen_gen.dmi'
diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm
index f6369e0c1af..69085aca0cc 100644
--- a/code/game/objects/effects/step_triggers.dm
+++ b/code/game/objects/effects/step_triggers.dm
@@ -20,6 +20,17 @@
return
Trigger(H)
+/* Sends a message to mob when triggered*/
+
+/obj/effect/step_trigger/message
+ var/message //the message to give to the mob
+ var/once = 1
+
+/obj/effect/step_trigger/message/Trigger(mob/M as mob)
+ if(M.client)
+ M << "[message]"
+ if(once)
+ qdel(src)
/* Tosses things in a certain direction */
@@ -117,6 +128,42 @@
A.y = rand(teleport_y, teleport_y_offset)
A.z = rand(teleport_z, teleport_z_offset)
+/* Fancy teleporter, creates sparks and smokes when used */
+
+/obj/effect/step_trigger/teleport_fancy
+ var/locationx
+ var/locationy
+ var/uses = 1 //0 for infinite uses
+ var/entersparks = 0
+ var/exitsparks = 0
+ var/entersmoke = 0
+ var/exitsmoke = 0
+
+/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob)
+ var/dest = locate(locationx, locationy, z)
+ M.Move(dest)
+
+ if(entersparks)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(4, 1, src)
+ s.start()
+ if(exitsparks)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(4, 1, dest)
+ s.start()
+
+ if(entersmoke)
+ var/datum/effect/effect/system/harmless_smoke_spread/s = new /datum/effect/effect/system/harmless_smoke_spread
+ s.set_up(4, 1, src, 0)
+ s.start()
+ if(exitsmoke)
+ var/datum/effect/effect/system/harmless_smoke_spread/s = new /datum/effect/effect/system/harmless_smoke_spread
+ s.set_up(4, 1, dest, 0)
+ s.start()
+
+ uses--
+ if(uses == 0)
+ qdel(src)
/* Simple sound player, Mapper friendly! */
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index e586ab90a8b..8ea4e1cfaad 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -52,6 +52,8 @@
var/suittoggled = 0
var/hooded = 0
+ /obj/item/mouse_drag_pointer = MOUSE_ACTIVE_POINTER //the icon to indicate this object is being dragged
+
//So items can have custom embedd values
//Because customisation is king
var/embed_chance = EMBED_CHANCE
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index ce8c268529c..54a982ced76 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -15,6 +15,7 @@
* Carp plushie
* Foam armblade
* Toy big red button
+ Beach ball
*/
@@ -1153,3 +1154,17 @@ obj/item/toy/cards/deck/syndicate
else
user << "Nothing happens."
+
+/*
+ * Beach ball
+ */
+/obj/item/toy/beach_ball
+ icon = 'icons/misc/beach.dmi'
+ icon_state = "ball"
+ name = "beach ball"
+ item_state = "beachball"
+ w_class = 4 //Stops people from hiding it in their bags/pockets
+
+/obj/item/toy/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
+ user.drop_item()
+ src.throw_at(target, throw_range, throw_speed)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index b36865df202..4731a6bd18a 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -44,8 +44,8 @@
/obj/item/weapon/book/manual/barman_recipes,
/obj/item/weapon/book/manual/chef_recipes,
/obj/item/weapon/bikehorn,
- /obj/item/weapon/beach_ball,
- /obj/item/weapon/beach_ball/holoball,
+ /obj/item/toy/beach_ball,
+ /obj/item/toy/beach_ball/holoball,
/obj/item/weapon/banhammer,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm
new file mode 100644
index 00000000000..3a5be7f1b01
--- /dev/null
+++ b/code/game/objects/structures/showcase.dm
@@ -0,0 +1,20 @@
+/*Completely generic structures for use by mappers to create fake objects, i.e. display rooms*/
+/obj/structure/showcase
+ name = "showcase"
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "showcase_1"
+ desc = "A stand with the empty body of a cyborg bolted to it."
+ density = 1
+ anchored = 1
+
+/obj/structure/showcase/fakeid
+ name = "\improper Centcom identification console"
+ desc = "You can use this to change ID's."
+ icon = 'icons/obj/computer.dmi'
+ icon_state = "id"
+
+/obj/structure/showcase/fakesec
+ name = "\improper Centcom security records"
+ desc = "Used to view and edit personnel's security records"
+ icon = 'icons/obj/computer.dmi'
+ icon_state = "security"
\ No newline at end of file
diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm
new file mode 100644
index 00000000000..d836829598b
--- /dev/null
+++ b/code/modules/awaymissions/signpost.dm
@@ -0,0 +1,18 @@
+/*An alternative to exit gateways, signposts send you back to the arrivals shuttle with their semiotic magic.*/
+/obj/structure/signpost
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "signpost"
+ anchored = 1
+ density = 1
+
+/obj/structure/signpost/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+ return attack_hand(user)
+
+/obj/structure/signpost/attack_hand(mob/user as mob)
+ switch(alert("Travel back to ss13?",,"Yes","No"))
+ if("Yes")
+ if(user.z != src.z) return
+ user.loc.loc.Exited(user)
+ user.loc = pick(latejoin)
+ if("No")
+ return
\ No newline at end of file
diff --git a/code/modules/awaymissions/trigger.dm b/code/modules/awaymissions/trigger.dm
deleted file mode 100644
index c31b37fbd8b..00000000000
--- a/code/modules/awaymissions/trigger.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-/obj/effect/step_trigger/message
- var/message //the message to give to the mob
- var/once = 1
-
-/obj/effect/step_trigger/message/Trigger(mob/M as mob)
- if(M.client)
- M << "[message]"
- if(once)
- qdel(src)
-
-/obj/effect/step_trigger/teleport_fancy
- var/locationx
- var/locationy
- var/uses = 1 //0 for infinite uses
- var/entersparks = 0
- var/exitsparks = 0
- var/entersmoke = 0
- var/exitsmoke = 0
-
-/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob)
- var/dest = locate(locationx, locationy, z)
- M.Move(dest)
-
- if(entersparks)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(4, 1, src)
- s.start()
- if(exitsparks)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(4, 1, dest)
- s.start()
-
- if(entersmoke)
- var/datum/effect/effect/system/harmless_smoke_spread/s = new /datum/effect/effect/system/harmless_smoke_spread
- s.set_up(4, 1, src, 0)
- s.start()
- if(exitsmoke)
- var/datum/effect/effect/system/harmless_smoke_spread/s = new /datum/effect/effect/system/harmless_smoke_spread
- s.set_up(4, 1, dest, 0)
- s.start()
-
- uses--
- if(uses == 0)
- qdel(src)
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index 26382e022e7..46722f072e9 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -251,7 +251,6 @@
#include "code\datums\wires\taperecorder.dm"
#include "code\datums\wires\vending.dm"
#include "code\datums\wires\wires.dm"
-#include "code\defines\obj.dm"
#include "code\defines\obj\weapon.dm"
#include "code\defines\procs\AStar.dm"
#include "code\defines\procs\dbcore.dm"
@@ -718,6 +717,7 @@
#include "code\game\objects\structures\noticeboard.dm"
#include "code\game\objects\structures\OpTable.dm"
#include "code\game\objects\structures\safe.dm"
+#include "code\game\objects\structures\showcase.dm"
#include "code\game\objects\structures\signs.dm"
#include "code\game\objects\structures\spirit_board.dm"
#include "code\game\objects\structures\statues.dm"
@@ -854,7 +854,7 @@
#include "code\modules\awaymissions\exile.dm"
#include "code\modules\awaymissions\gateway.dm"
#include "code\modules\awaymissions\pamphlet.dm"
-#include "code\modules\awaymissions\trigger.dm"
+#include "code\modules\awaymissions\signpost.dm"
#include "code\modules\awaymissions\zlevel.dm"
#include "code\modules\awaymissions\maploader\dmm_suite.dm"
#include "code\modules\awaymissions\maploader\reader.dm"