Ports table item autoalign from Bay (#6946)

Made it so items get their pixel x/y reset on pickup.
    Thrown items now also get their pixel placement slightly randomized.
    Tweaked the center of mass on a boatload of items to be more accurate to their sprite art.
    Replaced a bunch of randomized pixel placement code into a unifying proc; randpixel_xy() that uses an item's randpixel var.
This commit is contained in:
fernerr
2019-09-08 21:51:49 +02:00
committed by Erki
parent de748e0607
commit 2a2cc7d52e
57 changed files with 286 additions and 159 deletions

View File

@@ -109,7 +109,7 @@
setMoveCooldown(10) //getting something out of a backpack setMoveCooldown(10) //getting something out of a backpack
if(W) if(W)
var/resolved = W.resolve_attackby(A, src) var/resolved = W.resolve_attackby(A, src, params)
if(!resolved && A && W) if(!resolved && A && W)
W.afterattack(A, src, 1, params) // 1 indicates adjacency W.afterattack(A, src, 1, params) // 1 indicates adjacency
else else
@@ -129,7 +129,7 @@
if(W) if(W)
// Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
var/resolved = W.resolve_attackby(A,src) var/resolved = W.resolve_attackby(A,src, params)
if(!resolved && A && W) if(!resolved && A && W)
W.afterattack(A, src, 1, params) // 1: clicking something Adjacent W.afterattack(A, src, 1, params) // 1: clicking something Adjacent
else else

View File

@@ -28,13 +28,13 @@ avoid code duplication. This includes items that may sometimes act as a standard
return return
//I would prefer to rename this to attack(), but that would involve touching hundreds of files. //I would prefer to rename this to attack(), but that would involve touching hundreds of files.
/obj/item/proc/resolve_attackby(atom/A, mob/user) /obj/item/proc/resolve_attackby(atom/A, mob/user, var/click_parameters)
pre_attack(A, user) pre_attack(A, user)
add_fingerprint(user) add_fingerprint(user)
return A.attackby(src, user) return A.attackby(src, user, click_parameters)
// No comment // No comment
/atom/proc/attackby(obj/item/W, mob/user) /atom/proc/attackby(obj/item/W, mob/user, var/click_parameters)
return return
/atom/movable/attackby(obj/item/W, mob/user) /atom/movable/attackby(obj/item/W, mob/user)

View File

@@ -41,6 +41,7 @@
return 1 return 1
/obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob) /obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob)
..()
if(!iscultist(user)) if(!iscultist(user))
to_chat(user, "<span class='warning'>An overwhelming feeling of dread comes over you as you pick up \the [src]. It would be wise to be rid of this blade quickly.</span>") to_chat(user, "<span class='warning'>An overwhelming feeling of dread comes over you as you pick up \the [src]. It would be wise to be rid of this blade quickly.</span>")
user.make_dizzy(120) user.make_dizzy(120)

View File

@@ -148,6 +148,7 @@
shortname = "shelf" shortname = "shelf"
desc = "Put ingredients in this; designed for use with an oven. Warranty void if used." desc = "Put ingredients in this; designed for use with an oven. Warranty void if used."
icon_state = "ovendish" icon_state = "ovendish"
center_of_mass = list("x" = 16,"y" = 12)
max_space = 30 max_space = 30
max_reagents = 120 max_reagents = 120

View File

@@ -62,6 +62,7 @@ Buildable meters
icon = 'icons/obj/pipe-item.dmi' icon = 'icons/obj/pipe-item.dmi'
icon_state = "simple" icon_state = "simple"
item_state = "buildpipe" item_state = "buildpipe"
randpixel = 5
w_class = 3 w_class = 3
level = 2 level = 2
@@ -200,8 +201,7 @@ Buildable meters
connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER
//src.pipe_dir = get_pipe_dir() //src.pipe_dir = get_pipe_dir()
update() update()
src.pixel_x = rand(-5, 5) randpixel_xy()
src.pixel_y = rand(-5, 5)
//update the name and icon of the pipe item depending on the type //update the name and icon of the pipe item depending on the type

View File

@@ -4,6 +4,7 @@
w_class = 3.0 w_class = 3.0
var/image/blood_overlay //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite var/image/blood_overlay //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
var/randpixel = 6
var/abstract = 0 var/abstract = 0
var/r_speed = 1.0 var/r_speed = 1.0
var/health var/health
@@ -171,7 +172,7 @@
return return
if(!src.Adjacent(user) && !(TK in user.mutations)) if(!src.Adjacent(user) && !(TK in user.mutations))
to_chat(user, span("notice", "\The [src] slips out of your grasp before you can grab it!")) // because things called before this can move it to_chat(user, span("notice", "\The [src] slips out of your grasp before you can grab it!")) // because things called before this can move it
return // please don't pick things up return // please don't pick things up
src.pickup(user) src.pickup(user)
if (istype(src.loc, /obj/item/weapon/storage)) if (istype(src.loc, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = src.loc var/obj/item/weapon/storage/S = src.loc
@@ -266,6 +267,8 @@
// called just as an item is picked up (loc is not yet changed) // called just as an item is picked up (loc is not yet changed)
/obj/item/proc/pickup(mob/user) /obj/item/proc/pickup(mob/user)
pixel_x = 0
pixel_y = 0
return return
// called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called. // called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
@@ -780,4 +783,13 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
return TRUE // Already adjacent. return TRUE // Already adjacent.
if(AStar(get_turf(us), get_turf(them), /turf/proc/AdjacentTurfsRanged, /turf/proc/Distance, max_nodes=25, max_node_depth=range)) if(AStar(get_turf(us), get_turf(them), /turf/proc/AdjacentTurfsRanged, /turf/proc/Distance, max_nodes=25, max_node_depth=range))
return TRUE return TRUE
return FALSE return FALSE
//Used for selecting a random pixel placement, usually on initialize. Checks for pixel_x/y to not interfere with mapped in items.
/obj/item/proc/randpixel_xy()
if(!pixel_x && !pixel_y)
pixel_x = rand(-randpixel, randpixel)
pixel_y = rand(-randpixel, randpixel)
return TRUE
else
return FALSE

View File

@@ -3,6 +3,7 @@
desc = "A desk lamp with an adjustable mount." desc = "A desk lamp with an adjustable mount."
icon_state = "lamp" icon_state = "lamp"
item_state = "lamp" item_state = "lamp"
center_of_mass = list("x" = 13,"y" = 11)
brightness_on = 5 brightness_on = 5
w_class = 5 w_class = 5
flags = CONDUCT flags = CONDUCT
@@ -17,6 +18,7 @@
desc = "A classic green-shaded desk lamp." desc = "A classic green-shaded desk lamp."
icon_state = "lampgreen" icon_state = "lampgreen"
item_state = "lampgreen" item_state = "lampgreen"
center_of_mass = list("x" = 15,"y" = 11)
brightness_on = 5 brightness_on = 5
light_color = "#FFC58F" light_color = "#FFC58F"

View File

@@ -62,14 +62,14 @@
destroyed_event.unregister(buffer_object, src) destroyed_event.unregister(buffer_object, src)
buffer_object = null buffer_object = null
/obj/item/device/multitool/resolve_attackby(atom/A, mob/user) /obj/item/device/multitool/resolve_attackby(atom/A, mob/user, var/click_parameters)
if(!isobj(A)) if(!isobj(A))
return ..(A, user) return ..(A, user, click_parameters)
var/obj/O = A var/obj/O = A
var/datum/expansion/multitool/MT = LAZYACCESS(O.expansions, /datum/expansion/multitool) var/datum/expansion/multitool/MT = LAZYACCESS(O.expansions, /datum/expansion/multitool)
if(!MT) if(!MT)
return ..(A, user) return ..(A, user, click_parameters)
user.AddTopicPrint(src) user.AddTopicPrint(src)
MT.interact(src, user) MT.interact(src, user)

View File

@@ -13,12 +13,12 @@
w_class = 3 w_class = 3
max_amount = 60 max_amount = 60
icon = 'icons/obj/stacks/tiles.dmi' icon = 'icons/obj/stacks/tiles.dmi'
randpixel = 7
drop_sound = 'sound/items/drop/axe.ogg' drop_sound = 'sound/items/drop/axe.ogg'
/obj/item/stack/tile/New() /obj/item/stack/tile/New()
..() ..()
pixel_x = rand(-7, 7) randpixel_xy()
pixel_y = rand(-7, 7)
/* /*
* Grass * Grass

View File

@@ -72,10 +72,10 @@
var/uses = 10 var/uses = 10
var/const/NO_EMAG_ACT = -50 var/const/NO_EMAG_ACT = -50
/obj/item/weapon/card/emag/resolve_attackby(atom/A, mob/user) /obj/item/weapon/card/emag/resolve_attackby(atom/A, mob/user, var/click_parameters)
var/used_uses = A.emag_act(uses, user, src) var/used_uses = A.emag_act(uses, user, src)
if(used_uses == NO_EMAG_ACT) if(used_uses == NO_EMAG_ACT)
return ..(A, user) return ..(A, user, click_parameters)
uses -= used_uses uses -= used_uses
A.add_fingerprint(user) A.add_fingerprint(user)

View File

@@ -379,14 +379,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM
desc = "A manky old cigarette butt." desc = "A manky old cigarette butt."
icon = 'icons/obj/clothing/masks.dmi' icon = 'icons/obj/clothing/masks.dmi'
icon_state = "cigbutt" icon_state = "cigbutt"
randpixel = 10
w_class = 1 w_class = 1
slot_flags = SLOT_EARS slot_flags = SLOT_EARS
throwforce = 1 throwforce = 1
/obj/item/weapon/cigbutt/Initialize() /obj/item/weapon/cigbutt/Initialize()
. = ..() . = ..()
pixel_x = rand(-10,10) randpixel_xy()
pixel_y = rand(-10,10)
transform = turn(transform,rand(0,360)) transform = turn(transform,rand(0,360))
/obj/item/weapon/cigbutt/cigarbutt /obj/item/weapon/cigbutt/cigarbutt

View File

@@ -2,6 +2,7 @@
name = "ashtray" name = "ashtray"
icon = 'icons/obj/ashtray.dmi' icon = 'icons/obj/ashtray.dmi'
icon_state = "blank" icon_state = "blank"
randpixel = 5
force_divisor = 0.1 force_divisor = 0.1
thrown_force_divisor = 0.1 thrown_force_divisor = 0.1
var/image/base_image var/image/base_image
@@ -13,8 +14,7 @@
qdel(src) qdel(src)
return return
max_butts = round(material.hardness/10) //This is arbitrary but whatever. max_butts = round(material.hardness/10) //This is arbitrary but whatever.
src.pixel_y = rand(-5, 5) randpixel_xy()
src.pixel_x = rand(-6, 6)
update_icon() update_icon()
return return

View File

@@ -5,6 +5,7 @@
icon = 'icons/obj/shards.dmi' icon = 'icons/obj/shards.dmi'
desc = "Made of nothing. How does this even exist?" // set based on material, if this desc is visible it's a bug (shards default to being made of glass) desc = "Made of nothing. How does this even exist?" // set based on material, if this desc is visible it's a bug (shards default to being made of glass)
icon_state = "large" icon_state = "large"
randpixel = 8
sharp = 1 sharp = 1
edge = 1 edge = 1
w_class = 2 w_class = 2
@@ -22,8 +23,7 @@
return return
icon_state = "[material.shard_icon][pick("large", "medium", "small")]" icon_state = "[material.shard_icon][pick("large", "medium", "small")]"
pixel_x = rand(-8, 8) randpixel_xy()
pixel_y = rand(-8, 8)
update_icon() update_icon()
if(material.shard_type) if(material.shard_type)

View File

@@ -85,6 +85,7 @@
item_state = icon_state item_state = icon_state
/obj/item/weapon/material/twohanded/pickup(mob/user) /obj/item/weapon/material/twohanded/pickup(mob/user)
..()
unwield() unwield()
/obj/item/weapon/material/twohanded/attack_self(mob/user as mob) /obj/item/weapon/material/twohanded/attack_self(mob/user as mob)

View File

@@ -26,6 +26,7 @@
desc = "It's just an ordinary box." desc = "It's just an ordinary box."
icon_state = "box" icon_state = "box"
item_state = "syringe_kit" item_state = "syringe_kit"
center_of_mass = list("x" = 13,"y" = 10)
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
var/maxHealth = 20 //health is already defined var/maxHealth = 20 //health is already defined
use_sound = 'sound/items/storage/box.ogg' use_sound = 'sound/items/storage/box.ogg'

View File

@@ -44,6 +44,7 @@
/obj/item/weapon/storage/fancy/egg_box /obj/item/weapon/storage/fancy/egg_box
icon = 'icons/obj/food.dmi' icon = 'icons/obj/food.dmi'
icon_state = "eggbox" icon_state = "eggbox"
center_of_mass = list("x" = 16,"y" = 7)
icon_type = "egg" icon_type = "egg"
name = "egg box" name = "egg box"
storage_slots = 12 storage_slots = 12

View File

@@ -11,6 +11,7 @@
name = "first-aid kit" name = "first-aid kit"
desc = "It's an emergency medical kit for those serious boo-boos." desc = "It's an emergency medical kit for those serious boo-boos."
icon_state = "firstaid" icon_state = "firstaid"
center_of_mass = list("x" = 13,"y" = 10)
throw_speed = 2 throw_speed = 2
throw_range = 8 throw_range = 8
var/empty = 0 var/empty = 0
@@ -141,6 +142,7 @@
icon_state = "pill_canister" icon_state = "pill_canister"
icon = 'icons/obj/chemical.dmi' icon = 'icons/obj/chemical.dmi'
item_state = "contsolid" item_state = "contsolid"
center_of_mass = list("x" = 16,"y" = 12)
w_class = 2.0 w_class = 2.0
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper) can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper)
allow_quick_gather = 1 allow_quick_gather = 1

View File

@@ -29,6 +29,7 @@
/obj/item/weapon/storage/box/donut /obj/item/weapon/storage/box/donut
icon = 'icons/obj/food.dmi' icon = 'icons/obj/food.dmi'
icon_state = "donutbox" icon_state = "donutbox"
center_of_mass = list("x" = 16,"y" = 9)
name = "donut box" name = "donut box"
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
foldable = /obj/item/stack/material/cardboard foldable = /obj/item/stack/material/cardboard

View File

@@ -4,6 +4,7 @@
icon = 'icons/obj/storage.dmi' icon = 'icons/obj/storage.dmi'
icon_state = "red" icon_state = "red"
item_state = "toolbox_red" item_state = "toolbox_red"
center_of_mass = list("x" = 16,"y" = 11)
flags = CONDUCT flags = CONDUCT
force = 5 force = 5
throwforce = 10 throwforce = 10

View File

@@ -41,6 +41,7 @@
desc = "A tool with a flattened or cross-shaped tip that fits into the head of a screw to turn it." desc = "A tool with a flattened or cross-shaped tip that fits into the head of a screw to turn it."
icon = 'icons/obj/tools.dmi' icon = 'icons/obj/tools.dmi'
icon_state = "screwdriver" icon_state = "screwdriver"
center_of_mass = list("x" = 13,"y" = 7)
flags = CONDUCT flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_EARS slot_flags = SLOT_BELT | SLOT_EARS
force = 5.0 force = 5.0
@@ -106,6 +107,7 @@
desc = "A tool used to cut wires in electrical work." desc = "A tool used to cut wires in electrical work."
icon = 'icons/obj/tools.dmi' icon = 'icons/obj/tools.dmi'
icon_state = "cutters" icon_state = "cutters"
center_of_mass = list("x" = 18,"y" = 10)
flags = CONDUCT flags = CONDUCT
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
force = 6.0 force = 6.0

View File

@@ -6,6 +6,8 @@
icon = 'icons/obj/items.dmi' icon = 'icons/obj/items.dmi'
var/icon_base = "beartrap" var/icon_base = "beartrap"
icon_state = "beartrap0" icon_state = "beartrap0"
randpixel = 0
center_of_mass = null
desc = "A mechanically activated leg trap. Low-tech, but reliable. Looks like it could really hurt if you set it off." desc = "A mechanically activated leg trap. Low-tech, but reliable. Looks like it could really hurt if you set it off."
throwforce = 0 throwforce = 0
w_class = 3 w_class = 3
@@ -267,7 +269,7 @@
if(!ishuman(usr)) if(!ishuman(usr))
to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>") to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>")
return return
var/datum/M = captured ? captured.resolve() : null var/datum/M = captured ? captured.resolve() : null
if(deployed) if(deployed)
@@ -349,7 +351,7 @@
else if (istype(L, /obj/effect/spider/spiderling)) else if (istype(L, /obj/effect/spider/spiderling))
var/obj/effect/spider/spiderling/S = L var/obj/effect/spider/spiderling/S = L
msg = "<span class='warning'>[S] jumps out of \the [src].</span>" msg = "<span class='warning'>[S] jumps out of \the [src].</span>"
unbuckle_mob() unbuckle_mob()
captured = null captured = null
visible_message(msg) visible_message(msg)

View File

@@ -213,6 +213,7 @@
desc = "A collapsed roller bed that can be carried around." desc = "A collapsed roller bed that can be carried around."
icon = 'icons/obj/rollerbed.dmi' icon = 'icons/obj/rollerbed.dmi'
icon_state = "folded" icon_state = "folded"
center_of_mass = list("x" = 17,"y" = 7)
w_class = 4.0 // Can't be put in backpacks. Oh well. w_class = 4.0 // Can't be put in backpacks. Oh well.
/obj/item/roller/attack_self(mob/user) /obj/item/roller/attack_self(mob/user)

View File

@@ -5,6 +5,8 @@
desc = "Apply butt." desc = "Apply butt."
icon = 'icons/obj/furniture.dmi' icon = 'icons/obj/furniture.dmi'
icon_state = "stool_preview" //set for the map icon_state = "stool_preview" //set for the map
randpixel = 0
center_of_mass = null
force = 10 force = 10
throwforce = 10 throwforce = 10
w_class = 5 w_class = 5

View File

@@ -11,6 +11,7 @@
var/datum/battle_monsters/trap/trap_datum var/datum/battle_monsters/trap/trap_datum
w_class = ITEMSIZE_TINY w_class = ITEMSIZE_TINY
drop_sound = null
//Card information here //Card information here
@@ -23,6 +24,14 @@
var/obj/item/battle_monsters/card/adding_card = attacking var/obj/item/battle_monsters/card/adding_card = attacking
make_deck(user,adding_card) make_deck(user,adding_card)
/obj/item/battle_monsters/card/resolve_attackby(atom/A, mob/user, var/click_parameters)
if(istype(A,/obj/structure/table) || istype(A,/obj/structure/dueling_table))
user.visible_message(\
span("notice","\The [user] plays \the [src]!"),\
span("notice","You play \the [src]!")\
)
..(A, user, click_parameters)
/obj/item/battle_monsters/card/attack_self(mob/user as mob) /obj/item/battle_monsters/card/attack_self(mob/user as mob)
flip_card(user) flip_card(user)

View File

@@ -1,7 +1,6 @@
/obj/item/battle_monsters/ /obj/item/battle_monsters/
icon = 'icons/obj/battle_monsters/card.dmi' icon = 'icons/obj/battle_monsters/card.dmi'
icon_state = "" icon_state = ""
var/list/center_of_mass = list("x"=16, "y"=16)
var/facedown = TRUE var/facedown = TRUE
var/rotated = FALSE var/rotated = FALSE
@@ -66,43 +65,3 @@
) )
update_icon() update_icon()
#define CELLS_X 6
#define CELLSIZE_X (32/CELLS_X)
#define CELLS_Y 6
#define CELLSIZE_Y (32/CELLS_Y)
/obj/item/battle_monsters/afterattack(atom/A, mob/user, proximity, params) //Copy and pasted from foodcode.
if(proximity && params && (istype(A, /obj/structure/table) || (istype(A,/obj/structure/dueling_table) && A.density)) && center_of_mass.len)
user.visible_message(\
span("notice","\The [user] plays \the [src]."),\
span("notice","You play \the [src].")\
)
//Places the item on a grid
var/list/mouse_control = mouse_safe_xy(params)
var/mouse_x = mouse_control["icon-x"]
var/mouse_y = mouse_control["icon-y"]
if(!isnum(mouse_x) || !isnum(mouse_y))
return
var/cell_x = max(0, min(CELLS_X-1, round(mouse_x/CELLSIZE_X)))
var/cell_y = max(0, min(CELLS_Y-1, round(mouse_y/CELLSIZE_Y)))
pixel_x = (CELLSIZE_X * (0.5 + cell_x)) - center_of_mass["x"]
pixel_y = (CELLSIZE_Y * (0.5 + cell_y)) - center_of_mass["y"]
layer = A.layer + 0.1
. = ..()
#undef CELLS_X
#undef CELLSIZE_X
#undef CELLS_Y
#undef CELLSIZE_Y

View File

@@ -20,6 +20,30 @@
density = 0 density = 0
mouse_opacity = 0 mouse_opacity = 0
/obj/structure/dueling_table/attackby(obj/item/W as obj, mob/user as mob) #define CELLS 8
user.drop_item(src.loc) #define CELLSIZE (world.icon_size/CELLS)
return
/obj/structure/dueling_table/attackby(obj/item/W as obj, mob/user as mob, var/click_parameters)
if(user.unEquip(W, 0, src.loc))
if(!W.center_of_mass)
W.randpixel_xy()
return
if(!click_parameters)
return
var/list/mouse_control = mouse_safe_xy(click_parameters)
var/mouse_x = mouse_control["icon-x"]
var/mouse_y = mouse_control["icon-y"]
if(isnum(mouse_x) && isnum(mouse_y))
var/cell_x = max(0, min(CELLS-1, round(mouse_x/CELLSIZE)))
var/cell_y = max(0, min(CELLS-1, round(mouse_y/CELLSIZE)))
W.pixel_x = (CELLSIZE * (0.5 + cell_x)) - W.center_of_mass["x"]
W.pixel_y = (CELLSIZE * (0.5 + cell_y)) - W.center_of_mass["y"]
W.layer = src.layer + 0.1
#undef CELLS
#undef CELLSIZE

View File

@@ -2,6 +2,7 @@
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear." desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear."
name = "magboots" name = "magboots"
icon_state = "magboots0" icon_state = "magboots0"
center_of_mass = list("x" = 17,"y" = 12)
species_restricted = null species_restricted = null
force = 5 force = 5
overshoes = 1 overshoes = 1

View File

@@ -64,6 +64,8 @@
desc = "A suit that protects against low pressure environments. \"NSS AURORA\" is written in large block letters on the back." desc = "A suit that protects against low pressure environments. \"NSS AURORA\" is written in large block letters on the back."
icon_state = "space" icon_state = "space"
item_state = "s_suit" item_state = "s_suit"
randpixel = 0
center_of_mass = null
w_class = 4//bulky item w_class = 4//bulky item
gas_transfer_coefficient = 0.01 gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02 permeability_coefficient = 0.02

View File

@@ -18,6 +18,8 @@
desc = "A suit that protects against biological contamination." desc = "A suit that protects against biological contamination."
icon_state = "bio" icon_state = "bio"
item_state = "bio_suit" item_state = "bio_suit"
randpixel = 0
center_of_mass = null
w_class = 4//bulky item w_class = 4//bulky item
gas_transfer_coefficient = 0.01 gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01 permeability_coefficient = 0.01

View File

@@ -305,4 +305,5 @@
update_icon() update_icon()
/obj/item/weapon/hand/pickup(mob/user as mob) /obj/item/weapon/hand/pickup(mob/user as mob)
..()
src.update_icon() src.update_icon()

View File

@@ -24,7 +24,7 @@
/obj/item/weapon/bee_net/resolve_attackby(atom/A, mob/user) /obj/item/weapon/bee_net/resolve_attackby(atom/A, mob/user, var/click_parameters)
if (istype(A, /turf)) if (istype(A, /turf))
var/turf/T = A var/turf/T = A
for(var/mob/living/simple_animal/bee/B in T) for(var/mob/living/simple_animal/bee/B in T)
@@ -36,7 +36,7 @@
else if (istype(A, /obj/machinery/beehive) && caught_bees) else if (istype(A, /obj/machinery/beehive) && caught_bees)
deposit_bees(A, user) deposit_bees(A, user)
return 1 return 1
..() ..(A, user, click_parameters)
/obj/item/weapon/bee_net/proc/capture_bees(var/mob/living/simple_animal/bee/target, var/mob/living/user) /obj/item/weapon/bee_net/proc/capture_bees(var/mob/living/simple_animal/bee/target, var/mob/living/user)

View File

@@ -22,7 +22,7 @@
//Bee smoker intentionally spawns empty. Fill it at a weldertank before use //Bee smoker intentionally spawns empty. Fill it at a weldertank before use
//I would prefer to rename this to attack(), but that would involve touching hundreds of files. //I would prefer to rename this to attack(), but that would involve touching hundreds of files.
/obj/item/weapon/bee_smoker/resolve_attackby(atom/A, mob/user) /obj/item/weapon/bee_smoker/resolve_attackby(atom/A, mob/user, var/click_parameters)
if (istype(A, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,A) <= 1) if (istype(A, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,A) <= 1)
A.reagents.trans_to_obj(src, max_fuel) A.reagents.trans_to_obj(src, max_fuel)
to_chat(user, "<span class='notice'>Smoker refilled!</span>") to_chat(user, "<span class='notice'>Smoker refilled!</span>")
@@ -41,7 +41,7 @@
return 1 return 1
else else
smoke_at(A) smoke_at(A)
..() ..(A, user, click_parameters)
return 1 return 1

View File

@@ -6,6 +6,7 @@
throw_speed = 3 throw_speed = 3
throw_range = 3 throw_range = 3
max_amount = 50 max_amount = 50
center_of_mass = null
var/default_type = DEFAULT_WALL_MATERIAL var/default_type = DEFAULT_WALL_MATERIAL
var/material/material var/material/material
@@ -15,8 +16,7 @@
/obj/item/stack/material/Initialize() /obj/item/stack/material/Initialize()
. = ..() . = ..()
pixel_x = rand(0,4)-4 randpixel_xy()
pixel_y = rand(0,4)-4
if(!default_type) if(!default_type)
default_type = DEFAULT_WALL_MATERIAL default_type = DEFAULT_WALL_MATERIAL

View File

@@ -4,6 +4,7 @@
icon = 'icons/obj/coins.dmi' icon = 'icons/obj/coins.dmi'
name = "Coin" name = "Coin"
icon_state = "coin" icon_state = "coin"
randpixel = 8
desc = "A flat disc or piece of metal with an official stamp. An archaic type of currency." desc = "A flat disc or piece of metal with an official stamp. An archaic type of currency."
flags = CONDUCT flags = CONDUCT
force = 0.0 force = 0.0
@@ -16,8 +17,7 @@
drop_sound = 'sound/items/drop/ring.ogg' drop_sound = 'sound/items/drop/ring.ogg'
/obj/item/weapon/coin/New() /obj/item/weapon/coin/New()
pixel_x = rand(0,16)-8 randpixel_xy()
pixel_y = rand(0,8)-8
/obj/item/weapon/coin/gold /obj/item/weapon/coin/gold
name = "gold coin" name = "gold coin"

View File

@@ -115,6 +115,7 @@
return unwield() return unwield()
/obj/item/weapon/pickaxe/pickup(mob/user) /obj/item/weapon/pickaxe/pickup(mob/user)
..()
unwield() unwield()
/obj/item/weapon/pickaxe/attack_self(mob/user as mob) /obj/item/weapon/pickaxe/attack_self(mob/user as mob)

View File

@@ -2,6 +2,7 @@
name = "rock" name = "rock"
icon = 'icons/obj/mining.dmi' icon = 'icons/obj/mining.dmi'
icon_state = "ore1" icon_state = "ore1"
randpixel = 8
w_class = 2 w_class = 2
throwforce = 10 throwforce = 10
var/datum/geosample/geologic_data var/datum/geosample/geologic_data
@@ -85,9 +86,7 @@
material = null material = null
/obj/item/weapon/ore/New() /obj/item/weapon/ore/New()
pixel_x = rand(0,16)-8 if((randpixel_xy()) && icon_state == "ore1")
pixel_y = rand(0,8)-8
if(icon_state == "ore1")
icon_state = "ore[pick(1,2,3)]" icon_state = "ore[pick(1,2,3)]"
/obj/item/weapon/ore/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/item/weapon/ore/attackby(obj/item/weapon/W as obj, mob/user as mob)

View File

@@ -5,6 +5,8 @@ var/list/holder_mob_icon_cache = list()
name = "holder" name = "holder"
desc = "You shouldn't ever see this." desc = "You shouldn't ever see this."
icon = 'icons/mob/npc/held_mobs.dmi' icon = 'icons/mob/npc/held_mobs.dmi'
randpixel = 0
center_of_mass = null
slot_flags = 0 slot_flags = 0
sprite_sheets = list("Vox" = 'icons/mob/species/vox/head.dmi') sprite_sheets = list("Vox" = 'icons/mob/species/vox/head.dmi')
origin_tech = null origin_tech = null

View File

@@ -164,7 +164,7 @@ var/list/slot_equipment_priority = list( \
// Removes an item from inventory and places it in the target atom. // Removes an item from inventory and places it in the target atom.
// If canremove or other conditions need to be checked then use unEquip instead. // If canremove or other conditions need to be checked then use unEquip instead.
/mob/proc/drop_from_inventory(var/obj/item/W, var/atom/target = null) /mob/proc/drop_from_inventory(var/obj/item/W, var/atom/target)
if(W) if(W)
if(!target) if(!target)
target = loc target = loc
@@ -252,10 +252,10 @@ var/list/slot_equipment_priority = list( \
return slot return slot
//This differs from remove_from_mob() in that it checks if the item can be unequipped first. //This differs from remove_from_mob() in that it checks if the item can be unequipped first.
/mob/proc/unEquip(obj/item/I, force = 0) //Force overrides NODROP for things like wizarditis and admin undress. /mob/proc/unEquip(obj/item/I, force = 0, var/atom/target) //Force overrides NODROP for things like wizarditis and admin undress.
if(!(force || canUnEquip(I))) if(!(force || canUnEquip(I)))
return return
drop_from_inventory(I) drop_from_inventory(I, target)
return 1 return 1
@@ -375,6 +375,9 @@ var/list/slot_equipment_priority = list( \
step(src, inertia_dir) step(src, inertia_dir)
*/ */
if(istype(item,/obj/item))
var/obj/item/W = item
W.randpixel_xy()
item.throw_at(target, item.throw_range, item.throw_speed, src) item.throw_at(target, item.throw_range, item.throw_speed, src)

View File

@@ -27,6 +27,8 @@
icon = null // This thing isn't meant to be used on it's own. Subtypes should supply their own icon. icon = null // This thing isn't meant to be used on it's own. Subtypes should supply their own icon.
icon_state = null // And no random pixelshifting on-creation either. icon_state = null // And no random pixelshifting on-creation either.
randpixel = 0
center_of_mass = null
var/icon_state_unpowered = null // Icon state when the computer is turned off var/icon_state_unpowered = null // Icon state when the computer is turned off
var/icon_state_menu = "menu" // Icon state overlay when the computer is turned on, but no program is loaded that would override the screen. var/icon_state_menu = "menu" // Icon state overlay when the computer is turned on, but no program is loaded that would override the screen.
var/icon_state_screensaver = null var/icon_state_screensaver = null

View File

@@ -3,6 +3,7 @@
desc = "A bullet casing." desc = "A bullet casing."
icon = 'icons/obj/ammo.dmi' icon = 'icons/obj/ammo.dmi'
icon_state = "s-casing" icon_state = "s-casing"
randpixel = 10
flags = CONDUCT flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_EARS slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 1 throwforce = 1
@@ -20,8 +21,7 @@
. = ..() . = ..()
if(ispath(projectile_type)) if(ispath(projectile_type))
BB = new projectile_type(src) BB = new projectile_type(src)
pixel_x = rand(-10, 10) randpixel_xy()
pixel_y = rand(-10, 10)
//removes the projectile from the ammo casing //removes the projectile from the ammo casing
/obj/item/ammo_casing/proc/expend() /obj/item/ammo_casing/proc/expend()

View File

@@ -658,6 +658,7 @@
return unwield() return unwield()
/obj/item/weapon/gun/pickup(mob/user) /obj/item/weapon/gun/pickup(mob/user)
..()
if(is_wieldable) if(is_wieldable)
unwield() unwield()

View File

@@ -1,13 +1,9 @@
#define CELLS 8
#define CELLSIZE (32/CELLS)
/obj/item/weapon/reagent_containers /obj/item/weapon/reagent_containers
name = "Container" name = "Container"
desc = "..." desc = "..."
icon = 'icons/obj/chemical.dmi' icon = 'icons/obj/chemical.dmi'
icon_state = null icon_state = null
w_class = 2 w_class = 2
var/list/center_of_mass = list("x" = 16,"y" = 16)
var/amount_per_transfer_from_this = 5 var/amount_per_transfer_from_this = 5
var/possible_transfer_amounts = list(5,10,15,25,30) var/possible_transfer_amounts = list(5,10,15,25,30)
var/volume = 30 var/volume = 30
@@ -65,21 +61,6 @@
return return
/obj/item/weapon/reagent_containers/afterattack(var/atom/target, var/mob/user, var/proximity, var/params) /obj/item/weapon/reagent_containers/afterattack(var/atom/target, var/mob/user, var/proximity, var/params)
if(proximity && params && istype(target, /obj/structure/table) && center_of_mass && center_of_mass.len)
//Places the item on a grid
var/list/mouse_control = mouse_safe_xy(params)
var/mouse_x = mouse_control["icon-x"]
var/mouse_y = mouse_control["icon-y"]
if(isnum(mouse_x) && isnum(mouse_y))
var/cell_x = max(0, min(CELLS-1, round(mouse_x/CELLSIZE)))
var/cell_y = max(0, min(CELLS-1, round(mouse_y/CELLSIZE)))
pixel_x = (CELLSIZE * (0.5 + cell_x)) - center_of_mass["x"]
pixel_y = (CELLSIZE * (0.5 + cell_y)) - center_of_mass["y"]
if(!proximity || !is_open_container()) if(!proximity || !is_open_container())
return return
if(is_type_in_list(target,can_be_placed_into)) if(is_type_in_list(target,can_be_placed_into))
@@ -262,6 +243,3 @@
playsound(src, 'sound/effects/pour.ogg', 25, 1) playsound(src, 'sound/effects/pour.ogg', 25, 1)
to_chat(user, "<span class='notice'>You transfer [trans] units of the solution to [target].</span>") to_chat(user, "<span class='notice'>You transfer [trans] units of the solution to [target].</span>")
return 1 return 1
#undef CELLS
#undef CELLSIZE

View File

@@ -11,7 +11,6 @@
w_class = 1 w_class = 1
slot_flags = SLOT_EARS slot_flags = SLOT_EARS
volume = 5 volume = 5
center_of_mass = null
drop_sound = 'sound/items/drop/glass.ogg' drop_sound = 'sound/items/drop/glass.ogg'
afterattack(var/obj/target, var/mob/user, var/flag) afterattack(var/obj/target, var/mob/user, var/flag)

View File

@@ -20,7 +20,7 @@
name = "bottled water" name = "bottled water"
desc = "Introduced to the vending machines by Skrellian request, this water comes straight from the Martian poles." desc = "Introduced to the vending machines by Skrellian request, this water comes straight from the Martian poles."
icon_state = "waterbottle" icon_state = "waterbottle"
center_of_mass = list("x"=15, "y"=8) center_of_mass = list("x"=16, "y"=8)
drop_sound = 'sound/items/drop/food.ogg' drop_sound = 'sound/items/drop/food.ogg'
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/Initialize()
@@ -41,7 +41,7 @@
name = "thirteen loko" name = "thirteen loko"
desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly." desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly."
icon_state = "thirteen_loko" icon_state = "thirteen_loko"
center_of_mass = list("x"=16, "y"=8) center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko/Initialize()
. = ..() . = ..()
@@ -131,7 +131,7 @@
name = "\improper Phoron Punch!" name = "\improper Phoron Punch!"
desc = "A radical looking can of <span class='warning'>Phoron Punch!</span> Phoron poisoning has never been more extreme!" desc = "A radical looking can of <span class='warning'>Phoron Punch!</span> Phoron poisoning has never been more extreme!"
icon_state = "phoron_punch" icon_state = "phoron_punch"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/koispunch/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/koispunch/Initialize()
. = ..() . = ..()
@@ -154,7 +154,7 @@
name = "\improper Zo'ra Soda Cherry" name = "\improper Zo'ra Soda Cherry"
desc = "A can of cherry energy drink, with V'krexi additives. All good colas come in cherry." desc = "A can of cherry energy drink, with V'krexi additives. All good colas come in cherry."
icon_state = "zoracherry" icon_state = "zoracherry"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zorasoda/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zorasoda/Initialize()
. = ..() . = ..()
@@ -165,7 +165,7 @@
name = "\improper Zo'ra Soda Kois Twist" name = "\improper Zo'ra Soda Kois Twist"
desc = "A can of K'ois flavored energy drink, with V'krexi additives. Contains no K'ois, probably contains no palatable flavor." desc = "A can of K'ois flavored energy drink, with V'krexi additives. Contains no K'ois, probably contains no palatable flavor."
icon_state = "koistwist" icon_state = "koistwist"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zorakois/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zorakois/Initialize()
. = ..() . = ..()
@@ -176,7 +176,7 @@
name = "\improper Zo'ra Soda Phoron Passion" name = "\improper Zo'ra Soda Phoron Passion"
desc = "A can of grape flavored energy drink, with V'krexi additives. Tastes nothing like phoron according to Unbound taste testers." desc = "A can of grape flavored energy drink, with V'krexi additives. Tastes nothing like phoron according to Unbound taste testers."
icon_state = "phoronpassion" icon_state = "phoronpassion"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zoraphoron/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zoraphoron/Initialize()
. = ..() . = ..()
@@ -187,7 +187,7 @@
name = "\improper High Octane Zorane Might" name = "\improper High Octane Zorane Might"
desc = "A can of fizzy, acidic energy, with plenty V'krexi additives. It tastes like the bottom of your mouth is being impaled by a freezing cold spear, a spear laced with bees and salt." desc = "A can of fizzy, acidic energy, with plenty V'krexi additives. It tastes like the bottom of your mouth is being impaled by a freezing cold spear, a spear laced with bees and salt."
icon_state = "hozm" icon_state = "hozm"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zorahozm/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zorahozm/Initialize()
. = ..() . = ..()
@@ -198,7 +198,7 @@
name = "\improper Zo'ra Soda Sour Venom Grass (Diet!)" name = "\improper Zo'ra Soda Sour Venom Grass (Diet!)"
desc = "A diet can of Venom Grass flavored energy drink, with V'krexi additives. It still tastes like a cloud of stinging polytrinic bees, but calories are nowhere to be found." desc = "A diet can of Venom Grass flavored energy drink, with V'krexi additives. It still tastes like a cloud of stinging polytrinic bees, but calories are nowhere to be found."
icon_state = "sourvenomgrass" icon_state = "sourvenomgrass"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zoravenom/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zoravenom/Initialize()
. = ..() . = ..()
@@ -209,7 +209,7 @@
name = "\improper Klaxan Energy Crush" name = "\improper Klaxan Energy Crush"
desc = "A can of orange cream flavored energy drink, with V'krexi additives. Engineered nearly to perfection." desc = "A can of orange cream flavored energy drink, with V'krexi additives. Engineered nearly to perfection."
icon_state = "klaxancrush" icon_state = "klaxancrush"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zoraklax/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zoraklax/Initialize()
. = ..() . = ..()
@@ -220,7 +220,7 @@
name = "\improper C'thur Rockin' Raspberry" name = "\improper C'thur Rockin' Raspberry"
desc = "A can of blue raspberry flavored energy drink, with V'krexi additives. You're pretty sure this was shipped by mistake, the previous K'laxan Energy Crush wrapper is still partly visible underneath the current one." desc = "A can of blue raspberry flavored energy drink, with V'krexi additives. You're pretty sure this was shipped by mistake, the previous K'laxan Energy Crush wrapper is still partly visible underneath the current one."
icon_state = "cthurberry" icon_state = "cthurberry"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zoracthur/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zoracthur/Initialize()
. = ..() . = ..()
@@ -231,7 +231,7 @@
name = "\improper Drone Fuel" name = "\improper Drone Fuel"
desc = "A can of some kind of industrial fluid flavored energy drink, with V'krexi additives meant for Vaurca. <span class='warning'>Known to induce vomiting in humans!</span>." desc = "A can of some kind of industrial fluid flavored energy drink, with V'krexi additives meant for Vaurca. <span class='warning'>Known to induce vomiting in humans!</span>."
icon_state = "dronefuel" icon_state = "dronefuel"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zoradrone/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zoradrone/Initialize()
. = ..() . = ..()
@@ -242,7 +242,7 @@
name = "\improper Royal Jelly" name = "\improper Royal Jelly"
desc = "A can of... You aren't sure, but it smells pleasant already." desc = "A can of... You aren't sure, but it smells pleasant already."
icon_state = "royaljelly" icon_state = "royaljelly"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/zorajelly/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/zorajelly/Initialize()
. = ..() . = ..()
@@ -263,7 +263,7 @@
name = "\improper Hakhma Milk" name = "\improper Hakhma Milk"
desc = "A can of Hakhma beetle milk, sourced from Scarab and Drifter communities." desc = "A can of Hakhma beetle milk, sourced from Scarab and Drifter communities."
icon_state = "beetlemilk" icon_state = "beetlemilk"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=17, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/beetle_milk/Initialize() /obj/item/weapon/reagent_containers/food/drinks/cans/beetle_milk/Initialize()
. = ..() . = ..()

View File

@@ -55,12 +55,12 @@
name = "salt shaker" name = "salt shaker"
desc = "Salt. From space oceans, presumably." desc = "Salt. From space oceans, presumably."
icon_state = "saltshaker" icon_state = "saltshaker"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=17, "y"=11)
if("blackpepper") if("blackpepper")
name = "pepper mill" name = "pepper mill"
desc = "Often used to flavor food or make people sneeze." desc = "Often used to flavor food or make people sneeze."
icon_state = "peppermillsmall" icon_state = "peppermillsmall"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=17, "y"=11)
if("cornoil") if("cornoil")
name = "corn oil" name = "corn oil"
desc = "A delicious oil used in cooking. Made from corn." desc = "A delicious oil used in cooking. Made from corn."
@@ -74,7 +74,7 @@
name = "bottle of space spice" name = "bottle of space spice"
desc = "An exotic blend of spices for cooking. It must flow." desc = "An exotic blend of spices for cooking. It must flow."
icon_state = "spacespicebottle" icon_state = "spacespicebottle"
center_of_mass = list("x"=16, "y"=6) center_of_mass = list("x"=16, "y"=10)
if("barbecue") if("barbecue")
name = "barbecue sauce" name = "barbecue sauce"
desc = "Barbecue sauce, it's labeled 'sweet and spicy'." desc = "Barbecue sauce, it's labeled 'sweet and spicy'."
@@ -99,6 +99,7 @@
name = "universal enzyme" name = "universal enzyme"
desc = "Used in cooking various dishes." desc = "Used in cooking various dishes."
icon_state = "enzyme" icon_state = "enzyme"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/condiment/enzyme/Initialize() /obj/item/weapon/reagent_containers/food/condiment/enzyme/Initialize()
. = ..() . = ..()
@@ -107,6 +108,7 @@
/obj/item/weapon/reagent_containers/food/condiment/sugar /obj/item/weapon/reagent_containers/food/condiment/sugar
name = "sugar" name = "sugar"
desc = "Tastey space sugar!" desc = "Tastey space sugar!"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/condiment/sugar/Initialize() /obj/item/weapon/reagent_containers/food/condiment/sugar/Initialize()
. = ..() . = ..()
@@ -116,6 +118,7 @@
name = "salt shaker" // a large one. name = "salt shaker" // a large one.
desc = "Salt. From space oceans, presumably." desc = "Salt. From space oceans, presumably."
icon_state = "saltshakersmall" icon_state = "saltshakersmall"
center_of_mass = list("x"=17, "y"=11)
possible_transfer_amounts = list(1,20) //for clown turning the lid off possible_transfer_amounts = list(1,20) //for clown turning the lid off
amount_per_transfer_from_this = 1 amount_per_transfer_from_this = 1
volume = 20 volume = 20
@@ -128,6 +131,7 @@
name = "pepper mill" name = "pepper mill"
desc = "Often used to flavor food or make people sneeze." desc = "Often used to flavor food or make people sneeze."
icon_state = "peppermillsmall" icon_state = "peppermillsmall"
center_of_mass = list("x"=17, "y"=11)
possible_transfer_amounts = list(1,20) //for clown turning the lid off possible_transfer_amounts = list(1,20) //for clown turning the lid off
amount_per_transfer_from_this = 1 amount_per_transfer_from_this = 1
volume = 20 volume = 20
@@ -142,18 +146,19 @@
icon = 'icons/obj/food.dmi' icon = 'icons/obj/food.dmi'
icon_state = "flour" icon_state = "flour"
item_state = "flour" item_state = "flour"
center_of_mass = list("x"=16, "y"=8)
volume = 220 volume = 220
/obj/item/weapon/reagent_containers/food/condiment/flour/Initialize() /obj/item/weapon/reagent_containers/food/condiment/flour/Initialize()
. = ..() . = ..()
reagents.add_reagent("flour", 200) reagents.add_reagent("flour", 200)
src.pixel_x = rand(-10.0, 10) randpixel_xy()
src.pixel_y = rand(-10.0, 10)
/obj/item/weapon/reagent_containers/food/condiment/spacespice /obj/item/weapon/reagent_containers/food/condiment/spacespice
name = "space spices" name = "space spices"
desc = "An exotic blend of spices for cooking. It must flow." desc = "An exotic blend of spices for cooking. It must flow."
icon_state = "spacespicebottle" icon_state = "spacespicebottle"
center_of_mass = list("x"=16, "y"=10)
possible_transfer_amounts = list(1,40) //for clown turning the lid off possible_transfer_amounts = list(1,40) //for clown turning the lid off
amount_per_transfer_from_this = 1 amount_per_transfer_from_this = 1
volume = 40 volume = 40
@@ -166,6 +171,7 @@
name = "barbecue sauce" name = "barbecue sauce"
desc = "Barbecue sauce, it's labeled 'sweet and spicy'." desc = "Barbecue sauce, it's labeled 'sweet and spicy'."
icon_state = "barbecue" icon_state = "barbecue"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/condiment/barbecue/Initialize() /obj/item/weapon/reagent_containers/food/condiment/barbecue/Initialize()
..() ..()
@@ -174,6 +180,7 @@
/obj/item/weapon/reagent_containers/food/condiment/garlicsauce /obj/item/weapon/reagent_containers/food/condiment/garlicsauce
name = "garlic sauce" name = "garlic sauce"
desc = "Garlic sauce, perfect for spicing up a plate of garlic." desc = "Garlic sauce, perfect for spicing up a plate of garlic."
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/condiment/garlicsauce/Initialize() /obj/item/weapon/reagent_containers/food/condiment/garlicsauce/Initialize()
..() ..()

View File

@@ -133,7 +133,7 @@
icon_state = "coffee" icon_state = "coffee"
item_state = "cont_vapour" item_state = "cont_vapour"
drop_sound = 'sound/items/drop/box.ogg' drop_sound = 'sound/items/drop/box.ogg'
center_of_mass = list("x"=15, "y"=10) center_of_mass = list("x"=16, "y"=11)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("coffee", 30) reagents.add_reagent("coffee", 30)
@@ -143,7 +143,7 @@
desc = "A limited edition pumpkin spice coffee drink!" desc = "A limited edition pumpkin spice coffee drink!"
icon_state = "psl_vended" icon_state = "psl_vended"
drop_sound = 'sound/items/drop/box.ogg' drop_sound = 'sound/items/drop/box.ogg'
center_of_mass = list("x"=15, "y"=10) center_of_mass = list("x"=16, "y"=11)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("sadpslatte", 30) reagents.add_reagent("sadpslatte", 30)
@@ -254,7 +254,7 @@
icon_state = "shaker" icon_state = "shaker"
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
volume = 120 volume = 120
center_of_mass = list("x"=17, "y"=10) center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/teapot /obj/item/weapon/reagent_containers/food/drinks/teapot
name = "teapot" name = "teapot"

View File

@@ -6,6 +6,7 @@
name = "empty bottle" name = "empty bottle"
desc = "A sad empty bottle." desc = "A sad empty bottle."
icon_state = "alco-clear" icon_state = "alco-clear"
center_of_mass = list("x" = 16,"y" = 6)
amount_per_transfer_from_this = 5//Smaller sip size for more BaRP and less guzzling a litre of vodka before you realise it amount_per_transfer_from_this = 5//Smaller sip size for more BaRP and less guzzling a litre of vodka before you realise it
volume = 100 volume = 100
item_state = "broken_beer" //Generic held-item sprite until unique ones are made. item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
@@ -204,7 +205,7 @@
name = "Uncle Git's Special Reserve" name = "Uncle Git's Special Reserve"
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES." desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
icon_state = "whiskeybottle" icon_state = "whiskeybottle"
center_of_mass = list("x"=16, "y"=3) center_of_mass = list("x"=16, "y"=4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("whiskey", 100) reagents.add_reagent("whiskey", 100)
@@ -213,7 +214,7 @@
name = "Uncle Git's Cinnamon Fireball" name = "Uncle Git's Cinnamon Fireball"
desc = "A premium single-malt whiskey, infused with cinnamon and hot pepper inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES." desc = "A premium single-malt whiskey, infused with cinnamon and hot pepper inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
icon_state = "fireballbottle" icon_state = "fireballbottle"
center_of_mass = list("x"=16, "y"=3) center_of_mass = list("x"=16, "y"=4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("fireball", 100) reagents.add_reagent("fireball", 100)
@@ -222,7 +223,7 @@
name = "Tunguska Triple Distilled" name = "Tunguska Triple Distilled"
desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide." desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide."
icon_state = "vodkabottle" icon_state = "vodkabottle"
center_of_mass = list("x"=17, "y"=3) center_of_mass = list("x"=17, "y"=4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("vodka", 100) reagents.add_reagent("vodka", 100)
@@ -231,7 +232,7 @@
name = "Caccavo Guaranteed Quality tequila" name = "Caccavo Guaranteed Quality tequila"
desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!" desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
icon_state = "tequillabottle" icon_state = "tequillabottle"
center_of_mass = list("x"=16, "y"=3) center_of_mass = list("x"=16, "y"=4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("tequilla", 100) reagents.add_reagent("tequilla", 100)
@@ -240,7 +241,7 @@
name = "bottle of nothing" name = "bottle of nothing"
desc = "A bottle filled with nothing" desc = "A bottle filled with nothing"
icon_state = "bottleofnothing" icon_state = "bottleofnothing"
center_of_mass = list("x"=17, "y"=5) center_of_mass = list("x"=16, "y"=5)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("nothing", 100) reagents.add_reagent("nothing", 100)
@@ -249,7 +250,7 @@
name = "Angstra Aromatic Bitters" name = "Angstra Aromatic Bitters"
desc = "Only the finest and highest quality herbs find their way into our cocktail bitters." desc = "Only the finest and highest quality herbs find their way into our cocktail bitters."
icon_state = "bitters" icon_state = "bitters"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=9)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("bitters",40) reagents.add_reagent("bitters",40)
@@ -276,7 +277,7 @@
name = "Wrapp Artiste patron" name = "Wrapp Artiste patron"
desc = "Silver laced tequilla, served in space night clubs across the galaxy." desc = "Silver laced tequilla, served in space night clubs across the galaxy."
icon_state = "patronbottle" icon_state = "patronbottle"
center_of_mass = list("x"=16, "y"=6) center_of_mass = list("x"=16, "y"=7)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("patron", 100) reagents.add_reagent("patron", 100)
@@ -285,7 +286,7 @@
name = "Captain Pete's Cuban Spiced rum" name = "Captain Pete's Cuban Spiced rum"
desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle." desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
icon_state = "rumbottle" icon_state = "rumbottle"
center_of_mass = list("x"=16, "y"=8) center_of_mass = list("x"=16, "y"=4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("rum", 100) reagents.add_reagent("rum", 100)
@@ -303,7 +304,7 @@
name = "Goldeneye vermouth" name = "Goldeneye vermouth"
desc = "Sweet, sweet dryness~" desc = "Sweet, sweet dryness~"
icon_state = "vermouthbottle" icon_state = "vermouthbottle"
center_of_mass = list("x"=17, "y"=3) center_of_mass = list("x"=16, "y"=4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("vermouth", 100) reagents.add_reagent("vermouth", 100)
@@ -312,7 +313,7 @@
name = "Robert Robust's coffee liqueur" name = "Robert Robust's coffee liqueur"
desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK" desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK"
icon_state = "kahluabottle" icon_state = "kahluabottle"
center_of_mass = list("x"=17, "y"=3) center_of_mass = list("x"=16, "y"=5)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("kahlua", 100) reagents.add_reagent("kahlua", 100)
@@ -321,7 +322,7 @@
name = "College Girl goldschlager" name = "College Girl goldschlager"
desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps." desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
icon_state = "goldschlagerbottle" icon_state = "goldschlagerbottle"
center_of_mass = list("x"=15, "y"=3) center_of_mass = list("x"=16, "y"=4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("goldschlager", 100) reagents.add_reagent("goldschlager", 100)
@@ -330,7 +331,7 @@
name = "Chateau De Baton Premium cognac" name = "Chateau De Baton Premium cognac"
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time." desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
icon_state = "cognacbottle" icon_state = "cognacbottle"
center_of_mass = list("x"=16, "y"=6) center_of_mass = list("x"=16, "y"=4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("cognac", 100) reagents.add_reagent("cognac", 100)
@@ -348,7 +349,7 @@
name = "Jailbreaker Verte" name = "Jailbreaker Verte"
desc = "One sip of this and you just know you're gonna have a good time." desc = "One sip of this and you just know you're gonna have a good time."
icon_state = "absinthebottle" icon_state = "absinthebottle"
center_of_mass = list("x"=16, "y"=6) center_of_mass = list("x"=16, "y"=7)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("absinthe", 100) reagents.add_reagent("absinthe", 100)
@@ -423,7 +424,7 @@
desc = "Full of vitamins and deliciousness!" desc = "Full of vitamins and deliciousness!"
icon_state = "orangejuice" icon_state = "orangejuice"
item_state = "carton" item_state = "carton"
center_of_mass = list("x"=16, "y"=7) center_of_mass = list("x"=16, "y"=6)
isGlass = 0 isGlass = 0
Initialize() Initialize()
. = ..() . = ..()
@@ -434,7 +435,7 @@
desc = "It's cream. Made from milk. What else did you think you'd find in there?" desc = "It's cream. Made from milk. What else did you think you'd find in there?"
icon_state = "cream" icon_state = "cream"
item_state = "carton" item_state = "carton"
center_of_mass = list("x"=16, "y"=8) center_of_mass = list("x"=16, "y"=6)
isGlass = 0 isGlass = 0
Initialize() Initialize()
. = ..() . = ..()
@@ -445,7 +446,7 @@
desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness." desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
icon_state = "tomatojuice" icon_state = "tomatojuice"
item_state = "carton" item_state = "carton"
center_of_mass = list("x"=16, "y"=8) center_of_mass = list("x"=16, "y"=6)
isGlass = 0 isGlass = 0
Initialize() Initialize()
. = ..() . = ..()
@@ -456,7 +457,7 @@
desc = "Sweet-sour goodness." desc = "Sweet-sour goodness."
icon_state = "limejuice" icon_state = "limejuice"
item_state = "carton" item_state = "carton"
center_of_mass = list("x"=16, "y"=8) center_of_mass = list("x"=16, "y"=4)
isGlass = 0 isGlass = 0
Initialize() Initialize()
. = ..() . = ..()
@@ -467,7 +468,7 @@
desc = "This juice is VERY sour." desc = "This juice is VERY sour."
icon_state = "lemoncarton" icon_state = "lemoncarton"
item_state = "carton" item_state = "carton"
center_of_mass = list("x"=16, "y"=8) center_of_mass = list("x"=16, "y"=6)
isGlass = 0 isGlass = 0
Initialize() Initialize()
. = ..() . = ..()
@@ -478,7 +479,7 @@
desc = "Juice from a Skrell medicinal herb. It's supposed to be diluted." desc = "Juice from a Skrell medicinal herb. It's supposed to be diluted."
icon_state = "dyncarton" icon_state = "dyncarton"
item_state = "carton" item_state = "carton"
center_of_mass = list("x"=16, "y"=8) center_of_mass = list("x"=16, "y"=6)
isGlass = 0 isGlass = 0
Initialize() Initialize()
. = ..() . = ..()
@@ -489,7 +490,7 @@
desc = "Juice from an apple. Yes." desc = "Juice from an apple. Yes."
icon_state = "applejuice" icon_state = "applejuice"
item_state = "carton" item_state = "carton"
center_of_mass = list("x"=16, "y"=8) center_of_mass = list("x"=16, "y"=4)
isGlass = 0 isGlass = 0
Initialize() Initialize()
. = ..() . = ..()
@@ -509,7 +510,7 @@
name = "space beer" name = "space beer"
desc = "Contains only water, malt and hops." desc = "Contains only water, malt and hops."
icon_state = "beer" icon_state = "beer"
center_of_mass = list("x"=16, "y"=12) center_of_mass = list("x"=16, "y"=8)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("beer", 30) reagents.add_reagent("beer", 30)
@@ -519,7 +520,7 @@
desc = "A true dorf's drink of choice." desc = "A true dorf's drink of choice."
icon_state = "alebottle" icon_state = "alebottle"
item_state = "beer" item_state = "beer"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("ale", 30) reagents.add_reagent("ale", 30)
@@ -530,6 +531,7 @@
name = "green chartreuse" name = "green chartreuse"
desc = "A green, strong liqueur." desc = "A green, strong liqueur."
icon_state = "chartreusegreenbottle" icon_state = "chartreusegreenbottle"
center_of_mass = list("x" = 15,"y" = 5)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("chartreusegreen", 100) reagents.add_reagent("chartreusegreen", 100)
@@ -538,6 +540,7 @@
name = "yellow chartreuse" name = "yellow chartreuse"
desc = "A yellow, strong liqueur." desc = "A yellow, strong liqueur."
icon_state = "chartreuseyellowbottle" icon_state = "chartreuseyellowbottle"
center_of_mass = list("x" = 15,"y" = 5)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("chartreuseyellow", 100) reagents.add_reagent("chartreuseyellow", 100)
@@ -546,6 +549,7 @@
name = "white creme de menthe" name = "white creme de menthe"
desc = "Mint-flavoured alcohol, in a bottle." desc = "Mint-flavoured alcohol, in a bottle."
icon_state = "whitecremebottle" icon_state = "whitecremebottle"
center_of_mass = list("x" = 16,"y" = 5)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("cremewhite", 100) reagents.add_reagent("cremewhite", 100)
@@ -554,6 +558,7 @@
name = "Creme de Yvette" name = "Creme de Yvette"
desc = "Berry-flavoured alcohol, in a bottle." desc = "Berry-flavoured alcohol, in a bottle."
icon_state = "cremedeyvettebottle" icon_state = "cremedeyvettebottle"
center_of_mass = list("x" = 16,"y" = 6)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("cremeyvette", 100) reagents.add_reagent("cremeyvette", 100)
@@ -562,6 +567,7 @@
name = "brandy" name = "brandy"
desc = "Cheap knock off for cognac." desc = "Cheap knock off for cognac."
icon_state = "brandybottle" icon_state = "brandybottle"
center_of_mass = list("x" = 15,"y" = 8)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("brandy", 100) reagents.add_reagent("brandy", 100)
@@ -570,6 +576,7 @@
name = "Guinness" name = "Guinness"
desc = "A bottle of good old Guinness." desc = "A bottle of good old Guinness."
icon_state = "guinnes_bottle" icon_state = "guinnes_bottle"
center_of_mass = list("x" = 15,"y" = 4)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("guinnes", 100) reagents.add_reagent("guinnes", 100)
@@ -578,6 +585,7 @@
name = "Drambuie" name = "Drambuie"
desc = "A bottle of Drambuie." desc = "A bottle of Drambuie."
icon_state = "drambuie_bottle" icon_state = "drambuie_bottle"
center_of_mass = list("x" = 16,"y" = 6)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("drambuie", 100) reagents.add_reagent("drambuie", 100)
@@ -586,6 +594,7 @@
name = "sbiten" name = "sbiten"
desc = "A bottle full of sweet sbiten." desc = "A bottle full of sweet sbiten."
icon_state = "sbitenbottle" icon_state = "sbitenbottle"
center_of_mass = list("x" = 16,"y" = 7)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("sbiten", 100) reagents.add_reagent("sbiten", 100)
@@ -594,6 +603,7 @@
name = "messa's mead" name = "messa's mead"
desc = "A bottle of Messa's mead. Bottled somewhere in the icy world of Adhomai." desc = "A bottle of Messa's mead. Bottled somewhere in the icy world of Adhomai."
icon_state = "messa_mead" icon_state = "messa_mead"
center_of_mass = list("x" = 16,"y" = 5)
description_fluff = "Adhomian beverages are commonly made with fermented grains or vegetables, if alcoholic, or juices mixed with sugar or honey. Victory gin is the most \ description_fluff = "Adhomian beverages are commonly made with fermented grains or vegetables, if alcoholic, or juices mixed with sugar or honey. Victory gin is the most \
widespread alcoholic drink in Adhomai, the result of the fermentation of honey extracted from Messa's tears, but its production and consumption is slowly declining due to the \ widespread alcoholic drink in Adhomai, the result of the fermentation of honey extracted from Messa's tears, but its production and consumption is slowly declining due to the \
People's Republic situation in the current conflict. Messa's mead is also another more traditional alternative, made with honey and fermented Earthen-Root juice." People's Republic situation in the current conflict. Messa's mead is also another more traditional alternative, made with honey and fermented Earthen-Root juice."
@@ -609,7 +619,7 @@
name = "Xuizi Juice" name = "Xuizi Juice"
desc = "Blended flower buds from the Xuizi cactus. It smells faintly of vanilla. Bottled by the Arizi Guild for over 200 years." desc = "Blended flower buds from the Xuizi cactus. It smells faintly of vanilla. Bottled by the Arizi Guild for over 200 years."
icon_state = "xuizibottle" icon_state = "xuizibottle"
center_of_mass = list("x"=16, "y"=10) center_of_mass = list("x"=16, "y"=8)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("xuizijuice", 30) reagents.add_reagent("xuizijuice", 30)
@@ -618,6 +628,7 @@
name = "Sarezhi Wine" name = "Sarezhi Wine"
desc = "A premium Moghean wine made from Sareszhi berries. Bottled by the Arizi Guild for over 200 years." desc = "A premium Moghean wine made from Sareszhi berries. Bottled by the Arizi Guild for over 200 years."
icon_state = "sarezhibottle" icon_state = "sarezhibottle"
center_of_mass = list("x" = 16,"y" = 6)
Initialize() Initialize()
. = ..() . = ..()
reagents.add_reagent("sarezhiwine", 100) reagents.add_reagent("sarezhiwine", 100)

View File

@@ -3804,6 +3804,7 @@
desc = "A box suited for pizzas." desc = "A box suited for pizzas."
icon = 'icons/obj/food.dmi' icon = 'icons/obj/food.dmi'
icon_state = "pizzabox1" icon_state = "pizzabox1"
center_of_mass = list("x" = 16,"y" = 6)
var/open = 0 // Is the box open? var/open = 0 // Is the box open?
var/ismessy = 0 // Fancy mess on the lid var/ismessy = 0 // Fancy mess on the lid

View File

@@ -75,6 +75,7 @@
icon = 'icons/obj/chemical.dmi' icon = 'icons/obj/chemical.dmi'
icon_state = "beaker" icon_state = "beaker"
item_state = "beaker" item_state = "beaker"
center_of_mass = list("x" = 15,"y" = 11)
matter = list("glass" = 500) matter = list("glass" = 500)
drop_sound = 'sound/items/drop/glass.ogg' drop_sound = 'sound/items/drop/glass.ogg'
@@ -126,6 +127,7 @@
name = "large beaker" name = "large beaker"
desc = "A large beaker." desc = "A large beaker."
icon_state = "beakerlarge" icon_state = "beakerlarge"
center_of_mass = list("x" = 16,"y" = 11)
matter = list("glass" = 5000) matter = list("glass" = 5000)
volume = 120 volume = 120
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
@@ -137,6 +139,7 @@
desc = "A large mixing bowl." desc = "A large mixing bowl."
icon = 'icons/obj/kitchen.dmi' icon = 'icons/obj/kitchen.dmi'
icon_state = "mixingbowl" icon_state = "mixingbowl"
center_of_mass = list("x" = 17,"y" = 7)
matter = list(DEFAULT_WALL_MATERIAL = 300) matter = list(DEFAULT_WALL_MATERIAL = 300)
volume = 180 volume = 180
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
@@ -148,6 +151,7 @@
name = "cryostasis beaker" name = "cryostasis beaker"
desc = "A cryostasis beaker that allows for chemical storage without reactions." desc = "A cryostasis beaker that allows for chemical storage without reactions."
icon_state = "beakernoreact" icon_state = "beakernoreact"
center_of_mass = list("x" = 16,"y" = 13)
matter = list("glass" = 500) matter = list("glass" = 500)
volume = 60 volume = 60
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
@@ -157,6 +161,7 @@
name = "bluespace beaker" name = "bluespace beaker"
desc = "A bluespace beaker, powered by experimental bluespace technology." desc = "A bluespace beaker, powered by experimental bluespace technology."
icon_state = "beakerbluespace" icon_state = "beakerbluespace"
center_of_mass = list("x" = 16,"y" = 11)
matter = list("glass" = 5000) matter = list("glass" = 5000)
volume = 300 volume = 300
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
@@ -167,6 +172,7 @@
name = "vial" name = "vial"
desc = "A small glass vial." desc = "A small glass vial."
icon_state = "vial" icon_state = "vial"
center_of_mass = list("x" = 15,"y" = 9)
matter = list("glass" = 250) matter = list("glass" = 250)
volume = 30 volume = 30
amount_per_transfer_from_this = 10 amount_per_transfer_from_this = 10
@@ -191,6 +197,7 @@
icon = 'icons/obj/janitor.dmi' icon = 'icons/obj/janitor.dmi'
icon_state = "bucket" icon_state = "bucket"
item_state = "bucket" item_state = "bucket"
center_of_mass = list("x" = 16,"y" = 10)
accuracy = 1 accuracy = 1
matter = list(DEFAULT_WALL_MATERIAL = 200) matter = list(DEFAULT_WALL_MATERIAL = 200)
w_class = 3.0 w_class = 3.0
@@ -246,6 +253,7 @@ obj/item/weapon/reagent_containers/glass/bucket/wood
icon = 'icons/obj/janitor.dmi' icon = 'icons/obj/janitor.dmi'
icon_state = "woodbucket" icon_state = "woodbucket"
item_state = "woodbucket" item_state = "woodbucket"
center_of_mass = list("x" = 16,"y" = 8)
matter = list("wood" = 50) matter = list("wood" = 50)
drop_sound = 'sound/items/drop/wooden.ogg' drop_sound = 'sound/items/drop/wooden.ogg'
carving_weapon = /obj/item/weapon/material/hatchet carving_weapon = /obj/item/weapon/material/hatchet

View File

@@ -6,6 +6,7 @@
icon = 'icons/obj/syringe.dmi' icon = 'icons/obj/syringe.dmi'
item_state = "autoinjector" item_state = "autoinjector"
icon_state = "inhaler1" icon_state = "inhaler1"
center_of_mass = list("x" = 16,"y" = 11)
var/empty_state = "inhaler0" var/empty_state = "inhaler0"
unacidable = 1 unacidable = 1
amount_per_transfer_from_this = 5 amount_per_transfer_from_this = 5

View File

@@ -4,6 +4,7 @@
icon = 'icons/obj/janitor.dmi' icon = 'icons/obj/janitor.dmi'
icon_state = "cleaner" icon_state = "cleaner"
item_state = "cleaner" item_state = "cleaner"
center_of_mass = list("x" = 16,"y" = 10)
flags = OPENCONTAINER|NOBLUDGEON flags = OPENCONTAINER|NOBLUDGEON
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
throwforce = 3 throwforce = 3
@@ -143,6 +144,7 @@
icon = 'icons/obj/weapons.dmi' icon = 'icons/obj/weapons.dmi'
icon_state = "pepperspray" icon_state = "pepperspray"
item_state = "pepperspray" item_state = "pepperspray"
center_of_mass = list("x" = 16,"y" = 16)
possible_transfer_amounts = null possible_transfer_amounts = null
volume = 40 volume = 40
safety = 1 safety = 1
@@ -190,6 +192,7 @@
icon = 'icons/obj/gun.dmi' icon = 'icons/obj/gun.dmi'
icon_state = "chemsprayer" icon_state = "chemsprayer"
item_state = "chemsprayer" item_state = "chemsprayer"
center_of_mass = list("x" = 16,"y" = 16)
throwforce = 3 throwforce = 3
w_class = 3.0 w_class = 3.0
possible_transfer_amounts = null possible_transfer_amounts = null

View File

@@ -12,6 +12,7 @@
icon = 'icons/obj/syringe.dmi' icon = 'icons/obj/syringe.dmi'
item_state = "syringe_0" item_state = "syringe_0"
icon_state = "0" icon_state = "0"
center_of_mass = list("x" = 16,"y" = 14)
matter = list("glass" = 150) matter = list("glass" = 150)
amount_per_transfer_from_this = 5 amount_per_transfer_from_this = 5
possible_transfer_amounts = null possible_transfer_amounts = null

View File

@@ -3,14 +3,14 @@
desc = "What?" desc = "What?"
gender = PLURAL gender = PLURAL
icon = 'icons/obj/stock_parts.dmi' icon = 'icons/obj/stock_parts.dmi'
randpixel = 5
w_class = 2.0 w_class = 2.0
var/rating = 1 var/rating = 1
drop_sound = 'sound/items/drop/glass.ogg' drop_sound = 'sound/items/drop/glass.ogg'
/obj/item/weapon/stock_parts/Initialize() /obj/item/weapon/stock_parts/Initialize()
. = ..() . = ..()
src.pixel_x = rand(-5.0, 5) randpixel_xy()
src.pixel_y = rand(-5.0, 5)
//Rank 1 //Rank 1

View File

@@ -19,6 +19,7 @@
desc = "It looks extremely delicate." desc = "It looks extremely delicate."
icon = 'icons/obj/xenoarchaeology.dmi' icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "sliver1" //0-4 icon_state = "sliver1" //0-4
randpixel = 8
w_class = 1 w_class = 1
sharp = 1 sharp = 1
//item_state = "electronic" //item_state = "electronic"
@@ -27,8 +28,7 @@
/obj/item/weapon/rocksliver/New() /obj/item/weapon/rocksliver/New()
icon_state = "sliver[rand(1,3)]" icon_state = "sliver[rand(1,3)]"
pixel_x = rand(0,16)-8 randpixel_xy()
pixel_y = rand(0,8)-8
create_reagents(50) create_reagents(50)
reagents.add_reagent("ground_rock",50) reagents.add_reagent("ground_rock",50)

View File

@@ -167,6 +167,7 @@
return return
/obj/item/phylactery/pickup(mob/living/user as mob) /obj/item/phylactery/pickup(mob/living/user as mob)
..()
if(!user.is_wizard() && src.lich) if(!user.is_wizard() && src.lich)
to_chat(user, "<span class='warning'>As you pick up \the [src], you feel a wave of dread wash over you.</span>") to_chat(user, "<span class='warning'>As you pick up \the [src], you feel a wave of dread wash over you.</span>")
for(var/obj/machinery/light/P in view(7, user)) for(var/obj/machinery/light/P in view(7, user))

View File

@@ -136,8 +136,7 @@
step(O, get_dir(O, src)) step(O, get_dir(O, src))
return return
/obj/structure/table/attackby(obj/item/W as obj, mob/user as mob, var/click_parameters)
/obj/structure/table/attackby(obj/item/W as obj, mob/user as mob)
if (!W) return if (!W) return
// Handle harm intent grabbing/tabling. // Handle harm intent grabbing/tabling.
@@ -195,8 +194,48 @@
to_chat(user, "<span class='warning'>There's nothing to put \the [W] on! Try adding plating to \the [src] first.</span>") to_chat(user, "<span class='warning'>There's nothing to put \the [W] on! Try adding plating to \the [src] first.</span>")
return return
user.drop_item(src.loc) // Placing stuff on tables
return if(user.unEquip(W, 0, src.loc))
user.make_item_drop_sound(W)
auto_align(W, click_parameters)
return 1
#define CELLS 8 //Amount of cells per row/column in grid
#define CELLSIZE (world.icon_size/CELLS) //Size of a cell in pixels
/*
Automatic alignment of items to an invisible grid, defined by CELLS and CELLSIZE.
Since the grid will be shifted to own a cell that is perfectly centered on the turf, we end up with two 'cell halves'
on edges of each row/column.
Each item defines a center_of_mass, which is the pixel of a sprite where its projected center of mass toward a turf
surface can be assumed. For a piece of paper, this will be in its center. For a bottle, it will be (near) the bottom
of the sprite.
auto_align() will then place the sprite so the defined center_of_mass is at the bottom left corner of the grid cell
closest to where the cursor has clicked on.
Note: This proc can be overwritten to allow for different types of auto-alignment.
*/
/obj/item/var/list/center_of_mass = list("x" = 16,"y" = 16)
/obj/structure/table/proc/auto_align(obj/item/W, click_parameters)
if(!W.center_of_mass)
W.randpixel_xy()
return
if(!click_parameters)
return
var/list/mouse_control = mouse_safe_xy(click_parameters)
var/mouse_x = mouse_control["icon-x"]
var/mouse_y = mouse_control["icon-y"]
if(isnum(mouse_x) && isnum(mouse_y))
var/cell_x = max(0, min(CELLS-1, round(mouse_x/CELLSIZE)))
var/cell_y = max(0, min(CELLS-1, round(mouse_y/CELLSIZE)))
W.pixel_x = (CELLSIZE * (0.5 + cell_x)) - W.center_of_mass["x"]
W.pixel_y = (CELLSIZE * (0.5 + cell_y)) - W.center_of_mass["y"]
#undef CELLS
#undef CELLSIZE
/obj/structure/table/attack_tk() // no telehulk sorry /obj/structure/table/attack_tk() // no telehulk sorry
return return

View File

@@ -0,0 +1,42 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
# balance
# admin
# backend
# security
# refactor
#################################
# Your name.
author: Ferner
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Added pixel precision when placing most items on tables/racks, like with food/drinks. Ported from Bay."
- tweak: "Adjusted the center of mass on some items to make them easier to place down, thrown items now get a randomized pixel placement."