Added ashtrays

Breakable. Spill contents on breaking or hitting the solid stuff after being thrown.
Have limited capacity. Can be emptied in disposal outlet.
Change sprite when are half-filled and filled.
Also fiddled a bit with the cigs code, so you can put them out without dropping.
This commit is contained in:
comma
2012-03-02 21:56:08 +02:00
parent e066006f51
commit 2edd73627d
6 changed files with 206 additions and 17 deletions

View File

@@ -1,10 +1,36 @@
// DM Environment file for baystation12.dme.
// All manual changes should be made outside the BEGIN_ and END_ blocks.
// New source code should be placed in .dm files: choose File/New --> Code File.
// All manual changes should be made outside the BEGIN_ and END_ blocks.
// New source code should be placed in .dm files: choose File/New --> Code File.
// BEGIN_INTERNALS
// END_INTERNALS
// BEGIN_FILE_DIR
#define FILE_DIR .
#define FILE_DIR ".git"
#define FILE_DIR ".git/hooks"
#define FILE_DIR ".git/info"
#define FILE_DIR ".git/logs"
#define FILE_DIR ".git/logs/refs"
#define FILE_DIR ".git/logs/refs/heads"
#define FILE_DIR ".git/logs/refs/remotes"
#define FILE_DIR ".git/logs/refs/remotes/origin"
#define FILE_DIR ".git/objects"
#define FILE_DIR ".git/objects/00"
#define FILE_DIR ".git/objects/2c"
#define FILE_DIR ".git/objects/2e"
#define FILE_DIR ".git/objects/37"
#define FILE_DIR ".git/objects/4f"
#define FILE_DIR ".git/objects/73"
#define FILE_DIR ".git/objects/a0"
#define FILE_DIR ".git/objects/b4"
#define FILE_DIR ".git/objects/bb"
#define FILE_DIR ".git/objects/bd"
#define FILE_DIR ".git/objects/e0"
#define FILE_DIR ".git/objects/fd"
#define FILE_DIR ".git/objects/pack"
#define FILE_DIR ".git/refs"
#define FILE_DIR ".git/refs/heads"
#define FILE_DIR ".git/refs/remotes"
#define FILE_DIR ".git/refs/remotes/origin"
#define FILE_DIR "code"
#define FILE_DIR "code/ATMOSPHERICS"
#define FILE_DIR "code/ATMOSPHERICS/components"
@@ -154,6 +180,7 @@
#define FILE_DIR "code/WorkInProgress/Apples"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara"
#define FILE_DIR "code/WorkInProgress/Chinsky"
#define FILE_DIR "code/WorkInProgress/mapload"
#define FILE_DIR "code/WorkInProgress/Mini"
#define FILE_DIR "code/WorkInProgress/Mloc"
@@ -167,6 +194,16 @@
#define FILE_DIR "code/WorkInProgress/Tastyfish"
#define FILE_DIR "code/WorkInProgress/virus2"
#define FILE_DIR "code/WorkInProgress/Wrongnumber"
#define FILE_DIR "config"
#define FILE_DIR "config/names"
#define FILE_DIR "data"
#define FILE_DIR "data/logs"
#define FILE_DIR "data/logs/2012"
#define FILE_DIR "data/logs/2012/02-February"
#define FILE_DIR "data/logs/2012/03-March"
#define FILE_DIR "data/player_saves"
#define FILE_DIR "data/player_saves/c"
#define FILE_DIR "data/player_saves/c/chinsky"
#define FILE_DIR "html"
#define FILE_DIR "icons"
#define FILE_DIR "icons/48x48"
@@ -181,12 +218,14 @@
#define FILE_DIR "icons/obj/machines"
#define FILE_DIR "icons/obj/pipes"
#define FILE_DIR "icons/pda_icons"
#define FILE_DIR "icons/PSD files"
#define FILE_DIR "icons/spideros_icons"
#define FILE_DIR "icons/Testing"
#define FILE_DIR "icons/turf"
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
#define FILE_DIR "music"
#define FILE_DIR "sound"
#define FILE_DIR "sound/ambience"
#define FILE_DIR "sound/announcer"
@@ -200,10 +239,13 @@
#define FILE_DIR "sound/scary"
#define FILE_DIR "sound/voice"
#define FILE_DIR "sound/weapons"
#define FILE_DIR "SQL"
// END_FILE_DIR
// BEGIN_PREFERENCES
#define DEBUG
// END_PREFERENCES
// BEGIN_INCLUDE
#include "code\names.dm"
#include "code\setup.dm"
@@ -1063,6 +1105,7 @@
#include "code\WorkInProgress\Cael_Aislinn\Tajara\examine.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajara_transformation.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
#include "code\WorkInProgress\Chinsky\ashtray.dm"
#include "code\WorkInProgress\mapload\dmm_suite.dm"
#include "code\WorkInProgress\mapload\reader.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm"
@@ -1101,4 +1144,3 @@
#include "interface\skin.dmf"
#include "maps\tgstation.2.0.8.dmm"
// END_INCLUDE

View File

@@ -0,0 +1,136 @@
/obj/item/ashtray
name = "ashtray"
desc = "Cheap plastic ashtray."
icon = 'ashtray.dmi'
icon_state = "ashtray_bl"
health = 15.0
g_amt = 20
var/max_butts = 10
var/empty_desc = "Cheap plastic ashtray."
var/icon_empty = "ashtray_bl"
var/icon_half = "ashtray_half_bl"
var/icon_full = "ashtray_full_bl"
var/icon_broken = "ashtray_bork_bl"
/obj/item/ashtray/New()
..()
src.pixel_y = rand(-5, 5)
src.pixel_x = rand(-6, 6)
return
/obj/item/ashtray/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (health < 1)
return
if (istype(W,/obj/item/clothing/mask/cigarette))
if(user)
if (contents.len >= max_butts)
user << "This ashtray is full."
return
user.u_equip(W)
W.loc = src
if ((user.client && user.s_active != src))
user.client.screen -= W
var/obj/item/clothing/mask/cigarette/cig = W
if (cig.lit == 1)
src.visible_message("[user] crushes a [cig] in the [src], putting it out.")
cig.put_out()
else if (cig.lit == 0)
user << "You place a [cig] in [src] without even smoking it. Why would you do that?"
else if (cig.lit == -1)
src.visible_message("[user] places a [cig] in the [src],.")
user.update_clothing()
add_fingerprint(user)
if (contents.len == max_butts)
icon_state = icon_full
desc = empty_desc + " It's stuffed full."
else if (contents.len > max_butts/2)
icon_state = icon_half
desc = empty_desc + " It's half-filled."
else
health = max(0,health - W.force)
user << "You hit [src] with [W]."
if (health < 1)
die()
return
/obj/item/ashtray/throw_impact(atom/hit_atom)
if (health > 0)
health = max(0,health - 3)
if (health < 1)
die()
return
if (contents.len)
src.visible_message("\red [src] slams into [hit_atom] spilling its contents!")
for (var/obj/item/clothing/mask/cigarette/O in contents)
contents -= O
O.loc = src.loc
icon_state = icon_empty
return ..()
/obj/item/ashtray/proc/die()
src.visible_message("\red [src] shatters spilling its contents!")
for (var/obj/item/clothing/mask/cigarette/O in contents)
contents -= O
O.loc = src.loc
icon_state = icon_broken
/obj/item/ashtray/plastic
name = "plastic ashtray"
desc = "Cheap plastic ashtray."
icon_state = "ashtray_bl"
icon_empty = "ashtray_bl"
icon_half = "ashtray_half_bl"
icon_full = "ashtray_full_bl"
icon_broken = "ashtray_bork_bl"
max_butts = 14
health = 24.0
g_amt = 30
empty_desc = "Cheap plastic ashtray."
throwforce = 3.0
die()
..()
name = "pieces of plastic"
desc = "Pieces of plastic with ash on them."
return
/obj/item/ashtray/bronze
name = "bronze ashtray"
desc = "Massive bronze ashtray."
icon_state = "ashtray_br"
icon_empty = "ashtray_br"
icon_half = "ashtray_half_br"
icon_full = "ashtray_full_br"
icon_broken = "ashtray_bork_br"
max_butts = 10
health = 72.0
m_amt = 50
empty_desc = "Massive bronze ashtray."
throwforce = 10.0
die()
..()
name = "pieces of bronze"
desc = "Pieces of bronze with ash on them."
return
/obj/item/ashtray/glass
name = "glass ashtray"
desc = "Glass ashtray. Looks fragile."
icon_state = "ashtray_gl"
icon_empty = "ashtray_gl"
icon_half = "ashtray_half_gl"
icon_full = "ashtray_full_gl"
icon_broken = "ashtray_bork_gl"
max_butts = 12
health = 12.0
g_amt = 60
empty_desc = "Glass ashtray. Looks fragile."
throwforce = 6.0
die()
..()
name = "shards of glass"
desc = "Shards of glass with ash on them."
return

View File

@@ -307,6 +307,7 @@ var/global/list/autolathe_recipes = list( \
new /obj/item/device/assembly/timer(), \
new /obj/item/weapon/light/tube(), \
new /obj/item/weapon/light/bulb(), \
new /obj/item/ashtray/glass()
)
var/global/list/autolathe_recipes_hidden = list( \

View File

@@ -120,6 +120,7 @@ ZIPPO
var/butt_count = 5 //count of butt sprite variations
proc
light(var/flavor_text = "[usr] lights the [name].")
put_out()
attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
@@ -144,20 +145,26 @@ ZIPPO
O.show_message(flavor_text, 1)
processing_objects.Add(src)
put_out()
src.lit = -1
src.damtype = "brute"
src.icon_state = icon_butt + "[rand(0,butt_count)]"
src.item_state = icon_off
src.desc = "A [src.name] butt."
src.name = "[src.name] butt"
process()
var/turf/location = get_turf(src)
src.smoketime--
if(src.smoketime < 1)
src.lit = -1
src.damtype = "brute"
src.icon_state = icon_butt + "[rand(0,butt_count)]"
src.item_state = icon_off
src.desc = "A [src.name] butt."
src.name = "[src.name] butt"
if(ismob(src.loc))
var/mob/living/M = src.loc
M << "\red Your [src.name] goes out."
put_out()
M.update_clothing()
else
put_out()
processing_objects.Remove(src)
return
if(location)
@@ -167,14 +174,8 @@ ZIPPO
dropped(mob/user as mob)
if(src.lit == 1)
for(var/mob/O in viewers(user, null))
O.show_message(text("\red [] calmly drops and treads on the lit [], putting it out instantly.", user,src.name), 1)
src.lit = -1
src.damtype = "brute"
src.icon_state = icon_butt + "[rand(0,butt_count)]"
src.item_state = icon_off
src.desc = "A [src.name] butt."
src.name = "[src.name] butt"
src.visible_message("\red [user] calmly drops and treads on the lit [src], putting it out instantly.")
put_out()
return ..()

View File

@@ -61,6 +61,15 @@
update()
return
if(istype(I, /obj/item/ashtray))
user << "\blue You empty the ashtray."
for(var/obj/item/O in I.contents)
O.loc = src
I.contents -= O
I.icon_state = I:icon_empty
update()
return
if(istype(I, /obj/item/weapon/weldingtool) && I:welding)
var/obj/item/weapon/weldingtool/W = I
playsound(src.loc, 'Welder.ogg', 100, 1)

BIN
icons/ashtray.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB