Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tutorial - Basic Medical Items #5422

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion code/datums/tutorial/marine/medical_basic.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/datum/tutorial/marine/medical_basic
name = "Marine - Medical (Basic)"
name = "Marine - Medical Tutorial 1 (Introduction)"
desc = "Learn how to treat common injuries you may face as a marine."
tutorial_id = "marine_medical_1"
tutorial_template = /datum/map_template/tutorial/s7x7
Expand Down
294 changes: 294 additions & 0 deletions code/datums/tutorial/marine/medical_basic_item.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,294 @@
/datum/tutorial/marine/medical_basic_item
name = "Marine - Medical Tutorial 2 (Standard Tools)"
desc = "Learn the medical tools you'll need to use to heal yourself and others"
tutorial_id = "marine_medical_2"
tutorial_template = /datum/map_template/tutorial/s8x9

var/clothing_items_to_vend = 7
var/med_one_items_to_vend = 1
var/med_two_items_to_vend = 1
var/med_three_items_to_vend = 1

// START OF SCRIPTING

/datum/tutorial/marine/medical_basic_item/start_tutorial(mob/starting_mob)
. = ..()
if(!.)
return

init_mob()
message_to_player("This tutorial will discuss the medical tools you will use as a standard Marine.")
addtimer(CALLBACK(src, PROC_REF(intro_one)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/intro_one()
message_to_player("You are capable of tending to your own basic injuries without needing Corpsman (sometimes called a Medic) to assist you.")
addtimer(CALLBACK(src, PROC_REF(intro_two)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/intro_two()
message_to_player("The knowledge and ability to tend to your own injuries will allow you to not only survive, but thrive, on the battlefield.")
addtimer(CALLBACK(src, PROC_REF(kit_one)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_one()
message_to_player("We will now show and discuss the basic medical items you can use. Afterwards, we will examine where you can find and store these items.")
addtimer(CALLBACK(src, PROC_REF(kit_two)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_two()
message_to_player("This is a <b>Bandage</b>. You can use these to heal <b>Brute</b> damage and stop bleeding. You always want to carry one of these.")
var/obj/item/stack/medical/bruise_pack/bandage = new(loc_from_corner(0, 5))
add_to_tracking_atoms(bandage)
add_highlight(bandage)
addtimer(CALLBACK(src, PROC_REF(kit_three)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_three()
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/stack/medical/bruise_pack, bandage)
remove_highlight(bandage)
message_to_player("This is <b>Ointment</b>. You can use these to heal <b>Burn</b> damage. These are less important to carry, but are useful if you have the space for it.")
var/obj/item/stack/medical/ointment/cream = new(loc_from_corner(0, 6))
add_to_tracking_atoms(cream)
add_highlight(cream)
addtimer(CALLBACK(src, PROC_REF(kit_four)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_four()
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/stack/medical/ointment, cream)
remove_highlight(cream)
message_to_player("This is a <b>Splint</b>. You can use these to stabalize <b>fractures</b>. These are very important to use, as a unsplinted fracture can cause permanent injuries.")
var/obj/item/stack/medical/splint/splint = new(loc_from_corner(1, 5))
add_to_tracking_atoms(splint)
add_highlight(splint)
addtimer(CALLBACK(src, PROC_REF(interject_one)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/interject_one()
message_to_player("It is significantly faster for someone else to apply a splint to you. It is suggested you ask someone else to splint your fractures.")
addtimer(CALLBACK(src, PROC_REF(interject_two)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/interject_two()
message_to_player("Furthermore, splints can be broken by further damage, requiring a replacement. Keep a close eye on your splints for this.")
addtimer(CALLBACK(src, PROC_REF(kit_five)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_five()
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/stack/medical/splint, splint)
remove_highlight(splint)
message_to_player("These are autoinjectors, these can be used to inject yourself with a healing chemical. This one is a <b>Bicaradine</b> autoinjector, it heals <b>Brute</b> damage.")
var/obj/item/reagent_container/hypospray/autoinjector/bicaridine/autobic = new(loc_from_corner(1, 6))
add_to_tracking_atoms(autobic)
add_highlight(autobic)
addtimer(CALLBACK(src, PROC_REF(kit_six)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_six()
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/reagent_container/hypospray/autoinjector/bicaridine, autobic)
remove_highlight(autobic)
message_to_player("This one is a <b>Kelotane</b> autoinjector, it heals <b>Burn</b> damage.")
var/obj/item/reagent_container/hypospray/autoinjector/kelotane/autokel = new(loc_from_corner(2, 5))
add_to_tracking_atoms(autokel)
add_highlight(autokel)
addtimer(CALLBACK(src, PROC_REF(kit_seven)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_seven()
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/reagent_container/hypospray/autoinjector/kelotane, autokel)
remove_highlight(autokel)
message_to_player("This one is a <b>Tramadol</b> autoinjector, it helps counter <b>Pain</b>, which is generated by being injured.")
var/obj/item/reagent_container/hypospray/autoinjector/tramadol/autotra = new(loc_from_corner(2, 6))
add_to_tracking_atoms(autotra)
add_highlight(autotra)
addtimer(CALLBACK(src, PROC_REF(kit_eight)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_eight()
message_to_player("Tramadol is a highly dangerous medication, be certain to not overdose yourself be injecting more than three doses of this at a time. You will die if you do this.")
addtimer(CALLBACK(src, PROC_REF(kit_nine)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_nine()
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/reagent_container/hypospray/autoinjector/tramadol, autotra)
remove_highlight(autotra)
message_to_player("This one is a <b>Tricordrazine</b> autoinjector, it heals all damage types but slower than other chemicals. Its useful as a generalist medication for minor injuries.")
var/obj/item/reagent_container/hypospray/autoinjector/tricord/autotri = new(loc_from_corner(3, 5))
add_to_tracking_atoms(autotri)
add_highlight(autotri)
addtimer(CALLBACK(src, PROC_REF(kit_ten)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_ten()
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/reagent_container/hypospray/autoinjector/tricord, autotri)
remove_highlight(autotri)
message_to_player("This is an <b>Emergency</b> autoinjector. It is unique in that it is a single use, non-refillable, injector. It will inject you with a large amount of healing medications and a powerful pain killer. Use this when you are on the brink of death.")
var/obj/item/reagent_container/hypospray/autoinjector/emergency/autoemer = new(loc_from_corner(3, 6))
add_to_tracking_atoms(autoemer)
add_highlight(autoemer)
addtimer(CALLBACK(src, PROC_REF(kit_eleven)), 8 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_eleven()
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/reagent_container/hypospray/autoinjector/emergency, autoemer)
remove_highlight(autoemer)
message_to_player("These are pill packets. They are uncommonly issued. You get four pills per packet, one dose more than a autoinjector. But you can not refill these.")
var/obj/item/storage/pill_bottle/packet/bicaridine/packetbic = new(loc_from_corner(4, 5))
var/obj/item/storage/pill_bottle/packet/kelotane/packetkel = new(loc_from_corner(4, 6))
var/obj/item/storage/pill_bottle/packet/tramadol/packettram = new(loc_from_corner(5, 5))
add_to_tracking_atoms(packetbic)
add_to_tracking_atoms(packetkel)
add_to_tracking_atoms(packettram)
add_highlight(packetbic)
add_highlight(packetkel)
add_highlight(packettram)
addtimer(CALLBACK(src, PROC_REF(kit_twelve)), 8 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/kit_twelve()
SIGNAL_HANDLER

TUTORIAL_ATOM_FROM_TRACKING(/obj/item/storage/pill_bottle/packet/bicaridine, packetbic)
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/storage/pill_bottle/packet/kelotane, packetkel)
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/storage/pill_bottle/packet/tramadol, packettram)
remove_highlight(packetbic)
remove_highlight(packetkel)
remove_highlight(packettram)
message_to_player("Take this moment to pause and review the previous chat logs or the medical items on the floor. When you are ready, please take the food bar and eat it.")
update_objective("Eat the food bar when you are ready to continue.")
var/obj/item/reagent_container/food/snacks/protein_pack/food = new(loc_from_corner(3, 3))
add_to_tracking_atoms(food)
add_highlight(food)
RegisterSignal(tutorial_mob, COMSIG_MOB_EATEN_SNACK, PROC_REF(pouch_one))

/datum/tutorial/marine/medical_basic_item/proc/pouch_one()
SIGNAL_HANDLER

UnregisterSignal(tutorial_mob, COMSIG_MOB_EATEN_SNACK)
TUTORIAL_ATOM_FROM_TRACKING(/obj/item/reagent_container/food/snacks/protein_pack, food)
remove_highlight(food)
message_to_player("This section of the tutorial will discuss where to get these items, and how to store them. To begin, go to the equipment vendor and equip a standard Marine loadout.")
update_objective("Vend everything inside the ColMarTech Automated Closet.")
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/clothing/tutorialmed, clothing_vendor)
add_highlight(clothing_vendor)
clothing_vendor.req_access = list()
RegisterSignal(clothing_vendor, COMSIG_VENDOR_SUCCESSFUL_VEND, PROC_REF(pouch_two))

/datum/tutorial/marine/medical_basic_item/proc/pouch_two()
SIGNAL_HANDLER

clothing_items_to_vend--
if(clothing_items_to_vend <= 0)
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/clothing/tutorialmed, clothing_vendor)
UnregisterSignal(clothing_vendor, COMSIG_VENDOR_SUCCESSFUL_VEND)
clothing_vendor.req_access = list(ACCESS_TUTORIAL_LOCKED)
remove_highlight(clothing_vendor)
message_to_player("Now, go to your personal equipment vendor and vend the <b>First-Aid Pouch (Refillable Injectors)</b>.")
update_objective("Vend the first-aid pouch.")
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/clothing/tutorial_medic_equip, medic_vendor_injector)
add_highlight(medic_vendor_injector)
medic_vendor_injector.req_access = list()
RegisterSignal(medic_vendor_injector, COMSIG_VENDOR_SUCCESSFUL_VEND, PROC_REF(pouch_three))

/datum/tutorial/marine/medical_basic_item/proc/pouch_three()
SIGNAL_HANDLER

med_one_items_to_vend--
if(med_one_items_to_vend <= 0)
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/clothing/tutorial_medic_equip, medic_vendor_injector)
UnregisterSignal(medic_vendor_injector, COMSIG_VENDOR_SUCCESSFUL_VEND)
medic_vendor_injector.req_access = list(ACCESS_TUTORIAL_LOCKED)
remove_highlight(medic_vendor_injector)
message_to_player("You have equipped this pouch into your pouch slot. This is the first of three medical pouches you can vend for yourself, this is the injector pouch, which contains the basic injectors and a emergency injector.")
update_objective("")
addtimer(CALLBACK(src, PROC_REF(pouch_four)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/pouch_four()
message_to_player("This pouch is unique as you can only get this from your personal vendor, the remaining two pouches can be acquired freely from the squad vendor.")
addtimer(CALLBACK(src, PROC_REF(pouch_five)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/pouch_five()
SIGNAL_HANDLER

message_to_player("Vend the <b>First-Aid Pouch (Splints, Gauze, Ointment)</b>.")
update_objective("Vend everything inside the ColMarTech Automated Closet.")
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/clothing/tutorial_medic_equip_bandage, medic_vendor_bandage)
add_highlight(medic_vendor_bandage)
medic_vendor_bandage.req_access = list()
RegisterSignal(medic_vendor_bandage, COMSIG_VENDOR_SUCCESSFUL_VEND, PROC_REF(pouch_six))

/datum/tutorial/marine/medical_basic_item/proc/pouch_six()
SIGNAL_HANDLER

med_two_items_to_vend--
if(med_two_items_to_vend <= 0)
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/clothing/tutorial_medic_equip_bandage, medic_vendor_bandage)
UnregisterSignal(medic_vendor_bandage, COMSIG_VENDOR_SUCCESSFUL_VEND)
medic_vendor_bandage.req_access = list(ACCESS_TUTORIAL_LOCKED)
remove_highlight(medic_vendor_bandage)
message_to_player("This pouch contains a set of bandages, ointment, splints and a tricodrazine injector. It is a good generalist pouch.")
update_objective("")
addtimer(CALLBACK(src, PROC_REF(pouch_seven)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/pouch_seven()
message_to_player("You can vend these items from the marine medical vendor in the ship's medbay, as an alternative source.")
addtimer(CALLBACK(src, PROC_REF(pouch_eight)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/pouch_eight()
SIGNAL_HANDLER

message_to_player("Vend the <b>First-Aid Pouch (Pills)</b>.")
update_objective("Vend everything inside the ColMarTech Automated Closet.")
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/uniform_supply/tutorial_medic_equip_pill, medic_vendor_pill)
add_highlight(medic_vendor_pill)
medic_vendor_pill.req_access = list()
RegisterSignal(medic_vendor_pill, COMSIG_VENDOR_SUCCESSFUL_VEND, PROC_REF(pouch_nine))

/datum/tutorial/marine/medical_basic_item/proc/pouch_nine()
SIGNAL_HANDLER

med_three_items_to_vend--
if(med_three_items_to_vend <= 0)
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/uniform_supply/tutorial_medic_equip_pill, medic_vendor_pill)
UnregisterSignal(medic_vendor_pill, COMSIG_VENDOR_SUCCESSFUL_VEND)
medic_vendor_pill.req_access = list(ACCESS_TUTORIAL_LOCKED)
remove_highlight(medic_vendor_pill)
message_to_player("This pouch contains a set of pills. You can only get these pill packets from your personal or squad vendor.")
update_objective("")
addtimer(CALLBACK(src, PROC_REF(pouch_ten)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/pouch_ten()
message_to_player("It will be up to you to figure out which of these you should take. You can consider using these pouches, or placing some of them in your satchel/backpack.")
Copy link
Contributor

@Birdtalon Birdtalon Jan 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I played your tutorial and this reads as though you can place the pouch itself into your satchel which it's too big for.

addtimer(CALLBACK(src, PROC_REF(pouch_eleven)), 6 SECONDS)

/datum/tutorial/marine/medical_basic_item/proc/pouch_eleven()
SIGNAL_HANDLER

message_to_player("Feel free to examine these items, and use the prep vendor to experiment with storing these medical items. When you are finished, eat the food to end the tutoiral.")
update_objective("Eat the food bar when you are ready to end the tutorial.")
TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/uniform_supply/squad_prep_tutorial, prep_vendor)
add_highlight(prep_vendor)
prep_vendor.req_access = list()
var/obj/item/reagent_container/food/snacks/protein_pack/food = new(loc_from_corner(3, 3))
add_to_tracking_atoms(food)
add_highlight(food)
RegisterSignal(tutorial_mob, COMSIG_MOB_EATEN_SNACK, PROC_REF(the_end))

/datum/tutorial/marine/medical_basic_item/proc/the_end()
SIGNAL_HANDLER

message_to_player("Good luck Marine.")
update_objective("")
tutorial_end_in(5 SECONDS, TRUE)

// END OF SCRIPTING
// START OF SCRIPT HELPERS

// END OF SCRIPT HELPERS

/datum/tutorial/marine/medical_basic_item/init_mob()
. = ..()
arm_equipment(tutorial_mob, /datum/equipment_preset/tutorial/fed)


/datum/tutorial/marine/medical_basic_item/init_map()
new /obj/structure/surface/table/almayer(loc_from_corner(0, 4))
new /obj/structure/surface/table/almayer(loc_from_corner(1, 4))
new /obj/structure/surface/table/almayer(loc_from_corner(2, 4))
new /obj/structure/surface/table/almayer(loc_from_corner(3, 4))
new /obj/structure/surface/table/almayer(loc_from_corner(4, 4))
new /obj/structure/surface/table/almayer(loc_from_corner(5, 4))
var/obj/structure/machinery/cm_vending/clothing/tutorialmed/clothing_vendor = new(loc_from_corner(5, 0))
add_to_tracking_atoms(clothing_vendor)
var/obj/structure/machinery/cm_vending/clothing/tutorial_medic_equip/medic_vendor_injector = new(loc_from_corner(5, 1))
add_to_tracking_atoms(medic_vendor_injector)
var/obj/structure/machinery/cm_vending/clothing/tutorial_medic_equip_bandage/medic_vendor_bandage = new(loc_from_corner(5, 2))
add_to_tracking_atoms(medic_vendor_bandage)
var/obj/structure/machinery/cm_vending/sorted/uniform_supply/tutorial_medic_equip_pill/medic_vendor_pill = new(loc_from_corner(5, 3))
add_to_tracking_atoms(medic_vendor_pill)
var/obj/structure/machinery/cm_vending/sorted/uniform_supply/squad_prep_tutorial/prep_vendor = new(loc_from_corner(0, 2))
add_to_tracking_atoms(prep_vendor)
Loading