diff --git a/modular_darkpack/modules/computers/code/app.dm b/modular_darkpack/modules/computers/code/app.dm
deleted file mode 100644
index 9d6ad7f175f4..000000000000
--- a/modular_darkpack/modules/computers/code/app.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/datum/app
- var/title
- var/x = 50
- var/y = 50
- var/minimized= FALSE
- var/launched = FALSE
- var/app_type
- var/width = 660
- var/height = 500
- var/desktop_app = TRUE
-
-/datum/app/proc/data()
- var/list/data = list()
- data["launched"]= launched
- data["type"]= app_type
- data["title"]= title
- data["minimized"]= minimized
- data["x"]= x
- data["y"]= y
- data["width"]= width
- data["height"]= height
- data["desktop_app"]= desktop_app
- return data
diff --git a/modular_darkpack/modules/computers/code/app_types.dm b/modular_darkpack/modules/computers/code/app_types.dm
deleted file mode 100644
index fe69ff27d236..000000000000
--- a/modular_darkpack/modules/computers/code/app_types.dm
+++ /dev/null
@@ -1,126 +0,0 @@
-
-/datum/app/icq
- title = "ICQ"
- app_type = "icq"
- var/list/datum/message/messages = list()
- var/username = ""
-
-/datum/app/icq/proc/SendMessage(message)
- var/datum/message/send = new(username, message)
- for(var/obj/vampire_computer/C in GLOB.vampire_computers)
- var/datum/app/icq/app = C.apps[1]
- app.messages += send
-
-/datum/app/icq/data()
- . = ..()
- . += list("username" = username)
- var/list/data_messages = list()
- for(var/datum/message/message in messages)
- data_messages += list(list("author" = message.author, "message" = message.message))
- . += list("messages" = data_messages)
-
-/datum/message
- var/author
- var/message
-
-/datum/message/New(param_author, param_message)
- author = param_author
- message = param_message
-
-/datum/app/error
- title = "Error!"
- app_type = "error"
- width = 330
- height = 100
- x = 300
- y = 300
- desktop_app = FALSE
- var/error_message
-
-/datum/app/error/data()
- . = ..()
- . += list("error_message" = error_message)
-
-/datum/app/notepad
- title = "Notepad"
- app_type = "notepad"
- var/text
- var/wordWrap = FALSE
-
-/datum/app/notepad/data()
- . = ..()
- . += list("text" = text)
- . += list("wordWrap" = wordWrap)
-
-/datum/app/gmail
- title = "Gmail"
- app_type = "gmail"
- var/list/datum/email/emails = list()
- var/email_adress = "test@gmail.com"
- var/screen = 1
- var/datum/email/current_email
-
-/datum/app/gmail/data()
- . = ..()
- .+=list("email_adress" = email_adress)
- var/list/data_emails = list()
- for(var/datum/email/email in emails)
- var/list/data_email = email.to_data()
- data_email["reference"] = REF(email)
- data_emails += list(data_email)
- . += list("emails" = data_emails)
- . += list("screen" = screen)
- if(current_email)
- var/list/data_current_email = current_email.to_data()
- data_current_email["reference"] = REF(current_email)
- . += list("current_email" = data_current_email)
-
-
-/datum/app/gmail/proc/send_email(param_message, params_subject, params_to)
- var/datum/email/email = new (email_adress, param_message, params_subject)
- for(var/obj/vampire_computer/C in GLOB.vampire_computers)
- var/datum/app/gmail/gmail = C.apps[3]
- if(gmail.email_adress == params_to)
- gmail.emails.Add(email)
- screen = 1
- return TRUE
- return FALSE
-
-/datum/app/gmail/proc/generate_email()
- var/newEmail
- newEmail += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le")
- newEmail += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai")
- newEmail += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
- newEmail += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
- newEmail += "@gmail.com"
- email_adress = newEmail
-
-/datum/email
- var/sender
- var/message
- var/date
- var/checked = FALSE
- var/stared = FALSE
- var/email_title = "none"
- var/subject
-
-/datum/email/New(param_sender, param_message, param_subject)
- sender = param_sender
- subject = param_subject
- message = param_message
- date = station_time_timestamp("hh:mm")
-
-/datum/email/proc/to_data()
- var/list/data = list("subject"=subject, "sender" = sender, "message" = message, "date" = date, "checked" = checked, "stared" = stared)
- return data
-
-/datum/app/news
- title = "News"
- app_type = "news"
- var/text = "No messages"
- var/can_send = FALSE
-
-/datum/app/news/data()
- .=..()
- . += list("text"=text)
- . += list("can_send"=can_send)
diff --git a/modular_darkpack/modules/computers/code/computer.dm b/modular_darkpack/modules/computers/code/computer.dm
deleted file mode 100644
index 9fa5424129a6..000000000000
--- a/modular_darkpack/modules/computers/code/computer.dm
+++ /dev/null
@@ -1,277 +0,0 @@
-GLOBAL_LIST_EMPTY(vampire_computers)
-
-/obj/vampire_computer
- name = "computer"
- desc = "See the Internet."
- icon = 'modular_darkpack/modules/deprecated/icons/props.dmi'
- icon_state = "computer"
- plane = GAME_PLANE
- layer = CAR_LAYER
- anchored = TRUE
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
- var/main = FALSE
- var/datum/app/current_app
- var/datum/app/focus_app
- var/list/datum/app/apps = list()
- var/owner = "none"
- var/logged = FALSE
- var/x_pos = 0
- var/y_pos = 0
- var/password
- var/username
-
-
-/obj/vampire_computer/Initialize(mapload)
- . = ..()
- GLOB.vampire_computers += src
- username = gen_username()
- password = gen_pass()
- var/obj/item/paper/password_paper = new (loc)
- password_paper.name = "don't forget your password!"
- password_paper.info = "
Hello, [username]!
I have to remind you about it again, but please don't forget your password - [password]"
- var/datum/app/icq/icq = new ()
- var/datum/app/notepad/notepad = new ()
- var/datum/app/gmail/gmail = new ()
- var/datum/app/news/news = new ()
-
- gmail.generate_email()
- if(main)
- news.can_send = TRUE
- // Отправка почты на комп принца от всех, у кого owner это не none, а, например, regent
- apps.Add(icq)
- apps.Add(notepad)
- apps.Add(gmail)
- apps.Add(news)
-
- for(var/obj/vampire_computer/C in GLOB.vampire_computers)
- if(C.main)
- if(owner != "none")
- var/datum/app/gmail/main_gmail = C.apps[3]
- main_gmail.send_email("Hello! This message is from [owner]'s computer.", "Hello!", gmail.email_adress)
-
-/obj/vampire_computer/attack_hand(mob/user)
- . = ..()
- /* I cant verify the lore accuracy of "rejection past your embrace age" and we dont have a invention date for tech to represent it either
- var/bad_at_computers = FALSE
- if(isliving(user))
- var/mob/living/living_user = user
- bad_at_computers = (living_user.st_get_stat(STAT_COMPUTER) < 1) || HAS_TRAIT(user, TRAIT_REJECTED_BY_TECHNOLOGY)
- if(bad_at_computers)
- to_chat(user, span_warning("You start interacting with [src]. Confounded machine..."))
- if(!do_after(user, 1 TURNS, src))
- to_chat(user, span_warning("Bah! You didn't need the machine anyways."))
- return
- */
- ui_interact(user)
-
-/obj/vampire_computer/Destroy()
- . = ..()
- GLOB.vampire_computers -= src
-
-/obj/vampire_computer/prince
- icon_state = "computerprince"
- main = TRUE
-
-/obj/vampire_computer/ui_act(action, list/params)
- . = ..()
- if(.)
- return
- switch(action)
- if("set_notepad_text")
- var/datum/app/notepad/app = locate(params["ref"]) in apps
- app.text = params["text"]
- return TRUE
- if("set_current_app")
- current_app = locate(params["ref"]) in apps
- current_app.minimized = FALSE
- return TRUE
- if("set_focus_app")
- var/datum/app/app = locate(params["ref"]) in apps
- focus_app = app
- return TRUE
- if("launch_app")
- var/datum/app/app = locate(params["ref"]) in apps
- if(!app.launched)
- app.launched = TRUE
- else
- app.minimized = FALSE
- current_app = app
- focus_app = null
- if(istype(app, /datum/app/news) && icon_state == "computermessage")
- icon_state = initial(icon_state)
- return TRUE
- if("close")
- var/datum/app/app = locate(params["ref"]) in apps
- app.launched = FALSE
- if(!app.desktop_app)
- apps.Remove(app)
- return TRUE
- if("minimize")
- var/datum/app/app = locate(params["ref"]) in apps
- if(app.minimized)
- app.minimized = FALSE
- else
- app.minimized = TRUE
- current_app = null
- return TRUE
- if("set_app_cords")
- var/datum/app/app = locate(params["ref"]) in apps
- app.x = set_cords(params["rel_x"], 1185, 0)
- app.y = set_cords(params["rel_y"], 600, 0)
- return TRUE
- if("send_message")
- if(params["message"] != "" && params["message"])
- var/datum/app/icq/app = locate(params["ref"]) in apps
- app.SendMessage(params["message"])
- return TRUE
- if("icq_login_user")
- if(params["username"] != "" && params["username"])
- for(var/obj/vampire_computer/C in GLOB.vampire_computers)
- var/datum/app/icq/icq = C.apps[1]
- if(icq.username == params["username"])
- throw_error("This name is already exists!")
- return TRUE
- var/datum/app/icq/app = locate(params["ref"]) in apps
- app.username = params["username"]
- return TRUE
- if("set_email_check")
- var/datum/app/gmail/gmail = apps[3]
- var/datum/email/email = locate(params["ref"]) in gmail.emails
- if(!email.checked)
- email.checked = TRUE
- else
- email.checked = FALSE
- return TRUE
- if("set_email_star")
- var/datum/app/gmail/gmail = apps[3]
- var/datum/email/email = locate(params["ref"]) in gmail.emails
- if(!email.stared)
- email.stared = TRUE
- else
- email.stared = FALSE
- return TRUE
- if("select_all_emails")
- var/datum/app/gmail/gmail = apps[3]
- for(var/datum/email/email in gmail.emails)
- email.checked = TRUE
- return TRUE
- if("deselect_all_emails")
- var/datum/app/gmail/gmail = apps[3]
- for(var/datum/email/email in gmail.emails)
- email.checked = FALSE
- return TRUE
- if("delete_emails")
- var/datum/app/gmail/gmail = apps[3]
- for(var/datum/email/email in gmail.emails)
- if(email.checked)
- gmail.emails.Remove(email)
- return TRUE
- if("gmail_switch_screen")
- var/datum/app/gmail/gmail = apps[3]
- gmail.screen = params["screen"]
- return TRUE
- if("set_current_email")
- var/datum/app/gmail/gmail = apps[3]
- gmail.current_email = locate(params["ref"]) in gmail.emails
- return TRUE
- if("news_send_message")
- if(params["message"] != "" && params["message"])
- for(var/obj/vampire_computer/C in GLOB.vampire_computers)
- var/datum/app/news/news = C.apps[4]
- var/message = trim(copytext_char(sanitize(params["message"]), 1, MAX_MESSAGE_LEN))
- news.text = message
- message_admins("[key_name(usr)] sent an announcement:\"- [message]\"")
- if(!C.main)
- C.say("New announcement from Prince!")
- C.icon_state = "computermessage"
- else
- C.say("Announcement sent.")
- for(var/obj/item/smartphone/P in GLOB.phones_list)
- P.say("New announcement!")
- return TRUE
- if("delete_email")
- var/datum/app/gmail/gmail = apps[3]
- var/datum/email/email = locate(params["ref"]) in gmail.emails
- gmail.emails.Remove(email)
- gmail.screen = 1
- return TRUE
- if("gmail_send_email")
- var/datum/app/gmail/gmail = apps[3]
- if(!params["message"])
- throw_error("You must write a message!")
- return TRUE
- else if(!params["subject"])
- throw_error("You must write a subject!")
- return TRUE
- else if(!params["to"])
- throw_error("You must write a receiver adress!")
- return TRUE
- var/sended = gmail.send_email(params["message"], params["subject"], params["to"])
- if(!sended)
- throw_error("This email is not exists!")
- return TRUE
- if("login")
- if(params["username"] == username && params["password"] == password)
- playsound(loc, 'sound/winxp/startup.wav', 100)
- logged = TRUE
- return TRUE
- else
- playsound(loc, 'sound/winxp/error.wav', 100)
- return TRUE
-
-/obj/vampire_computer/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "WindowsXP", "WindowsXP")
- ui.open()
-
-/obj/vampire_computer/proc/throw_error(error)
- playsound(loc, 'sound/winxp/error.wav', 100)
- var/datum/app/error/error_app = new ()
- error_app.error_message = error
- error_app.launched = TRUE
- current_app = error_app
- apps.Add(error_app)
-
-/obj/vampire_computer/proc/set_cords(cord, max, min)
- if(cord < max && cord > min)
- return cord
- else if(cord > max)
- return max
- else if(cord < min)
- return min
-
-
-/obj/vampire_computer/ui_data(mob/user)
- var/list/data = list()
- var/list/data_apps = list()
-
- for(var/datum/app/app in apps)
- var/list/app_data = app.data()
- app_data["reference"] =REF(app)
- data_apps += list(app_data)
-
- data["apps"] = data_apps
- data["current_app"] = 0
- if(current_app)
- data["current_app"] = REF(current_app)
-
- data["focus_ref"] = REF(focus_app)
- data["logged"] = logged
- data["password"] = password
- data["x"] = x_pos
- data["y"] = y_pos
- return data
-
-/obj/vampire_computer/proc/gen_username()
- var/name = pick(GLOB.first_names_male + GLOB.first_names_female)
- name += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
- name += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
- return name
-
-/obj/vampire_computer/proc/gen_pass()
- var/newPass
- newPass += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le")
- newPass += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai")
- newPass += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
- return newPass
diff --git a/modular_darkpack/modules/delivery/code/_delivery_defs_gvars.dm b/modular_darkpack/modules/delivery/code/_delivery_defs_gvars.dm
deleted file mode 100644
index c206cd05a8e3..000000000000
--- a/modular_darkpack/modules/delivery/code/_delivery_defs_gvars.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-GLOBAL_LIST_EMPTY(delivery_garage_areas)
-GLOBAL_LIST_EMPTY(delivery_available_veh_spawners)
-GLOBAL_LIST_EMPTY(delivery_available_receivers)
-GLOBAL_LIST_EMPTY(delivery_available_dispensers)
-GLOBAL_LIST_EMPTY(delivery_stats)
diff --git a/modular_darkpack/modules/delivery/code/delivery_areas.dm b/modular_darkpack/modules/delivery/code/delivery_areas.dm
deleted file mode 100644
index ab81d5fcdbd6..000000000000
--- a/modular_darkpack/modules/delivery/code/delivery_areas.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/area/vtm/interior/delivery
- name = "Delivery office"
- icon = 'modular_darkpack/modules/areas/icons/areas.dmi'
- icon_state = "shop"
- fire_controled = TRUE
- var/delivery_employer_tag = "default"
-
-/area/vtm/interior/delivery_garage
- name = "Delivery garage"
- icon = 'modular_darkpack/modules/areas/icons/areas.dmi'
- icon_state = "strip"
- fire_controled = TRUE
- var/delivery_employer_tag = "default"
-
-/area/vtm/interior/delivery_garage/Initialize(mapload)
- GLOB.delivery_garage_areas.Add(src)
- . = ..()
-
-/area/vtm/interior/delivery_garage/Destroy()
- GLOB.delivery_garage_areas.Remove(src)
- . = ..()
diff --git a/modular_darkpack/modules/delivery/code/delivery_datums.dm b/modular_darkpack/modules/delivery/code/delivery_datums.dm
deleted file mode 100644
index 56dda93b7864..000000000000
--- a/modular_darkpack/modules/delivery/code/delivery_datums.dm
+++ /dev/null
@@ -1,733 +0,0 @@
-/datum/delivery_datum/
- var/delivery_employer_tag
- var/contract_difficulty
- var/obj/structure/delivery_board/board
- var/obj/item/delivery_contract/contract
- var/mob/original_owner
- var/list/contract_takers = list()
- var/area/vtm/interior/delivery_garage/garage_area
- var/obj/effect/landmark/delivery_truck_beacon/truck_spawner
- var/obj/darkpack_car/delivery_truck/active_truck
- var/list/spawned_keys = list()
- var/list/delivery_dispensers = list()
- var/list/delivery_receivers = list()
- var/list/crate_designations = list()
- var/list/active_crates = list()
- var/list/delivery_score = list(
- "trucks_used" = 0,
- "truck_returned" = 0,
- "dispensed_crates" = 0,
- "delivered_crates" = 0,
- "misdelivered_crates" = 0,
- "completed_receivers" = 0,
- "manifest_refresh" = 0,
- "timeout_timestamp" = 0,
- )
-
-/datum/delivery_datum/proc/create_stats_table()
- GLOB.delivery_stats = list(
- "oops" = list(
- "income" = 0,
- "grade" = 0,
- "completed" = 0,
- "completed_receivers" = 0,
- "delivered_crates" = 0,
- ),
- "millenium_delivery" = list(
- "income" = 0,
- "grade" = 0,
- "completed" = 0,
- "completed_receivers" = 0,
- "delivered_crates" = 0,
- ),
- "bar_delivery" = list(
- "income" = 0,
- "grade" = 0,
- "completed" = 0,
- "completed_receivers" = 0,
- "delivered_crates" = 0,
- ),
- )
-
-/datum/delivery_datum/proc/track_stats(grade,income)
- if(GLOB.delivery_stats.len == 0) create_stats_table()
- GLOB.delivery_stats["[delivery_employer_tag]"]["income"] += income
- GLOB.delivery_stats["[delivery_employer_tag]"]["grade"] += grade
- GLOB.delivery_stats["[delivery_employer_tag]"]["completed"] += 1
- GLOB.delivery_stats["[delivery_employer_tag]"]["completed_receivers"] += delivery_score["completed_receivers"]
- GLOB.delivery_stats["[delivery_employer_tag]"]["delivered_crates"] += delivery_score["delivered_crates"]
- return
-
-/datum/delivery_datum/proc/process_payouts(grade)
- var/payout_quota = 0
- payout_quota += delivery_score["delivered_crates"] * 100
- payout_quota += delivery_score["completed_receivers"] * 200
- var/payout_multiplier
- switch(grade)
- if(7)
- payout_multiplier = 1.5
- if(6)
- payout_multiplier = 1.3
- if(5)
- payout_multiplier = 1.1
- if(4)
- payout_multiplier = 1
- if(3)
- payout_multiplier = 0.9
- if(2)
- payout_multiplier = 0.7
- if(1)
- payout_multiplier = 0.5
- payout_quota *= payout_multiplier
- track_stats(grade,payout_quota)
- var/final_payout = round((payout_quota / contract_takers.len),1)
- broadcast_to_holders("Delivery Complete. [final_payout] paid to the accounts of all participants.")
- for(var/mob/living/carbon/human/payee in contract_takers)
- if(!payee.account_id)
- continue
- var/datum/bank_account/payee_account = SSeconomy.bank_accounts_by_id["[payee.account_id]"]
- payee_account.account_balance += final_payout
-
-
-/datum/delivery_datum/proc/parse_grade(grade)
- if(!grade) return
- switch(grade)
- if(7)
- return "S"
- if(6)
- return "A"
- if(5)
- return "B"
- if(4)
- return "C"
- if(3)
- return "D"
- if(2)
- return "E"
- if(1)
- return "F"
-
-/datum/delivery_datum/proc/delivery_finish()
- if(active_truck)
- var/area/truck_area = get_area(active_truck)
- if(truck_area == garage_area) delivery_score["truck_returned"] = 1
- var/final_grade = 7
- if(world.time > delivery_score["timeout_timestamp"])
- final_grade -= 3
- if(delivery_receivers.len > 0)
- final_grade -= 5
- if(delivery_score["trucks_used"] > 1)
- final_grade -= 1
- if(delivery_score["truck_returned"] == 0)
- final_grade -= 1
- if(delivery_score["dispensed_crates"] > delivery_score["delivered_crates"])
- final_grade -= 1
- if(delivery_score["misdelivered_crates"] > 0)
- final_grade -= 1
- if(delivery_score["manifest_refresh"] > 3)
- final_grade -= 1
- if(final_grade < 1) final_grade = 1
- broadcast_to_holders("Delivery Grade: [parse_grade(final_grade)]")
- process_payouts(final_grade)
- qdel(contract)
- qdel(src)
-
-
-/datum/delivery_datum/proc/add_owner(mob/user)
- if(contract_takers.Find(user) == 0)
- contract_takers.Add(user)
- return 1
- else
- return 0
-
-/datum/delivery_datum/proc/check_owner(mob/user)
- if(contract_takers.Find(user) == 0)
- return 0
- else
- return 1
-
-/datum/delivery_datum/proc/check_complete()
- if(delivery_receivers.len == 0)
- return 1
- else
- return 0
-
-/datum/delivery_datum/proc/broadcast_to_holders(message)
- if(!message) return
- for (var/mob/living/carbon/human/mob in contract_takers)
- to_chat(mob, "[message]
")
-
-/datum/delivery_datum/proc/receiver_complete(obj/receiver)
- var/obj/structure/delivery_receiver/target_receiver = receiver
- delivery_receivers.Remove(target_receiver)
- delivery_score["completed_receivers"] += 1
- if(check_complete() == 1)
- broadcast_to_holders("All deliveries have been completed. Please return the truck and any outstanding cargo back to the office to finalize the contract!")
- else
- broadcast_to_holders("Delivery to [target_receiver.chute_name] complete. [num2text(delivery_receivers.len)] chutes remain.")
-
-/datum/delivery_datum/proc/assign_dispenser(tag)
- var/list/dispenser_candidates = list()
- for(var/obj/structure/delivery_dispenser/dispenser_candidate in GLOB.delivery_available_dispensers)
- if(dispenser_candidate.dispenser_active == 0 && dispenser_candidate.delivery_employer_tag == delivery_employer_tag)
- dispenser_candidates.Add(dispenser_candidate)
- if(dispenser_candidates.len == 0) return 0
- var/obj/structure/delivery_dispenser/picked_dispenser = pick(dispenser_candidates)
- picked_dispenser.dispenser_active = 1
- picked_dispenser.crate_type = tag
- switch(tag)
- if("red")
- picked_dispenser.light_color = "#e71a1a"
- picked_dispenser.set_light(1)
- if("blue")
- picked_dispenser.light_color = "#1725e9"
- picked_dispenser.set_light(1)
- if("yellow")
- picked_dispenser.light_color = "#f5df1e"
- picked_dispenser.set_light(1)
- if("green")
- picked_dispenser.light_color = "#25eb13"
- picked_dispenser.set_light(1)
- delivery_dispensers.Add(picked_dispenser)
- animate(picked_dispenser,alpha = 255,time = 5 SECONDS)
- picked_dispenser.mouse_opacity = MOUSE_OPACITY_ICON
- return 1
-
-/datum/delivery_datum/proc/assign_receivers(ammount)
- var/receivers_to_assign
- var/list/receiver_list = list()
- receiver_list = GLOB.delivery_available_receivers.Copy()
- for(var/obj/structure/delivery_receiver/receiver_candidate in receiver_list)
- if(receiver_candidate.delivery_in_use == 1) receiver_list.Remove(receiver_candidate)
- if(!ammount)
- receivers_to_assign = 5
- else
- receivers_to_assign = ammount
- while(receivers_to_assign > 0)
- var/picked_receiver = pick(receiver_list)
- delivery_receivers.Add(picked_receiver)
- receiver_list.Remove(picked_receiver)
- receivers_to_assign -= 1
-
-/datum/delivery_datum/proc/assign_crates(ammount_min,ammount_max)
- if(!ammount_min || !ammount_max) return
- if(delivery_receivers.len == 0) return
- for(var/obj/structure/delivery_receiver/receiver in delivery_receivers)
- receiver.delivery_in_use = 1
- var/crate_number = rand(ammount_min,ammount_max)
- while(crate_number > 0)
- var/picked_type = pick("red","green","yellow","blue")
- receiver.delivery_status[picked_type] += 1
- crate_number -= 1
- animate(receiver,alpha = 255, time = 5 SECONDS)
- receiver.set_light(2)
- receiver.mouse_opacity = MOUSE_OPACITY_ICON
-
-/datum/delivery_datum/proc/assign_garage()
- if(!delivery_employer_tag) return 0
- for(var/area/vtm/interior/delivery_garage/potential_garage_area in GLOB.delivery_garage_areas)
- if(potential_garage_area.delivery_employer_tag == delivery_employer_tag)
- garage_area = potential_garage_area
- break
- if(!garage_area) return 0
- for(var/obj/effect/landmark/delivery_truck_beacon/potential_truck_spawner in GLOB.delivery_available_veh_spawners)
- if(potential_truck_spawner.delivery_employer_tag == delivery_employer_tag)
- truck_spawner = potential_truck_spawner
- break
- if(!truck_spawner) return 0
-
-/datum/delivery_datum/proc/spawn_truck()
- if(active_truck) return 0
- if(!truck_spawner) return "err"
- truck_spawner.spawn_truck(src)
- delivery_score["trucks_used"] += 1
-
-/datum/delivery_datum/proc/delivery_timeout()
- broadcast_to_holders("Delivery timer expired. Deactivating any outstanding receivers. You have five minutes to return the truck and any outstanding cargo.")
- if(delivery_receivers.len != 0)
- for(var/obj/structure/delivery_receiver/receiver in delivery_receivers)
- receiver.reset_receiver()
- addtimer(CALLBACK(src,PROC_REF(delivery_finish)),5 MINUTES)
-
-/datum/delivery_datum/proc/delivery_set_timer(delay)
- if(!delay) return
- var/timer_value = world.time + delay
- delivery_score["timeout_timestamp"] = timer_value
- addtimer(CALLBACK(src,PROC_REF(delivery_timeout)),delay + 10)
-
-/datum/delivery_datum/proc/check_conditions()
- var/receiver_number
- switch(contract_difficulty)
- if(1)
- receiver_number = 3
- if(2)
- receiver_number = 5
- if(3)
- receiver_number = 7
- var/list/receiver_list = list()
- receiver_list = GLOB.delivery_available_receivers.Copy()
- for(var/obj/structure/delivery_receiver/potential_receiver in receiver_list)
- if(potential_receiver.delivery_in_use == 1) receiver_list.Remove(potential_receiver)
- if(receiver_list.len < receiver_number)
- broadcast_to_holders("Error: Not enough delivery receivers. Too many deliveries in progress. Contract aborted.")
- return 0
- return 1
-
-/datum/delivery_datum/proc/start_contract()
- if(check_conditions(contract_difficulty) == 0) return "fail_reci"
- if(assign_garage() == 0) return "fail_garage"
- if(assign_dispenser("red") == 0) return "fail_disp"
- if(assign_dispenser("blue") == 0) return "fail_disp"
- if(assign_dispenser("yellow") == 0) return "fail_disp"
- if(assign_dispenser("green") == 0) return "fail_disp"
- if(spawn_truck() == 0) return "fail_truck"
- switch(contract_difficulty)
- if(1)
- assign_receivers(3)
- assign_crates(3,6)
- delivery_set_timer(20 MINUTES)
- if(2)
- assign_receivers(5)
- assign_crates(7,10)
- delivery_set_timer(45 MINUTES)
- if(3)
- assign_receivers(7)
- assign_crates(9,15)
- delivery_set_timer(90 MINUTES)
- return 1
-
-/datum/delivery_datum/New(mob/user,obj/board_ref,difficulty)
- original_owner = user
- add_owner(user)
- board = board_ref
- delivery_employer_tag = board.delivery_employer_tag
- contract_difficulty = difficulty
- if(board.crate_types.len != 0)
- crate_designations = list()
- crate_designations = board.crate_types.Copy()
-
-/datum/delivery_datum/Destroy(force, ...)
- if(board)
- if(board.delivery_started == 1) board.delivery_cooldown(5 MINUTES)
- board.delivery_started = 0
- board = null
- contract = null
- original_owner = null
- contract_takers = list()
- garage_area = null
- truck_spawner = null
- if(active_truck)
- qdel(active_truck)
- if(delivery_dispensers.len != 0)
- for(var/obj/structure/delivery_dispenser/dispenser in delivery_dispensers)
- dispenser.reset_dispenser()
- delivery_dispensers = list()
- if(delivery_receivers.len != 0)
- for(var/obj/structure/delivery_receiver/receiver in delivery_receivers)
- receiver.reset_receiver()
- delivery_receivers = list()
- if(active_crates.len != 0)
- for(var/obj/structure/delivery_crate/crate in active_crates)
- qdel(crate)
- active_crates = list()
- if(spawned_keys.len != 0)
- for(var/obj/item/vamp/keys/cargo_truck/truck_key in spawned_keys)
- qdel(truck_key)
- if(contract)
- qdel(contract)
- . = ..()
-
-
-/datum/delivery_storage/
- var/obj/darkpack_car/delivery_truck/owner
- var/capacity = 20
- var/search_delay = 1 SECONDS
- var/list/user_list = list()
- var/users_max = 3
- var/list/storage = list()
-
-/datum/delivery_storage/Destroy(force, ...)
- user_list = list()
- if(storage.len != 0)
- for (var/obj/structure/delivery_crate/crate in storage)
- storage.Remove(crate)
- qdel(crate)
- . = ..()
-
-
-/datum/delivery_storage/New(obj/truck,cap,delay,max_users)
- if(truck) owner = truck
- if(cap)
- capacity = cap
- if(delay)
- search_delay = delay
- if(max_users)
- users_max = max_users
- . = ..()
-
-/datum/delivery_storage/proc/check_use(type,mob/user)
- switch(type)
- if(1)
- if(user_list.len >= users_max) return 2
- if(user_list.Find(user) == 0)
- user_list.Add(user)
- return 1
- else
- return 0
- if(2)
- user_list.Remove(user)
- return
-
-/datum/delivery_storage/proc/add_to_storage(mob/user,obj/crate)
- if(storage.len >= capacity)
- to_chat(user, span_warning("The truck is full!"))
- return
- switch(check_use(1,user))
- if(2)
- to_chat(user, span_warning("Too many people are using the truck at once."))
- if(0)
- to_chat(user, span_warning("You are already using the truck."))
- if(1)
- storage.Add(crate)
- crate.forceMove(owner)
- check_use(2,user)
-
-/datum/delivery_storage/proc/calculate_ret_time(obj/crate)
- var/crate_position = storage.Find(crate)
- var/timer_calc = crate_position * search_delay
- return timer_calc
-
-/datum/delivery_storage/proc/retrieval_menu(mob/user)
- if(!user) return
- switch(check_use(1,user))
- if(2)
- to_chat(user, span_warning("Too many people are using the truck at once."))
- return
- if(0)
- to_chat(user, span_warning("You are already using the truck."))
- if(1)
- var/list/available_tags = list()
- var/obj/structure/delivery_crate/picked_crate
- var/chosen_tag
- for (var/obj/structure/delivery_crate/crate in storage)
- if(!crate)
- check_use(2,user)
- return
- if(available_tags.Find(crate.crate_type) == 0)
- available_tags.Add(crate.crate_type)
- if(available_tags.len == 0)
- check_use(2,user)
- return
- if(available_tags.len == 1)
- for(var/obj/structure/delivery_crate/crate_to_ret in storage)
- picked_crate = crate_to_ret
- chosen_tag = crate_to_ret.crate_type
- if(!picked_crate)
- chosen_tag = tgui_input_list(user, "Current load: [storage.len] / [capacity], Available Crates:","Crate choice",available_tags,timeout = 20 SECONDS)
- if(!chosen_tag)
- check_use(2,user)
- return
- for(var/obj/structure/delivery_crate/crate_to_ret in storage)
- if(crate_to_ret.crate_type == chosen_tag)
- picked_crate = crate_to_ret
- break
- playsound(owner,'sound/effects/cargocrate_move.ogg',50, 10)
- var/ret_delay = 1 SECONDS + calculate_ret_time(picked_crate)
- if(do_after(user, ret_delay, owner))
- playsound(owner,'sound/effects/cargocrate_unload.ogg',50, 10)
- var/turf/user_turf = get_turf(user)
- storage.Remove(picked_crate)
- picked_crate.forceMove(user_turf)
- check_use(2,user)
-
-
-/datum/delivery_manifest/
-
- var/datum/delivery_datum/delivery
- var/list/saved_receivers = list()
- var/list/saved_data = list(
- "dispensed_crates" = 0,
- "delivered_crates" = 0,
- "manifest_refresh" = 0,
- "time_left" = "none",
- )
-
-/datum/delivery_manifest/New(datum/delivery_datum)
- delivery = delivery_datum
- . = ..()
-
-/datum/delivery_manifest/Destroy(force, ...)
- delivery = null
- saved_receivers = list()
- . = ..()
-
-
-/datum/delivery_manifest/proc/save_data(init)
- if(!delivery) return
- saved_receivers = list()
- if(delivery.delivery_receivers.len > 0)
- var/current_position = 1
- while(current_position <= delivery.delivery_receivers.len)
- var/obj/structure/delivery_receiver/receiver_saved = delivery.delivery_receivers[current_position]
- var/turf/receiver_turf = get_turf(receiver_saved)
-
- var/list/list_saved = list("[current_position]" = list(
- "chute_name" = receiver_saved.chute_name,
- "red" = receiver_saved.delivery_status["red"],
- "blue" = receiver_saved.delivery_status["blue"],
- "yellow" = receiver_saved.delivery_status["yellow"],
- "green" = receiver_saved.delivery_status["green"],
- "x" = receiver_turf.x,
- "y" = receiver_turf.y,
- "z" = receiver_turf.z,
- )
- )
- saved_receivers.Add(list_saved)
- current_position += 1
-
- if(!init) delivery.delivery_score["manifest_refresh"] += 1
- saved_data["dispensed_crates"] = delivery.delivery_score["dispensed_crates"]
- saved_data["delivered_crates"] = delivery.delivery_score["delivered_crates"]
- saved_data["manifest_refresh"] = delivery.delivery_score["manifest_refresh"]
- var/time_left_raw = delivery.delivery_score["timeout_timestamp"] - world.time
- if(time_left_raw <= 0)
- saved_data["time_left"] = "TIMED OUT"
- else
- saved_data["time_left"] = time2text(time_left_raw,"mm:ss")
-
-/datum/delivery_manifest/proc/get_cargo_color_value(tag)
- if(delivery.crate_designations.Find(tag) != 0)
- return delivery.crate_designations["[tag]"]["color"]
- return "#ffffff"
-
-/datum/delivery_manifest/proc/get_cargo_name(tag)
- if(delivery.crate_designations.Find(tag) != 0)
- return delivery.crate_designations["[tag]"]["cargo_name"]
- return "#ffffff"
-
-
-/datum/delivery_manifest/proc/read_data(mob/user)
- if(!user) return
- var/turf/user_turf = get_turf(user)
- var/html
- html += {"
-
-
-
-
-
-
- "}
- html += "Current coordinates: X:[user_turf.x] Y:[user_turf.y] Z: [user_turf.z]
"
- if(saved_receivers.len == 0)
- html += "No receivers found. Return the truck to the garage and any outstanding crates to their dispensers, then return the contract to the board.
"
- else
- html += "OUTSDANDING DELIVERIES
"
- var/current_position = 1
- while(current_position <= saved_receivers.len)
- html += {"[saved_receivers["[current_position]"]["chute_name"]] - X:[saved_receivers["[current_position]"]["x"]] Y:[saved_receivers["[current_position]"]["y"]] Z:[saved_receivers["[current_position]"]["z"]]
"}
- if(saved_receivers["[current_position]"]["red"] > 0)
- var/cargo_name = get_cargo_name("red")
- var/html_color = get_cargo_color_value("red")
- html += {"[cargo_name] - [saved_receivers["[current_position]"]["red"]] remaining.
"}
- if(saved_receivers["[current_position]"]["blue"] > 0)
- var/cargo_name = get_cargo_name("blue")
- var/html_color = get_cargo_color_value("blue")
- html += {"[cargo_name] - [saved_receivers["[current_position]"]["blue"]] remaining.
"}
- if(saved_receivers["[current_position]"]["yellow"] > 0)
- var/cargo_name = get_cargo_name("yellow")
- var/html_color = get_cargo_color_value("yellow")
- html += {"[cargo_name] - [saved_receivers["[current_position]"]["yellow"]] remaining.
"}
- if(saved_receivers["[current_position]"]["green"] > 0)
- var/cargo_name = get_cargo_name("green")
- var/html_color = get_cargo_color_value("green")
- html += {"[cargo_name] - [saved_receivers["[current_position]"]["green"]] remaining.
"}
- html += "
"
- current_position += 1
- if(delivery.active_truck)
- var/turf/truck_turf = get_turf(delivery.active_truck)
- html += "Truck Active - X:[truck_turf.x] Y:[truck_turf.y] Z:[truck_turf.z]
"
- else
- html += "No truck found.
"
- if(delivery.active_crates.len != 0)
- var/list/turf_list = list()
- for(var/obj/structure/delivery_crate/crate in delivery.active_crates)
- if(crate.loc)
- var/turf/tested_turf = get_turf(crate)
- if(turf_list.Find(tested_turf) == 0)
- turf_list.Add(tested_turf)
- if(turf_list.len != 0)
- html += "Active Crates:
"
- for(var/turf/picked_turf in turf_list)
- html += "X:[picked_turf.x] Y:[picked_turf.y] Z:[picked_turf.z]
"
- html += "
"
- else
- html += "No active crates.
"
- if(delivery.delivery_dispensers.len != 0)
- html += "DISPENSERS:
"
- for(var/obj/structure/delivery_dispenser/dispenser in delivery.delivery_dispensers)
- var/turf/dispenser_turf = get_turf(dispenser)
- var/html_color = get_cargo_color_value(dispenser.crate_type)
- var/cargo_name = get_cargo_name(dispenser.crate_type)
- html += {"[cargo_name] - [dispenser.chute_name] - X:[dispenser_turf.x] Y:[dispenser_turf.y] Z:[dispenser_turf.z]
"}
- else
- html += "Dispensers not found.
"
- html += {""}
- user << browse(html, "window=name;size=800x800")
-
-/datum/controller/subsystem/ticker/proc/calculate_transportation_winners()
- var/list/results_array = list(
- "income" = list(
- "oops" = GLOB.delivery_stats["oops"]["income"],
- "millenium_delivery" = GLOB.delivery_stats["millenium_delivery"]["income"],
- "bar_delivery" = GLOB.delivery_stats["bar_delivery"]["income"],
- ),
- "averages" = list(
- "oops" = 0,
- "millenium_delivery" = 0,
- "bar_delivery" = 0,
- ),
- "completed_receivers" = list(
- "oops" = GLOB.delivery_stats["oops"]["completed_receivers"],
- "millenium_delivery" = GLOB.delivery_stats["millenium_delivery"]["completed_receivers"],
- "bar_delivery" = GLOB.delivery_stats["bar_delivery"]["completed_receivers"],
- ),
- "crates" = list(
- "oops" = GLOB.delivery_stats["oops"]["delivered_crates"],
- "millenium_delivery" = GLOB.delivery_stats["millenium_delivery"]["delivered_crates"],
- "bar_delivery" = GLOB.delivery_stats["bar_delivery"]["delivered_crates"],
- )
- )
-
- if(GLOB.delivery_stats["oops"]["completed"] > 0)
- results_array["averages"]["oops"] = round((GLOB.delivery_stats["oops"]["grade"] / GLOB.delivery_stats["oops"]["completed"]),0.1)
- if(GLOB.delivery_stats["millenium_delivery"]["completed"] > 0)
- results_array["averages"]["millenium_delivery"] = round((GLOB.delivery_stats["millenium_delivery"]["grade"] / GLOB.delivery_stats["millenium_delivery"]["completed"]),0.1)
- if(GLOB.delivery_stats["bar_delivery"]["completed"] > 0)
- results_array["averages"]["bar_delivery"] = round((GLOB.delivery_stats["millenium_delivery"]["grade"] / GLOB.delivery_stats["millenium_delivery"]["completed"]),0.1)
-
- var/list/winners = list(
- "income" = "none",
- "averages" = "none",
- "completed_receivers" = "none",
- "crates" = "none",
- )
-
- if(results_array["income"]["oops"] > results_array["income"]["millenium_delivery"] && results_array["income"]["oops"] > results_array["income"]["bar_delivery"])
- winners["income"] = "oops"
- if(results_array["averages"]["oops"] > results_array["averages"]["millenium_delivery"] && results_array["averages"]["oops"] > results_array["averages"]["bar_delivery"])
- winners["averages"] = "oops"
- if(results_array["completed_receivers"]["oops"] > results_array["completed_receivers"]["millenium_delivery"] && results_array["completed_receivers"]["oops"] > results_array["completed_receivers"]["bar_delivery"])
- winners["completed_receivers"] = "oops"
- if(results_array["crates"]["oops"] > results_array["crates"]["millenium_delivery"] && results_array["crates"]["oops"] > results_array["crates"]["bar_delivery"])
- winners["crates"] = "oops"
-
- if(results_array["income"]["millenium_delivery"] > results_array["income"]["oops"] && results_array["income"]["millenium_delivery"] > results_array["income"]["bar_delivery"])
- winners["income"] = "millenium_delivery"
- if(results_array["averages"]["millenium_delivery"] > results_array["averages"]["oops"] && results_array["averages"]["millenium_delivery"] > results_array["averages"]["bar_delivery"])
- winners["averages"] = "millenium_delivery"
- if(results_array["completed_receivers"]["millenium_delivery"] > results_array["completed_receivers"]["oops"] && results_array["completed_receivers"]["millenium_delivery"] > results_array["completed_receivers"]["bar_delivery"])
- winners["completed_receivers"] = "millenium_delivery"
- if(results_array["crates"]["millenium_delivery"] > results_array["crates"]["oops"] && results_array["crates"]["millenium_delivery"] > results_array["crates"]["bar_delivery"])
- winners["crates"] = "millenium_delivery"
-
- if(results_array["income"]["bar_delivery"] > results_array["income"]["millenium_delivery"] && results_array["income"]["bar_delivery"] > results_array["income"]["oops"])
- winners["income"] = "bar_delivery"
- if(results_array["averages"]["bar_delivery"] > results_array["averages"]["millenium_delivery"] && results_array["averages"]["bar_delivery"] > results_array["averages"]["oops"])
- winners["averages"] = "bar_delivery"
- if(results_array["completed_receivers"]["bar_delivery"] > results_array["completed_receivers"]["millenium_delivery"] && results_array["completed_receivers"]["bar_delivery"] > results_array["completed_receivers"]["oops"])
- winners["completed_receivers"] = "bar_delivery"
- if(results_array["crates"]["bar_delivery"] > results_array["crates"]["millenium_delivery"] && results_array["crates"]["bar_delivery"] > results_array["crates"]["oops"])
- winners["crates"] = "bar_delivery"
-
- return winners
-
-/datum/controller/subsystem/ticker/proc/transportation_report()
- var/list/parts = list()
- parts += "DELIVERY SERVICE REPORT
"
-
- if(GLOB.delivery_stats.len == 0)
- parts += "No deliveries were made this round!
"
- return parts.Join()
-
- var/list/winner_array = calculate_transportation_winners()
-
- if(GLOB.delivery_stats["oops"]["delivered_crates"] > 0)
-
- parts += "OOPS Delivery Service
"
- var/text_color = "#ffffff"
- if(GLOB.delivery_stats["oops"]["completed"] > 0)
- if(winner_array["averages"] == "oops") text_color = "#fffb2b"
- parts += {"Grade Average: [GLOB.delivery_stats["oops"]["grade"] / GLOB.delivery_stats["oops"]["completed"]]
"}
- text_color = "#ffffff"
- if(winner_array["completed_receivers"] == "oops") text_color = "#fffb2b"
- parts += {"receivers Completed: [GLOB.delivery_stats["oops"]["completed_receivers"]]
"}
- text_color = "#ffffff"
- if(winner_array["crates"] == "oops") text_color = "#fffb2b"
- parts += {"Crates Delivered: [GLOB.delivery_stats["oops"]["delivered_crates"]]
"}
- text_color = "#ffffff"
- if(winner_array["income"] == "oops") text_color = "#fffb2b"
- parts += {"
TOTAL INCOME: [GLOB.delivery_stats["oops"]["income"]]
"}
-
- parts += ""
-
- if(GLOB.delivery_stats["millenium_delivery"]["delivered_crates"] > 0)
-
- parts += "Millenium Tower Delivery Service
"
-
- var/text_color = "#ffffff"
- if(GLOB.delivery_stats["millenium_delivery"]["completed"] > 0)
- if(winner_array["averages"] == "millenium_delivery") text_color = "#fffb2b"
- parts += {"Grade Average: [GLOB.delivery_stats["millenium_delivery"]["grade"] / GLOB.delivery_stats["millenium_delivery"]["completed"]]
"}
- text_color = "#ffffff"
- if(winner_array["completed_receivers"] == "millenium_delivery") text_color = "#fffb2b"
- parts += {"receivers Completed: [GLOB.delivery_stats["millenium_delivery"]["completed_receivers"]]
"}
- text_color = "#ffffff"
- if(winner_array["crates"] == "millenium_delivery") text_color = "#fffb2b"
- parts += {"Crates Delivered: [GLOB.delivery_stats["millenium_delivery"]["delivered_crates"]]
"}
- text_color = "#ffffff"
- if(winner_array["income"] == "millenium_delivery") text_color = "#fffb2b"
- parts += {"
TOTAL INCOME: [GLOB.delivery_stats["millenium_delivery"]["income"]]
"}
-
- parts += "
"
-
- if(GLOB.delivery_stats["bar_delivery"]["delivered_crates"] > 0)
-
- parts += "Bar Delivery Service
"
-
- var/text_color = "#ffffff"
- if(GLOB.delivery_stats["bar_delivery"]["completed"] > 0)
- if(winner_array["averages"] == "bar_delivery") text_color = "#fffb2b"
- parts += {"Grade Average: [GLOB.delivery_stats["bar_delivery"]["grade"] / GLOB.delivery_stats["bar_delivery"]["completed"]]
"}
- text_color = "#ffffff"
- if(winner_array["completed_receivers"] == "bar_delivery") text_color = "#fffb2b"
- parts += {"receivers Completed: [GLOB.delivery_stats["bar_delivery"]["completed_receivers"]]
"}
- text_color = "#ffffff"
- if(winner_array["crates"] == "bar_delivery") text_color = "#fffb2b"
- parts += {"Crates Delivered: [GLOB.delivery_stats["bar_delivery"]["delivered_crates"]]
"}
- text_color = "#ffffff"
- if(winner_array["income"] == "bar_delivery") text_color = "#fffb2b"
- parts += {"
TOTAL INCOME: [GLOB.delivery_stats["bar_delivery"]["income"]]
"}
-
- parts += "
"
-
- switch(winner_array["income"])
- if("none")
- parts += "No surplus profits were generated by the delivery network in the city. The businesses continue as they are, without any significant influence over them.
"
- if("oops")
- parts += "As the OOPS Delivery Service maintains its monopoly over the city's nightly delivery service market, surplus profits generated from the deliveries head right to the unknown forces behind the entire operation, benefiting mostly themselves and those who work for them."
- if("millenium_delivery")
- parts += "The Millenium Tower Delivery Service secures the biggest share of the city's delivery market and secures the surplus profits from the night in the name of the Camarilla who moves the funds support Camarilla-aligned interests outside of the city.
"
- if("bar_delivery")
- parts += "The Bar Delivery Service secures the majority of the night's delivery market share and receives the surplus profits from the market. The funds are handed out, according to need, to interests aligned with the Anarch movement outside of the city.
"
-
- parts += "
"
-
- return parts.Join()
diff --git a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_dispensers.dm b/modular_darkpack/modules/delivery/code/delivery_obj/delivery_dispensers.dm
deleted file mode 100644
index ecaa2e62afd8..000000000000
--- a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_dispensers.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-//oops
-
-/obj/structure/delivery_dispenser/oops1
- chute_name = "OOPS Delivery Center - Garage 1"
- delivery_employer_tag = "oops"
-
-/obj/structure/delivery_dispenser/oops2
- chute_name = "OOPS Delivery Center - Garage 2"
- delivery_employer_tag = "oops"
-
-/obj/structure/delivery_dispenser/oops3
- chute_name = "OOPS Delivery Center - Garage 3"
- delivery_employer_tag = "oops"
-
-/obj/structure/delivery_dispenser/oops4
- chute_name = "OOPS Delivery Center - Office 1"
- delivery_employer_tag = "oops"
-
-/obj/structure/delivery_dispenser/oops5
- chute_name = "OOPS Delivery Center - Office 2"
- delivery_employer_tag = "oops"
-
-/obj/structure/delivery_dispenser/oops6
- chute_name = "OOPS Delivery Center - Exterior"
- delivery_employer_tag = "oops"
-
-//millenium
-
-/obj/structure/delivery_dispenser/mt1
- chute_name = "Millenium Tower - Delivery Garage 1"
- delivery_employer_tag = "millenium_delivery"
-
-/obj/structure/delivery_dispenser/mt2
- chute_name = "Millenium Tower - Delivery Garage 2"
- delivery_employer_tag = "millenium_delivery"
-
-/obj/structure/delivery_dispenser/mt3
- chute_name = "Millenium Tower - Back Courtyard 1"
- delivery_employer_tag = "millenium_delivery"
-
-/obj/structure/delivery_dispenser/mt4
- chute_name = "Millenium Tower - Back Courtyard 2"
- delivery_employer_tag = "millenium_delivery"
-
-/obj/structure/delivery_dispenser/mt5
- chute_name = "Millenium Tower - Back Courtyard 3"
- delivery_employer_tag = "millenium_delivery"
-
-/obj/structure/delivery_dispenser/mt6
- chute_name = "Millenium Tower - Delivery Garage Exterior"
- delivery_employer_tag = "millenium_delivery"
-
-//bar
-
-/obj/structure/delivery_dispenser/bar1
- chute_name = "Bar - Delivery Garage 1"
- delivery_employer_tag = "bar_delivery"
-
-/obj/structure/delivery_dispenser/bar2
- chute_name = "Bar - Delivery Garage 2"
- delivery_employer_tag = "bar_delivery"
-
-/obj/structure/delivery_dispenser/bar3
- chute_name = "Bar - Storage Room"
- delivery_employer_tag = "bar_delivery"
-
-/obj/structure/delivery_dispenser/bar4
- chute_name = "Bar - Exterior 1"
- delivery_employer_tag = "bar_delivery"
-
-/obj/structure/delivery_dispenser/bar5
- chute_name = "Bar - Exterior 2"
- delivery_employer_tag = "bar_delivery"
-
-/obj/structure/delivery_dispenser/bar6
- chute_name = "Bar - Exterior 3"
- delivery_employer_tag = "bar_delivery"
diff --git a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_map_defines.dm b/modular_darkpack/modules/delivery/code/delivery_obj/delivery_map_defines.dm
deleted file mode 100644
index 55e188c5c39c..000000000000
--- a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_map_defines.dm
+++ /dev/null
@@ -1,107 +0,0 @@
-// OOPS office defines
-
-/obj/structure/vampdoor/glass/oops_office
- name = "OOPS delivery office"
- lock_id = "oops"
- lockpick_difficulty = 12
-
-/obj/structure/delivery_board/oops_office
- name = "OOPS delivery assigment board"
- delivery_employer_tag = "oops"
- desc = "The OOPS Delivery Service is said to be ran by the same forces that established and maintain the " + CITY_NAME + " nightly delivery market and the ones ultimately setting and surprisingly, diligently following their own rules per securing the surplus of each night's crate 'trade'. Contracts taken from this board will aid the OOPS service in maintaining the market for everyone involved, however this will also have the side effect of filling the coffers of the powers running the company for their unknown ends."
-
-/area/vtm/interior/delivery/oops_office
- name = "OOPS delivery office"
- delivery_employer_tag = "oops"
-
-/area/vtm/interior/delivery_garage/oops_office
- name = "OOPS delivery office - Garage"
- delivery_employer_tag = "oops"
-
-/obj/effect/landmark/delivery_truck_beacon/oops_office
- spawn_dir = WEST
- delivery_employer_tag = "oops"
-
-// Camarilla variant
-
-/obj/structure/vampdoor/glass/mt_office
- name = "Millenium Tower delivery garage"
- lock_id = LOCKACCESS_JAZZ_CLUB_DELIVERY
- lockpick_difficulty = 12
-
-/obj/structure/delivery_board/mt_office
- name = "Millenium Tower delivery assigment board"
- delivery_employer_tag = "millenium_delivery"
- desc = "The Millenium Tower Delivery Service was established once the Ventrue caught on and adopted the OOPS model for themselves and serves as a Camarilla-backed member of the delivery market. Camarilla related deliveries focus more on private matters of the cities Kindred and working for this Service will help the Camarilla secure the nightly market surplus for their own means."
- crate_types = list(
- "red" = list(
- "cargo_name" = "Industrial-Grade Cleaning Supplies",
- "color" = "#7c1313",
- "desc" = "Extremely strong cleaning supplies or base chemicals to manufacture them, in high quantities. One could easily sterilize entire rooms with the contents of these crates. Strong septic smell.",
- ),
- "blue" = list(
- "cargo_name" = "Books and Correspondence",
- "color" = "#202bca",
- "desc" = "Sets of heavy tomes sealed in special containers preventing damage along with modern paperbacks and archived letters both hand and machine written.",
- ),
- "yellow" = list(
- "cargo_name" = "Art Pieces",
- "color" = "#b8ac3f",
- "desc" = "Paintings, Sculptures, Pottery, Artifacts and anything else in between, sealed for safety and sometimes meant for assembly post-delivery. Also any tools required for such assembly.",
- ),
- "green" = list(
- "cargo_name" = "Personal Items",
- "color" = "#165f29",
- "desc" = "Private correspondence and deliveries marked as private. It could be cargo belonging to other crates but earmarked for private delivery due to private reselling or personal use. Typically, just mail but shipped in bulk. ",
- ),
- )
-
-/area/vtm/interior/delivery_garage/mt_office
- name = "Millenium Tower delivery office - Garage"
- delivery_employer_tag = "millenium_delivery"
-
-/obj/effect/landmark/delivery_truck_beacon/mt_office
- spawn_dir = NORTH
- delivery_employer_tag = "millenium_delivery"
-
-//Anarchs
-
-/obj/structure/vampdoor/glass/bar_office
- name = "Bar delivery garage"
- lock_id = LOCKACCESS_BAR_DELIVERY
- lockpick_difficulty = 12
-
-/obj/structure/delivery_board/bar_office
- name = "Bar delivery assigment board"
- delivery_employer_tag = "bar_delivery"
- desc = "The Bar Delivery Service is the Anarch-backed entry onto the deliver market and while initially mostly established to get on the local Camarilla representations nerves, has since grown to its own fully fledged member of the market and serves to provide much needed funds to Anarch aligned partners outside of the city."
- crate_types = list(
- "red" = list(
- "cargo_name" = "Homemade Party Favors",
- "color" = "#7c1313",
- "desc" = "The products of underground fermentation and cultivation, separated into containers appropriate for their form, fully cleared and legal for transport.",
- ),
- "blue" = list(
- "cargo_name" = "Teaching Aides",
- "color" = "#202bca",
- "desc" = "Sharp or blunt tools used to discipline the unruly and reward the smart. All in their original, legal wrappings and clear for transport.",
- ),
- "yellow" = list(
- "cargo_name" = "Care Package",
- "color" = "#b8ac3f",
- "desc" = "Supplies - mostly hermetically sealed food rations, assorted medical supplies as well as clothes and other basics.",
- ),
- "green" = list(
- "cargo_name" = "Personal Items",
- "color" = "#165f29",
- "desc" = "Private correspondence and deliveries marked as private. It could be cargo belonging to other crates but earmarked for private delivery due to private reselling or personal use. Typically, just mail but shipped in bulk. ",
- ),
- )
-
-/area/vtm/interior/delivery_garage/bar_office
- name = "Bar delivery office - Garage"
- delivery_employer_tag = "bar_delivery"
-
-/obj/effect/landmark/delivery_truck_beacon/bar_office
- spawn_dir = SOUTH
- delivery_employer_tag = "bar_delivery"
diff --git a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_recievers.dm b/modular_darkpack/modules/delivery/code/delivery_obj/delivery_recievers.dm
deleted file mode 100644
index 1c57748c4a99..000000000000
--- a/modular_darkpack/modules/delivery/code/delivery_obj/delivery_recievers.dm
+++ /dev/null
@@ -1,98 +0,0 @@
-// Ideally all instanced receivers shoudl be defined here, so its easier to keep track
-
-/obj/structure/delivery_receiver/store1
- chute_name = "Bubway - Ghetto"
-
-/obj/structure/delivery_receiver/store2
- chute_name = "Veterinary Clinic - Ghetto"
-
-/obj/structure/delivery_receiver/store3
- chute_name = "Pawn Shop - Ghetto"
-
-/obj/structure/delivery_receiver/store4
- chute_name = "Weapon Shop - Ghetto"
-
-/obj/structure/delivery_receiver/store5
- chute_name = "Pawn Shop - Pacific Heights"
-
-/obj/structure/delivery_receiver/store6
- chute_name = "Gumma Guts - Fisherman's Wharf"
-
-/obj/structure/delivery_receiver/store7
- chute_name = "Seaside Arcade - Fisherman's Wharf"
-
-/obj/structure/delivery_receiver/store8
- chute_name = "Community Garden - Fisherman's Wharf"
-
-/obj/structure/delivery_receiver/store9
- chute_name = "Convineance Store - Fisherman's Wharf"
-
-/obj/structure/delivery_receiver/store10
- chute_name = "Boardwalk Store North - Fisherman's Wharf"
-
-/obj/structure/delivery_receiver/store11
- chute_name = "Boardwalk Store South - Fisherman's Wharf"
-
-/obj/structure/delivery_receiver/store12
- chute_name = "Big Clothing Store - Union Square"
-
-/obj/structure/delivery_receiver/store13
- chute_name = "Small Clothing Store - Union Square"
-
-/obj/structure/delivery_receiver/store14
- chute_name = "Weapon Store - Union Square"
-
-/obj/structure/delivery_receiver/store15
- chute_name = "Medium Clothing Store - Union Square"
-
-/obj/structure/delivery_receiver/store16
- chute_name = "Baco Tell Central - Union Square"
-
-/obj/structure/delivery_receiver/store17
- chute_name = "Baco Tell South - Union Square"
-
-/obj/structure/delivery_receiver/store18
- chute_name = "Clothing Store South - Union Square"
-
-/obj/structure/delivery_receiver/store19
- chute_name = "Gas Station - Pacific Heights"
-
-/obj/structure/delivery_receiver/store20
- chute_name = "Gas Station - Fisherman's Wharf"
-
-
-/obj/structure/delivery_receiver/special1
- chute_name = "Casino - Chinatown"
-
-/obj/structure/delivery_receiver/special2
- chute_name = "Laundromat - Chinatown"
-
-/obj/structure/delivery_receiver/special3
- chute_name = "Restaurant - Chinatown"
-
-/obj/structure/delivery_receiver/special4
- chute_name = "Hotel - Ghetto"
-
-/obj/structure/delivery_receiver/special5
- chute_name = "Museum Rear - Ghetto"
-
-/obj/structure/delivery_receiver/special6
- chute_name = "City Limits North"
-
-/obj/structure/delivery_receiver/special7
- chute_name = "City Limits East"
-
-/obj/structure/delivery_receiver/special8
- chute_name = "City Limits South"
-
-/obj/structure/delivery_receiver/special9
- chute_name = "City Limits West"
-
-/obj/structure/delivery_receiver/special10
- chute_name = "Church Side Entrance - Pacific Heights"
-
-/obj/structure/delivery_receiver/special11
- chute_name = "Private/Undisclosed Enterprise - Pacific Heights"
-
-/obj/structure/delivery_receiver/special12
- chute_name = "Forest Approach - Pacific Heights"
diff --git a/modular_darkpack/modules/delivery/code/delivery_objs.dm b/modular_darkpack/modules/delivery/code/delivery_objs.dm
deleted file mode 100644
index dab1678b0674..000000000000
--- a/modular_darkpack/modules/delivery/code/delivery_objs.dm
+++ /dev/null
@@ -1,507 +0,0 @@
-/obj/item/delivery_contract
- name = "delivery contract"
- desc = "A delivery contract issued by a delivery company. Use it in your hand to scan it for details. If your name is on the contract, use it on someone else to add them to it."
- icon = 'modular_darkpack/modules/deprecated/icons/onfloor.dmi'
- icon_state = "masquerade"
- color = "#bbb95c"
- lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/items_righthand.dmi'
- ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
-
- var/datum/delivery_datum/delivery
- var/datum/delivery_manifest/manifest
-
-/obj/item/delivery_contract/New(mob/user, obj/board,difficulty)
- delivery = new(user,board,difficulty)
- delivery.contract = src
- manifest = new(delivery)
- . = ..()
-
-/obj/item/delivery_contract/attack(mob/living/M, mob/living/user)
- if(!delivery)
- to_chat(user,span_notice("Error: No delivery datum attached. This is most likely a bug."))
- return
- if(!manifest) return "no_manifest"
- if(M == user)
- if(delivery.check_owner(user) == 0)
- to_chat(user, span_warning("You are not listed on this manifest. Before you can use it, one of its owners needs to add you to the crew handling it by using the manifest on you."))
- return
- else
- manifest.read_data(user)
- return
- if(M.client == null)
- to_chat(user,span_notice("Error: Target mob has no client. This is not a player mob."))
- return
- if(delivery.check_owner(user) == 0)
- to_chat(user,span_warning("You are not listed on this manifest. Before you can use it, one of its owners needs to add you to the crew handling it by using the manifest on you."))
- return
- if(delivery.check_owner(user) == 1)
- if(delivery.check_owner(M) == 0)
- if(tgui_alert(user,"Do you want to add [M] to the delivery contract?","Contract add confirmation",list("Yes","No"),timeout = 10 SECONDS) == "Yes")
- delivery.add_owner(M)
- var/obj/item/vamp/keys/cargo_truck/truck_keys = new(src)
- truck_keys.delivery = delivery
- truck_keys.owner = M
- M.put_in_hands(truck_keys)
- to_chat(user, span_notice("Success! User [M] added."))
- return
- if(delivery.check_owner(M) == 1)
- if(delivery.original_owner == M) return
- if(delivery.original_owner != user)
- to_chat(user,span_notice("Only the original owner of the contract, [delivery.original_owner] can remove people from the contract."))
- return
- else
- if(delivery.delivery_receivers.len == 0)
- to_chat(user,span_warning("This delivery is complete and should be handed in. Removing users is no longer possibe."))
- return
- if(tgui_alert(user,"Do you want to remove [M] from the delivery contract?","Contract remove confirmation",list("Yes","No"),timeout = 10 SECONDS) == "Yes")
- delivery.contract_takers.Remove(M)
- for(var/obj/item/vamp/keys/cargo_truck/truck_keys in delivery.spawned_keys)
- if(truck_keys.owner == M)
- qdel(truck_keys)
- to_chat(user, span_notice("Success! User [M] removed."))
- return
-
- . = ..()
-
-/obj/item/delivery_contract/attack_self(mob/user)
- if(!delivery)
- to_chat(user,span_notice("Error: No delivery datum attached. This is most likely a bug."))
- return
- if(!manifest) return "no_manifest"
-
- if(delivery.check_owner(user) == 0)
- to_chat(user, span_warning("You are not listed on this manifest. Before you can use it, one of its owners needs to add you to the crew handling it by using the manifest on you."))
- else
- manifest.read_data(user)
- . = ..()
-
-
-/obj/item/delivery_contract/Destroy()
- . = ..()
- if(delivery) qdel(delivery)
- if(manifest) qdel(manifest)
-
-
-/obj/structure/delivery_board
- color = "#ffb171"
- name = "delivery assignment board"
- desc = "A board made out of cork where delivery contracts are pinned. Use it with an emtpy hand to see if any are available."
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "nboard02"
- anchored = TRUE
- density = FALSE
- var/delivery_started = 0
- var/delivery_employer_tag = "default"
- var/next_delivery_timestamp
- var/list/crate_types = list(
- "red" = list(
- "cargo_name" = "Cleaning Supplies",
- "color" = "#7c1313",
- "desc" = "Red tinted crates typically contain cleaning supplies, including cleaning chemicals, replacement mops, rags and personal safety equipment.",
- ),
- "blue" = list(
- "cargo_name" = "Maintenance Supplies",
- "color" = "#202bca",
- "desc" = "Anything and everything related to maintaining electronics in a store or house - replacement batteries, light bulbs, electronic components as well as tools needed to replace and fix devices using them. ",
- ),
- "yellow" = list(
- "cargo_name" = "Equipment and Electronics",
- "color" = "#b8ac3f",
- "desc" = "Large items like computers and other electronics, lightning and ventilation systems, AC units as well as shelving and furniture typically in separate elements and needing further assembly. Also, tools required for the assembly of the above.",
- ),
- "green" = list(
- "cargo_name" = "Personal Items",
- "color" = "#165f29",
- "desc" = "Private correspondence and deliveries marked as private. It could be cargo belonging to other crates but earmarked for private delivery due to private reselling or personal use. Typically, just mail but shipped in bulk. ",
- ),
- )
-
-/obj/structure/delivery_board/proc/delivery_icon()
- icon_state = "nboard02"
- update_icon()
-
-/obj/structure/delivery_board/proc/delivery_cooldown(timer)
- var/time_to_wait = 5 MINUTES
- if(timer) time_to_wait = timer
- addtimer(CALLBACK(src,TYPE_PROC_REF(/obj/structure/delivery_board,delivery_icon)),time_to_wait)
-
-/obj/structure/delivery_board/attack_hand(mob/living/user)
- . = ..()
- if(!delivery_started)
- if(world.time > next_delivery_timestamp)
- if(tgui_alert(user,"A new contract is available. Do you wish to start a delivery?","Delivery available",list("Yes","No"),timeout = 10 SECONDS) == "Yes")
- var/picked_difficulty
- var/difficulty_text
- switch(tgui_input_list(user,"Select a contract length, details will be outlined before accepting.","Contract Selection",list("Short","Medium","Long"),timeout = 10 SECONDS))
- if("Short")
- picked_difficulty = 1
- difficulty_text = "A short contract involves 3 locations with up to 6 crates each, meaning the entire delivery can be completed with one truck. The time limit is 20 minutes."
- if("Medium")
- picked_difficulty = 2
- difficulty_text = "A medium contract involves 5 locations with up to 10 crates each, the entire delivery should be completed in 3 runs. The time limit is 45 minutes. "
- if("Long")
- picked_difficulty = 3
- difficulty_text = "A long contract involves 7 locations with up to 15 crates each, meaning that without partial loads each delivery will require a restock. The timie limit is 90 minutes."
- if(tgui_alert(user,difficulty_text,"Confirm Contract",list("Yes","No"),timeout = 10 SECONDS) == "Yes")
- var/obj/item/delivery_contract/contract = new(user,src,picked_difficulty)
- switch(contract.delivery.start_contract())
- if(1)
- user.put_in_hands(contract)
- icon_state = "nboard00"
- update_icon()
- to_chat(user,span_notice("Success! A new contract was created and aprorpiate items have been created and dispensed. Check the cotnract item for information about your delivery."))
- contract.manifest.save_data(init = TRUE)
- contract.manifest.read_data(contract.delivery.original_owner)
- delivery_started = 1
- return
- if("fail_reci")
- to_chat(user, span_warning("Not enough receivers avaialble in the game world. This is most likley because too many cotnracts are active at the same time, but is very likely a mapping bug."))
- qdel(contract)
- if("fail_garage")
- to_chat(user, span_warning("No garage area found. This is a mapping bug and should be reported."))
- qdel(contract)
- if("fail_disp")
- to_chat(user, span_warning("Not enough dispensers. This is a mapping bug and should be reported."))
- qdel(contract)
- if("fail_truck")
- to_chat(user, span_warning("Truck spawning failed. This is a mapping bug and should be reported."))
- qdel(contract)
- return
- else
- (to_chat(user,span_notice("A contract was just concluded. There are [time2text((next_delivery_timestamp - world.time),"mm:ss")] left until the next contract can be picked.")))
- else
- to_chat(user,span_notice("There are no contracts available."))
-
-/obj/structure/delivery_board/attackby(obj/item/I, mob/living/user, params)
- if(istype(I,/obj/item/delivery_contract/))
- var/obj/item/delivery_contract/contract_item = I
- if(contract_item.delivery.delivery_employer_tag != delivery_employer_tag)
- to_chat(user,span_warning("This contract does not seem to be from this board."))
- return
- if(contract_item.delivery.check_owner(user) == 0)
- to_chat(user,span_warning("You don't seem to be on this contract. Only the person who signed the cotract can add you."))
- return
- if(contract_item.delivery.delivery_receivers.len == 0)
- if(get_area(contract_item.delivery.active_truck) != contract_item.delivery.garage_area)
- to_chat(user,span_warning("Warning: Truck outside of garage area."))
- if(tgui_alert(user,"Do you wish to finalize the contract?","Finalize Confirm",list("Yes","No"),timeout = 10 SECONDS) == "Yes")
- contract_item.delivery.delivery_finish()
- return
- if(tgui_alert(user,"Do you wish to update the information on the contract?","Contract Update",list("Yes","No"),timeout = 10 SECONDS) == "Yes")
- contract_item.manifest.save_data()
- return
- if(get_area(contract_item.delivery.active_truck) != contract_item.delivery.garage_area)
- to_chat(user,span_warning("Warning: Truck outside of garage area."))
- if(tgui_alert(user,"Do you wish to finalize the contract early?","Finalize Confirm",list("Yes","No"),timeout = 10 SECONDS) == "Yes")
- contract_item.delivery.delivery_finish()
- return
-
- if(istype(I,/obj/item/vamp/keys/cargo_truck))
- var/obj/item/vamp/keys/cargo_truck/truck_keys = I
- if(truck_keys.delivery.delivery_employer_tag != delivery_employer_tag)
- to_chat(user,span_warning("These keys dont's eem to be oes not seem to be from this board."))
- return
- if(tgui_alert(user,"Are you SURE you want to respawn the delivery truck? This will reduce your final grade.","Respawn Truck", list("Yes","No"), timeout = 10 SECONDS) == "Yes")
- var/obj/old_truck = truck_keys.delivery.active_truck
- var/obj/effect/landmark/delivery_truck_beacon/truck_beacon = truck_keys.delivery.truck_spawner
- qdel(old_truck)
- truck_beacon.spawn_truck(truck_keys.delivery)
- . = ..()
-
-
-/obj/structure/delivery_receiver
-
- name = "delivery chute"
- desc = "A chute used to handle bulk deliveries. A standard shipping crate should slide right in."
- anchored = TRUE
- density = FALSE
- icon = 'modular_darkpack/modules/deprecated/icons/props.dmi'
- icon_state = "box_put"
- var/chute_name = "default"
- var/delivery_in_use = 0
- var/receiver_in_use = 0
- var/list/delivery_status = list(
- "red" = 0,
- "blue" = 0,
- "yellow" = 0,
- "green" = 0,
- )
- light_color = "#ffffff"
- light_power = 2
-
-/obj/structure/delivery_receiver/proc/reset_receiver()
- delivery_in_use = 0
- delivery_status = list(
- "red" = 0,
- "blue" = 0,
- "yellow" = 0,
- "green" = 0,
- )
- animate(src, alpha = 0, time = 5 SECONDS)
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- set_light(0)
-
-/obj/structure/delivery_receiver/proc/check_deliveries()
- if(delivery_status["red"] != 0 || delivery_status["blue"] != 0 || delivery_status["yellow"] != 0 || delivery_status["green"] != 0) return 0
- return 1
-
-/obj/structure/delivery_receiver/Initialize(mapload)
- . = ..()
- alpha = 0
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- GLOB.delivery_available_receivers.Add(src)
- name = "[initial(name)] - [capitalize(chute_name)]"
-
-/obj/structure/delivery_receiver/Destroy()
- . = ..()
- GLOB.delivery_available_receivers.Remove(src)
-
-/obj/structure/delivery_receiver/attack_hand(mob/living/user)
- . = ..()
- if(receiver_in_use == 1)
- to_chat(user, span_warning("Someone is already operating this receiver!"))
- if(user.pulling)
- if(delivery_in_use == 0) return
- if(istype(user.pulling,/obj/structure/delivery_crate/))
- var/obj/structure/delivery_crate/pulled_crate = user.pulling
- if(pulled_crate.delivery.check_owner(user) == 0)
- to_chat(user, span_warning("You aren't authorized to handle this delivery. For security reasons, the receiver denies the package."))
- return
- receiver_in_use = 1
- playsound(src,'sound/effects/cargocrate_move.ogg',50,10)
- if(do_after(user, 2 SECONDS, src))
- if(delivery_status[pulled_crate.crate_type] > 0)
- delivery_status[pulled_crate.crate_type] -= 1
- pulled_crate.delivery.delivery_score["delivered_crates"] += 1
- if(check_deliveries() == 1)
- pulled_crate.delivery.receiver_complete(src)
- reset_receiver()
- else
- pulled_crate.delivery.delivery_score["misdelivered_crates"] += 1
- playsound(src,'sound/effects/cargocrate_load.ogg',50,10)
- qdel(pulled_crate)
- receiver_in_use = 0
-
-/obj/structure/delivery_dispenser
-
- name = "Cargo Dispenser"
- desc = "A chute used to handle bulk deliveries. There is a visible keyhole and a small button to push."
- anchored = TRUE
- density = FALSE
- icon = 'modular_darkpack/modules/deprecated/icons/props.dmi'
- icon_state = "box_take"
- var/chute_name = "default"
- var/dispenser_active = 0
- var/dispenser_in_use
- var/delivery_employer_tag
- var/crate_type
- light_color = "#ffffff"
- light_power = 20
-
-/obj/structure/delivery_dispenser/Initialize(mapload)
- . = ..()
- GLOB.delivery_available_dispensers.Add(src)
- alpha = 0
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- name = "[initial(name)] - [capitalize(chute_name)]]"
-
-/obj/structure/delivery_dispenser/Destroy()
- . = ..()
- GLOB.delivery_available_dispensers.Remove(src)
-
-/obj/structure/delivery_dispenser/proc/reset_dispenser()
- dispenser_active = 0
- crate_type = null
- light_color = initial(light_color)
- set_light(0)
- animate(src,alpha = 0,5 SECONDS)
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-
-/obj/structure/delivery_dispenser/proc/dispense_cargo(obj/truck_key, turf/target_turf)
- if(!truck_key) return
- var/obj/item/vamp/keys/cargo_truck/key_item = truck_key
- var/obj/structure/delivery_crate/dispensed_crate = new(target_turf)
- dispensed_crate.crate_type = crate_type
- dispensed_crate.delivery = key_item.delivery
- dispensed_crate.source_dispenser = src
- dispensed_crate.name += " - [key_item.delivery.crate_designations["[crate_type]"]["cargo_name"]]"
- dispensed_crate.color = key_item.delivery.crate_designations["[crate_type]"]["color"]
- dispensed_crate.desc += " [key_item.delivery.crate_designations["[crate_type]"]["desc"]]"
- dispensed_crate.update_icon()
- playsound(src,'sound/effects/cargocrate_unload.ogg',50,10)
- key_item.delivery.delivery_score["dispensed_crates"] += 1
-
-/obj/structure/delivery_dispenser/attack_hand(mob/living/user)
- . = ..()
- if(dispenser_active == 0)
- to_chat(user, span_notice("The device seems to be offline."))
- return
- if(dispenser_in_use == 1)
- to_chat(user, span_warning("Someone is already using this dispenser!"))
- return
- if(user.pulling == null)
- to_chat(user, span_notice("It appears that you need to use a key to operate this dispenser. If you are on a delivery, use the key you got when you signed up or were added to the contract."))
- return
- if(user.pulling != null)
- if(istype(user.pulling, /obj/structure/delivery_crate))
- var/obj/structure/delivery_crate/pulled_crate = user.pulling
- if(pulled_crate.source_dispenser == src)
- dispenser_in_use = 1
- playsound(src,'sound/effects/cargocrate_move.ogg',50,10)
- if(do_after(user, 2 SECONDS, src))
- pulled_crate.delivery.delivery_score["dispensed_crates"] -= 1
- playsound(src,'sound/effects/cargocrate_load.ogg',50,10)
- qdel(pulled_crate)
- dispenser_in_use = 0
-
-/obj/structure/delivery_dispenser/attackby(obj/item/I, mob/living/user, params)
- . = ..()
- if(dispenser_in_use == 1)
- to_chat(user, span_warning("Someone is already using this dispenser!"))
- return
- if(istype(I,/obj/item/vamp/keys/cargo_truck))
- var/obj/item/vamp/keys/cargo_truck/truck_key = I
- if(truck_key.delivery == null)
- to_chat(user,span_warning("Error, delivery data missing. This is a bug."))
- return
- if(truck_key.delivery.delivery_dispensers.Find(src) == 0)
- to_chat(user,span_notice("They key does not seem to work in this dispenser."))
- return
- var/turf/user_turf = get_turf(user)
- for(var/obj/structure/delivery_crate/potential_crate in user_turf.contents)
- to_chat(user, span_warning("There is already a crate on the ground here!"))
- return
- dispenser_in_use = 1
- playsound(src,'sound/effects/cargocrate_move.ogg',50,10)
- if(do_after(user, 2 SECONDS, src))
- dispense_cargo(truck_key,user_turf)
- dispenser_in_use = 0
-
-/obj/structure/delivery_crate
-
- name = "delivery crate"
- desc = "A sealed crate, ready for transport and delivery."
- anchored = FALSE
- density = TRUE
- icon = 'icons/obj/crates.dmi'
- icon_state = "crate"
- var/datum/delivery_datum/delivery
- var/obj/structure/delivery_dispenser/source_dispenser
- var/crate_type
-
-/obj/structure/delivery_crate/Initialize(mapload)
- if(crate_type) name = initial(name) + " - [crate_type]"
- AddElement(/datum/element/climbable)
- . = ..()
-
-/obj/structure/delivery_crate/Destroy()
- if(delivery)
- delivery.active_crates.Remove(src)
- delivery = null
- . = ..()
-
-/obj/darkpack_car/delivery_truck
- name = "delivery truck"
- desc = "A truck with specially prepared racks in the back allowing for easy storage and retrieval of delivery packages."
- icon_state = "track"
- max_passengers = 4
- component_type = null
- baggage_limit = 0
- baggage_max = null
- var/delivery_capacity = 20
- var/datum/delivery_datum/delivery
- var/datum/delivery_storage/delivery_trunk
-
-/obj/darkpack_car/delivery_truck/Destroy()
- if(delivery)
- if(delivery.active_truck == src) delivery.active_truck = null
- delivery = null
- qdel(delivery_trunk)
- . = ..()
-
-
-/obj/darkpack_car/delivery_truck/Initialize(mapload)
- . = ..()
- delivery_trunk = new(src,delivery_capacity)
-
-/obj/darkpack_car/delivery_truck/ComponentInitialize(mapload)
- return
-
-/obj/darkpack_car/delivery_truck/attack_hand(mob/user)
- . = ..()
- if(locked == TRUE)
- to_chat(user,span_warning("The truck is locked!"))
- return
- if(user.pulling == null)
- if(delivery_trunk.storage.len == 0)
- to_chat(user, span_notice("There is nothing in the back of the truck."))
- return
- var/turf/user_turf = get_turf(user)
- for(var/obj/structure/delivery_crate/potential_crate in user_turf.contents)
- to_chat(user, span_warning("There is already a crate on the ground here!"))
- return
- delivery_trunk.retrieval_menu(user)
- else
- var/obj/structure/delivery_crate/pulled_crate = user.pulling
- if(!pulled_crate)
- to_chat(user, span_warning("The special compartments in the back dont really fit anything other than delivery crates. Use a nomral truck for other cargo."))
- return
- else
- playsound(src,'sound/effects/cargocrate_move.ogg',50,10)
- if(do_after(user, 2 SECONDS, pulled_crate))
- playsound(src,'sound/effects/cargocrate_load.ogg',50,10)
- delivery_trunk.add_to_storage(user,pulled_crate)
-
-/obj/effect/landmark/delivery_truck_beacon
- name = "delivery truck spawner"
- icon = 'icons/effects/landmarks_static.dmi'
- icon_state = "x4"
- invisibility = 101
- density = FALSE
- var/spawn_dir = NORTH
- var/delivery_employer_tag = "default"
-
-/obj/effect/landmark/delivery_truck_beacon/proc/spawn_truck(datum/linked_datum)
- if(!linked_datum) return
- var/turf/local_turf = get_turf(src)
- var/obj/darkpack_car/delivery_truck/spawned_truck = new(local_turf)
- spawned_truck.dir = spawn_dir
- switch(spawn_dir)
- if(NORTH)
- spawned_truck.movement_vector = 0
- if(SOUTH)
- spawned_truck.movement_vector = 180
- if(EAST)
- spawned_truck.movement_vector = 90
- if(WEST)
- spawned_truck.movement_vector = 270
- spawned_truck.delivery = linked_datum
- spawned_truck.delivery.active_truck = spawned_truck
- spawned_truck.locked = TRUE
- spawned_truck.access = spawned_truck.delivery.delivery_employer_tag
- var/obj/item/vamp/keys/cargo_truck/spawned_keys = new(local_turf)
- spawned_keys.delivery = linked_datum
- spawned_keys.owner = spawned_keys.delivery.original_owner
- spawned_keys.accesslocks = list(spawned_truck.delivery.delivery_employer_tag)
- spawned_truck.delivery.spawned_keys.Add(spawned_keys)
- spawned_truck.delivery.original_owner.put_in_hands(spawned_keys)
-
-/obj/effect/landmark/delivery_truck_beacon/Initialize(mapload)
- GLOB.delivery_available_veh_spawners.Add(src)
- . = ..()
-
-/obj/effect/landmark/delivery_truck_beacon/Destroy()
- GLOB.delivery_available_veh_spawners.Remove(src)
- . = ..()
-
-/obj/item/vamp/keys/cargo_truck
-
- var/datum/delivery_datum/delivery
- var/mob/living/owner
-
-/obj/item/vamp/keys/cargo_truck/Destroy()
- if(delivery)
- delivery.spawned_keys.Remove(src)
- delivery = null
- . = ..()
diff --git a/modular_darkpack/modules/doors/code/vampdoor_npc.dm b/modular_darkpack/modules/doors/code/vampdoor_npc.dm
deleted file mode 100644
index 89f60ab73fac..000000000000
--- a/modular_darkpack/modules/doors/code/vampdoor_npc.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/structure/vampdoor/wood/npc // Random access wooden door
- icon_state = "wood-1"
- base_icon_state = "wood"
- locked = TRUE
- lock_id = "npc"
- burnable = TRUE
- lockpick_difficulty = 4
-
-/obj/structure/vampdoor/wood/npc/Initialize(mapload)
- . = ..()
- lock_id = "npc[rand(1, 20)]"
diff --git a/modular_darkpack/modules/drugs/code/bloodpacks/bloodpack_adulteration.dm b/modular_darkpack/modules/drugs/code/bloodpacks/bloodpack_adulteration.dm
deleted file mode 100644
index e8c921839d09..000000000000
--- a/modular_darkpack/modules/drugs/code/bloodpacks/bloodpack_adulteration.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/obj/item/reagent_containers/blood/random/drug_filled
- start_blood_amount = 180 // Leave room for the drugs.
-
-/obj/item/reagent_containers/blood/random/drug_filled/meth
- list_reagents = list(/datum/reagent/drug/methamphetamine = 15)
- start_blood_amount = 185
-
-/obj/item/reagent_containers/blood/random/drug_filled/coke
- list_reagents = list(/datum/reagent/drug/methamphetamine/cocaine = 15)
- start_blood_amount = 185
-
-/obj/item/reagent_containers/blood/random/drug_filled/morphine
- list_reagents = list(/datum/reagent/toxin/chloralhydrate = 10, /datum/reagent/medicine/morphine = 10)
diff --git a/modular_darkpack/modules/dwelling/code/_dwelling_gvars_defines.dm b/modular_darkpack/modules/dwelling/code/_dwelling_gvars_defines.dm
deleted file mode 100644
index 6fc354a242dc..000000000000
--- a/modular_darkpack/modules/dwelling/code/_dwelling_gvars_defines.dm
+++ /dev/null
@@ -1,59 +0,0 @@
-GLOBAL_VAR_INIT (dwelling_number_major, 4)
-GLOBAL_VAR_INIT (dwelling_number_moderate, 10)
-GLOBAL_LIST_EMPTY (dwelling_list)
-GLOBAL_LIST_EMPTY (dwelling_area_list)
-
-/datum/proc/distribute_dwelling_loot() //Primary setup proc. Calling this setups the loot tables and dwellings.
- for(var/area/vtm/interior/dwelling/dwelling_area in GLOB.dwelling_area_list)
- dwelling_area.setup_loot()
-
-/datum/proc/adjust_dwelling_loot(type,value)
- if(!type || !value) return
- var/total_dwellings = GLOB.dwelling_area_list.len
- switch(type)
- if("major")
- GLOB.dwelling_number_major = value
- if("moderate")
- GLOB.dwelling_number_moderate = value
- if((GLOB.dwelling_number_major + GLOB.dwelling_number_moderate) > total_dwellings)
- switch(type)
- if("major")
- GLOB.dwelling_number_moderate = total_dwellings - GLOB.dwelling_number_major
- if("moderate")
- GLOB.dwelling_number_major = total_dwellings - GLOB.dwelling_number_moderate
-
-/client/proc/cmd_admin_set_dwelling_ratios()
- set name = "Adjust Dwelling Loot Ratios"
- set category = "Admin"
- if (!check_rights(R_ADMIN))
- return
-
- if(SSticker.current_state > GAME_STATE_PREGAME)
- to_chat(usr, span_warning("The game has already started and loot distributions have been already rolled. This command can only be used before the round starts."))
- return
-
- if(GLOB.dwelling_area_list.len == 0)
- to_chat(usr, span_warning("Dwelling areas not initialized or no dwelling areas found. This will likely resolve itself before the round starts, please try again in a few seconds."))
- return
-
- var/total_dwellings = GLOB.dwelling_area_list.len
- var/current_major = GLOB.dwelling_number_major
- var/current_moderate = GLOB.dwelling_number_moderate
- var/msg
-
- switch(tgui_input_list(usr, "Total dwellings: [total_dwellings], Major: [current_major], Moderate: [current_moderate], Select a value to edit:","Edit dwellings",list("Major","Moderate"),timeout = 0))
- if("Major")
- var/new_number = tgui_input_number(usr, "Enter major dwellings number:","Dwellings Number",GLOB.dwelling_number_major, total_dwellings * 10, 0, timeout = 0)
- if(!new_number) return
- if(new_number > total_dwellings) new_number = total_dwellings
- adjust_dwelling_loot("major",new_number)
- msg = "Dwelling Loot Distribution type major adjusted to [new_number] by [key_name_admin(usr)] "
- if("Moderate")
- var/new_number = tgui_input_number(usr, "Enter moderate dwellings number:","Dwellings Number",GLOB.dwelling_number_moderate, total_dwellings * 10, 0, timeout = 0)
- if(!new_number) return
- if(new_number > total_dwellings) new_number = total_dwellings
- adjust_dwelling_loot("moderate",new_number)
- msg = "Dwelling Loot Distribution type moderate adjusted to [new_number] by [key_name_admin(usr)] "
- if(msg)
- log_admin(msg)
- message_admins(msg)
diff --git a/modular_darkpack/modules/dwelling/code/area_dwelling.dm b/modular_darkpack/modules/dwelling/code/area_dwelling.dm
deleted file mode 100644
index 151d4355e976..000000000000
--- a/modular_darkpack/modules/dwelling/code/area_dwelling.dm
+++ /dev/null
@@ -1,118 +0,0 @@
-/area/vtm/interior/dwelling
- name = "NPC Dwelling Master Definition"
- icon_state = "interior"
- ambience_index = AMBIENCE_OFFICE
- outdoors = FALSE
- wall_rating = 1
- var/area_tag = "default"
- var/area_heat = 0
- var/area_heat_max
- var/alarm_trigerred = 0
- var/alarm_disabled = 0
- var/list/cased_by = list()
- var/loot_spawned = 0
- var/obj/structure/vtm/dwelling_alarm/alarm_panel
- var/list/dwelling_doors = list()
- var/list/dwelling_windows = list()
- var/list/loot_containers = list()
- var/forced_loot
- var/list/loot_list = list("type" = "none",
- "minor" = 0,
- "moderate" = 0,
- "major" = 0,
- )
-
-/area/vtm/interior/dwelling/proc/add_heat(ammount = 0) //Adds heat to given area, then checks if alarm shoudl be trigerred
- if(alarm_disabled == 1) return
- if(alarm_trigerred == 1)
- INVOKE_ASYNC(alarm_panel, TYPE_PROC_REF(/obj/structure/vtm/dwelling_alarm/, contact_cops))
- return
- area_heat += ammount
- if(area_heat >= area_heat_max && alarm_panel.alarm_active == 0)
- alarm_panel.alarm_arm()
- return
-
-/area/vtm/interior/dwelling/proc/setup_loot_table(type) //Called during setup, this proc contains the look drop values
- switch(type)
- if("major")
- loot_list["type"] = "major"
- loot_list["minor"] = rand(1,2)
- loot_list["moderate"] = rand(4,6)
- loot_list["major"] = rand(3,6)
- area_heat_max = 20
- if("moderate")
- loot_list["type"] = "moderate"
- loot_list["minor"] = rand(4,6)
- loot_list["moderate"] = rand(3,6)
- loot_list["major"] = rand(1,2)
- area_heat_max = 50
- if("minor")
- loot_list["type"] = "minor"
- loot_list["minor"] = rand(4,6)
- loot_list["moderate"] = rand(1,2)
- loot_list["major"] = rand(0,1)
- area_heat_max = 50
-
-/area/vtm/interior/dwelling/proc/setup_loot_containers() // Called during setup
- var/loot_sum = loot_list["minor"] + loot_list["moderate"] + loot_list["major"]
- while(loot_sum > 0)
- var/obj/structure/vtm/dwelling_container/picked_container = pick(loot_containers)
- if(!picked_container)
- return "Error: No containers to pick"
- picked_container.search_tries += 2
- picked_container.search_hits_left += 1
- loot_sum -= 1
- for(var/obj/structure/vtm/dwelling_container/loot_container in loot_containers)
- if(loot_container.search_tries <= 4) loot_container.search_tries += 2
- return
-
-/area/vtm/interior/dwelling/proc/setup_loot() //Primary setup proc
- if(forced_loot)
- setup_loot_table(forced_loot)
- if(loot_list["type"] == "none")
- if(GLOB.dwelling_number_major > 0)
- GLOB.dwelling_number_major -= 1
- setup_loot_table("major")
- if(loot_list["type"] == "none")
- if(GLOB.dwelling_number_moderate > 0)
- GLOB.dwelling_number_moderate -= 1
- setup_loot_table("moderate")
- if(loot_list["type"] == "none")
- setup_loot_table("minor")
- for (var/obj/structure/vampdoor/dwelling/dwelling_door in dwelling_doors)
- dwelling_door.set_security(loot_list["type"])
- setup_loot_containers()
- loot_spawned = 1
- GLOB.dwelling_list.Add(src)
- return
-
-/area/vtm/interior/dwelling/proc/return_loot_value() //Used during seeding
- var/list/pick_list = list()
- if(loot_list["minor"] > 0)
- pick_list.Add("minor")
- if(loot_list["moderate"] > 0)
- pick_list.Add("moderate")
- if(loot_list["major"] > 0)
- pick_list.Add("major")
-
- switch(pick_list.len)
- if(0)
- return 0
- else
- var/list_choice = pick(pick_list)
- loot_list[list_choice] -= 1
- return list_choice
-
-/area/vtm/interior/dwelling/Initialize(mapload)
- . = ..()
- GLOB.dwelling_area_list.Add(src)
-
-/area/vtm/interior/dwelling/Destroy()
- . = ..()
- GLOB.dwelling_area_list.Remove(src)
- if(GLOB.dwelling_list.Find(src) != 0) GLOB.dwelling_list.Remove(src)
- alarm_panel = null
- cased_by = null
- dwelling_doors = null
- loot_containers = null
- dwelling_windows = null
diff --git a/modular_darkpack/modules/dwelling/code/areas/area_dwelling_instances.dm b/modular_darkpack/modules/dwelling/code/areas/area_dwelling_instances.dm
deleted file mode 100644
index 47d2ca59eb9a..000000000000
--- a/modular_darkpack/modules/dwelling/code/areas/area_dwelling_instances.dm
+++ /dev/null
@@ -1,138 +0,0 @@
-/area/vtm/interior/dwelling/ghetto01
- name = "Civilian Residence No. 1, South Ghetto."
- area_tag = "gh-s-1"
-
-/area/vtm/interior/dwelling/ghetto02
- name = "Civilian Residence No. 2, South Ghetto."
- area_tag = "gh-s-2"
-
-/area/vtm/interior/dwelling/ghetto03
- name = "Civilian Residence No. 3, South Ghetto."
- area_tag = "gh-s-3"
-
-/area/vtm/interior/dwelling/ghetto04
- name = "Civilian Residence No. 4, South Ghetto."
- area_tag = "gh-s-4"
-
-/area/vtm/interior/dwelling/ghetto05
- name = "Civilian Residence No. 5, South Ghetto."
- area_tag = "gh-s-5"
-
-/area/vtm/interior/dwelling/ghetto06
- name = "Civilian Residence No. 6, South Ghetto."
- area_tag = "gh-s-6"
-
-/area/vtm/interior/dwelling/ghetto07
- name = "Civilian Residence No. 7, South Ghetto."
- area_tag = "gh-s-7"
-
-/area/vtm/interior/dwelling/ghetto08
- name = "Civilian Residence No. 1, Central Ghetto."
- area_tag = "gh-c-1"
-
-/area/vtm/interior/dwelling/ghetto09
- name = "Civilian Residence No. 2, Central Ghetto."
- area_tag = "gh-c-2"
-
-/area/vtm/interior/dwelling/ghetto10
- name = "Civilian Residence No. 3, Central Ghetto."
- area_tag = "gh-c-3"
-
-/area/vtm/interior/dwelling/ghetto11
- name = "Civilian Residence No. 4, Central Ghetto."
- area_tag = "gh-c-4"
-
-/area/vtm/interior/dwelling/ghetto12
- name = "Civilian Residence No. 5, Central Ghetto."
- area_tag = "gh-c-5"
-
-/area/vtm/interior/dwelling/ghetto13
- name = "Civilian Residence No. 6, Central Ghetto."
- area_tag = "gh-c-6"
-
-/area/vtm/interior/dwelling/ghetto14
- name = "Civilian Residence No. 7, Central Ghetto."
- area_tag = "gh-c-7"
-
-/area/vtm/interior/dwelling/ghetto15
- name = "Civilian Residence No. 8, Central Ghetto."
- area_tag = "gh-c-8"
-
-/area/vtm/interior/dwelling/ghetto16
- name = "Civilian Residence No. 1, North Ghetto."
- area_tag = "gh-n-1"
-
-/area/vtm/interior/dwelling/ghetto17
- name = "Civilian Residence No. 2, North Ghetto."
- area_tag = "gh-n-2"
-
-/area/vtm/interior/dwelling/ghetto18
- name = "Civilian Residence No. 3, North Ghetto."
- area_tag = "gh-n-3"
-
-/area/vtm/interior/dwelling/ghetto19
- name = "Civilian Residence No. 4, North Ghetto."
- area_tag = "gh-n-4"
-
-/area/vtm/interior/dwelling/ghetto20
- name = "Civilian Residence No. 5, North Ghetto."
- area_tag = "gh-n-5"
-
-//Chinatown
-
-/area/vtm/interior/dwelling/chinatown01
-
- name = "Civilian Residence No. 1, East Chinatown."
- area_tag = "ch-e-1"
-
-/area/vtm/interior/dwelling/chinatown02
-
- name = "Civilian Residence No. 2, East Chinatown."
- area_tag = "ch-e-2"
-
-/area/vtm/interior/dwelling/chinatown03
-
- name = "Civilian Residence No. 3, East Chinatown."
- area_tag = "ch-e-3"
-
-/area/vtm/interior/dwelling/chinatown04
-
- name = "Civilian Residence No. 4, East Chinatown."
- area_tag = "ch-e-4"
-
-/area/vtm/interior/dwelling/chinatown05
-
- name = "Civilian Residence No. 5, East Chinatown."
- area_tag = "ch-e-5"
-
-/area/vtm/interior/dwelling/chinatown06
-
- name = "Civilian Residence No. 1, West Chinatown."
- area_tag = "ch-w-1"
-
-/area/vtm/interior/dwelling/chinatown07
-
- name = "Civilian Residence No. 2, West Chinatown."
- area_tag = "ch-w-2"
-
-/area/vtm/interior/dwelling/chinatown08
-
- name = "Civilian Residence No. 3, West Chinatown."
- area_tag = "ch-w-3"
-
-//Pacigic Heights
-
-/area/vtm/interior/dwelling/pacific01
-
- name = "Civilian Residence No. 1, East Pacific Heights."
- area_tag = "ph-e-1"
-
-/area/vtm/interior/dwelling/pacific02
-
- name = "Civilian Residence No. 2, East Pacific Heights."
- area_tag = "ph-e-2"
-
-/area/vtm/interior/dwelling/pacific03
-
- name = "Civilian Residence No. 1, West Pacific Heights."
- area_tag = "ph-w-1"
diff --git a/modular_darkpack/modules/dwelling/code/obj_dwelling.dm b/modular_darkpack/modules/dwelling/code/obj_dwelling.dm
deleted file mode 100644
index 3b1c31845e5f..000000000000
--- a/modular_darkpack/modules/dwelling/code/obj_dwelling.dm
+++ /dev/null
@@ -1,383 +0,0 @@
-//All objects def for dwelling stuff
-
-//Loot items
-
-/obj/item/vtm/dwelling_loot
- name = "Dwelling Loot Master Item"
- desc = "If you can see this with the base description, someone did a funny. Please report this as a bug."
- icon = 'icons/obj/clothing/accessories.dmi'
- icon_state = "bronze"
- layer = OBJ_LAYER
- w_class = WEIGHT_CLASS_NORMAL
- var/loot_value = 0 // From 1 to 3 assings value and changes description. This should be replaced by a full proc at some point, but will do for a first implementation.
-
-/obj/item/vtm/dwelling_loot/Initialize(mapload)
- . = ..()
- switch(loot_value)
- if(1)
- AddComponent(/datum/component/selling, 50, "loot_small", TRUE, -1, 5)
- if(2)
- AddComponent(/datum/component/selling, 150, "loot_medium", TRUE, -1, 5)
- if(3)
- AddComponent(/datum/component/selling, 350, "loot_large", TRUE, -1, 5)
-
-/obj/item/vtm/dwelling_loot/minor
- name = "minor valuable"
- desc = "A small trinket of low value. Can be fenced for some money."
- icon_state = "bronze"
- loot_value = 1
- grid_width = 1 GRID_BOXES
- grid_height = 1 GRID_BOXES
-
-/obj/item/vtm/dwelling_loot/moderate
- name = "moderate valuable"
- desc = "A small trinket of decent value. Can be fenced for money."
- icon_state = "silver"
- loot_value = 2
- grid_width = 2 GRID_BOXES
- grid_height = 1 GRID_BOXES
-
-/obj/item/vtm/dwelling_loot/major
- name = "major valuable"
- desc = "A small trinket of excellent value. Can be fenced for good money."
- icon_state = "gold"
- loot_value = 3
- grid_width = 2 GRID_BOXES
- grid_height = 2 GRID_BOXES
-
-// Loot Containers
-
-/obj/structure/vtm/dwelling_container
- name = "Personal storage"
- desc = "A container full of personal items. Can be serched to reveal the items within."
- icon = 'icons/obj/crates.dmi'
- icon_state = "crate"
- layer = BELOW_OBJ_LAYER
- color = "#A17037"
- density = TRUE
- anchored = TRUE
- var/area/vtm/interior/dwelling/area_reference
- var/search_tries = 0
- var/search_hits_left = 0 // These should be automated by the system, btu tries typically are double the hits.
- var/currently_searched = 0 // Terminator for when in use
-
-/obj/structure/vtm/dwelling_container/Initialize(mapload)
- var/area/vtm/interior/dwelling/current_area = get_area(src)
- if(current_area)
- current_area.loot_containers.Add(src)
- area_reference = current_area
- . = ..()
-
-/obj/structure/vtm/dwelling_container/proc/roll_for_loot() // This assumes that there are still tries left and outputs loot value to be turned into loot. Also does some self-repairing should it detect an impossible value.
- if(search_hits_left > search_tries) // Self-maitnenance. Ammount of tries can't be lower than ammount of assigned sucesses, so they are equalized in case this state is detected. This should not happen unless vars where changed by hand.
- search_tries = search_hits_left
- if(search_hits_left == 0)
- search_tries = 0
- return 0
- if(search_hits_left == search_tries)
- search_tries -= 1
- search_hits_left -= 1
- return(area_reference.return_loot_value())
- if(search_hits_left < search_tries)
- if(rand(1,2) == 1)
- search_tries -= 1
- return "fail"
- else
- search_tries -= 1
- search_hits_left -= 1
- return(area_reference.return_loot_value())
-
-/obj/structure/vtm/dwelling_container/proc/dispense_loot(loot_type) // This proc creates the actual loot item. Pulling it out like this allows to individualize loot tables per specific item.
- var/container_turf = get_turf(src)
- switch(loot_type)
- if(null)
- return
- if("minor")
- new /obj/item/vtm/dwelling_loot/minor(container_turf)
- if("moderate")
- new /obj/item/vtm/dwelling_loot/moderate(container_turf)
- if("major")
- new /obj/item/vtm/dwelling_loot/major(container_turf)
-
-
-/obj/structure/vtm/dwelling_container/attack_hand(mob/living/user)
- add_fingerprint(user) // For frorencics, adds user fingerprints
- if(!area_reference) // Terminators
- to_chat(user, span_warning("Error: No area reference detected. This is a bug."))
- return
- if(search_tries == 0)
- to_chat(user, span_warning("This container does not seem to have anything of note inside."))
- return
- if(currently_searched == 1)
- to_chat(user, span_warning("Someone is currently using this object."))
- return
- currently_searched = 1 // Starts searching
- while(search_tries > 0)
- area_reference.add_heat(5)
- var/search_time = search_tries * 30
- if(do_mob(user, src, search_time))
- var/loot_roll = roll_for_loot()
- switch(loot_roll)
- if(0)
- search_hits_left = 0
- to_chat(user, span_warning("You search through the container, but don't find anything of value. You doubt you will be able to find much else here."))
- if("fail")
- to_chat(user, span_warning("You search through the container, but don't find anything of value."))
- if("minor","moderate","major")
- to_chat(user, span_notice("You find an item of [loot_roll] value!"))
- dispense_loot(loot_roll)
- else break
- if(search_tries == 0)
- icon_state = "crateopen"
- update_icon()
- currently_searched = 0
-
-/obj/structure/vtm/dwelling_container/Destroy()
- . = ..()
- area_reference.loot_containers.Remove(src)
- area_reference = null
-
-// Doors
-
-/obj/structure/vampdoor/dwelling
-
- base_icon_state = "wood"
- icon_state = "wood-1"
- var/area/vtm/interior/dwelling/area_reference
- locked = 1
-
-/obj/structure/vampdoor/dwelling/proc/set_security(sec_type)
- switch(sec_type)
- if("minor")
- lockpick_difficulty = 5
- if("moderate")
- lockpick_difficulty = 6
- if("major")
- lockpick_difficulty = 7
- lock_id = area_reference.area_tag
-
-/obj/structure/vampdoor/dwelling/proc/start_casing(mob/user) //Returns casing and lockpick infromation after a while.
- if(area_reference.alarm_trigerred == 1) //Eliminator if the alarm was already trigerred
- to_chat(user, span_warning("This house has already been breached and the alarm triggered. Casing is no longer possible."))
- return
- to_chat(user, span_notice("You begin casing the house..."))
- if(do_mob(user, src, 30 SECONDS))
- switch(area_reference.loot_list["type"])
- if("major")
- to_chat(user, span_notice("Both the door and the security system are top notch. Robbing this house is risky but should carry a decent reward. If triggered, the security system will need to be reset every thirty seconds."))
- if("moderate")
- to_chat(user, span_notice("The door and security system seem average for [CITY_NAME]. Robbing this house carries a moderate risk and moderate rewards. If triggered, the security system will need to be reset every two minutes. "))
- if("minor")
- to_chat(user, span_notice("The door and security system seem to be of poor quality. Robbing this house should provide minor rewards, but the security system can be disabled completely."))
- area_reference.cased_by.Add(user)
- return
-
-/obj/structure/vampdoor/dwelling/proc_unlock(severity)
- if(!area_reference) return
- area_reference.add_heat(severity)
-
-/obj/structure/vampdoor/dwelling/examine(mob/user, door = src)
- . = ..()
- if(area_reference.cased_by.Find(user) == 0)
- start_casing(user)
-
-/obj/structure/vampdoor/dwelling/Initialize(mapload)
- var/area/vtm/interior/dwelling/current_area = get_area(src)
- if(current_area)
- current_area.dwelling_doors.Add(src)
- area_reference = current_area
- . = ..()
-
-/obj/structure/vampdoor/dwelling/Destroy()
- . = ..()
- area_reference.dwelling_doors.Remove(src)
- area_reference = null
-
-/obj/structure/window/fulltile/dwelling
- var/area/vtm/interior/dwelling/area_reference
-
-/obj/structure/window/fulltile/dwelling/process_break_in(severity)
- if(!area_reference) return
- area_reference.add_heat(severity)
-
-/obj/structure/window/fulltile/dwelling/Initialize(mapload, direct)
- . = ..()
- var/area/vtm/interior/dwelling/current_area = get_area(src)
- if(current_area)
- area_reference = current_area
- area_reference.dwelling_windows.Add(src)
-
-/obj/structure/window/fulltile/dwelling/Destroy()
- if(area_reference)
- area_reference.dwelling_windows.Remove(src)
- area_reference = null
- . = ..()
-
-/turf/closed/wall/vampwall/city/low/window/dwelling
- window = /obj/structure/window/fulltile/dwelling
-
-/obj/structure/curtain/dwelling
- name = "plain curtains"
- icon_type = "bounty"
- icon_state = "bounty-closed"
- open = FALSE
- opacity = TRUE
- density = FALSE
- opaque_closed = TRUE
- color = null
- alpha = 255
- base_pixel_y = 12
- pixel_y = 12
-
-/obj/item/vtm/dwelling_alarm_card
- name = "alarm disabler card"
- desc = "A small card with a magnetic strip. Can be used to disable triggered security systems. Does not work on systems that have not sent an alarm signal yet."
- icon = 'modular_darkpack/modules/deprecated/icons/items.dmi'
- icon_state = "card3"
- inhand_icon_state = "card3"
- lefthand_file = 'modular_darkpack/modules/deprecated/icons/lefthand.dmi'
- righthand_file = 'modular_darkpack/modules/deprecated/icons/righthand.dmi'
- item_flags = NOBLUDGEON
- flags_1 = HEAR_1
- w_class = WEIGHT_CLASS_SMALL
- armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
- resistance_flags = FIRE_PROOF | ACID_PROOF
- ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
-
-/obj/structure/vtm/dwelling_alarm
- name = "A home alarm console"
- desc = "A small console with a display and small keyboard. A small hole to the side of the panel looks like it would just fit a lockpick."
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "doorctrl"
- density = FALSE
- anchored = TRUE
- pixel_y = 32
- var/area/vtm/interior/dwelling/area_reference
- var/alarm_timer = 0
- var/alarm_active = 0
- var/alarm_safety = 0
-
-/obj/structure/vtm/dwelling_alarm/Initialize(mapload)
- var/area/vtm/interior/dwelling/current_area = get_area(src)
- if(current_area)
- current_area.alarm_panel = src
- area_reference = current_area
- . = ..()
-
-/obj/structure/vtm/dwelling_alarm/proc/contact_cops() //Contains the actual act of yelling at cops
- var/randomized_response_time = rand(1 SECONDS, 30 SECONDS)
- sleep(randomized_response_time)
- SEND_SIGNAL(SSdcs, COMSIG_GLOB_REPORT_CRIME, CRIME_BURGLARY, get_turf(src))
-
-/obj/structure/vtm/dwelling_alarm/proc/alarm_trigger() //Starts the alarm for the house, calls cops
- area_reference.alarm_trigerred = 1
- icon_state = "doorctrl-denied"
- update_icon()
- set_light(4,2,"#FF0000",1)
- say("Intrusion detected! Contacting local PD!")
- playsound(src, 'sound/effects/alert.ogg', 50)
- INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/structure/vtm/dwelling_alarm/, contact_cops))
-
-/obj/structure/vtm/dwelling_alarm/proc/alarm_loop() //Alarm loop
- while(alarm_timer > world.time)
- if(area_reference.alarm_disabled == 1 || alarm_timer == 0) return
- stoplag(1)
- if(area_reference.alarm_trigerred == 0)
- if(area_reference.alarm_disabled == 1 || alarm_timer == 0) return
- alarm_trigger()
- return
-
-/obj/structure/vtm/dwelling_alarm/proc/minigame_loop() // Second alarm loop.
- var/light_time = rand(3 SECONDS, 6 SECONDS)
- var/blink_time
- switch(area_reference.loot_list["type"])
- if("minor")
- blink_time = 20
- if("moderate")
- blink_time = 15
- if("major")
- blink_time = 10
- while(alarm_timer > world.time)
- if(area_reference.alarm_trigerred == 1 || alarm_timer == 0) return
- icon_state = "doorctrl1"
- alarm_safety = 0
- update_icon()
- sleep(light_time)
- if(area_reference.alarm_trigerred == 1 || alarm_timer == 0) return
- icon_state = "doorctrl-p"
- update_icon()
- alarm_safety = 1
- sleep(blink_time)
-
-
-/obj/structure/vtm/dwelling_alarm/proc/restart_alarm() //Delays triggering on an activated alarm
- var/alarm_delay
- switch(area_reference.loot_list["type"])
- if("minor","moderate")
- alarm_delay = 60 SECONDS
- if("major")
- alarm_delay = 30 SECONDS
- alarm_timer = world.time + alarm_delay
- return
-
-/obj/structure/vtm/dwelling_alarm/proc/alarm_arm() //Arms itself and starts the alarm/minigame loops
- desc = "A small console with a display and small keyboard. It seems to be running a security check. A small hole to the side of the panel looks like it would just fit a lockpick."
- say("Intrusion detected. Performing detailed scan.")
- playsound(src, 'sound/ambience/signal.ogg', 25)
- restart_alarm()
- alarm_active = 1
- INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/structure/vtm/dwelling_alarm/, alarm_loop))
- INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/structure/vtm/dwelling_alarm/, minigame_loop))
-
-/obj/structure/vtm/dwelling_alarm/proc/alarm_disarm() //Shuts the alarm down
- say("Alarm disarmed. Have a nice day.")
- desc = initial(desc)
- icon_state = "doorctrl-p"
- update_icon()
- area_reference.alarm_disabled = 1
- alarm_active = 0
- alarm_timer = 0
- return
-
-/obj/structure/vtm/dwelling_alarm/proc/alarm_reset() // Decides what to do during sucessful reset.
- switch(area_reference.loot_list["type"])
- if("minor")
- alarm_disarm()
- if("moderate","major")
- say("Error. Fluctuation in power supply. Restarting security scan...")
- restart_alarm()
-
-/obj/structure/vtm/dwelling_alarm/attackby(obj/item/I, mob/living/user, params)
- if(istype(I, /obj/item/vamp/keys/hack))
- if(area_reference.alarm_disabled == 1)
- to_chat(user, span_warning("The alarm is disabled and nothing seems to be able to change that."))
- return
- if(alarm_active == 0)
- to_chat(user, span_warning("You start to wiggle the lockpick in the opening. This will likely turn the alarm on if you do not stop!"))
- if(do_mob(user, src, 10 SECONDS))
- alarm_arm()
- return
- if(alarm_active == 1)
- if(area_reference.alarm_trigerred == 1)
- to_chat(user, span_warning("The alarm has already been set off, there is no point in messing with it now."))
- return
- if(alarm_safety == 0)
- to_chat(user, span_warning("You feel a button depress at the end of the opening. The alarm seems to activate!"))
- alarm_trigger()
- return
- if(alarm_safety == 1)
- to_chat(user, span_notice("You feel a button depress at the end of the opening. The display on the alarm flickers briefly!"))
- alarm_reset()
- return
- if(istype(I, /obj/item/vtm/dwelling_alarm_card))
- if(area_reference.alarm_trigerred == 0)
- to_chat(user, span_notice("You slide the card into a slot on the side of the alarm box. There is no visible reaction. "))
- return
- if(area_reference.alarm_trigerred == 1)
- to_chat(user, span_notice("You slide the card into a slot on the side of the alarm box. The alarm seems to start a disarming sequence."))
- alarm_disarm()
- return
-
-/obj/structure/vtm/dwelling_alarm/Destroy()
- . = ..()
- area_reference = null
diff --git a/modular_darkpack/modules/dwelling/code/objs/dwelling_window_defs.dm b/modular_darkpack/modules/dwelling/code/objs/dwelling_window_defs.dm
deleted file mode 100644
index e55f5970ac19..000000000000
--- a/modular_darkpack/modules/dwelling/code/objs/dwelling_window_defs.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/obj/structure/window_frame/dwelling/city
- icon_state = "city-window"
- base_icon_state = "city"
- window = /obj/structure/window/fulltile/dwelling
-
-/obj/structure/window_frame/dwelling/junk
- base_icon_state = "junk"
- icon_state = "junk-window"
- window = /obj/structure/window/fulltile/dwelling
-
-/obj/structure/window_frame/dwelling/old
- base_icon_state = "old"
- icon_state = "old-window"
- window = /obj/structure/window/fulltile/dwelling
diff --git a/modular_darkpack/modules/dwelling/code/turfs/turfs_dwelling_instances.dm b/modular_darkpack/modules/dwelling/code/turfs/turfs_dwelling_instances.dm
deleted file mode 100644
index cc8140556640..000000000000
--- a/modular_darkpack/modules/dwelling/code/turfs/turfs_dwelling_instances.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/turf/closed/wall/vampwall/city/low/window/dwelling/junk
- base_icon_state = "junk"
- icon_state = "junk-window"
-
-/turf/closed/wall/vampwall/city/low/window/dwelling/old
- base_icon_state = "old"
- icon_state = "old-window"
diff --git a/modular_darkpack/modules/economy/code/stocks_license.dm b/modular_darkpack/modules/economy/code/stocks_license.dm
deleted file mode 100644
index daac49ca3183..000000000000
--- a/modular_darkpack/modules/economy/code/stocks_license.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/obj/item/stocks_license
- name = "unidentified stocks trading license"
- desc = "Contains tons of information about broker's marketplace account."
- icon_state = "card1"
- icon = 'modular_darkpack/modules/deprecated/icons/items.dmi'
- ONFLOOR_ICON_HELPER('modular_darkpack/modules/deprecated/icons/onfloor.dmi')
- w_class = WEIGHT_CLASS_SMALL
- item_flags = NOBLUDGEON
- resistance_flags = FIRE_PROOF | ACID_PROOF
- var/balance = 200
- var/whose
-
-/obj/item/stocks_license/attack_self(mob/user)
- . = ..()
- if(name == "unidentified stocks trading license")
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- var/obj/item/stocks_license/CR = get_fuckin_card_number(H.real_name)
- if(CR)
- return
- name = "[H.real_name]'s stocks trading license"
- whose = H.real_name
-
-/obj/item/stocks_license/Initialize(mapload)
- . = ..()
- icon_state = "card[rand(1, 3)]"
- GLOB.stock_licenses += src
-
-/obj/item/stocks_license/Destroy()
- . = ..()
- GLOB.stock_licenses -= src
-
-/obj/item/stocks_license/examine(mob/user)
- . = ..()
- . += "Balance: [balance] [MONEY_NAME]"
diff --git a/modular_darkpack/modules/effects/code/reflection.dm b/modular_darkpack/modules/effects/code/reflection.dm
deleted file mode 100644
index efac56a60303..000000000000
--- a/modular_darkpack/modules/effects/code/reflection.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-/obj/effect/reflection
- name = "reflection"
- appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- vis_flags = VIS_HIDE
- layer = ABOVE_OBJ_LAYER
- var/alpha_icon = 'icons/obj/watercloset.dmi'
- var/alpha_icon_state = "mirror_mask"
- var/obj/mirror
- desc = "Why are you locked in the bathroom?"
- anchored = TRUE
-
- var/blur_filter
-
-/obj/effect/reflection/proc/setup_visuals(target)
- mirror = target
-
- if(mirror.pixel_x > 0)
- dir = WEST
- else if (mirror.pixel_x < 0)
- dir = EAST
-
- if(mirror.pixel_y > 0)
- dir = SOUTH
- else if (mirror.pixel_y < 0)
- dir = NORTH
-
- pixel_x = mirror.pixel_x
- pixel_y = mirror.pixel_y
-
- blur_filter = filter(type="blur", size = 1)
-
- update_mirror_filters()
-
-/obj/effect/reflection/proc/update_mirror_filters()
- filters = null
-
- vis_contents = null
-
- if(!mirror)
- return
-
- alpha = mirror.alpha
-
- var/matrix/M = matrix()
- if(dir == WEST || dir == EAST)
- M.Scale(-1, 1)
- else if(dir == SOUTH|| dir == NORTH)
- M.Scale(1, -1)
- pixel_y = mirror.pixel_y + 5
-
- transform = M
-
- filters += filter("type" = "alpha", "icon" = icon(alpha_icon, alpha_icon_state), "x" = 0, "y" = 0)
-
- vis_contents += get_turf(mirror)
diff --git a/modular_darkpack/modules/latejoin_antagonists/code/latejoin_subsystem.dm b/modular_darkpack/modules/latejoin_antagonists/code/latejoin_subsystem.dm
deleted file mode 100644
index 19ba24f28b90..000000000000
--- a/modular_darkpack/modules/latejoin_antagonists/code/latejoin_subsystem.dm
+++ /dev/null
@@ -1,187 +0,0 @@
-//SABBAT = +90 threat
-//HUNT = +60 threat
-//CAITIFF = +30 threat
-
-SUBSYSTEM_DEF(bad_guys_party)
- name = "Bad Guys Party"
- init_order = INIT_ORDER_DEFAULT
- wait = 4000
- priority = FIRE_PRIORITY_DEFAULT
-
- var/threat = 0 //Bigger number - less chance
-
- var/setting
-
- var/list/candidates = list()
- var/max_candidates = 0
- var/datum/outfit/job/vampire/Next = null
- var/go_on_next_fire = FALSE
-
- var/setted_up = FALSE
- var/list/datum/job/jobs = list()
-
-/datum/controller/subsystem/bad_guys_party/proc/setup_occupations()
- var/list/all_jobs = subtypesof(/datum/job)
-
- for(var/J in all_jobs)
- var/datum/job/job = new J()
- if(!job)
- continue
- jobs[job.title] = job
-
-/datum/controller/subsystem/bad_guys_party/proc/GetAntagJob(rank)
- return jobs[rank]
-
-/datum/controller/subsystem/bad_guys_party/proc/set_badguys(new_setting)
- if(new_setting in list("caitiff", "sabbat", "hunter"))
- SSbad_guys_party.setting = new_setting
- else
- setting = null
-
-
-
-/datum/controller/subsystem/bad_guys_party/proc/get_badguys(level)
- if(setting)
- switch(setting)
- if("caitiff")
- if(Next)
- qdel(Next)
- threat = min(100, threat+60)
- max_candidates = 1
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/caitiff()
- setting = null
- if("sabbat")
- if(Next)
- qdel(Next)
- threat = min(100, threat+30)
- max_candidates = 2
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/sabbatist()
- setting = null
- if("hunter")
- if(Next)
- qdel(Next)
- threat = min(100, threat+60)
- max_candidates = 5
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/hunter()
- setting = null
- else if(setting == null)
- switch(level)
- if(1)
- if(prob(20))
- //caitiff
- if(Next)
- qdel(Next)
- threat = min(100, threat+60)
- max_candidates = 1
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/caitiff()
- else
- //sabbat
- if(Next)
- qdel(Next)
- threat = min(100, threat+30)
- max_candidates = 2
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/sabbatist()
- if(2)
- if(prob(30))
- //sabbat
- if(Next)
- qdel(Next)
- threat = min(100, threat+90)
- max_candidates = 4
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/sabbatist()
- else
- //hunt
- if(Next)
- qdel(Next)
- threat = min(100, threat+60)
- max_candidates = 2
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/hunter()
- /*if(3)
- if(prob(50))
- //hunt
- if(Next)
- qdel(Next)
- threat = min(100, threat+60)
- max_candidates = 2
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/hunter()
- else
- //sabbat
- if(Next)
- qdel(Next)
- threat = min(100, threat+90)
- max_candidates = 3
- go_on_next_fire = TRUE
- Next = new /datum/outfit/job/vampire/sabbatist()*/
-
-/mob/dead/new_player/proc/ForceLateSpawn()
- if(SSticker.late_join_disabled)
- alert(src, "An administrator has disabled late join spawning.")
- return FALSE
-
- //Remove the player from the join queue if he was in one and reset the timer
- SSticker.queued_players -= src
- SSticker.queue_delay = 4
-
- SSjob.AssignRole(src, "Citizen", 1)
-
- var/mob/living/character = create_character(TRUE) //creates the human and transfers vars and mind
- SSbad_guys_party.Next.equip(H = character, visualsOnly = FALSE)
- var/atom/movable/screen/splash/Spl = new(character.client, TRUE)
- Spl.Fade(TRUE)
- character.update_parallax_teleport()
-
- SSticker.minds += character.mind
- character.client.init_verbs() // init verbs for the late join
-
-/datum/controller/subsystem/bad_guys_party/fire()
- switch(SSmasquerade.total_level)
- if(0 to 250)
- wait = 3000
- if(251 to 500)
- wait = 6000
- if(501 to 1000)
- wait = 12000
- if(!setted_up)
- setup_occupations()
- setted_up = TRUE
-
- if(SSticker.current_state == GAME_STATE_PLAYING)
- threat = max(0, threat-10)
-
- if(go_on_next_fire)
- if(length(candidates))
- var/list/actual_candidates = candidates.Copy()
- if(length(candidates) > max_candidates)
- for(var/i in 1 to length(candidates)-max_candidates)
- actual_candidates -= pick(candidates)
- for(var/mob/dead/new_player/NP in actual_candidates)
- candidates -= NP
- NP.late_ready = FALSE
- NP.ForceLateSpawn()
- go_on_next_fire = FALSE
- return
- else
- if(SSmasquerade.total_level <= 500)
- get_badguys(2)
- else
- switch(threat)
- if(0 to 10)
- //ANYONE
- if(prob(100-threat))
- get_badguys(rand(1, 3))
- if(11 to 40)
- //HUNT OR CAITIFF
- if(prob(100-threat))
- get_badguys(rand(1, 2))
- if(41 to 70)
- //CAITIFF ONLY
- if(prob(100-threat))
- get_badguys(1)
diff --git a/modular_darkpack/modules/quirks/code/quirks.dm b/modular_darkpack/modules/quirks/code/quirks.dm
deleted file mode 100644
index 932adc99a81a..000000000000
--- a/modular_darkpack/modules/quirks/code/quirks.dm
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
-Experienced Driver
-Bone Key
-Anonymous
-Bloody Lover
-Tough Flesh
-Slowpoke
-\"Blood\" Sucker
-One Handed
-Non Intellectual
-Coffin Therapy
-Not Crossing the Rubicon
-Hungry
-Fenix
-Dwarf
-Homosexual
-Dancer
-*/
-/datum/quirk/broker
- name = "Broker"
- desc = "You are working on stock market in Millenium Tower."
- value = 0
- gain_text = "You feel more financial stable."
- lose_text = "You don't feel rich anymore."
-
-/datum/quirk/broker/on_spawn()
- var/mob/living/carbon/human/H = quirk_holder
- var/obj/item/stocks_license/pills = new()
- pills.whose = H.real_name
- pills.name = "[H.real_name]'s stocks trading license"
- var/list/slots = list(
- LOCATION_LPOCKET = ITEM_SLOT_LPOCKET,
- LOCATION_RPOCKET = ITEM_SLOT_RPOCKET,
- LOCATION_BACKPACK = ITEM_SLOT_BACKPACK,
- LOCATION_HANDS = ITEM_SLOT_HANDS
- )
- H.equip_in_one_of_slots(pills, slots, FALSE)
-
-/datum/quirk/annonymus
- name = "Anonymous"
- desc = "You always bring a mask."
- value = 1
- gain_text = "You feel more anonymus."
- lose_text = "You don't feel anonymous anymore."
-
-/datum/quirk/annonymus/on_spawn()
- var/mob/living/carbon/human/H = quirk_holder
- H.equip_to_slot_or_del(new /obj/item/clothing/mask/vampire/balaclava(H), ITEM_SLOT_MASK)
-
-/datum/quirk/bloody_lover
- name = "Bloody Lover"
- desc = "Your bites feel more like a kiss."
- mob_trait = TRAIT_BLOODY_LOVER
- value = 2
- gain_text = "You feel more experienced in love."
- lose_text = "You feel more clueless in love."
- allowed_splats = list("Vampire", "Kuei-Jin")
-
-/datum/quirk/tough_flesh
- name = "Tough Flesh"
- desc = "Your flesh is much sturdier than normal. You are much better in resisting stuns, bumps and hits."
- mob_trait = TRAIT_TOUGH_FLESH
- value = 3
- gain_text = "You feel tough."
- lose_text = "You feel fragile again."
-
-/datum/movespeed_modifier/slowpoke
- multiplicative_slowdown = 1
-
-/datum/quirk/slowpoke
- name = "Slowpoke"
- desc = "You move slower."
- value = -3
- gain_text = "You feel slo-o-o-o-o-o-o-o-o-o-o-o-ow."
- lose_text = "You can feel a normal speed again."
-
-/datum/quirk/slowpoke/on_spawn()
- var/mob/living/carbon/H = quirk_holder
- H.add_movespeed_modifier(/datum/movespeed_modifier/slowpoke)
-
-/datum/quirk/bloody_sucker
- name = "Addicted"
- desc = "You just can't stop sucking, before your victim dies."
- mob_trait = TRAIT_BLOODY_SUCKER
- value = -2
- gain_text = "You feel anxious about the way you feed."
- lose_text = "You can feed normal again."
- allowed_splats = list("Vampire", "Kuei-Jin")
-
-/datum/quirk/lazy
- name = "Lazy"
- desc = "You do things much more slowly than others."
- mob_trait = TRAIT_LAZY
- value = -2
- gain_text = "You feel anxious about the way you feed."
- lose_text = "You can feed normal again."
-
-/datum/quirk/one_hand
- name = "One Handed"
- desc = "You've lost an arm before the embrace, and it's still unhealed."
- value = -3
- gain_text = "You don't feel one of your arms."
- lose_text = "You feel both of your arms again."
-
-/datum/quirk/one_hand/on_spawn()
- var/mob/living/carbon/human/H = quirk_holder
- var/obj/item/bodypart/B1 = H.get_bodypart(BODY_ZONE_R_ARM)
- var/obj/item/bodypart/B2 = H.get_bodypart(BODY_ZONE_L_ARM)
- if(prob(50))
- B1.drop_limb()
- qdel(B1)
- else
- B2.drop_limb()
- qdel(B2)
-
-/datum/quirk/non_int
- name = "Non Intellectual"
- desc = "You are far more special than other beings from your kind, so you gain experience slower."
- mob_trait = TRAIT_NON_INT
- value = -5
- gain_text = "You feel dumb."
- lose_text = "You don't feel dumb anymore."
- allowed_splats = list("Vampire", "Human", "Ghoul", "Kuei-Jin")
-
-/datum/quirk/coffin_therapy
- name = "Coffin Therapy"
- desc = "Your wounds heal only in a coffin."
- mob_trait = TRAIT_COFFIN_THERAPY
- value = -2
- gain_text = "You feel like you need a coffin."
- lose_text = "You don't need a coffin anymore."
- allowed_splats = list("Vampire", "Ghoul")
-
-/datum/quirk/rubicon
- name = "Crossing the Rubicon"
- desc = "You are afraid of water, so you can't cross it."
- mob_trait = TRAIT_RUBICON
- value = -1
- gain_text = "You feel afraid of water."
- lose_text = "You aren't afraid of water anymore."
- allowed_splats = list("Vampire", "Ghoul")
-
-/datum/quirk/hungry
- name = "Hungry"
- desc = "You need more food to feed your hunger."
- mob_trait = TRAIT_HUNGRY
- value = -3
- gain_text = "You feel extra HUNGRY."
- lose_text = "You don't feel extra HUNGRY anymore."
- allowed_splats = list("Vampire", "Ghoul")
-
-/datum/action/fly_upper
- name = "Fly Up"
- desc = "Fly to the upper level."
- button_icon_state = "fly"
- check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_LYING|AB_CHECK_CONSCIOUS
- var/last_acrobate = 0
-
-/datum/action/fly_upper/Trigger()
- owner.up()
-
-/datum/quirk/dancer
- name = "Dancer"
- desc = "You know a couple of dance moves."
- value = 2
- gain_text = "You want to dance."
- lose_text = "You don't want to dance anymore."
-
-/datum/quirk/dancer/on_spawn()
- var/mob/living/carbon/H = quirk_holder
- var/datum/action/dance/DA = new()
- DA.Grant(H)
-
-/datum/action/dance
- name = "Dance"
- desc = "Dance from dusck till dawn!"
- button_icon_state = "dance"
- check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_LYING|AB_CHECK_CONSCIOUS
- var/last_added_humanity = 0
-
-/datum/action/dance/Trigger()
- if(HAS_TRAIT(owner, TRAIT_INCAPACITATED))
- to_chat(owner, span_warning("You're a little too close to being dead to get down!"))
- return
-
- if(HAS_TRAIT(owner, TRAIT_FLOORED))
- to_chat(owner, span_warning("You got to get up before you get down!"))
- return
-// var/mob/living/carbon/H = owner
- if(prob(50))
- dancefirst(owner)
- else
- dancesecond(owner)
-
-/datum/quirk/dwarf
- name = "Dwarf"
- desc = "You are short."
- value = 0
- gain_text = "You feel short."
- lose_text = "You don't feel short anymore."
-
-/datum/quirk/dwarf/add()
- quirk_holder.AddElement(/datum/element/dwarfism, COMSIG_PARENT_PREQDELETED, src)
-
-/datum/quirk/dwarf/remove()
- if (!quirk_holder)
- return
- quirk_holder.RemoveElement(/datum/element/dwarfism)
-
-#define SHORT 4/5
-#define TALL 5/4
-
-///Very similar to squish, but for dwarves and shorties
-/datum/element/dwarfism
- element_flags = ELEMENT_DETACH|ELEMENT_BESPOKE
- id_arg_index = 2
- var/comsig
- var/list/attached_targets = list()
-
-/datum/element/dwarfism/Attach(datum/target, comsig, comsig_target)
- . = ..()
- if(!ishuman(target))
- return ELEMENT_INCOMPATIBLE
-
- src.comsig = comsig
-
- var/mob/living/carbon/human/L = target
- if(L.lying_angle != 0)
- L.transform = L.transform.Scale(SHORT, 1)
- L.transform = L.transform.Translate(L.lying_angle == 90 ? 16*(SHORT-1) : -(16*(SHORT-1)), 0) //Makes sure you stand on the tile no matter the size - sand
- else
- L.transform = L.transform.Scale(1, SHORT)
- L.transform = L.transform.Translate(0, 16*(SHORT-1)) //Makes sure you stand on the tile no matter the size - sand
- attached_targets[target] = comsig_target
- RegisterSignal(target, comsig, PROC_REF(check_loss)) //Second arg of the signal will be checked against the comsig_target.
-
-/datum/element/dwarfism/proc/check_loss(mob/living/L, comsig_target)
- if(attached_targets[L] == comsig_target)
- Detach(L)
-
-/datum/element/dwarfism/Detach(mob/living/L)
- . = ..()
- if(QDELETED(L))
- return
- if(L.lying_angle != 0)
- L.transform = L.transform.Scale(TALL, 1)
- L.transform = L.transform.Translate(L.lying_angle == 90 ? 16*(TALL-1) : -(16*(TALL-1)), 0) //Makes sure you stand on the tile no matter the size - sand
- else
- L.transform = L.transform.Scale(1, TALL)
- L.transform = L.transform.Translate(0, 16*(TALL-1)) //Makes sure you stand on the tile no matter the size - sand
- UnregisterSignal(L, comsig)
- attached_targets -= L
-
-#undef SHORT
-#undef TALL
-
-/datum/quirk/homosexual
- name = "Homosexual"
- desc = "You love your gender more than the opposite."
- value = 0
- mob_trait = TRAIT_HOMOSEXUAL
- gain_text = "You feel gay."
- lose_text = "You don't feel gay anymore."
-
-/datum/quirk/consumption
- name = "Consumption"
- desc = "Your blood is wrought with flesh eating bacteria that is literally eating you from inside out. You take some damage every random amount of time."
- value = -4
- gain_text = "You feel injured from inside."
- lose_text = "You feel healthy again."
- medical_record_text = "Patient has aggressive flesh eating bacteria in their boody."
- allowed_splats = list("Vampire", "Ghoul", "Human", "Kuei-Jin")
-
-/datum/quirk/consumption/on_process(delta_time)
- if(prob(5))
- quirk_holder.adjust_brute_loss(5, TRUE)
-
-/datum/quirk/hunted
- name = "Sir You Are Being Hunted"
- desc = "You are in the Blood Hunt list from the start and can't leave it. Good luck!"
- value = -3
- mob_trait = TRAIT_HUNTED
- allowed_splats = list("Vampire", "Ghoul")
-
-/datum/quirk/hunted/on_spawn()
- if(isturf(quirk_holder.loc))
- SSbloodhunt.announce_hunted(quirk_holder, "Camarilla Wanted List")
-
-/datum/quirk/badvision
- name = "Nearsighted"
- desc = "Your eye illness somehow did not become cured after the Embrace, and you need to wear perception glasses."
- value = -1
- gain_text = "Things far away from you start looking blurry."
- lose_text = "You start seeing faraway things normally again."
- medical_record_text = "Patient requires prescription glasses in order to counteract nearsightedness."
-
-/datum/quirk/badvision/add()
- quirk_holder.become_nearsighted(ROUNDSTART_TRAIT)
-
-/datum/quirk/badvision/on_spawn()
- var/mob/living/carbon/human/H = quirk_holder
- var/obj/item/clothing/glasses/vampire/perception/glasses = new(get_turf(H))
- if(!H.equip_to_slot_if_possible(glasses, ITEM_SLOT_EYES, bypass_equip_delay_self = TRUE))
- H.put_in_hands(glasses)
-
-/datum/quirk/masquerade
- name = "Masquerade Violator"
- desc = "You can't recover your masquerade at all."
- value = -2
- mob_trait = TRAIT_VIOLATOR
- allowed_splats = list("Vampire", "Ghoul", "Kuei-Jin")
-
-/datum/quirk/irongullet
- name = "Iron Gullet"
- desc = "You don't mind sucking up cold blood from corpses. Though there's rarely that much left."
- value = 3
- mob_trait = TRAIT_GULLET
- gain_text = "You feel necroresistant."
- lose_text = "You don't want necrophilia anymore."
- allowed_splats = list("Vampire")
-
-/datum/quirk/charmer
- name = "Abnormal Charmer"
- desc = "You charm people around you."
- value = 2
- mob_trait = TRAIT_CHARMER
- gain_text = "You feel charismatic."
- lose_text = "You don't feel charismatic anymore."
- allowed_splats = list("Vampire", "Kuei-Jin")
-
-/datum/quirk/tower
- name = "Tower"
- desc = "You are tall."
- value = 0
- gain_text = "You feel tall."
- lose_text = "You don't feel tall anymore."
-
-/datum/quirk/tower/add()
- quirk_holder.AddElement(/datum/element/giantism, COMSIG_PARENT_PREQDELETED, src)
-
-/datum/quirk/tower/remove()
- if (!quirk_holder)
- return
- quirk_holder.RemoveElement(/datum/element/giantism)
-
-#define TALL 1.16
-#define SHORT 0.86206896551
-
-///Very similar to squish, but for dwarves and shorties
-/datum/element/giantism
- element_flags = ELEMENT_DETACH|ELEMENT_BESPOKE
- id_arg_index = 2
- var/comsig
- var/list/attached_targets = list()
-
-/datum/element/giantism/Attach(datum/target, comsig, comsig_target)
- . = ..()
- if(!ishuman(target))
- return ELEMENT_INCOMPATIBLE
-
- src.comsig = comsig
-
- var/mob/living/carbon/human/L = target
- if(L.lying_angle != 0)
- L.transform = L.transform.Scale(TALL, 1)
- L.transform = L.transform.Translate(L.lying_angle == 90 ? 16*(TALL-1) : -(16*(TALL-1)), 0) //Makes sure you stand on the tile no matter the size - sand
- else
- L.transform = L.transform.Scale(1, TALL)
- L.transform = L.transform.Translate(0, 16*(TALL-1)) //Makes sure you stand on the tile no matter the size - sand
- attached_targets[target] = comsig_target
- RegisterSignal(target, comsig, PROC_REF(check_loss)) //Second arg of the signal will be checked against the comsig_target.
-
-/datum/element/giantism/proc/check_loss(mob/living/L, comsig_target)
- if(attached_targets[L] == comsig_target)
- Detach(L)
-
-/datum/element/giantism/Detach(mob/living/L)
- . = ..()
- if(QDELETED(L))
- return
- if(L.lying_angle != 0)
- L.transform = L.transform.Scale(SHORT, 1)
- L.transform = L.transform.Translate(L.lying_angle == 90 ? 16*(SHORT-1) : -(16*(SHORT-1)), 0) //Makes sure you stand on the tile no matter the size - sand
- else
- L.transform = L.transform.Scale(1, SHORT)
- L.transform = L.transform.Translate(0, 16*(SHORT-1)) //Makes sure you stand on the tile no matter the size - sand
- UnregisterSignal(L, comsig)
- attached_targets -= L
-
-#undef SHORT
-#undef TALL
-
-//flower languages
-/datum/quirk/flower_language //sourced from Elizabeth Wirt's Flora's Dictionary for a Victorian era popular American perspective on Floriography to fit the setting.
- name = "Floriography" //available @ https://archive.org/details/florasdictionary00wirtrich/page/n35/mode/2up for future flora added to the project
- desc = "Learn the cryptology of victorian flower language."
- mob_trait = TRAIT_FLOWER_LANGUAGE
- value = 0
- gain_text = "You recall the Victorian language of flowers."
- lose_text = "Your knowledge of the Victorian language of flowers slips away."
-
-/datum/quirk/flower_language_japanese //ideally this would be a subset of the above somehow but I lack the knowledge
- name = "Hanakotoba" //sourced from https://hananokotoba.com/sagisou/
- desc = "Learn the cryptology of japanese flower language."
- mob_trait = TRAIT_FLOWER_LANGUAGE_JAPANESE
- value = 0
- gain_text = "You recall the art of Hanakotoba."
- lose_text = "Your knowledge of Hanakotoba slips away."
diff --git a/modular_darkpack/modules/weather/code/weather.dm b/modular_darkpack/modules/weather/code/weather.dm
deleted file mode 100644
index fe22ba166763..000000000000
--- a/modular_darkpack/modules/weather/code/weather.dm
+++ /dev/null
@@ -1,199 +0,0 @@
-// Everything here should be worked into /datum/weather
-GLOBAL_LIST_EMPTY(managed_weather)
-
-#define WEATHER_CLEAR "Clear"
-#define WEATHER_RAIN "Rain"
-#define WEATHER_SNOW "Snow"
-#define WEATHER_FOG "Fog"
-
-SUBSYSTEM_DEF(cityweather)
- name = "City Weather"
- init_order = INIT_ORDER_DEFAULT
- wait = 60 SECONDS
- priority = FIRE_PRIORITY_DEFAULT
-
- var/current_weather = WEATHER_CLEAR //"Clear", "Rain" and "Fog"
- var/list/forecast = list()
- var/raining = FALSE
- var/fogging = FALSE
- var/snowing = FALSE
-
-/datum/controller/subsystem/cityweather/fire()
- if(SScity_time.hour > 5 && SScity_time.hour < 21)
- return
-
- var/cityhour = 1
- switch(SScity_time.hour)
- if(21)
- cityhour = 1
- if(22)
- cityhour = 2
- if(23)
- cityhour = 3
- if(0)
- cityhour = 4
- if(1)
- cityhour = 5
- if(2)
- cityhour = 6
- if(3)
- cityhour = 7
- if(4)
- cityhour = 8
- if(5)
- cityhour = 9
-
- if(forecast[cityhour] != current_weather)
- current_weather = forecast[cityhour]
- switch(forecast[cityhour])
- if(WEATHER_CLEAR)
- to_chat(world, "The night sky becomes clear...")
- if(raining)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- raining = FALSE
- if(fogging)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- fogging = FALSE
- if(snowing)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- snowing = FALSE
- if(WEATHER_RAIN)
- to_chat(world, "Clouds are uniting on the sky, small raindrops irrigate the city...")
- raining = TRUE
- if(fogging)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- fogging = FALSE
- if(snowing)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- snowing = FALSE
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = 0
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- V.layer = SPACEVINE_LAYER
- V.plane = GAME_PLANE
- V.icon = 'modular_darkpack/modules/deprecated/icons/newweather.dmi'
- V.icon_state = "rain[rand(1, 15)]"
- V.pixel_w = -16
- V.pixel_z = -32
- var/matrix/M = new
- M.Scale(0.5, 0.5)
- V.transform = M
- if(WEATHER_SNOW)
- to_chat(world, "Clouds are uniting on the sky, small snowflakes irrigate the city...")
- if(raining)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- raining = FALSE
- if(fogging)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- fogging = FALSE
- snowing = TRUE
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = 0
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- V.layer = SPACEVINE_LAYER
- V.plane = GAME_PLANE
- V.icon = 'modular_darkpack/modules/deprecated/icons/newweather.dmi'
- V.icon_state = "snow[rand(1, 15)]"
- V.pixel_w = -16
- V.pixel_z = 0
- if(WEATHER_FOG)
- to_chat(world, "Visibility range quickly decreases...")
- if(raining)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- raining = FALSE
- fogging = TRUE
- if(snowing)
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = INVISIBILITY_MAXIMUM
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- snowing = FALSE
- for(var/obj/effect/weather_manager/V in GLOB.managed_weather)
- V.invisibility = 0
- animate(V, transform = null, pixel_w = 0, pixel_z = 0, alpha = 255)
- V.layer = SPACEVINE_LAYER
- V.plane = GAME_PLANE
- V.icon = 'modular_darkpack/modules/deprecated/icons/fog.dmi'
- V.icon_state = "fog"
- V.pixel_w = -96
- V.pixel_z = -96
- animate(V, pixel_x = rand(-96, 96), pixel_y = rand(-96, 96), alpha = rand(5, 21), transform = matrix()*rand(1, 3), transform = turn(matrix(), rand(0, 360)), time = rand(100, 200), loop = -1)
- animate(transform = null, pixel_x = 0, pixel_y = 0, alpha = rand(5, 21), time = rand(100, 200))
-
-/datum/controller/subsystem/cityweather/Initialize()
- . = ..()
- create_forecast()
-
-/datum/controller/subsystem/cityweather/proc/create_forecast()
- for(var/i in 1 to 9)
- forecast += i
- var/weather = WEATHER_CLEAR
- if(i != 1 && i != 9)
- if(prob(50))
- if(check_holidays(FESTIVE_SEASON))
- weather = pick(WEATHER_CLEAR, WEATHER_SNOW, WEATHER_FOG)
- else
- weather = pick(WEATHER_CLEAR, WEATHER_RAIN, WEATHER_FOG)
- forecast[i] = weather
-
-/datum/controller/subsystem/cityweather/proc/get_forecast(mob/user)
- for(var/i in 1 to 9)
- var/weath = forecast[i]
- var/time = "21:00"
- switch(i)
- if(1)
- time = "21:00"
- if(2)
- time = "22:00"
- if(3)
- time = "23:00"
- if(4)
- time = "00:00"
- if(5)
- time = "01:00"
- if(6)
- time = "02:00"
- if(7)
- time = "03:00"
- if(8)
- time = "04:00"
- if(9)
- time = "05:00"
- to_chat(user, "[time], [weath]")
-
-/obj/effect/weather_manager
- plane = GAME_PLANE
- layer = SPACEVINE_LAYER
- anchored = TRUE
- density = FALSE
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-
-/obj/effect/weather_manager/Initialize(mapload)
- . = ..()
- GLOB.managed_weather += src
-
-/turf/open/Initialize(mapload)
- . = ..()
- var/area/my_area = loc
- if(istype(my_area, /area/vtm) && my_area.outdoors)
- new /obj/effect/weather_manager(src)
-
-#undef WEATHER_CLEAR
-#undef WEATHER_RAIN
-#undef WEATHER_SNOW
-#undef WEATHER_FOG
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm
deleted file mode 100644
index b63f6d3c0edd..000000000000
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/tribes.dm
+++ /dev/null
@@ -1,223 +0,0 @@
-/datum/action/cooldown/power/gift/stoic_pose
- name = "Stoic Pose"
- desc = "With this gift garou sends theirself into cryo-state, ignoring all incoming damage but also covering themself in a block of ice."
- button_icon_state = "stoic_pose"
- rage_cost = 2
- gnosis_cost = 1
-
-/datum/action/cooldown/power/gift/stoic_pose/Trigger()
- . = ..()
- if(allowed_to_proceed)
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/ice_blocking.ogg', 100, FALSE)
- var/mob/living/carbon/C = owner
- if(get_garou_splat(C))
- var/obj/were_ice/W = new (get_turf(owner))
- C.Stun(12 SECONDS)
- C.forceMove(W)
- spawn(12 SECONDS)
- C.forceMove(get_turf(W))
- qdel(W)
- if(iscrinos(C))
- var/obj/were_ice/crinos/W = new (get_turf(owner))
- C.Stun(12 SECONDS)
- C.forceMove(W)
- spawn(12 SECONDS)
- C.forceMove(get_turf(W))
- qdel(W)
- if(islupus(C))
- var/obj/were_ice/lupus/W = new (get_turf(owner))
- C.Stun(12 SECONDS)
- C.forceMove(W)
- spawn(12 SECONDS)
- C.forceMove(get_turf(W))
- qdel(W)
-
-/obj/were_ice
- name = "ice block"
- desc = "Stores some precious organs..."
- icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_lupus.dmi'
- icon_state = "ice_man"
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
-
-/obj/were_ice/lupus
- icon_state = "ice_wolf"
-
-/obj/were_ice/crinos
- icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf.dmi'
- icon_state = "ice"
- pixel_w = -8
-
-/datum/action/cooldown/power/gift/freezing_wind
- name = "Freezing Wind"
- desc = "Garou of Wendigo Tribe can create a stream of cold, freezing wind, and strike her foes with it."
- button_icon_state = "freezing_wind"
- rage_cost = 1
- //gnosis_cost = 1
-
-/datum/action/cooldown/power/gift/freezing_wind/Trigger()
- . = ..()
- if(allowed_to_proceed)
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/wind_cast.ogg', 100, FALSE)
- for(var/turf/T in range(3, get_step(get_step(owner, owner.dir), owner.dir)))
- if(owner.loc != T)
- var/obj/effect/wind/W = new(T)
- W.dir = owner.dir
- W.strength = 100
- spawn(200)
- qdel(W)
-// if(allowed_to_proceed)
-
-/datum/action/cooldown/power/gift/bloody_feast
- name = "Bloody Feast"
- desc = "By eating a grabbed corpse, garou can redeem their lost health and heal the injuries."
- button_icon_state = "bloody_feast"
- rage_cost = 2
- gnosis_cost = 1
-
-/datum/action/cooldown/power/gift/bloody_feast/Trigger()
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/C = owner
- if(C.pulling)
- if(isliving(C.pulling))
- var/mob/living/L = C.pulling
- if(L.stat == DEAD)
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/bloody_feast.ogg', 50, FALSE)
- qdel(L)
- C.revive(full_heal = TRUE, admin_revive = TRUE)
-
-/datum/action/cooldown/power/gift/stinky_fur
- name = "Stinky Fur"
- desc = "Garou creates an aura of very toxic smell, which disorientates everyone around."
- button_icon_state = "stinky_fur"
-
-/datum/action/cooldown/power/gift/stinky_fur/Trigger()
- . = ..()
- if(allowed_to_proceed)
- playsound(get_turf(owner), 'modular_darkpack/modules/powers/sounds/necromancy.ogg', 75, FALSE)
- for(var/mob/living/carbon/C in orange(5, owner))
- if(prob(25))
- C.vomit()
- C.dizziness += 10
- C.add_confusion(10)
-
-/datum/action/cooldown/power/gift/venom_claws
- name = "Venom Claws"
- desc = "While this ability is active, strikes with claws poison foes of garou."
- button_icon_state = "venom_claws"
- rage_cost = 1
-
-/datum/action/cooldown/power/gift/venom_claws/Trigger()
- . = ..()
- if(allowed_to_proceed)
- if(ishuman(owner))
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/venom_claws.ogg', 75, FALSE)
- var/mob/living/carbon/human/H = owner
- H.melee_damage_lower = initial(H.melee_damage_lower)+15
- H.melee_damage_upper = initial(H.melee_damage_upper)+15
- H.tox_damage_plus = 15
- to_chat(owner, span_notice("You feel your claws filling with pure venom..."))
- spawn(12 SECONDS)
- H.tox_damage_plus = 0
- H.melee_damage_lower = initial(H.melee_damage_lower)
- H.melee_damage_upper = initial(H.melee_damage_upper)
- to_chat(owner, span_warning("Your claws are not poison anymore..."))
- else
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/venom_claws.ogg', 75, FALSE)
- var/mob/living/carbon/H = owner
- H.melee_damage_lower = initial(H.melee_damage_lower)+10
- H.melee_damage_upper = initial(H.melee_damage_upper)+10
- H.tox_damage_plus = 10
- to_chat(owner, span_notice("You feel your claws filling with pure venom..."))
- spawn(12 SECONDS)
- H.tox_damage_plus = 0
- H.melee_damage_lower = initial(H.melee_damage_lower)
- H.melee_damage_upper = initial(H.melee_damage_upper)
- to_chat(owner, span_warning("Your claws are not poison anymore..."))
-
-/datum/action/cooldown/power/gift/burning_scars
- name = "Burning Scars"
- desc = "Garou creates an aura of very hot air, which burns everyone around."
- button_icon_state = "burning_scars"
- rage_cost = 2
- gnosis_cost = 1
-
-/datum/action/cooldown/power/gift/burning_scars/Trigger()
- . = ..()
- if(allowed_to_proceed)
- owner.visible_message(span_danger("[owner.name] crackles with heat!"), span_danger("You crackle with heat, charging up your Gift!"))
- if(do_after(owner, 3 SECONDS))
- for(var/mob/living/L in orange(5, owner))
- L.adjust_fire_loss(40)
- for(var/turf/T in orange(4, get_turf(owner)))
- var/obj/effect/abstract/turf_fire/F = new(T)
- spawn(5)
- qdel(F)
-
-/datum/action/cooldown/power/gift/smooth_move
- name = "Smooth Move"
- desc = "Garou jumps forward, avoiding every damage for a moment."
- button_icon_state = "smooth_move"
- //rage_cost = 1 somewhat useless gift with MMB pounce
-
-/datum/action/cooldown/power/gift/smooth_move/Trigger()
- . = ..()
- if(allowed_to_proceed)
- var/turf/T = get_turf(get_step(get_step(get_step(owner, owner.dir), owner.dir), owner.dir))
- if(!T || T == owner.loc)
- return
- owner.visible_message(span_danger("[owner] charges!"))
- owner.setDir(get_dir(owner, T))
- var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(owner.loc,owner)
- animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 1)
- spawn(3)
- owner.throw_at(T, get_dist(owner, T), 1, owner, 0)
-
-/datum/action/cooldown/power/gift/digital_feelings
- name = "Digital Feelings"
- desc = "Every technology creates an electrical strike, which hits garou's enemies."
- button_icon_state = "digital_feelings"
- rage_cost = 2
- gnosis_cost = 1
-
-/datum/action/cooldown/power/gift/digital_feelings/Trigger()
- . = ..()
- if(allowed_to_proceed)
- owner.visible_message(span_danger("[owner.name] crackles with static electricity!"), span_danger("You crackle with static electricity, charging up your Gift!"))
- if(do_after(owner, 3 SECONDS))
- playsound(owner, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5)
- tesla_zap(owner, 3, 30, ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_ALLOW_DUPLICATES)
- for(var/mob/living/L in orange(6, owner))
- L.electrocute_act(30, owner, siemens_coeff = 1, flags = NONE)
-
-/datum/action/cooldown/power/gift/elemental_improvement
- name = "Elemental Improvement"
- desc = "Garou flesh replaces itself with prothesis, making it less vulnerable to brute damage, but more for burn damage."
- button_icon_state = "elemental_improvement"
- rage_cost = 2
- gnosis_cost = 1
-
-/datum/action/cooldown/power/gift/elemental_improvement/Trigger()
- . = ..()
- if(allowed_to_proceed)
- animate(owner, color = "#6a839a", time = 10)
- if(ishuman(owner))
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/electro_cast.ogg', 75, FALSE)
- var/mob/living/carbon/human/H = owner
- H.physiology.armor.melee = 25
- H.physiology.armor.bullet = 45
- to_chat(owner, span_notice("You feel your skin replaced with the machine..."))
- spawn(20 SECONDS)
- H.physiology.armor.melee = initial(H.physiology.armor.melee)
- H.physiology.armor.bullet = initial(H.physiology.armor.bullet)
- to_chat(owner, span_warning("Your skin is natural again..."))
- owner.color = "#FFFFFF"
- else
- playsound(get_turf(owner), 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/electro_cast.ogg', 75, FALSE)
- var/mob/living/carbon/werewolf/H = owner
- H.werewolf_armor = 45
- to_chat(owner, span_notice("You feel your skin replaced with the machine..."))
- spawn(20 SECONDS)
- H.werewolf_armor = initial(H.werewolf_armor)
- to_chat(owner, span_warning("Your skin is natural again..."))
- owner.color = "#FFFFFF"
diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/old/gifts.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/old/gifts.dm
deleted file mode 100644
index 0d5bd0396e56..000000000000
--- a/modular_darkpack/modules/werewolf_the_apocalypse/code/old/gifts.dm
+++ /dev/null
@@ -1,53 +0,0 @@
-/datum/action/cooldown/power/gift/rage_heal
- name = "Rage Heal"
- desc = "This Gift allows the Garou to heal severe injuries with rage."
- button_icon_state = "rage_heal"
- rage_cost = 1
- check_flags = null
-
-/datum/action/cooldown/power/gift/rage_heal/Activate(atom/target)
- . = ..()
- if(allowed_to_proceed)
- var/mob/living/carbon/C = owner
- if(C.stat != DEAD)
- SEND_SOUND(owner, sound('modular_darkpack/modules/werewolf_the_apocalypse/sounds/rage_heal.ogg', volume = 50))
- C.adjust_brute_loss(-40*C.auspice.level, TRUE)
- C.adjust_fire_loss(-30*C.auspice.level, TRUE)
- C.adjust_agg_loss(-10*C.auspice.level, TRUE)
- C.adjustToxLoss(-10*C.auspice.level, TRUE)
- C.adjust_oxy_loss(-20*C.auspice.level, TRUE)
- C.adjust_blood_pool(C.auspice.level)
- C.blood_volume = min(C.blood_volume + 56 * C.auspice.level, BLOOD_VOLUME_NORMAL)
- if(ishuman(owner))
- var/mob/living/carbon/human/BD = owner
- if(length(BD.all_wounds))
- var/datum/wound/W = pick(BD.all_wounds)
- W.remove_wound()
- if(length(BD.all_wounds))
- var/datum/wound/W = pick(BD.all_wounds)
- W.remove_wound()
- if(length(BD.all_wounds))
- var/datum/wound/W = pick(BD.all_wounds)
- W.remove_wound()
- if(length(BD.all_wounds))
- var/datum/wound/W = pick(BD.all_wounds)
- W.remove_wound()
- if(length(BD.all_wounds))
- var/datum/wound/W = pick(BD.all_wounds)
- W.remove_wound()
-
-/datum/action/change_apparel
- name = "Change Apparel"
- desc = "Choose the clothes of your Crinos form."
- button_icon_state = "choose_apparel"
- icon_icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi'
- check_flags = AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS
-
-/datum/action/change_apparel/Activate(atom/target)
- . = ..()
- var/mob/living/carbon/werewolf/crinos/C = owner
- if(C.stat == CONSCIOUS)
- if(C.sprite_apparel == 4)
- C.sprite_apparel = 0
- else
- C.sprite_apparel = min(4, C.sprite_apparel+1)
diff --git a/tools/ticked_file_enforcement/ticked_file_enforcement.py b/tools/ticked_file_enforcement/ticked_file_enforcement.py
index 7c091f45a8f5..86c399c73554 100644
--- a/tools/ticked_file_enforcement/ticked_file_enforcement.py
+++ b/tools/ticked_file_enforcement/ticked_file_enforcement.py
@@ -103,7 +103,7 @@ def post_error(string):
continue
post_error(f"Missing include for {dm_path}.")
- #fail_no_include = True # RE-ENABLE THIS ONCE WE HAVE ALL OF OUR TICKED FILES DONE
+ fail_no_include = True
if fail_no_include:
sys.exit(1)