mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Merge pull request #5732 from DeityLink/paintings
[Content] Merch Computer revamp and Paintings
This commit is contained in:
@@ -1179,7 +1179,7 @@ var/list/WALLITEMS = list(
|
||||
"/obj/machinery/newscaster", "/obj/machinery/firealarm", "/obj/structure/noticeboard", "/obj/machinery/door_control",
|
||||
"/obj/machinery/computer/security/telescreen", "/obj/machinery/embedded_controller/radio/simple_vent_controller",
|
||||
"/obj/item/weapon/storage/secure/safe", "/obj/machinery/door_timer", "/obj/machinery/flasher", "/obj/machinery/keycard_auth",
|
||||
"/obj/structure/mirror", "/obj/structure/closet/fireaxecabinet", "obj/structure/sign"
|
||||
"/obj/structure/mirror", "/obj/structure/closet/fireaxecabinet", "obj/structure/sign", "obj/structure/painting"
|
||||
)
|
||||
/proc/gotwallitem(loc, dir)
|
||||
//writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/proc/gotwallitem() called tick#: [world.time]")
|
||||
@@ -1366,6 +1366,13 @@ proc/find_holder_of_type(var/atom/reference,var/typepath) //Returns the first ob
|
||||
/proc/print_runtime(exception/e)
|
||||
world.log << "[time_stamp()] Runtime detected\n[e] at [e.file]:[e.line]\n [e.desc]"
|
||||
|
||||
/proc/transfer_fingerprints(atom/A,atom/B)//synchronizes the fingerprints between two atoms. Useful when you have two different atoms actually being different states of a same object.
|
||||
if(!A || !B)
|
||||
return
|
||||
B.fingerprints = A.fingerprints
|
||||
B.fingerprintshidden = A.fingerprintshidden
|
||||
B.fingerprintslast = A.fingerprintslast
|
||||
|
||||
/world/Error(exception/e)
|
||||
print_runtime(e)
|
||||
..()
|
||||
|
||||
@@ -282,7 +282,7 @@ var/global/list/rune_list = list() // HOLY FUCK WHY ARE WE LOOPING THROUGH THE W
|
||||
<h3>Manifest a ghost</h3>
|
||||
Unlike the Raise Dead rune, this rune does not require any special preparations or vessels. Instead of using full lifeforce of a sacrifice, it will drain YOUR lifeforce. Stand on the rune and invoke it. If theres a ghost standing over the rune, it will materialise, and will live as long as you dont move off the rune or die. You can put a paper with a name on the rune to make the new body look like that person.<br>
|
||||
<h3>Imbue a talisman</h3>
|
||||
This rune allows you to imbue the magic of some runes into paper talismans. Create an imbue rune, then an appropriate rune beside it. Put an empty piece of paper on the imbue rune and invoke it. You will now have a one-use talisman with the power of the target rune. Using a talisman drains some health, so be careful with it. You can imbue a talisman with power of the following runes: summon tome, reveal, conceal, teleport, tisable technology, communicate, deafen, blind and stun.<br>
|
||||
This rune allows you to imbue the magic of some runes into paper talismans. Create an imbue rune, then an appropriate rune beside it. Put an empty piece of paper on the imbue rune and invoke it. You will now have a one-use talisman with the power of the target rune. Using a talisman drains some health, so be careful with it. You can imbue a talisman with power of the following runes: summon tome, reveal, conceal, teleport, disable technology, communicate, deafen, blind and stun.<br>
|
||||
<h3>Sacrifice</h3>
|
||||
Sacrifice rune allows you to sacrifice a living thing or a body to the Geometer of Blood. Monkeys and dead humans are the most basic sacrifices, they might or might not be enough to gain His favor. A living human is what a real sacrifice should be, however, you will need 3 people chanting the invocation to sacrifice a living person.<br>Silicons can also be disposed of using this rune.<br>
|
||||
<h3>Create a wall</h3>
|
||||
|
||||
@@ -743,7 +743,9 @@
|
||||
qdel(newtalisman)
|
||||
invocation("rune_imbue")
|
||||
else
|
||||
return fizzle()
|
||||
usr.say("H'drak v[pick("'","`")]loso, mir'kanas verbot!")
|
||||
usr.show_message("\<span class='warning'>The markings pulse with a small burst of light, then fall dark.</span>", 3, "<span class='warning'>You hear a faint fizzle.</span>", 2)
|
||||
usr << "<span class='notice'> You remembered the words correctly, but the rune isn't working properly. Maybe you're missing something in the ritual.</span>"
|
||||
|
||||
/////////////////////////////////////////THIRTEENTH RUNE
|
||||
|
||||
|
||||
@@ -4,6 +4,37 @@
|
||||
var/uses = 0
|
||||
var/nullblock = 0
|
||||
|
||||
/obj/item/weapon/paper/talisman/examine(mob/user)
|
||||
..()
|
||||
if(iscultist(user) || isobserver(user))
|
||||
switch(imbue)
|
||||
if("newtome")
|
||||
user << "This talisman has been imbued with the power of spawning a new Arcane Tome."
|
||||
if("armor")
|
||||
user << "This talisman has been imbued with the power of clothing yourself in cult fighting gear."
|
||||
if("emp")
|
||||
user << "This talisman has been imbued with the power of disabling technology in a small radius around you."
|
||||
if("conceal")
|
||||
user << "This talisman has been imbued with the power of concealing nearby runes."
|
||||
if("revealrunes")
|
||||
user << "This talisman has been imbued with the power of revealing hidden nearby runes."
|
||||
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
|
||||
user << "This talisman has been imbued with the power of taking you to someplace else. You can read <i>[imbue]</i> on it."
|
||||
if("communicate")
|
||||
user << "This talisman has been imbued with the power of communicating your whispers to your allies."
|
||||
if("deafen")
|
||||
user << "This talisman has been imbued with the power of deafening visible enemies."
|
||||
if("blind")
|
||||
user << "This talisman has been imbued with the power of blinding visible enemies."
|
||||
if("runestun")
|
||||
user << "This talisman has been imbued with the power of paralyzing the beings you touch with it. The effect works on silicons as well, but humans will also be muted for a short time."
|
||||
if("supply")
|
||||
user << "This talisman has been imbued with the power of providing you and your allies with some supplies to start your cult."
|
||||
else
|
||||
user << "This talisman.....has no particular power. Is this some kind of joke?"
|
||||
else
|
||||
user << "Something about the blood stains on this paper fills you with uneasiness."
|
||||
|
||||
/obj/item/weapon/paper/talisman/proc/findNullRod(var/atom/target)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/paper/talisman/proc/findNullRod() called tick#: [world.time]")
|
||||
if(istype(target,/obj/item/weapon/nullrod))
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = "[linked_account.owner_name] (via [src.name])"
|
||||
T.purpose = "Purchase of [appdatum ? "[appdatum.name]" : "a new PDA"]"
|
||||
T.amount = "[transaction_amount]"
|
||||
T.amount = "-[transaction_amount]"
|
||||
T.source_terminal = src.name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
|
||||
@@ -3,9 +3,88 @@
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "store"
|
||||
circuit = "/obj/item/weapon/circuitboard/merch"
|
||||
var/datum/html_interface/interface
|
||||
var/tmp/next_process = 0
|
||||
|
||||
light_color = LIGHT_COLOR_ORANGE
|
||||
|
||||
var/categories = list(
|
||||
"Food" = list(
|
||||
/datum/storeitem/menu1,
|
||||
/datum/storeitem/menu2,
|
||||
),
|
||||
"Tools" = list(
|
||||
/datum/storeitem/pen,
|
||||
/datum/storeitem/wrapping_paper,
|
||||
),
|
||||
"Electronics" = list(
|
||||
/datum/storeitem/boombox,
|
||||
),
|
||||
"Toys" = list(
|
||||
/datum/storeitem/beachball,
|
||||
/datum/storeitem/snap_pops,
|
||||
/datum/storeitem/crayons,
|
||||
),
|
||||
"Clothing" = list(
|
||||
/datum/storeitem/robotnik_labcoat,
|
||||
/datum/storeitem/robotnik_jumpsuit,
|
||||
),
|
||||
"Luxury" = list(
|
||||
/datum/storeitem/photo_album,
|
||||
/datum/storeitem/painting,
|
||||
),
|
||||
)
|
||||
|
||||
/obj/machinery/computer/merch/New()
|
||||
..()
|
||||
|
||||
var/head = {"
|
||||
<style type="text/css">
|
||||
span.area
|
||||
{
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
width: auto;
|
||||
}
|
||||
</style>
|
||||
"}
|
||||
|
||||
src.interface = new/datum/html_interface/nanotrasen(src, src.name, 800, 700, head)
|
||||
html_machines += src
|
||||
|
||||
init_ui()
|
||||
|
||||
/obj/machinery/computer/merch/proc/init_ui()
|
||||
|
||||
var/dat = {"<tbody id="StoreTable">"}
|
||||
|
||||
for(var/category_name in categories)
|
||||
var/list/category_items = categories[category_name]
|
||||
dat += {"
|
||||
<table>
|
||||
<th><h2>[category_name]</h2></th>
|
||||
"}
|
||||
for(var/store_item in category_items)
|
||||
var/datum/storeitem/SI = new store_item()
|
||||
dat += {"
|
||||
<tr><td><A href='?src=\ref[src];choice=buy;chosen_item=[store_item]'>[get_display_name(SI)]</A></td></tr>
|
||||
<tr><td><i>[SI.desc]</i></td></tr>
|
||||
"}
|
||||
|
||||
dat += "</table>"
|
||||
|
||||
dat += "</tbody>"
|
||||
|
||||
interface.updateLayout(dat)
|
||||
|
||||
/obj/machinery/computer/merch/Destroy()
|
||||
..()
|
||||
html_machines -= src
|
||||
qdel(interface)
|
||||
interface = null
|
||||
|
||||
/obj/item/weapon/circuitboard/merch
|
||||
name = "\improper Merchandise Computer Circuitboard"
|
||||
build_path = /obj/machinery/computer/merch
|
||||
@@ -20,134 +99,39 @@
|
||||
src.add_hiddenprint(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/merch/attack_hand(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
add_fingerprint(user)
|
||||
/obj/machinery/computer/merch/proc/get_display_name(var/datum/storeitem/storeitem)
|
||||
return "[storeitem.name] ([!(storeitem.cost) ? "free" : "[storeitem.cost]$"])"
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
/obj/machinery/computer/merch/attack_hand(var/mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
interface.hide(user)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/card/id/card = user.get_id_card()
|
||||
interact(user)
|
||||
|
||||
var/balance=0
|
||||
/obj/machinery/computer/merch/interact(mob/user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
if(user.stat || user.restrained() || !allowed(user))
|
||||
return
|
||||
|
||||
if(card)
|
||||
balance = card.GetBalance()
|
||||
|
||||
var/dat = {"
|
||||
<html>
|
||||
<head>
|
||||
<title>[command_name()] Merchandise</title>
|
||||
<style type="text/css">
|
||||
* {
|
||||
font-family:sans-serif;
|
||||
font-size:x-small;
|
||||
}
|
||||
html {
|
||||
background:#333;
|
||||
color:#999;
|
||||
}
|
||||
|
||||
a {
|
||||
color:#cfcfcf;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color:#ffffff;
|
||||
}
|
||||
tr {
|
||||
background:#303030;
|
||||
border-radius:6px;
|
||||
margin-bottom:0.5em;
|
||||
border-bottom:1px solid black;
|
||||
}
|
||||
tr:nth-child(even) {
|
||||
background:#3f3f3f;
|
||||
}
|
||||
|
||||
td.cost {
|
||||
font-size:20pt;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
td.cost.affordable {
|
||||
background:green;
|
||||
}
|
||||
|
||||
td.cost.toomuch {
|
||||
background:maroon;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p style="float:right"><a href='byond://?src=\ref[src];refresh=1'>Refresh</a> | <b>Balance:</b> $[balance]</p>
|
||||
<h1>[command_name()] Merchandise</h1>
|
||||
<p>
|
||||
<b>Doing your job and not getting any recognition at work?</b> Well, welcome to the
|
||||
merch shop! Here, you can buy cool things in exchange for money you earn when you've
|
||||
completed your Job Objectives.
|
||||
</p>
|
||||
<p>Work hard. Get cash. Acquire bragging rights.</p>
|
||||
<h2>In Stock:</h2>
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<thead>
|
||||
<th>#</th>
|
||||
<th>Name/Description</th>
|
||||
<th>Price</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
"}
|
||||
for(var/datum/storeitem/item in centcomm_store.items)
|
||||
var/cost_class="affordable"
|
||||
if(item.cost>balance)
|
||||
cost_class="toomuch"
|
||||
var/itemID=centcomm_store.items.Find(item)
|
||||
dat += {"
|
||||
<tr>
|
||||
<th>
|
||||
[itemID]
|
||||
</th>
|
||||
<td>
|
||||
<p><b>[item.name]</b></p>
|
||||
<p>[item.desc]</p>
|
||||
</td>
|
||||
<td class="cost [cost_class]">
|
||||
<a href="byond://?src=\ref[src];buy=[itemID]">$[item.cost]</a>
|
||||
</td>
|
||||
</tr>
|
||||
"}
|
||||
dat += {"
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>"}
|
||||
user << browse(dat, "window=merch")
|
||||
onclose(user, "merch")
|
||||
return
|
||||
interface.show(user)
|
||||
|
||||
/obj/machinery/computer/merch/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
|
||||
//testing(href)
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
if (href_list["buy"])
|
||||
var/itemID = text2num(href_list["buy"])
|
||||
var/datum/storeitem/item = centcomm_store.items[itemID]
|
||||
var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for $[item.cost]?","You sure?","Yes","No") in list("Yes","No")
|
||||
if(sure=="No")
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(!centcomm_store.PlaceOrder(usr,itemID))
|
||||
usr << "<span class='warning'>Unable to charge your account.</span>"
|
||||
else
|
||||
usr << "<span class='notice'>You've successfully purchased the item. It should be in your hands or on the floor.</span>"
|
||||
switch(href_list["choice"])
|
||||
if ("buy")
|
||||
var/itemID = href_list["chosen_item"]
|
||||
if(!centcomm_store.PlaceOrder(usr,itemID,src))
|
||||
usr << "\icon[src]<span class='warning'>Unable to charge your account.</span>"
|
||||
else
|
||||
usr << "\icon[src]<span class='notice'>Transaction complete! Enjoy your product.</span>"
|
||||
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
@@ -410,7 +410,7 @@
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = "[linked_account.owner_name] (via [src.name])"
|
||||
T.purpose = "Purchase of [currently_vending.product_name]"
|
||||
T.amount = "[transaction_amount]"
|
||||
T.amount = "-[transaction_amount]"
|
||||
T.source_terminal = src.name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
|
||||
@@ -5,13 +5,14 @@
|
||||
w_type=RECYK_METAL
|
||||
var/sheets_refunded = 2
|
||||
var/list/mount_reqs = list() //can contain simfloor, nospace. Used in try_build to see if conditions are needed, then met
|
||||
var/frame_material = /obj/item/stack/sheet/metal
|
||||
|
||||
/obj/item/mounted/frame/attackby(obj/item/weapon/W, mob/user)
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/wrench) && sheets_refunded)
|
||||
//new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
|
||||
var/obj/item/stack/sheet/metal/M = getFromPool(/obj/item/stack/sheet/metal, get_turf(src))
|
||||
M.amount = sheets_refunded
|
||||
var/obj/item/stack/sheet/S = getFromPool(frame_material, get_turf(src))
|
||||
S.amount = sheets_refunded
|
||||
qdel(src)
|
||||
|
||||
/obj/item/mounted/frame/try_build(turf/on_wall, mob/user)
|
||||
|
||||
210
code/game/objects/items/mountable_frames/paintings.dm
Normal file
210
code/game/objects/items/mountable_frames/paintings.dm
Normal file
@@ -0,0 +1,210 @@
|
||||
var/global/list/available_paintings = list(
|
||||
"duck",
|
||||
"mario",
|
||||
"gradius",
|
||||
"kudzu",
|
||||
"dwarf",
|
||||
"xenolisa",
|
||||
"bottles",
|
||||
"aymao",
|
||||
"flowey",
|
||||
"sunset",
|
||||
)
|
||||
|
||||
/obj/item/mounted/frame/painting
|
||||
name = "painting"
|
||||
desc = "A blank painting."
|
||||
icon = 'icons/obj/paintings.dmi'
|
||||
icon_state = "item"
|
||||
item_state = "painting"
|
||||
inhand_states = list("left_hand" = 'icons/mob/in-hand/left/misc_tools.dmi', "right_hand" = 'icons/mob/in-hand/right/misc_tools.dmi')
|
||||
flags = FPRINT
|
||||
w_type = RECYK_WOOD
|
||||
frame_material = /obj/item/stack/sheet/wood
|
||||
sheets_refunded = 2
|
||||
autoignition_temperature = AUTOIGNITION_WOOD
|
||||
var/paint = ""
|
||||
|
||||
/obj/item/mounted/frame/painting/New()
|
||||
..()
|
||||
pixel_x = rand(-6,6)
|
||||
pixel_y = rand(-6,6)
|
||||
|
||||
if(!paint)
|
||||
paint = pick(available_paintings)
|
||||
|
||||
update_painting()
|
||||
|
||||
/obj/item/mounted/frame/painting/proc/update_painting()
|
||||
switch(paint)
|
||||
if("narsie")
|
||||
name = "\improper Papa Narnar"
|
||||
desc = "A painting of Nar-Sie. You feel as if it's watching you."
|
||||
if("monkey")
|
||||
name = "\improper Mr. Deempisi portrait"
|
||||
desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"
|
||||
if("duck")
|
||||
name = "\improper Duck"
|
||||
desc = "A painting of a duck. It has a crazed look in its eyes."
|
||||
if("mario")
|
||||
name = "\improper Mario and Coin"
|
||||
desc = "A painting of an italian plumber and an oversized golden plate. Apparently he's a video game mascot of sorts."
|
||||
if("gradius")
|
||||
name = "\improper Vic Viper"
|
||||
desc = "A painting of a space ship. It makes you feel like diving right into an alien base and release your blasters right onto its core."
|
||||
if("justice")
|
||||
name = "\improper Justice"
|
||||
desc = "A painting of a golden scale. Those are often found within courtrooms."
|
||||
if("kudzu")
|
||||
name = "\improper Scythe on Kudzu"
|
||||
desc = "A painting of a scythe and some vines."
|
||||
if("dwarf")
|
||||
name = "\improper Dwarven Miner"
|
||||
desc = "A painting of a dwarf mining adamantine. A long lost high-value metal that was said to be impossibly lightweight, strong, and sharp."
|
||||
if("xenolisa")
|
||||
name = "\improper Xeno Lisa"
|
||||
desc = "A painting of a xenomorph queen, wearing some human clothing. The hands are particularly well-painted."
|
||||
if("bottles")
|
||||
name = "\improper Bottle and Bottle"
|
||||
desc = "A painting of two glass bottles filled with blue and red liquids. You can almost feel the intensity of the artistic discussions that led to this creation."
|
||||
if("aymao")
|
||||
name = "\improper Ay Mao"
|
||||
desc = "A painting of the glorious leader of the Grey Democratic Republic. He looks dignified, and a bit high too."
|
||||
if("flowey")
|
||||
name = "\improper Flowey the Flower"
|
||||
desc = "A painting of your best friend. Also SERIAL MURDERER."
|
||||
if("sunset")
|
||||
name = "\improper Path toward the Sunset"
|
||||
desc = "A painting by D.T.Link. The colours fill you with hope and determination."
|
||||
else
|
||||
name = "painting"
|
||||
desc = "a blank painting."
|
||||
|
||||
/obj/item/mounted/frame/painting/do_build(turf/on_wall, mob/user)
|
||||
user << "<span class='notice'>You hang the [src] on \the [on_wall]...</span>"
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
//declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster
|
||||
var/obj/structure/painting/P = new(user.loc)
|
||||
P.icon_state = paint
|
||||
P.update_painting()
|
||||
|
||||
transfer_fingerprints(src, P)
|
||||
|
||||
var/pDir = get_dir(user,on_wall)
|
||||
if(pDir & NORTH)
|
||||
P.pixel_y = 32
|
||||
if(pDir & SOUTH)
|
||||
P.pixel_y = -32
|
||||
if(pDir & EAST)
|
||||
P.pixel_x = 32
|
||||
if(pDir & WEST)
|
||||
P.pixel_x = -32
|
||||
|
||||
playsound(on_wall, 'sound/items/Deconstruct.ogg', 25, 1)
|
||||
|
||||
user.drop_item(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/mounted/frame/painting/blank
|
||||
paint = "blank"
|
||||
|
||||
/obj/item/mounted/frame/painting/cultify()
|
||||
new /obj/item/mounted/frame/painting/narsie(loc)
|
||||
..()
|
||||
|
||||
/obj/item/mounted/frame/painting/narsie
|
||||
paint = "narsie"
|
||||
|
||||
/obj/item/mounted/frame/painting/narsie/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/painting
|
||||
name = "painting"
|
||||
desc = "A blank painting."
|
||||
icon = 'icons/obj/paintings.dmi'
|
||||
icon_state = "blank"
|
||||
autoignition_temperature = AUTOIGNITION_WOOD
|
||||
|
||||
/obj/structure/painting/New()
|
||||
..()
|
||||
update_painting()
|
||||
|
||||
/obj/structure/painting/proc/update_painting()
|
||||
switch(icon_state)
|
||||
if("narsie")
|
||||
name = "\improper Papa Narnar"
|
||||
desc = "A painting of Nar-Sie. You feel as if it's watching you."
|
||||
if("monkey")
|
||||
name = "\improper Mr. Deempisi portrait"
|
||||
desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"
|
||||
if("duck")
|
||||
name = "\improper Duck"
|
||||
desc = "A painting of a duck. It has a crazed look in its eyes."
|
||||
if("mario")
|
||||
name = "\improper Mario and Coin"
|
||||
desc = "A painting of an italian plumber and an oversized golden plate. Apparently he's a video game mascot of sorts."
|
||||
if("gradius")
|
||||
name = "\improper Vic Viper"
|
||||
desc = "A painting of a space ship. It makes you feel like diving right into an alien base and release your blasters right onto its core."
|
||||
if("justice")
|
||||
name = "\improper Justice"
|
||||
desc = "A painting of a golden scale. Those are often found within courtrooms."
|
||||
if("kudzu")
|
||||
name = "\improper Scythe on Kudzu"
|
||||
desc = "A painting of a scythe and some vines."
|
||||
if("dwarf")
|
||||
name = "\improper Dwarven Miner"
|
||||
desc = "A painting of a dwarf mining adamantine. A long lost high-value metal that was said to be impossibly lightweight, strong, and sharp."
|
||||
if("xenolisa")
|
||||
name = "\improper Xeno Lisa"
|
||||
desc = "A painting of a xenomorph queen, wearing some human clothing. The hands are particularly well-painted."
|
||||
if("bottles")
|
||||
name = "\improper Bottle and Bottle"
|
||||
desc = "A painting of two glass bottles filled with blue and red liquids. You can almost feel the intensity of the artistic discussions that led to this creation."
|
||||
if("aymao")
|
||||
name = "\improper Ay Mao"
|
||||
desc = "A painting of the glorious leader of the Grey Democratic Republic. He looks dignified, and a bit high too."
|
||||
if("flowey")
|
||||
name = "\improper Flowey the Flower"
|
||||
desc = "A painting of your best friend. Also SERIAL MURDERER."
|
||||
if("sunset")
|
||||
name = "\improper Path toward the Sunset"
|
||||
desc = "A painting by D.T.Link. The colours fill you with hope and determination."
|
||||
else
|
||||
name = "painting"
|
||||
desc = "a blank painting."
|
||||
|
||||
/obj/structure/painting/attack_hand(mob/user)
|
||||
user << "<span class='notice'>You pick up \the [src]...</span>"
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
var/obj/item/mounted/frame/painting/P = new(loc)
|
||||
P.paint = icon_state
|
||||
P.update_painting()
|
||||
|
||||
transfer_fingerprints(src, P)
|
||||
|
||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1)
|
||||
|
||||
P.attack_hand(user)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/painting/cultify()
|
||||
var/obj/structure/painting/narsie/N = new(loc)
|
||||
N.pixel_x = pixel_x
|
||||
N.pixel_y = pixel_y
|
||||
..()
|
||||
|
||||
/obj/structure/painting/narsie
|
||||
icon_state = "narsie"
|
||||
|
||||
/obj/structure/painting/narsie/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/painting/random/New()
|
||||
..()
|
||||
icon_state = pick(available_paintings)
|
||||
update_painting()
|
||||
@@ -188,6 +188,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
|
||||
new/datum/stack_recipe("apiary", /obj/item/apiary, 10, time = 25, one_per_turf = 0, on_floor = 0), \
|
||||
new/datum/stack_recipe("bowl", /obj/item/trash/bowl, 1), \
|
||||
new/datum/stack_recipe("notice board", /obj/structure/noticeboard, 2, time = 15, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("blank canvas", /obj/item/mounted/frame/painting/blank, 2, time = 15), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/wood
|
||||
@@ -198,6 +199,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
autoignition_temperature=AUTOIGNITION_WOOD
|
||||
sheettype = "wood"
|
||||
w_type = RECYK_WOOD
|
||||
|
||||
/obj/item/stack/sheet/wood/cultify()
|
||||
return
|
||||
|
||||
@@ -138,6 +138,20 @@
|
||||
icon_state = "foodbag0"
|
||||
else icon_state = "foodbag1"
|
||||
|
||||
/obj/item/weapon/storage/bag/food/menu1/New()
|
||||
..()
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)//6 nutriments
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/fries(src)//4 nutriments
|
||||
new/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola(src)//-3 drowsy
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/bag/food/menu2/New()
|
||||
..()
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger(src)//14 nutriments
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/cheesyfries(src)//6 nutriments
|
||||
new/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind(src)//-7 drowsy, -1 sleepy
|
||||
update_icon()
|
||||
|
||||
// -----------------------------
|
||||
// Borg Food bag
|
||||
// -----------------------------
|
||||
|
||||
@@ -69,8 +69,7 @@
|
||||
T.amount = "([transaction_amount])"
|
||||
else
|
||||
T.amount = "[transaction_amount]"
|
||||
if(terminal_id)
|
||||
T.source_terminal = terminal_id
|
||||
T.source_terminal = terminal_name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
dest.transaction_log.Add(T)
|
||||
@@ -80,9 +79,8 @@
|
||||
if(terminal_name!="")
|
||||
T.target_name += " (via [terminal_name])"
|
||||
T.purpose = transaction_purpose
|
||||
T.amount = "[transaction_amount]"
|
||||
if(terminal_id)
|
||||
T.source_terminal = terminal_id
|
||||
T.amount = "-[transaction_amount]"
|
||||
T.source_terminal = terminal_name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
transaction_log.Add(T)
|
||||
|
||||
3
code/modules/mining/abandoned_crates/vg.dm
Normal file
3
code/modules/mining/abandoned_crates/vg.dm
Normal file
@@ -0,0 +1,3 @@
|
||||
/obj/structure/closet/crate/secure/loot/vg_painting/New()
|
||||
..()
|
||||
new/obj/item/mounted/frame/painting(src)
|
||||
@@ -49,6 +49,7 @@
|
||||
)
|
||||
fluffitems = list(
|
||||
/obj/effect/gateway=1,
|
||||
/obj/item/mounted/frame/painting/narsie=1,
|
||||
/obj/effect/gibspawner=1,
|
||||
/obj/structure/cult/talisman=1,
|
||||
/obj/item/toy/crayon/red=2,
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
icon_state = "paper"
|
||||
throwforce = 0
|
||||
w_class = 1.0
|
||||
w_type = RECYK_WOOD
|
||||
throw_range = 1
|
||||
throw_speed = 1
|
||||
layer = 3.9
|
||||
|
||||
@@ -81,18 +81,18 @@
|
||||
<table class="table" width="100%; table-layout: fixed;">
|
||||
<colgroup><col/><col style="width: 60px;"/><col style="width: 60px;"/><col style="width: 60px;"/><col style="width: 80px;"/><col style="width: 80px;"/><col style="width: 20px;"/></colgroup>
|
||||
<thead><tr><th>Area</th><th>Eqp.</th><th>Lgt.</th><th>Env.</th><th align="right">Load</th><th align="right">Cell</th><th></th></tr></thead>
|
||||
<tbody id="APCTable">
|
||||
<tbody id="APCTable">
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="n_operatable" style="display: none;">
|
||||
<span class="error">No connection.</span>
|
||||
</div>
|
||||
</div>
|
||||
"}
|
||||
|
||||
interface.updateContent("content", dat)
|
||||
|
||||
|
||||
/obj/machinery/power/monitor/attack_ai(mob/user)
|
||||
. = attack_hand(user)
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
//Needs to be overriden because else it will use the shitty set_machine().
|
||||
/obj/machinery/power/monitor/hiIsValidClient(datum/html_interface_client/hclient, datum/html_interface/hi)
|
||||
return hclient.client.mob.html_mob_check(src.type)
|
||||
|
||||
|
||||
/obj/machinery/power/monitor/interact(mob/user)
|
||||
var/delay = 0
|
||||
delay += send_asset(user.client, "Chart.js")
|
||||
@@ -127,7 +127,7 @@
|
||||
|
||||
for(var/i = 1 to POWER_MONITOR_HIST_SIZE)
|
||||
interface.callJavaScript("pushPowerData", list(demand_hist[i], supply_hist[i], load_hist[i]), user)
|
||||
|
||||
|
||||
/obj/machinery/power/monitor/power_change()
|
||||
..()
|
||||
if(stat & BROKEN)
|
||||
@@ -183,7 +183,7 @@
|
||||
load_hist.Cut(1,2)
|
||||
|
||||
interface.callJavaScript("pushPowerData", list(load(), avail(), powernet.viewload))
|
||||
|
||||
|
||||
// src.next_process == 0 is in place to make it update the first time around, then wait until someone watches
|
||||
if ((!src.next_process || src.interface.isUsed()) && world.time >= src.next_process)
|
||||
src.next_process = world.time + 30
|
||||
@@ -200,7 +200,7 @@
|
||||
for(var/obj/machinery/power/terminal/term in powernet.nodes)
|
||||
if(istype(term.master, /obj/machinery/power/apc))
|
||||
|
||||
|
||||
|
||||
var/obj/machinery/power/apc/A = term.master
|
||||
tbl += "<tr>"
|
||||
tbl += "<td><span class=\"area\">["\The [A.areaMaster]"]</span></td>"
|
||||
|
||||
@@ -28,6 +28,10 @@
|
||||
else
|
||||
user << "<span class='info'>Nothing.</span>"
|
||||
|
||||
/obj/structure/reagent_dispensers/cultify()
|
||||
new /obj/structure/reagent_dispensers/bloodkeg(get_turf(src))
|
||||
..()
|
||||
|
||||
/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this
|
||||
set name = "Set transfer amount"
|
||||
set category = "Object"
|
||||
@@ -257,6 +261,20 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("beer", 1000)
|
||||
|
||||
/obj/structure/reagent_dispensers/bloodkeg
|
||||
name = "old keg"
|
||||
desc = "A very old-looking keg. Some red liquid periodically drips from it."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "bloodkeg"
|
||||
amount_per_transfer_from_this = 10
|
||||
|
||||
/obj/structure/reagent_dispensers/bloodkeg/New()
|
||||
. = ..()
|
||||
reagents.add_reagent("blood", 1000)
|
||||
|
||||
/obj/structure/reagent_dispensers/bloodkeg/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg/blob_act()
|
||||
explosion(src.loc,0,3,5,7,10)
|
||||
del(src)
|
||||
|
||||
@@ -602,6 +602,7 @@ var/list/DEFAULT_TAGGER_LOCATIONS = list(
|
||||
|
||||
// Set up types. BYOND is the dumb and won't let me do this in the var def.
|
||||
types[RECYK_BIOLOGICAL] = "Biological"
|
||||
types[RECYK_WOOD] = "Wooden"
|
||||
types[RECYK_ELECTRONIC] = "Electronics"
|
||||
types[RECYK_GLASS] = "Glasses"
|
||||
types[RECYK_METAL] = "Metals/Minerals"
|
||||
|
||||
@@ -6,61 +6,109 @@
|
||||
var/desc="It's a thing."
|
||||
var/typepath=/obj/item/weapon/storage/box
|
||||
var/cost=0
|
||||
var/category = "misc"
|
||||
|
||||
/datum/storeitem/proc/deliver(var/mob/user)
|
||||
/datum/storeitem/proc/deliver(var/mob/user,var/obj/machinery/computer/merch/merchcomp)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/storeitem/proc/deliver() called tick#: [world.time]")
|
||||
if(istype(typepath,/obj/item/weapon/storage))
|
||||
var/thing = new typepath(user.loc)
|
||||
var/thing = new typepath(merchcomp.loc)
|
||||
user.put_in_hands(thing)
|
||||
else if(istype(typepath,/obj/item))
|
||||
var/obj/item/weapon/storage/box/box=new(user.loc)
|
||||
new typepath(box)
|
||||
box.name="[name] package"
|
||||
box.desc="A special gift for doing your job."
|
||||
user.put_in_hands(box)
|
||||
//else if(istype(typepath,/obj/item))
|
||||
// var/obj/item/weapon/storage/box/box=new(loc)
|
||||
// new typepath(box)
|
||||
// box.name="[name] package"
|
||||
// box.desc="A special gift for doing your job."
|
||||
// user.put_in_hands(box)
|
||||
else
|
||||
new typepath(user.loc)
|
||||
new typepath(merchcomp.loc)
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// Shit for robotics/science
|
||||
// Food
|
||||
/////////////////////////////
|
||||
/datum/storeitem/robotnik_labcoat
|
||||
name = "Robotnik's Research Labcoat"
|
||||
desc = "Join the empire and display your hatred for woodland animals."
|
||||
typepath = /obj/item/clothing/suit/storage/labcoat/custom/N3X15/robotics
|
||||
cost = 350
|
||||
|
||||
/datum/storeitem/robotnik_jumpsuit
|
||||
name = "Robotics Interface Suit"
|
||||
desc = "A modern black and red design with reinforced seams and brass neural interface fittings."
|
||||
typepath = /obj/item/clothing/under/custom/N3X15/robotics
|
||||
cost = 500
|
||||
/datum/storeitem/menu1
|
||||
name = "Fast-Food Menu"
|
||||
desc = "The normal sized average american meal. Courtesy of Nanotrasen."
|
||||
typepath = /obj/item/weapon/storage/bag/food/menu1
|
||||
cost = 50
|
||||
|
||||
/datum/storeitem/menu2
|
||||
name = "Fast-Food Menu (XL)"
|
||||
desc = "For when you're 100% starved and want to become fat in 1 easy step."
|
||||
typepath = /obj/item/weapon/storage/bag/food/menu2
|
||||
cost = 100
|
||||
|
||||
/////////////////////////////
|
||||
// General
|
||||
// Tools
|
||||
/////////////////////////////
|
||||
/datum/storeitem/pen
|
||||
name = "Pen"
|
||||
desc = "Just a simple pen."
|
||||
typepath = /obj/item/weapon/pen
|
||||
cost = 10
|
||||
|
||||
/datum/storeitem/wrapping_paper
|
||||
name = "Wrapping Paper"
|
||||
desc = "Makes gifts 200% more touching."
|
||||
typepath = /obj/item/weapon/wrapping_paper
|
||||
cost = 50
|
||||
|
||||
/////////////////////////////
|
||||
// Electronics
|
||||
/////////////////////////////
|
||||
/datum/storeitem/boombox
|
||||
name = "Boombox"
|
||||
desc = "I ask you a question: is a man not entitled to the beats of his own smooth jazz?"
|
||||
typepath = /obj/machinery/media/receiver/boombox
|
||||
cost = 400
|
||||
|
||||
/////////////////////////////
|
||||
// Toys
|
||||
/////////////////////////////
|
||||
/datum/storeitem/snap_pops
|
||||
name = "Snap-Pops"
|
||||
desc = "Ten-thousand-year-old chinese fireworks: IN SPACE"
|
||||
typepath = /obj/item/weapon/storage/box/snappops
|
||||
cost = 200
|
||||
cost = 100
|
||||
|
||||
/datum/storeitem/crayons
|
||||
name = "Crayons"
|
||||
desc = "Let security know how they're doing by scrawling lovenotes all over their hallways."
|
||||
typepath = /obj/item/weapon/storage/fancy/crayons
|
||||
cost = 350
|
||||
cost = 150
|
||||
|
||||
/datum/storeitem/beachball
|
||||
name="Beach Ball"
|
||||
desc="Summer up your office with this cheap vinyl beachball made by prisoners!"
|
||||
typepath=/obj/item/weapon/beach_ball
|
||||
cost = 500
|
||||
name = "Beach Ball"
|
||||
desc = "Summer up your office with this cheap vinyl beachball made by prisoners!"
|
||||
typepath = /obj/item/weapon/beach_ball
|
||||
cost = 50
|
||||
|
||||
/datum/storeitem/boombox
|
||||
name="Boombox"
|
||||
desc="I ask you a question: is a man not entitled to the beats of his own smooth jazz?"
|
||||
typepath=/obj/machinery/media/receiver/boombox
|
||||
cost = 500
|
||||
/////////////////////////////
|
||||
// Clothing
|
||||
/////////////////////////////
|
||||
/datum/storeitem/robotnik_labcoat
|
||||
name = "Robotnik's Research Labcoat"
|
||||
desc = "Join the empire and display your hatred for woodland animals."
|
||||
typepath = /obj/item/clothing/suit/storage/labcoat/custom/N3X15/robotics
|
||||
cost = 200
|
||||
|
||||
/datum/storeitem/robotnik_jumpsuit
|
||||
name = "Robotics Interface Suit"
|
||||
desc = "A modern black and red design with reinforced seams and brass neural interface fittings."
|
||||
typepath = /obj/item/clothing/under/custom/N3X15/robotics
|
||||
cost = 200
|
||||
|
||||
/////////////////////////////
|
||||
// Luxurt
|
||||
/////////////////////////////
|
||||
/datum/storeitem/photo_album
|
||||
name = "Photo Album"
|
||||
desc = "Clearly all your photos of the clown's shenanigans deserve this investment."
|
||||
typepath = /obj/item/weapon/storage/photo_album
|
||||
cost = 300
|
||||
|
||||
/datum/storeitem/painting
|
||||
name = "Painting"
|
||||
desc = "A random painting from Centcom's museum. For those with good taste in art."
|
||||
typepath = /obj/item/mounted/frame/painting
|
||||
cost = 700
|
||||
|
||||
@@ -28,7 +28,7 @@ var/global/datum/store/centcomm_store=new
|
||||
for(var/itempath in typesof(/datum/storeitem) - /datum/storeitem/)
|
||||
items += new itempath()
|
||||
|
||||
/datum/store/proc/charge(var/mob/user,var/amount,var/datum/storeitem/item)
|
||||
/datum/store/proc/charge(var/mob/user,var/amount,var/datum/storeitem/item,var/obj/machinery/computer/merch/merchcomp)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/store/proc/charge() called tick#: [world.time]")
|
||||
if(!user)
|
||||
//testing("No initial_account")
|
||||
@@ -47,16 +47,19 @@ var/global/datum/store/centcomm_store=new
|
||||
return 0
|
||||
|
||||
if(D.money < amount)
|
||||
//testing("Not enough cash")
|
||||
user << "\icon[merchcomp]<span class='warning'>You don't have that much money!</span>"
|
||||
return 0
|
||||
D.money -= amount
|
||||
|
||||
user << "\icon[merchcomp]<span class='notice'>Remaining balance: [D.money]$</span>"
|
||||
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = "[command_name()] Merchandising"
|
||||
T.purpose = "Purchase of [item.name]"
|
||||
T.amount = -amount
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.source_terminal = "\[CLASSIFIED\] Terminal #[rand(111,333)]"
|
||||
T.source_terminal = merchcomp.name
|
||||
D.transaction_log.Add(T)
|
||||
|
||||
if(vendor_account)
|
||||
@@ -66,7 +69,7 @@ var/global/datum/store/centcomm_store=new
|
||||
T.amount = amount
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.source_terminal = "\[CLASSIFIED\] Terminal #[rand(111,333)]"
|
||||
T.source_terminal = merchcomp.name
|
||||
vendor_account.transaction_log.Add(T)
|
||||
|
||||
return 1
|
||||
@@ -80,15 +83,16 @@ var/global/datum/store/centcomm_store=new
|
||||
linked_db = DB
|
||||
break
|
||||
|
||||
/datum/store/proc/PlaceOrder(var/mob/living/usr, var/itemID)
|
||||
/datum/store/proc/PlaceOrder(var/mob/living/usr, var/itemID, var/obj/machinery/computer/merch/merchcomp)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/store/proc/PlaceOrder() called tick#: [world.time]")
|
||||
// Get our item, first.
|
||||
var/datum/storeitem/item = items[itemID]
|
||||
|
||||
var/datum/storeitem/item = new itemID()
|
||||
if(!item)
|
||||
return 0
|
||||
// Try to deduct funds.
|
||||
if(!charge(usr,item.cost,item))
|
||||
if(!charge(usr,item.cost,item,merchcomp))
|
||||
return 0
|
||||
// Give them the item.
|
||||
item.deliver(usr)
|
||||
item.deliver(usr,merchcomp)
|
||||
return 1
|
||||
@@ -926,6 +926,7 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse
|
||||
#define RECYK_BIOLOGICAL 3
|
||||
#define RECYK_METAL 4
|
||||
#define RECYK_ELECTRONIC 5
|
||||
#define RECYK_WOOD 6
|
||||
|
||||
////////////////
|
||||
// job.info_flags
|
||||
|
||||
Reference in New Issue
Block a user