diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index 815c55b2ec..fc2d16ea63 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -18,7 +18,7 @@ #define BE_ALIEN 0x40 #define BE_AI 0x80 #define BE_CULTIST 0x100 -#define BE_MONKEY 0x200 +#define BE_RENEGADE 0x200 #define BE_NINJA 0x400 #define BE_RAIDER 0x800 #define BE_PLANT 0x1000 @@ -37,7 +37,7 @@ var/list/be_special_flags = list( "Xenomorph" = BE_ALIEN, "Positronic Brain" = BE_AI, "Cultist" = BE_CULTIST, - "Monkey" = BE_MONKEY, + "Renegade" = BE_RENEGADE, "Ninja" = BE_NINJA, "Raider" = BE_RAIDER, "Diona" = BE_PLANT, diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm index 8060dcee21..1f65364e1a 100644 --- a/code/__defines/machinery.dm +++ b/code/__defines/machinery.dm @@ -38,7 +38,7 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called #define NETWORK_ENGINEERING "Engineering" #define NETWORK_ENGINEERING_OUTPOST "Engineering Outpost" #define NETWORK_ERT "ZeEmergencyResponseTeam" -#define NETWORK_EXODUS "Northern Star" +#define NETWORK_EXODUS station_short #define NETWORK_MEDICAL "Medical" #define NETWORK_MERCENARY "MercurialNet" #define NETWORK_MINE "Mining Outpost" diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index 27fc17055c..143c7aa251 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -31,6 +31,7 @@ #define LANGUAGE_TRADEBAND "Tradeband" #define LANGUAGE_GUTTER "Gutter" #define LANGUAGE_SCHECHI "Schechi" +#define LANGUAGE_CULT "Cult" // Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted. diff --git a/code/_helpers/names.dm b/code/_helpers/names.dm index 54a922c30d..dbd19610e6 100644 --- a/code/_helpers/names.dm +++ b/code/_helpers/names.dm @@ -44,7 +44,7 @@ var/religion_name = null return capitalize(name) /proc/system_name() - return "Vir" + return starsys_name /proc/station_name() if (station_name) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index be836248a6..68cb5276fa 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -324,4 +324,11 @@ proc/TextPreview(var/string,var/len=40) return 1 return 0 +/** + * Strip out the special beyond characters for \proper and \improper + * from text that will be sent to the browser. + */ +/proc/strip_improper(var/text) + return replacetext(replacetext(text, "\proper", ""), "\improper", "") + #define gender2text(gender) capitalize(gender) \ No newline at end of file diff --git a/code/_macros.dm b/code/_macros.dm index ed54f8d4a6..45e67c7530 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -7,6 +7,8 @@ #define isanimal(A) istype(A, /mob/living/simple_animal) +#define isairlock(A) istype(A, /obj/machinery/door/airlock) + #define isbrain(A) istype(A, /mob/living/carbon/brain) #define iscarbon(A) istype(A, /mob/living/carbon) diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 44c2a762bb..37d9616ea5 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -40,9 +40,9 @@ using.layer = SCREEN_LAYER adding += using -//Crew Monitorting +//Crew Monitoring using = new /obj/screen() - using.name = "Crew Monitorting" + using.name = "Crew Monitoring" using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "crew_monitor" using.screen_loc = ui_ai_crew_monitor diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index cbb49166c0..522db6e1c4 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -420,7 +420,7 @@ var/mob/living/silicon/ai/AI = usr AI.toggle_camera_light() - if("Crew Monitorting") + if("Crew Monitoring") if(isAI(usr)) var/mob/living/silicon/ai/AI = usr AI.subsystem_crew_monitor() diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index bd817baf41..d456c52e71 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -21,7 +21,7 @@ var/list/gamemode_cache = list() var/log_pda = 0 // log pda messages var/log_hrefs = 0 // logs all links clicked in-game. Could be used for debugging and tracking down exploits var/log_runtime = 0 // logs world.log to a file - var/sql_enabled = 1 // for sql switching + var/sql_enabled = 0 // for sql switching var/allow_admin_ooccolor = 0 // Allows admins with relevant permissions to have their own ooc colour var/allow_vote_restart = 0 // allow votes to restart var/ert_admin_call_only = 0 @@ -289,7 +289,7 @@ var/list/gamemode_cache = list() config.log_access = 1 if ("sql_enabled") - config.sql_enabled = text2num(value) + config.sql_enabled = 1 if ("log_say") config.log_say = 1 diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm index 001372b4e3..e330024475 100644 --- a/code/controllers/hooks-defs.dm +++ b/code/controllers/hooks-defs.dm @@ -1,87 +1,87 @@ -/** - * Startup hook. - * Called in world.dm when the server starts. - */ -/hook/startup - -/** - * Roundstart hook. - * Called in gameticker.dm when a round starts. - */ -/hook/roundstart - -/** - * Roundend hook. - * Called in gameticker.dm when a round ends. - */ -/hook/roundend - -/** - * Death hook. - * Called in death.dm when someone dies. - * Parameters: var/mob/living/carbon/human, var/gibbed - */ -/hook/death - -/** - * Cloning hook. - * Called in cloning.dm when someone is brought back by the wonders of modern science. - * Parameters: var/mob/living/carbon/human - */ -/hook/clone - -/** - * Debrained hook. - * Called in brain_item.dm when someone gets debrained. - * Parameters: var/obj/item/organ/brain - */ -/hook/debrain - -/** - * Borged hook. - * Called in robot_parts.dm when someone gets turned into a cyborg. - * Parameters: var/mob/living/silicon/robot - */ -/hook/borgify - -/** - * Podman hook. - * Called in podmen.dm when someone is brought back as a Diona. - * Parameters: var/mob/living/carbon/alien/diona - */ -/hook/harvest_podman - -/** - * Payroll revoked hook. - * Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal. - * Parameters: var/datum/money_account - */ -/hook/revoke_payroll - -/** - * Account suspension hook. - * Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal. - * Parameters: var/datum/money_account - */ -/hook/change_account_status - -/** - * Employee reassignment hook. - * Called in card.dm when someone's card is reassigned at the HoP's desk. - * Parameters: var/obj/item/weapon/card/id - */ -/hook/reassign_employee - -/** - * Employee terminated hook. - * Called in card.dm when someone's card is terminated at the HoP's desk. - * Parameters: var/obj/item/weapon/card/id - */ -/hook/terminate_employee - -/** - * Crate sold hook. - * Called in supplyshuttle.dm when a crate is sold on the shuttle. - * Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle - */ -/hook/sell_crate +/** + * Startup hook. + * Called in world.dm when the server starts. + */ +/hook/startup + +/** + * Roundstart hook. + * Called in gameticker.dm when a round starts. + */ +/hook/roundstart + +/** + * Roundend hook. + * Called in gameticker.dm when a round ends. + */ +/hook/roundend + +/** + * Death hook. + * Called in death.dm when someone dies. + * Parameters: var/mob/living/carbon/human, var/gibbed + */ +/hook/death + +/** + * Cloning hook. + * Called in cloning.dm when someone is brought back by the wonders of modern science. + * Parameters: var/mob/living/carbon/human + */ +/hook/clone + +/** + * Debrained hook. + * Called in brain_item.dm when someone gets debrained. + * Parameters: var/obj/item/organ/brain + */ +/hook/debrain + +/** + * Borged hook. + * Called in robot_parts.dm when someone gets turned into a cyborg. + * Parameters: var/mob/living/silicon/robot + */ +/hook/borgify + +/** + * Podman hook. + * Called in podmen.dm when someone is brought back as a Diona. + * Parameters: var/mob/living/carbon/alien/diona + */ +/hook/harvest_podman + +/** + * Payroll revoked hook. + * Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal. + * Parameters: var/datum/money_account + */ +/hook/revoke_payroll + +/** + * Account suspension hook. + * Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal. + * Parameters: var/datum/money_account + */ +/hook/change_account_status + +/** + * Employee reassignment hook. + * Called in card.dm when someone's card is reassigned at the HoP's desk. + * Parameters: var/obj/item/weapon/card/id + */ +/hook/reassign_employee + +/** + * Employee terminated hook. + * Called in card.dm when someone's card is terminated at the HoP's desk. + * Parameters: var/obj/item/weapon/card/id + */ +/hook/terminate_employee + +/** + * Crate sold hook. + * Called in supplyshuttle.dm when a crate is sold on the shuttle. + * Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle + */ +/hook/sell_crate diff --git a/code/controllers/observer_listener/atom/observer.dm b/code/controllers/observer_listener/atom/observer.dm new file mode 100644 index 0000000000..da38580414 --- /dev/null +++ b/code/controllers/observer_listener/atom/observer.dm @@ -0,0 +1,31 @@ +#define OBSERVER_EVENT_DESTROY "OnDestroy" + +/atom + var/list/observer_events + +/atom/Destroy() + var/list/destroy_listeners = get_listener_list_from_event(OBSERVER_EVENT_DESTROY) + if(destroy_listeners) + for(var/destroy_listener in destroy_listeners) + call(destroy_listener, destroy_listeners[destroy_listener])(src) + + for(var/list/listeners in observer_events) + listeners.Cut() + + return ..() + +/atom/proc/register(var/event, var/procOwner, var/proc_call) + var/list/listeners = get_listener_list_from_event(event) + listeners[procOwner] = proc_call + +/atom/proc/unregister(var/event, var/procOwner) + var/list/listeners = get_listener_list_from_event(event) + listeners -= procOwner + +/atom/proc/get_listener_list_from_event(var/observer_event) + if(!observer_events) observer_events = list() + var/list/listeners = observer_events[observer_event] + if(!listeners) + listeners = list() + observer_events[observer_event] = listeners + return listeners diff --git a/code/controllers/observer_listener/datum/observer.dm b/code/controllers/observer_listener/datum/observer.dm new file mode 100644 index 0000000000..61f6fbf180 --- /dev/null +++ b/code/controllers/observer_listener/datum/observer.dm @@ -0,0 +1,28 @@ +/* +#define OBSERVER_EVENT_DESTROY "OnDestroy" + +/datum + var/list/observer_events + +/datum/Destroy() + for(var/list/listeners in observer_events) + listeners.Cut() + + return ..() + +/datum/proc/register(var/event, var/procOwner, var/proc_call) + var/list/listeners = get_listener_list_from_event(event) + listeners[procOwner] = proc_call + +/datum/proc/unregister(var/event, var/procOwner) + var/list/listeners = get_listener_list_from_event(event) + listeners -= procOwner + +/datum/proc/get_listener_list_from_event(var/observer_event) + if(!observer_events) observer_events = list() + var/list/listeners = observer_events[observer_event] + if(!listeners) + listeners = list() + observer_events[observer_event] = listeners + return listeners +*/ diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index a97840c067..bd3d82247c 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -264,7 +264,7 @@ var/global/datum/shuttle_controller/shuttle_controller var/datum/shuttle/ferry/multidock/specops/ERT = new() ERT.location = 0 ERT.warmup_time = 10 - ERT.area_offsite = locate(/area/shuttle/specops/station) //centcom is the home station, the Northern Star is offsite + ERT.area_offsite = locate(/area/shuttle/specops/station) //centcom is the home station, the player station is offsite ERT.area_station = locate(/area/shuttle/specops/centcom) ERT.docking_controller_tag = "specops_shuttle_port" ERT.docking_controller_tag_station = "specops_shuttle_port" diff --git a/code/datums/EPv2.dm b/code/datums/EPv2.dm index f0e912fa55..d5b85475db 100644 --- a/code/datums/EPv2.dm +++ b/code/datums/EPv2.dm @@ -103,25 +103,26 @@ var/global/list/all_exonet_connections = list() return null // Proc: send_message() -// Parameters: 2 (target_address - the desired address to send the message to, message - the message to send) +// Parameters: 3 (target_address - the desired address to send the message to, message - the message to send, text - the message text if message is of type "text") // Description: Sends the message to target_address, by calling receive_message() on the desired datum. -/datum/exonet_protocol/proc/send_message(var/target_address, var/message) +/datum/exonet_protocol/proc/send_message(var/target_address, var/message, var/text) if(!address) return 0 for(var/datum/exonet_protocol/exonet in all_exonet_connections) if(exonet.address == target_address) - exonet.receive_message(holder, address, message) + exonet.receive_message(holder, address, message, text) break // Proc: receive_message() -// Parameters: 3 (origin_atom - the origin datum's holder, origin_address - the address the message originated from, message - the message that was sent) +// Parameters: 4 (origin_atom - the origin datum's holder, origin_address - the address the message originated from, message - the message that was sent, +// text - the message text if message is of type "text") // Description: Called when send_message() successfully reaches the intended datum. By default, calls receive_exonet_message() on the holder atom. -/datum/exonet_protocol/proc/receive_message(var/atom/origin_atom, var/origin_address, var/message) - holder.receive_exonet_message(origin_atom, origin_address, message) +/datum/exonet_protocol/proc/receive_message(var/atom/origin_atom, var/origin_address, var/message, var/text) + holder.receive_exonet_message(origin_atom, origin_address, message, text) return // Proc: receive_exonet_message() // Parameters: 3 (origin_atom - the origin datum's holder, origin_address - the address the message originated from, message - the message that was sent) // Description: Override this to make your atom do something when a message is received. -/atom/proc/receive_exonet_message(var/atom/origin_atom, var/origin_address, var/message) +/atom/proc/receive_exonet_message(var/atom/origin_atom, var/origin_address, var/message, var/text) return diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 09281bf1f7..f5549fa1a8 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -74,10 +74,11 @@ if (title_image) title_attributes = "class='uiTitle icon' style='background-image: url([title_image]);'" - return {" + return {" - + + [head_content] diff --git a/code/datums/mind.dm b/code/datums/mind.dm index fb5a2e754c..824b52a2fe 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -344,7 +344,7 @@ log_admin("[key_name_admin(usr)] has de-loyalty implanted [current].") if("add") H << "You somehow have become the recepient of a loyalty transplant, and it just activated!" - H.implant_loyalty(H, override = TRUE) + H.implant_loyalty(override = TRUE) log_admin("[key_name_admin(usr)] has loyalty implanted [current].") else else if (href_list["silicon"]) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 601533acc3..9d2f3e6f45 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -43,20 +43,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee group = "Security" hidden = 1 -/datum/supply_packs/forensics - name = "Auxiliary forensic tools" - contains = list( - /obj/item/weapon/forensics/sample_kit, - /obj/item/weapon/forensics/sample_kit/powder, - /obj/item/weapon/storage/box/swabs = 3, - /obj/item/device/uv_light, - /obj/item/weapon/reagent_containers/spray/luminol - ) - cost = 30 - containertype = /obj/structure/closet/crate - containername = "Auxiliary forensic tools" - group = "Security" - /datum/supply_packs/food name = "Kitchen supply crate" contains = list( @@ -132,7 +118,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, /obj/item/weapon/lipstick/random, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 2, - /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 4 + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 4, + /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass = 4 ) cost = 20 containertype = /obj/structure/closet/crate @@ -1614,9 +1601,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/device/camera_film = 2, /obj/item/weapon/storage/photo_album, /obj/item/device/reagent_scanner, - /obj/item/device/flashlight/maglight + /obj/item/device/flashlight/maglight, + /obj/item/weapon/storage/briefcase/crimekit ) - cost = 35 + cost = 40 containertype = "/obj/structure/closet/crate/secure" containername = "Forensic equipment" access = access_forensics_lockers diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm new file mode 100644 index 0000000000..b45cf3be3c --- /dev/null +++ b/code/datums/uplink/ammunition.dm @@ -0,0 +1,67 @@ +/************* +* Ammunition * +*************/ +/datum/uplink_item/item/ammo + item_cost = 2 + category = /datum/uplink_category/ammunition + +/datum/uplink_item/item/ammo/a357 + name = ".357" + path = /obj/item/ammo_magazine/a357 + +/datum/uplink_item/item/ammo/mc9mm + name = "9mm" + path = /obj/item/ammo_magazine/mc9mm + +/datum/uplink_item/item/ammo/c45m + name = ".45" + path = /obj/item/ammo_magazine/c45m + +/datum/uplink_item/item/ammo/darts + name = "Darts" + path = /obj/item/ammo_magazine/chemdart + +/datum/uplink_item/item/ammo/sniperammo + name = "14.5mm" + path = /obj/item/weapon/storage/box/sniperammo + +/datum/uplink_item/item/ammo/a556 + name = "5.56mm" + path = /obj/item/ammo_magazine/a556 + +/datum/uplink_item/item/ammo/a556/ap + name = "5.56mm AP" + path = /obj/item/ammo_magazine/a556/ap + +/datum/uplink_item/item/ammo/a10mm + name = "10mm" + path = /obj/item/ammo_magazine/a10mm + +/datum/uplink_item/item/ammo/a762 + name = "7.62mm" + path = /obj/item/ammo_magazine/a762 + +/datum/uplink_item/item/ammo/a762/ap + name = "7.62mm AP" + path = /obj/item/ammo_magazine/a762/ap + +/datum/uplink_item/item/ammo/g12 + name = "12 gauge" + path = /obj/item/ammo_magazine/g12 + +/datum/uplink_item/item/ammo/g12/beanbag + name = "12 gauge beanbag" + path = /obj/item/ammo_magazine/g12/beanbag + item_cost = 1 // Discount due to it being LTL. + +/datum/uplink_item/item/ammo/g12/pellet + name = "12 gauge pellet" + path = /obj/item/ammo_magazine/g12/pellet + +/datum/uplink_item/item/ammo/g12/stun + name = "12 gauge stun" + path = /obj/item/weapon/storage/box/stunshells + +/datum/uplink_item/item/ammo/g12/flash + name = "12 gauge flash" + path = /obj/item/weapon/storage/box/flashshells \ No newline at end of file diff --git a/code/datums/uplink/announcements.dm b/code/datums/uplink/announcements.dm new file mode 100644 index 0000000000..1b3cf75462 --- /dev/null +++ b/code/datums/uplink/announcements.dm @@ -0,0 +1,109 @@ +/**************** +* Announcements * +*****************/ +/datum/uplink_item/abstract/announcements + category = /datum/uplink_category/services + +/datum/uplink_item/abstract/announcements/buy(var/obj/item/device/uplink/U, var/mob/user) + . = ..() + if(.) + log_and_message_admins("has triggered a falsified [src]", user) + +/datum/uplink_item/abstract/announcements/fake_centcom + item_cost = DEFAULT_TELECRYSTAL_AMOUNT / 2 + +/datum/uplink_item/abstract/announcements/fake_centcom/New() + ..() + name = "[command_name()] Update Announcement" + desc = "Causes a falsified [command_name()] Update. Triggers immediately after supplying additional data." + +/datum/uplink_item/abstract/announcements/fake_centcom/extra_args(var/mob/user) + var/title = sanitize(input("Enter your announcement title.", "Announcement Title") as null|text) + if(!title) + return + var/message = sanitize(input("Enter your announcement message.", "Announcement Title") as null|text) + if(!message) + return + return list("title" = title, "message" = message) + +/datum/uplink_item/abstract/announcements/fake_centcom/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args) + command_announcement.Announce(args["message"], args["title"]) + return 1 + +/datum/uplink_item/abstract/announcements/fake_crew_arrival + name = "Crew Arrival Announcement/Records" + desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!" + item_cost = 4 + +/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args) + if(!user) + return 0 + + var/obj/item/weapon/card/id/I = user.GetIdCard() + var/datum/data/record/random_general_record + var/datum/data/record/random_medical_record + if(data_core.general.len) + random_general_record = pick(data_core.general) + random_medical_record = find_medical_record("id", random_general_record.fields["id"]) + + var/datum/data/record/general = data_core.CreateGeneralRecord(user) + if(I) + general.fields["age"] = I.age + general.fields["rank"] = I.assignment + general.fields["real_rank"] = I.assignment + general.fields["name"] = I.registered_name + general.fields["sex"] = I.sex + else + var/mob/living/carbon/human/H + if(istype(user,/mob/living/carbon/human)) + H = user + general.fields["age"] = H.age + else + general.fields["age"] = initial(H.age) + var/assignment = GetAssignment(user) + general.fields["rank"] = assignment + general.fields["real_rank"] = assignment + general.fields["name"] = user.real_name + general.fields["sex"] = capitalize(user.gender) + + general.fields["species"] = user.get_species() + var/datum/data/record/medical = data_core.CreateMedicalRecord(general.fields["name"], general.fields["id"]) + data_core.CreateSecurityRecord(general.fields["name"], general.fields["id"]) + + if(!random_general_record) + general.fields["citizenship"] = random_general_record.fields["citizenship"] + general.fields["faction"] = random_general_record.fields["faction"] + general.fields["fingerprint"] = random_general_record.fields["fingerprint"] + general.fields["home_system"] = random_general_record.fields["home_system"] + general.fields["religion"] = random_general_record.fields["religion"] + if(random_medical_record) + medical.fields["b_type"] = random_medical_record.fields["b_type"] + medical.fields["b_dna"] = random_medical_record.fields["b_type"] + + if(I) + general.fields["fingerprint"] = I.fingerprint_hash + medical.fields["b_type"] = I.blood_type + medical.fields["b_dna"] = I.dna_hash + + AnnounceArrivalSimple(general.fields["name"], general.fields["rank"]) + return 1 + +/datum/uplink_item/abstract/announcements/fake_ion_storm + name = "Ion Storm Announcement" + desc = "Interferes with the station's ion sensors. Triggers immediately upon investment." + item_cost = 1 + +/datum/uplink_item/abstract/announcements/fake_ion_storm/get_goods(var/obj/item/device/uplink/U, var/loc) + ion_storm_announcement() + return 1 + +/datum/uplink_item/abstract/announcements/fake_radiation + name = "Radiation Storm Announcement" + desc = "Interferes with the station's radiation sensors. Triggers immediately upon investment." + item_cost = 3 + +/datum/uplink_item/abstract/announcements/fake_radiation/get_goods(var/obj/item/device/uplink/U, var/loc) + var/datum/event_meta/EM = new(EVENT_LEVEL_MUNDANE, "Fake Radiation Storm", add_to_queue = 0) + new/datum/event/radiation_storm/syndicate(EM) + return 1 + diff --git a/code/datums/uplink/armor.dm b/code/datums/uplink/armor.dm new file mode 100644 index 0000000000..30a41d8edb --- /dev/null +++ b/code/datums/uplink/armor.dm @@ -0,0 +1,15 @@ +/******** +* Armor * +********/ +/datum/uplink_item/item/armor + category = /datum/uplink_category/armor + +/datum/uplink_item/item/armor/combat + name = "Combat Armor Set" + item_cost = 5 + path = /obj/item/weapon/storage/box/syndie_kit/combat_armor + +/datum/uplink_item/item/armor/heavy_vest + name = "Heavy Armor Vest" + item_cost = 4 + path = /obj/item/clothing/suit/storage/vest/heavy/merc diff --git a/code/datums/uplink/badassery.dm b/code/datums/uplink/badassery.dm new file mode 100644 index 0000000000..b837625c8a --- /dev/null +++ b/code/datums/uplink/badassery.dm @@ -0,0 +1,78 @@ +/************ +* Badassery * +************/ +/datum/uplink_item/item/badassery + category = /datum/uplink_category/badassery + +/datum/uplink_item/item/badassery/balloon + name = "For showing that You Are The BOSS (Useless Balloon)" + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + path = /obj/item/toy/syndicateballoon + +/datum/uplink_item/item/badassery/balloon/NT + name = "For showing that you love NT SOO much (Useless Balloon)" + path = /obj/item/toy/nanotrasenballoon + +/************** +* Random Item * +**************/ +/datum/uplink_item/item/badassery/random_one + name = "Random Item" + desc = "Buys you one random item." + +/datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user) + var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses) + return item.buy(U, user) + +/datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U) + return default_uplink_selection.get_random_item(U.uses, U) != null + +/datum/uplink_item/item/badassery/random_many + name = "Random Items" + desc = "Buys you as many random items you can afford. Convenient packaging NOT included." + +/datum/uplink_item/item/badassery/random_many/cost(var/telecrystals) + return max(1, telecrystals) + +/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc) + var/list/bought_items = list() + for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc)) + UI.purchase_log(U) + var/obj/item/I = UI.get_goods(U, loc) + if(istype(I)) + bought_items += I + + return bought_items + +/datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U) + feedback_add_details("traitor_uplink_items_bought", "[src]") + log_and_message_admins("used \the [U.loc] to buy \a [src]") + +/**************** +* Surplus Crate * +****************/ +/datum/uplink_item/item/badassery/surplus + name = "Surplus Crate" + item_cost = 40 + var/item_worth = 60 + var/icon + +/datum/uplink_item/item/badassery/surplus/New() + ..() + desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers." + +/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc) + var/obj/structure/largecrate/C = new(loc) + var/random_items = get_random_uplink_items(null, item_worth, C) + for(var/datum/uplink_item/I in random_items) + I.purchase_log(U) + I.get_goods(U, C) + + return C + +/datum/uplink_item/item/badassery/surplus/log_icon() + if(!icon) + var/obj/structure/largecrate/C = /obj/structure/largecrate + icon = image(initial(C.icon), initial(C.icon_state)) + + return "\icon[icon]" \ No newline at end of file diff --git a/code/datums/uplink/grenades.dm b/code/datums/uplink/grenades.dm new file mode 100644 index 0000000000..f7c6d1a072 --- /dev/null +++ b/code/datums/uplink/grenades.dm @@ -0,0 +1,35 @@ +/*********** +* Grenades * +************/ +/datum/uplink_item/item/grenades + category = /datum/uplink_category/grenades + +/datum/uplink_item/item/grenades/anti_photon + name = "5xPhoton Disruption Grenades" + item_cost = 2 + path = /obj/item/weapon/storage/box/anti_photons + +/datum/uplink_item/item/grenades/emp + name = "5xEMP Grenades" + item_cost = 3 + path = /obj/item/weapon/storage/box/emps + +/datum/uplink_item/item/grenades/smoke + name = "7xSmoke Grenades" + item_cost = 2 + path = /obj/item/weapon/storage/box/smokes + +/datum/uplink_item/item/grenades/frags + name = "5xFrag Grenades" + item_cost = 6 + path = /obj/item/weapon/storage/box/frags + +/datum/uplink_item/item/grenades/flashbnags + name = "7xFlashbangs" + item_cost = 4 + path = /obj/item/weapon/storage/box/flashbangs + +/datum/uplink_item/item/grenades/metalfoam + name = "7xMetal Foam Grenades" + item_cost = 3 + path = /obj/item/weapon/storage/box/metalfoam \ No newline at end of file diff --git a/code/datums/uplink/hardsuit_modules.dm b/code/datums/uplink/hardsuit_modules.dm new file mode 100644 index 0000000000..66ecfb6bf9 --- /dev/null +++ b/code/datums/uplink/hardsuit_modules.dm @@ -0,0 +1,40 @@ +/******************* +* Hardsuit Modules * +*******************/ +/datum/uplink_item/item/hardsuit_modules + category = /datum/uplink_category/hardsuit_modules + +/datum/uplink_item/item/hardsuit_modules/thermal + name = "Thermal Scanner" + item_cost = 2 + path = /obj/item/rig_module/vision/thermal + +/datum/uplink_item/item/hardsuit_modules/energy_net + name = "Net Projector" + item_cost = 3 + path = /obj/item/rig_module/fabricator/energy_net + +/datum/uplink_item/item/ewar_voice + name = "Electrowarfare Suite and Voice Synthesiser" + item_cost = 4 + path = /obj/item/weapon/storage/box/syndie_kit/ewar_voice + +/datum/uplink_item/item/hardsuit_modules/maneuvering_jets + name = "Maneuvering Jets" + item_cost = 4 + path = /obj/item/rig_module/maneuvering_jets + +/datum/uplink_item/item/hardsuit_modules/egun + name = "Mounted Energy Gun" + item_cost = 6 + path = /obj/item/rig_module/mounted/egun + +/datum/uplink_item/item/hardsuit_modules/power_sink + name = "Power Sink" + item_cost = 6 + path = /obj/item/rig_module/power_sink + +/datum/uplink_item/item/hardsuit_modules/laser_canon + name = "Mounted Laser Cannon" + item_cost = 8 + path = /obj/item/rig_module/mounted diff --git a/code/datums/uplink/implants.dm b/code/datums/uplink/implants.dm new file mode 100644 index 0000000000..c4302464b6 --- /dev/null +++ b/code/datums/uplink/implants.dm @@ -0,0 +1,25 @@ +/*********** +* Implants * +***********/ +/datum/uplink_item/item/implants + category = /datum/uplink_category/implants + +/datum/uplink_item/item/implants/imp_freedom + name = "Freedom Implant" + item_cost = 3 + path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom + +/datum/uplink_item/item/implants/imp_compress + name = "Compressed Matter Implant" + item_cost = 4 + path = /obj/item/weapon/storage/box/syndie_kit/imp_compress + +/datum/uplink_item/item/implants/imp_explosive + name = "Explosive Implant (DANGER!)" + item_cost = 6 + path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive + +/datum/uplink_item/item/implants/imp_uplink + name = "Uplink Implant" //Original name: "Uplink Implant (Contains 5 Telecrystals)" + item_cost = 5 //Original cost: 10 + path = /obj/item/weapon/storage/box/syndie_kit/imp_uplink diff --git a/code/datums/uplink/medical.dm b/code/datums/uplink/medical.dm new file mode 100644 index 0000000000..d14ca10a07 --- /dev/null +++ b/code/datums/uplink/medical.dm @@ -0,0 +1,36 @@ +/********** +* Medical * +**********/ +/datum/uplink_item/item/medical + category = /datum/uplink_category/medical + +/datum/uplink_item/item/medical/sinpockets + name = "Box of Sin-Pockets" + item_cost = 1 + path = /obj/item/weapon/storage/box/sinpockets + +/datum/uplink_item/item/medical/surgery + name = "Surgery kit" + item_cost = 6 + path = /obj/item/weapon/storage/firstaid/surgery + +/datum/uplink_item/item/medical/combat + name = "Combat medical kit" + item_cost = 6 + path = /obj/item/weapon/storage/firstaid/combat + +/datum/uplink_item/item/medical/freezer + name = "Portable Freezer" + item_cost = 2 + path = /obj/item/weapon/storage/box/freezer + +/datum/uplink_item/item/medical/ambrosiaseeds + name = "Box of 7x ambrosia seed packets" + item_cost = 1 + path = /obj/item/weapon/storage/box/ambrosia + +/datum/uplink_item/item/medical/ambrosiadeusseeds + name = "Box of 7x ambrosia deus seed packets" + item_cost = 2 + path = /obj/item/weapon/storage/box/ambrosiadeus + diff --git a/code/datums/uplink/stealth_items.dm b/code/datums/uplink/stealth_items.dm new file mode 100644 index 0000000000..31364a0953 --- /dev/null +++ b/code/datums/uplink/stealth_items.dm @@ -0,0 +1,45 @@ +/******************************* +* Stealth and Camouflage Items * +*******************************/ +/datum/uplink_item/item/stealth_items + category = /datum/uplink_category/stealth_items + +/datum/uplink_item/item/stealth_items/id + name = "Agent ID card" + item_cost = 2 + path = /obj/item/weapon/card/id/syndicate + +/datum/uplink_item/item/stealth_items/syndigaloshes + name = "No-Slip Shoes" + item_cost = 2 + path = /obj/item/clothing/shoes/syndigaloshes + +/datum/uplink_item/item/stealth_items/spy + name = "Bug Kit" + item_cost = 2 + path = /obj/item/weapon/storage/box/syndie_kit/spy + +/datum/uplink_item/item/stealth_items/chameleon_kit + name = "Chameleon Kit" + item_cost = 3 + path = /obj/item/weapon/storage/box/syndie_kit/chameleon + +/datum/uplink_item/item/stealth_items/chameleon_projector + name = "Chameleon-Projector" + item_cost = 4 + path = /obj/item/device/chameleon + +/datum/uplink_item/item/stealth_items/chameleon_projector + name = "Chameleon-Projector" + item_cost = 4 + path = /obj/item/device/chameleon + +/datum/uplink_item/item/stealth_items/voice + name = "Voice Changer" + item_cost = 4 + path = /obj/item/clothing/mask/gas/voice + +/datum/uplink_item/item/stealth_items/camera_floppy + name = "Camera Network Access - Floppy" + item_cost = 6 + path = /obj/item/weapon/disk/file/cameras/syndicate diff --git a/code/datums/uplink/stealthy_weapons.dm b/code/datums/uplink/stealthy_weapons.dm new file mode 100644 index 0000000000..ead34c5646 --- /dev/null +++ b/code/datums/uplink/stealthy_weapons.dm @@ -0,0 +1,35 @@ +/************************************* +* Stealthy and Inconspicuous Weapons * +*************************************/ +/datum/uplink_item/item/stealthy_weapons + category = /datum/uplink_category/stealthy_weapons + +/datum/uplink_item/item/stealthy_weapons/soap + name = "Subversive Soap" + item_cost = 1 + path = /obj/item/weapon/soap/syndie + +/datum/uplink_item/item/stealthy_weapons/concealed_cane + name = "Concealed Cane Sword" + item_cost = 1 + path = /obj/item/weapon/cane/concealed + +/datum/uplink_item/item/stealthy_weapons/detomatix + name = "Detomatix PDA Cartridge" + item_cost = 3 + path = /obj/item/weapon/cartridge/syndicate + +/datum/uplink_item/item/stealthy_weapons/parapen + name = "Paralysis Pen" + item_cost = 3 + path = /obj/item/weapon/pen/reagent/paralysis + +/datum/uplink_item/item/stealthy_weapons/cigarette_kit + name = "Cigarette Kit" + item_cost = 3 + path = /obj/item/weapon/storage/box/syndie_kit/cigarette + +/datum/uplink_item/item/stealthy_weapons/random_toxin + name = "Random Toxin - Beaker" + item_cost = 3 + path = /obj/item/weapon/storage/box/syndie_kit/toxin diff --git a/code/datums/uplink/tools.dm b/code/datums/uplink/tools.dm new file mode 100644 index 0000000000..fb1b52c068 --- /dev/null +++ b/code/datums/uplink/tools.dm @@ -0,0 +1,85 @@ +/******************** +* Devices and Tools * +********************/ +/datum/uplink_item/item/tools + category = /datum/uplink_category/tools + +/datum/uplink_item/item/tools/toolbox + name = "Fully Loaded Toolbox" + item_cost = 1 + path = /obj/item/weapon/storage/toolbox/syndicate + +/datum/uplink_item/item/tools/plastique + name = "C-4 (Destroys walls)" + item_cost = 2 + path = /obj/item/weapon/plastique + +/datum/uplink_item/item/tools/encryptionkey_radio + name = "Encrypted Radio Channel Key" + item_cost = 2 + path = /obj/item/device/encryptionkey/syndicate + +/datum/uplink_item/item/tools/encryptionkey_binary + name = "Binary Translator Key" + item_cost = 3 + path = /obj/item/device/encryptionkey/binary + +/datum/uplink_item/item/tools/emag + name = "Cryptographic Sequencer" + item_cost = 3 + path = /obj/item/weapon/card/emag + +/datum/uplink_item/item/tools/clerical + name = "Morphic Clerical Kit" + item_cost = 3 + path = /obj/item/weapon/storage/box/syndie_kit/clerical + +/datum/uplink_item/item/tools/space_suit + name = "Space Suit" + item_cost = 3 + path = /obj/item/weapon/storage/box/syndie_kit/space + +/datum/uplink_item/item/tools/thermal + name = "Thermal Imaging Glasses" + item_cost = 3 + path = /obj/item/clothing/glasses/thermal/syndi + +/datum/uplink_item/item/tools/powersink + name = "Powersink (DANGER!)" + item_cost = 5 + path = /obj/item/device/powersink + +/datum/uplink_item/item/tools/ai_module + name = "Hacked AI Upload Module" + item_cost = 7 + path = /obj/item/weapon/aiModule/syndicate + +/datum/uplink_item/item/tools/supply_beacon + name = "Hacked Supply Beacon (DANGER!)" + item_cost = 7 + path = /obj/item/supply_beacon + +/datum/uplink_item/item/tools/teleporter + name = "Teleporter Circuit Board" + item_cost = 20 + path = /obj/item/weapon/circuitboard/teleporter + +/datum/uplink_item/item/tools/money + name = "Operations Funding" + item_cost = 3 + path = /obj/item/weapon/storage/secure/briefcase/money + desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities." + +/datum/uplink_item/item/tools/crystal + name = "Tradable Crystal" + item_cost = 1 + path = /obj/item/device/telecrystal + desc = "A telecrystal that can be transferred from one user to another. Be sure not to give it to just anyone." + +/datum/uplink_item/item/tools/hacking_tool + name = "Door Hacking Tool" + item_cost = 2 + path = /obj/item/device/multitool/hacktool + desc = "Appears and functions as a standard multitool until the mode is toggled by applying a screwdriver appropriately. \ + When in hacking mode this device will grant full access to any standard airlock within 20 to 40 seconds. \ + This device will also be able to immediately access the last 6 to 8 hacked airlocks." \ No newline at end of file diff --git a/code/game/objects/items/devices/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm similarity index 87% rename from code/game/objects/items/devices/uplink_categories.dm rename to code/datums/uplink/uplink_categories.dm index 68ed72a6fb..6e222b764b 100644 --- a/code/game/objects/items/devices/uplink_categories.dm +++ b/code/datums/uplink/uplink_categories.dm @@ -1,49 +1,49 @@ -/datum/uplink_category - var/name = "" - var/list/datum/uplink_item/items - -/datum/uplink_category/New() - ..() - items = list() - -/datum/uplink_category/proc/can_view(obj/item/device/uplink/U) - for(var/datum/uplink_item/item in items) - if(item.can_view(U)) - return 1 - return 0 - -/datum/uplink_category/ammunition - name = "Ammunition" - -/datum/uplink_category/grenades - name = "Grenades and Thrown Objects" - -/datum/uplink_category/visible_weapons - name = "Highly Visible and Dangerous Weapons" - -/datum/uplink_category/stealthy_weapons - name = "Stealthy and Inconspicuous Weapons" - -/datum/uplink_category/stealth_items - name = "Stealth and Camouflage Items" - -/datum/uplink_category/armor - name = "Armor" - -/datum/uplink_category/tools - name = "Devices and Tools" - -/datum/uplink_category/implants - name = "Implants" - -/datum/uplink_category/medical - name = "Medical" - -/datum/uplink_category/hardsuit_modules - name = "Hardsuit Modules" - -/datum/uplink_category/services - name = "Services" - -/datum/uplink_category/badassery - name = "Badassery" +/datum/uplink_category + var/name = "" + var/list/datum/uplink_item/items + +/datum/uplink_category/New() + ..() + items = list() + +/datum/uplink_category/proc/can_view(obj/item/device/uplink/U) + for(var/datum/uplink_item/item in items) + if(item.can_view(U)) + return 1 + return 0 + +datum/uplink_category/ammunition + name = "Ammunition" + +/datum/uplink_category/services + name = "Services" + +/datum/uplink_category/armor + name = "Armor" + +/datum/uplink_category/badassery + name = "Badassery" + +/datum/uplink_category/grenades + name = "Grenades and Thrown Objects" + +/datum/uplink_category/hardsuit_modules + name = "Hardsuit Modules" + +/datum/uplink_category/implants + name = "Implants" + +/datum/uplink_category/medical + name = "Medical" + +/datum/uplink_category/stealth_items + name = "Stealth and Camouflage Items" + +/datum/uplink_category/stealthy_weapons + name = "Stealthy and Inconspicuous Weapons" + +/datum/uplink_category/tools + name = "Devices and Tools" + +/datum/uplink_category/visible_weapons + name = "Highly Visible and Dangerous Weapons" \ No newline at end of file diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm new file mode 100644 index 0000000000..32a7d0cffb --- /dev/null +++ b/code/datums/uplink/uplink_items.dm @@ -0,0 +1,174 @@ +var/datum/uplink/uplink = new() + +/datum/uplink + var/list/items_assoc + var/list/datum/uplink_item/items + var/list/datum/uplink_category/categories + +/datum/uplink/New() + items_assoc = list() + items = init_subtypes(/datum/uplink_item) + categories = init_subtypes(/datum/uplink_category) + categories = dd_sortedObjectList(categories) + + for(var/datum/uplink_item/item in items) + if(!item.name) + items -= item + continue + + items_assoc[item.type] = item + + for(var/datum/uplink_category/category in categories) + if(item.category == category.type) + category.items += item + + for(var/datum/uplink_category/category in categories) + category.items = dd_sortedObjectList(category.items) + +/datum/uplink_item + var/name + var/desc + var/item_cost = 0 + var/datum/uplink_category/category // Item category + var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all. + +/datum/uplink_item/item + var/path = null + +/datum/uplink_item/New() + ..() + antag_roles = list() + + + +/datum/uplink_item/proc/buy(var/obj/item/device/uplink/U, var/mob/user) + var/extra_args = extra_args(user) + if(!extra_args) + return + + if(!can_buy(U)) + return + + if(U.CanUseTopic(user, inventory_state) != STATUS_INTERACTIVE) + return + + var/cost = cost(U.uses, U) + + var/goods = get_goods(U, get_turf(user), user, extra_args) + if(!goods) + return + + purchase_log(U) + user.mind.tcrystals -= cost + U.used_TC += cost + return goods + +// Any additional arguments you wish to send to the get_goods +/datum/uplink_item/proc/extra_args(var/mob/user) + return 1 + +/datum/uplink_item/proc/can_buy(obj/item/device/uplink/U) + if(cost(U.uses, U) > U.uses) + return 0 + + return can_view(U) + +/datum/uplink_item/proc/can_view(obj/item/device/uplink/U) + // Making the assumption that if no uplink was supplied, then we don't care about antag roles + if(!U || !antag_roles.len) + return 1 + + // With no owner, there's no need to check antag status. + if(!U.uplink_owner) + return 0 + + for(var/antag_role in antag_roles) + var/datum/antagonist/antag = all_antag_types[antag_role] + if(antag.is_antagonist(U.uplink_owner)) + return 1 + return 0 + +/datum/uplink_item/proc/cost(var/telecrystals, obj/item/device/uplink/U) + . = item_cost + if(U) + . = U.get_item_cost(src, .) + +/datum/uplink_item/proc/description() + return desc + +// get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying +/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc) + return 0 + +/datum/uplink_item/proc/log_icon() + return + +/datum/uplink_item/proc/purchase_log(obj/item/device/uplink/U) + feedback_add_details("traitor_uplink_items_bought", "[src]") + log_and_message_admins("used \the [U.loc] to buy \a [src]") + U.purchase_log[src] = U.purchase_log[src] + 1 + +datum/uplink_item/dd_SortValue() + return cost(INFINITY) + +/******************************** +* * +* Physical Uplink Entries * +* * +********************************/ +/datum/uplink_item/item/buy(var/obj/item/device/uplink/U, var/mob/user) + var/obj/item/I = ..() + if(!I) + return + + if(istype(I, /list)) + var/list/L = I + if(L.len) I = L[1] + + if(istype(I) && ishuman(user)) + var/mob/living/carbon/human/A = user + A.put_in_any_hand_if_possible(I) + return I + +/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc) + var/obj/item/I = new path(loc) + return I + +/datum/uplink_item/item/description() + if(!desc) + // Fallback description + var/obj/temp = src.path + desc = initial(temp.desc) + return ..() + +/datum/uplink_item/item/log_icon() + var/obj/I = path + return "\icon[I]" + +/******************************** +* * +* Abstract Uplink Entries * +* * +********************************/ +/datum/uplink_item/abstract + var/static/image/default_abstract_uplink_icon + +/datum/uplink_item/abstract/log_icon() + if(!default_abstract_uplink_icon) + default_abstract_uplink_icon = image('icons/obj/pda.dmi', "pda-syn") + + return "\icon[default_abstract_uplink_icon]" + +/**************** +* Support procs * +****************/ +/proc/get_random_uplink_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc) + var/list/bought_items = list() + while(remaining_TC) + var/datum/uplink_item/I = default_uplink_selection.get_random_item(remaining_TC, U, bought_items) + if(!I) + break + bought_items += I + remaining_TC -= I.cost(remaining_TC, U) + + return bought_items diff --git a/code/datums/uplink/visible_weapons.dm b/code/datums/uplink/visible_weapons.dm new file mode 100644 index 0000000000..4c9ac49ee1 --- /dev/null +++ b/code/datums/uplink/visible_weapons.dm @@ -0,0 +1,91 @@ +/*************************************** +* Highly Visible and Dangerous Weapons * +***************************************/ +/datum/uplink_item/item/visible_weapons + category = /datum/uplink_category/visible_weapons + +/datum/uplink_item/item/visible_weapons/energy_sword + name = "Energy Sword" + item_cost = 4 + path = /obj/item/weapon/melee/energy/sword + +/datum/uplink_item/item/visible_weapons/dartgun + name = "Dart Gun" + item_cost = 5 + path = /obj/item/weapon/gun/projectile/dartgun + +/datum/uplink_item/item/visible_weapons/crossbow + name = "Energy Crossbow" + item_cost = 5 + path = /obj/item/weapon/gun/energy/crossbow + +/datum/uplink_item/item/visible_weapons/silenced_45 + name = "Silenced .45" + item_cost = 5 + path = /obj/item/weapon/gun/projectile/silenced + +/datum/uplink_item/item/visible_weapons/riggedlaser + name = "Exosuit Rigged Laser" + item_cost = 6 + path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser + +/datum/uplink_item/item/visible_weapons/revolver + name = "Revolver" + item_cost = 6 + path = /obj/item/weapon/gun/projectile/revolver + +/datum/uplink_item/item/visible_weapons/heavysniper + name = "Anti-materiel Rifle" + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + path = /obj/item/weapon/gun/projectile/heavysniper + +//These are for traitors (or other antags, perhaps) to have the option of purchasing some merc gear. +/datum/uplink_item/item/visible_weapons/submachinegun + name = "Submachine Gun" + item_cost = 6 + path = /obj/item/weapon/gun/projectile/automatic/c20r + +/datum/uplink_item/item/visible_weapons/assaultrifle + name = "Assault Rifle" + item_cost = 7 + path = /obj/item/weapon/gun/projectile/automatic/sts35 + +/datum/uplink_item/item/visible_weapons/combatshotgun + name = "Combat Shotgun" + item_cost = 7 + path = /obj/item/weapon/gun/projectile/shotgun/pump/combat + +/datum/uplink_item/item/visible_weapons/egun + name = "Energy Gun" + item_cost = 5 + path = /obj/item/weapon/gun/energy/gun + +/datum/uplink_item/item/visible_weapons/lasercannon + name = "Laser Cannon" + item_cost = 6 + path = /obj/item/weapon/gun/energy/lasercannon + +/datum/uplink_item/item/visible_weapons/lasercarbine + name = "Laser Carbine" + item_cost = 7 + path = /obj/item/weapon/gun/energy/laser + +/datum/uplink_item/item/visible_weapons/ionrifle + name = "Ion Rifle" + item_cost = 5 + path = /obj/item/weapon/gun/energy/ionrifle + +/datum/uplink_item/item/visible_weapons/xray + name = "Xray Gun" + item_cost = 7 + path = /obj/item/weapon/gun/energy/xray + +/datum/uplink_item/item/visible_weapons/tactknife + name = "Tactical Knife" + item_cost = 1 + path = /obj/item/weapon/material/hatchet/tacknife + +/datum/uplink_item/item/visible_weapons/combatknife + name = "Combat Knife" + item_cost = 3 + path = /obj/item/weapon/material/hatchet/tacknife/combatknife \ No newline at end of file diff --git a/code/game/antagonist/outsider/deathsquad.dm b/code/game/antagonist/outsider/deathsquad.dm index 4cc8afff6c..3a61152ab2 100644 --- a/code/game/antagonist/outsider/deathsquad.dm +++ b/code/game/antagonist/outsider/deathsquad.dm @@ -49,7 +49,7 @@ var/datum/antagonist/deathsquad/deathsquad player.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(player), slot_r_hand) player.equip_to_slot_or_del(new /obj/item/weapon/rig/ert/assetprotection(player), slot_back) player.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(player), slot_s_store) - player.implant_loyalty(player) + player.implant_loyalty() var/obj/item/weapon/card/id/id = create_id("Asset Protection", player) if(id) diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm index 8e460d38b6..c27d510d8b 100644 --- a/code/game/antagonist/outsider/mercenary.dm +++ b/code/game/antagonist/outsider/mercenary.dm @@ -46,9 +46,8 @@ var/datum/antagonist/mercenary/mercs player.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT player.mind.accept_tcrystals = 1 - if (player.mind == leader) - var/obj/item/device/radio/uplink/U = new(player.loc, player.mind, DEFAULT_TELECRYSTAL_AMOUNT) - player.put_in_hands(U) + var/obj/item/device/radio/uplink/U = new(player.loc, player.mind, DEFAULT_TELECRYSTAL_AMOUNT) + player.put_in_hands(U) player.update_icons() diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm index aba2115d15..6bb049dcb0 100644 --- a/code/game/antagonist/station/cultist.dm +++ b/code/game/antagonist/station/cultist.dm @@ -110,6 +110,13 @@ var/datum/antagonist/cultist/cult . = ..() if(.) player << "You catch a glimpse of the Realm of Nar-Sie, the Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back." + if(player.current && !istype(player.current, /mob/living/simple_animal/construct)) + player.current.add_language(LANGUAGE_CULT) + +/datum/antagonist/cultist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted) + . = ..() + if(. && player.current && !istype(player.current, /mob/living/simple_animal/construct)) + player.current.remove_language(LANGUAGE_CULT) /datum/antagonist/cultist/can_become_antag(var/datum/mind/player) if(!..()) diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index 887b3a1b3f..efcdbad236 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -1,8 +1,12 @@ var/datum/antagonist/renegade/renegades /datum/antagonist/renegade + id = MODE_RENEGADE + role_type = BE_RENEGADE role_text = "Renegade" role_text_plural = "Renegades" + bantype = "renegade" + restricted_jobs = list("AI", "Cyborg") welcome_text = "Something's going to go wrong today, you can just feel it. You're paranoid, you've got a gun, and you're going to survive." antag_text = "You are a minor antagonist! Within the rules, \ try to protect yourself and what's important to you. You aren't here to cause trouble, \ @@ -12,10 +16,8 @@ var/datum/antagonist/renegade/renegades and before taking extreme actions, please try to also contact the administration! \ Think through your actions and make the roleplay immersive! Please remember all \ rules aside from those without explicit exceptions apply to antagonists." - - id = MODE_RENEGADE flags = ANTAG_SUSPICIOUS | ANTAG_IMPLANT_IMMUNE | ANTAG_RANDSPAWN | ANTAG_VOTABLE - + hard_cap = 8 hard_cap_round = 12 initial_spawn_req = 2 diff --git a/code/game/gamemodes/changeling/absorbed_dna.dm b/code/game/gamemodes/changeling/absorbed_dna.dm index bdf243b412..3c23f0270c 100644 --- a/code/game/gamemodes/changeling/absorbed_dna.dm +++ b/code/game/gamemodes/changeling/absorbed_dna.dm @@ -4,11 +4,13 @@ var/speciesName var/list/languages var/identifying_gender + var/list/flavour_texts -/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages, var/newIdentifying_Gender) +/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages, var/newIdentifying_Gender, var/list/newFlavour) ..() name = newName dna = newDNA speciesName = newSpecies languages = newLanguages - identifying_gender = newIdentifying_Gender \ No newline at end of file + identifying_gender = newIdentifying_Gender + flavour_texts = newFlavour ? newFlavour.Copy() : null \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index ae5ede1566..a89fe95d95 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -85,7 +85,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E var/mob/living/carbon/human/H = src if(istype(H)) - var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages, H.identifying_gender) + var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages, H.identifying_gender, H.flavor_texts) absorbDNA(newDNA) return 1 diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 16f34357b5..e75020fc59 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -71,7 +71,7 @@ src.verbs += /mob/proc/changeling_respec src << "We can now re-adapt, reverting our evolution so that we may start anew, if needed." - var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages) + var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages, T.identifying_gender, T.flavor_texts) absorbDNA(newDNA) if(T.mind && T.mind.changeling) diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 647f5bd91f..4f53c95b46 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -37,7 +37,7 @@ H.status_flags -= DISFIGURED H.update_body(1) C << "We have regenerated." - C.status_flags &= ~(FAKEDEATH) + C.status_flags &= ~FAKEDEATH C.update_canmove() C.mind.changeling.purchased_powers -= C feedback_add_details("changeling_powers","CR") diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index 0eec3ed213..57a55e2e21 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -37,11 +37,9 @@ if(ishuman(src)) var/mob/living/carbon/human/H = src H.b_type = "AB+" //For some reason we have two blood types on the mob. - for(var/flavor in H.flavor_texts) //Nulls out flavor text, so we don't keep our previous mob's flavor. - flavor = null H.identifying_gender = chosen_dna.identifying_gender + H.flavor_texts = chosen_dna.flavour_texts ? chosen_dna.flavour_texts.Copy() : null src.real_name = chosen_dna.name - src.flavor_text = "" src.UpdateAppearance() domutcheck(src, null) changeling_update_languages(changeling.absorbed_languages) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index c978cb4ffe..f91191fac5 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -11,7 +11,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' required_players_secret = 15 required_enemies = 4 round_description = "An unidentified bluespace signature is approaching the station!" - extended_round_description = "The Company's majority control of phoron in Vir has marked the \ + extended_round_description = "The Company's majority control of phoron in "+starsys_name+" has marked the \ station to be a highly valuable target for many competing organizations and individuals. Being a \ colony of sizable population and considerable wealth causes it to often be the target of various \ attempts of robbery, fraud and other malicious actions." diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 3393373d7b..5f268bba16 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -7,7 +7,7 @@ var/list/nuke_disks = list() /datum/game_mode/nuclear name = "Mercenary" round_description = "A mercenary strike force is approaching the station!" - extended_round_description = "The Company's majority control of phoron in Vir has marked the \ + extended_round_description = "The Company's majority control of phoron in "+starsys_name+" has marked the \ station to be a highly valuable target for many competing organizations and individuals. Being a \ colony of sizable population and considerable wealth causes it to often be the target of various \ attempts of robbery, fraud and other malicious actions." diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 45f88d3b05..98fc360160 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -3,10 +3,10 @@ config_tag = "revolution" round_description = "Some crewmembers are attempting to start a revolution!" extended_round_description = "Revolutionaries - Remove the heads of staff from power. Convert other crewmembers to your cause using the 'Convert Bourgeoise' verb. Protect your leaders." - required_players = 15 - required_players_secret = 15 + required_players = 12 //should be enough for a decent manifest, hopefully + required_players_secret = 12 //pretty sure rev doesn't even appear in secret required_enemies = 3 - auto_recall_shuttle = 0 //NO THANKS + auto_recall_shuttle = 0 //un-wanted on polaris end_on_antag_death = 0 shuttle_delay = 3 antag_tags = list(MODE_REVOLUTIONARY, MODE_LOYALIST) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 5a389e68f1..c4b5d787a4 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -1,7 +1,7 @@ /datum/game_mode/traitor name = "traitor" round_description = "There is a foreign agent or traitor on the station. Do not let the traitor succeed!" - extended_round_description = "The Company's majority control of phoron in Vir has marked the \ + extended_round_description = "The Company's majority control of phoron in "+starsys_name+" has marked the \ station to be a highly valuable target for many competing organizations and individuals. The varied pasts \ and experiences of your coworkers have left them susceptible to the vices and temptations of humanity. \ Is the station the safe self-contained workplace you once thought it was, or has it become a playground \ diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index d3a9246238..015441f32f 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -44,7 +44,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack) - H.implant_loyalty(src) + H.implant_loyalty() return 1 diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 64dc22615e..f4c3ca9e1b 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -263,7 +263,7 @@ H.equip_to_slot_or_del(new /obj/item/device/pda/lawyer(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand) - H.implant_loyalty(H) + H.implant_loyalty() return 1 diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 31884169f6..dfb3659e0d 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -41,7 +41,7 @@ H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_store) else H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack) - H.implant_loyalty(H) + H.implant_loyalty() return 1 diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 051223d6fe..5d80030337 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -102,6 +102,7 @@ //Build list of multipliers for sheets. if(R.is_stack) if(max_sheets && max_sheets > 0) + max_sheets = min(max_sheets, R.max_stack) // Limit to the max allowed by stack type. multiplier_string += "
" for(var/i = 5;iIt expired at [worldtime2text(expiration_time)]." /obj/item/weapon/card/id/guest/read() + if(!Adjacent(usr)) + return //Too far to read if (world.time > expiration_time) usr << "This pass expired at [worldtime2text(expiration_time)]." else diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index f336ad310e..e1c65243d9 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -232,7 +232,6 @@ /obj/item/weapon/hand_tele, /obj/item/weapon/card/id/captains_spare, /obj/item/device/aicard, - /obj/item/device/mmi, /obj/item/device/paicard, /obj/item/weapon/gun, /obj/item/weapon/pinpointer, diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 15d2848cd2..51af8837a8 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1019,6 +1019,9 @@ About the new airlock wires panel: else name = "[istext(assembly.glass) ? "[assembly.glass] airlock" : assembly.base_name]" + //get the dir from the assembly + set_dir(assembly.dir) + //wires var/turf/T = get_turf(newloc) if(T && (T.z in config.admin_levels)) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index a2d599fa00..4fc4b2fad7 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -4,17 +4,23 @@ /obj/machinery/door/airlock/multi_tile/New() ..() - switch(dir) - if(EAST, WEST) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size + SetBounds() + +/obj/machinery/door/airlock/multi_tile/Move() + . = ..() + SetBounds() + +/obj/machinery/door/airlock/multi_tile/proc/SetBounds() + if(dir in list(EAST, WEST)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size /obj/machinery/door/airlock/multi_tile/glass name = "Glass Airlock" icon = 'icons/obj/doors/Door2x1glass.dmi' opacity = 0 glass = 1 - assembly_type = /obj/structure/door_assembly/multi_tile \ No newline at end of file + assembly_type = /obj/structure/door_assembly/multi_tile diff --git a/code/game/machinery/exonet_node.dm b/code/game/machinery/exonet_node.dm index 23206a73e7..aa36e34c9e 100644 --- a/code/game/machinery/exonet_node.dm +++ b/code/game/machinery/exonet_node.dm @@ -1,6 +1,6 @@ /obj/machinery/exonet_node name = "exonet node" - desc = "This machine is one of many, many nodes inside Vir's section of the Exonet, connecting the Northern Star to the rest of the system, at least \ + desc = "This machine is one of many, many nodes inside "+starsys_name+"'s section of the Exonet, connecting the "+station_orig+" to the rest of the system, at least \ electronically." icon = 'icons/obj/stationobjs.dmi' icon_state = "exonet_node" diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 7f82a34f1c..831edadcbf 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -327,7 +327,7 @@ src.updateUsrDialog() /obj/machinery/microwave/proc/dispose() - for (var/obj/O in (contents-component_parts)) + for (var/obj/O in ((contents-component_parts)-circuit)) O.loc = src.loc if (src.reagents.total_volume) src.dirty++ diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 74f60a3a72..7d8e75764c 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -13,6 +13,7 @@ var/on = 1 var/area/area = null var/otherarea = null + var/image/overlay /obj/machinery/light_switch/New() ..() @@ -31,14 +32,18 @@ /obj/machinery/light_switch/proc/updateicon() + if(!overlay) + overlay = image(icon, "light1-overlay", LIGHTING_LAYER+0.1) + + overlays.Cut() if(stat & NOPOWER) icon_state = "light-p" set_light(0) - layer = OBJ_LAYER else icon_state = "light[on]" - set_light(2, 1.5, on ? "#82FF4C" : "#F86060") - layer = LIGHTING_LAYER+0.1 + overlay.icon_state = "light[on]-overlay" + overlays += overlay + set_light(2, 0.1, on ? "#82FF4C" : "#F86060") /obj/machinery/light_switch/examine(mob/user) if(..(user, 1)) diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm new file mode 100644 index 0000000000..a7d5c780c3 --- /dev/null +++ b/code/game/machinery/pda_multicaster.dm @@ -0,0 +1,101 @@ +/obj/machinery/pda_multicaster + name = "\improper PDA multicaster" + desc = "This machine mirrors messages sent to it to specific departments." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "controller" + density = 1 + anchored = 1 + circuit = /obj/item/weapon/circuitboard/telecomms/pda_multicaster + use_power = 1 + idle_power_usage = 750 + var/on = 1 // If we're currently active, + var/toggle = 1 // If we /should/ be active or not, + var/list/internal_PDAs = list() // Assoc list of PDAs inside of this, with the department name being the index, + +/obj/machinery/pda_multicaster/New() + ..() + internal_PDAs = list("command" = new /obj/item/device/pda/multicaster/command(src), + "security" = new /obj/item/device/pda/multicaster/security(src), + "engineering" = new /obj/item/device/pda/multicaster/engineering(src), + "medical" = new /obj/item/device/pda/multicaster/medical(src), + "research" = new /obj/item/device/pda/multicaster/research(src), + "cargo" = new /obj/item/device/pda/multicaster/cargo(src), + "civilian" = new /obj/item/device/pda/multicaster/civilian(src)) + +/obj/machinery/pda_multicaster/prebuilt/New() + ..() + + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/telecomms/pda_multicaster(src) + component_parts += new /obj/item/weapon/stock_parts/subspace/ansible(src) + component_parts += new /obj/item/weapon/stock_parts/subspace/filter(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/subspace/treatment(src) + component_parts += new /obj/item/stack/cable_coil(src, 2) + RefreshParts() + +/obj/machinery/pda_multicaster/Destroy() + for(var/atom/movable/AM in contents) + qdel(AM) + ..() + +/obj/machinery/pda_multicaster/update_icon() + if(on) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]-p" + +/obj/machinery/pda_multicaster/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/screwdriver)) + default_deconstruction_screwdriver(user, I) + else if(istype(I, /obj/item/weapon/crowbar)) + default_deconstruction_crowbar(user, I) + else + ..() + +/obj/machinery/pda_multicaster/attack_ai(mob/user) + attack_hand(user) + +/obj/machinery/pda_multicaster/attack_hand(mob/user) + toggle_power(user) + +/obj/machinery/pda_multicaster/proc/toggle_power(mob/user) + toggle = !toggle + visible_message("\the [user] turns \the [src] [toggle ? "on" : "off"].") + update_power() + if(!toggle) + var/msg = "[usr.client.key] ([usr]) has turned [src] off, at [x],[y],[z]." + message_admins(msg) + log_game(msg) + +/obj/machinery/pda_multicaster/proc/update_PDAs(var/turn_off) + for(var/obj/item/device/pda/pda in contents) + pda.toff = turn_off + +/obj/machinery/pda_multicaster/proc/update_power() + if(toggle) + if(stat & (BROKEN|NOPOWER|EMPED)) + on = 0 + update_PDAs(1) // 1 being to turn off. + idle_power_usage = 0 + else + on = 1 + update_PDAs(0) + idle_power_usage = 750 + else + on = 0 + update_PDAs(1) + idle_power_usage = 0 + update_icon() + +/obj/machinery/pda_multicaster/process() + update_power() + +/obj/machinery/pda_multicaster/emp_act(severity) + if(!(stat & EMPED)) + stat |= EMPED + var/duration = (300 * 10)/severity + spawn(rand(duration - 20, duration + 20)) + stat &= ~EMPED + update_icon() + ..() diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm index 7efa498d09..77e5887099 100644 --- a/code/game/machinery/supplybeacon.dm +++ b/code/game/machinery/supplybeacon.dm @@ -2,7 +2,7 @@ /obj/item/supply_beacon name = "inactive supply beacon" icon = 'icons/obj/supplybeacon.dmi' - desc = "An inactive, hacked supply beacon stamped with the Vir Rapid Fabrication logo. Good for one (1) ballistic supply pod shipment." + desc = "An inactive, hacked supply beacon stamped with the "+starsys_name+" Rapid Fabrication logo. Good for one (1) ballistic supply pod shipment." icon_state = "beacon" var/deploy_path = /obj/machinery/power/supply_beacon var/deploy_time = 30 @@ -114,6 +114,6 @@ var/drop_x = src.x-2 var/drop_y = src.y-2 var/drop_z = src.z - command_announcement.Announce("Vir Rapid Fabrication priority supply request #[rand(1000,9999)]-[rand(100,999)] recieved. Shipment dispatched via ballistic supply pod for immediate delivery. Have a nice day.", "Thank You For Your Patronage") + command_announcement.Announce(starsys_name+" Rapid Fabrication priority supply request #[rand(1000,9999)]-[rand(100,999)] recieved. Shipment dispatched via ballistic supply pod for immediate delivery. Have a nice day.", "Thank You For Your Patronage") spawn(rand(100,300)) new /datum/random_map/droppod/supply(null, drop_x, drop_y, drop_z, supplied_drop = drop_type) // Splat. diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 30c92af922..7d27c94b65 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -390,33 +390,33 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if (length(heard_masked)) for (var/mob/R in heard_masked) - R.hear_radio(message,verbage, speaking, part_a, part_b, M, 0, name) + R.hear_radio(message,verbage, speaking, part_a, part_b, part_c, M, 0, name) /* --- Process all the mobs that heard the voice normally (understood) --- */ if (length(heard_normal)) for (var/mob/R in heard_normal) - R.hear_radio(message, verbage, speaking, part_a, part_b, M, 0, realname) + R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 0, realname) /* --- Process all the mobs that heard the voice normally (did not understand) --- */ if (length(heard_voice)) for (var/mob/R in heard_voice) - R.hear_radio(message,verbage, speaking, part_a, part_b, M,0, vname) + R.hear_radio(message,verbage, speaking, part_a, part_b, part_c, M,0, vname) /* --- Process all the mobs that heard a garbled voice (did not understand) --- */ // Displays garbled message (ie "f*c* **u, **i*er!") if (length(heard_garbled)) for (var/mob/R in heard_garbled) - R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1, vname) + R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 1, vname) /* --- Complete gibberish. Usually happens when there's a compressed message --- */ if (length(heard_gibberish)) for (var/mob/R in heard_gibberish) - R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1) + R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 1) return 1 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index fd0996e2bc..94bb1fd84e 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -695,24 +695,40 @@ /obj/machinery/vending/boozeomat name = "Booze-O-Mat" desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." - icon_state = "boozeomat" //////////////18 drink entities below, plus the glasses, in case someone wants to edit the number of bottles + icon_state = "boozeomat" icon_deny = "boozeomat-deny" - products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5, - /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5, - /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5, - /obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5, - /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 6, - /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 6,/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 4, - /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 4,/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 4, - /obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 4,/obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 8, - /obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5, - /obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5, /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15, - /obj/item/weapon/reagent_containers/food/drinks/flask/barflask = 2, /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask = 2, - /obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 30,/obj/item/weapon/reagent_containers/food/drinks/ice = 9, - /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 2,/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 2, - /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 2,/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5, - /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 4) - contraband = list(/obj/item/weapon/reagent_containers/food/drinks/tea = 10) + products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 5, + /obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5, + /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15, + /obj/item/weapon/reagent_containers/food/drinks/flask/barflask = 5, + /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask = 5, + /obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 30, + /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass = 30, + /obj/item/weapon/reagent_containers/food/drinks/ice = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5, + /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 5, + /obj/item/weapon/reagent_containers/food/drinks/tea = 15) + contraband = list() vend_delay = 15 idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index fcb52986a4..01fc592690 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -213,10 +213,10 @@ steam.start() -- spawns the effect icon = 'icons/effects/effects.dmi' icon_state = "sparks" -/obj/effect/effect/smoke/illumination/New(var/newloc, var/brightness=15, var/lifetime=10) +/obj/effect/effect/smoke/illumination/New(var/newloc, var/lifetime=10, var/range=null, var/power=null, var/color=null) time_to_live=lifetime ..() - set_light(brightness) + set_light(range, power, color) ///////////////////////////////////////////// // Bad smoke diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 7a923f14bd..15cb670a8c 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -133,7 +133,7 @@ qdel(src) /obj/effect/landmark/costume/maid/New() - new /obj/item/clothing/under/blackskirt(src.loc) + new /obj/item/clothing/under/skirt(src.loc) var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears ) new CHOICE(src.loc) new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index a3db6b15a1..f0bb82efd0 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -163,6 +163,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/shaftminer icon_state = "pda-miner" + default_cartridge = /obj/item/weapon/cartridge/miner /obj/item/device/pda/syndicate default_cartridge = /obj/item/weapon/cartridge/syndicate @@ -172,6 +173,7 @@ var/global/list/obj/item/device/pda/PDAs = list() hidden = 1 /obj/item/device/pda/chaplain + default_cartridge = /obj/item/weapon/cartridge/service icon_state = "pda-holy" ttone = "holy" @@ -181,13 +183,15 @@ var/global/list/obj/item/device/pda/PDAs = list() ttone = "..." /obj/item/device/pda/botanist - //default_cartridge = /obj/item/weapon/cartridge/botanist + default_cartridge = /obj/item/weapon/cartridge/service icon_state = "pda-hydro" /obj/item/device/pda/roboticist + default_cartridge = /obj/item/weapon/cartridge/signal/science icon_state = "pda-robot" /obj/item/device/pda/librarian + default_cartridge = /obj/item/weapon/cartridge/service icon_state = "pda-libb" desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader." note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!" @@ -200,9 +204,11 @@ var/global/list/obj/item/device/pda/PDAs = list() note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!" /obj/item/device/pda/chef + default_cartridge = /obj/item/weapon/cartridge/service icon_state = "pda-chef" /obj/item/device/pda/bar + default_cartridge = /obj/item/weapon/cartridge/service icon_state = "pda-bar" /obj/item/device/pda/atmos @@ -304,6 +310,99 @@ var/global/list/obj/item/device/pda/PDAs = list() ttone = "assist" +// Used for the PDA multicaster, which mirrors messages sent to it to a specific department, +/obj/item/device/pda/multicaster + ownjob = "Relay" + icon_state = "NONE" + ttone = "data" + detonate = 0 + news_silent = 1 + var/list/cartridges_to_send_to = list() + +// This is what actually mirrors the message, +/obj/item/device/pda/multicaster/new_message(var/sending_unit, var/sender, var/sender_job, var/message) + if(sender) + var/list/targets = list() + for(var/obj/item/device/pda/pda in PDAs) + if(pda.cartridge && pda.owner && is_type_in_list(pda.cartridge, cartridges_to_send_to)) + targets |= pda + if(targets.len) + for(var/obj/item/device/pda/target in targets) + create_message(target, sender, sender_job, message) + +// This has so much copypasta, +/obj/item/device/pda/multicaster/create_message(var/obj/item/device/pda/P, var/original_sender, var/original_job, var/t) + t = sanitize(t, MAX_MESSAGE_LEN, 0) + t = replace_characters(t, list(""" = "\"")) + if (!t || !istype(P)) + return + + if (isnull(P)||P.toff || toff) + return + + last_text = world.time + var/datum/reception/reception = get_reception(src, P, t) + t = reception.message + + if(reception.message_server && (reception.telecomms_reception & TELECOMMS_RECEPTION_SENDER)) // only send the message if it's stable, + if(reception.telecomms_reception & TELECOMMS_RECEPTION_RECEIVER == 0) // Does our recipient have a broadcaster on their level?, + return + var/send_result = reception.message_server.send_pda_message("[P.owner]","[owner]","[t]") + if (send_result) + return + + P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]"))) + + if(!P.conversations.Find("\ref[src]")) + P.conversations.Add("\ref[src]") + + P.new_message(src, "[original_sender] \[Relayed\]", original_job, t, 0) + + else + return + +/obj/item/device/pda/multicaster/command/New() + ..() + owner = "Command Department" + name = "Command Department (Relay)" + cartridges_to_send_to = command_cartridges + +/obj/item/device/pda/multicaster/security/New() + ..() + owner = "Security Department" + name = "Security Department (Relay)" + cartridges_to_send_to = security_cartridges + +/obj/item/device/pda/multicaster/engineering/New() + ..() + owner = "Engineering Department" + name = "Engineering Department (Relay)" + cartridges_to_send_to = engineering_cartridges + +/obj/item/device/pda/multicaster/medical/New() + ..() + owner = "Medical Department" + name = "Medical Department (Relay)" + cartridges_to_send_to = medical_cartridges + +/obj/item/device/pda/multicaster/research/New() + ..() + owner = "Research Department" + name = "Research Department (Relay)" + cartridges_to_send_to = research_cartridges + +/obj/item/device/pda/multicaster/cargo/New() + ..() + owner = "Cargo Department" + name = "Cargo Department (Relay)" + cartridges_to_send_to = cargo_cartridges + +/obj/item/device/pda/multicaster/civilian/New() + ..() + owner = "Civilian Services Department" + name = "Civilian Services Department (Relay)" + cartridges_to_send_to = civilian_cartridges + /* * The Actual PDA */ @@ -932,7 +1031,7 @@ var/global/list/obj/item/device/pda/PDAs = list() message += "Your [P] bleeps loudly." j = prob(10) - if(j) //This kills the PDA + if(j && detonate) //This kills the PDA qdel(P) if(message) message += "It melts in a puddle of plastic." @@ -1046,8 +1145,8 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/proc/new_message_from_pda(var/obj/item/device/pda/sending_device, var/message) new_message(sending_device, sending_device.owner, sending_device.ownjob, message) -/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message) - var/reception_message = "\icon[src] Message from [sender] ([sender_job]), \"[message]\" (Reply)" +/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message, var/reply = 1) + var/reception_message = "\icon[src] Message from [sender] ([sender_job]), \"[message]\" ([reply ? "Reply" : "Unable to Reply"])" new_info(message_silent, ttone, reception_message) log_pda("[usr] (PDA: [sending_unit]) sent \"[message]\" to [name]") diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 5d576959fb..a0e37e28b8 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -1,3 +1,48 @@ +var/list/command_cartridges = list( + /obj/item/weapon/cartridge/captain, + /obj/item/weapon/cartridge/hop, + /obj/item/weapon/cartridge/hos, + /obj/item/weapon/cartridge/ce, + /obj/item/weapon/cartridge/rd, + /obj/item/weapon/cartridge/head, + /obj/item/weapon/cartridge/lawyer // Internal Affaris, + ) + +var/list/security_cartridges = list( + /obj/item/weapon/cartridge/security, + /obj/item/weapon/cartridge/detective, + /obj/item/weapon/cartridge/hos + ) + +var/list/engineering_cartridges = list( + /obj/item/weapon/cartridge/engineering, + /obj/item/weapon/cartridge/atmos, + /obj/item/weapon/cartridge/ce + ) + +var/list/medical_cartridges = list( + /obj/item/weapon/cartridge/medical, + /obj/item/weapon/cartridge/chemistry, + /obj/item/weapon/cartridge/cmo + ) + +var/list/research_cartridges = list( + /obj/item/weapon/cartridge/signal/science, + /obj/item/weapon/cartridge/rd + ) + +var/list/cargo_cartridges = list( + /obj/item/weapon/cartridge/quartermaster, // This also covers cargo-techs, apparently, + /obj/item/weapon/cartridge/miner, + /obj/item/weapon/cartridge/hop + ) + +var/list/civilian_cartridges = list( + /obj/item/weapon/cartridge/janitor, + /obj/item/weapon/cartridge/service, + /obj/item/weapon/cartridge/hop + ) + /obj/item/weapon/cartridge name = "generic cartridge" desc = "A data cartridge for portable microcomputers." @@ -98,6 +143,10 @@ access_flora = 1 */ +/obj/item/weapon/cartridge/service + name = "\improper Serv-U Pro" + desc = "A data cartridge designed to serve YOU!" + /obj/item/weapon/cartridge/signal name = "generic signaler cartridge" desc = "A data cartridge with an integrated radio signaler module." @@ -124,6 +173,11 @@ icon_state = "cart-q" access_quartermaster = 1 +/obj/item/weapon/cartridge/miner + name = "\improper Drill-Jockey 4.5" + desc = "It's covered in some sort of sand." + icon_state = "cart-q" + /obj/item/weapon/cartridge/head name = "\improper Easy-Record DELUXE" icon_state = "cart-h" diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 3cc011cfb8..bc80bc9db3 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -20,13 +20,32 @@ var/global/list/obj/item/device/communicator/all_communicators = list() var/list/voice_mobs = list() var/list/voice_requests = list() var/list/voice_invites = list() - var/selected_tab = 1 //1 equals dialing, 2 equals reviewing requests/invites. + + var/list/im_contacts = list() + var/list/im_list = list() + + var/note = "Thank you for choosing the T-14.2 Communicator, this is your notepad!" //Current note in the notepad function + var/notehtml = "" + + var/obj/item/weapon/cartridge/cartridge = null //current cartridge + var/list/modules = list( + list("module" = "Phone", "icon" = "phone64", "number" = 2), + list("module" = "Contacts", "icon" = "person64", "number" = 3), + list("module" = "Messaging", "icon" = "comment64", "number" = 4), + list("module" = "Note", "icon" = "note64", "number" = 5), + list("module" = "Settings", "icon" = "gear64", "number" = 6) + ) //list("module" = "Name of Module", "icon" = "icon name64", "number" = "what tab is the module") + + var/selected_tab = 1 var/owner = "" + var/occupation = "" var/alert_called = 0 var/obj/machinery/exonet_node/node = null //Reference to the Exonet node, to avoid having to look it up so often. var/target_address = "" + var/target_address_name = "" var/network_visibility = 1 + var/ringer = 1 var/list/known_devices = list() var/datum/exonet_protocol/exonet = null var/list/communicating = list() @@ -151,6 +170,24 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(!node || !node.on || !node.allow_external_communicators) close_connection(reason = "Connection timed out") +// Proc: attackby() +// Parameters: 2 (C - what is used on the communicator. user - the mob that has the communicator) +// Description: When an ID is swiped on the communicator, the communicator reads the job and checks it against the Owner name, if success, the occupation is added. +/obj/item/device/communicator/attackby(obj/item/C as obj, mob/user as mob) + if(istype(C, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/idcard = C + if(!idcard.registered_name || !idcard.assignment) + user << "\The [src] rejects the ID." + return + if(!owner) + user << "\The [src] rejects the ID." + return + if(owner == idcard.registered_name) + occupation = idcard.assignment + user << "Occupation updated." + return + else return + // Proc: attack_self() // Parameters: 1 (user - the mob that clicked the device in their hand) // Description: Makes an exonet datum if one does not exist, allocates an address for it, maintains the lists of all devies, clears the alert icon, and @@ -205,6 +242,11 @@ var/global/list/obj/item/device/communicator/all_communicators = list() var/voices[0] //Current /mob/living/voice s inside the device. var/connected_communicators[0] //Current communicators connected to the device. + var/im_contacts_ui[0] //List of communicators that have been messaged. + var/im_list_ui[0] //List of messages. + + var/modules_ui[0] //Home screen info. + //First we add other 'local' communicators. for(var/obj/item/device/communicator/comm in known_devices) if(comm.network_visibility && comm.exonet) @@ -243,18 +285,38 @@ var/global/list/obj/item/device/communicator/all_communicators = list() for(var/obj/item/device/communicator/comm in communicating) connected_communicators[++connected_communicators.len] = list("name" = sanitize(comm.name), "true_name" = sanitize(comm.name)) + //Devices that have been messaged or recieved messages from. + for(var/obj/item/device/communicator/comm in im_contacts) + if(comm.exonet) + im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address) + + //Actual messages. + for(var/I in im_list) + im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"]) + + //Modules for homescreen. + for(var/list/R in modules) + modules_ui[++modules_ui.len] = R data["owner"] = owner ? owner : "Unset" + data["occupation"] = occupation ? occupation : "Swipe ID to set." data["connectionStatus"] = get_connection_to_tcomms() data["visible"] = network_visibility data["address"] = exonet.address ? exonet.address : "Unallocated" data["targetAddress"] = target_address + data["targetAddressName"] = target_address_name data["currentTab"] = selected_tab data["knownDevices"] = communicators data["invitesSent"] = invites data["requestsReceived"] = requests data["voice_mobs"] = voices data["communicating"] = connected_communicators + data["imContacts"] = im_contacts_ui + data["imList"] = im_list_ui + data["time"] = worldtime2text() + data["ring"] = ringer + data["homeScreen"] = modules_ui + data["note"] = note // current notes // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) @@ -284,6 +346,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(href_list["toggle_visibility"]) network_visibility = !network_visibility + if(href_list["toggle_ringer"]) + ringer = !ringer + if(href_list["add_hex"]) var/hex = href_list["add_hex"] add_to_EPv2(hex) @@ -304,6 +369,16 @@ var/global/list/obj/item/device/communicator/all_communicators = list() var/their_address = href_list["dial"] exonet.send_message(their_address, "voice") + if(href_list["message"]) + if(!get_connection_to_tcomms()) + usr << "Error: Cannot connect to Exonet node." + return + var/their_address = href_list["message"] + var/text = sanitizeSafe(input(usr,"Enter your message.","Text Message")) + if(text) + exonet.send_message(their_address, "text", text) + im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text)) + if(href_list["disconnect"]) var/name_to_disconnect = href_list["disconnect"] for(var/mob/living/voice/V in contents) @@ -316,6 +391,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(href_list["copy"]) target_address = href_list["copy"] + if(href_list["copy_name"]) + target_address_name = href_list["copy_name"] + if(href_list["hang_up"]) for(var/mob/living/voice/V in contents) close_connection(usr, V, "[usr] hung up.") @@ -325,13 +403,25 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(href_list["switch_tab"]) selected_tab = href_list["switch_tab"] + if(href_list["edit"]) + var/n = input(usr, "Please enter message", name, notehtml) + n = sanitizeSafe(n, extra = 0) + if(n) + note = html_decode(n) + notehtml = note + note = replacetext(note, "\n", "
") + else + note = "" + notehtml = note + nanomanager.update_uis(src) add_fingerprint(usr) // Proc: receive_exonet_message() -// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received) -// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response. -/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message) +// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received, +// text - message text to send if message is of type "text") +// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function. +/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text) if(message == "voice") if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator)) if(origin_atom in voice_invites) @@ -349,6 +439,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list() var/random = rand(200,350) random = random / 10 exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") + if(message == "text") + request_im(origin_atom, origin_address, text) + return // Proc: receive_exonet_message() // Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received) @@ -368,6 +461,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list() var/random = rand(450,700) random = random / 10 exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") + if(message == "text") //Ghosts don't get texting yet. Mostly for spam prevention by ghosts but also due to ui requirements not sorted out yet. + return // Proc: register_device() // Parameters: 1 (user - the person to use their name for) @@ -514,9 +609,10 @@ var/global/list/obj/item/device/communicator/all_communicators = list() voice_requests |= candidate - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - for (var/mob/O in hearers(2, loc)) - O.show_message(text("\icon[src] *beep*")) + if(ringer) + playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) + for (var/mob/O in hearers(2, loc)) + O.show_message(text("\icon[src] *beep*")) alert_called = 1 update_icon() @@ -529,6 +625,42 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(L) L << "\icon[src] Communications request from [who]." +// Proc: request_im() +// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message) +// Description: Response to a communicator trying to message the device. +// Adds them to the list of people that have messaged this device and adds the message to the message list. +/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text) + var/who = null + if(isobserver(candidate)) + return + else if(istype(candidate, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = candidate + who = comm.owner + comm.im_contacts |= src + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else return + + im_contacts |= candidate + + if(!who) + return + + if(ringer) + playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) + for (var/mob/O in hearers(2, loc)) + O.show_message(text("\icon[src] *beep*")) + + alert_called = 1 + update_icon() + + //Search for holder of the device. + var/mob/living/L = null + if(loc && isliving(loc)) + L = loc + + if(L) + L << "\icon[src] Message from [who]." + // Proc: Destroy() // Parameters: None // Description: Deletes all the voice mobs, disconnects all linked communicators, and cuts lists to allow successful qdel() diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index da512f9449..0024a05c62 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -60,6 +60,10 @@ else //can only use it 5 times a minute user << "*click* *click*" return + + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + user.do_attack_animation(M) + playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) var/flashfail = 0 @@ -112,6 +116,7 @@ /obj/item/device/flash/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0) if(!user || !clown_check(user)) return + if(broken) user.show_message("The [src.name] is broken", 2) return @@ -131,6 +136,7 @@ else //can only use it 5 times a minute user.show_message("*click* *click*", 2) return + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) flick("flash2", src) if(user && isrobot(user)) diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm new file mode 100644 index 0000000000..0cf4af6c74 --- /dev/null +++ b/code/game/objects/items/devices/hacktool.dm @@ -0,0 +1,100 @@ +/obj/item/device/multitool/hacktool + var/is_hacking = 0 + var/max_known_targets + + var/in_hack_mode = 0 + var/list/known_targets + var/list/supported_types + var/datum/topic_state/default/must_hack/hack_state + +/obj/item/device/multitool/hacktool/New() + ..() + known_targets = list() + max_known_targets = 5 + rand(1,3) + supported_types = list(/obj/machinery/door/airlock) + hack_state = new(src) + +/obj/item/device/multitool/hacktool/Destroy() + for(var/T in known_targets) + var/atom/target = T + target.unregister(OBSERVER_EVENT_DESTROY, src) + known_targets.Cut() + qdel(hack_state) + hack_state = null + return ..() + +/obj/item/device/multitool/hacktool/attackby(var/obj/W, var/mob/user) + if(isscrewdriver(W)) + in_hack_mode = !in_hack_mode + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + else + ..() + +/obj/item/device/multitool/hacktool/resolve_attackby(atom/A, mob/user) + sanity_check() + + if(!in_hack_mode) + return ..() + + if(!attempt_hack(user, A)) + return 0 + + A.ui_interact(user, state = hack_state) + return 1 + +/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target) + if(is_hacking) + user << "You are already hacking!" + return 0 + if(!is_type_in_list(target, supported_types)) + user << "\icon[src] Unable to hack this target!" + return 0 + var/found = known_targets.Find(target) + if(found) + known_targets.Swap(1, found) // Move the last hacked item first + return 1 + + user << "You begin hacking \the [target]..." + is_hacking = 1 + // On average hackin takes ~30 seconds. Fairly small random span to avoid people simply aborting and trying again + var/hack_result = do_after(user, (20 SECONDS + rand(0, 10 SECONDS) + rand(0, 10 SECONDS))) + is_hacking = 0 + + if(hack_result && in_hack_mode) + user << "Your hacking attempt was succesful!" + playsound(src.loc, 'sound/piano/A#6.ogg', 75) + else + user << "Your hacking attempt failed!" + return 0 + + known_targets.Insert(1, target) // Insert the newly hacked target first, + target.register(OBSERVER_EVENT_DESTROY, src, /obj/item/device/multitool/hacktool/proc/on_target_destroy) + return 1 + +/obj/item/device/multitool/hacktool/proc/sanity_check() + if(max_known_targets < 1) max_known_targets = 1 + // Cut away the oldest items if the capacity has been reached + if(known_targets.len > max_known_targets) + for(var/i = (max_known_targets + 1) to known_targets.len) + var/atom/A = known_targets[i] + A.unregister(OBSERVER_EVENT_DESTROY, src) + known_targets.Cut(max_known_targets + 1) + +/obj/item/device/multitool/hacktool/proc/on_target_destroy(var/target) + known_targets -= target + +/datum/topic_state/default/must_hack + var/obj/item/device/multitool/hacktool/hacktool + +/datum/topic_state/default/must_hack/New(var/hacktool) + src.hacktool = hacktool + ..() + +/datum/topic_state/default/must_hack/Destroy() + hacktool = null + return ..() + +/datum/topic_state/default/must_hack/can_use_topic(var/src_object, var/mob/user) + if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets)) + return STATUS_CLOSE + return ..() diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm index df28d4d3d7..571b0462df 100644 --- a/code/game/objects/items/devices/uplink.dm +++ b/code/game/objects/items/devices/uplink.dm @@ -1,11 +1,3 @@ -//This could either be split into the proper DM files or placed somewhere else all together, but it'll do for now -Nodrak - -/* - -A list of items and costs is stored under the datum of every game mode, alongside the number of crystals, and the welcoming message. - -*/ - /obj/item/device/uplink var/welcome = "Welcome, Operative" // Welcoming menu message var/uses // Numbers of crystals @@ -18,6 +10,10 @@ A list of items and costs is stored under the datum of every game mode, alongsid var/list/purchase_log = new var/datum/mind/uplink_owner = null var/used_TC = 0 + var/offer_time = 15 MINUTES //The time increment per discount offered + var/next_offer_time //The time a discount will next be offered + var/datum/uplink_item/discount_item //The item to be discounted + var/discount_amount //The amount as a percent the item will be discounted by /obj/item/device/uplink/nano_host() return loc @@ -28,10 +24,15 @@ A list of items and costs is stored under the datum of every game mode, alongsid purchase_log = list() world_uplinks += src uses = owner.tcrystals + processing_objects += src /obj/item/device/uplink/Destroy() world_uplinks -= src - ..() + processing_objects -= src + return ..() + +/obj/item/device/uplink/get_item_cost(var/item_type, var/item_cost) + return (discount_item && (item_type == discount_item)) ? max(1, round(item_cost*discount_amount)) : item_cost // HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it. /* How to create an uplink in 3 easy steps! @@ -52,7 +53,6 @@ A list of items and costs is stored under the datum of every game mode, alongsid var/datum/uplink_category/category = 0 // The current category we are in var/exploit_id // Id of the current exploit record we are viewing - // The hidden uplink MUST be inside an obj/item's contents. /obj/item/device/uplink/hidden/New() spawn(2) @@ -62,6 +62,14 @@ A list of items and costs is stored under the datum of every game mode, alongsid nanoui_data = list() update_nano_data() +/obj/item/device/uplink/hidden/process() + if(world.time > next_offer_time) + discount_item = default_uplink_selection.get_random_item(INFINITY) + discount_amount = pick(90;0.9, 80;0.8, 70;0.7, 60;0.6, 50;0.5, 40;0.4, 30;0.3, 20;0.2, 10;0.1) + next_offer_time = world.time + offer_time + update_nano_data() + nanomanager.update_uis(src) + // Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated. /obj/item/device/uplink/hidden/proc/toggle() active = !active @@ -107,6 +115,11 @@ A list of items and costs is stored under the datum of every game mode, alongsid /obj/item/device/uplink/hidden/interact(mob/user) ui_interact(user) +/obj/item/device/uplink/hidden/CanUseTopic() + if(!active) + return STATUS_CLOSE + return ..() + // The purchasing code. /obj/item/device/uplink/hidden/Topic(href, href_list) if(..()) @@ -139,11 +152,14 @@ A list of items and costs is stored under the datum of every game mode, alongsid if(category.can_view(src)) categories[++categories.len] = list("name" = category.name, "ref" = "\ref[category]") nanoui_data["categories"] = categories + nanoui_data["discount_name"] = discount_item ? discount_item.name : "" + nanoui_data["discount_amount"] = (1-discount_amount)*100 + nanoui_data["offer_expiry"] = worldtime2text(next_offer_time) else if(nanoui_menu == 1) var/items[0] for(var/datum/uplink_item/item in category.items) if(item.can_view(src)) - var/cost = item.cost(uses) + var/cost = item.cost(uses, src) if(!cost) cost = "???" items[++items.len] = list("name" = item.name, "description" = replacetext(item.description(), "\n", "
"), "can_buy" = item.can_buy(src), "cost" = cost, "ref" = "\ref[item]") nanoui_data["items"] = items diff --git a/code/game/objects/items/devices/uplink_items.dm b/code/game/objects/items/devices/uplink_items.dm deleted file mode 100644 index bc9666990b..0000000000 --- a/code/game/objects/items/devices/uplink_items.dm +++ /dev/null @@ -1,774 +0,0 @@ -var/datum/uplink/uplink = new() - -/datum/uplink - var/list/items_assoc - var/list/datum/uplink_item/items - var/list/datum/uplink_category/categories - -/datum/uplink/New() - items_assoc = list() - items = init_subtypes(/datum/uplink_item) - categories = init_subtypes(/datum/uplink_category) - categories = dd_sortedObjectList(categories) - - for(var/datum/uplink_item/item in items) - if(!item.name) - items -= item - continue - - items_assoc[item.type] = item - - for(var/datum/uplink_category/category in categories) - if(item.category == category.type) - category.items += item - - for(var/datum/uplink_category/category in categories) - category.items = dd_sortedObjectList(category.items) - -/datum/uplink_item - var/name - var/desc - var/item_cost = 0 - var/datum/uplink_category/category // Item category - var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all. - -/datum/uplink_item/item - var/path = null - -/datum/uplink_item/New() - ..() - antag_roles = list() - - - -/datum/uplink_item/proc/buy(var/obj/item/device/uplink/U, var/mob/user) - var/extra_args = extra_args(user) - if(!extra_args) - return - - if(!can_buy(U)) - return - - var/cost = cost(U.uses) - - var/goods = get_goods(U, get_turf(user), user, extra_args) - if(!goods) - return - - purchase_log(U) - user.mind.tcrystals -= cost - U.used_TC += cost - return goods - -// Any additional arguments you wish to send to the get_goods -/datum/uplink_item/proc/extra_args(var/mob/user) - return 1 - -/datum/uplink_item/proc/can_buy(obj/item/device/uplink/U) - if(cost(U.uses) > U.uses) - return 0 - - return can_view(U) - -/datum/uplink_item/proc/can_view(obj/item/device/uplink/U) - // Making the assumption that if no uplink was supplied, then we don't care about antag roles - if(!U || !antag_roles.len) - return 1 - - // With no owner, there's no need to check antag status. - if(!U.uplink_owner) - return 0 - - for(var/antag_role in antag_roles) - var/datum/antagonist/antag = all_antag_types[antag_role] - if(antag.is_antagonist(U.uplink_owner)) - return 1 - return 0 - -/datum/uplink_item/proc/cost(var/telecrystals) - return item_cost - -/datum/uplink_item/proc/description() - return desc - -// get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying -/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc) - return 0 - -/datum/uplink_item/proc/log_icon() - return - -/datum/uplink_item/proc/purchase_log(obj/item/device/uplink/U) - feedback_add_details("traitor_uplink_items_bought", "[src]") - log_and_message_admins("used \the [U.loc] to buy \a [src]") - U.purchase_log[src] = U.purchase_log[src] + 1 - -datum/uplink_item/dd_SortValue() - return cost(INFINITY) - -/******************************** -* * -* Physical Uplink Entries * -* * -********************************/ -/datum/uplink_item/item/buy(var/obj/item/device/uplink/U, var/mob/user) - var/obj/item/I = ..() - if(!I) - return - - if(istype(I, /list)) - var/list/L = I - if(L.len) I = L[1] - - if(istype(I) && ishuman(user)) - var/mob/living/carbon/human/A = user - A.put_in_any_hand_if_possible(I) - return I - -/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc) - var/obj/item/I = new path(loc) - return I - -/datum/uplink_item/item/description() - if(!desc) - // Fallback description - var/obj/temp = src.path - desc = initial(temp.desc) - return ..() - -/datum/uplink_item/item/log_icon() - var/obj/I = path - return "\icon[I]" - -/************* -* Ammunition * -*************/ -/datum/uplink_item/item/ammo - item_cost = 2 - category = /datum/uplink_category/ammunition - -/datum/uplink_item/item/ammo/a357 - name = ".357" - path = /obj/item/ammo_magazine/a357 - -/datum/uplink_item/item/ammo/mc9mm - name = "9mm" - path = /obj/item/ammo_magazine/mc9mm - -/datum/uplink_item/item/ammo/c45m - name = ".45" - path = /obj/item/ammo_magazine/c45m - -/datum/uplink_item/item/ammo/darts - name = "Darts" - path = /obj/item/ammo_magazine/chemdart - -/datum/uplink_item/item/ammo/sniperammo - name = "14.5mm" - path = /obj/item/weapon/storage/box/sniperammo - -/datum/uplink_item/item/ammo/a556 - name = "5.56mm" - path = /obj/item/ammo_magazine/a556 - -/datum/uplink_item/item/ammo/a556/ap - name = "5.56mm AP" - path = /obj/item/ammo_magazine/a556/ap - -/datum/uplink_item/item/ammo/a10mm - name = "10mm" - path = /obj/item/ammo_magazine/a10mm - -/datum/uplink_item/item/ammo/a762 - name = "7.62mm" - path = /obj/item/ammo_magazine/a762 - -/datum/uplink_item/item/ammo/a762/ap - name = "7.62mm AP" - path = /obj/item/ammo_magazine/a762/ap - -/datum/uplink_item/item/ammo/g12 - name = "12 gauge" - path = /obj/item/ammo_magazine/g12 - -/datum/uplink_item/item/ammo/g12/beanbag - name = "12 gauge beanbag" - path = /obj/item/ammo_magazine/g12/beanbag - item_cost = 1 // Discount due to it being LTL. - -/datum/uplink_item/item/ammo/g12/pellet - name = "12 gauge pellet" - path = /obj/item/ammo_magazine/g12/pellet - -/*************************************** -* Highly Visible and Dangerous Weapons * -***************************************/ -/datum/uplink_item/item/visible_weapons - category = /datum/uplink_category/visible_weapons - -/datum/uplink_item/item/visible_weapons/energy_sword - name = "Energy Sword" - item_cost = 4 - path = /obj/item/weapon/melee/energy/sword - -/datum/uplink_item/item/visible_weapons/dartgun - name = "Dart Gun" - item_cost = 5 - path = /obj/item/weapon/gun/projectile/dartgun - -/datum/uplink_item/item/visible_weapons/crossbow - name = "Energy Crossbow" - item_cost = 5 - path = /obj/item/weapon/gun/energy/crossbow - -/datum/uplink_item/item/visible_weapons/silenced_45 - name = "Silenced .45" - item_cost = 5 - path = /obj/item/weapon/gun/projectile/silenced - -/datum/uplink_item/item/visible_weapons/riggedlaser - name = "Exosuit Rigged Laser" - item_cost = 6 - path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser - -/datum/uplink_item/item/visible_weapons/revolver - name = "Revolver" - item_cost = 6 - path = /obj/item/weapon/gun/projectile/revolver - -/datum/uplink_item/item/visible_weapons/heavysniper - name = "Anti-materiel Rifle" - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/item/weapon/gun/projectile/heavysniper - -//These are for traitors (or other antags, perhaps) to have the option of purchasing some merc gear. -/datum/uplink_item/item/visible_weapons/submachinegun - name = "Submachine Gun" - item_cost = 6 - path = /obj/item/weapon/gun/projectile/automatic/c20r - -/datum/uplink_item/item/visible_weapons/assaultrifle - name = "Assault Rifle" - item_cost = 7 - path = /obj/item/weapon/gun/projectile/automatic/sts35 - -/datum/uplink_item/item/visible_weapons/combatshotgun - name = "Combat Shotgun" - item_cost = 7 - path = /obj/item/weapon/gun/projectile/shotgun/pump/combat - -/datum/uplink_item/item/visible_weapons/egun - name = "Energy Gun" - item_cost = 5 - path = /obj/item/weapon/gun/energy/gun - -/datum/uplink_item/item/visible_weapons/lasercannon - name = "Laser Cannon" - item_cost = 6 - path = /obj/item/weapon/gun/energy/lasercannon - -/datum/uplink_item/item/visible_weapons/lasercarbine - name = "Laser Carbine" - item_cost = 7 - path = /obj/item/weapon/gun/energy/laser - -/datum/uplink_item/item/visible_weapons/ionrifle - name = "Ion Rifle" - item_cost = 5 - path = /obj/item/weapon/gun/energy/ionrifle - -/datum/uplink_item/item/visible_weapons/xray - name = "Xray Gun" - item_cost = 7 - path = /obj/item/weapon/gun/energy/xray - -/************************************* -* Stealthy and Inconspicuous Weapons * -*************************************/ -/datum/uplink_item/item/stealthy_weapons - category = /datum/uplink_category/stealthy_weapons - -/datum/uplink_item/item/stealthy_weapons/soap - name = "Subversive Soap" - item_cost = 1 - path = /obj/item/weapon/soap/syndie - -/datum/uplink_item/item/stealthy_weapons/concealed_cane - name = "Concealed Cane Sword" - item_cost = 1 - path = /obj/item/weapon/cane/concealed - -/datum/uplink_item/item/stealthy_weapons/detomatix - name = "Detomatix PDA Cartridge" - item_cost = 3 - path = /obj/item/weapon/cartridge/syndicate - -/datum/uplink_item/item/stealthy_weapons/parapen - name = "Paralysis Pen" - item_cost = 3 - path = /obj/item/weapon/pen/reagent/paralysis - -/datum/uplink_item/item/stealthy_weapons/cigarette_kit - name = "Cigarette Kit" - item_cost = 3 - path = /obj/item/weapon/storage/box/syndie_kit/cigarette - -/datum/uplink_item/item/stealthy_weapons/random_toxin - name = "Random Toxin - Beaker" - item_cost = 3 - path = /obj/item/weapon/storage/box/syndie_kit/toxin - -/******************************* -* Stealth and Camouflage Items * -*******************************/ -/datum/uplink_item/item/stealth_items - category = /datum/uplink_category/stealth_items - -/datum/uplink_item/item/stealth_items/id - name = "Agent ID card" - item_cost = 2 - path = /obj/item/weapon/card/id/syndicate - -/datum/uplink_item/item/stealth_items/syndigaloshes - name = "No-Slip Shoes" - item_cost = 2 - path = /obj/item/clothing/shoes/syndigaloshes - -/datum/uplink_item/item/stealth_items/spy - name = "Bug Kit" - item_cost = 2 - path = /obj/item/weapon/storage/box/syndie_kit/spy - -/datum/uplink_item/item/stealth_items/chameleon_kit - name = "Chameleon Kit" - item_cost = 3 - path = /obj/item/weapon/storage/box/syndie_kit/chameleon - -/datum/uplink_item/item/stealth_items/chameleon_projector - name = "Chameleon-Projector" - item_cost = 4 - path = /obj/item/device/chameleon - -/datum/uplink_item/item/stealth_items/chameleon_projector - name = "Chameleon-Projector" - item_cost = 4 - path = /obj/item/device/chameleon - -/datum/uplink_item/item/stealth_items/voice - name = "Voice Changer" - item_cost = 4 - path = /obj/item/clothing/mask/gas/voice - -/datum/uplink_item/item/stealth_items/camera_floppy - name = "Camera Network Access - Floppy" - item_cost = 6 - path = /obj/item/weapon/disk/file/cameras/syndicate - -/******** -* Armor * -********/ -/datum/uplink_item/item/armor - category = /datum/uplink_category/armor - -/datum/uplink_item/item/armor/combat - name = "Combat Armor Set" - item_cost = 5 - path = /obj/item/weapon/storage/box/syndie_kit/combat_armor - -/datum/uplink_item/item/armor/heavy_vest - name = "Heavy Armor Vest" - item_cost = 4 - path = /obj/item/clothing/suit/storage/vest/heavy/merc - -/******************** -* Devices and Tools * -********************/ -/datum/uplink_item/item/tools - category = /datum/uplink_category/tools - -/datum/uplink_item/item/tools/toolbox - name = "Fully Loaded Toolbox" - item_cost = 1 - path = /obj/item/weapon/storage/toolbox/syndicate - -/datum/uplink_item/item/tools/plastique - name = "C-4 (Destroys walls)" - item_cost = 2 - path = /obj/item/weapon/plastique - -/datum/uplink_item/item/tools/encryptionkey_radio - name = "Encrypted Radio Channel Key" - item_cost = 2 - path = /obj/item/device/encryptionkey/syndicate - -/datum/uplink_item/item/tools/encryptionkey_binary - name = "Binary Translator Key" - item_cost = 3 - path = /obj/item/device/encryptionkey/binary - -/datum/uplink_item/item/tools/emag - name = "Cryptographic Sequencer" - item_cost = 3 - path = /obj/item/weapon/card/emag - -/datum/uplink_item/item/tools/clerical - name = "Morphic Clerical Kit" - item_cost = 3 - path = /obj/item/weapon/storage/box/syndie_kit/clerical - -/datum/uplink_item/item/tools/space_suit - name = "Space Suit" - item_cost = 3 - path = /obj/item/weapon/storage/box/syndie_kit/space - -/datum/uplink_item/item/tools/thermal - name = "Thermal Imaging Glasses" - item_cost = 3 - path = /obj/item/clothing/glasses/thermal/syndi - -/datum/uplink_item/item/tools/powersink - name = "Powersink (DANGER!)" - item_cost = 5 - path = /obj/item/device/powersink - -/datum/uplink_item/item/tools/ai_module - name = "Hacked AI Upload Module" - item_cost = 7 - path = /obj/item/weapon/aiModule/syndicate - -/datum/uplink_item/item/tools/supply_beacon - name = "Hacked Supply Beacon (DANGER!)" - item_cost = 7 - path = /obj/item/supply_beacon - -/datum/uplink_item/item/tools/teleporter - name = "Teleporter Circuit Board" - item_cost = 20 - path = /obj/item/weapon/circuitboard/teleporter - -/datum/uplink_item/item/tools/money - name = "Operations Funding" - item_cost = 3 - path = /obj/item/weapon/storage/secure/briefcase/money - desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities." - -/datum/uplink_item/item/tools/crystal - name = "Tradable Crystal" - item_cost = 1 - path = /obj/item/device/telecrystal - desc = "A telecrystal that can be transferred from one user to another. Be sure not to give it to just anyone." - -/*********** -* Implants * -***********/ -/datum/uplink_item/item/implants - category = /datum/uplink_category/implants - -/datum/uplink_item/item/implants/imp_freedom - name = "Freedom Implant" - item_cost = 3 - path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom - -/datum/uplink_item/item/implants/imp_compress - name = "Compressed Matter Implant" - item_cost = 4 - path = /obj/item/weapon/storage/box/syndie_kit/imp_compress - -/datum/uplink_item/item/implants/imp_explosive - name = "Explosive Implant (DANGER!)" - item_cost = 6 - path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive - -/datum/uplink_item/item/implants/imp_uplink - name = "Uplink Implant" //Original name: "Uplink Implant (Contains 5 Telecrystals)" - item_cost = 5 //Original cost: 10 - path = /obj/item/weapon/storage/box/syndie_kit/imp_uplink - -/********** -* Medical * -**********/ -/datum/uplink_item/item/medical - category = /datum/uplink_category/medical - -/datum/uplink_item/item/medical/sinpockets - name = "Box of Sin-Pockets" - item_cost = 1 - path = /obj/item/weapon/storage/box/sinpockets - -/datum/uplink_item/item/medical/surgery - name = "Surgery kit" - item_cost = 6 - path = /obj/item/weapon/storage/firstaid/surgery - -/datum/uplink_item/item/medical/combat - name = "Combat medical kit" - item_cost = 6 - path = /obj/item/weapon/storage/firstaid/combat - -/******************* -* Hardsuit Modules * -*******************/ -/datum/uplink_item/item/hardsuit_modules - category = /datum/uplink_category/hardsuit_modules - -/datum/uplink_item/item/hardsuit_modules/thermal - name = "Thermal Scanner" - item_cost = 2 - path = /obj/item/rig_module/vision/thermal - -/datum/uplink_item/item/hardsuit_modules/energy_net - name = "Net Projector" - item_cost = 3 - path = /obj/item/rig_module/fabricator/energy_net - -/datum/uplink_item/item/ewar_voice - name = "Electrowarfare Suite and Voice Synthesiser" - item_cost = 4 - path = /obj/item/weapon/storage/box/syndie_kit/ewar_voice - -/datum/uplink_item/item/hardsuit_modules/maneuvering_jets - name = "Maneuvering Jets" - item_cost = 4 - path = /obj/item/rig_module/maneuvering_jets - -/datum/uplink_item/item/hardsuit_modules/egun - name = "Mounted Energy Gun" - item_cost = 6 - path = /obj/item/rig_module/mounted/egun - -/datum/uplink_item/item/hardsuit_modules/power_sink - name = "Power Sink" - item_cost = 6 - path = /obj/item/rig_module/power_sink - -/datum/uplink_item/item/hardsuit_modules/laser_canon - name = "Mounted Laser Cannon" - item_cost = 8 - path = /obj/item/rig_module/mounted - -/*********** -* Grenades * -************/ -/datum/uplink_item/item/grenades - category = /datum/uplink_category/grenades - -/datum/uplink_item/item/grenades/anti_photon - name = "5xPhoton Disruption Grenades" - item_cost = 2 - path = /obj/item/weapon/storage/box/anti_photons - -/datum/uplink_item/item/grenades/emp - name = "5xEMP Grenades" - item_cost = 3 - path = /obj/item/weapon/storage/box/emps - -/datum/uplink_item/item/grenades/smoke - name = "5xSmoke Grenades" - item_cost = 2 - path = /obj/item/weapon/storage/box/smokes - -/************ -* Badassery * -************/ -/datum/uplink_item/item/badassery - category = /datum/uplink_category/badassery - -/datum/uplink_item/item/badassery/balloon - name = "For showing that You Are The BOSS (Useless Balloon)" - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/item/toy/syndicateballoon - -/datum/uplink_item/item/badassery/balloon/NT - name = "For showing that you love NT SOO much (Useless Balloon)" - path = /obj/item/toy/nanotrasenballoon - -/************** -* Random Item * -**************/ -/datum/uplink_item/item/badassery/random_one - name = "Random Item" - desc = "Buys you one random item." - -/datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user) - var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses) - return item.buy(U, user) - -/datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U) - return default_uplink_selection.get_random_item(U.uses, U) != null - -/datum/uplink_item/item/badassery/random_many - name = "Random Items" - desc = "Buys you as many random items you can afford. Convenient packaging NOT included." - -/datum/uplink_item/item/badassery/random_many/cost(var/telecrystals) - return max(1, telecrystals) - -/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc) - var/list/bought_items = list() - for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc)) - UI.purchase_log(U) - var/obj/item/I = UI.get_goods(U, loc) - if(istype(I)) - bought_items += I - - return bought_items - -/datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U) - feedback_add_details("traitor_uplink_items_bought", "[src]") - log_and_message_admins("used \the [U.loc] to buy \a [src]") - -/**************** -* Surplus Crate * -****************/ -/datum/uplink_item/item/badassery/surplus - name = "Surplus Crate" - item_cost = 40 - var/item_worth = 60 - var/icon - -/datum/uplink_item/item/badassery/surplus/New() - ..() - desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers." - -/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc) - var/obj/structure/largecrate/C = new(loc) - var/random_items = get_random_uplink_items(null, item_worth, C) - for(var/datum/uplink_item/I in random_items) - I.purchase_log(U) - I.get_goods(U, C) - - return C - -/datum/uplink_item/item/badassery/surplus/log_icon() - if(!icon) - var/obj/structure/largecrate/C = /obj/structure/largecrate - icon = image(initial(C.icon), initial(C.icon_state)) - - return "\icon[icon]" - -/******************************** -* * -* Abstract Uplink Entries * -* * -********************************/ -var/image/default_abstract_uplink_icon -/datum/uplink_item/abstract/log_icon() - if(!default_abstract_uplink_icon) - default_abstract_uplink_icon = image('icons/obj/pda.dmi', "pda-syn") - - return "\icon[default_abstract_uplink_icon]" - -/**************** -* Announcements * -*****************/ -/datum/uplink_item/abstract/announcements - category = /datum/uplink_category/services - -/datum/uplink_item/abstract/announcements/buy(var/obj/item/device/uplink/U, var/mob/user) - . = ..() - if(.) - log_and_message_admins("has triggered a falsified [src]", user) - -/datum/uplink_item/abstract/announcements/fake_centcom - item_cost = DEFAULT_TELECRYSTAL_AMOUNT / 2 - -/datum/uplink_item/abstract/announcements/fake_centcom/New() - ..() - name = "[command_name()] Update Announcement" - desc = "Causes a falsified [command_name()] Update. Triggers immediately after supplying additional data." - -/datum/uplink_item/abstract/announcements/fake_centcom/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args) - command_announcement.Announce(args.["message"], args.["title"]) - return 1 - -/datum/uplink_item/abstract/announcements/fake_crew_arrival - name = "Crew Arrival Announcement/Records" - desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!" - item_cost = 4 - -/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args) - if(!user) - return 0 - - var/obj/item/weapon/card/id/I = user.GetIdCard() - var/datum/data/record/random_general_record - var/datum/data/record/random_medical_record - if(data_core.general.len) - random_general_record = pick(data_core.general) - random_medical_record = find_medical_record("id", random_general_record.fields["id"]) - - var/datum/data/record/general = data_core.CreateGeneralRecord(user) - if(I) - general.fields["age"] = I.age - general.fields["rank"] = I.assignment - general.fields["real_rank"] = I.assignment - general.fields["name"] = I.registered_name - general.fields["sex"] = I.sex - else - var/mob/living/carbon/human/H - if(istype(user,/mob/living/carbon/human)) - H = user - general.fields["age"] = H.age - else - general.fields["age"] = initial(H.age) - var/assignment = GetAssignment(user) - general.fields["rank"] = assignment - general.fields["real_rank"] = assignment - general.fields["name"] = user.real_name - general.fields["sex"] = capitalize(user.gender) - - general.fields["species"] = user.get_species() - var/datum/data/record/medical = data_core.CreateMedicalRecord(general.fields["name"], general.fields["id"]) - data_core.CreateSecurityRecord(general.fields["name"], general.fields["id"]) - - if(!random_general_record) - general.fields["citizenship"] = random_general_record.fields["citizenship"] - general.fields["faction"] = random_general_record.fields["faction"] - general.fields["fingerprint"] = random_general_record.fields["fingerprint"] - general.fields["home_system"] = random_general_record.fields["home_system"] - general.fields["religion"] = random_general_record.fields["religion"] - if(random_medical_record) - medical.fields["b_type"] = random_medical_record.fields["b_type"] - medical.fields["b_dna"] = random_medical_record.fields["b_type"] - - if(I) - general.fields["fingerprint"] = I.fingerprint_hash - medical.fields["b_type"] = I.blood_type - medical.fields["b_dna"] = I.dna_hash - - AnnounceArrivalSimple(general.fields["name"], general.fields["rank"]) - return 1 - -/datum/uplink_item/abstract/announcements/fake_ion_storm - name = "Ion Storm Announcement" - desc = "Interferes with the station's ion sensors. Triggers immediately upon investment." - item_cost = 1 - -/datum/uplink_item/abstract/announcements/fake_ion_storm/get_goods(var/obj/item/device/uplink/U, var/loc) - ion_storm_announcement() - return 1 - -/datum/uplink_item/abstract/announcements/fake_radiation - name = "Radiation Storm Announcement" - desc = "Interferes with the station's radiation sensors. Triggers immediately upon investment." - item_cost = 3 - -/datum/uplink_item/abstract/announcements/fake_radiation/get_goods(var/obj/item/device/uplink/U, var/loc) - var/datum/event_meta/EM = new(EVENT_LEVEL_MUNDANE, "Fake Radiation Storm", add_to_queue = 0) - new/datum/event/radiation_storm/syndicate(EM) - return 1 - - -/**************** -* Support procs * -****************/ -/proc/get_random_uplink_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc) - var/list/bought_items = list() - while(remaining_TC) - var/datum/uplink_item/I = default_uplink_selection.get_random_item(remaining_TC, U, bought_items) - if(!I) - break - bought_items += I - remaining_TC -= I.cost(remaining_TC) - - return bought_items diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm index 70cca95105..00860eb30c 100644 --- a/code/game/objects/items/devices/uplink_random_lists.dm +++ b/code/game/objects/items/devices/uplink_random_lists.dm @@ -27,7 +27,7 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra if(!prob(RI.keep_probability)) continue var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item] - if(I.cost(telecrystals) > telecrystals) + if(I.cost(telecrystals, U) > telecrystals) continue if(bought_items && (I in bought_items) && !prob(RI.reselect_probability)) continue diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm index 43b654d58d..8a7516f476 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm @@ -87,3 +87,14 @@ /obj/item/weapon/stock_parts/subspace/crystal = 1, /obj/item/weapon/stock_parts/subspace/treatment = 2, /obj/item/stack/cable_coil = 2) + +/obj/item/weapon/circuitboard/telecomms/pda_multicaster + name = T_BOARD("pda multicaster") + build_path = "/obj/machinery/pda_multicaster" + origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2) + req_components = list( + /obj/item/weapon/stock_parts/subspace/ansible = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/subspace/treatment = 1, + /obj/item/stack/cable_coil = 2) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 8e3fed202d..294812513c 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -18,7 +18,7 @@ wires = new(src) image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2") ..() - + /obj/item/weapon/plastique/Destroy() qdel(wires) wires = null @@ -78,7 +78,7 @@ if(target) if (istype(target, /turf/simulated/wall)) var/turf/simulated/wall/W = target - W.dismantle_wall(1) + W.dismantle_wall(1,1,1) else if(istype(target, /mob/living)) target.ex_act(2) // c4 can't gib mobs anymore. else diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index a95d3b1382..17616942c1 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -22,13 +22,13 @@ B.update_icon() new/obj/effect/effect/sparks(src.loc) - new/obj/effect/effect/smoke/illumination(src.loc, brightness=15) + new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF") qdel(src) return proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. M << "BANG" // Called during the loop that bangs people in lockers/containers and when banging - playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 5) // people in normal view. Could theroetically be called during other explosions. + playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions. // -- Polymorph //Checking for protections diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 783a2088da..69f14d7c2b 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -417,22 +417,26 @@ the implant may become unstable and either pre-maturely inject the subject or si var/area/t = get_area(M) switch (cause) if("death") - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) //give the syndies a bit of stealth - a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm") + a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security") + a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical") else - a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm") + a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security") + a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical") qdel(a) processing_objects.Remove(src) if ("emp") - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) var/name = prob(50) ? t.name : pick(teleportlocs) - a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm") + a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security") + a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical") qdel(a) else - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) - a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) + a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security") + a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical") qdel(a) processing_objects.Remove(src) diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index b5c966ebd5..ff1d347c74 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -57,6 +57,8 @@ name = "fork" desc = "It's a fork. Sure is pointy." icon_state = "fork" + sharp = 1 + edge = 0 /obj/item/weapon/material/kitchen/utensil/fork/plastic default_material = "plastic" diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index 80d3771f0e..dcd33fa172 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -1,7 +1,7 @@ /obj/item/weapon/material/harpoon name = "harpoon" sharp = 1 - edge = 1 + edge = 0 desc = "Tharr she blows!" icon_state = "harpoon" item_state = "harpoon" diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 52b949cf35..f821ab1db6 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -68,7 +68,7 @@ /obj/item/weapon/material/twohanded/update_icon() icon_state = "[base_icon][wielded]" item_state = icon_state - + /obj/item/weapon/material/twohanded/dropped() ..() if(wielded) @@ -119,7 +119,7 @@ unwielded_force_divisor = 0.65 // 14 when unwielded based on above thrown_force_divisor = 1.5 // 20 when thrown with weight 15 (glass) throw_speed = 3 - edge = 1 + edge = 0 sharp = 1 hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 47a2f00b21..f8b21af190 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -51,31 +51,24 @@ new src.foldable(get_turf(src)) qdel(src) -/obj/item/weapon/storage/box/survival/ - New() - ..() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/weapon/tank/emergency_oxygen( src ) +/obj/item/weapon/storage/box/survival/New() + ..() + new /obj/item/clothing/mask/breath(src) + new /obj/item/weapon/tank/emergency_oxygen(src) -/obj/item/weapon/storage/box/engineer/ - New() - ..() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/weapon/tank/emergency_oxygen/engi( src ) +/obj/item/weapon/storage/box/engineer/New() + ..() + new /obj/item/clothing/mask/breath(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) /obj/item/weapon/storage/box/gloves name = "box of latex gloves" desc = "Contains white gloves." icon_state = "latex" - New() - ..() - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex(src) +/obj/item/weapon/storage/box/gloves/New() + ..() + for(var/i = 1 to 7) new /obj/item/clothing/gloves/latex(src) /obj/item/weapon/storage/box/masks @@ -83,75 +76,50 @@ desc = "This box contains masks of sterility." icon_state = "sterile" - New() - ..() +/obj/item/weapon/storage/box/masks/New() + ..() + for(var/i = 1 to 7) new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - /obj/item/weapon/storage/box/syringes name = "box of syringes" desc = "A box full of syringes." icon_state = "syringe" - New() - ..() - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) +/obj/item/weapon/storage/box/syringes/New() + ..() + for(var/i = 1 to 7) + new /obj/item/weapon/reagent_containers/syringe(src) /obj/item/weapon/storage/box/syringegun name = "box of syringe gun cartridges" desc = "A box full of compressed gas cartridges." icon_state = "syringe" - New() - ..() - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - +/obj/item/weapon/storage/box/syringegun/New() + ..() + for(var/i = 1 to 7) + new /obj/item/weapon/syringe_cartridge(src) /obj/item/weapon/storage/box/beakers name = "box of beakers" icon_state = "beaker" - New() - ..() - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) +/obj/item/weapon/storage/box/beakers/New() + ..() + for(var/i = 1 to 7) + new /obj/item/weapon/reagent_containers/glass/beaker(src) /obj/item/weapon/storage/box/injectors name = "box of DNA injectors" desc = "This box contains injectors it seems." - New() - ..() - new /obj/item/weapon/dnainjector/h2m(src) - new /obj/item/weapon/dnainjector/h2m(src) +/obj/item/weapon/storage/box/injectors/New() + ..() + for(var/i = 1 to 3) new /obj/item/weapon/dnainjector/h2m(src) + for(var/i = 1 to 3) new /obj/item/weapon/dnainjector/m2h(src) - new /obj/item/weapon/dnainjector/m2h(src) - new /obj/item/weapon/dnainjector/m2h(src) - /obj/item/weapon/storage/box/blanks name = "box of blank shells" @@ -159,14 +127,9 @@ icon_state = "blankshot_box" item_state = "syringe_kit" - New() - ..() - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) +/obj/item/weapon/storage/box/blanks/New() + ..() + for(var/i = 1 to 7) new /obj/item/ammo_casing/shotgun/blank(src) /obj/item/weapon/storage/box/beanbags @@ -175,14 +138,9 @@ icon_state = "beanshot_box" item_state = "syringe_kit" - New() - ..() - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) +/obj/item/weapon/storage/box/beanbags/New() + ..() + for(var/i = 1 to 7) new /obj/item/ammo_casing/shotgun/beanbag(src) /obj/item/weapon/storage/box/shotgunammo @@ -191,14 +149,9 @@ icon_state = "lethalshellshot_box" item_state = "syringe_kit" - New() - ..() - new /obj/item/ammo_casing/shotgun(src) - new /obj/item/ammo_casing/shotgun(src) - new /obj/item/ammo_casing/shotgun(src) - new /obj/item/ammo_casing/shotgun(src) - new /obj/item/ammo_casing/shotgun(src) - new /obj/item/ammo_casing/shotgun(src) +/obj/item/weapon/storage/box/shotgunammo/New() + ..() + for(var/i = 1 to 7) new /obj/item/ammo_casing/shotgun(src) /obj/item/weapon/storage/box/shotgunshells @@ -207,14 +160,9 @@ icon_state = "lethalslug_box" item_state = "syringe_kit" - New() - ..() - new /obj/item/ammo_casing/shotgun/pellet(src) - new /obj/item/ammo_casing/shotgun/pellet(src) - new /obj/item/ammo_casing/shotgun/pellet(src) - new /obj/item/ammo_casing/shotgun/pellet(src) - new /obj/item/ammo_casing/shotgun/pellet(src) - new /obj/item/ammo_casing/shotgun/pellet(src) +/obj/item/weapon/storage/box/shotgunshells/New() + ..() + for(var/i = 1 to 7) new /obj/item/ammo_casing/shotgun/pellet(src) /obj/item/weapon/storage/box/flashshells @@ -223,14 +171,9 @@ icon_state = "illumshot_box" item_state = "syringe_kit" - New() - ..() - new /obj/item/ammo_casing/shotgun/flash(src) - new /obj/item/ammo_casing/shotgun/flash(src) - new /obj/item/ammo_casing/shotgun/flash(src) - new /obj/item/ammo_casing/shotgun/flash(src) - new /obj/item/ammo_casing/shotgun/flash(src) - new /obj/item/ammo_casing/shotgun/flash(src) +/obj/item/weapon/storage/box/flashshells/New() + ..() + for(var/i = 1 to 7) new /obj/item/ammo_casing/shotgun/flash(src) /obj/item/weapon/storage/box/stunshells @@ -239,14 +182,9 @@ icon_state = "stunshot_box" item_state = "syringe_kit" - New() - ..() - new /obj/item/ammo_casing/shotgun/stunshell(src) - new /obj/item/ammo_casing/shotgun/stunshell(src) - new /obj/item/ammo_casing/shotgun/stunshell(src) - new /obj/item/ammo_casing/shotgun/stunshell(src) - new /obj/item/ammo_casing/shotgun/stunshell(src) - new /obj/item/ammo_casing/shotgun/stunshell(src) +/obj/item/weapon/storage/box/stunshells/New() + ..() + for(var/i = 1 to 7) new /obj/item/ammo_casing/shotgun/stunshell(src) /obj/item/weapon/storage/box/practiceshells @@ -255,28 +193,18 @@ icon_state = "blankshot_box" item_state = "syringe_kit" - New() - ..() - new /obj/item/ammo_casing/shotgun/practice(src) - new /obj/item/ammo_casing/shotgun/practice(src) - new /obj/item/ammo_casing/shotgun/practice(src) - new /obj/item/ammo_casing/shotgun/practice(src) - new /obj/item/ammo_casing/shotgun/practice(src) - new /obj/item/ammo_casing/shotgun/practice(src) +/obj/item/weapon/storage/box/practiceshells/New() + ..() + for(var/i = 1 to 7) new /obj/item/ammo_casing/shotgun/practice(src) /obj/item/weapon/storage/box/sniperammo name = "box of 14.5mm shells" desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." - New() - ..() - new /obj/item/ammo_casing/a145(src) - new /obj/item/ammo_casing/a145(src) - new /obj/item/ammo_casing/a145(src) - new /obj/item/ammo_casing/a145(src) - new /obj/item/ammo_casing/a145(src) - new /obj/item/ammo_casing/a145(src) +/obj/item/weapon/storage/box/sniperammo/New() + ..() + for(var/i = 1 to 7) new /obj/item/ammo_casing/a145(src) /obj/item/weapon/storage/box/flashbangs @@ -284,14 +212,9 @@ desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." icon_state = "flashbang" - New() - ..() - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) +/obj/item/weapon/storage/box/flashbangs/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/grenade/flashbang(src) /obj/item/weapon/storage/box/emps @@ -299,41 +222,29 @@ desc = "A box containing 5 military grade EMP grenades.
WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur." icon_state = "emp" - New() - ..() - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) +/obj/item/weapon/storage/box/emps/New() + ..() + for(var/i = 1 to 5) + new /obj/item/weapon/grenade/empgrenade(src) /obj/item/weapon/storage/box/empslite name = "box of low yield emp grenades" desc = "A box containing 5 low yield EMP grenades.
WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur." icon_state = "emp" - New() - ..() - new /obj/item/weapon/grenade/empgrenade/low_yield(src) - new /obj/item/weapon/grenade/empgrenade/low_yield(src) - new /obj/item/weapon/grenade/empgrenade/low_yield(src) - new /obj/item/weapon/grenade/empgrenade/low_yield(src) +/obj/item/weapon/storage/box/empslite/New() + ..() + for(var/i = 1 to 5) new /obj/item/weapon/grenade/empgrenade/low_yield(src) /obj/item/weapon/storage/box/smokes name = "box of smoke bombs" - desc = "A box containing 5 smoke bombs." + desc = "A box containing 7 smoke bombs." icon_state = "flashbang" - /obj/item/weapon/storage/box/smokes/New() - ..() - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) + ..() + for(var/i = 1 to 7) new /obj/item/weapon/grenade/smokebomb(src) /obj/item/weapon/storage/box/anti_photons @@ -342,11 +253,8 @@ icon_state = "flashbang" /obj/item/weapon/storage/box/anti_photons/New() - ..() - new /obj/item/weapon/grenade/anti_photon(src) - new /obj/item/weapon/grenade/anti_photon(src) - new /obj/item/weapon/grenade/anti_photon(src) - new /obj/item/weapon/grenade/anti_photon(src) + ..() + for(var/i = 1 to 5) new /obj/item/weapon/grenade/anti_photon(src) /obj/item/weapon/storage/box/frags @@ -354,73 +262,63 @@ desc = "A box containing 5 military grade fragmentation grenades.
WARNING: These devices are extremely dangerous and can cause limb loss or death in repeated use." icon_state = "frag" +/obj/item/weapon/storage/box/frags/New() + ..() + for(var/i = 1 to 5) + new /obj/item/weapon/grenade/explosive(src) - New() - ..() - new /obj/item/weapon/grenade/explosive(src) - new /obj/item/weapon/grenade/explosive(src) - new /obj/item/weapon/grenade/explosive(src) - new /obj/item/weapon/grenade/explosive(src) - new /obj/item/weapon/grenade/explosive(src) +/obj/item/weapon/storage/box/metalfoam + name = "box of metal foam grenades." + desc = "A box containing 7 metal foam grenades." + icon_state = "flashbang" + +/obj/item/weapon/storage/box/metalfoam/New() + ..() + for(var/i = 1 to 7) + new /obj/item/weapon/grenade/chem_grenade/metalfoam /obj/item/weapon/storage/box/trackimp name = "boxed tracking implant kit" desc = "Box full of scum-bag tracking utensils." icon_state = "implant" - New() - ..() +/obj/item/weapon/storage/box/trackimp/New() + ..() + for(var/i = 1 to 4) new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implanter(src) - new /obj/item/weapon/implantpad(src) - new /obj/item/weapon/locator(src) + new /obj/item/weapon/implanter(src) + new /obj/item/weapon/implantpad(src) + new /obj/item/weapon/locator(src) /obj/item/weapon/storage/box/chemimp name = "boxed chemical implant kit" desc = "Box of stuff used to implant chemicals." icon_state = "implant" - New() - ..() +/obj/item/weapon/storage/box/chemimp/New() + ..() + for(var/i = 1 to 5) new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implanter(src) - new /obj/item/weapon/implantpad(src) - - + new /obj/item/weapon/implanter(src) + new /obj/item/weapon/implantpad(src) /obj/item/weapon/storage/box/rxglasses name = "box of prescription glasses" desc = "This box contains nerd glasses." icon_state = "glasses" - New() - ..() - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) +/obj/item/weapon/storage/box/rxglasses/New() + ..() + for(var/i = 1 to 7) new /obj/item/clothing/glasses/regular(src) /obj/item/weapon/storage/box/drinkingglasses name = "box of drinking glasses" desc = "It has a picture of drinking glasses on it." - New() - ..() - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) +/obj/item/weapon/storage/box/drinkingglasses/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) /obj/item/weapon/storage/box/cdeathalarm_kit @@ -429,57 +327,38 @@ icon_state = "implant" item_state = "syringe_kit" - New() - ..() - new /obj/item/weapon/implanter(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) +/obj/item/weapon/storage/box/cdeathalarm_kit/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/implantcase/death_alarm(src) + new /obj/item/weapon/implanter(src) /obj/item/weapon/storage/box/condimentbottles name = "box of condiment bottles" desc = "It has a large ketchup smear on it." - New() - ..() +/obj/item/weapon/storage/box/condimentbottles/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - - /obj/item/weapon/storage/box/cups name = "box of paper cups" desc = "It has pictures of paper cups on the front." - New() - ..() - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) +/obj/item/weapon/storage/box/cups/New() + ..() + for(var/i = 1 to 7) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src) /obj/item/weapon/storage/box/donkpockets name = "box of donk-pockets" desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes." icon_state = "donk_kit" - New() - ..() - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) +/obj/item/weapon/storage/box/donkpockets/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) /obj/item/weapon/storage/box/sinpockets @@ -487,13 +366,9 @@ desc = "Instructions: Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes." icon_state = "donk_kit" - New() - ..() - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) +/obj/item/weapon/storage/box/sinpockets/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) /obj/item/weapon/storage/box/monkeycubes @@ -502,112 +377,88 @@ icon = 'icons/obj/food.dmi' icon_state = "monkeycubebox" can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube) - New() - ..() - if(src.type == /obj/item/weapon/storage/box/monkeycubes) - for(var/i = 1 to 5) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) + +/obj/item/weapon/storage/box/monkeycubes/New() + ..() + if(src.type == /obj/item/weapon/storage/box/monkeycubes) + for(var/i = 1 to 4) + new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) /obj/item/weapon/storage/box/monkeycubes/farwacubes name = "farwa cube box" desc = "Drymate brand farwa cubes, shipped from Ahdomai. Just add water!" - New() - ..() - for(var/i = 1 to 5) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src) + +/obj/item/weapon/storage/box/monkeycubes/farwacubes/New() + ..() + for(var/i = 1 to 4) + new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src) /obj/item/weapon/storage/box/monkeycubes/stokcubes name = "stok cube box" desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!" - New() - ..() - for(var/i = 1 to 5) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src) + +/obj/item/weapon/storage/box/monkeycubes/stokcubes/New() + ..() + for(var/i = 1 to 4) + new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src) /obj/item/weapon/storage/box/monkeycubes/neaeracubes name = "neaera cube box" desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!" - New() - ..() - for(var/i = 1 to 5) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src) + +/obj/item/weapon/storage/box/monkeycubes/neaeracubes/New() + ..() + for(var/i = 1 to 4) + new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src) /obj/item/weapon/storage/box/ids name = "box of spare IDs" desc = "Has so many empty IDs." icon_state = "id" - New() - ..() +/obj/item/weapon/storage/box/ids/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - /obj/item/weapon/storage/box/seccarts name = "box of spare R.O.B.U.S.T. Cartridges" desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security." icon_state = "pda" - New() - ..() +/obj/item/weapon/storage/box/seccarts/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - /obj/item/weapon/storage/box/handcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." icon_state = "handcuff" - New() - ..() +/obj/item/weapon/storage/box/handcuffs/New() + ..() + for(var/i = 1 to 7) new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - /obj/item/weapon/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" desc = "WARNING: Keep out of reach of children." icon_state = "mousetraps" - New() - ..() - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) +/obj/item/weapon/storage/box/mousetraps/New() + ..() + for(var/i = 1 to 7) + new /obj/item/device/assembly/mousetrap(src) /obj/item/weapon/storage/box/pillbottles name = "box of pill bottles" desc = "It has pictures of pill bottles on its front." - New() - ..() - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - +/obj/item/weapon/storage/box/pillbottles/New() + ..() + for(var/i = 1 to 7) + new /obj/item/weapon/storage/pill_bottle(src) /obj/item/weapon/storage/box/snappops name = "snap pop box" @@ -615,10 +466,11 @@ icon = 'icons/obj/toy.dmi' icon_state = "spbox" can_hold = list(/obj/item/toy/snappop) - New() - ..() - for(var/i = 1 to 8) - new /obj/item/toy/snappop(src) + +/obj/item/weapon/storage/box/snappops/New() + ..() + for(var/i = 1 to 8) + new /obj/item/toy/snappop(src) /obj/item/weapon/storage/box/matches name = "matchbox" @@ -630,28 +482,29 @@ slot_flags = SLOT_BELT can_hold = list(/obj/item/weapon/flame/match) - New() - ..() - for(var/i=1 to 10) - new /obj/item/weapon/flame/match(src) +/obj/item/weapon/storage/box/matches/New() + ..() + for(var/i=1 to 10) + new /obj/item/weapon/flame/match(src) - attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob) - if(istype(W) && !W.lit && !W.burnt) - W.lit = 1 - W.damtype = "burn" - W.icon_state = "match_lit" - processing_objects.Add(W) - W.update_icon() - return +/obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob) + if(istype(W) && !W.lit && !W.burnt) + W.lit = 1 + W.damtype = "burn" + W.icon_state = "match_lit" + processing_objects.Add(W) + W.update_icon() + return /obj/item/weapon/storage/box/autoinjectors name = "box of injectors" desc = "Contains autoinjectors." icon_state = "syringe" - New() - ..() - for (var/i = 1 to 7) - new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src) + +/obj/item/weapon/storage/box/autoinjectors/New() + ..() + for (var/i = 1 to 7) + new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src) /obj/item/weapon/storage/box/lights name = "box of replacement bulbs" @@ -666,7 +519,7 @@ /obj/item/weapon/storage/box/lights/bulbs/New() ..() - for(var/i = 0; i < 21; i++) + for(var/i = 1 to 24) new /obj/item/weapon/light/bulb(src) /obj/item/weapon/storage/box/lights/tubes @@ -675,7 +528,7 @@ /obj/item/weapon/storage/box/lights/tubes/New() ..() - for(var/i = 0; i < 21; i++) + for(var/i = 1 to 24) new /obj/item/weapon/light/tube(src) /obj/item/weapon/storage/box/lights/mixed @@ -684,9 +537,9 @@ /obj/item/weapon/storage/box/lights/mixed/New() ..() - for(var/i = 0; i < 14; i++) + for(var/i = 1 to 16) new /obj/item/weapon/light/tube(src) - for(var/i = 0; i < 7; i++) + for(var/i = 1 to 8) new /obj/item/weapon/light/bulb(src) /obj/item/weapon/storage/box/freezer @@ -701,3 +554,20 @@ max_storage_space = 21 use_to_pickup = 1 // for picking up broken bulbs, not that most people will try +/obj/item/weapon/storage/box/ambrosia + name = "ambrosia seeds box" + desc = "Contains the seeds you need to get a little high." + +/obj/item/weapon/storage/box/ambrosia/New() + ..() + for(var/i = 1 to 7) + new /obj/item/seeds/ambrosiavulgarisseed(src) + +/obj/item/weapon/storage/box/ambrosiadeus + name = "ambrosia deus seeds box" + desc = "Contains the seeds you need to get a proper healthy high." + +/obj/item/weapon/storage/box/ambrosiadeus/New() + ..() + for(var/i = 1 to 7) + new /obj/item/seeds/ambrosiadeusseed(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index 8d954d5306..cf1af1ea79 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -16,6 +16,7 @@ icon_state = "donutbox" name = "donut box" var/startswith = 6 + max_storage_space = 12 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) foldable = /obj/item/stack/material/cardboard diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 7dcc429d27..2df9701436 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -45,7 +45,6 @@ ..() /obj/item/weapon/storage/MouseDrop(obj/over_object as obj) - if(!canremove) return @@ -69,7 +68,7 @@ if (( usr.restrained() ) || ( usr.stat )) return - if ((src.loc == usr) && !usr.unEquip(src)) + if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src)) return switch(over_object.name) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index a79d6575e5..c1922b735e 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -46,6 +46,7 @@ throw_range = 5 matter = list(DEFAULT_WALL_MATERIAL = 75) attack_verb = list("stabbed") + sharp = 1 suicide_act(mob/user) viewers(user) << pick("\The [user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.", \ @@ -440,6 +441,7 @@ return ..() else user << "Nothing to fix!" + S.update_wounds() return return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 787e0adb3b..35a9b55438 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -20,7 +20,7 @@ new /obj/item/clothing/accessory/storage/brown_vest(src) new /obj/item/blueprints(src) new /obj/item/clothing/under/rank/chief_engineer(src) - new /obj/item/clothing/under/rank/chief_engineer/skirt(src) + new /obj/item/clothing/under/rank/engineer/chief_engineer/skirt(src) new /obj/item/clothing/head/hardhat/white(src) new /obj/item/clothing/head/welding(src) new /obj/item/clothing/gloves/yellow(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index fdd1ed5c80..95d4fd3d06 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -192,7 +192,7 @@ new /obj/item/clothing/under/rank/medical/navyblue(src) new /obj/item/clothing/head/surgery/navyblue(src) new /obj/item/clothing/under/rank/chief_medical_officer(src) - new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src) + new /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt(src) new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src) new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src) new /obj/item/weapon/cartridge/cmo(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 0736a13f13..2e342e55cf 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -246,9 +246,9 @@ new /obj/item/clothing/under/rank/atmospheric_technician(src) new /obj/item/clothing/under/rank/atmospheric_technician(src) new /obj/item/clothing/under/rank/atmospheric_technician(src) - new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src) - new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src) - new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src) + new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src) + new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src) + new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src) new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) @@ -396,8 +396,8 @@ ..() new /obj/item/clothing/under/rank/chemist(src) new /obj/item/clothing/under/rank/chemist(src) - new /obj/item/clothing/under/rank/chemist/skirt(src) - new /obj/item/clothing/under/rank/chemist/skirt(src) + new /obj/item/clothing/under/rank/medical/chemist/skirt(src) + new /obj/item/clothing/under/rank/medical/chemist/skirt(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src) @@ -418,8 +418,8 @@ ..() new /obj/item/clothing/under/rank/geneticist(src) new /obj/item/clothing/under/rank/geneticist(src) - new /obj/item/clothing/under/rank/geneticist/skirt(src) - new /obj/item/clothing/under/rank/geneticist/skirt(src) + new /obj/item/clothing/under/rank/medical/geneticist/skirt(src) + new /obj/item/clothing/under/rank/medical/geneticist/skirt(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src) @@ -440,8 +440,8 @@ ..() new /obj/item/clothing/under/rank/virologist(src) new /obj/item/clothing/under/rank/virologist(src) - new /obj/item/clothing/under/rank/virologist/skirt(src) - new /obj/item/clothing/under/rank/virologist/skirt(src) + new /obj/item/clothing/under/rank/medical/virologist/skirt(src) + new /obj/item/clothing/under/rank/medical/virologist/skirt(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src) @@ -517,9 +517,9 @@ new /obj/item/clothing/under/color/yellow(src) new /obj/item/clothing/under/color/green(src) new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/dress/plaid_blue(src) - new /obj/item/clothing/under/dress/plaid_red(src) - new /obj/item/clothing/under/dress/plaid_purple(src) + new /obj/item/clothing/under/skirt/plaid_blue(src) + new /obj/item/clothing/under/skirt/plaid_red(src) + new /obj/item/clothing/under/skirt/plaid_purple(src) new /obj/item/clothing/shoes/blue(src) new /obj/item/clothing/shoes/yellow(src) new /obj/item/clothing/shoes/green(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 8ce2a88f24..2dcb1ddaad 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -55,6 +55,9 @@ /obj/structure/displaycase/attackby(obj/item/weapon/W as obj, mob/user as mob) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + user.do_attack_animation(src) + playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1) src.health -= W.force src.healthcheck() ..() diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index cd859b1489..89e841bc58 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -282,8 +282,7 @@ else path = text2path("/obj/machinery/door/airlock[airlock_type]") - var/obj/machinery/door/new_airlock = new path(src.loc, src) - new_airlock.dir = src.dir + new path(src.loc, src) qdel(src) else ..() diff --git a/code/game/periodic_news.dm b/code/game/periodic_news.dm index fb59a407b2..14cb92624d 100644 --- a/code/game/periodic_news.dm +++ b/code/game/periodic_news.dm @@ -6,7 +6,7 @@ round_time // time of the round at which this should be announced, in seconds message // body of the message author = "NanoTrasen Editor" - channel_name = "The Vir Times" + channel_name = "The "+starsys_name+" Times" can_be_redacted = 0 message_type = "Story" @@ -66,7 +66,7 @@ round_time = 60 * 50 found_ssd - channel_name = "The Vir Times" + channel_name = "The "+starsys_name+" Times" author = "Doctor Eric Hanfield" message = {"Several people have been found unconscious at their terminals. It is thought that it was due @@ -78,7 +78,7 @@ lotus_tree explosions - channel_name = "The Vir Times" + channel_name = "The "+starsys_name+" Times" author = "Reporter Leland H. Howards" message = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the @@ -92,7 +92,7 @@ food_riots breaking_news - channel_name = "The Vir Times" + channel_name = "The "+starsys_name+" Times" author = "Reporter Ro'kii Ar-Raqis" message = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae @@ -103,7 +103,7 @@ round_time = 60 * 10 more - channel_name = "The Vir Times" + channel_name = "The "+starsys_name+" Times" author = "Reporter Ro'kii Ar-Raqis" message = {"More on the Refuge food riots: The Refuge Council has condemned NanoTrasen's withdrawal from diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 369f42fc38..ad7a0f91ce 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -69,7 +69,7 @@ var/list/flooring_types name = "carpet" icon_base = "bcarpet" build_type = null - flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_CROWBAR | TURF_CAN_BURN + flags = TURF_HAS_EDGES | TURF_REMOVE_CROWBAR /decl/flooring/tiling name = "floor" diff --git a/code/game/verbs/ignore.dm b/code/game/verbs/ignore.dm index b772bd4e81..c154628087 100644 --- a/code/game/verbs/ignore.dm +++ b/code/game/verbs/ignore.dm @@ -10,6 +10,10 @@ if(key_to_ignore in prefs.ignored_players) usr << "[key_to_ignore] is already being ignored." return + if(key_to_ignore == usr.ckey) + usr <<"You can't ignore yourself." + return + prefs.ignored_players |= key_to_ignore prefs.save_preferences() usr << "Now ignoring [key_to_ignore]." diff --git a/code/global.dm b/code/global.dm index 7a9366c3b3..625712336c 100644 --- a/code/global.dm +++ b/code/global.dm @@ -22,19 +22,22 @@ var/global/datum/universal_state/universe = new var/global/list/global_map = null // Noises made when hit while typing. -var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF") +var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF") var/diary = null -var/href_logfile = null -var/station_name = "Northern Star" -var/station_short = "Northern Star" -var/const/dock_name = "Vir Interstellar Spaceport" -var/const/boss_name = "Central Command" -var/const/boss_short = "Centcomm" -var/const/company_name = "NanoTrasen" -var/const/company_short = "NT" -var/game_version = "Polaris" -var/changelog_hash = "" -var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) +var/href_logfile = null +var/station_name = "Northern Star" +var/const/station_orig = "Northern Star" //station_name can't be const due to event prefix/suffix +var/const/station_short = "Northern Star" +var/const/dock_name = "Vir Interstellar Spaceport" +var/const/boss_name = "Central Command" +var/const/boss_short = "Centcomm" +var/const/company_name = "NanoTrasen" +var/const/company_short = "NT" +var/const/star_name = "Vir" +var/const/starsys_name = "Vir" +var/const/game_version = "Polaris" +var/changelog_hash = "" +var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) var/round_progressing = 1 //On some maps, it does not make sense for space turf to appear when something blows up (e.g. on an asteroid colony, or planetside) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 4c05ebece5..643483bb79 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -4,6 +4,9 @@ #define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen? #define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing. //I would just like the code ready should it ever need to be used. + +//#define TOPIC_DEBUGGING 1 + /* When somebody clicks a link in game, this Topic is called first. It does the stuff in this proc and then is redirected to the Topic() proc for the src=[0xWhatever] @@ -23,6 +26,14 @@ if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null return + #if defined(TOPIC_DEBUGGING) + world << "[src]'s Topic: [href] destined for [hsrc]." + + if(href_list["nano_err"]) //nano throwing errors + world << "## NanoUI, Subject [src]: " + html_decode(href_list["nano_err"]) //NANO DEBUG HOOK + + #endif + //search the href for script injection if( findtext(href,"You can't ignore yourself." + return TOPIC_REFRESH pref.ignored_players |= player_to_ignore return TOPIC_REFRESH return ..() +*/ \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index cd1e3eff4c..e2d73ff8b3 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -105,19 +105,21 @@ var/list/gear_datums = list() firstcat = 0 else . += " |" + + var/datum/loadout_category/LC = loadout_categories[category] + var/category_cost = 0 + for(var/gear in LC.gear) + if(gear in pref.gear) + var/datum/gear/G = LC.gear[gear] + category_cost += G.cost + if(category == current_tab) - . += " [category] " + . += " [category] - [category_cost] " else - var/datum/loadout_category/LC = loadout_categories[category] - var/make_orange = FALSE - for(var/thing in LC.gear) - if(thing in pref.gear) - make_orange = TRUE - break - if(make_orange) - . += " [category] " + if(category_cost) + . += " [category] - [category_cost] " else - . += " [category] " + . += " [category] - 0 " . += "" var/datum/loadout_category/LC = loadout_categories[current_tab] diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 494f5d9a84..a86f0e214f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -244,3 +244,15 @@ display_name = "winter coat, mining" path = /obj/item/clothing/suit/storage/hooded/wintercoat/miner allowed_roles = list("Shaft Miner") + +/datum/gear/suit/varsity + display_name = "varsity jacket selection" + path = /obj/item/clothing/suit/varsity + +/datum/gear/suit/varsity/New() + ..() + var/list/varsities = list() + for(var/varsity_style in typesof(/obj/item/clothing/suit/varsity)) + var/obj/item/clothing/suit/varsity/varsity = varsity_style + varsities[initial(varsity.name)] = varsity + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(varsities)) \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 904a4e7b80..1ef69de38a 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -53,110 +53,16 @@ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes)) /datum/gear/uniform/skirt - display_name = "plaid skirt, blue" - path = /obj/item/clothing/under/dress/plaid_blue + display_name = "skirt selection" + path = /obj/item/clothing/under/skirt -/datum/gear/uniform/skirt/purple - display_name = "plaid skirt, purple" - path = /obj/item/clothing/under/dress/plaid_purple - -/datum/gear/uniform/skirt/red - display_name = "plaid skirt, red" - path = /obj/item/clothing/under/dress/plaid_red - -/datum/gear/uniform/skirt/black - display_name = "skirt, black" - path = /obj/item/clothing/under/blackskirt - -/datum/gear/uniform/skirt/ce - display_name = "skirt, ce" - path = /obj/item/clothing/under/rank/chief_engineer/skirt - allowed_roles = list("Chief Engineer") - -/datum/gear/uniform/skirt/atmos - display_name = "skirt, atmos" - path = /obj/item/clothing/under/rank/atmospheric_technician/skirt - allowed_roles = list("Chief Engineer","Atmospheric Technician") - -/datum/gear/uniform/skirt/eng - display_name = "skirt, engineer" - path = /obj/item/clothing/under/rank/engineer/skirt - allowed_roles = list("Chief Engineer","Station Engineer") - -/datum/gear/uniform/skirt/roboticist - display_name = "skirt, roboticist" - path = /obj/item/clothing/under/rank/roboticist/skirt - allowed_roles = list("Research Director","Roboticist") - -/datum/gear/uniform/skirt/cmo - display_name = "skirt, cmo" - path = /obj/item/clothing/under/rank/chief_medical_officer - allowed_roles = list("Chief Medical Officer") - -/datum/gear/uniform/skirt/chem - display_name = "skirt, chemist" - path = /obj/item/clothing/under/rank/chemist/skirt - allowed_roles = list("Chief Medical Officer","Chemist") - -/datum/gear/uniform/skirt/viro - display_name = "skirt, virologist" - path = /obj/item/clothing/under/rank/virologist/skirt - allowed_roles = list("Chief Medical Officer","Medical Doctor") - -/datum/gear/uniform/skirt/med - display_name = "skirt, medical" - path = /obj/item/clothing/under/rank/medical/skirt - allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic") - -/datum/gear/uniform/skirt/sci - display_name = "skirt, scientist" - path = /obj/item/clothing/under/rank/scientist/skirt - allowed_roles = list("Research Director","Scientist") - -/datum/gear/uniform/skirt/cargo - display_name = "skirt, cargo" - path = /obj/item/clothing/under/rank/cargotech/skirt - allowed_roles = list("Quartermaster","Cargo Technician") - -/datum/gear/uniform/skirt/qm - display_name = "skirt, QM" - path = /obj/item/clothing/under/rank/cargo/skirt - allowed_roles = list("Quartermaster") - -/datum/gear/uniform/skirt/warden - display_name = "skirt, warden" - path = /obj/item/clothing/under/rank/warden/skirt - allowed_roles = list("Head of Security", "Warden") - -/datum/gear/uniform/skirt/security - display_name = "skirt, security" - path = /obj/item/clothing/under/rank/security/skirt - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") - -/datum/gear/uniform/skirt/head_of_security - display_name = "skirt, hos" - path = /obj/item/clothing/under/rank/head_of_security/skirt - allowed_roles = list("Head of Security") - -/datum/gear/uniform/jeans_qm - display_name = "jeans, QM" - path = /obj/item/clothing/under/rank/cargo/jeans - allowed_roles = list("Quartermaster") - -/datum/gear/uniform/jeans_qmf - display_name = "female jeans, QM" - path = /obj/item/clothing/under/rank/cargo/jeans/female - allowed_roles = list("Quartermaster") - -/datum/gear/uniform/jeans_cargo - display_name = "jeans, cargo" - path = /obj/item/clothing/under/rank/cargotech/jeans - allowed_roles = list("Quartermaster","Cargo Technician") - -/datum/gear/uniform/jeans_cargof - display_name = "female jeans, cargo" - path = /obj/item/clothing/under/rank/cargotech/jeans/female - allowed_roles = list("Quartermaster","Cargo Technician") +/datum/gear/uniform/skirt/New() + ..() + var/list/skirts = list() + for(var/skirt in (typesof(/obj/item/clothing/under/skirt))) + var/obj/item/clothing/under/skirt/skirt_type = skirt + skirts[initial(skirt_type.name)] = skirt_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(skirts)) /datum/gear/uniform/pants display_name = "pants selection" @@ -182,6 +88,96 @@ shorts[initial(short_type.name)] = short_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorts)) +/datum/gear/uniform/skirt/ce + display_name = "skirt, ce" + path = /obj/item/clothing/under/rank/engineer/chief_engineer/skirt + allowed_roles = list("Chief Engineer") + +/datum/gear/uniform/skirt/atmos + display_name = "skirt, atmos" + path = /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt + allowed_roles = list("Chief Engineer","Atmospheric Technician") + +/datum/gear/uniform/skirt/eng + display_name = "skirt, engineer" + path = /obj/item/clothing/under/rank/engineer/skirt + allowed_roles = list("Chief Engineer","Station Engineer") + +/datum/gear/uniform/skirt/roboticist + display_name = "skirt, roboticist" + path = /obj/item/clothing/under/rank/roboticist/skirt + allowed_roles = list("Research Director","Roboticist") + +/datum/gear/uniform/skirt/cmo + display_name = "skirt, cmo" + path = /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt + allowed_roles = list("Chief Medical Officer") + +/datum/gear/uniform/skirt/chem + display_name = "skirt, chemist" + path = /obj/item/clothing/under/rank/medical/chemist/skirt + allowed_roles = list("Chief Medical Officer","Chemist") + +/datum/gear/uniform/skirt/viro + display_name = "skirt, virologist" + path = /obj/item/clothing/under/rank/medical/virologist/skirt + allowed_roles = list("Chief Medical Officer","Medical Doctor") + +/datum/gear/uniform/skirt/med + display_name = "skirt, medical" + path = /obj/item/clothing/under/rank/medical/skirt + allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic") + +/datum/gear/uniform/skirt/sci + display_name = "skirt, scientist" + path = /obj/item/clothing/under/rank/scientist/skirt + allowed_roles = list("Research Director","Scientist") + +/datum/gear/uniform/skirt/cargo + display_name = "skirt, cargo" + path = /obj/item/clothing/under/rank/cargotech/skirt + allowed_roles = list("Quartermaster","Cargo Technician") + +/datum/gear/uniform/skirt/qm + display_name = "skirt, QM" + path = /obj/item/clothing/under/rank/cargo/skirt + allowed_roles = list("Quartermaster") + +/datum/gear/uniform/skirt/warden + display_name = "skirt, warden" + path = /obj/item/clothing/under/rank/security/warden/skirt + allowed_roles = list("Head of Security", "Warden") + +/datum/gear/uniform/skirt/security + display_name = "skirt, security" + path = /obj/item/clothing/under/rank/security/skirt + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") + +/datum/gear/uniform/skirt/head_of_security + display_name = "skirt, hos" + path = /obj/item/clothing/under/rank/security/head_of_security/skirt + allowed_roles = list("Head of Security") + +/datum/gear/uniform/jeans_qm + display_name = "jeans, QM" + path = /obj/item/clothing/under/rank/cargo/jeans + allowed_roles = list("Quartermaster") + +/datum/gear/uniform/jeans_qmf + display_name = "female jeans, QM" + path = /obj/item/clothing/under/rank/cargo/jeans/female + allowed_roles = list("Quartermaster") + +/datum/gear/uniform/jeans_cargo + display_name = "jeans, cargo" + path = /obj/item/clothing/under/rank/cargotech/jeans + allowed_roles = list("Quartermaster","Cargo Technician") + +/datum/gear/uniform/jeans_cargof + display_name = "female jeans, cargo" + path = /obj/item/clothing/under/rank/cargotech/jeans/female + allowed_roles = list("Quartermaster","Cargo Technician") + /datum/gear/uniform/suit //amish display_name = "suit, amish" path = /obj/item/clothing/under/sl_suit diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index 79e6a1ec7f..9f814743ae 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -12,55 +12,81 @@ whitelisted = "Unathi" sort_category = "Xenowear" -/datum/gear/ears/skrell - display_name = "headtail-wear, female, chain (Skrell)" +/datum/gear/ears/skrell/chains //Chains + display_name = "headtail chain selection (Skrell)" path = /obj/item/clothing/ears/skrell/chain sort_category = "Xenowear" whitelisted = "Skrell" -/datum/gear/ears/skrell/plate - display_name = "headtail-wear, male, bands (Skrell)" +/datum/gear/ears/skrell/chains/New() + ..() + var/list/chaintypes = list() + for(var/chain_style in typesof(/obj/item/clothing/ears/skrell/chain)) + var/obj/item/clothing/ears/skrell/chain/chain = chain_style + chaintypes[initial(chain.name)] = chain + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(chaintypes)) + +/datum/gear/ears/skrell/bands + display_name = "headtail band selection (Skrell)" path = /obj/item/clothing/ears/skrell/band + sort_category = "Xenowear" + whitelisted = "Skrell" -/datum/gear/ears/skrell/cloth //male/red - display_name = "headtail-wear, male, red, cloth (Skrell)" +/datum/gear/ears/skrell/bands/New() + ..() + var/list/bandtypes = list() + for(var/band_style in typesof(/obj/item/clothing/ears/skrell/band)) + var/obj/item/clothing/ears/skrell/band/band = band_style + bandtypes[initial(band.name)] = band + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(bandtypes)) + +/datum/gear/ears/skrell/cloth/male + display_name = "male headtail cloth selection (Skrell)" path = /obj/item/clothing/ears/skrell/cloth_male + sort_category = "Xenowear" + whitelisted = "Skrell" -/datum/gear/ears/skrell/cloth/male //black - display_name = "headtail-wear, male, black, cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_male/black - -/datum/gear/ears/skrell/cloth/male/blue - display_name = "headtail-wear, male, blue, cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_male/blue - -/datum/gear/ears/skrell/cloth/male/green - display_name = "headtail-wear, male, green, cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_male/green - -/datum/gear/ears/skrell/cloth/male/pink - display_name = "headtail-wear, male, pink, cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_male/pink +/datum/gear/ears/skrell/cloth/male/New() + ..() + var/list/clothtypes = list() + for(var/cloth_style in typesof(/obj/item/clothing/ears/skrell/cloth_male)) + var/obj/item/clothing/ears/skrell/cloth_male/cloth = cloth_style + clothtypes[initial(cloth.name)] = cloth + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(clothtypes)) /datum/gear/ears/skrell/cloth/female - display_name = "headtail-wear, female, red, cloth (Skrell)" + display_name = "female headtail cloth selection (Skrell)" path = /obj/item/clothing/ears/skrell/cloth_female + sort_category = "Xenowear" + whitelisted = "Skrell" -/datum/gear/ears/skrell/cloth/female/black - display_name = "headtail-wear, female, black, cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_female/black +/datum/gear/ears/skrell/cloth/female/New() + ..() + var/list/clothtypes = list() + for(var/cloth_style in typesof(/obj/item/clothing/ears/skrell/cloth_female)) + var/obj/item/clothing/ears/skrell/cloth_female/cloth = cloth_style + clothtypes[initial(cloth.name)] = cloth + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(clothtypes)) -/datum/gear/ears/skrell/cloth/female/blue - display_name = "headtail-wear, female, blue, cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_female/blue - -/datum/gear/ears/skrell/cloth/female/green - display_name = "headtail-wear, female, green, cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_female/green - -/datum/gear/ears/skrell/cloth/female/pink - display_name = "headtail-wear, female, pink, cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_female/pink +/datum/gear/ears/skrell/colored/band + display_name = "Colored bands (Skrell)" + path = /obj/item/clothing/ears/skrell/colored/band + sort_category = "Xenowear" + whitelisted = "Skrell" + +/datum/gear/ears/skrell/colored/band/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) + +/datum/gear/ears/skrell/colored/chain + display_name = "Colored chain (Skrell)" + path = /obj/item/clothing/ears/skrell/colored/chain + sort_category = "Xenowear" + whitelisted = "Skrell" + +/datum/gear/ears/skrell/colored/chain/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) /datum/gear/uniform/teshari display_name = "smock, grey (Teshari)" diff --git a/code/modules/client/preferences_factions.dm b/code/modules/client/preferences_factions.dm index e60cdb75b9..61d6810224 100644 --- a/code/modules/client/preferences_factions.dm +++ b/code/modules/client/preferences_factions.dm @@ -22,7 +22,7 @@ var/global/list/citizenship_choices = list( var/global/list/home_system_choices = list( "Sol", - "Vir", + starsys_name, "Nyx", "Tau Ceti", "Epsilon Ursae Minoris", diff --git a/code/modules/clothing/ears/skrell.dm b/code/modules/clothing/ears/skrell.dm index 59428fa5d9..e8bc3e8534 100644 --- a/code/modules/clothing/ears/skrell.dm +++ b/code/modules/clothing/ears/skrell.dm @@ -11,73 +11,135 @@ species_restricted = list("Skrell") /obj/item/clothing/ears/skrell/chain - name = "skrell headtail chains" + name = "Gold headtail chains" desc = "A delicate golden chain worn by female skrell to decorate their head tails." icon_state = "skrell_chain" item_state = "skrell_chain" - + +/obj/item/clothing/ears/skrell/chain/silver + name = "Silver headtail chains" + desc = "A delicate silver chain worn by female skrell to decorate their head tails." + icon_state = "skrell_chain_sil" + item_state = "skrell_chain_sil" + +/obj/item/clothing/ears/skrell/chain/bluejewels + name = "Blue jeweled golden headtail chains" + desc = "A delicate golden chain adorned with blue jewels worn by female skrell to decorate their head tails." + icon_state = "skrell_chain_bjewel" + item_state = "skrell_chain_bjewel" + +/obj/item/clothing/ears/skrell/chain/redjewels + name = "Red jeweled golden headtail chains" + desc = "A delicate golden chain adorned with red jewels worn by female skrell to decorate their head tails." + icon_state = "skrell_chain_rjewel" + item_state = "skrell_chain_rjewel" + +/obj/item/clothing/ears/skrell/chain/ebony + name = "Ebony headtail chains" + desc = "A delicate ebony chain worn by female skrell to decorate their head tails." + icon_state = "skrell_chain_ebony" + item_state = "skrell_chain_ebony" + /obj/item/clothing/ears/skrell/band - name = "skrell headtail bands" + name = "Gold headtail bands" desc = "Golden metallic bands worn by male skrell to adorn their head tails." icon_state = "skrell_band" item_state = "skrell_band" + +/obj/item/clothing/ears/skrell/band/silver + name = "Silver headtail bands" + desc = "Silver metallic bands worn by male skrell to adorn their head tails." + icon_state = "skrell_band_sil" + item_state = "skrell_band_sil" + +/obj/item/clothing/ears/skrell/band/bluejewels + name = "Blue jeweled golden headtail bands" + desc = "Golden metallic bands adorned with blue jewels worn by male skrell to adorn their head tails." + icon_state = "skrell_band_bjewel" + item_state = "skrell_band_bjewel" + +/obj/item/clothing/ears/skrell/band/redjewels + name = "Red jeweled golden headtail bands" + desc = "Golden metallic bands adorned with red jewels worn by male skrell to adorn their head tails." + icon_state = "skrell_band_rjewel" + item_state = "skrell_band_rjewel" + +/obj/item/clothing/ears/skrell/band/ebony + name = "Ebony headtail bands" + desc = "Ebony bands worn by male skrell to adorn their head tails." + icon_state = "skrell_band_ebony" + item_state = "skrell_band_ebony" +/obj/item/clothing/ears/skrell/colored/band + name = "Colored headtail bands" + desc = "Metallic bands worn by male skrell to adorn their head tails." + icon_state = "skrell_band_sil" + item_state = "skrell_band_sil" + +/obj/item/clothing/ears/skrell/colored/chain + name = "Colored headtail chains" + desc = "A delicate chain worn by female skrell to decorate their head tails." + icon_state = "skrell_chain_sil" + item_state = "skrell_chain_sil" + /obj/item/clothing/ears/skrell/cloth_female - name = "skrell headtail cloth" + name = "red headtail cloth" desc = "A cloth shawl worn by female skrell draped around their head tails." icon_state = "skrell_cloth_female" item_state = "skrell_cloth_female" /obj/item/clothing/ears/skrell/cloth_female/black - name = "skrell headtail cloth" - desc = "A cloth shawl worn by female skrell draped around their head tails." + name = "black headtail cloth" icon_state = "skrell_cloth_black_female" item_state = "skrell_cloth_black_female" /obj/item/clothing/ears/skrell/cloth_female/blue - name = "skrell headtail cloth" - desc = "A cloth shawl worn by female skrell draped around their head tails." + name = "blue headtail cloth" icon_state = "skrell_cloth_blue_female" item_state = "skrell_cloth_blue_female" /obj/item/clothing/ears/skrell/cloth_female/green - name = "skrell headtail cloth" - desc = "A cloth shawl worn by female skrell draped around their head tails." + name = "green headtail cloth" icon_state = "skrell_cloth_green_female" item_state = "skrell_cloth_green_female" /obj/item/clothing/ears/skrell/cloth_female/pink - name = "skrell headtail cloth" - desc = "A cloth shawl worn by female skrell draped around their head tails." + name = "pink headtail cloth" icon_state = "skrell_cloth_pink_female" item_state = "skrell_cloth_pink_female" +/obj/item/clothing/ears/skrell/cloth_female/lightblue + name = "light blue headtail cloth" + icon_state = "skrell_cloth_lblue_female" + item_state = "skrell_cloth_lblue_female" + /obj/item/clothing/ears/skrell/cloth_male - name = "skrell headtail cloth" + name = "red headtail cloth" desc = "A cloth band worn by male skrell around their head tails." icon_state = "skrell_cloth_male" item_state = "skrell_cloth_male" /obj/item/clothing/ears/skrell/cloth_male/black - name = "skrell headtail cloth" - desc = "A cloth band worn by male skrell around their head tails." + name = "black headtail cloth" icon_state = "skrell_cloth_black_male" item_state = "skrell_cloth_black_male" /obj/item/clothing/ears/skrell/cloth_male/blue - name = "skrell headtail cloth" - desc = "A cloth band worn by male skrell around their head tails." + name = "blue headtail cloth" icon_state = "skrell_cloth_blue_male" item_state = "skrell_cloth_blue_male" /obj/item/clothing/ears/skrell/cloth_male/green - name = "skrell headtail cloth" - desc = "A cloth band worn by male skrell around their head tails." + name = "green headtail cloth" icon_state = "skrell_cloth_green_male" item_state = "skrell_cloth_green_male" /obj/item/clothing/ears/skrell/cloth_male/pink - name = "skrell headtail cloth" - desc = "A cloth band worn by male skrell around their head tails." + name = "pink headtail cloth" icon_state = "skrell_cloth_pink_male" - item_state = "skrell_cloth_pink_male" \ No newline at end of file + item_state = "skrell_cloth_pink_male" + +/obj/item/clothing/ears/skrell/cloth_male/lightblue + name = "light blue headtail cloth" + icon_state = "skrell_cloth_lblue_male" + item_state = "skrell_cloth_lblue_male" \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index ecac722204..b5669b6746 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -48,7 +48,7 @@ /obj/item/clothing/suit/space name = "Space suit" - desc = "A suit that protects against low pressure environments. \"NORTHERN STAR\" is written in large block letters on the back." + desc = "A suit that protects against low pressure environments. \""+station_short+"\" is written in large block letters on the back." icon_state = "space" item_state = "s_suit" w_class = 5 // So you can't fit this in your bag and be prepared at all times. diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index a260d83513..ed80f4dd61 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -656,3 +656,29 @@ name = "mining winter coat" icon_state = "coatminer" armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/suit/varsity + name = "black varsity jacket" + desc = "A favorite of jocks everywhere from Sol to Nyx." + icon_state = "varsity" + item_state = "leather_jacket" + +/obj/item/clothing/suit/varsity/red + name = "red varsity jacket" + icon_state = "varsity_red" + +/obj/item/clothing/suit/varsity/purple + name = "purple varsity jacket" + icon_state = "varsity_purple" + +/obj/item/clothing/suit/varsity/green + name = "green varsity jacket" + icon_state = "varsity_green" + +/obj/item/clothing/suit/varsity/blue + name = "blue varsity jacket" + icon_state = "varsity_blue" + +/obj/item/clothing/suit/varsity/brown + name = "brown varsity jacket" + icon_state = "varsity_brown" \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index cc305a78e8..9ab1a5fdbf 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -76,7 +76,7 @@ slots = 5 /obj/item/clothing/accessory/storage/brown_drop_pouches - name = "black drop pouches" + name = "brown drop pouches" gender = PLURAL desc = "Worn brownish synthcotton bags to hold whatever you need, but cannot hold in hands." icon_state = "thigh_brown" diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index fae598251c..30bf89c1c3 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -8,7 +8,6 @@ worn_state = "ba_suit" rolled_sleeves = 0 - /obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define. desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Captain\"." name = "captain's jumpsuit" @@ -17,7 +16,6 @@ worn_state = "captain" rolled_sleeves = 0 - /obj/item/clothing/under/rank/cargo name = "quartermaster's jumpsuit" desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." @@ -26,14 +24,6 @@ worn_state = "qm" rolled_sleeves = 0 -/obj/item/clothing/under/rank/cargo/skirt - name = "quartermaster's jumpskirt" - desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." - icon_state = "qmf" - worn_state = "qmf" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/cargo/jeans name = "quartermaster's jumpjeans" desc = "Jeeeaaans! They're comfy!" @@ -56,13 +46,6 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS rolled_sleeves = 0 -/obj/item/clothing/under/rank/cargotech/skirt - name = "cargo technician's jumpskirt" - desc = "Skirrrrrts! They're comfy and easy to wear!" - icon_state = "cargof" - worn_state = "cargof" - rolled_sleeves = -1 - /obj/item/clothing/under/rank/cargotech/jeans name = "cargo technician's jumpjeans" desc = "Jeeeaaans! They're comfy!" @@ -76,7 +59,6 @@ icon_state = "cargojf" worn_state = "cargojf" - /obj/item/clothing/under/rank/chaplain desc = "It's a black jumpsuit, often worn by religious folk." name = "chaplain's jumpsuit" @@ -85,7 +67,6 @@ worn_state = "chapblack" rolled_sleeves = 0 - /obj/item/clothing/under/rank/chef desc = "It's an apron which is given only to the most hardcore chefs in space." name = "chef's uniform" @@ -94,7 +75,6 @@ worn_state = "chef" rolled_sleeves = 0 - /obj/item/clothing/under/rank/clown name = "clown suit" desc = "'HONK!'" @@ -103,7 +83,6 @@ worn_state = "clown" rolled_sleeves = -1 - /obj/item/clothing/under/rank/head_of_personnel desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"." name = "head of personnel's jumpsuit" @@ -120,7 +99,6 @@ worn_state = "hopwhimsy" rolled_sleeves = -1 - /obj/item/clothing/under/rank/hydroponics desc = "It's a jumpsuit designed to protect against minor plant-related hazards." name = "botanist's jumpsuit" @@ -130,7 +108,6 @@ permeability_coefficient = 0.50 rolled_sleeves = 0 - /obj/item/clothing/under/rank/internalaffairs desc = "The plain, professional attire of an Internal Affairs Agent. The collar is immaculately starched." name = "Internal Affairs uniform" @@ -139,7 +116,6 @@ worn_state = "internalaffairs" rolled_sleeves = 0 - /obj/item/clothing/under/rank/janitor desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards." name = "janitor's jumpsuit" @@ -149,40 +125,34 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) rolled_sleeves = 0 - /obj/item/clothing/under/lawyer desc = "Slick threads." name = "Lawyer suit" - /obj/item/clothing/under/lawyer/black name = "black Lawyer suit" icon_state = "lawyer_black" item_state = "lawyer_black" worn_state = "lawyer_black" - /obj/item/clothing/under/lawyer/female name = "black Lawyer suit" icon_state = "black_suit_fem" item_state = "lawyer_black" worn_state = "black_suit_fem" - /obj/item/clothing/under/lawyer/red name = "red Lawyer suit" icon_state = "lawyer_red" item_state = "lawyer_red" worn_state = "lawyer_red" - /obj/item/clothing/under/lawyer/blue name = "blue Lawyer suit" icon_state = "lawyer_blue" item_state = "lawyer_blue" worn_state = "lawyer_blue" - /obj/item/clothing/under/lawyer/bluesuit name = "Blue Suit" desc = "A classy suit and tie" @@ -190,7 +160,6 @@ item_state = "ba_suit" worn_state = "bluesuit" - /obj/item/clothing/under/lawyer/purpsuit name = "Purple Suit" icon_state = "lawyer_purp" @@ -204,7 +173,6 @@ item_state = "johnny" worn_state = "oldman" - /obj/item/clothing/under/librarian name = "sensible suit" desc = "It's very... sensible." diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 0cdcac576b..0c820c6e7a 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -8,14 +8,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) rolled_sleeves = 0 -/obj/item/clothing/under/rank/chief_engineer/skirt - desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding." - name = "chief engineer's jumpskirt" - icon_state = "chieff" - worn_state = "chieff" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/atmospheric_technician desc = "It's a jumpsuit worn by atmospheric technicians." name = "atmospheric technician's jumpsuit" @@ -24,14 +16,6 @@ worn_state = "atmos" rolled_sleeves = 0 -/obj/item/clothing/under/rank/atmospheric_technician/skirt - desc = "It's a jumpskirt worn by atmospheric technicians." - name = "atmospheric technician's jumpskirt" - icon_state = "atmosf" - worn_state = "atmosf" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/engineer desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding." name = "engineer's jumpsuit" @@ -41,25 +25,10 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) rolled_sleeves = 0 -/obj/item/clothing/under/rank/engineer/skirt - desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding." - name = "engineer's jumpskirt" - icon_state = "enginef" - worn_state = "enginef" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/roboticist desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work." name = "roboticist's jumpsuit" icon_state = "robotics" item_state = "bl_suit" worn_state = "robotics" - rolled_sleeves = 0 - -/obj/item/clothing/under/rank/roboticist/skirt - desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work." - name = "roboticist's jumpskirt" - icon_state = "roboticsf" - worn_state = "roboticsf" - rolled_sleeves = -1 + rolled_sleeves = 0 \ No newline at end of file diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 4b212331be..a80cd626c3 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -36,13 +36,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) rolled_sleeves = 0 -/obj/item/clothing/under/rank/scientist/skirt - name = "scientist's jumpskirt" - icon_state = "sciencewhitef" - worn_state = "sciencewhitef" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/chemist desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it." name = "chemist's jumpsuit" @@ -53,13 +46,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) rolled_sleeves = 0 -/obj/item/clothing/under/rank/chemist/skirt - name = "chemist's jumpskirt" - icon_state = "chemistrywhitef" - worn_state = "chemistrywhitef" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /* * Medical */ @@ -73,14 +59,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) rolled_sleeves = 0 -/obj/item/clothing/under/rank/chief_medical_officer/skirt - desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." - name = "chief medical officer's jumpskirt" - icon_state = "cmof" - worn_state = "cmof" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/geneticist desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." name = "geneticist's jumpsuit" @@ -91,13 +69,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) rolled_sleeves = 0 -/obj/item/clothing/under/rank/geneticist/skirt - name = "geneticist's jumpskirt" - icon_state = "geneticswhitef" - worn_state = "geneticswhitef" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/virologist desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it." name = "virologist's jumpsuit" @@ -108,13 +79,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) rolled_sleeves = 0 -/obj/item/clothing/under/rank/virologist/skirt - name = "virologist's jumpskirt" - icon_state = "virologywhitef" - worn_state = "virologywhitef" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/nursesuit desc = "It's a jumpsuit commonly worn by nursing staff in the medical department." name = "nurse's suit" @@ -157,13 +121,6 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) rolled_sleeves = 0 -/obj/item/clothing/under/rank/medical/skirt - name = "medical doctor's jumpskirt" - icon_state = "medicalf" - worn_state = "medicalf" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - rolled_sleeves = -1 - /obj/item/clothing/under/rank/medical/paramedic name = "short sleeve medical jumpsuit" desc = "It's made of a special fiber that provides minor protection against biohazards. This one has a cross on the chest denoting that the wearer is trained medical personnel." diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 65bcf80fc0..c934837a80 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -18,13 +18,6 @@ siemens_coefficient = 0.9 rolled_sleeves = 0 -/obj/item/clothing/under/rank/warden/skirt - desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders." - name = "warden's jumpskirt" - icon_state = "wardenf" - item_state = "r_suit" - worn_state = "wardenf" - /obj/item/clothing/head/helmet/warden name = "warden's hat" desc = "It's a special helmet issued to the Warden of a securiy force." @@ -41,13 +34,6 @@ siemens_coefficient = 0.9 rolled_sleeves = 0 -/obj/item/clothing/under/rank/security/skirt - name = "security officer's jumpskirt" - desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts." - icon_state = "secredf" - item_state = "r_suit" - worn_state = "secredf" - /obj/item/clothing/under/rank/dispatch name = "dispatcher's uniform" desc = "A dress shirt and khakis with a security patch sewn on." @@ -174,13 +160,6 @@ siemens_coefficient = 0.8 rolled_sleeves = 0 -/obj/item/clothing/under/rank/head_of_security/skirt - desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." - name = "head of security's jumpskirt" - icon_state = "hosredf" - item_state = "r_suit" - worn_state = "hosredf" - /obj/item/clothing/under/rank/head_of_security/corp icon_state = "hos_corporate" //item_state = "hos_corporate" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 929578ccbf..57f2849117 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -211,14 +211,6 @@ item_state = "r_suit" worn_state = "red_suit" -/obj/item/clothing/under/blackskirt - name = "black skirt" - desc = "A black skirt, very fancy!" - icon_state = "blackskirt" - item_state = "bl_suit" - worn_state = "blackskirt" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - /obj/item/clothing/under/schoolgirl name = "schoolgirl uniform" desc = "It's just like one of my Japanese animes!" @@ -401,26 +393,6 @@ worn_state = "huresource" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/under/dress/plaid_blue - name = "blue plaid skirt" - desc = "A preppy blue skirt with a white blouse." - icon_state = "plaid_blue" - worn_state = "plaid_blue" - -/obj/item/clothing/under/dress/plaid_red - name = "red plaid skirt" - desc = "A preppy red skirt with a white blouse." - icon_state = "plaid_red" - item_state = "kilt" - worn_state = "plaid_red" - -/obj/item/clothing/under/dress/plaid_purple - name = "blue purple skirt" - desc = "A preppy purple skirt with a white blouse." - icon_state = "plaid_purple" - item_state = "kilt" - worn_state = "plaid_purple" - //wedding stuff /obj/item/clothing/under/wedding/ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 1d792bcc10..c4b712c4c3 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -100,3 +100,152 @@ name = "khaki short shorts" icon_state = "khaki_shorts_f" worn_state = "khaki_shorts_f" + +//Argh, skirts be below this line -> ------------------------------ + +/obj/item/clothing/under/skirt + name = "black skirt" + desc = "A black skirt, very fancy!" + icon_state = "blackskirt" + item_state = "bl_suit" + worn_state = "blackskirt" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + rolled_sleeves = -1 + +/obj/item/clothing/under/skirt/khaki + name = "khaki skirt" + desc = "A skirt that is a khaki color." + icon_state = "skirt_khaki" + +/obj/item/clothing/under/skirt/black + name = "short black skirt" + desc = "A skirt that is a shiny black." + icon_state = "skirt_short_black" + +/obj/item/clothing/under/skirt/blue + name = "short blue skirt" + desc = "A skirt that is a shiny blue." + icon_state = "skirt_short_blue" + +/obj/item/clothing/under/skirt/red + name = "short red skirt" + desc = "A skirt that is a shiny red." + icon_state = "skirt_short_red" + +/obj/item/clothing/under/skirt/swept + name = "swept skirt" + desc = "A skirt that is swept to one side." + icon_state = "skirt_swept" + +/obj/item/clothing/under/skirt/plaid_blue + name = "blue plaid skirt" + desc = "A preppy blue skirt with a white blouse." + icon_state = "plaid_blue" + worn_state = "plaid_blue" + +/obj/item/clothing/under/skirt/plaid_red + name = "red plaid skirt" + desc = "A preppy red skirt with a white blouse." + icon_state = "plaid_red" + item_state = "kilt" + worn_state = "plaid_red" + +/obj/item/clothing/under/skirt/plaid_purple + name = "blue purple skirt" + desc = "A preppy purple skirt with a white blouse." + icon_state = "plaid_purple" + item_state = "kilt" + worn_state = "plaid_purple" + +/obj/item/clothing/under/rank/cargo/skirt + name = "quartermaster's jumpskirt" + desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." + icon_state = "qmf" + worn_state = "qmf" + +/obj/item/clothing/under/rank/cargotech/skirt + name = "cargo technician's jumpskirt" + desc = "Skirrrrrts! They're comfy and easy to wear!" + icon_state = "cargof" + worn_state = "cargof" + +/obj/item/clothing/under/rank/engineer/skirt + desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding." + name = "engineer's jumpskirt" + icon_state = "enginef" + worn_state = "enginef" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) + +/obj/item/clothing/under/rank/engineer/chief_engineer/skirt + desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding." + name = "chief engineer's jumpskirt" + icon_state = "chieff" + worn_state = "chieff" + +/obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt + desc = "It's a jumpskirt worn by atmospheric technicians." + name = "atmospheric technician's jumpskirt" + icon_state = "atmosf" + worn_state = "atmosf" + +/obj/item/clothing/under/rank/roboticist/skirt + desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work." + name = "roboticist's jumpskirt" + icon_state = "roboticsf" + worn_state = "roboticsf" + +/obj/item/clothing/under/rank/scientist/skirt + name = "scientist's jumpskirt" + icon_state = "sciencewhitef" + worn_state = "sciencewhitef" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/medical/skirt + name = "medical doctor's jumpskirt" + icon_state = "medicalf" + worn_state = "medicalf" + +/obj/item/clothing/under/rank/medical/chemist/skirt + name = "chemist's jumpskirt" + icon_state = "chemistrywhitef" + worn_state = "chemistrywhitef" + +/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt + desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." + name = "chief medical officer's jumpskirt" + icon_state = "cmof" + worn_state = "cmof" + +/obj/item/clothing/under/rank/medical/geneticist/skirt + name = "geneticist's jumpskirt" + icon_state = "geneticswhitef" + worn_state = "geneticswhitef" + +/obj/item/clothing/under/rank/medical/virologist/skirt + name = "virologist's jumpskirt" + icon_state = "virologywhitef" + worn_state = "virologywhitef" + +/obj/item/clothing/under/rank/security/skirt + name = "security officer's jumpskirt" + desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts." + icon_state = "secredf" + item_state = "r_suit" + worn_state = "secredf" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + +/obj/item/clothing/under/rank/security/warden/skirt + desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders." + name = "warden's jumpskirt" + icon_state = "wardenf" + item_state = "r_suit" + worn_state = "wardenf" + +/obj/item/clothing/under/rank/security/head_of_security/skirt + desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." + name = "head of security's jumpskirt" + icon_state = "hosredf" + item_state = "r_suit" + worn_state = "hosredf" \ No newline at end of file diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm index b3c2874014..b4359dcb41 100644 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ b/code/modules/detectivework/microscope/dnascanner.dm @@ -24,6 +24,7 @@ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) RefreshParts() + ..() /obj/machinery/dnaforensics/attackby(var/obj/item/W, mob/user as mob) diff --git a/code/modules/economy/Events.dm b/code/modules/economy/Events.dm index c9d32f56ec..0f622c399c 100644 --- a/code/modules/economy/Events.dm +++ b/code/modules/economy/Events.dm @@ -52,7 +52,7 @@ affected_dest.temp_price_change[good_type] = rand(1,100) / 100 /datum/event/economic_event/announce() - var/author = "The Vir Times" + var/author = "The "+starsys_name+" Times" var/channel = author //see if our location has custom event info for this event diff --git a/code/modules/economy/Events_Mundane.dm b/code/modules/economy/Events_Mundane.dm index adfa374181..5728560040 100644 --- a/code/modules/economy/Events_Mundane.dm +++ b/code/modules/economy/Events_Mundane.dm @@ -11,7 +11,7 @@ if(!event_type) return - var/author = "The Vir Times" + var/author = "The "+starsys_name+" Times" var/channel = author //see if our location has custom event info for this event @@ -116,11 +116,11 @@ else body += "is recovering from plastic surgery in a clinic on [affected_dest.name] for the [pick("second","third","fourth")] time, reportedly having made the decision in response to " body += "[pick("unkind comments by an ex","rumours started by jealous friends",\ - "the decision to be dropped by a major sponsor","a disasterous interview on Vir Tonight")]." + "the decision to be dropped by a major sponsor","a disasterous interview on "+starsys_name+" Tonight")]." if(TOURISM) body += "Tourists are flocking to [affected_dest.name] after the surprise announcement of [pick("major shopping bargains by a wily retailer",\ "a huge new ARG by a popular entertainment company","a secret tour by popular artiste [random_name(pick(MALE,FEMALE))]")]. \ - The Vir Times is offering discount tickets for two to see [random_name(pick(MALE,FEMALE))] live in return for eyewitness reports and up to the minute coverage." + The "+starsys_name+" Times is offering discount tickets for two to see [random_name(pick(MALE,FEMALE))] live in return for eyewitness reports and up to the minute coverage." news_network.SubmitArticle(body, author, channel, null, 1) @@ -152,7 +152,7 @@ "'Here kitty kitty' no longer preferred tajaran retrieval technique.",\ "Man travels 7000 light years to retrieve lost hankie, 'It was my favourite'.",\ "New bowling lane that shoots mini-meteors at bowlers very popular.",\ - "[pick("Unathi","Spacer")] gets tattoo of Vir on chest '[pick("[boss_short]","star","starship","asteroid")] tickles most'.",\ + "[pick("Unathi","Spacer")] gets tattoo of "+starsys_name+" on chest '[pick("[boss_short]","star","starship","asteroid")] tickles most'.",\ "Skrell marries computer; wedding attended by 100 modems.",\ "Chef reports successfully using harmonica as cheese grater.",\ "[company_name] invents handkerchief that says 'Bless you' after sneeze.",\ @@ -162,7 +162,7 @@ "This space for rent.",\ "[affected_dest.name] Baker Wins Pickled Crumpet Toss Three Years Running",\ "Skrell Scientist Discovers Abacus Can Be Used To Dry Towels",\ - "Survey: 'Cheese Louise' Voted Best Pizza Restaurant In Vir",\ + "Survey: 'Cheese Louise' Voted Best Pizza Restaurant In "+starsys_name,\ "I Was Framed, jokes [affected_dest.name] artist",\ "Mysterious Loud Rumbling Noises In [affected_dest.name] Found To Be Mysterious Loud Rumblings",\ "Alien ambassador becomes lost on [affected_dest.name], refuses to ask for directions",\ diff --git a/code/modules/economy/TradeDestinations.dm b/code/modules/economy/TradeDestinations.dm index 3aca3e6bad..ccedfe35ef 100644 --- a/code/modules/economy/TradeDestinations.dm +++ b/code/modules/economy/TradeDestinations.dm @@ -8,7 +8,7 @@ var/list/weighted_mundaneevent_locations = list() var/distance = 0 var/list/willing_to_buy = list() var/list/willing_to_sell = list() - var/can_shuttle_here = 0 //one day crew from the Northern Star will be able to travel to this destination + var/can_shuttle_here = 0 //one day crew from the station will be able to travel to this destination var/list/viable_random_events = list() var/list/temp_price_change[BIOMEDICAL] var/list/viable_mundane_events = list() diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index 8c39fcac8d..c1b1aac2a4 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -48,11 +48,12 @@ /var/list/economic_species_modifier = list( - /datum/species/human = 10, - /datum/species/skrell = 12, - /datum/species/teshari = 9, // Skrell sponsored, - /datum/species/tajaran = 7, - /datum/species/unathi = 7 + /datum/species/human = 10, + /datum/species/skrell = 12, + /datum/species/teshari = 9, // Skrell sponsored, + /datum/species/tajaran = 7, + /datum/species/unathi = 7, + /datum/species/diona = 7 ) //---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel: @@ -87,7 +88,7 @@ var/global/economy_init = 0 if(economy_init) return 2 - news_network.CreateFeedChannel("The Vir Times", "Vir Times ExoNode - Northern Star", 1, 1) + news_network.CreateFeedChannel("The "+starsys_name+" Times", starsys_name+" Times ExoNode - "+station_orig, 1, 1) news_network.CreateFeedChannel("The Gibson Gazette", "Editor Mike Hammers", 1, 1) for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination) diff --git a/code/modules/events/money_lotto.dm b/code/modules/events/money_lotto.dm index 4c016333f8..b905dd576c 100644 --- a/code/modules/events/money_lotto.dm +++ b/code/modules/events/money_lotto.dm @@ -12,7 +12,7 @@ D.money += winner_sum var/datum/transaction/T = new() - T.target_name = "The Vir Times Grand Slam -Stellar- Lottery" + T.target_name = "The "+starsys_name+" Times Grand Slam -Stellar- Lottery" T.purpose = "Winner!" T.amount = winner_sum T.date = current_date_string @@ -24,10 +24,10 @@ /datum/event/money_lotto/announce() var/author = "[company_name] Editor" - var/channel = "The Vir Times" + var/channel = "The "+starsys_name+" Times" - var/body = "The Vir Times wishes to congratulate [winner_name] for recieving the Vir Stellar Slam Lottery, and receiving the out of this world sum of [winner_sum] credits!" + var/body = "The "+starsys_name+" Times wishes to congratulate [winner_name] for recieving the "+starsys_name+" Stellar Slam Lottery, and receiving the out of this world sum of [winner_sum] credits!" if(!deposit_success) - body += "
Unfortunately, we were unable to verify the account details provided, so we were unable to transfer the money. Send a cheque containing the sum of 5000 Thalers to ND 'Stellar Slam' office on the The Vir Times gateway containing updated details, and your winnings'll be re-sent within the month." + body += "
Unfortunately, we were unable to verify the account details provided, so we were unable to transfer the money. Send a cheque containing the sum of 5000 Thalers to ND 'Stellar Slam' office on the The "+starsys_name+" Times gateway containing updated details, and your winnings'll be re-sent within the month." news_network.SubmitArticle(body, author, channel, null, 1) diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index 4f46fb9bac..18d57b8fdb 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -61,7 +61,7 @@ "You have (1) new message!",\ "You have (2) new profile views!") if(3) - sender = pick("Galactic Payments Association","Better Business Bureau","Vir E-Payments","NAnoTransen Finance Deparmtent","Luxury Replicas") + sender = pick("Galactic Payments Association","Better Business Bureau",starsys_name+" E-Payments","NAnoTransen Finance Deparmtent","Luxury Replicas") message = pick("Luxury watches for Blowout sale prices!",\ "Watches, Jewelry & Accessories, Bags & Wallets !",\ "Deposit 100$ and get 300$ totally free!",\ diff --git a/code/modules/examine/descriptions/telecomms.dm b/code/modules/examine/descriptions/telecomms.dm index 421d7022c5..747697f55f 100644 --- a/code/modules/examine/descriptions/telecomms.dm +++ b/code/modules/examine/descriptions/telecomms.dm @@ -5,7 +5,7 @@ just your hands, due to the integrated monitor and keyboard. Synthetic units can interface with it as well, just like most other machines." description_fluff = "This is one of many nodes that make up the Exonet, which services trillions of devices across space. This particular node \ - is referred to as a terminal node, servicing the Northern Star.
\ + is referred to as a terminal node, servicing the "+station_orig+".
\
\ In the beginning of humanity's ascend into space, the Exonet didn't exist. Instead, the Exonet is the evolution to a network called the Interplanetary \ Internet (sometimes referred to as the InterPlaNet), which was conceived and developed due to the limitations of the terrestrial Internet, mainly because \ @@ -30,7 +30,7 @@ Exonets at the root node(s), and is typically arranged in a tree structure. The root node(s) are generally government-owned and are very secure \ and resilient to failure.
\
\ - This node is privately owned and maintained by Nanotrasen, and allows the colonists of the Northern Star to have access to the Exonet." + This node is privately owned and maintained by Nanotrasen, and allows the colonists of the "+station_orig+" to have access to the Exonet." description_antag = "An EMP will disable this device for a short period of time. A longer downage can be achieved by turning it off, or rigging \ the APC it uses to turn off remotely, such as with a signaler in the right wire." \ No newline at end of file diff --git a/code/modules/games/spaceball_cards.dm b/code/modules/games/spaceball_cards.dm index 9e0bacd2be..0ea8bb6ab3 100644 --- a/code/modules/games/spaceball_cards.dm +++ b/code/modules/games/spaceball_cards.dm @@ -16,7 +16,7 @@ else var/language_type = pick(/datum/language/human,/datum/language/diona,/datum/language/tajaran,/datum/language/unathi) var/datum/language/L = new language_type() - var/team = pick("Brickburn Galaxy Trekers","Mars Rovers", "Qerrbalak Saints", "Moghes Rockets", "Ahdomai Lightening", "Vir Vixens", "Euphoric-Earth Alligators") + var/team = pick("Brickburn Galaxy Trekers","Mars Rovers", "Qerrbalak Saints", "Moghes Rockets", "Ahdomai Lightening", starsys_name+" Vixens", "Euphoric-Earth Alligators") P.name = "[L.get_random_name(pick(MALE,FEMALE))], [year - rand(0,50)] [team]" P.card_icon = "spaceball_standard" P.back_icon = "card_back_spaceball" diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm index b21c88245a..221777f56a 100644 --- a/code/modules/mob/animations.dm +++ b/code/modules/mob/animations.dm @@ -140,11 +140,11 @@ note dizziness decrements automatically in the mob's Life() proc. //reset the pixel offsets to zero is_floating = 0 -/atom/movable/proc/do_attack_animation(atom/A) +/mob/proc/do_attack_animation(mob/M) var/pixel_x_diff = 0 var/pixel_y_diff = 0 - var/direction = get_dir(src, A) + var/direction = get_dir(src, M) switch(direction) if(NORTH) pixel_y_diff = 8 @@ -167,7 +167,7 @@ note dizziness decrements automatically in the mob's Life() proc. pixel_x_diff = -8 pixel_y_diff = -8 animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 2) + animate(pixel_x = old_x, pixel_y = old_y, time = 2) /mob/do_attack_animation(atom/A) ..() diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 906fe22521..4b6598cf1b 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -85,6 +85,7 @@ dead_mob_list |= src updateicon() + handle_regular_hud_updates() if(ticker && ticker.mode) ticker.mode.check_win() diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 375b1e1e13..4f14216747 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -81,7 +81,7 @@ var/time = say_timestamp() src << "[time] [message]" -/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") +/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") if(!client) return @@ -184,9 +184,9 @@ var/formatted if(language) - formatted = language.format_message_radio(message, verb) + formatted = "[language.format_message_radio(message, verb)][part_c]" else - formatted = "[verb], \"[message]\"" + formatted = "[verb], \"[message]\"[part_c]" if((sdisabilities & DEAF) || ear_deaf) if(prob(20)) src << "You feel your headset vibrate but can hear nothing from it!" diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index dc8dbccb01..28a717dbdb 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -18,6 +18,7 @@ var/list/holder_mob_icon_cache = list() slot_r_hand_str = 'icons/mob/items/righthand_holder.dmi', ) pixel_y = 8 + var/mob/living/held_mob /obj/item/weapon/holder/New() ..() @@ -29,21 +30,26 @@ var/list/holder_mob_icon_cache = list() /obj/item/weapon/holder/process() update_state() + drop_items() /obj/item/weapon/holder/dropped() ..() spawn(1) update_state() -/obj/item/weapon/proc/update_state() +/obj/item/weapon/holder/proc/update_state() if(istype(loc,/turf) || !(contents.len)) - for(var/mob/M in contents) - var/atom/movable/mob_container - mob_container = M - mob_container.forceMove(get_turf(src)) - M.reset_view() + held_mob = null + drop_items() qdel(src) +/obj/item/weapon/holder/proc/drop_items() + if(contents.len > 1) + for(var/atom/movable/M in contents) + if(M == held_mob) + continue + M.forceMove(get_turf(src)) + /obj/item/weapon/holder/GetID() for(var/mob/M in contents) var/obj/item/I = M.GetIdCard() @@ -109,6 +115,7 @@ var/list/holder_mob_icon_cache = list() return var/obj/item/weapon/holder/H = new holder_type(get_turf(src)) + H.held_mob = src src.forceMove(H) grabber.put_in_hands(H) diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm index 562c578986..d427dcbfb6 100644 --- a/code/modules/mob/language/outsider.dm +++ b/code/modules/mob/language/outsider.dm @@ -38,7 +38,7 @@ ..(speaker,message,speaker_mask) /datum/language/cultcommon - name = "Cult" + name = LANGUAGE_CULT desc = "The chants of the occult, the incomprehensible." speech_verb = "intones" ask_verb = "intones" @@ -52,8 +52,8 @@ "mah'weyh", "pleggh", "at", "e'ntrath", "tok-lyr", "rqa'nap", "g'lt-ulotf", "ta'gh", "fara'qha", "fel", "d'amar det", \ "yu'gular", "faras", "desdae", "havas", "mithum", "javara", "umathar", "uf'kal", "thenar", "rash'tla", \ "sektath", "mal'zua", "zasan", "therium", "viortia", "kla'atu", "barada", "nikt'o", "fwe'sh", "mah", "erl", "nyag", "r'ya", \ - "gal'h'rfikk", "harfrandid", "mud'gib", "fuu", "ma'jin", "dedo", "ol'btoh", "n'ath", "reth", "sh'yro", "eth", \ - "d'rekkathnor", "khari'd", "gual'te", "nikka", "nikt'o", "barada", "kla'atu", "barhah", "hra" ,"zar'garis") + "gal'h'rfikk", "harfrandid", "mud'gib", "il", "fuu", "ma'jin", "dedo", "ol'btoh", "n'ath", "reth", "sh'yro", "eth", \ + "d'rekkathnor", "khari'd", "gual'te", "nikka", "nikt'o", "barada", "kla'atu", "barhah", "hra" ,"zar'garis", "spiri", "malum") /datum/language/cult name = "Occult" diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 438b680f67..0e20458291 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -23,7 +23,16 @@ colour = "soghun" key = "o" flags = WHITELISTED - syllables = list("ss","ss","ss","ss","skak","seeki","resh","las","esi","kor","sh") + space_chance = 40 + syllables = list( + "za", "az", "ze", "ez", "zi", "iz", "zo", "oz", "zu", "uz", "zs", "sz", + "ha", "ah", "he", "eh", "hi", "ih", "ho", "oh", "hu", "uh", "hs", "sh", + "la", "al", "le", "el", "li", "il", "lo", "ol", "lu", "ul", "ls", "sl", + "ka", "ak", "ke", "ek", "ki", "ik", "ko", "ok", "ku", "uk", "ks", "sk", + "sa", "as", "se", "es", "si", "is", "so", "os", "su", "us", "ss", "ss", + "ra", "ar", "re", "er", "ri", "ir", "ro", "or", "ru", "ur", "rs", "sr", + "a", "a", "e", "e", "i", "i", "o", "o", "u", "u", "s", "s" + ) /datum/language/unathi/get_random_name() diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 368cad0ff7..6a45483251 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -31,8 +31,6 @@ BITSET(hud_updateflag, STATUS_HUD) BITSET(hud_updateflag, LIFE_HUD) - handle_hud_list() - //Handle species-specific deaths. species.handle_death(src) animate_tail_stop() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index a68ba56dd4..12ad8359db 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -285,9 +285,9 @@ else if(temp.wounds.len > 0 || temp.open) if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ]) var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ] - wound_flavor_text["[temp.name]"] = "[T.He] has [temp.get_wounds_desc()] on [T.His] [parent.name].
" + wound_flavor_text["[temp.name]"] = "[T.He] has [temp.get_wounds_desc()] on [T.his] [parent.name].
" else - wound_flavor_text["[temp.name]"] = "[T.He] has [temp.get_wounds_desc()] on [T.His] [temp.name].
" + wound_flavor_text["[temp.name]"] = "[T.He] has [temp.get_wounds_desc()] on [T.his] [temp.name].
" if(temp.status & ORGAN_BLEEDING) is_bleeding["[temp.name]"] = "[T.His] [temp.name] is bleeding!
" else diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 56482186b4..47853089cf 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -150,21 +150,21 @@ update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message) if(update) UpdateDamageIcon() -/mob/living/carbon/human/proc/implant_loyalty(mob/living/carbon/human/M, override = FALSE) // Won't override by default. +/mob/living/carbon/human/proc/implant_loyalty(override = FALSE) // Won't override by default. if(!config.use_loyalty_implants && !override) return // Nuh-uh. - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) - L.imp_in = M + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src) + L.imp_in = src L.implanted = 1 - var/obj/item/organ/external/affected = M.organs_by_name[BP_HEAD] + var/obj/item/organ/external/affected = src.organs_by_name[BP_HEAD] affected.implants += L L.part = affected L.implanted(src) -/mob/living/carbon/human/proc/is_loyalty_implanted(mob/living/carbon/human/M) - for(var/L in M.contents) +/mob/living/carbon/human/proc/is_loyalty_implanted() + for(var/L in src.contents) if(istype(L, /obj/item/weapon/implant/loyalty)) - for(var/obj/item/organ/external/O in M.organs) + for(var/obj/item/organ/external/O in src.organs) if(L in O.implants) return 1 return 0 diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index 113377b933..4aad06fd7a 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -17,6 +17,10 @@ /mob/living/carbon/human/diona/New(var/new_loc) ..(new_loc, "Diona") +/mob/living/carbon/human/teshari/New(var/new_loc) + h_style = "Teshari Default" + ..(new_loc, "Teshari") + /mob/living/carbon/human/machine/New(var/new_loc) h_style = "blue IPC screen" ..(new_loc, "Machine") diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 4cbde15ff1..5dacc500dc 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -267,8 +267,6 @@ This saves us from having to call add_fingerprint() any time something is put in update_inv_shoes(redraw_mob) if(slot_wear_suit) src.wear_suit = W - if((wear_suit.flags_inv & HIDESHOES) || (w_uniform.flags_inv & HIDESHOES)) - update_inv_shoes(0) W.equipped(src, slot) update_inv_wear_suit(redraw_mob) if(slot_w_uniform) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 36e418418e..9790559edf 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -150,6 +150,10 @@ /mob/living/carbon/human/handle_disabilities() ..() + + if(stat != CONSCIOUS) //Let's not worry about tourettes if you're not conscious. + return + //Vision if(species.vision_organ) if(internal_organs_by_name[species.vision_organ]) // Vision organs cut out? Permablind. @@ -165,7 +169,6 @@ blinded = 0 eye_blurry = 0 - if (disabilities & EPILEPSY) if ((prob(1) && paralysis < 1)) src << "\red You have a seizure!" @@ -198,27 +201,26 @@ if (prob(10)) stuttering = max(10, stuttering) - if(stat != 2) - var/rn = rand(0, 200) - if(getBrainLoss() >= 5) - if(0 <= rn && rn <= 3) - custom_pain("Your head feels numb and painful.") - if(getBrainLoss() >= 15) - if(4 <= rn && rn <= 6) if(eye_blurry <= 0) - src << "It becomes hard to see for some reason." - eye_blurry = 10 - if(getBrainLoss() >= 35) - if(7 <= rn && rn <= 9) if(get_active_hand()) - src << "Your hand won't respond properly, you drop what you're holding!" - drop_item() - if(getBrainLoss() >= 45) - if(10 <= rn && rn <= 12) - if(prob(50)) - src << "You suddenly black out!" - Paralyse(10) - else if(!lying) - src << "Your legs won't respond properly, you fall down!" - Weaken(10) + var/rn = rand(0, 200) + if(getBrainLoss() >= 5) + if(0 <= rn && rn <= 3) + custom_pain("Your head feels numb and painful.") + if(getBrainLoss() >= 15) + if(4 <= rn && rn <= 6) if(eye_blurry <= 0) + src << "It becomes hard to see for some reason." + eye_blurry = 10 + if(getBrainLoss() >= 35) + if(7 <= rn && rn <= 9) if(get_active_hand()) + src << "Your hand won't respond properly, you drop what you're holding!" + drop_item() + if(getBrainLoss() >= 45) + if(10 <= rn && rn <= 12) + if(prob(50)) + src << "You suddenly black out!" + Paralyse(10) + else if(!lying) + src << "Your legs won't respond properly, you fall down!" + Weaken(10) @@ -1555,7 +1557,7 @@ /mob/living/carbon/human/proc/handle_hud_list() if (BITTEST(hud_updateflag, HEALTH_HUD)) var/image/holder = hud_list[HEALTH_HUD] - if(stat == 2) + if(stat == DEAD) holder.icon_state = "hudhealth-100" // X_X else var/percentage_health = RoundHealth((health-config.health_threshold_crit)/(maxHealth-config.health_threshold_crit)*100) @@ -1579,7 +1581,7 @@ var/image/holder = hud_list[STATUS_HUD] var/image/holder2 = hud_list[STATUS_HUD_OOC] - if(stat == 2) + if(stat == DEAD) holder.icon_state = "huddead" holder2.icon_state = "huddead" else if(status_flags & XENO_HOST) diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm index 26efe8ee90..19d7a799dd 100644 --- a/code/modules/mob/living/carbon/human/stripping.dm +++ b/code/modules/mob/living/carbon/human/stripping.dm @@ -13,22 +13,22 @@ // Handle things that are part of this interface but not removing/replacing a given item. if("pockets") visible_message("\The [user] is trying to empty \the [src]'s pockets!") - if(do_after(user,HUMAN_STRIP_DELAY)) + if(do_after(user,HUMAN_STRIP_DELAY,src)) empty_pockets(user) return if("splints") visible_message("\The [user] is trying to remove \the [src]'s splints!") - if(do_after(user,HUMAN_STRIP_DELAY)) + if(do_after(user,HUMAN_STRIP_DELAY,src)) remove_splints(user) return if("sensors") visible_message("\The [user] is trying to set \the [src]'s sensors!") - if(do_after(user,HUMAN_STRIP_DELAY)) + if(do_after(user,HUMAN_STRIP_DELAY,src)) toggle_sensors(user) return if("internals") visible_message("\The [usr] is trying to set \the [src]'s internals!") - if(do_after(user,HUMAN_STRIP_DELAY)) + if(do_after(user,HUMAN_STRIP_DELAY,src)) toggle_internals(user) return if("tie") @@ -40,7 +40,7 @@ return visible_message("\The [usr] is trying to remove \the [src]'s [A.name]!") - if(!do_after(user,HUMAN_STRIP_DELAY)) + if(!do_after(user,HUMAN_STRIP_DELAY,src)) return if(!A || suit.loc != src || !(A in suit.accessories)) @@ -74,7 +74,7 @@ else visible_message("\The [user] is trying to put \a [held] on \the [src]!") - if(!do_after(user,HUMAN_STRIP_DELAY)) + if(!do_after(user,HUMAN_STRIP_DELAY,src)) return if(!stripping && user.get_active_hand() != held) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 7f0489b90f..49ae38e789 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -499,6 +499,9 @@ var/global/list/damage_icon_parts = list() else overlays_standing[UNIFORM_LAYER] = null + //hiding/revealing shoes if necessary + update_inv_shoes(0) + if(update_icons) update_icons() @@ -556,13 +559,15 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_glasses(var/update_icons=1) if(glasses) - + var/image/standing if(glasses.icon_override) - overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") + standing = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") else if(glasses.sprite_sheets && glasses.sprite_sheets[species.get_bodytype(src)]) - overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[glasses.icon_state]") + standing = image("icon" = glasses.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[glasses.icon_state]") else - overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") + standing = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") + standing.color = glasses.color + overlays_standing[GLASSES_LAYER] = standing else overlays_standing[GLASSES_LAYER] = null @@ -575,29 +580,37 @@ var/global/list/damage_icon_parts = list() return if(l_ear || r_ear) + var/image/both = image("icon" = null) + if(l_ear) - + var/image/standing var/t_type = l_ear.icon_state if(l_ear.icon_override) t_type = "[t_type]_l" - overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]") + standing = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]") else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.get_bodytype(src)]) t_type = "[t_type]_l" - overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]") + standing = image("icon" = l_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]") else - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") - + standing = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") + standing.color = l_ear.color + both.overlays += standing + if(r_ear) - + var/image/standing var/t_type = r_ear.icon_state if(r_ear.icon_override) t_type = "[t_type]_r" - overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]") + standing = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]") else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.get_bodytype(src)]) t_type = "[t_type]_r" - overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]") + standing = image("icon" = r_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]") else - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") + standing = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") + standing.color = r_ear.color + both.overlays += standing + + overlays_standing[EARS_LAYER] = both else overlays_standing[EARS_LAYER] = null @@ -764,10 +777,12 @@ var/global/list/damage_icon_parts = list() else overlays_standing[SUIT_LAYER] = null update_tail_showing(0) - update_inv_shoes(0) update_collar(0) + //hide/show shoes if necessary + update_inv_shoes(0) + if(update_icons) update_icons() /mob/living/carbon/human/update_inv_pockets(var/update_icons=1) diff --git a/code/modules/mob/living/carbon/metroid/say.dm b/code/modules/mob/living/carbon/metroid/say.dm index cd07f6bf3b..7c7ad76240 100644 --- a/code/modules/mob/living/carbon/metroid/say.dm +++ b/code/modules/mob/living/carbon/metroid/say.dm @@ -31,7 +31,7 @@ speech_buffer.Add(lowertext(html_decode(message))) ..() -/mob/living/carbon/slime/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") +/mob/living/carbon/slime/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") if (speaker in Friends) speech_buffer = list() speech_buffer.Add(speaker) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index c3162b030c..d9a8ad84b4 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -53,8 +53,7 @@ update_canmove() - if(client) - handle_regular_hud_updates() + handle_regular_hud_updates() /mob/living/proc/handle_breathing() return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 9cbe7e1221..5a5f9f3ec4 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -52,7 +52,7 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c density = 1 status_flags = CANSTUN|CANPARALYSE|CANPUSH shouldnt_see = list(/obj/effect/rune) - var/list/network = list("Northern Star") + var/list/network = list(station_short) var/obj/machinery/camera/camera = null var/list/connected_robots = list() var/aiRestorePowerRoutine = 0 diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index 3f4f43fddc..9039801006 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -15,7 +15,7 @@ idle_power_usage = 20 active_power_usage = 5000 - var/fabricator_tag = "Northern Star Upper Level" + var/fabricator_tag = station_short+" Upper Level" var/drone_progress = 0 var/produce_drones = 1 var/time_last_drone = 500 @@ -26,7 +26,7 @@ /obj/machinery/drone_fabricator/derelict name = "construction drone fabricator" - fabricator_tag = "Northern Star Depths" + fabricator_tag = station_short+" Depths" drone_type = /mob/living/silicon/robot/drone/construction /obj/machinery/drone_fabricator/New() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 8b9271a40c..1e6752ab77 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -727,7 +727,7 @@ -/mob/living/simple_animal/parrot/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0) +/mob/living/simple_animal/parrot/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0) if(prob(50)) parrot_hear("[pick(available_channels)] [message]") ..(message,verb,language,part_a,part_b,speaker,hard_to_hear) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index b6c210ac56..55530ddcd8 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -510,7 +510,7 @@ /mob/new_player/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) return -/mob/new_player/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0) +/mob/new_player/hear_radio() return /mob/new_player/MayRespawn() diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index e270185414..ec003a813e 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -175,9 +175,11 @@ nanoui is used to open and update nano browser uis * @return /list config data */ /datum/nanoui/proc/get_config_data() + var/name = "[src_object]" + name = sanitize(name) var/list/config_data = list( "title" = title, - "srcObject" = list("name" = "[src_object]"), + "srcObject" = list("name" = name), "stateKey" = state_key, "status" = status, "autoUpdateLayout" = auto_update_layout, @@ -345,18 +347,20 @@ nanoui is used to open and update nano browser uis var/template_data_json = "{}" // An empty JSON object if (templates.len > 0) - template_data_json = json_encode(templates) + template_data_json = strip_improper(json_encode(templates)) var/list/send_data = get_send_data(initial_data) var/initial_data_json = replacetext(replacetext(json_encode(send_data), """, "&#34;"), "'", "'") + initial_data_json = strip_improper(initial_data_json); var/url_parameters_json = json_encode(list("src" = "\ref[src]")) return {" - + + [head_content] @@ -458,8 +466,8 @@ nanoui is used to open and update nano browser uis var/list/send_data = get_send_data(data) - //user << list2json(data) // used for debugging - user << output(list2params(list(json_encode(send_data))),"[window_id].browser:receiveUpdateData") + //user << list2json_usecache(send_data) // used for debugging //NANO DEBUG HOOK + user << output(list2params(list(strip_improper(json_encode(send_data)))),"[window_id].browser:receiveUpdateData") /** * This Topic() proc is called whenever a user clicks on a link within a Nano UI diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 28d054b377..0a08817ef0 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -349,6 +349,7 @@ //Sync the organ's damage with its wounds src.update_damages() + src.update_wounds() owner.updatehealth() var/result = update_icon() @@ -602,6 +603,9 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/proc/update_wounds() if((status & ORGAN_ROBOT)) //Robotic limbs don't heal or get worse. + for(var/datum/wound/W in wounds) + if(W.damage <= 0) + wounds -= W return for(var/datum/wound/W in wounds) @@ -1129,17 +1133,23 @@ Note that amputating the affected organ does in fact remove the infection from t if(brute_dam) switch(brute_dam) if(0 to 20) - . += " some dents" + . += "some dents" if(21 to INFINITY) - . += pick(" a lot of dents"," severe denting") + . += pick("a lot of dents","severe denting") if(brute_dam && burn_dam) - . += " and" + . += " and " if(burn_dam) switch(burn_dam) if(0 to 20) - . += " some burns" + . += "some burns" if(21 to INFINITY) - . += pick(" a lot of burns"," severe melting") + . += pick("a lot of burns","severe melting") + if(open) + if(brute_dam || burn_dam) + . += " and an open panel" + else + . += "an open panel" + return var/list/wound_descriptors = list() diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index 3cf3ecb239..2c97bf4cfc 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -13,6 +13,8 @@ var/damage = 0 // ticks of bleeding left. var/bleed_timer = 0 + // Above this amount wounds you will need to treat the wound to stop bleeding, regardless of bleed_timer + var/bleed_threshold = 30 // amount of damage the current wound type requires(less means we need to apply the next healing stage) var/min_damage = 0 @@ -187,7 +189,7 @@ return 0 //incompatible damage types if (src.amount > 1) - return 0 + return 0//merged wounds cannot be worsened. //with 1.5*, a shallow cut will be able to carry at most 30 damage, //37.5 for a deep cut @@ -208,8 +210,8 @@ if (bandaged||clamped) return 0 - if (wound_damage() <= 30 && bleed_timer <= 0) - return 0 //Bleed timer has run out. Wounds with more than 30 damage don't stop bleeding on their own. + if (bleed_timer <= 0 && wound_damage() <= bleed_threshold) + return 0 //Bleed timer has run out. Once a wound is big enough though, you'll need a bandage to stop it return 1 @@ -264,8 +266,9 @@ return null //no wound /** CUTS **/ -/datum/wound/cut/bleeding() - return ..() || wound_damage() >= 5 +/datum/wound/cut + bleed_threshold = 5 + damage_type = CUT /datum/wound/cut/small // link wound descriptions to amounts of damage @@ -273,40 +276,34 @@ // The major cut types have the max_bleeding_stage set to the clot stage (which is accordingly given the "blood soaked" descriptor). max_bleeding_stage = 3 stages = list("ugly ripped cut" = 20, "ripped cut" = 10, "cut" = 5, "healing cut" = 2, "small scab" = 0) - damage_type = CUT /datum/wound/cut/deep max_bleeding_stage = 3 stages = list("ugly deep ripped cut" = 25, "deep ripped cut" = 20, "deep cut" = 15, "clotted cut" = 8, "scab" = 2, "fresh skin" = 0) - damage_type = CUT /datum/wound/cut/flesh max_bleeding_stage = 4 stages = list("ugly ripped flesh wound" = 35, "ugly flesh wound" = 30, "flesh wound" = 25, "blood soaked clot" = 15, "large scab" = 5, "fresh skin" = 0) - damage_type = CUT /datum/wound/cut/gaping max_bleeding_stage = 3 stages = list("gaping wound" = 50, "large blood soaked clot" = 25, "blood soaked clot" = 15, "small angry scar" = 5, "small straight scar" = 0) - damage_type = CUT /datum/wound/cut/gaping_big max_bleeding_stage = 3 stages = list("big gaping wound" = 60, "healing gaping wound" = 40, "large blood soaked clot" = 25, "large angry scar" = 10, "large straight scar" = 0) - damage_type = CUT datum/wound/cut/massive max_bleeding_stage = 3 stages = list("massive wound" = 70, "massive healing wound" = 50, "massive blood soaked clot" = 25, "massive angry scar" = 10, "massive jagged scar" = 0) - damage_type = CUT /** PUNCTURES **/ +/datum/wound/puncture + bleed_threshold = 5 + damage_type = PIERCE + /datum/wound/puncture/can_worsen(damage_type, damage) - return 0 -/datum/wound/puncture/can_merge(var/datum/wound/other) - return 0 -/datum/wound/puncture/bleeding() - return ..() || wound_damage() >= 5 + return 0 //puncture wounds cannot be enlargened /datum/wound/puncture/small max_bleeding_stage = 2 @@ -334,41 +331,36 @@ datum/wound/puncture/massive damage_type = PIERCE /** BRUISES **/ -/datum/wound/bruise/bleeding() - return ..() || wound_damage() >= 20 - /datum/wound/bruise stages = list("monumental bruise" = 80, "huge bruise" = 50, "large bruise" = 30, "moderate bruise" = 20, "small bruise" = 10, "tiny bruise" = 5) + bleed_threshold = 20 max_bleeding_stage = 3 //only large bruise and above can bleed. autoheal_cutoff = 30 damage_type = BRUISE /** BURNS **/ /datum/wound/burn + damage_type = BURN max_bleeding_stage = 0 + /datum/wound/burn/bleeding() return 0 /datum/wound/burn/moderate stages = list("ripped burn" = 10, "moderate burn" = 5, "healing moderate burn" = 2, "fresh skin" = 0) - damage_type = BURN /datum/wound/burn/large stages = list("ripped large burn" = 20, "large burn" = 15, "healing large burn" = 5, "fresh skin" = 0) - damage_type = BURN /datum/wound/burn/severe stages = list("ripped severe burn" = 35, "severe burn" = 30, "healing severe burn" = 10, "burn scar" = 0) - damage_type = BURN /datum/wound/burn/deep stages = list("ripped deep burn" = 45, "deep burn" = 40, "healing deep burn" = 15, "large burn scar" = 0) - damage_type = BURN /datum/wound/burn/carbonised stages = list("carbonised area" = 50, "healing carbonised area" = 20, "massive burn scar" = 0) - damage_type = BURN /** INTERNAL BLEEDING **/ /datum/wound/internal_bleeding diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index d56c298b6c..66155da7ea 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -14,7 +14,7 @@ kill_count = 15 //if the shell hasn't hit anything after travelling this far it just explodes. var/flash_range = 0 var/brightness = 7 - var/light_duration = 5 + var/light_colour = "#ffffff" /obj/item/projectile/energy/flash/on_impact(var/atom/A) var/turf/T = flash_range? src.loc : get_turf(A) @@ -29,16 +29,25 @@ playsound(src, 'sound/effects/snap.ogg', 50, 1) src.visible_message("\The [src] explodes in a bright flash!") - new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows - new /obj/effect/effect/sparks(T) - new /obj/effect/effect/smoke/illumination(T, brightness=max(flash_range*2, brightness), lifetime=light_duration) + var/datum/effect/effect/system/spark_spread/sparks = PoolOrNew(/datum/effect/effect/system/spark_spread) + sparks.set_up(2, 1, T) + sparks.start() + new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows + new /obj/effect/effect/smoke/illumination(T, 5, brightness, brightness, light_colour) //blinds people like the flash round, but can also be used for temporary illumination /obj/item/projectile/energy/flash/flare damage = 10 flash_range = 1 - brightness = 9 //similar to a flare - light_duration = 200 + brightness = 15 + +/obj/item/projectile/energy/flash/flare/on_impact(var/atom/A) + light_colour = pick("#e58775", "#ffffff", "#90ff90", "#a09030") + + ..() //initial flash + + //residual illumination + new /obj/effect/effect/smoke/illumination(src.loc, rand(190,240) SECONDS, range=8, power=3, color=light_colour) //same lighting power as flare /obj/item/projectile/energy/electrode name = "electrode" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index 26b58eed31..4c3e461a27 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -375,6 +375,24 @@ /datum/reagent/sugar/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) M.nutrition += removed * 3 + var/effective_dose = dose + if(issmall(M)) + effective_dose *= 2 + + if(alien == IS_UNATHI) + if(effective_dose < 2) + if(effective_dose == metabolism * 2 || prob(5)) + M.emote("yawn") + else if(effective_dose < 5) + M.eye_blurry = max(M.eye_blurry, 10) + else if(effective_dose < 20) + if(prob(50)) + M.Weaken(2) + M.drowsyness = max(M.drowsyness, 20) + else + M.sleeping = max(M.sleeping, 20) + M.drowsyness = max(M.drowsyness, 60) + /datum/reagent/sulfur name = "Sulfur" id = "sulfur" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 637470e7cc..be96e6665a 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -17,6 +17,8 @@ affect_ingest(M, alien, removed) /datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + switch(alien) + if(IS_UNATHI) removed *= 0.5 if(issmall(M)) removed *= 2 // Small bodymass, more effect from lower volume. M.heal_organ_damage(0.5 * removed, 0) M.nutrition += nutriment_factor * removed // For hunger and fatness @@ -42,6 +44,8 @@ if(IS_TESHARI) ..(M, alien, removed*1.2) // Teshari get a bit more nutrition from meat. return + if(IS_UNATHI) + ..(M, alien, removed*2.25) //Unathi get most of their nutrition from meat. ..() /datum/reagent/nutriment/protein/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) @@ -62,6 +66,27 @@ nutriment_factor = 10 color = "#FFFF00" +/datum/reagent/honey/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + + var/effective_dose = dose + if(issmall(M)) + effective_dose *= 2 + + if(alien == IS_UNATHI) + if(effective_dose < 2) + if(effective_dose == metabolism * 2 || prob(5)) + M.emote("yawn") + else if(effective_dose < 5) + M.eye_blurry = max(M.eye_blurry, 10) + else if(effective_dose < 20) + if(prob(50)) + M.Weaken(2) + M.drowsyness = max(M.drowsyness, 20) + else + M.sleeping = max(M.sleeping, 20) + M.drowsyness = max(M.drowsyness, 60) + /datum/reagent/nutriment/flour name = "flour" id = "flour" @@ -396,6 +421,27 @@ glass_name = "glass of grape juice" glass_desc = "It's grrrrrape!" +/datum/reagent/juice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + + var/effective_dose = dose/2 + if(issmall(M)) + effective_dose *= 2 + + if(alien == IS_UNATHI) + if(effective_dose < 2) + if(effective_dose == metabolism * 2 || prob(5)) + M.emote("yawn") + else if(effective_dose < 5) + M.eye_blurry = max(M.eye_blurry, 10) + else if(effective_dose < 20) + if(prob(50)) + M.Weaken(2) + M.drowsyness = max(M.drowsyness, 20) + else + M.sleeping = max(M.sleeping, 20) + M.drowsyness = max(M.drowsyness, 60) + /datum/reagent/drink/juice/lemon name = "Lemon Juice" id = "lemonjuice" @@ -765,6 +811,27 @@ glass_desc = "Glorious brainfreezing mixture." glass_center_of_mass = list("x"=16, "y"=7) +/datum/reagent/milkshake/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + + var/effective_dose = dose/2 + if(issmall(M)) + effective_dose *= 2 + + if(alien == IS_UNATHI) + if(effective_dose < 2) + if(effective_dose == metabolism * 2 || prob(5)) + M.emote("yawn") + else if(effective_dose < 5) + M.eye_blurry = max(M.eye_blurry, 10) + else if(effective_dose < 20) + if(prob(50)) + M.Weaken(2) + M.drowsyness = max(M.drowsyness, 20) + else + M.sleeping = max(M.sleeping, 20) + M.drowsyness = max(M.drowsyness, 60) + /datum/reagent/drink/rewriter name = "Rewriter" description = "The secret of the sanctuary of the Libarian..." diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 4f4981b4d8..558e860913 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -2,7 +2,8 @@ name = "blood packs bags" desc = "This box contains blood packs." icon_state = "sterile" - New() + +/obj/item/weapon/storage/box/bloodpacks/New() ..() new /obj/item/weapon/reagent_containers/blood/empty(src) new /obj/item/weapon/reagent_containers/blood/empty(src) @@ -21,22 +22,22 @@ var/blood_type = null - New() - ..() - if(blood_type != null) - name = "BloodPack [blood_type]" - reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) - update_icon() - - on_reagent_change() +/obj/item/weapon/reagent_containers/blood/New() + ..() + if(blood_type != null) + name = "BloodPack [blood_type]" + reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() +/obj/item/weapon/reagent_containers/blood/on_reagent_change() update_icon() - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 9) icon_state = "empty" - if(10 to 50) icon_state = "half" - if(51 to INFINITY) icon_state = "full" + +/obj/item/weapon/reagent_containers/blood/update_icon() + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) icon_state = "empty" + if(10 to 50) icon_state = "half" + if(51 to INFINITY) icon_state = "full" /obj/item/weapon/reagent_containers/blood/APlus blood_type = "A+" diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index e605683de7..36a8b40fef 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -12,88 +12,88 @@ slot_flags = SLOT_EARS volume = 5 - afterattack(var/obj/target, var/mob/user, var/flag) - if(!target.reagents || !flag) return +/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/flag) + if(!target.reagents || !flag) return - if(reagents.total_volume) + if(reagents.total_volume) - if(!target.reagents.get_free_space()) - user << "[target] is full." + if(!target.reagents.get_free_space()) + user << "[target] is full." + return + + if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit. + user << "You cannot directly fill this object." + return + + var/trans = 0 + + if(ismob(target)) + + var/time = 20 //2/3rds the time of a syringe + user.visible_message("[user] is trying to squirt something into [target]'s eyes!") + + if(!do_mob(user, target, time)) return - if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit. - user << "You cannot directly fill this object." - return + if(istype(target, /mob/living/carbon/human)) + var/mob/living/carbon/human/victim = target - var/trans = 0 + var/obj/item/safe_thing = null + if(victim.wear_mask) + if (victim.wear_mask.body_parts_covered & EYES) + safe_thing = victim.wear_mask + if(victim.head) + if (victim.head.body_parts_covered & EYES) + safe_thing = victim.head + if(victim.glasses) + if (!safe_thing) + safe_thing = victim.glasses - if(ismob(target)) - - var/time = 20 //2/3rds the time of a syringe - user.visible_message("[user] is trying to squirt something into [target]'s eyes!") - - if(!do_mob(user, target, time)) + if(safe_thing) + trans = reagents.trans_to_obj(safe_thing, amount_per_transfer_from_this) + user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails!", "You transfer [trans] units of the solution.") return - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/victim = target + var/mob/living/M = target + var/contained = reagentlist() + M.attack_log += text("\[[time_stamp()]\] Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained]") + user.attack_log += text("\[[time_stamp()]\] Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]") + msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - var/obj/item/safe_thing = null - if(victim.wear_mask) - if (victim.wear_mask.body_parts_covered & EYES) - safe_thing = victim.wear_mask - if(victim.head) - if (victim.head.body_parts_covered & EYES) - safe_thing = victim.head - if(victim.glasses) - if (!safe_thing) - safe_thing = victim.glasses - - if(safe_thing) - trans = reagents.trans_to_obj(safe_thing, amount_per_transfer_from_this) - user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails!", "You transfer [trans] units of the solution.") - return - - var/mob/living/M = target - var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]") - msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - - trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST) - user.visible_message("[user] squirts something into [target]'s eyes!", "You transfer [trans] units of the solution.") + trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST) + user.visible_message("[user] squirts something into [target]'s eyes!", "You transfer [trans] units of the solution.") - return + return - else - trans = reagents.trans_to(target, amount_per_transfer_from_this) //sprinkling reagents on generic non-mobs - user << "You transfer [trans] units of the solution." - - else // Taking from something - - if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers)) - user << "You cannot directly remove reagents from [target]." - return - - if(!target.reagents || !target.reagents.total_volume) - user << "[target] is empty." - return - - var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) - - user << "You fill the dropper with [trans] units of the solution." - - return - - on_reagent_change() - update_icon() - - update_icon() - if(reagents.total_volume) - icon_state = "dropper1" else - icon_state = "dropper0" + trans = reagents.trans_to(target, amount_per_transfer_from_this) //sprinkling reagents on generic non-mobs + user << "You transfer [trans] units of the solution." + + else // Taking from something + + if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers)) + user << "You cannot directly remove reagents from [target]." + return + + if(!target.reagents || !target.reagents.total_volume) + user << "[target] is empty." + return + + var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) + + user << "You fill the dropper with [trans] units of the solution." + + return + +/obj/item/weapon/reagent_containers/dropper/on_reagent_change() + update_icon() + +/obj/item/weapon/reagent_containers/dropper/update_icon() + if(reagents.total_volume) + icon_state = "dropper1" + else + icon_state = "dropper0" /obj/item/weapon/reagent_containers/dropper/industrial name = "Industrial Dropper" diff --git a/code/modules/reagents/reagent_containers/food/cans.dm b/code/modules/reagents/reagent_containers/food/cans.dm index 7d72b8bf51..4597c5bd71 100644 --- a/code/modules/reagents/reagent_containers/food/cans.dm +++ b/code/modules/reagents/reagent_containers/food/cans.dm @@ -10,43 +10,48 @@ desc = "Cola. in space." icon_state = "cola" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("cola", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/cola/New() + ..() + reagents.add_reagent("cola", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle name = "bottled water" desc = "Introduced to the vending machines by Skrellian request, this water comes straight from the Martian poles." icon_state = "waterbottle" center_of_mass = list("x"=15, "y"=8) - New() - ..() - reagents.add_reagent("water", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/New() + ..() + reagents.add_reagent("water", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind name = "\improper Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("spacemountainwind", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind/New() + ..() + reagents.add_reagent("spacemountainwind", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko name = "\improper 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." icon_state = "thirteen_loko" center_of_mass = list("x"=16, "y"=8) - New() - ..() - reagents.add_reagent("thirteenloko", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko/New() + ..() + reagents.add_reagent("thirteenloko", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb name = "\improper Dr. Gibb" desc = "A delicious mixture of 42 different flavors." icon_state = "dr_gibb" center_of_mass = list("x"=16, "y"=10) - New() + +/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb/New() ..() reagents.add_reagent("dr_gibb", 30) @@ -55,60 +60,67 @@ desc = "The taste of a star in liquid form. And, a bit of tuna...?" icon_state = "starkist" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("brownstar", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/starkist/New() + ..() + reagents.add_reagent("brownstar", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/space_up name = "\improper Space-Up" desc = "Tastes like a hull breach in your mouth." icon_state = "space-up" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("space_up", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/space_up/New() + ..() + reagents.add_reagent("space_up", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime name = "\improper Lemon-Lime" desc = "You wanted ORANGE. It gave you Lemon Lime." icon_state = "lemon-lime" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("lemon_lime", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime/New() + ..() + reagents.add_reagent("lemon_lime", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea name = "\improper Vrisk Serket Iced Tea" desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?" icon_state = "ice_tea_can" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("icetea", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea/New() + ..() + reagents.add_reagent("icetea", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice name = "\improper Grapel Juice" desc = "500 pages of rules of how to appropriately enter into a combat with this juice!" icon_state = "purple_can" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("grapejuice", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice/New() + ..() + reagents.add_reagent("grapejuice", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/tonic name = "\improper T-Borg's Tonic Water" desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." icon_state = "tonic" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("tonic", 50) + +/obj/item/weapon/reagent_containers/food/drinks/cans/tonic/New() + ..() + reagents.add_reagent("tonic", 50) /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater name = "soda water" desc = "A can of soda water. Still water's more refreshing cousin." icon_state = "sodawater" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("sodawater", 50) + +/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater/New() + ..() + reagents.add_reagent("sodawater", 50) diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm index d449d25195..ce26cdda50 100644 --- a/code/modules/reagents/reagent_containers/food/condiment.dm +++ b/code/modules/reagents/reagent_containers/food/condiment.dm @@ -15,147 +15,152 @@ center_of_mass = list("x"=16, "y"=6) volume = 50 - attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) +/obj/item/weapon/reagent_containers/food/condiment/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + return + +/obj/item/weapon/reagent_containers/food/condiment/attack_self(var/mob/user as mob) + return + +/obj/item/weapon/reagent_containers/food/condiment/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone) + if(standard_feed_mob(user, M)) return - attack_self(var/mob/user as mob) +/obj/item/weapon/reagent_containers/food/condiment/afterattack(var/obj/target, var/mob/user, var/flag) + if(standard_dispenser_refill(user, target)) + return + if(standard_pour_into(user, target)) return - attack(var/mob/M as mob, var/mob/user as mob, var/def_zone) - if(standard_feed_mob(user, M)) + if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them + if(!reagents || !reagents.total_volume) + user << "There is no condiment left in \the [src]." return - afterattack(var/obj/target, var/mob/user, var/flag) - if(standard_dispenser_refill(user, target)) - return - if(standard_pour_into(user, target)) + if(!target.reagents.get_free_space()) + user << "You can't add more condiment to \the [target]." return - if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them - if(!reagents || !reagents.total_volume) - user << "There is no condiment left in \the [src]." - return + var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this) + user << "You add [trans] units of the condiment to \the [target]." + else + ..() - if(!target.reagents.get_free_space()) - user << "You can't add more condiment to \the [target]." - return +/obj/item/weapon/reagent_containers/food/condiment/feed_sound(var/mob/user) + playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) - var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this) - user << "You add [trans] units of the condiment to \the [target]." - else - ..() +/obj/item/weapon/reagent_containers/food/condiment/self_feed_message(var/mob/user) + user << "You swallow some of contents of \the [src]." - feed_sound(var/mob/user) - playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) - - self_feed_message(var/mob/user) - user << "You swallow some of contents of \the [src]." - - on_reagent_change() - if(reagents.reagent_list.len > 0) - switch(reagents.get_master_reagent_id()) - if("ketchup") - name = "Ketchup" - desc = "You feel more American already." - icon_state = "ketchup" - center_of_mass = list("x"=16, "y"=6) - if("capsaicin") - name = "Hotsauce" - desc = "You can almost TASTE the stomach ulcers now!" - icon_state = "hotsauce" - center_of_mass = list("x"=16, "y"=6) - if("enzyme") - name = "Universal Enzyme" - desc = "Used in cooking various dishes." - icon_state = "enzyme" - center_of_mass = list("x"=16, "y"=6) - if("soysauce") - name = "Soy Sauce" - desc = "A salty soy-based flavoring." - icon_state = "soysauce" - center_of_mass = list("x"=16, "y"=6) - if("frostoil") - name = "Coldsauce" - desc = "Leaves the tongue numb in its passage." - icon_state = "coldsauce" - center_of_mass = list("x"=16, "y"=6) - if("sodiumchloride") - name = "Salt Shaker" - desc = "Salt. From space oceans, presumably." - icon_state = "saltshaker" - center_of_mass = list("x"=16, "y"=10) - if("blackpepper") - name = "Pepper Mill" - desc = "Often used to flavor food or make people sneeze." - icon_state = "peppermillsmall" - center_of_mass = list("x"=16, "y"=10) - if("cornoil") - name = "Corn Oil" - desc = "A delicious oil used in cooking. Made from corn." - icon_state = "oliveoil" - center_of_mass = list("x"=16, "y"=6) - if("sugar") - name = "Sugar" - desc = "Tastey space sugar!" - center_of_mass = list("x"=16, "y"=6) +/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change() + if(reagents.reagent_list.len > 0) + switch(reagents.get_master_reagent_id()) + if("ketchup") + name = "Ketchup" + desc = "You feel more American already." + icon_state = "ketchup" + center_of_mass = list("x"=16, "y"=6) + if("capsaicin") + name = "Hotsauce" + desc = "You can almost TASTE the stomach ulcers now!" + icon_state = "hotsauce" + center_of_mass = list("x"=16, "y"=6) + if("enzyme") + name = "Universal Enzyme" + desc = "Used in cooking various dishes." + icon_state = "enzyme" + center_of_mass = list("x"=16, "y"=6) + if("soysauce") + name = "Soy Sauce" + desc = "A salty soy-based flavoring." + icon_state = "soysauce" + center_of_mass = list("x"=16, "y"=6) + if("frostoil") + name = "Coldsauce" + desc = "Leaves the tongue numb in its passage." + icon_state = "coldsauce" + center_of_mass = list("x"=16, "y"=6) + if("sodiumchloride") + name = "Salt Shaker" + desc = "Salt. From space oceans, presumably." + icon_state = "saltshaker" + center_of_mass = list("x"=16, "y"=10) + if("blackpepper") + name = "Pepper Mill" + desc = "Often used to flavor food or make people sneeze." + icon_state = "peppermillsmall" + center_of_mass = list("x"=16, "y"=10) + if("cornoil") + name = "Corn Oil" + desc = "A delicious oil used in cooking. Made from corn." + icon_state = "oliveoil" + center_of_mass = list("x"=16, "y"=6) + if("sugar") + name = "Sugar" + desc = "Tastey space sugar!" + center_of_mass = list("x"=16, "y"=6) + else + name = "Misc Condiment Bottle" + if (reagents.reagent_list.len==1) + desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure." else - name = "Misc Condiment Bottle" - if (reagents.reagent_list.len==1) - desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure." - else - desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them." - icon_state = "mixedcondiments" - center_of_mass = list("x"=16, "y"=6) - else - icon_state = "emptycondiment" - name = "Condiment Bottle" - desc = "An empty condiment bottle." - center_of_mass = list("x"=16, "y"=6) - return + desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them." + icon_state = "mixedcondiments" + center_of_mass = list("x"=16, "y"=6) + else + icon_state = "emptycondiment" + name = "Condiment Bottle" + desc = "An empty condiment bottle." + center_of_mass = list("x"=16, "y"=6) + return /obj/item/weapon/reagent_containers/food/condiment/enzyme name = "Universal Enzyme" desc = "Used in cooking various dishes." icon_state = "enzyme" - New() - ..() - reagents.add_reagent("enzyme", 50) -/obj/item/weapon/reagent_containers/food/condiment/sugar - New() - ..() - reagents.add_reagent("sugar", 50) +/obj/item/weapon/reagent_containers/food/condiment/enzyme/New() + ..() + reagents.add_reagent("enzyme", 50) + +/obj/item/weapon/reagent_containers/food/condiment/sugar/New() + ..() + reagents.add_reagent("sugar", 50) /obj/item/weapon/reagent_containers/food/condiment/small possible_transfer_amounts = list(1,20) amount_per_transfer_from_this = 1 volume = 20 center_of_mass = list() - on_reagent_change() return + +/obj/item/weapon/reagent_containers/food/condiment/small/on_reagent_change() + return /obj/item/weapon/reagent_containers/food/condiment/small/saltshaker //Seperate from above since it's a small shaker rather then name = "salt shaker" // a large one. desc = "Salt. From space oceans, presumably." icon_state = "saltshakersmall" - New() - ..() - reagents.add_reagent("sodiumchloride", 20) + +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker/New() + ..() + reagents.add_reagent("sodiumchloride", 20) /obj/item/weapon/reagent_containers/food/condiment/small/peppermill name = "pepper mill" desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" - New() - ..() - reagents.add_reagent("blackpepper", 20) + +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill/New() + ..() + reagents.add_reagent("blackpepper", 20) /obj/item/weapon/reagent_containers/food/condiment/small/sugar name = "sugar" desc = "Sweetness in a bottle" icon_state = "sugarsmall" - New() - ..() - reagents.add_reagent("sugar", 20) + +/obj/item/weapon/reagent_containers/food/condiment/small/sugar/New() + ..() + reagents.add_reagent("sugar", 20) /obj/item/weapon/reagent_containers/food/condiment/flour name = "flour sack" @@ -163,9 +168,12 @@ icon = 'icons/obj/food.dmi' icon_state = "flour" item_state = "flour" - on_reagent_change() return - New() - ..() - reagents.add_reagent("flour", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/condiment/flour/on_reagent_change() + return + +/obj/item/weapon/reagent_containers/food/condiment/flour/New() + ..() + reagents.add_reagent("flour", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 7fd9bec3a2..c934343e77 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -10,70 +10,70 @@ amount_per_transfer_from_this = 5 volume = 50 - on_reagent_change() +/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change() return - attack_self(mob/user as mob) - if(!is_open_container()) - open(user) +/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob) + if(!is_open_container()) + open(user) - proc/open(mob/user) - playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) - user << "You open [src] with an audible pop!" - flags |= OPENCONTAINER +/obj/item/weapon/reagent_containers/food/drinks/proc/open(mob/user) + playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) + user << "You open [src] with an audible pop!" + flags |= OPENCONTAINER - attack(mob/M as mob, mob/user as mob, def_zone) - if(standard_feed_mob(user, M)) - return - - return 0 +/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone) + if(standard_feed_mob(user, M)) + return - afterattack(obj/target, mob/user, proximity) - if(!proximity) return + return 0 - if(standard_dispenser_refill(user, target)) - return - if(standard_pour_into(user, target)) - return - return ..() +/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity) + if(!proximity) return - standard_feed_mob(var/mob/user, var/mob/target) - if(!is_open_container()) - user << "You need to open [src]!" - return 1 - return ..() + if(standard_dispenser_refill(user, target)) + return + if(standard_pour_into(user, target)) + return + return ..() - standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target) - if(!is_open_container()) - user << "You need to open [src]!" - return 1 - return ..() +/obj/item/weapon/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target) + if(!is_open_container()) + user << "You need to open [src]!" + return 1 + return ..() - standard_pour_into(var/mob/user, var/atom/target) - if(!is_open_container()) - user << "You need to open [src]!" - return 1 - return ..() +/obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target) + if(!is_open_container()) + user << "You need to open [src]!" + return 1 + return ..() - self_feed_message(var/mob/user) - user << "You swallow a gulp from \the [src]." +/obj/item/weapon/reagent_containers/food/drinks/standard_pour_into(var/mob/user, var/atom/target) + if(!is_open_container()) + user << "You need to open [src]!" + return 1 + return ..() - feed_sound(var/mob/user) - playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) +/obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user) + user << "You swallow a gulp from \the [src]." - examine(mob/user) - if(!..(user, 1)) - return - if(!reagents || reagents.total_volume == 0) - user << "\The [src] is empty!" - else if (reagents.total_volume <= volume * 0.25) - user << "\The [src] is almost empty!" - else if (reagents.total_volume <= volume * 0.66) - user << "\The [src] is half full!" - else if (reagents.total_volume <= volume * 0.90) - user << "\The [src] is almost full!" - else - user << "\The [src] is full!" +/obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user) + playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) + +/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user) + if(!..(user, 1)) + return + if(!reagents || reagents.total_volume == 0) + user << "\The [src] is empty!" + else if (reagents.total_volume <= volume * 0.25) + user << "\The [src] is almost empty!" + else if (reagents.total_volume <= volume * 0.66) + user << "\The [src] is half full!" + else if (reagents.total_volume <= volume * 0.90) + user << "\The [src] is almost full!" + else + user << "\The [src] is full!" //////////////////////////////////////////////////////////////////////////////// @@ -108,9 +108,10 @@ icon_state = "milk" item_state = "carton" center_of_mass = list("x"=16, "y"=9) - New() - ..() - reagents.add_reagent("milk", 50) + +/obj/item/weapon/reagent_containers/food/drinks/milk/New() + ..() + reagents.add_reagent("milk", 50) /obj/item/weapon/reagent_containers/food/drinks/soymilk name = "SoyMilk" @@ -118,18 +119,18 @@ icon_state = "soymilk" item_state = "carton" center_of_mass = list("x"=16, "y"=9) - New() - ..() - reagents.add_reagent("soymilk", 50) +/obj/item/weapon/reagent_containers/food/drinks/soymilk/New() + ..() + reagents.add_reagent("soymilk", 50) /obj/item/weapon/reagent_containers/food/drinks/coffee name = "Robust Coffee" desc = "Careful, the beverage you're about to enjoy is extremely hot." icon_state = "coffee" center_of_mass = list("x"=15, "y"=10) - New() - ..() - reagents.add_reagent("coffee", 30) +/obj/item/weapon/reagent_containers/food/drinks/coffee/New() + ..() + reagents.add_reagent("coffee", 30) /obj/item/weapon/reagent_containers/food/drinks/tea name = "Duke Purple Tea" @@ -137,18 +138,19 @@ icon_state = "teacup" item_state = "coffee" center_of_mass = list("x"=16, "y"=14) - New() - ..() - reagents.add_reagent("tea", 30) + +/obj/item/weapon/reagent_containers/food/drinks/tea/New() + ..() + reagents.add_reagent("tea", 30) /obj/item/weapon/reagent_containers/food/drinks/ice name = "Ice Cup" desc = "Careful, cold ice, do not chew." icon_state = "coffee" center_of_mass = list("x"=15, "y"=10) - New() - ..() - reagents.add_reagent("ice", 30) +/obj/item/weapon/reagent_containers/food/drinks/ice/New() + ..() + reagents.add_reagent("ice", 30) /obj/item/weapon/reagent_containers/food/drinks/h_chocolate name = "Dutch Hot Coco" @@ -156,19 +158,19 @@ icon_state = "hot_coco" item_state = "coffee" center_of_mass = list("x"=15, "y"=13) - New() - ..() - reagents.add_reagent("hot_coco", 30) + +/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/New() + ..() + reagents.add_reagent("hot_coco", 30) /obj/item/weapon/reagent_containers/food/drinks/dry_ramen name = "Cup Ramen" desc = "Just add 10ml water, self heats! A taste that reminds you of your school years." icon_state = "ramen" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("dry_ramen", 30) - +/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New() + ..() + reagents.add_reagent("dry_ramen", 30) /obj/item/weapon/reagent_containers/food/drinks/sillycup name = "Paper Cup" @@ -177,13 +179,14 @@ possible_transfer_amounts = null volume = 10 center_of_mass = list("x"=16, "y"=12) - New() - ..() - on_reagent_change() - if(reagents.total_volume) - icon_state = "water_cup" - else - icon_state = "water_cup_e" +/obj/item/weapon/reagent_containers/food/drinks/sillycup/New() + ..() + +/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change() + if(reagents.total_volume) + icon_state = "water_cup" + else + icon_state = "water_cup_e" //////////////////////////drinkingglass and shaker// diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm index c53d91675b..a9e55b26fe 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm @@ -193,7 +193,6 @@ //Keeping this here for now, I'll ask if I should keep it here. /obj/item/weapon/broken_bottle - name = "Broken Bottle" desc = "A bottle with a sharp broken bottom." icon = 'icons/obj/drinks.dmi' @@ -212,204 +211,225 @@ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) return ..() - /obj/item/weapon/reagent_containers/food/drinks/bottle/gin name = "Griffeater Gin" desc = "A bottle of high quality gin, produced in the New London Space Station." icon_state = "ginbottle" center_of_mass = list("x"=16, "y"=4) - New() - ..() - reagents.add_reagent("gin", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/gin/New() + ..() + reagents.add_reagent("gin", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey name = "Uncle Git's Special Reserve" desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES." icon_state = "whiskeybottle" center_of_mass = list("x"=16, "y"=3) - New() - ..() - reagents.add_reagent("whiskey", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey/New() + ..() + reagents.add_reagent("whiskey", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey name = "Special Blend Whiskey" desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." icon_state = "whiskeybottle2" center_of_mass = list("x"=16, "y"=3) - New() - ..() - reagents.add_reagent("specialwhiskey", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey/New() + ..() + reagents.add_reagent("specialwhiskey", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka name = "Tunguska Triple Distilled" desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide." icon_state = "vodkabottle" center_of_mass = list("x"=17, "y"=3) - New() - ..() - reagents.add_reagent("vodka", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/New() + ..() + reagents.add_reagent("vodka", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla name = "Caccavo Guaranteed Quality Tequilla" desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!" icon_state = "tequillabottle" center_of_mass = list("x"=16, "y"=3) - New() - ..() - reagents.add_reagent("tequilla", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla/New() + ..() + reagents.add_reagent("tequilla", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing name = "Bottle of Nothing" desc = "A bottle filled with nothing" icon_state = "bottleofnothing" center_of_mass = list("x"=17, "y"=5) - New() - ..() - reagents.add_reagent("nothing", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing/New() + ..() + reagents.add_reagent("nothing", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/patron name = "Wrapp Artiste Patron" desc = "Silver laced tequilla, served in space night clubs across the galaxy." icon_state = "patronbottle" center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("patron", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/patron/New() + ..() + reagents.add_reagent("patron", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/rum name = "Captain Pete's Cuban Spiced Rum" desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle." icon_state = "rumbottle" center_of_mass = list("x"=16, "y"=8) - New() - ..() - reagents.add_reagent("rum", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum/New() + ..() + reagents.add_reagent("rum", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater name = "Flask of Holy Water" desc = "A flask of the chaplain's holy water." icon_state = "holyflask" center_of_mass = list("x"=17, "y"=10) - New() - ..() - reagents.add_reagent("holywater", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/New() + ..() + reagents.add_reagent("holywater", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth name = "Goldeneye Vermouth" desc = "Sweet, sweet dryness~" icon_state = "vermouthbottle" center_of_mass = list("x"=17, "y"=3) - New() - ..() - reagents.add_reagent("vermouth", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth/New() + ..() + reagents.add_reagent("vermouth", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua name = "Robert Robust's Coffee Liqueur" desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK" icon_state = "kahluabottle" center_of_mass = list("x"=17, "y"=3) - New() - ..() - reagents.add_reagent("kahlua", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua/New() + ..() + reagents.add_reagent("kahlua", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager name = "College Girl Goldschlager" desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps." icon_state = "goldschlagerbottle" center_of_mass = list("x"=15, "y"=3) - New() - ..() - reagents.add_reagent("goldschlager", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager/New() + ..() + reagents.add_reagent("goldschlager", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/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." icon_state = "cognacbottle" center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("cognac", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac/New() + ..() + reagents.add_reagent("cognac", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/wine name = "Doublebeard Bearded Special Wine" desc = "A faint aura of unease and asspainery surrounds the bottle." icon_state = "winebottle" center_of_mass = list("x"=16, "y"=4) - New() - ..() - reagents.add_reagent("wine", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/New() + ..() + reagents.add_reagent("wine", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe name = "Jailbreaker Verte" desc = "One sip of this and you just know you're gonna have a good time." icon_state = "absinthebottle" center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("absinthe", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/New() + ..() + reagents.add_reagent("absinthe", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor name = "Emeraldine Melon Liquor" desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light." icon_state = "alco-green" //Placeholder. center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("melonliquor", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor/New() + ..() + reagents.add_reagent("melonliquor", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao name = "Miss Blue Curacao" desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic." icon_state = "alco-blue" //Placeholder. center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("bluecuracao", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao/New() + ..() + reagents.add_reagent("bluecuracao", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine name = "Briar Rose Grenadine Syrup" desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks." icon_state = "grenadinebottle" center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("grenadine", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine/New() + ..() + reagents.add_reagent("grenadine", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/cola name = "\improper Space Cola" desc = "Cola. in space" icon_state = "colabottle" center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("cola", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/New() + ..() + reagents.add_reagent("cola", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/space_up name = "\improper Space-Up" desc = "Tastes like a hull breach in your mouth." icon_state = "space-up_bottle" center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("space_up", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/New() + ..() + reagents.add_reagent("space_up", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind name = "\improper Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind_bottle" center_of_mass = list("x"=16, "y"=6) - New() - ..() - reagents.add_reagent("spacemountainwind", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/New() + ..() + reagents.add_reagent("spacemountainwind", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/pwine name = "Warlock's Velvet" desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!" icon_state = "pwinebottle" center_of_mass = list("x"=16, "y"=4) - New() - ..() - reagents.add_reagent("pwine", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine/New() + ..() + reagents.add_reagent("pwine", 100) //////////////////////////JUICES AND STUFF /////////////////////// @@ -420,9 +440,10 @@ item_state = "carton" center_of_mass = list("x"=16, "y"=7) isGlass = 0 - New() - ..() - reagents.add_reagent("orangejuice", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice/New() + ..() + reagents.add_reagent("orangejuice", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/cream name = "Milk Cream" @@ -431,9 +452,10 @@ item_state = "carton" center_of_mass = list("x"=16, "y"=8) isGlass = 0 - New() - ..() - reagents.add_reagent("cream", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream/New() + ..() + reagents.add_reagent("cream", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice name = "Tomato Juice" @@ -442,9 +464,10 @@ item_state = "carton" center_of_mass = list("x"=16, "y"=8) isGlass = 0 - New() - ..() - reagents.add_reagent("tomatojuice", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice/New() + ..() + reagents.add_reagent("tomatojuice", 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice name = "Lime Juice" @@ -453,9 +476,10 @@ item_state = "carton" center_of_mass = list("x"=16, "y"=8) isGlass = 0 - New() - ..() - reagents.add_reagent("limejuice", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice/New() + ..() + reagents.add_reagent("limejuice", 100) //Small bottles /obj/item/weapon/reagent_containers/food/drinks/bottle/small @@ -469,9 +493,10 @@ desc = "Contains only water, malt and hops." icon_state = "beer" center_of_mass = list("x"=16, "y"=12) - New() - ..() - reagents.add_reagent("beer", 30) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/New() + ..() + reagents.add_reagent("beer", 30) /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale name = "\improper Magm-Ale" @@ -479,6 +504,7 @@ icon_state = "alebottle" item_state = "beer" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("ale", 30) \ No newline at end of file + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/New() + ..() + reagents.add_reagent("ale", 30) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index 9141efbc1e..cdf495405f 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -108,3 +108,28 @@ ..() reagents.add_reagent("cola", 50) on_reagent_change() + +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass + name = "shot glass" + desc = "No glasses were shot in the making of this glass." + icon_state = "shotglass" + amount_per_transfer_from_this = 10 + volume = 10 + matter = list("glass" = 175) + +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change() + overlays.Cut() + + if(reagents.total_volume) + var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1") + + switch(reagents.total_volume) + if(0 to 3) filling.icon_state = "[icon_state]1" + if(4 to 7) filling.icon_state = "[icon_state]5" + if(8 to INFINITY) filling.icon_state = "[icon_state]12" + + filling.color += reagents.get_color() + overlays += filling + name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future. + else + name = "shot glass" diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 3041ec9957..98ce8751aa 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -252,12 +252,12 @@ filling_color = "#468C00" center_of_mass = list("x"=17, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("doctorsdelight", 8) - reagents.add_reagent("tricordrazine", 8) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("doctorsdelight", 8) + reagents.add_reagent("tricordrazine", 8) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/candy name = "candy" @@ -267,22 +267,22 @@ filling_color = "#7D5F46" center_of_mass = list("x"=15, "y"=15) - New() - ..() - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("sugar", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/candy/New() + ..() + reagents.add_reagent("nutriment", 1) + reagents.add_reagent("sugar", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/candy/donor name = "Donor Candy" desc = "A little treat for blood donors." trash = /obj/item/trash/candy - New() - ..() - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("sugar", 3) - bitesize = 5 +/obj/item/weapon/reagent_containers/food/snacks/candy/donor/New() + ..() + reagents.add_reagent("nutriment", 10) + reagents.add_reagent("sugar", 3) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/candy_corn name = "candy corn" @@ -291,11 +291,11 @@ filling_color = "#FFFCB0" center_of_mass = list("x"=14, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sugar", 2) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sugar", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chips name = "chips" @@ -305,10 +305,10 @@ filling_color = "#E8C31E" center_of_mass = list("x"=15, "y"=15) - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/chips/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/cookie name = "cookie" @@ -317,10 +317,10 @@ filling_color = "#DBC94F" center_of_mass = list("x"=17, "y"=18) - New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/cookie/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/chocolatebar name = "Chocolate Bar" @@ -329,12 +329,12 @@ filling_color = "#7D5F46" center_of_mass = list("x"=15, "y"=15) - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sugar", 2) - reagents.add_reagent("coco", 2) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sugar", 2) + reagents.add_reagent("coco", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chocolateegg name = "Chocolate Egg" @@ -343,12 +343,12 @@ filling_color = "#7D5F46" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sugar", 2) - reagents.add_reagent("coco", 2) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sugar", 2) + reagents.add_reagent("coco", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/donut name = "donut" @@ -362,17 +362,18 @@ name = "donut" desc = "Goes great with Robust Coffee." icon_state = "donut1" - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - src.bitesize = 3 - if(prob(30)) - src.icon_state = "donut2" - src.overlay_state = "box-donut2" - src.name = "frosted donut" - reagents.add_reagent("sprinkles", 2) - center_of_mass = list("x"=19, "y"=16) + +/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + src.bitesize = 3 + if(prob(30)) + src.icon_state = "donut2" + src.overlay_state = "box-donut2" + src.name = "frosted donut" + reagents.add_reagent("sprinkles", 2) + center_of_mass = list("x"=19, "y"=16) /obj/item/weapon/reagent_containers/food/snacks/donut/chaos name = "Chaos Donut" @@ -380,39 +381,38 @@ icon_state = "donut1" filling_color = "#ED11E6" - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sprinkles", 1) - bitesize = 10 - var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10) - switch(chaosselect) - if(1) - reagents.add_reagent("nutriment", 3) - if(2) - reagents.add_reagent("capsaicin", 3) - if(3) - reagents.add_reagent("frostoil", 3) - if(4) - reagents.add_reagent("sprinkles", 3) - if(5) - reagents.add_reagent("phoron", 3) - if(6) - reagents.add_reagent("coco", 3) - if(7) - reagents.add_reagent("slimejelly", 3) - if(8) - reagents.add_reagent("banana", 3) - if(9) - reagents.add_reagent("berryjuice", 3) - if(10) - reagents.add_reagent("tricordrazine", 3) - if(prob(30)) - src.icon_state = "donut2" - src.overlay_state = "box-donut2" - src.name = "Frosted Chaos Donut" - reagents.add_reagent("sprinkles", 2) - +/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sprinkles", 1) + bitesize = 10 + var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10) + switch(chaosselect) + if(1) + reagents.add_reagent("nutriment", 3) + if(2) + reagents.add_reagent("capsaicin", 3) + if(3) + reagents.add_reagent("frostoil", 3) + if(4) + reagents.add_reagent("sprinkles", 3) + if(5) + reagents.add_reagent("phoron", 3) + if(6) + reagents.add_reagent("coco", 3) + if(7) + reagents.add_reagent("slimejelly", 3) + if(8) + reagents.add_reagent("banana", 3) + if(9) + reagents.add_reagent("berryjuice", 3) + if(10) + reagents.add_reagent("tricordrazine", 3) + if(prob(30)) + src.icon_state = "donut2" + src.overlay_state = "box-donut2" + src.name = "Frosted Chaos Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/jelly name = "Jelly Donut" @@ -421,17 +421,17 @@ filling_color = "#ED1169" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("berryjuice", 5) - bitesize = 5 - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) +/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("berryjuice", 5) + bitesize = 5 + if(prob(30)) + src.icon_state = "jdonut2" + src.overlay_state = "box-donut2" + src.name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly name = "Jelly Donut" @@ -440,17 +440,17 @@ filling_color = "#ED1169" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("slimejelly", 5) - bitesize = 5 - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) +/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("slimejelly", 5) + bitesize = 5 + if(prob(30)) + src.icon_state = "jdonut2" + src.overlay_state = "box-donut2" + src.name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly name = "Jelly Donut" @@ -459,17 +459,17 @@ filling_color = "#ED1169" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("cherryjelly", 5) - bitesize = 5 - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) +/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("cherryjelly", 5) + bitesize = 5 + if(prob(30)) + src.icon_state = "jdonut2" + src.overlay_state = "box-donut2" + src.name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/egg name = "egg" @@ -545,12 +545,12 @@ filling_color = "#FFDF78" center_of_mass = list("x"=16, "y"=14) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/friedegg/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("blackpepper", 1) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/boiledegg name = "Boiled egg" @@ -558,9 +558,9 @@ icon_state = "egg" filling_color = "#FFFFFF" - New() - ..() - reagents.add_reagent("protein", 2) +/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New() + ..() + reagents.add_reagent("protein", 2) /obj/item/weapon/reagent_containers/food/snacks/organ name = "organ" @@ -570,11 +570,11 @@ filling_color = "#E00D34" center_of_mass = list("x"=16, "y"=16) - New() - ..() - reagents.add_reagent("protein", rand(3,5)) - reagents.add_reagent("toxin", rand(1,3)) - src.bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/organ/New() + ..() + reagents.add_reagent("protein", rand(3,5)) + reagents.add_reagent("toxin", rand(1,3)) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/tofu name = "Tofu" @@ -583,10 +583,10 @@ filling_color = "#FFFEE0" center_of_mass = list("x"=17, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/tofu/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/tofurkey name = "Tofurkey" @@ -595,11 +595,11 @@ filling_color = "#FFFEE0" center_of_mass = list("x"=16, "y"=8) - New() - ..() - reagents.add_reagent("nutriment", 12) - reagents.add_reagent("stoxin", 3) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/tofurkey/New() + ..() + reagents.add_reagent("nutriment", 12) + reagents.add_reagent("stoxin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/stuffing name = "Stuffing" @@ -608,10 +608,10 @@ filling_color = "#C9AC83" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/stuffing/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/carpmeat name = "carp fillet" @@ -620,11 +620,11 @@ filling_color = "#FFDEFE" center_of_mass = list("x"=17, "y"=13) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("carpotoxin", 3) - src.bitesize = 6 +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("carpotoxin", 3) + src.bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/fishfingers name = "Fish Fingers" @@ -633,11 +633,11 @@ filling_color = "#FFDEFE" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("protein", 4) - reagents.add_reagent("carpotoxin", 3) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New() + ..() + reagents.add_reagent("protein", 4) + reagents.add_reagent("carpotoxin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice name = "huge mushroom slice" @@ -646,11 +646,11 @@ filling_color = "#E0D7C5" center_of_mass = list("x"=17, "y"=16) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("psilocybin", 3) - src.bitesize = 6 +/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("psilocybin", 3) + src.bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/tomatomeat name = "tomato slice" @@ -659,10 +659,10 @@ filling_color = "#DB0000" center_of_mass = list("x"=17, "y"=16) - New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 6 +/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/bearmeat name = "bear meat" @@ -671,11 +671,11 @@ filling_color = "#DB0000" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("protein", 12) - reagents.add_reagent("hyperzine", 5) - src.bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New() + ..() + reagents.add_reagent("protein", 12) + reagents.add_reagent("hyperzine", 5) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" @@ -684,11 +684,11 @@ filling_color = "#43DE18" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("protein", 6) - reagents.add_reagent("pacid",6) - src.bitesize = 6 +/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New() + ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("pacid",6) + src.bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/meatball name = "meatball" @@ -697,10 +697,10 @@ filling_color = "#DB0000" center_of_mass = list("x"=16, "y"=16) - New() - ..() - reagents.add_reagent("protein", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/meatball/New() + ..() + reagents.add_reagent("protein", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sausage name = "Sausage" @@ -709,10 +709,44 @@ filling_color = "#DB0000" center_of_mass = list("x"=16, "y"=16) - New() - ..() - reagents.add_reagent("protein", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sausage/New() + ..() + reagents.add_reagent("protein", 6) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket + name = "Donk-pocket" + desc = "The food of choice for the seasoned traitor." + icon_state = "donkpocket" + filling_color = "#DEDEAB" + center_of_mass = list("x"=16, "y"=10) + var/warm + var/list/heated_reagents + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("protein", 2) + + warm = 0 + heated_reagents = list("tricordrazine" = 5) + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/heat() + warm = 1 + for(var/reagent in heated_reagents) + reagents.add_reagent(reagent, heated_reagents[reagent]) + bitesize = 6 + name = "Warm " + name + cooltime() + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime() + if (src.warm) + spawn(4200) + src.warm = 0 + for(var/reagent in heated_reagents) + src.reagents.del_reagent(reagent) + src.name = initial(name) + return /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket name = "\improper Sin-pocket" @@ -731,37 +765,6 @@ user << "You think \the [src] is ready to eat about now." heat() -/obj/item/weapon/reagent_containers/food/snacks/donkpocket - name = "Donk-pocket" - desc = "The food of choice for the seasoned traitor." - icon_state = "donkpocket" - filling_color = "#DEDEAB" - center_of_mass = list("x"=16, "y"=10) - - New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("protein", 2) - - var/warm = 0 - var/list/heated_reagents = list("tricordrazine" = 5) - proc/heat() - warm = 1 - for(var/reagent in heated_reagents) - reagents.add_reagent(reagent, heated_reagents[reagent]) - bitesize = 6 - name = "Warm " + name - cooltime() - - proc/cooltime() - if (src.warm) - spawn(4200) - src.warm = 0 - for(var/reagent in heated_reagents) - src.reagents.del_reagent(reagent) - src.name = initial(name) - return - /obj/item/weapon/reagent_containers/food/snacks/brainburger name = "brainburger" desc = "A strange looking burger. It looks almost sentient." @@ -769,11 +772,11 @@ filling_color = "#F2B6EA" center_of_mass = list("x"=15, "y"=11) - New() - ..() - reagents.add_reagent("protein", 6) - reagents.add_reagent("alkysine", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/brainburger/New() + ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("alkysine", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/ghostburger name = "Ghost Burger" @@ -782,11 +785,10 @@ filling_color = "#FFF2FF" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 2 - +/obj/item/weapon/reagent_containers/food/snacks/ghostburger/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/human var/hname = "" @@ -798,10 +800,11 @@ desc = "A bloody burger." icon_state = "hburger" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("protein", 6) - bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/human/burger/New() + ..() + reagents.add_reagent("protein", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheeseburger name = "cheeseburger" @@ -809,10 +812,10 @@ icon_state = "cheeseburger" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("protein", 2) - reagents.add_reagent("nutriment", 2) +/obj/item/weapon/reagent_containers/food/snacks/cheeseburger/New() + ..() + reagents.add_reagent("protein", 2) + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/monkeyburger name = "burger" @@ -821,11 +824,11 @@ filling_color = "#D63C3C" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("nutriment", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/monkeyburger/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/fishburger name = "Fillet -o- Carp Sandwich" @@ -834,11 +837,11 @@ filling_color = "#FFDEFE" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("protein", 6) - reagents.add_reagent("carpotoxin", 3) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/fishburger/New() + ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("carpotoxin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/tofuburger name = "Tofu Burger" @@ -847,10 +850,10 @@ filling_color = "#FFFEE0" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/tofuburger/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/roburger name = "roburger" @@ -859,10 +862,10 @@ filling_color = "#CCCCCC" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/roburger/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/roburgerbig name = "roburger" @@ -872,9 +875,9 @@ volume = 100 center_of_mass = list("x"=16, "y"=11) - New() - ..() - bitesize = 0.1 +/obj/item/weapon/reagent_containers/food/snacks/roburgerbig/New() + ..() + bitesize = 0.1 /obj/item/weapon/reagent_containers/food/snacks/xenoburger name = "xenoburger" @@ -883,10 +886,10 @@ filling_color = "#43DE18" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("protein", 8) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/xenoburger/New() + ..() + reagents.add_reagent("protein", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/clownburger name = "Clown Burger" @@ -895,10 +898,10 @@ filling_color = "#FF00FF" center_of_mass = list("x"=17, "y"=12) - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/clownburger/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/mimeburger name = "Mime Burger" @@ -907,10 +910,10 @@ filling_color = "#FFFFFF" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/mimeburger/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/omelette name = "Omelette Du Fromage" @@ -920,11 +923,10 @@ filling_color = "#FFF9A8" center_of_mass = list("x"=16, "y"=13) - //var/herp = 0 - New() - ..() - reagents.add_reagent("protein", 8) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/omelette/New() + ..() + reagents.add_reagent("protein", 8) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/muffin name = "Muffin" @@ -933,10 +935,10 @@ filling_color = "#E0CF9B" center_of_mass = list("x"=17, "y"=4) - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/muffin/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/pie name = "Banana Cream Pie" @@ -965,11 +967,11 @@ trash = /obj/item/trash/plate center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("berryjuice", 5) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("berryjuice", 5) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/waffles name = "waffles" @@ -979,10 +981,10 @@ filling_color = "#E6DEB5" center_of_mass = list("x"=15, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/waffles/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/eggplantparm name = "Eggplant Parmigiana" @@ -992,10 +994,10 @@ filling_color = "#4D2F5E" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/eggplantparm/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soylentgreen name = "Soylent Green" @@ -1005,10 +1007,10 @@ filling_color = "#B8E6B5" center_of_mass = list("x"=15, "y"=11) - New() - ..() - reagents.add_reagent("protein", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New() + ..() + reagents.add_reagent("protein", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soylenviridians name = "Soylen Virdians" @@ -1018,11 +1020,10 @@ filling_color = "#E6FA61" center_of_mass = list("x"=15, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 - +/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatpie name = "Meat-pie" @@ -1032,10 +1033,10 @@ filling_color = "#948051" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("protein", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/meatpie/New() + ..() + reagents.add_reagent("protein", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofupie name = "Tofu-pie" @@ -1045,10 +1046,10 @@ filling_color = "#FFFEE0" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/tofupie/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/amanita_pie name = "amanita pie" @@ -1057,12 +1058,12 @@ filling_color = "#FFCCCC" center_of_mass = list("x"=17, "y"=9) - New() - ..() - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("amatoxin", 3) - reagents.add_reagent("psilocybin", 1) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/amanita_pie/New() + ..() + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("amatoxin", 3) + reagents.add_reagent("psilocybin", 1) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/plump_pie name = "plump pie" @@ -1071,17 +1072,17 @@ filling_color = "#B8279B" center_of_mass = list("x"=17, "y"=9) - New() - ..() - if(prob(10)) - name = "exceptional plump pie" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("tricordrazine", 5) - bitesize = 2 - else - reagents.add_reagent("nutriment", 8) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/plump_pie/New() + ..() + if(prob(10)) + name = "exceptional plump pie" + desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("tricordrazine", 5) + bitesize = 2 + else + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/xemeatpie name = "Xeno-pie" @@ -1091,10 +1092,10 @@ filling_color = "#43DE18" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("protein", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/xemeatpie/New() + ..() + reagents.add_reagent("protein", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/wingfangchu name = "Wing Fang Chu" @@ -1104,11 +1105,10 @@ filling_color = "#43DE18" center_of_mass = list("x"=17, "y"=9) - New() - ..() - reagents.add_reagent("protein", 6) - bitesize = 2 - +/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New() + ..() + reagents.add_reagent("protein", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/human/kabob name = "-kabob" @@ -1118,10 +1118,10 @@ filling_color = "#A85340" center_of_mass = list("x"=17, "y"=15) - New() - ..() - reagents.add_reagent("protein", 8) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/human/kabob/New() + ..() + reagents.add_reagent("protein", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/monkeykabob name = "Meat-kabob" @@ -1131,10 +1131,10 @@ filling_color = "#A85340" center_of_mass = list("x"=17, "y"=15) - New() - ..() - reagents.add_reagent("protein", 8) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/monkeykabob/New() + ..() + reagents.add_reagent("protein", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofukabob name = "Tofu-kabob" @@ -1144,10 +1144,10 @@ filling_color = "#FFFEE0" center_of_mass = list("x"=17, "y"=15) - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/tofukabob/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cubancarp name = "Cuban Carp" @@ -1157,13 +1157,13 @@ filling_color = "#E9ADFF" center_of_mass = list("x"=12, "y"=5) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("carpotoxin", 3) - reagents.add_reagent("capsaicin", 3) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("carpotoxin", 3) + reagents.add_reagent("capsaicin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/popcorn name = "Popcorn" @@ -1174,17 +1174,17 @@ filling_color = "#FFFAD4" center_of_mass = list("x"=16, "y"=8) - New() - ..() - unpopped = rand(1,10) - reagents.add_reagent("nutriment", 2) - bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 - On_Consume() - if(prob(unpopped)) //lol ...what's the point? - usr << "\red You bite down on an un-popped kernel!" - unpopped = max(0, unpopped-1) - ..() +/obj/item/weapon/reagent_containers/food/snacks/popcorn/New() + ..() + unpopped = rand(1,10) + reagents.add_reagent("nutriment", 2) + bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 +/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume() + if(prob(unpopped)) //lol ...what's the point? + usr << "\red You bite down on an un-popped kernel!" + unpopped = max(0, unpopped-1) + ..() /obj/item/weapon/reagent_containers/food/snacks/sosjerky name = "Scaredy's Private Reserve Beef Jerky" @@ -1194,7 +1194,7 @@ filling_color = "#631212" center_of_mass = list("x"=15, "y"=9) - New() +/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New() ..() reagents.add_reagent("protein", 4) bitesize = 2 @@ -1207,9 +1207,9 @@ filling_color = "#343834" center_of_mass = list("x"=15, "y"=4) - New() - ..() - reagents.add_reagent("nutriment", 6) +/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New() + ..() + reagents.add_reagent("nutriment", 6) /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie name = "Space Twinkie" @@ -1218,10 +1218,10 @@ filling_color = "#FFE591" center_of_mass = list("x"=15, "y"=11) - New() - ..() - reagents.add_reagent("sugar", 4) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New() + ..() + reagents.add_reagent("sugar", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers name = "Cheesie Honkers" @@ -1231,10 +1231,10 @@ filling_color = "#FFA305" center_of_mass = list("x"=15, "y"=9) - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/syndicake name = "Syndi-Cakes" @@ -1244,11 +1244,12 @@ center_of_mass = list("x"=16, "y"=10) trash = /obj/item/trash/syndi_cakes - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("doctorsdelight", 5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/syndicake/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("doctorsdelight", 5) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato name = "Loaded Baked Potato" @@ -1257,11 +1258,11 @@ filling_color = "#9C7A68" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("protein", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("protein", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/fries name = "Space Fries" @@ -1271,10 +1272,10 @@ filling_color = "#EDDD00" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/fries/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/soydope name = "Soy Dope" @@ -1284,10 +1285,10 @@ filling_color = "#C4BF76" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/soydope/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spagetti name = "Spaghetti" @@ -1296,10 +1297,10 @@ filling_color = "#EDDD00" center_of_mass = list("x"=16, "y"=16) - New() - ..() - reagents.add_reagent("nutriment", 1) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/spagetti/New() + ..() + reagents.add_reagent("nutriment", 1) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/cheesyfries name = "Cheesy Fries" @@ -1309,11 +1310,11 @@ filling_color = "#EDDD00" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("protein", 2) - reagents.add_reagent("nutriment", 4) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New() + ..() + reagents.add_reagent("protein", 2) + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/fortunecookie name = "Fortune cookie" @@ -1322,10 +1323,10 @@ filling_color = "#E8E79E" center_of_mass = list("x"=15, "y"=14) - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/badrecipe name = "Burned mess" @@ -1334,11 +1335,11 @@ filling_color = "#211F02" center_of_mass = list("x"=16, "y"=12) - New() - ..() - reagents.add_reagent("toxin", 1) - reagents.add_reagent("carbon", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New() + ..() + reagents.add_reagent("toxin", 1) + reagents.add_reagent("carbon", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatsteak name = "Meat steak" @@ -1348,12 +1349,12 @@ filling_color = "#7A3D11" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("protein", 4) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New() + ..() + reagents.add_reagent("protein", 4) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("blackpepper", 1) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff name = "Spacy Liberty Duff" @@ -1363,11 +1364,11 @@ filling_color = "#42B873" center_of_mass = list("x"=16, "y"=8) - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("psilocybin", 6) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("psilocybin", 6) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/amanitajelly name = "Amanita Jelly" @@ -1377,12 +1378,12 @@ filling_color = "#ED0758" center_of_mass = list("x"=16, "y"=5) - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("amatoxin", 6) - reagents.add_reagent("psilocybin", 3) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("amatoxin", 6) + reagents.add_reagent("psilocybin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/poppypretzel name = "Poppy pretzel" @@ -1392,11 +1393,10 @@ filling_color = "#916E36" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 2 - +/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatballsoup name = "Meatball soup" @@ -1406,11 +1406,11 @@ filling_color = "#785210" center_of_mass = list("x"=16, "y"=8) - New() - ..() - reagents.add_reagent("protein", 8) - reagents.add_reagent("water", 5) - bitesize = 5 +/obj/item/weapon/reagent_containers/food/snacks/meatballsoup/New() + ..() + reagents.add_reagent("protein", 8) + reagents.add_reagent("water", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/slimesoup name = "slime soup" @@ -1418,11 +1418,11 @@ icon_state = "slimesoup" //nonexistant? filling_color = "#C4DBA0" - New() - ..() - reagents.add_reagent("slimejelly", 5) - reagents.add_reagent("water", 10) - bitesize = 5 +/obj/item/weapon/reagent_containers/food/snacks/slimesoup/New() + ..() + reagents.add_reagent("slimejelly", 5) + reagents.add_reagent("water", 10) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/bloodsoup name = "Tomato soup" @@ -1431,12 +1431,12 @@ filling_color = "#FF0000" center_of_mass = list("x"=16, "y"=7) - New() - ..() - reagents.add_reagent("protein", 2) - reagents.add_reagent("blood", 10) - reagents.add_reagent("water", 5) - bitesize = 5 +/obj/item/weapon/reagent_containers/food/snacks/bloodsoup/New() + ..() + reagents.add_reagent("protein", 2) + reagents.add_reagent("blood", 10) + reagents.add_reagent("water", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/clownstears name = "Clown's Tears" @@ -1445,12 +1445,12 @@ filling_color = "#C4FBFF" center_of_mass = list("x"=16, "y"=7) - New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("banana", 5) - reagents.add_reagent("water", 10) - bitesize = 5 +/obj/item/weapon/reagent_containers/food/snacks/clownstears/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("banana", 5) + reagents.add_reagent("water", 10) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/vegetablesoup name = "Vegetable soup" @@ -1460,11 +1460,11 @@ filling_color = "#AFC4B5" center_of_mass = list("x"=16, "y"=8) - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) - bitesize = 5 +/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("water", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/nettlesoup name = "Nettle soup" @@ -1474,12 +1474,12 @@ filling_color = "#AFC4B5" center_of_mass = list("x"=16, "y"=7) - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) - reagents.add_reagent("tricordrazine", 5) - bitesize = 5 +/obj/item/weapon/reagent_containers/food/snacks/nettlesoup/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("water", 5) + reagents.add_reagent("tricordrazine", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/mysterysoup name = "Mystery soup" @@ -1489,45 +1489,45 @@ filling_color = "#F082FF" center_of_mass = list("x"=16, "y"=6) - New() - ..() - var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10) - switch(mysteryselect) - if(1) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("capsaicin", 3) - reagents.add_reagent("tomatojuice", 2) - if(2) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("frostoil", 3) - reagents.add_reagent("tomatojuice", 2) - if(3) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("water", 5) - reagents.add_reagent("tricordrazine", 5) - if(4) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("water", 10) - if(5) - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("banana", 10) - if(6) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("blood", 10) - if(7) - reagents.add_reagent("slimejelly", 10) - reagents.add_reagent("water", 10) - if(8) - reagents.add_reagent("carbon", 10) - reagents.add_reagent("toxin", 10) - if(9) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("tomatojuice", 10) - if(10) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("tomatojuice", 5) - reagents.add_reagent("imidazoline", 5) - bitesize = 5 +/obj/item/weapon/reagent_containers/food/snacks/mysterysoup/New() + ..() + var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10) + switch(mysteryselect) + if(1) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("capsaicin", 3) + reagents.add_reagent("tomatojuice", 2) + if(2) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("frostoil", 3) + reagents.add_reagent("tomatojuice", 2) + if(3) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("water", 5) + reagents.add_reagent("tricordrazine", 5) + if(4) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("water", 10) + if(5) + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("banana", 10) + if(6) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("blood", 10) + if(7) + reagents.add_reagent("slimejelly", 10) + reagents.add_reagent("water", 10) + if(8) + reagents.add_reagent("carbon", 10) + reagents.add_reagent("toxin", 10) + if(9) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("tomatojuice", 10) + if(10) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("tomatojuice", 5) + reagents.add_reagent("imidazoline", 5) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/wishsoup name = "Wish Soup" @@ -1537,13 +1537,13 @@ filling_color = "#D1F4FF" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("water", 10) - bitesize = 5 - if(prob(25)) - src.desc = "A wish come true!" - reagents.add_reagent("nutriment", 8) +/obj/item/weapon/reagent_containers/food/snacks/wishsoup/New() + ..() + reagents.add_reagent("water", 10) + bitesize = 5 + if(prob(25)) + src.desc = "A wish come true!" + reagents.add_reagent("nutriment", 8) /obj/item/weapon/reagent_containers/food/snacks/hotchili name = "Hot Chili" @@ -1553,14 +1553,13 @@ filling_color = "#FF3C00" center_of_mass = list("x"=15, "y"=9) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("capsaicin", 3) - reagents.add_reagent("tomatojuice", 2) - bitesize = 5 - +/obj/item/weapon/reagent_containers/food/snacks/hotchili/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("capsaicin", 3) + reagents.add_reagent("tomatojuice", 2) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/coldchili name = "Cold Chili" @@ -1570,33 +1569,14 @@ center_of_mass = list("x"=15, "y"=9) trash = /obj/item/trash/snack_bowl - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("frostoil", 3) - reagents.add_reagent("tomatojuice", 2) - bitesize = 5 -/* No more of this -/obj/item/weapon/reagent_containers/food/snacks/telebacon - name = "Tele Bacon" - desc = "It tastes a little odd but it is still delicious." - icon_state = "bacon" - var/obj/item/device/radio/beacon/bacon/baconbeacon - bitesize = 2 - center_of_mass = list("x"=18, "y"=13) - - New() - ..() - reagents.add_reagent("nutriment", 4) - baconbeacon = new /obj/item/device/radio/beacon/bacon(src) - - On_Consume() - if(!reagents.total_volume) - baconbeacon.loc = usr - baconbeacon.digest_delay() -*/ +/obj/item/weapon/reagent_containers/food/snacks/coldchili/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("frostoil", 3) + reagents.add_reagent("tomatojuice", 2) + bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/monkeycube name = "monkey cube" @@ -1610,33 +1590,33 @@ var/wrapped = 0 var/monkey_type = "Monkey" - New() - ..() - reagents.add_reagent("protein", 10) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New() + ..() + reagents.add_reagent("protein", 10) - attack_self(mob/user as mob) - if(wrapped) - Unwrap(user) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) - proc/Expand() - src.visible_message("\The [src] expands!") - var/mob/living/carbon/human/H = new(get_turf(src)) - H.set_species(monkey_type) - H.real_name = H.species.get_random_name() - H.name = H.real_name - if(ismob(loc)) - var/mob/M = loc - M.unEquip(src) - qdel(src) - return 1 +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() + src.visible_message("\The [src] expands!") + var/mob/living/carbon/human/H = new(get_turf(src)) + H.set_species(monkey_type) + H.real_name = H.species.get_random_name() + H.name = H.real_name + if(ismob(loc)) + var/mob/M = loc + M.unEquip(src) + qdel(src) + return 1 - proc/Unwrap(mob/user as mob) - icon_state = "monkeycube" - desc = "Just add water!" - user << "You unwrap the cube." - wrapped = 0 - flags |= OPENCONTAINER - return +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + flags |= OPENCONTAINER + return /obj/item/weapon/reagent_containers/food/snacks/monkeycube/on_reagent_change() if(reagents.has_reagent("water")) @@ -1672,17 +1652,16 @@ name = "neaera cube" monkey_type = "Neaera" - /obj/item/weapon/reagent_containers/food/snacks/spellburger name = "Spell Burger" desc = "This is absolutely Ei Nath." icon_state = "spellburger" filling_color = "#D505FF" - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/spellburger/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger name = "Big Bite Burger" @@ -1691,11 +1670,11 @@ filling_color = "#E3D681" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("protein", 10) - reagents.add_reagent("nutriment", 4) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger/New() + ..() + reagents.add_reagent("protein", 10) + reagents.add_reagent("nutriment", 4) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/enchiladas name = "Enchiladas" @@ -1705,12 +1684,12 @@ filling_color = "#A36A1F" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("protein", 6) - reagents.add_reagent("nutriment",2) - reagents.add_reagent("capsaicin", 6) - bitesize = 4 +/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New() + ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("nutriment",2) + reagents.add_reagent("capsaicin", 6) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight name = "monkey's Delight" @@ -1720,13 +1699,13 @@ filling_color = "#5C3C11" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("protein", 10) - reagents.add_reagent("banana", 5) - reagents.add_reagent("blackpepper", 1) - reagents.add_reagent("sodiumchloride", 1) - bitesize = 6 +/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight/New() + ..() + reagents.add_reagent("protein", 10) + reagents.add_reagent("banana", 5) + reagents.add_reagent("blackpepper", 1) + reagents.add_reagent("sodiumchloride", 1) + bitesize = 6 /obj/item/weapon/reagent_containers/food/snacks/baguette name = "Baguette" @@ -1735,12 +1714,12 @@ filling_color = "#E3D796" center_of_mass = list("x"=18, "y"=12) - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("blackpepper", 1) - reagents.add_reagent("sodiumchloride", 1) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/baguette/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("blackpepper", 1) + reagents.add_reagent("sodiumchloride", 1) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/fishandchips name = "Fish and Chips" @@ -1749,12 +1728,12 @@ filling_color = "#E3D796" center_of_mass = list("x"=16, "y"=16) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("carpotoxin", 3) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("carpotoxin", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/sandwich name = "Sandwich" @@ -1764,11 +1743,11 @@ filling_color = "#D9BE29" center_of_mass = list("x"=16, "y"=4) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("nutriment", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sandwich/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich name = "Toasted Sandwich" @@ -1778,12 +1757,12 @@ filling_color = "#D9BE29" center_of_mass = list("x"=16, "y"=4) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("carbon", 2) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("carbon", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/grilledcheese name = "Grilled Cheese Sandwich" @@ -1792,11 +1771,11 @@ trash = /obj/item/trash/plate filling_color = "#D9BE29" - New() - ..() - reagents.add_reagent("protein", 4) - reagents.add_reagent("nutriment", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/grilledcheese/New() + ..() + reagents.add_reagent("protein", 4) + reagents.add_reagent("nutriment", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tomatosoup name = "Tomato Soup" @@ -1806,11 +1785,11 @@ filling_color = "#D92929" center_of_mass = list("x"=16, "y"=7) - New() - ..() - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("tomatojuice", 10) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/tomatosoup/New() + ..() + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("tomatojuice", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles name = "Roffle Waffles" @@ -1820,11 +1799,11 @@ filling_color = "#FF00F7" center_of_mass = list("x"=15, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("psilocybin", 8) - bitesize = 4 +/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("psilocybin", 8) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/stew name = "Stew" @@ -1833,14 +1812,14 @@ filling_color = "#9E673A" center_of_mass = list("x"=16, "y"=5) - New() - ..() - reagents.add_reagent("protein", 4) - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("tomatojuice", 5) - reagents.add_reagent("imidazoline", 5) - reagents.add_reagent("water", 5) - bitesize = 10 +/obj/item/weapon/reagent_containers/food/snacks/stew/New() + ..() + reagents.add_reagent("protein", 4) + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("tomatojuice", 5) + reagents.add_reagent("imidazoline", 5) + reagents.add_reagent("water", 5) + bitesize = 10 /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast name = "Jellied Toast" @@ -1850,20 +1829,18 @@ filling_color = "#B572AB" center_of_mass = list("x"=16, "y"=8) - New() - ..() - reagents.add_reagent("nutriment", 1) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/New() + ..() + reagents.add_reagent("nutriment", 1) + bitesize = 3 -/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry/New() + ..() + reagents.add_reagent("cherryjelly", 5) -/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime/New() + ..() + reagents.add_reagent("slimejelly", 5) /obj/item/weapon/reagent_containers/food/snacks/jellyburger name = "Jelly Burger" @@ -1872,20 +1849,18 @@ filling_color = "#B572AB" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/jellyburger/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 2 -/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime/New() + ..() + reagents.add_reagent("slimejelly", 5) -/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry/New() + ..() + reagents.add_reagent("cherryjelly", 5) /obj/item/weapon/reagent_containers/food/snacks/milosoup name = "Milosoup" @@ -1894,11 +1869,11 @@ trash = /obj/item/trash/snack_bowl center_of_mass = list("x"=16, "y"=7) - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("water", 5) - bitesize = 4 +/obj/item/weapon/reagent_containers/food/snacks/milosoup/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("water", 5) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat name = "Stewed Soy Meat" @@ -1907,10 +1882,10 @@ trash = /obj/item/trash/plate center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/boiledspagetti name = "Boiled Spaghetti" @@ -1920,10 +1895,10 @@ filling_color = "#FCEE81" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/boiledrice name = "Boiled Rice" @@ -1933,10 +1908,10 @@ filling_color = "#FFFBDB" center_of_mass = list("x"=17, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/boiledrice/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/ricepudding name = "Rice Pudding" @@ -1946,10 +1921,10 @@ filling_color = "#FFFBDB" center_of_mass = list("x"=17, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/ricepudding/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/pastatomato name = "Spaghetti" @@ -1959,11 +1934,11 @@ filling_color = "#DE4545" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("tomatojuice", 10) - bitesize = 4 +/obj/item/weapon/reagent_containers/food/snacks/pastatomato/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("tomatojuice", 10) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/meatballspagetti name = "Spaghetti & Meatballs" @@ -1973,11 +1948,11 @@ filling_color = "#DE4545" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("protein", 4) - reagents.add_reagent("nutriment", 4) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti/New() + ..() + reagents.add_reagent("protein", 4) + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spesslaw name = "Spesslaw" @@ -1986,11 +1961,11 @@ filling_color = "#DE4545" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("protein", 4) - reagents.add_reagent("nutriment", 4) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/spesslaw/New() + ..() + reagents.add_reagent("protein", 4) + reagents.add_reagent("nutriment", 4) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/carrotfries name = "Carrot Fries" @@ -2000,11 +1975,11 @@ filling_color = "#FAA005" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("imidazoline", 3) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("imidazoline", 3) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/superbiteburger name = "Super Bite Burger" @@ -2013,11 +1988,11 @@ filling_color = "#CCA26A" center_of_mass = list("x"=16, "y"=3) - New() - ..() - reagents.add_reagent("protein", 25) - reagents.add_reagent("nutriment", 25) - bitesize = 10 +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger/New() + ..() + reagents.add_reagent("protein", 25) + reagents.add_reagent("nutriment", 25) + bitesize = 10 /obj/item/weapon/reagent_containers/food/snacks/candiedapple name = "Candied Apple" @@ -2026,10 +2001,10 @@ filling_color = "#F21873" center_of_mass = list("x"=15, "y"=13) - New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/applepie name = "Apple Pie" @@ -2038,11 +2013,10 @@ filling_color = "#E0EDC5" center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 3 - +/obj/item/weapon/reagent_containers/food/snacks/applepie/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/cherrypie name = "Cherry Pie" @@ -2051,10 +2025,10 @@ filling_color = "#FF525A" center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/cherrypie/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/twobread name = "Two Bread" @@ -2063,10 +2037,10 @@ filling_color = "#DBCC9A" center_of_mass = list("x"=15, "y"=12) - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/twobread/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/jellysandwich name = "Jelly Sandwich" @@ -2076,29 +2050,28 @@ filling_color = "#9E3A78" center_of_mass = list("x"=16, "y"=8) - New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 3 -/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime - New() - ..() - reagents.add_reagent("slimejelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime/New() + ..() + reagents.add_reagent("slimejelly", 5) -/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry - New() - ..() - reagents.add_reagent("cherryjelly", 5) +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry/New() + ..() + reagents.add_reagent("cherryjelly", 5) /obj/item/weapon/reagent_containers/food/snacks/boiledslimecore name = "Boiled slime Core" desc = "A boiled red thing." icon_state = "boiledslimecore" //nonexistant? - New() - ..() - reagents.add_reagent("slimejelly", 5) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New() + ..() + reagents.add_reagent("slimejelly", 5) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/mint name = "mint" @@ -2107,10 +2080,10 @@ filling_color = "#F2F2F2" center_of_mass = list("x"=16, "y"=14) - New() - ..() - reagents.add_reagent("mint", 1) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/mint/New() + ..() + reagents.add_reagent("mint", 1) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup name = "chantrelle soup" @@ -2120,10 +2093,10 @@ filling_color = "#E386BF" center_of_mass = list("x"=17, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit name = "plump helmet biscuit" @@ -2132,17 +2105,17 @@ filling_color = "#CFB4C4" center_of_mass = list("x"=16, "y"=13) - New() - ..() - if(prob(10)) - name = "exceptional plump helmet biscuit" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("tricordrazine", 5) - bitesize = 2 - else - reagents.add_reagent("nutriment", 5) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New() + ..() + if(prob(10)) + name = "exceptional plump helmet biscuit" + desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("tricordrazine", 5) + bitesize = 2 + else + reagents.add_reagent("nutriment", 5) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chawanmushi name = "chawanmushi" @@ -2152,10 +2125,10 @@ filling_color = "#F0F2E4" center_of_mass = list("x"=17, "y"=10) - New() - ..() - reagents.add_reagent("protein", 5) - bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New() + ..() + reagents.add_reagent("protein", 5) + bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/beetsoup name = "beet soup" @@ -2165,11 +2138,11 @@ filling_color = "#FAC9FF" center_of_mass = list("x"=15, "y"=8) - New() - ..() - name = pick(list("borsch","bortsch","borstch","borsh","borshch","borscht")) - reagents.add_reagent("nutriment", 8) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/beetsoup/New() + ..() + name = pick(list("borsch","bortsch","borstch","borsh","borshch","borscht")) + reagents.add_reagent("nutriment", 8) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tossedsalad name = "tossed salad" @@ -2178,10 +2151,11 @@ trash = /obj/item/trash/snack_bowl filling_color = "#76B87F" center_of_mass = list("x"=17, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/tossedsalad/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/validsalad name = "valid salad" @@ -2191,11 +2165,11 @@ filling_color = "#76B87F" center_of_mass = list("x"=17, "y"=11) - New() - ..() - reagents.add_reagent("protein", 2) - reagents.add_reagent("nutriment", 6) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/validsalad/New() + ..() + reagents.add_reagent("protein", 2) + reagents.add_reagent("nutriment", 6) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/appletart name = "golden apple streusel tart" @@ -2205,11 +2179,11 @@ filling_color = "#FFFF00" center_of_mass = list("x"=16, "y"=18) - New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("gold", 5) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/appletart/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("gold", 5) + bitesize = 3 /////////////////////////////////////////////////Sliceable//////////////////////////////////////// // All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels @@ -2228,11 +2202,11 @@ filling_color = "#FF7575" center_of_mass = list("x"=16, "y"=9) - New() - ..() - reagents.add_reagent("protein", 20) - reagents.add_reagent("nutriment", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread/New() + ..() + reagents.add_reagent("protein", 20) + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice name = "meatbread slice" @@ -2242,7 +2216,7 @@ filling_color = "#FF7575" bitesize = 2 center_of_mass = list("x"=16, "y"=13) - + /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice/New() ..() if(!(reagents.total_volume)) @@ -2258,11 +2232,11 @@ filling_color = "#8AFF75" center_of_mass = list("x"=16, "y"=9) - New() - ..() - reagents.add_reagent("protein", 20) - reagents.add_reagent("nutriment", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread/New() + ..() + reagents.add_reagent("protein", 20) + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice name = "xenomeatbread slice" @@ -2272,7 +2246,7 @@ filling_color = "#8AFF75" bitesize = 2 center_of_mass = list("x"=16, "y"=13) - + /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice/New() ..() if(!(reagents.total_volume)) @@ -2288,11 +2262,11 @@ filling_color = "#EDE5AD" center_of_mass = list("x"=16, "y"=9) - New() - ..() - reagents.add_reagent("banana", 20) - reagents.add_reagent("nutriment", 20) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread/New() + ..() + reagents.add_reagent("banana", 20) + reagents.add_reagent("nutriment", 20) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice name = "Banana-nut bread slice" @@ -2302,7 +2276,7 @@ filling_color = "#EDE5AD" bitesize = 2 center_of_mass = list("x"=16, "y"=8) - + /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice/New() ..() if(!(reagents.total_volume)) @@ -2318,10 +2292,10 @@ filling_color = "#F7FFE0" center_of_mass = list("x"=16, "y"=9) - New() - ..() - reagents.add_reagent("nutriment", 30) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread/New() + ..() + reagents.add_reagent("nutriment", 30) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice name = "Tofubread slice" @@ -2331,7 +2305,7 @@ filling_color = "#F7FFE0" bitesize = 2 center_of_mass = list("x"=16, "y"=13) - + /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice/New() ..() if(!(reagents.total_volume)) @@ -2347,11 +2321,11 @@ filling_color = "#FFD675" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 25) - reagents.add_reagent("imidazoline", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake/New() + ..() + reagents.add_reagent("nutriment", 25) + reagents.add_reagent("imidazoline", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice name = "Carrot Cake slice" @@ -2361,7 +2335,7 @@ filling_color = "#FFD675" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/New() ..() if(!(reagents.total_volume)) @@ -2377,12 +2351,12 @@ filling_color = "#E6AEDB" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("protein", 25) - reagents.add_reagent("nutriment", 5) - reagents.add_reagent("alkysine", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake/New() + ..() + reagents.add_reagent("protein", 25) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("alkysine", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/braincakeslice name = "Brain Cake slice" @@ -2392,7 +2366,7 @@ filling_color = "#E6AEDB" bitesize = 2 center_of_mass = list("x"=16, "y"=12) - + /obj/item/weapon/reagent_containers/food/snacks/braincakeslice/New() ..() if(!(reagents.total_volume)) @@ -2409,11 +2383,11 @@ filling_color = "#FAF7AF" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("protein", 15) - reagents.add_reagent("nutriment", 10) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake/New() + ..() + reagents.add_reagent("protein", 15) + reagents.add_reagent("nutriment", 10) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice name = "Cheese Cake slice" @@ -2423,7 +2397,7 @@ filling_color = "#FAF7AF" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/New() ..() if(!(reagents.total_volume)) @@ -2439,9 +2413,9 @@ filling_color = "#F7EDD5" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 20) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice name = "Vanilla Cake slice" @@ -2451,7 +2425,7 @@ filling_color = "#F7EDD5" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/New() ..() if(!(reagents.total_volume)) @@ -2466,9 +2440,9 @@ filling_color = "#FADA8E" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 20) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice name = "Orange Cake slice" @@ -2478,7 +2452,7 @@ filling_color = "#FADA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/New() ..() if(!(reagents.total_volume)) @@ -2493,9 +2467,9 @@ filling_color = "#CBFA8E" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 20) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/limecakeslice name = "Lime Cake slice" @@ -2505,7 +2479,7 @@ filling_color = "#CBFA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/limecakeslice/New() ..() if(!(reagents.total_volume)) @@ -2520,9 +2494,9 @@ filling_color = "#FAFA8E" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 20) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice name = "Lemon Cake slice" @@ -2532,7 +2506,7 @@ filling_color = "#FAFA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/New() ..() if(!(reagents.total_volume)) @@ -2547,9 +2521,9 @@ filling_color = "#805930" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 20) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake/New() + ..() + reagents.add_reagent("nutriment", 20) /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice name = "Chocolate Cake slice" @@ -2559,7 +2533,7 @@ filling_color = "#805930" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/New() ..() if(!(reagents.total_volume)) @@ -2574,10 +2548,10 @@ filling_color = "#FFF700" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("protein", 20) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel/New() + ..() + reagents.add_reagent("protein", 20) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cheesewedge name = "Cheese wedge" @@ -2596,11 +2570,11 @@ filling_color = "#FFD6D6" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 20) - reagents.add_reagent("sprinkles", 10) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake/New() + ..() + reagents.add_reagent("nutriment", 20) + reagents.add_reagent("sprinkles", 10) + bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice name = "Birthday Cake slice" @@ -2610,7 +2584,7 @@ filling_color = "#FFD6D6" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/New() ..() if(!(reagents.total_volume)) @@ -2626,10 +2600,10 @@ filling_color = "#FFE396" center_of_mass = list("x"=16, "y"=9) - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/breadslice name = "Bread slice" @@ -2639,7 +2613,7 @@ filling_color = "#D27332" bitesize = 2 center_of_mass = list("x"=16, "y"=4) - + /obj/item/weapon/reagent_containers/food/snacks/breadslice/New() ..() if(!(reagents.total_volume)) @@ -2655,11 +2629,11 @@ filling_color = "#FFF896" center_of_mass = list("x"=16, "y"=9) - New() - ..() - reagents.add_reagent("protein", 15) - reagents.add_reagent("nutriment", 5) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread/New() + ..() + reagents.add_reagent("protein", 15) + reagents.add_reagent("nutriment", 5) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice name = "Cream Cheese Bread slice" @@ -2669,7 +2643,7 @@ filling_color = "#FFF896" bitesize = 2 center_of_mass = list("x"=16, "y"=13) - + /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice/New() ..() if(!(reagents.total_volume)) @@ -2683,7 +2657,7 @@ filling_color = "#FF3867" bitesize = 2 center_of_mass = list("x"=16, "y"=10) - + /obj/item/weapon/reagent_containers/food/snacks/watermelonslice/New() ..() if(!(reagents.total_volume)) @@ -2698,9 +2672,9 @@ filling_color = "#EBF5B8" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 15) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake/New() + ..() + reagents.add_reagent("nutriment", 15) /obj/item/weapon/reagent_containers/food/snacks/applecakeslice name = "Apple Cake slice" @@ -2710,7 +2684,7 @@ filling_color = "#EBF5B8" bitesize = 2 center_of_mass = list("x"=16, "y"=14) - + /obj/item/weapon/reagent_containers/food/snacks/applecakeslice/New() ..() if(!(reagents.total_volume)) @@ -2725,9 +2699,9 @@ filling_color = "#F5B951" center_of_mass = list("x"=16, "y"=10) - New() - ..() - reagents.add_reagent("nutriment", 15) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie/New() + ..() + reagents.add_reagent("nutriment", 15) /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice name = "Pumpkin Pie slice" @@ -2737,7 +2711,7 @@ filling_color = "#F5B951" bitesize = 2 center_of_mass = list("x"=16, "y"=12) - + /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/New() ..() if(!(reagents.total_volume)) @@ -2750,11 +2724,9 @@ filling_color = "#F5DEB8" center_of_mass = list("x"=17, "y"=6) - New() - ..() - reagents.add_reagent("nutriment", 1) - - +/obj/item/weapon/reagent_containers/food/snacks/cracker/New() + ..() + reagents.add_reagent("nutriment", 1) /////////////////////////////////////////////////PIZZA//////////////////////////////////////// @@ -2770,12 +2742,12 @@ slices_num = 6 center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 35) - reagents.add_reagent("protein", 5) - reagents.add_reagent("tomatojuice", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita/New() + ..() + reagents.add_reagent("nutriment", 35) + reagents.add_reagent("protein", 5) + reagents.add_reagent("tomatojuice", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/margheritaslice name = "Margherita slice" @@ -2784,7 +2756,7 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) - + /obj/item/weapon/reagent_containers/food/snacks/margheritaslice/New() ..() if(!(reagents.total_volume)) @@ -2800,11 +2772,11 @@ slices_num = 6 center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("protein", 44) - reagents.add_reagent("tomatojuice", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza/New() + ..() + reagents.add_reagent("protein", 44) + reagents.add_reagent("tomatojuice", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice name = "Meatpizza slice" @@ -2813,7 +2785,7 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) - + /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice/New() ..() if(!(reagents.total_volume)) @@ -2828,11 +2800,11 @@ slices_num = 6 center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 35) - reagents.add_reagent("protein", 5) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza/New() + ..() + reagents.add_reagent("nutriment", 35) + reagents.add_reagent("protein", 5) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice name = "Mushroompizza slice" @@ -2841,7 +2813,7 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) - + /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice/New() ..() if(!(reagents.total_volume)) @@ -2856,13 +2828,13 @@ slices_num = 6 center_of_mass = list("x"=16, "y"=11) - New() - ..() - reagents.add_reagent("nutriment", 25) - reagents.add_reagent("protein", 5) - reagents.add_reagent("tomatojuice", 6) - reagents.add_reagent("imidazoline", 12) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza/New() + ..() + reagents.add_reagent("nutriment", 25) + reagents.add_reagent("protein", 5) + reagents.add_reagent("tomatojuice", 6) + reagents.add_reagent("imidazoline", 12) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice name = "Vegetable pizza slice" @@ -2871,7 +2843,7 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) - + /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice/New() ..() if(!(reagents.total_volume)) @@ -2892,7 +2864,6 @@ var/list/boxes = list() // If the boxes are stacked, they come here var/boxtag = "" - /obj/item/pizzabox/proc/closepizzabox() if( boxes.len > 0 ) @@ -3074,14 +3045,11 @@ filling_color = "#75754B" center_of_mass = list("x"=16, "y"=7) - New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("radium", 2) - bitesize = 2 - - - +/obj/item/weapon/reagent_containers/food/snacks/dionaroast/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("radium", 2) + bitesize = 2 /////////////////////////////////////////// // new old food stuff from bs12 @@ -3094,10 +3062,10 @@ bitesize = 2 center_of_mass = list("x"=16, "y"=13) - New() - ..() - reagents.add_reagent("protein", 1) - reagents.add_reagent("nutriment", 3) +/obj/item/weapon/reagent_containers/food/snacks/dough/New() + ..() + reagents.add_reagent("protein", 1) + reagents.add_reagent("nutriment", 3) // Dough + rolling pin = flat dough /obj/item/weapon/reagent_containers/food/snacks/dough/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -3116,10 +3084,10 @@ slices_num = 3 center_of_mass = list("x"=16, "y"=16) - New() - ..() - reagents.add_reagent("protein", 1) - reagents.add_reagent("nutriment", 3) +/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/New() + ..() + reagents.add_reagent("protein", 1) + reagents.add_reagent("nutriment", 3) /obj/item/weapon/reagent_containers/food/snacks/doughslice name = "dough slice" @@ -3131,9 +3099,9 @@ bitesize = 2 center_of_mass = list("x"=17, "y"=19) - New() - ..() - reagents.add_reagent("nutriment", 1) +/obj/item/weapon/reagent_containers/food/snacks/doughslice/New() + ..() + reagents.add_reagent("nutriment", 1) /obj/item/weapon/reagent_containers/food/snacks/bun name = "bun" @@ -3143,9 +3111,9 @@ bitesize = 2 center_of_mass = list("x"=16, "y"=12) - New() - ..() - reagents.add_reagent("nutriment", 4) +/obj/item/weapon/reagent_containers/food/snacks/bun/New() + ..() + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/weapon/W as obj, mob/user as mob) // Bun + meatball = burger @@ -3198,10 +3166,10 @@ bitesize = 3 center_of_mass = list("x"=21, "y"=12) - New() - ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent("nutriment", 4) +/obj/item/weapon/reagent_containers/food/snacks/taco/New() + ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/rawcutlet name = "raw cutlet" @@ -3211,9 +3179,9 @@ bitesize = 1 center_of_mass = list("x"=17, "y"=20) - New() - ..() - reagents.add_reagent("protein", 1) +/obj/item/weapon/reagent_containers/food/snacks/rawcutlet/New() + ..() + reagents.add_reagent("protein", 1) /obj/item/weapon/reagent_containers/food/snacks/cutlet name = "cutlet" @@ -3223,9 +3191,9 @@ bitesize = 2 center_of_mass = list("x"=17, "y"=20) - New() - ..() - reagents.add_reagent("protein", 2) +/obj/item/weapon/reagent_containers/food/snacks/cutlet/New() + ..() + reagents.add_reagent("protein", 2) /obj/item/weapon/reagent_containers/food/snacks/rawmeatball name = "raw meatball" @@ -3235,9 +3203,9 @@ bitesize = 2 center_of_mass = list("x"=16, "y"=15) - New() - ..() - reagents.add_reagent("protein", 2) +/obj/item/weapon/reagent_containers/food/snacks/rawmeatball/New() + ..() + reagents.add_reagent("protein", 2) /obj/item/weapon/reagent_containers/food/snacks/hotdog name = "hotdog" @@ -3246,9 +3214,9 @@ bitesize = 2 center_of_mass = list("x"=16, "y"=17) - New() - ..() - reagents.add_reagent("protein", 6) +/obj/item/weapon/reagent_containers/food/snacks/hotdog/New() + ..() + reagents.add_reagent("protein", 6) /obj/item/weapon/reagent_containers/food/snacks/flatbread name = "flatbread" @@ -3258,9 +3226,9 @@ bitesize = 2 center_of_mass = list("x"=16, "y"=16) - New() - ..() - reagents.add_reagent("nutriment", 3) +/obj/item/weapon/reagent_containers/food/snacks/flatbread/New() + ..() + reagents.add_reagent("nutriment", 3) // potato + knife = raw sticks /obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -3279,9 +3247,9 @@ bitesize = 2 center_of_mass = list("x"=16, "y"=12) - New() - ..() - reagents.add_reagent("nutriment", 3) +/obj/item/weapon/reagent_containers/food/snacks/rawsticks/New() + ..() + reagents.add_reagent("nutriment", 3) /obj/item/weapon/reagent_containers/food/snacks/liquidfood name = "\improper LiquidFood Ration" @@ -3291,12 +3259,11 @@ filling_color = "#A8A8A8" center_of_mass = list("x"=16, "y"=15) - New() - ..() - reagents.add_reagent("nutriment", 20) - reagents.add_reagent("iron", 3) - bitesize = 4 - +/obj/item/weapon/reagent_containers/food/snacks/liquidfood/New() + ..() + reagents.add_reagent("nutriment", 20) + reagents.add_reagent("iron", 3) + bitesize = 4 /obj/item/weapon/reagent_containers/food/snacks/tastybread name = "bread tube" @@ -3306,10 +3273,10 @@ filling_color = "#A66829" center_of_mass = list("x"=17, "y"=16) - New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/tastybread/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks name = "\improper SkrellSnax" @@ -3318,7 +3285,7 @@ filling_color = "#A66829" center_of_mass = list("x"=15, "y"=12) - New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 3 diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm index 7ea52765fc..9e1dc52536 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm @@ -5,10 +5,11 @@ health = 180 filling_color = "#FF1C1C" center_of_mass = list("x"=16, "y"=14) - New() - ..() - reagents.add_reagent("protein", 9) - src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/meat/New() + ..() + reagents.add_reagent("protein", 9) + src.bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/material/knife)) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index a5903e744d..44ea628eca 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -44,66 +44,65 @@ /obj/machinery/radiocarbon_spectrometer ) - New() - ..() - base_name = name +/obj/item/weapon/reagent_containers/glass/New() + ..() + base_name = name - examine(var/mob/user) - if(!..(user, 2)) +/obj/item/weapon/reagent_containers/glass/examine(var/mob/user) + if(!..(user, 2)) + return + if(reagents && reagents.reagent_list.len) + user << "It contains [reagents.total_volume] units of liquid." + else + user << "It is empty." + if(!is_open_container()) + user << "Airtight lid seals it completely." + +/obj/item/weapon/reagent_containers/glass/attack_self() + ..() + if(is_open_container()) + usr << "You put the lid on \the [src]." + flags ^= OPENCONTAINER + else + usr << "You take the lid off \the [src]." + flags |= OPENCONTAINER + update_icon() + +/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/flag) + if(!is_open_container() || !flag) + return + + for(var/type in can_be_placed_into) + if(istype(target, type)) return - if(reagents && reagents.reagent_list.len) - user << "It contains [reagents.total_volume] units of liquid." + + if(standard_splash_mob(user, target)) + return + if(standard_dispenser_refill(user, target)) + return + if(standard_pour_into(user, target)) + return + + if(reagents.total_volume) + user << "You splash the solution onto [target]." + reagents.splash(target, reagents.total_volume) + return + +/obj/item/weapon/reagent_containers/glass/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) + var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN) + if(length(tmp_label) > 10) + user << "The label can be at most 10 characters long." else - user << "It is empty." - if(!is_open_container()) - user << "Airtight lid seals it completely." + user << "You set the label to \"[tmp_label]\"." + label_text = tmp_label + update_name_label() - attack_self() - ..() - if(is_open_container()) - usr << "You put the lid on \the [src]." - flags ^= OPENCONTAINER - else - usr << "You take the lid off \the [src]." - flags |= OPENCONTAINER - update_icon() - - afterattack(var/obj/target, var/mob/user, var/flag) - - if(!is_open_container() || !flag) - return - - for(var/type in can_be_placed_into) - if(istype(target, type)) - return - - if(standard_splash_mob(user, target)) - return - if(standard_dispenser_refill(user, target)) - return - if(standard_pour_into(user, target)) - return - - if(reagents.total_volume) - user << "You splash the solution onto [target]." - reagents.splash(target, reagents.total_volume) - return - - attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) - var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN) - if(length(tmp_label) > 10) - user << "The label can be at most 10 characters long." - else - user << "You set the label to \"[tmp_label]\"." - label_text = tmp_label - update_name_label() - - proc/update_name_label() - if(label_text == "") - name = base_name - else - name = "[base_name] ([label_text])" +/obj/item/weapon/reagent_containers/glass/proc/update_name_label() + if(label_text == "") + name = base_name + else + name = "[base_name] ([label_text])" /obj/item/weapon/reagent_containers/glass/beaker name = "beaker" @@ -113,47 +112,47 @@ item_state = "beaker" matter = list("glass" = 500) - New() - ..() - desc += " Can hold up to [volume] units." - - on_reagent_change() - update_icon() - - pickup(mob/user) - ..() - update_icon() - - dropped(mob/user) - ..() - update_icon() - - attack_hand() - ..() - update_icon() +/obj/item/weapon/reagent_containers/glass/beaker/New() + ..() + desc += " Can hold up to [volume] units." +/obj/item/weapon/reagent_containers/glass/beaker/on_reagent_change() update_icon() - overlays.Cut() - if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") +/obj/item/weapon/reagent_containers/glass/beaker/pickup(mob/user) + ..() + update_icon() - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 9) filling.icon_state = "[icon_state]-10" - if(10 to 24) filling.icon_state = "[icon_state]10" - if(25 to 49) filling.icon_state = "[icon_state]25" - if(50 to 74) filling.icon_state = "[icon_state]50" - if(75 to 79) filling.icon_state = "[icon_state]75" - if(80 to 90) filling.icon_state = "[icon_state]80" - if(91 to INFINITY) filling.icon_state = "[icon_state]100" +/obj/item/weapon/reagent_containers/glass/beaker/dropped(mob/user) + ..() + update_icon() - filling.color = reagents.get_color() - overlays += filling +/obj/item/weapon/reagent_containers/glass/beaker/attack_hand() + ..() + update_icon() - if (!is_open_container()) - var/image/lid = image(icon, src, "lid_[initial(icon_state)]") - overlays += lid +/obj/item/weapon/reagent_containers/glass/beaker/update_icon() + overlays.Cut() + + if(reagents.total_volume) + var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") + + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) filling.icon_state = "[icon_state]-10" + if(10 to 24) filling.icon_state = "[icon_state]10" + if(25 to 49) filling.icon_state = "[icon_state]25" + if(50 to 74) filling.icon_state = "[icon_state]50" + if(75 to 79) filling.icon_state = "[icon_state]75" + if(80 to 90) filling.icon_state = "[icon_state]80" + if(91 to INFINITY) filling.icon_state = "[icon_state]100" + + filling.color = reagents.get_color() + overlays += filling + + if (!is_open_container()) + var/image/lid = image(icon, src, "lid_[initial(icon_state)]") + overlays += lid /obj/item/weapon/reagent_containers/glass/beaker/large name = "large beaker" @@ -194,14 +193,12 @@ possible_transfer_amounts = list(5,10,15,25) flags = OPENCONTAINER -/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone - New() - ..() - reagents.add_reagent("cryoxadone", 30) - update_icon() +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone/New() + ..() + reagents.add_reagent("cryoxadone", 30) + update_icon() -/obj/item/weapon/reagent_containers/glass/beaker/sulphuric - New() +/obj/item/weapon/reagent_containers/glass/beaker/sulphuric/New() ..() reagents.add_reagent("sacid", 60) update_icon() @@ -221,7 +218,6 @@ unacidable = 0 /obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob) - if(isprox(D)) user << "You add [D] to [src]." qdel(D) @@ -256,35 +252,3 @@ amount_per_transfer_from_this = 20 possible_transfer_amounts = list(10,20,30,60,120) volume = 120 - -/* -/obj/item/weapon/reagent_containers/glass/blender_jug - name = "Blender Jug" - desc = "A blender jug, part of a blender." - icon = 'icons/obj/kitchen.dmi' - icon_state = "blender_jug_e" - volume = 100 - - on_reagent_change() - switch(src.reagents.total_volume) - if(0) - icon_state = "blender_jug_e" - if(1 to 75) - icon_state = "blender_jug_h" - if(76 to 100) - icon_state = "blender_jug_f" - -/obj/item/weapon/reagent_containers/glass/canister //not used apparantly - desc = "It's a canister. Mainly used for transporting fuel." - name = "canister" - icon = 'icons/obj/tank.dmi' - icon_state = "canister" - item_state = "canister" - m_amt = 300 - g_amt = 0 - w_class = 4.0 - - amount_per_transfer_from_this = 20 - possible_transfer_amounts = list(10,20,30,60) - volume = 120 -*/ diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 55dfcc7745..5f22c3f324 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -12,48 +12,48 @@ flags = 0 volume = 60 - on_reagent_change() - update_icon() - - pickup(mob/user) - ..() - update_icon() - - dropped(mob/user) - ..() - update_icon() - - attack_hand() - ..() - update_icon() - - New() - ..() - if(!icon_state) - icon_state = "bottle-[rand(1,4)]" - +/obj/item/weapon/reagent_containers/glass/bottle/on_reagent_change() update_icon() - overlays.Cut() - if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4")) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") +/obj/item/weapon/reagent_containers/glass/bottle/pickup(mob/user) + ..() + update_icon() - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 9) filling.icon_state = "[icon_state]--10" - if(10 to 24) filling.icon_state = "[icon_state]-10" - if(25 to 49) filling.icon_state = "[icon_state]-25" - if(50 to 74) filling.icon_state = "[icon_state]-50" - if(75 to 79) filling.icon_state = "[icon_state]-75" - if(80 to 90) filling.icon_state = "[icon_state]-80" - if(91 to INFINITY) filling.icon_state = "[icon_state]-100" +/obj/item/weapon/reagent_containers/glass/bottle/dropped(mob/user) + ..() + update_icon() - filling.color = reagents.get_color() - overlays += filling +/obj/item/weapon/reagent_containers/glass/bottle/attack_hand() + ..() + update_icon() - if (!is_open_container()) - var/image/lid = image(icon, src, "lid_bottle") - overlays += lid +/obj/item/weapon/reagent_containers/glass/bottle/New() + ..() + if(!icon_state) + icon_state = "bottle-[rand(1,4)]" + +/obj/item/weapon/reagent_containers/glass/bottle/update_icon() + overlays.Cut() + + if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4")) + var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") + + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) filling.icon_state = "[icon_state]--10" + if(10 to 24) filling.icon_state = "[icon_state]-10" + if(25 to 49) filling.icon_state = "[icon_state]-25" + if(50 to 74) filling.icon_state = "[icon_state]-50" + if(75 to 79) filling.icon_state = "[icon_state]-75" + if(80 to 90) filling.icon_state = "[icon_state]-80" + if(91 to INFINITY) filling.icon_state = "[icon_state]-100" + + filling.color = reagents.get_color() + overlays += filling + + if (!is_open_container()) + var/image/lid = image(icon, src, "lid_bottle") + overlays += lid /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline @@ -86,12 +86,12 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-3" + /obj/item/weapon/reagent_containers/glass/bottle/cyanide/New() ..() reagents.add_reagent("cyanide", 30) //volume changed to match chloral update_icon() - /obj/item/weapon/reagent_containers/glass/bottle/stoxin name = "soporific bottle" desc = "A small bottle of soporific. Just the fumes make you sleepy." diff --git a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm index 3a95b3cd1c..2e2d5e4fdd 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm @@ -14,10 +14,10 @@ icon_state = "bottle-4" reagent = "inaprovaline" - New() - ..() - reagents.add_reagent("inaprovaline", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline/New() + ..() + reagents.add_reagent("inaprovaline", 60) + update_icon() /obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin @@ -27,8 +27,8 @@ icon_state = "bottle-4" reagent = "anti_toxin" - New() - ..() - reagents.add_reagent("anti_toxin", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin/New() + ..() + reagents.add_reagent("anti_toxin", 60) + update_icon() diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 7fc7707c28..89598898f8 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -12,82 +12,82 @@ slot_flags = SLOT_EARS volume = 60 - New() - ..() - if(!icon_state) - icon_state = "pill[rand(1, 20)]" +/obj/item/weapon/reagent_containers/pill/New() + ..() + if(!icon_state) + icon_state = "pill[rand(1, 20)]" - attack(mob/M as mob, mob/user as mob, def_zone) - if(M == user) - - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(!H.check_has_mouth()) - user << "Where do you intend to put \the [src]? You don't have a mouth!" - return - var/obj/item/blocked = H.check_mouth_coverage() - if(blocked) - user << "\The [blocked] is in the way!" - return - - M << "You swallow \the [src]." - M.drop_from_inventory(src) //icon update - if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - return 1 - - else if(istype(M, /mob/living/carbon/human)) +/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob, def_zone) + if(M == user) + if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(!H.check_has_mouth()) - user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!" + user << "Where do you intend to put \the [src]? You don't have a mouth!" return var/obj/item/blocked = H.check_mouth_coverage() if(blocked) user << "\The [blocked] is in the way!" return - user.visible_message("[user] attempts to force [M] to swallow \the [src].") + M << "You swallow \the [src]." + M.drop_from_inventory(src) //icon update + if(reagents.total_volume) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + qdel(src) + return 1 - if(!do_mob(user, M)) - return + else if(istype(M, /mob/living/carbon/human)) - user.drop_from_inventory(src) //icon update - user.visible_message("[user] forces [M] to swallow \the [src].") + var/mob/living/carbon/human/H = M + if(!H.check_has_mouth()) + user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!" + return + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + user << "\The [blocked] is in the way!" + return - var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [key_name(user)] Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Fed [name] to [key_name(M)] Reagents: [contained]") - msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") + user.visible_message("[user] attempts to force [M] to swallow \the [src].") - if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) + if(!do_mob(user, M)) + return - return 1 + user.drop_from_inventory(src) //icon update + user.visible_message("[user] forces [M] to swallow \the [src].") - return 0 + var/contained = reagentlist() + M.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [key_name(user)] Reagents: [contained]") + user.attack_log += text("\[[time_stamp()]\] Fed [name] to [key_name(M)] Reagents: [contained]") + msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - afterattack(obj/target, mob/user, proximity) - if(!proximity) return + if(reagents.total_volume) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + qdel(src) - if(target.is_open_container() && target.reagents) - if(!target.reagents.total_volume) - user << "[target] is empty. Can't dissolve \the [src]." - return - user << "You dissolve \the [src] in [target]." + return 1 - user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist()]") - msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (JMP)") + return 0 - reagents.trans_to(target, reagents.total_volume) - for(var/mob/O in viewers(2, user)) - O.show_message("[user] puts something in \the [target].", 1) +/obj/item/weapon/reagent_containers/pill/afterattack(obj/target, mob/user, proximity) + if(!proximity) return - qdel(src) + if(target.is_open_container() && target.reagents) + if(!target.reagents.total_volume) + user << "[target] is empty. Can't dissolve \the [src]." + return + user << "You dissolve \the [src] in [target]." - return + user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist()]") + msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (JMP)") + + reagents.trans_to(target, reagents.total_volume) + for(var/mob/O in viewers(2, user)) + O.show_message("[user] puts something in \the [target].", 1) + + qdel(src) + + return //////////////////////////////////////////////////////////////////////////////// /// Pills. END @@ -98,163 +98,199 @@ name = "Anti-toxins pill" desc = "Neutralizes many common toxins." icon_state = "pill17" - New() - ..() - reagents.add_reagent("anti_toxin", 25) + +/obj/item/weapon/reagent_containers/pill/antitox/New() + ..() + reagents.add_reagent("anti_toxin", 25) + /obj/item/weapon/reagent_containers/pill/tox name = "Toxins pill" desc = "Highly toxic." icon_state = "pill5" - New() - ..() - reagents.add_reagent("toxin", 50) + +/obj/item/weapon/reagent_containers/pill/tox/New() + ..() + reagents.add_reagent("toxin", 50) + /obj/item/weapon/reagent_containers/pill/cyanide name = "Cyanide pill" desc = "Don't swallow this." icon_state = "pill5" - New() - ..() - reagents.add_reagent("cyanide", 50) + +/obj/item/weapon/reagent_containers/pill/cyanide/New() + ..() + reagents.add_reagent("cyanide", 50) + /obj/item/weapon/reagent_containers/pill/adminordrazine name = "Adminordrazine pill" desc = "It's magic. We don't have to explain it." icon_state = "pill16" - New() - ..() - reagents.add_reagent("adminordrazine", 50) + +/obj/item/weapon/reagent_containers/pill/adminordrazine/New() + ..() + reagents.add_reagent("adminordrazine", 50) /obj/item/weapon/reagent_containers/pill/stox name = "Sleeping pill" desc = "Commonly used to treat insomnia." icon_state = "pill8" - New() - ..() - reagents.add_reagent("stoxin", 15) + +/obj/item/weapon/reagent_containers/pill/stox/New() + ..() + reagents.add_reagent("stoxin", 15) + /obj/item/weapon/reagent_containers/pill/kelotane name = "Kelotane pill" desc = "Used to treat burns." icon_state = "pill11" - New() - ..() - reagents.add_reagent("kelotane", 15) + +/obj/item/weapon/reagent_containers/pill/kelotane/New() + ..() + reagents.add_reagent("kelotane", 15) + /obj/item/weapon/reagent_containers/pill/paracetamol name = "Paracetamol pill" desc = "Tylenol! A painkiller for the ages. Chewables!" icon_state = "pill8" - New() - ..() - reagents.add_reagent("paracetamol", 15) + +/obj/item/weapon/reagent_containers/pill/paracetamol/New() + ..() + reagents.add_reagent("paracetamol", 15) + /obj/item/weapon/reagent_containers/pill/tramadol name = "Tramadol pill" desc = "A simple painkiller." icon_state = "pill8" - New() - ..() - reagents.add_reagent("tramadol", 15) + +/obj/item/weapon/reagent_containers/pill/tramadol/New() + ..() + reagents.add_reagent("tramadol", 15) /obj/item/weapon/reagent_containers/pill/methylphenidate name = "Methylphenidate pill" desc = "Improves the ability to concentrate." icon_state = "pill8" - New() - ..() - reagents.add_reagent("methylphenidate", 15) + +/obj/item/weapon/reagent_containers/pill/methylphenidate/New() + ..() + reagents.add_reagent("methylphenidate", 15) + /obj/item/weapon/reagent_containers/pill/citalopram name = "Citalopram pill" desc = "Mild anti-depressant." icon_state = "pill8" - New() - ..() - reagents.add_reagent("citalopram", 15) + +/obj/item/weapon/reagent_containers/pill/citalopram/New() + ..() + reagents.add_reagent("citalopram", 15) /obj/item/weapon/reagent_containers/pill/inaprovaline name = "Inaprovaline pill" desc = "Used to stabilize patients." icon_state = "pill20" - New() - ..() - reagents.add_reagent("inaprovaline", 30) + +/obj/item/weapon/reagent_containers/pill/inaprovaline/New() + ..() + reagents.add_reagent("inaprovaline", 30) + /obj/item/weapon/reagent_containers/pill/dexalin name = "Dexalin pill" desc = "Used to treat oxygen deprivation." icon_state = "pill16" - New() - ..() - reagents.add_reagent("dexalin", 15) + +/obj/item/weapon/reagent_containers/pill/dexalin/New() + ..() + reagents.add_reagent("dexalin", 15) + /obj/item/weapon/reagent_containers/pill/dexalin_plus name = "Dexalin Plus pill" desc = "Used to treat extreme oxygen deprivation." icon_state = "pill8" - New() - ..() - reagents.add_reagent("dexalinp", 15) + +/obj/item/weapon/reagent_containers/pill/dexalin_plus/New() + ..() + reagents.add_reagent("dexalinp", 15) + /obj/item/weapon/reagent_containers/pill/dermaline name = "Dermaline pill" desc = "Used to treat burn wounds." icon_state = "pill12" - New() - ..() - reagents.add_reagent("dermaline", 15) + +/obj/item/weapon/reagent_containers/pill/dermaline/New() + ..() + reagents.add_reagent("dermaline", 15) + /obj/item/weapon/reagent_containers/pill/dylovene name = "Dylovene pill" desc = "A broad-spectrum anti-toxin." icon_state = "pill13" - New() - ..() - reagents.add_reagent("anti_toxin", 15) + +/obj/item/weapon/reagent_containers/pill/dylovene/New() + ..() + reagents.add_reagent("anti_toxin", 15) + /obj/item/weapon/reagent_containers/pill/inaprovaline name = "Inaprovaline pill" desc = "Used to stabilize patients." icon_state = "pill20" - New() - ..() - reagents.add_reagent("inaprovaline", 30) + +/obj/item/weapon/reagent_containers/pill/inaprovaline/New() + ..() + reagents.add_reagent("inaprovaline", 30) + /obj/item/weapon/reagent_containers/pill/bicaridine name = "Bicaridine pill" desc = "Used to treat physical injuries." icon_state = "pill18" - New() - ..() - reagents.add_reagent("bicaridine", 20) + +/obj/item/weapon/reagent_containers/pill/bicaridine/New() + ..() + reagents.add_reagent("bicaridine", 20) + /obj/item/weapon/reagent_containers/pill/happy name = "Happy pill" desc = "Happy happy joy joy!" icon_state = "pill18" - New() - ..() - reagents.add_reagent("space_drugs", 15) - reagents.add_reagent("sugar", 15) + +/obj/item/weapon/reagent_containers/pill/happy/New() + ..() + reagents.add_reagent("space_drugs", 15) + reagents.add_reagent("sugar", 15) + /obj/item/weapon/reagent_containers/pill/zoom name = "Zoom pill" desc = "Zoooom!" icon_state = "pill18" - New() - ..() - reagents.add_reagent("impedrezene", 10) - reagents.add_reagent("synaptizine", 5) - reagents.add_reagent("hyperzine", 5) + +/obj/item/weapon/reagent_containers/pill/zoom/New() + ..() + reagents.add_reagent("impedrezene", 10) + reagents.add_reagent("synaptizine", 5) + reagents.add_reagent("hyperzine", 5) + /obj/item/weapon/reagent_containers/pill/spaceacillin name = "Spaceacillin pill" desc = "Contains antiviral agents." icon_state = "pill19" - New() - ..() - reagents.add_reagent("spaceacillin", 15) + +/obj/item/weapon/reagent_containers/pill/spaceacillin/New() + ..() + reagents.add_reagent("spaceacillin", 15) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 741e9eccdd..7c291f1906 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -24,260 +24,258 @@ var/visible_name = "a syringe" var/time = 30 - on_reagent_change() - update_icon() - - pickup(mob/user) - ..() - update_icon() - - dropped(mob/user) - ..() - update_icon() - - attack_self(mob/user as mob) - - switch(mode) - if(SYRINGE_DRAW) - mode = SYRINGE_INJECT - if(SYRINGE_INJECT) - mode = SYRINGE_DRAW - if(SYRINGE_BROKEN) - return - update_icon() - - attack_hand() - ..() - update_icon() - - attackby(obj/item/I as obj, mob/user as mob) - return - - afterattack(obj/target, mob/user, proximity) - if(!proximity || !target.reagents) - return - - if(mode == SYRINGE_BROKEN) - user << "This syringe is broken!" - return - - if(user.a_intent == I_HURT && ismob(target)) - if((CLUMSY in user.mutations) && prob(50)) - target = user - syringestab(target, user) - return - - - switch(mode) - if(SYRINGE_DRAW) - - if(!reagents.get_free_space()) - user << "The syringe is full." - mode = SYRINGE_INJECT - return - - if(ismob(target))//Blood! - if(reagents.has_reagent("blood")) - user << "There is already a blood sample in this syringe." - return - if(istype(target, /mob/living/carbon)) - if(istype(target, /mob/living/carbon/slime)) - user << "You are unable to locate any blood." - return - var/amount = reagents.get_free_space() - var/mob/living/carbon/T = target - if(!T.dna) - user << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)." - return - if(NOCLONE in T.mutations) //target done been et, no more blood in him - user << "You are unable to locate any blood." - return - - var/datum/reagent/B - if(istype(T, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = T - if(H.species && !H.should_have_organ(O_HEART)) - H.reagents.trans_to_obj(src, amount) - else - B = T.take_blood(src, amount) - else - B = T.take_blood(src,amount) - - if (B) - reagents.reagent_list += B - reagents.update_total() - on_reagent_change() - reagents.handle_reactions() - user << "You take a blood sample from [target]." - for(var/mob/O in viewers(4, user)) - O.show_message("[user] takes a blood sample from [target].", 1) - - else //if not mob - if(!target.reagents.total_volume) - user << "[target] is empty." - return - - if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract)) - user << "You cannot directly remove reagents from this object." - return - - var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) - user << "You fill the syringe with [trans] units of the solution." - update_icon() - - if(!reagents.get_free_space()) - mode = SYRINGE_INJECT - update_icon() - - if(SYRINGE_INJECT) - if(!reagents.total_volume) - user << "The syringe is empty." - mode = SYRINGE_DRAW - return - if(istype(target, /obj/item/weapon/implantcase/chem)) - return - - if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes)) - user << "You cannot directly fill this object." - return - if(!target.reagents.get_free_space()) - user << "[target] is full." - return - - var/mob/living/carbon/human/H = target - if(istype(H)) - var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(!affected) - user << "\The [H] is missing that limb!" - return - else if(affected.status & ORGAN_ROBOT) - user << "You cannot inject a robotic limb." - return - - if(ismob(target) && target != user) - - var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port. - - if(istype(H)) - if(H.wear_suit) - if(istype(H.wear_suit, /obj/item/clothing/suit/space)) - injtime = injtime * 2 - else if(!H.can_inject(user, 1)) - return - - else if(isliving(target)) - - var/mob/living/M = target - if(!M.can_inject(user, 1)) - return - - if(injtime == time) - user.visible_message("[user] is trying to inject [target] with [visible_name]!") - else - user.visible_message("[user] begins hunting for an injection port on [target]'s suit!") - - if(!do_mob(user, target, injtime)) - return - - user.visible_message("[user] injects [target] with the syringe!") - - var/trans - if(ismob(target)) - var/contained = reagentlist() - trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD) - admin_inject_log(user, target, src, contained, trans) - else - trans = reagents.trans_to(target, amount_per_transfer_from_this) - user << "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units." - if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT) - mode = SYRINGE_DRAW - update_icon() - - return - +/obj/item/weapon/reagent_containers/syringe/on_reagent_change() update_icon() - overlays.Cut() - if(mode == SYRINGE_BROKEN) - icon_state = "broken" +/obj/item/weapon/reagent_containers/syringe/pickup(mob/user) + ..() + update_icon() + +/obj/item/weapon/reagent_containers/syringe/dropped(mob/user) + ..() + update_icon() + +/obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob) + switch(mode) + if(SYRINGE_DRAW) + mode = SYRINGE_INJECT + if(SYRINGE_INJECT) + mode = SYRINGE_DRAW + if(SYRINGE_BROKEN) return + update_icon() - var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3)) - if(ismob(loc)) - var/injoverlay - switch(mode) - if (SYRINGE_DRAW) - injoverlay = "draw" - if (SYRINGE_INJECT) - injoverlay = "inject" - overlays += injoverlay - icon_state = "[rounded_vol]" - item_state = "syringe_[rounded_vol]" +/obj/item/weapon/reagent_containers/syringe/attack_hand() + ..() + update_icon() - if(reagents.total_volume) - filling = image('icons/obj/reagentfillings.dmi', src, "syringe10") +/obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob) + return - filling.icon_state = "syringe[rounded_vol]" +/obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity) + if(!proximity || !target.reagents) + return - filling.color = reagents.get_color() - overlays += filling + if(mode == SYRINGE_BROKEN) + user << "This syringe is broken!" + return - proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob) + if(user.a_intent == I_HURT && ismob(target)) + if((CLUMSY in user.mutations) && prob(50)) + target = user + syringestab(target, user) + return - if(istype(target, /mob/living/carbon/human)) + + switch(mode) + if(SYRINGE_DRAW) + + if(!reagents.get_free_space()) + user << "The syringe is full." + mode = SYRINGE_INJECT + return + + if(ismob(target))//Blood! + if(reagents.has_reagent("blood")) + user << "There is already a blood sample in this syringe." + return + if(istype(target, /mob/living/carbon)) + if(istype(target, /mob/living/carbon/slime)) + user << "You are unable to locate any blood." + return + var/amount = reagents.get_free_space() + var/mob/living/carbon/T = target + if(!T.dna) + user << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)." + return + if(NOCLONE in T.mutations) //target done been et, no more blood in him + user << "You are unable to locate any blood." + return + + var/datum/reagent/B + if(istype(T, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = T + if(H.species && !H.should_have_organ(O_HEART)) + H.reagents.trans_to_obj(src, amount) + else + B = T.take_blood(src, amount) + else + B = T.take_blood(src,amount) + + if (B) + reagents.reagent_list += B + reagents.update_total() + on_reagent_change() + reagents.handle_reactions() + user << "You take a blood sample from [target]." + for(var/mob/O in viewers(4, user)) + O.show_message("[user] takes a blood sample from [target].", 1) + + else //if not mob + if(!target.reagents.total_volume) + user << "[target] is empty." + return + + if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract)) + user << "You cannot directly remove reagents from this object." + return + + var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this) + user << "You fill the syringe with [trans] units of the solution." + update_icon() + + if(!reagents.get_free_space()) + mode = SYRINGE_INJECT + update_icon() + + if(SYRINGE_INJECT) + if(!reagents.total_volume) + user << "The syringe is empty." + mode = SYRINGE_DRAW + return + if(istype(target, /obj/item/weapon/implantcase/chem)) + return + + if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes)) + user << "You cannot directly fill this object." + return + if(!target.reagents.get_free_space()) + user << "[target] is full." + return var/mob/living/carbon/human/H = target + if(istype(H)) + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + if(!affected) + user << "\The [H] is missing that limb!" + return + else if(affected.status & ORGAN_ROBOT) + user << "You cannot inject a robotic limb." + return - var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target)) - var/obj/item/organ/external/affecting = H.get_organ(target_zone) + if(ismob(target) && target != user) - if (!affecting || affecting.is_stump()) - user << "They are missing that limb!" - return + var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port. - var/hit_area = affecting.name + if(istype(H)) + if(H.wear_suit) + if(istype(H.wear_suit, /obj/item/clothing/suit/space)) + injtime = injtime * 2 + else if(!H.can_inject(user, 1)) + return - if((user != target) && H.check_shields(7, src, user, "\the [src]")) - return + else if(isliving(target)) - if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50)) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\red [user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1) - user.remove_from_mob(src) - qdel(src) + var/mob/living/M = target + if(!M.can_inject(user, 1)) + return - user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM)." - target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM)." - msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (JMP)") + if(injtime == time) + user.visible_message("[user] is trying to inject [target] with [visible_name]!") + else + user.visible_message("[user] begins hunting for an injection port on [target]'s suit!") - return + if(!do_mob(user, target, injtime)) + return - user.visible_message("[user] stabs [target] in \the [hit_area] with [src.name]!") + user.visible_message("[user] injects [target] with the syringe!") - if(affecting.take_damage(3)) - H.UpdateDamageIcon() + var/trans + if(ismob(target)) + var/contained = reagentlist() + trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD) + admin_inject_log(user, target, src, contained, trans) + else + trans = reagents.trans_to(target, amount_per_transfer_from_this) + user << "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units." + if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT) + mode = SYRINGE_DRAW + update_icon() - else - user.visible_message("[user] stabs [target] with [src.name]!") - target.take_organ_damage(3)// 7 is the same as crowbar punch + return + +/obj/item/weapon/reagent_containers/syringe/update_icon() + overlays.Cut() + + if(mode == SYRINGE_BROKEN) + icon_state = "broken" + return + + var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3)) + if(ismob(loc)) + var/injoverlay + switch(mode) + if (SYRINGE_DRAW) + injoverlay = "draw" + if (SYRINGE_INJECT) + injoverlay = "inject" + overlays += injoverlay + icon_state = "[rounded_vol]" + item_state = "syringe_[rounded_vol]" + + if(reagents.total_volume) + filling = image('icons/obj/reagentfillings.dmi', src, "syringe10") + + filling.icon_state = "syringe[rounded_vol]" + + filling.color = reagents.get_color() + overlays += filling + +/obj/item/weapon/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob) + if(istype(target, /mob/living/carbon/human)) + + var/mob/living/carbon/human/H = target + + var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target)) + var/obj/item/organ/external/affecting = H.get_organ(target_zone) + + if (!affecting || affecting.is_stump()) + user << "They are missing that limb!" + return + + var/hit_area = affecting.name + + if((user != target) && H.check_shields(7, src, user, "\the [src]")) + return + + if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50)) + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1) + user.remove_from_mob(src) + qdel(src) + + user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM)." + target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM)." + msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (JMP)") + + return + + user.visible_message("[user] stabs [target] in \the [hit_area] with [src.name]!") + + if(affecting.take_damage(3)) + H.UpdateDamageIcon() + + else + user.visible_message("[user] stabs [target] with [src.name]!") + target.take_organ_damage(3)// 7 is the same as crowbar punch - var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand - var/contained_reagents = reagents.get_reagents() - var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD) - if(isnull(trans)) trans = 0 - admin_inject_log(user, target, src, contained_reagents, trans, violent=1) - break_syringe(target, user) + var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand + var/contained_reagents = reagents.get_reagents() + var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD) + if(isnull(trans)) trans = 0 + admin_inject_log(user, target, src, contained_reagents, trans, violent=1) + break_syringe(target, user) - proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user) - desc += " It is broken." - mode = SYRINGE_BROKEN - if(target) - add_blood(target) - if(user) - add_fingerprint(user) - update_icon() +/obj/item/weapon/reagent_containers/syringe/proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user) + desc += " It is broken." + mode = SYRINGE_BROKEN + if(target) + add_blood(target) + if(user) + add_fingerprint(user) + update_icon() /obj/item/weapon/reagent_containers/syringe/ld50_syringe name = "Lethal Injection Syringe" @@ -287,13 +285,13 @@ visible_name = "a giant syringe" time = 300 - afterattack(obj/target, mob/user, flag) - if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once - user << "This needle isn't designed for drawing blood." - return - if(user.a_intent == "hurt" && ismob(target)) // No instant injecting - user << "This syringe is too big to stab someone with it." - ..() +/obj/item/weapon/reagent_containers/syringe/ld50_syringe/afterattack(obj/target, mob/user, flag) + if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once + user << "This needle isn't designed for drawing blood." + return + if(user.a_intent == "hurt" && ismob(target)) // No instant injecting + user << "This syringe is too big to stab someone with it." + ..() //////////////////////////////////////////////////////////////////////////////// /// Syringes. END @@ -302,44 +300,47 @@ /obj/item/weapon/reagent_containers/syringe/inaprovaline name = "Syringe (inaprovaline)" desc = "Contains inaprovaline - used to stabilize patients." - New() - ..() - reagents.add_reagent("inaprovaline", 15) - mode = SYRINGE_INJECT - update_icon() + +/obj/item/weapon/reagent_containers/syringe/inaprovaline/New() + ..() + reagents.add_reagent("inaprovaline", 15) + mode = SYRINGE_INJECT + update_icon() /obj/item/weapon/reagent_containers/syringe/antitoxin name = "Syringe (anti-toxin)" desc = "Contains anti-toxins." - New() - ..() - reagents.add_reagent("anti_toxin", 15) - mode = SYRINGE_INJECT - update_icon() + +/obj/item/weapon/reagent_containers/syringe/antitoxin/New() + ..() + reagents.add_reagent("anti_toxin", 15) + mode = SYRINGE_INJECT + update_icon() /obj/item/weapon/reagent_containers/syringe/antiviral name = "Syringe (spaceacillin)" desc = "Contains antiviral agents." - New() - ..() - reagents.add_reagent("spaceacillin", 15) - mode = SYRINGE_INJECT - update_icon() + +/obj/item/weapon/reagent_containers/syringe/antiviral/New() + ..() + reagents.add_reagent("spaceacillin", 15) + mode = SYRINGE_INJECT + update_icon() /obj/item/weapon/reagent_containers/syringe/drugs name = "Syringe (drugs)" desc = "Contains aggressive drugs meant for torture." - New() - ..() - reagents.add_reagent("space_drugs", 5) - reagents.add_reagent("mindbreaker", 5) - reagents.add_reagent("cryptobiolin", 5) - mode = SYRINGE_INJECT - update_icon() -/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral - New() - ..() - reagents.add_reagent("chloralhydrate", 50) - mode = SYRINGE_INJECT - update_icon() +/obj/item/weapon/reagent_containers/syringe/drugs/New() + ..() + reagents.add_reagent("space_drugs", 5) + reagents.add_reagent("mindbreaker", 5) + reagents.add_reagent("cryptobiolin", 5) + mode = SYRINGE_INJECT + update_icon() + +/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral/New() + ..() + reagents.add_reagent("chloralhydrate", 50) + mode = SYRINGE_INJECT + update_icon() diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index f178a6a45b..7ea873c8d0 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -153,8 +153,12 @@ max_duration = 100 can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"] - return ..() && (!sponge || !sponge.damage) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(affected.organ_tag == BP_HEAD) + var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"] + return ..() && (!sponge || !sponge.damage) + else + return ..() begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) diff --git a/code/world.dm b/code/world.dm index b81c0f7c3a..bfa399fe2a 100644 --- a/code/world.dm +++ b/code/world.dm @@ -558,7 +558,9 @@ var/failed_db_connections = 0 var/failed_old_db_connections = 0 /hook/startup/proc/connectDB() - if(!setup_database_connection()) + if(!config.sql_enabled) + world.log << "SQL connection disabled in config." + else if(!setup_database_connection()) world.log << "Your server failed to establish a connection with the feedback database." else world.log << "Feedback database connection established." @@ -600,7 +602,9 @@ proc/establish_db_connection() /hook/startup/proc/connectOldDB() - if(!setup_old_database_connection()) + if(!config.sql_enabled) + world.log << "SQL connection disabled in config." + else if(!setup_old_database_connection()) world.log << "Your server failed to establish a connection with the SQL database." else world.log << "SQL database connection established." diff --git a/config/example/config.txt b/config/example/config.txt index b38bfd7354..ec93429827 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -67,8 +67,8 @@ LOG_PDA ## log admin warning messages ##LOG_ADMINWARN ## Also duplicates a bunch of other messages. -## sql switching -# SQL_ENABLED +## Enable/disable SQL connection (comment out to disable) +SQL_ENABLED ## disconnect players who did nothing during the set amount of minutes # KICK_INACTIVE 10 diff --git a/html/browser/common.css b/html/browser/common.css index 9f2f579908..e2090f2d3d 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -78,6 +78,22 @@ a.icon img, .linkOn.icon img height: 18px; } +a.icon64, .linkOn.icon64, .linkOff.icon64 +{ + position: relative; + padding: 1px 4px 2px 68px; + font-size: 55px; +} + +a.icon64 img, .linkOn.icon64 img +{ + position: absolute; + top: 0; + left: 0; + width: 66px; + height: 66px; +} + ul { padding: 4px 0 0 10px; diff --git a/html/changelog.html b/html/changelog.html index 38b2166002..8a5a9b6746 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,52 @@ -->
+

17 May 2016

+

SilveryFerret updated:

+
    +
  • Changes the Death Alarms from announcing over Common channel, to announcing only over Medical and Security channels.
  • +
+

Yoshax updated:

+
    +
  • Added shotglasses. These can contain 10 units. They have their whole contents swalloed in one gulp. They can be produced in the autolathe or found in the booze vending machine in the bar.
  • +
+ +

16 May 2016

+

Yoshax updated:

+
    +
  • Uplinks now have a discounted item every 15 minutes. This is per uplink, and random, the discount is also random, but weighted as such that a low discount such as 10% off, or 20% off has a higher chance of happening than a high discount such as 90% of. An item will never cost less than 1.
  • +
  • Mercenaries now spawn with their own, personal uplinks.
  • +
  • Faked announcements are now once again purchasable from the uplink, and actually work.
  • +
  • Adds several new items to the uplink including tactical knives, metal foam grenades, ambrosia seeds and much more.
  • +
+ +

13 May 2016

+

HarpyEagle updated:

+
    +
  • Shotgun flare illumination now lasts longer, around 3-4 minutes.
  • +
  • Fixed attack animation playing when using flashes even if the flash was not actually used due to being broken or recharging.
  • +
  • Fixed lightswitches layering over darkness. Now only the light layers above shadow. Lightswitch illumination is now much more subtle.
  • +
+

Yoshax updated:

+
    +
  • Processing strata floor can now be pried up with a crowbar.
  • +
  • Blue carpet can now also be removed with a crowbar, and has had it's ability to burn and have corners restored.
  • +
  • Changelings will now store and apply the flavor text of their victims when they absorb and transform into them.
  • +
  • Gives Diona a starting funds wage the same as Tajaran and Unathi.
  • +
  • Brain damage no longer prevent implant removal surgery.
  • +
+ +

12 May 2016

+

Yoshax updated:

+
    +
  • Doubles the maximum length of records and names to 6144 & 52, respectively. Also increases book length to 12288. (All numbers are in characters.)
  • +
  • Makes various services in the antag uplink purchasable once again. This includes the fake crew arrival.
  • +
  • Neckgrabs will no longer force people to the ground. In addition, weakened people can no longer resist.
  • +
  • All vending machines now have a small chance of vending an additional item.
  • +
  • Smoke from smoke bombs now lasts approximately 3 times as long and spawns some more smoke to make a heavier cloud.
  • +
  • Smoke from smoke bombs now properly does a small amount of oxygen loss damage. This damage is per cloud of smoke.
  • +
+

05 May 2016

Datraen updated: