Files
gavlaandGitHub ce41cc4638 Adds a new bartender drink: Orange Creamsicle 🍊 and a citrus soda (#5602)
## About The Pull Request

This PR adds a brand new alcoholic drink: Orange Creamsicle. It is made
with Orange Juice, Cream, Soda Water, and Vodka.

This PR also adds a new fan drink "Tang-O-Rine" to the soda machines as
a healthier citrus drink alternative.

This adds the new following sprites: Tang-O-Rine Soda, Orange Creamsicle
glass, Crushed Blood Tea can, Crushed Tang-O-Rine Soda, The sprite work
for the cans are courtesy of BitSynergy.

## Why It's Good For The Game

While this drink does have an ice cream variant, We like a bit of extra
drinks for the mixologists.

## Proof Of Testing

<details>
<summary>Screenshots/Videos</summary>

<img width="322" height="317" alt="image"
src="https://github.com/user-attachments/assets/8931b3d8-9b74-4ff9-b074-60b6f6816b7a"
/>

<img width="321" height="320" alt="image"
src="https://github.com/user-attachments/assets/38bc617a-9c4a-4b7f-99bb-e2abe5dea428"
/>


<img width="1021" height="510" alt="image"
src="https://github.com/user-attachments/assets/cedda20d-8301-4e83-88f9-10c6f04df2b6"
/>

<img width="551" height="440" alt="image"
src="https://github.com/user-attachments/assets/e8b75ab9-bc73-474a-94c5-50ba128a302c"
/>

https://gyazo.com/54ad41d4f36a6942ae9230717ff8d02b

</details>

## Changelog

🆑 Shayoki, BitSynergy
add: New bartender recipe: Orange Creamsicle 🍊
add: New soda in the soda vendor: Tang-O-Rine. Drink it today!
image: Added a crushed can sprite for Hemoglobin Iced Tea.

/🆑
2026-05-18 09:44:43 +02:00

252 lines
12 KiB
Plaintext

/obj/item/paper/paperslip/ration_ticket
name = "ration ticket - standard"
desc = "A little slip of paper that'll slot right into any cargo console and put your alotted food ration on the next shuttle to the station."
icon = 'modular_skyrat/modules/paycheck_rations/icons/tickets.dmi'
icon_state = "ticket_food"
default_raw_text = "Redeem this ticket in the nearest supply console to receive benefits."
color = COLOR_OFF_WHITE
show_written_words = FALSE
/// The finalized list of items we send once the ticket is used, don't define here, the procs will do it
var/list/items_we_deliver = list()
/obj/item/paper/paperslip/ration_ticket/attack_atom(obj/machinery/computer/cargo/object_we_attack, mob/living/user, params)
if(!istype(object_we_attack))
return ..()
if(!object_we_attack.is_operational || !user.can_perform_action(object_we_attack))
return ..()
try_to_make_ration_order_list(object_we_attack, user)
/// Attempts to fill out the order list with items of the user's choosing, will stop in its tracks if it fails
/obj/item/paper/paperslip/ration_ticket/proc/try_to_make_ration_order_list(obj/machinery/computer/cargo/object_we_attack, mob/living/user)
forceMove(object_we_attack)
playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE)
// List of meat options we get
var/list/radial_meat_options = list(
"Standard Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"),
"Seafood Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"),
"Tiziran Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"),
"Ethereal Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_ethereal"),
"Blood Bag" = image(icon = 'icons/obj/medical/bloodpack.dmi', icon_state = "bloodpack"),
"Glucose Medipens" = image(icon = 'modular_skyrat/modules/food_replicator/icons/medicine.dmi', icon_state = "glupen"),
)
var/meats_choice = show_radial_menu(user, object_we_attack, radial_meat_options, require_near = TRUE)
if(!meats_choice)
object_we_attack.balloon_alert(user, "no selection made")
forceMove(drop_location(object_we_attack))
playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE)
return
switch(meats_choice)
if("Standard Meats")
items_we_deliver += /obj/item/storage/box/spaceman_ration/meats
if("Seafood Meats")
items_we_deliver += /obj/item/storage/box/spaceman_ration/meats/fish
if("Tiziran Meats")
items_we_deliver += /obj/item/storage/box/spaceman_ration/meats/lizard
if("Ethereal Meats")
items_we_deliver += /obj/item/storage/box/spaceman_ration/meats/ethereal
if("Blood Bag")
items_we_deliver += /obj/item/reagent_containers/blood/random
if("Glucose Medipens")
items_we_deliver += /obj/item/reagent_containers/hypospray/medipen/glucose
items_we_deliver += /obj/item/reagent_containers/hypospray/medipen/glucose
// List of produce options we get
var/list/radial_produce_options = list(
"Standard Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"),
"Alternative Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"),
"Mothic Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"),
"Tiziran Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"),
"Ethereal Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_ethereal"),
)
var/produce_choice = show_radial_menu(user, object_we_attack, radial_produce_options, require_near = TRUE)
if(!produce_choice)
object_we_attack.balloon_alert(user, "no selection made")
// Reset the list if we fail
items_we_deliver = list()
forceMove(drop_location(object_we_attack))
playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE)
return
switch(produce_choice)
if("Standard Produce")
items_we_deliver += /obj/item/storage/box/spaceman_ration/plants
if("Alternative Produce")
items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/alternate
if("Mothic Produce")
items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/mothic
if("Tiziran Produce")
items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/lizard
if("Ethereal Produce")
items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/ethereal
items_we_deliver += /obj/item/storage/box/papersack/ration_bread_slice
// List of flour options we get
var/list/radial_flour_options = list(
"Standard Flour" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"),
"Korta Flour" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"),
"Ethereal Stock" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "stock_ethereal"),
)
var/flour_choice = show_radial_menu(user, object_we_attack, radial_flour_options, require_near = TRUE)
if(!flour_choice)
object_we_attack.balloon_alert(user, "no selection made")
// Reset the list if we fail
items_we_deliver = list()
forceMove(drop_location(object_we_attack))
playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE)
return
switch(flour_choice)
if("Standard Flour")
items_we_deliver += /obj/item/reagent_containers/condiment/flour/small_ration
if("Korta Flour")
items_we_deliver += /obj/item/reagent_containers/condiment/small_ration_korta_flour
items_we_deliver += /obj/item/reagent_containers/condiment/soymilk/small_ration
if("Ethereal Stock")
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/volt_energy
items_we_deliver += /obj/item/reagent_containers/condiment/dashi_concentrate/small_ration
items_we_deliver += /obj/item/reagent_containers/condiment/rice/small_ration
items_we_deliver += /obj/item/reagent_containers/condiment/sugar/small_ration
items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/lime_juice
items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/vinegar
items_we_deliver += /obj/item/reagent_containers/cup/glass/waterbottle
var/random_drink = pick( \
/obj/item/reagent_containers/cup/glass/waterbottle/tea, \
/obj/item/reagent_containers/cup/glass/waterbottle/tea/mushroom, \
/obj/item/reagent_containers/cup/glass/waterbottle/tea/astra, \
/obj/item/reagent_containers/cup/glass/coffee, \
)
items_we_deliver += random_drink
make_the_actual_order(object_we_attack, user)
/// Takes the list of things to deliver and puts it into a cargo order
/obj/item/paper/paperslip/ration_ticket/proc/make_the_actual_order(obj/machinery/computer/cargo/object_we_attack, mob/user)
var/datum/supply_pack/custom/ration_pack/ration_pack = new(
purchaser = user, \
cost = 0, \
contains = items_we_deliver,
)
var/datum/supply_order/new_order = new(
pack = ration_pack,
orderer = user,
orderer_rank = "Ration Ticket",
orderer_ckey = user.ckey,
reason = "",
paying_account = null,
department_destination = null,
coupon = null,
charge_on_purchase = FALSE,
manifest_can_fail = FALSE,
can_be_cancelled = FALSE,
)
object_we_attack.say("Ration order placed! It will arrive on the next cargo shuttle!")
SSshuttle.shopping_list += new_order
qdel(src)
/datum/supply_pack/custom/ration_pack
name = "rations order"
crate_name = "ration delivery crate"
access = list()
crate_type = /obj/structure/closet/crate/cardboard
/datum/supply_pack/custom/ration_pack/New(purchaser, cost, list/contains)
. = ..()
name = "[purchaser]'s Rations Order"
crate_name = "[purchaser]'s ration delivery crate"
src.cost = cost
src.contains = contains
// Ticket for some luxury items, which you get every second paycheck
/obj/item/paper/paperslip/ration_ticket/luxury
name = "ration ticket - luxury"
desc = "A little slip of paper that'll slot right into any cargo console and put your alotted ration of luxury goods on the next cargo shuttle to the station."
icon_state = "ticket_luxury"
/// Attempts to fill out the order list with items of the user's choosing, will stop in its tracks if it fails
/obj/item/paper/paperslip/ration_ticket/luxury/try_to_make_ration_order_list(obj/machinery/computer/cargo/object_we_attack, mob/living/user)
forceMove(object_we_attack)
playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE)
// List of meat options we get
var/list/radial_alcohol_options = list(
"Navy Rum" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "navy_rum"),
"Ginger Beer" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "gingie_beer"),
"Kortara" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "kortara"),
"Voltaic Wine" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "wine_voltaic_canned"),
"Hemoglobin Iced Tea" = image(icon = 'modular_zubbers/icons/obj/drinks/soda.dmi', icon_state = "blood_tea"),
"Soda and Lemonade" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "soda_water")
)
var/alcohol_choice = show_radial_menu(user, object_we_attack, radial_alcohol_options, require_near = TRUE)
if(!alcohol_choice)
object_we_attack.balloon_alert(user, "no selection made")
forceMove(drop_location(object_we_attack))
return
switch(alcohol_choice)
if("Navy Rum")
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/navy_rum
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/navy_rum
if("Ginger Beer")
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/ginger_beer
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/ginger_beer
if("Kortara")
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/kortara
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/kortara
if("Voltaic Wine")
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/wine_voltaic
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/wine_voltaic
if("Hemoglobin Iced Tea")
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/bubber/blood_tea
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/bubber/blood_tea
if("Soda and Lemonade")
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/soda_water_moth
items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/lemonade
// List of produce options we get
var/list/radial_consumables_options = list(
"Cigarettes" = image(icon = 'icons/obj/cigarettes.dmi', icon_state = "robust"),
"Coffee Powder" = image(icon = 'icons/obj/food/cartridges.dmi', icon_state = "cartridge_blend"),
"Tea Powder" = image(icon = 'icons/obj/service/hydroponics/harvest.dmi', icon_state = "tea_aspera_leaves"),
"Mixed Gum Pack" = image(icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi', icon_state = "bubblegum"),
)
var/consumables_choice = show_radial_menu(user, object_we_attack, radial_consumables_options, require_near = TRUE)
if(!consumables_choice)
object_we_attack.balloon_alert(user, "no selection made")
// Reset the list if we fail
items_we_deliver = list()
forceMove(drop_location(object_we_attack))
return
switch(consumables_choice)
if("Cigarettes")
items_we_deliver += /obj/item/storage/fancy/cigarettes/cigpack_robust
if("Coffee Powder")
items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/coffee
if("Tea Powder")
items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/tea
if("Mixed Gum Pack")
items_we_deliver += /obj/item/storage/box/gum/colonial
items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/honey
items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/caramel
make_the_actual_order(object_we_attack, user)