diff --git a/code/WorkInProgress/ZomgPonies/karma.dm b/code/WorkInProgress/ZomgPonies/karma.dm
index c24aed2604b..45a8fcd60be 100644
--- a/code/WorkInProgress/ZomgPonies/karma.dm
+++ b/code/WorkInProgress/ZomgPonies/karma.dm
@@ -120,7 +120,7 @@ mob/verb/check_karma()
var/currentkarma = (text2num(totalkarma) - text2num(karmaspent))
if(totalkarma)
usr << {"
You have [currentkarma] available.
- You've gained [totalkarma] total karma in your time here.
"}
+You've gained [totalkarma] total karma in your time here.
"}
else
usr << "Your total karma is: 0
"
diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm
index af1f9ec7094..daa5869c397 100644
--- a/code/game/jobs/job/captain.dm
+++ b/code/game/jobs/job/captain.dm
@@ -151,7 +151,7 @@
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers,
- access_medical, access_engine, access_ai_upload, access_eva, access_heads,
+ access_medical, access_engine, access_eva, access_heads,
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
@@ -168,6 +168,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(H), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_if_possible(new /obj/item/clothing/under/rank/centcom/representative(H), slot_w_uniform)
+ H.equip_if_possible(new /obj/item/clothing/suit/armor/vest/fluff/deus_blueshield(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hop(H), slot_belt)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 01f6f8d10a4..0cdc00c6f9c 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -380,7 +380,8 @@ var/global/datum/controller/occupations/job_master
//give them an account in the station database
if(centcomm_account_db)
- var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null)
+ var/balance = round(rand(1,5))*100 // Between $100 and $500
+ var/datum/money_account/M = create_account(H.real_name, balance , null)
if(H.mind)
var/remembered_info = ""
remembered_info += "Your account number is: #[M.account_number]
"
diff --git a/code/game/jobs/job_objective.dm b/code/game/jobs/job_objective.dm
index 1c8bbe79fcc..fafbb225d90 100644
--- a/code/game/jobs/job_objective.dm
+++ b/code/game/jobs/job_objective.dm
@@ -43,13 +43,17 @@
/datum/game_mode/proc/declare_job_completion()
var/text = "Job Completion:"
- for(var/datum/mind/employee in player_list)
+ var/numEmployees=0
+ for(var/datum/mind/employee in ticker.minds)
if(!employee.job_objectives.len)//If the employee had no objectives, don't need to process this.
- return
+ continue
+ if(!employee.assigned_role=="MODE")//If the employee is a gamemode thing, skip.
+ continue
+ numEmployees++
var/tasks_completed=0
//text += "[L.name] ([ckey(D.mind.key)]), the [L.job]:\n"
- text += "
[employee.key] was [employee.name] ("
+ text += "
[employee.key] was [employee.name], the [employee.assigned_role] ("
if(employee.current)
if(employee.current.stat == DEAD)
text += "died"
@@ -78,6 +82,6 @@
else
text += "
The [employee.assigned_role] was a worthless sack of shit!"
feedback_add_details("employee_success","FAIL")
-
- world << text
+ if(numEmployees>0)
+ world << text
return 1
\ No newline at end of file
diff --git a/code/game/machinery/computer/store.dm b/code/game/machinery/computer/store.dm
new file mode 100644
index 00000000000..7b95104a796
--- /dev/null
+++ b/code/game/machinery/computer/store.dm
@@ -0,0 +1,153 @@
+/obj/machinery/computer/merch
+ name = "Merch Computer"
+ icon = 'icons/obj/computer.dmi'
+ icon_state = "comm_logs"
+ circuit = "/obj/item/weapon/circuitboard/merch"
+
+/obj/machinery/computer/merch/New()
+ ..()
+
+/obj/machinery/computer/merch/attack_paw(mob/user as mob)
+ return attack_hand(user)
+
+/obj/machinery/computer/merch/attack_ai(mob/user as mob)
+ 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)
+
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ var/balance=user.mind.initial_account.money
+
+ var/dat = {"
+
+
+ [command_name()] Merchandise
+
+
+
+ Refresh | Balance: $[balance]
+ [command_name()] Merchandise
+
+ Doing your job and not getting any recognition at work? 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.
+
+ Work hard. Get cash. Acquire bragging rights.
+ In Stock:
+
+
+ | # |
+ Name/Description |
+ Price |
+
+
+ "}
+ 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 += {"
+
+ |
+ [itemID]
+ |
+
+ [item.name]
+ [item.desc]
+ |
+
+ $[item.cost]
+ |
+
+ "}
+ dat += {"
+
+
+
+"}
+ user << browse(dat, "window=merch")
+ onclose(user, "merch")
+ return
+
+/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 << "\red Unable to charge your account."
+ else
+ usr << "\blue You've successfully purchased the item. It should be in your hands or on the floor."
+ src.updateUsrDialog()
+ return
+
+/obj/machinery/computer/cloning/update_icon()
+
+ if(stat & BROKEN)
+ icon_state = "comm_logs0"
+ else
+ if(stat & NOPOWER)
+ src.icon_state = "comm_logs"
+ stat |= NOPOWER
+ else
+ icon_state = initial(icon_state)
+ stat &= ~NOPOWER
diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm
index add417288a9..39eb8777a82 100644
--- a/code/modules/events/event_dynamic.dm
+++ b/code/modules/events/event_dynamic.dm
@@ -52,11 +52,11 @@ var/global/list/possibleEvents = list()
possibleEvents[/datum/event/falsealarm] = 300
possibleEvents[/datum/event/immovable_rod] = 200
possibleEvents[/datum/event/vent_clog] = 300
- possibleEvents[/datum/event/anomaly/anomaly_bluespace] = 200
+ possibleEvents[/datum/event/anomaly/anomaly_bluespace] = 150
possibleEvents[/datum/event/anomaly/anomaly_flux] = 200
possibleEvents[/datum/event/anomaly/anomaly_grav] = 200
possibleEvents[/datum/event/anomaly/anomaly_pyro] = 200
- possibleEvents[/datum/event/anomaly/anomaly_vortex] = 200
+ possibleEvents[/datum/event/anomaly/anomaly_vortex] = 150
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
diff --git a/code/modules/store/items.dm b/code/modules/store/items.dm
new file mode 100644
index 00000000000..ea515f5ba11
--- /dev/null
+++ b/code/modules/store/items.dm
@@ -0,0 +1,88 @@
+/////////////////////////////
+// Store Item
+/////////////////////////////
+/datum/storeitem
+ var/name="Thing"
+ var/desc="It's a thing."
+ var/typepath=/obj/item/weapon/storage/box
+ var/cost=0
+
+/datum/storeitem/proc/deliver(var/mob/usr)
+ if(!istype(typepath,/obj/item/weapon/storage))
+ var/obj/item/weapon/storage/box/box=new(usr.loc)
+ new typepath(box)
+ box.name="[name] package"
+ box.desc="A special gift for doing your job."
+ usr.put_in_hands(box)
+ else
+ var/thing = new typepath(usr.loc)
+ usr.put_in_hands(thing)
+
+
+/////////////////////////////
+// Shit for robotics/science
+/////////////////////////////
+/*
+/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
+*/
+
+/////////////////////////////
+// General
+/////////////////////////////
+/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
+
+/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
+
+/datum/storeitem/pipe
+ name = "smoking pipe"
+ desc = "A pipe, for smoking. Probably made of meershaum or something."
+ typepath = /obj/item/clothing/mask/cigarette/pipe
+ cost = 350
+
+/datum/storeitem/katana
+ name = "replica katana"
+ desc = "Woefully underpowered in D20."
+ typepath = /obj/item/toy/katana
+ cost = 500
+
+/datum/storeitem/violin
+ name = "space violin"
+ desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
+ typepath = /obj/item/device/violin
+ cost = 500
+
+/datum/storeitem/baby
+ name = "Toddler"
+ desc = "This baby looks almost real. Wait, did it just burp?"
+ typepath = /obj/item/weapon/toddler
+ cost = 1000
+
+/datum/storeitem/laserpointer
+ name = "laser pointer"
+ desc = "Don't shine it in your eyes!"
+ typepath = /obj/item/device/laser_pointer
+ cost = 1000
+
+/datum/storeitem/banhammer
+ desc = "A banhammer"
+ name = "banhammer"
+ typepath = /obj/item/weapon/banhammer
+ cost = 2000
diff --git a/code/modules/store/store.dm b/code/modules/store/store.dm
new file mode 100644
index 00000000000..02a50c1b31a
--- /dev/null
+++ b/code/modules/store/store.dm
@@ -0,0 +1,65 @@
+/*****************************
+ * /vg/station In-Game Store *
+ *****************************
+
+By Nexypoo
+
+The idea is to give people who do their jobs a reward.
+
+Ideally, these items should be cosmetic in nature to avoid fucking up round balance.
+People joining the round get between $100 and $500. Keep this in mind.
+
+Money should not persist between rounds, although a "bank" system to voluntarily store
+money between rounds might be cool. It'd need to be a bit volatile: perhaps completing
+job objectives = good stock market, shitty job objective completion = shitty economy.
+
+Goal for now is to get the store itself working, however.
+*/
+
+var/global/datum/store/centcomm_store=new
+
+/datum/store
+ var/list/datum/storeitem/items=list()
+ var/list/datum/storeorder/orders=list()
+
+ var/obj/machinery/account_database/linked_db
+
+/datum/store/New()
+ for(var/itempath in typesof(/datum/storeitem) - /datum/storeitem/)
+ items += new itempath()
+
+/datum/store/proc/charge(var/datum/mind/mind,var/amount,var/datum/storeitem/item)
+ if(!mind.initial_account)
+ //testing("No initial_account")
+ return 0
+ if(mind.initial_account.money < amount)
+ //testing("Not enough cash")
+ return 0
+ mind.initial_account.money -= amount
+ 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)]"
+ mind.initial_account.transaction_log.Add(T)
+ return 1
+
+/datum/store/proc/reconnect_database()
+ for(var/obj/machinery/account_database/DB in world)
+ if(DB.z == 1)
+ linked_db = DB
+ break
+
+/datum/store/proc/PlaceOrder(var/mob/living/usr, var/itemID)
+ // Get our item, first.
+ var/datum/storeitem/item = items[itemID]
+ if(!item)
+ return 0
+ // Try to deduct funds.
+ if(!charge(usr.mind,item.cost,item))
+ return 0
+ // Give them the item.
+ item.deliver(usr)
+ return 1
\ No newline at end of file