Files
SmArtKarandGitHub c5caa88335 Makes ship in a bottle smaller and allows it to be bottled back up (#95748)
## About The Pull Request

Makes the dragon boat dropped from lavaland tendrils capable of being
bottled back up by alt clicking after a 2 second delay. This should give
it a semblance of a purpose and make it not a completely dead drop.
They've also been reduced in size from normal to small, allowing them to
be placed in pockets and boxes.

Also, boats no longer refer to their oars as keys in examine tooltips.

## Why It's Good For The Game

Ship in a bottle is possibly the worst drop from tendrils on-par with
book of babel, as its effectively a one-time use crossing tool since you
rarely need to cross lava in the exact same place you've left your boat.
These two changes should make it at least a bit viable if you get nasty
river generation and need to cross them frequently, and don't want to
use a raptor or upgrade a MODsuit.

## Changelog
🆑
balance: Ship from a bottle can now be bottled back up by alt-clicking
it
balance: Ship in a bottle can now be deployed by throwing it, and are a
small item instead of normal-sized
spellcheck: Boats no longer refer to oars as keys
/🆑
2026-04-19 23:52:46 +02:00

124 lines
4.2 KiB
Plaintext

// Boat
/obj/vehicle/ridden/lavaboat
name = "lava boat"
desc = "A boat used for traversing lava."
icon = 'icons/obj/mining_zones/dragonboat.dmi'
icon_state = "goliath_boat"
icon_preview = 'icons/obj/fluff/previews.dmi'
icon_state_preview = "boat"
resistance_flags = LAVA_PROOF | FIRE_PROOF
can_buckle = TRUE
key_type = /obj/item/oar
/obj/vehicle/ridden/lavaboat/Initialize(mapload)
. = ..()
AddElement(/datum/element/ridable, /datum/component/riding/vehicle/lavaboat)
/obj/vehicle/ridden/lavaboat/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(!key_type || is_key(inserted_key) || !is_key(tool))
return NONE
if(!user.transferItemToLoc(tool, src))
to_chat(user, span_warning("[tool] seems to be stuck to your hand!"))
return ITEM_INTERACT_BLOCKING
to_chat(user, span_notice("You attach \the [tool] to \the [src]."))
if(inserted_key) //just in case there's an invalid key
inserted_key.forceMove(drop_location())
inserted_key = tool
return ITEM_INTERACT_SUCCESS
/obj/vehicle/ridden/lavaboat/examine_key_message()
if(!key_type)
return
if(!inserted_key)
return span_notice("You can attach an oar to it by clicking \the [src] with one.")
else
return span_notice("Alt-click [src] to detach \the [inserted_key].")
/obj/item/oar
name = "oar"
desc = "Not to be confused with the kind Research hassles you for."
icon = 'icons/mob/rideables/vehicles.dmi'
icon_state = "oar"
inhand_icon_state = "oar"
icon_angle = 45
lefthand_file = 'icons/mob/inhands/items/lavaland_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items/lavaland_righthand.dmi'
force = 12
w_class = WEIGHT_CLASS_NORMAL
resistance_flags = LAVA_PROOF | FIRE_PROOF
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT * 2)
/datum/crafting_recipe/oar
name = "Goliath Bone Oar"
result = /obj/item/oar
reqs = list(/obj/item/stack/sheet/bone = 2)
time = 1.5 SECONDS
category = CAT_TOOLS
/datum/crafting_recipe/boat
name = "Goliath Hide Boat"
result = /obj/vehicle/ridden/lavaboat
reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3)
time = 5 SECONDS
category = CAT_TOOLS
/obj/vehicle/ridden/lavaboat/plasma
name = "plasma boat"
desc = "A boat used for traversing the streams of plasma without turning into an icecube."
icon = 'icons/obj/mining_zones/dragonboat.dmi'
icon_state = "goliath_boat"
resistance_flags = FREEZE_PROOF
can_buckle = TRUE
/datum/crafting_recipe/boat/plasma
name = "Polar Bear Hide Boat"
result = /obj/vehicle/ridden/lavaboat/plasma
reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 3)
// Dragon Boat
/obj/item/ship_in_a_bottle
name = "ship in a bottle"
desc = "A tiny ship inside a bottle."
icon = 'icons/obj/mining_zones/artefacts.dmi'
icon_state = "ship_bottle"
w_class = WEIGHT_CLASS_SMALL
/obj/item/ship_in_a_bottle/attack_self(mob/user)
to_chat(user, span_notice("You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out."))
create_boat(get_turf(src))
/obj/item/ship_in_a_bottle/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
if (!.) // Shatter when not caught
create_boat(get_turf(src))
/obj/item/ship_in_a_bottle/proc/create_boat(drop_loc)
playsound(drop_loc, 'sound/effects/glass/glassbr1.ogg', 100, TRUE)
new /obj/vehicle/ridden/lavaboat/dragon(drop_loc)
qdel(src)
/obj/vehicle/ridden/lavaboat/dragon
name = "mysterious boat"
desc = "This boat moves where you will it, without the need for an oar."
icon_state = "dragon_boat"
resistance_flags = LAVA_PROOF | FIRE_PROOF | FREEZE_PROOF
key_type = null
/obj/vehicle/ridden/lavaboat/dragon/Initialize(mapload)
. = ..()
AddElement(/datum/element/ridable, /datum/component/riding/vehicle/lavaboat/dragonboat)
/obj/vehicle/ridden/lavaboat/dragon/examine(mob/user)
. = ..()
. += span_notice("You can reform [src] into its bottled shape by rubbing the dragon's nose with [EXAMINE_HINT("Alt-Click")].")
/obj/vehicle/ridden/lavaboat/dragon/click_alt(mob/user)
balloon_alert(user, "bottling the boat...")
if (!do_after(user, 2 SECONDS, src))
return CLICK_ACTION_BLOCKING
balloon_alert(user, "bottled the boat!")
var/obj/item/ship_in_a_bottle/bottled_ship = new(user.drop_location())
user.put_in_hands(bottled_ship)
qdel(src)
return CLICK_ACTION_SUCCESS