Assunzione & Port Volturno (#22258)

Contains assets, code, maps, etc. for Assunzione and Port Volturno. This
is something like v0.9 for live unit testing, etc. Do not merge yet.

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| Path | Original Author | License |
| --- | --- | --- |
| icons/obj/structure/urban/arches.dmi |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/assunzione_neon.dmi |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/assunzione_signs.dmi (stafylia_sign) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/billboard.dmi (sign_assunzione1 & 2) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/poles.dmi (radial_floodlight) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/restaurant.dmi (menu_gyro) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/statues.dmi (aec_small) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/pottedplants_big.dmi (luce-vine-plant) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/pottedplants_small.dmi (luce-vine-plant) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/billboard.dmi (sign_assunzione3) | Minzeyes
| CC-BY-SA |
| icons/obj/structure/urban/assunzione_96x110.dmi | Minzeyes | CC-BY-SA
|
| icons/turf/smooth/composite_brick.dmi |
[nauticall](https://github.com/nauticall) | CC-BY-SA |

---------

Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
Co-authored-by: Kano <89972582+kano-dot@users.noreply.github.com>
This commit is contained in:
Batrachophreno
2026-04-19 19:50:20 +00:00
committed by GitHub
co-authored by Kano
parent 08ee5c3f71
commit aaea5d8a57
82 changed files with 164304 additions and 79 deletions
+245 -3
View File
@@ -285,6 +285,31 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
dir = SOUTH
bound_height = 64
ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp_assun)
icon = 'icons/obj/structure/urban/ledges_assun.dmi'
name = "inclined asphalt ramp"
desc = "A solid asphalt ramp to allow your vehicle to traverse inclines with ease."
icon_state = "road-ramp-center"
layer = 2.02
/obj/structure/stairs/urban/road_ramp_assun/right
dir = EAST
bound_width = 64
bound_x = -32
/obj/structure/stairs/urban/road_ramp_assun/left
dir = WEST
bound_width = 64
/obj/structure/stairs/urban/road_ramp_assun/north
dir = NORTH
bound_height = 64
bound_y = -32
/obj/structure/stairs/urban/road_ramp_assun/south
dir = SOUTH
bound_height = 64
/obj/structure/closet/crate/bin/urban
name = "tall garbage can"
desc = "Garbage day!"
@@ -407,6 +432,65 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
anchored = TRUE
layer = ABOVE_HUMAN_LAYER
/obj/structure/neon_sign/assunzione/music_shop
name = "\improper PV AV"
desc = "The PV AV (Port Volturno Audio / Visual), a trendy hang-out spot for the music-conscious. Local radio DJ, Livia Sabatino, is said to be a regular."
icon = 'icons/obj/structure/urban/assunzione_neon.dmi'
icon_state = "PV_AV"
layer = 5.16 // in the biz, we call this the above above ABOVE human layer
/obj/structure/neon_sign/assunzione/music_shop/Initialize()
. = ..()
AddComponent(/datum/component/large_transparency)
/obj/structure/neon_sign/assunzione/liquor_shop
name = "\improper Assunzione Duty-Free Libations"
desc = "Spaceports are fine places to make a tidy profit selling alcohol. Don't drink and pilot."
icon = 'icons/obj/structure/urban/assunzione_neon.dmi'
icon_state = "duty_free"
layer = 5.16 // in the biz, we call this the above above ABOVE human layer
/obj/structure/neon_sign/assunzione/repair_shop
name = "\improper Sybdari Electromechanics"
desc = "A hybrid mechanics' bay and electronics shop that will fix just anything, from mopeds to laptops. Though not built for serious IPC work, they can help out in a pinch. A subsidiary of Iraklio Shipworks, as it happens."
icon = 'icons/obj/structure/urban/assunzione_neon.dmi'
icon_state = "repair_shop_r"
layer = 5.16 // in the biz, we call this the above above ABOVE human layer
/obj/structure/neon_sign/assunzione/hotel
name = "\improper H O T E L sign"
desc = "A design five-hundred years old and still seen all across human space."
icon = 'icons/obj/structure/urban/assunzione_neon.dmi'
icon_state = "hotel"
/obj/structure/neon_sign/assunzione/chapel
name = "\improper Saint Alvisiol Chapel"
desc = "A local chapel consecrated by the Luceist Church, dedicated to spreading the Light of Ennoia."
icon = 'icons/obj/structure/urban/assunzione_neon.dmi'
icon_state = "assunzione"
/obj/structure/neon_sign/assunzione/witch_hand
name = "\improper WITCH HAND"
desc = "A massive neon sign for Port Volturno's best underground nightclub. Not for the pious, and <i>especially</i> not for the photosensitive. Like, seriously. They make you sign a waiver."
icon = 'icons/obj/structure/urban/assunzione_96x160.dmi'
icon_state = "wh_sign"
layer = 5.16 // in the biz, we call this the above above ABOVE human layer
pixel_x = -32
pixel_y = -32
light_range = 3.8
light_power = 0.5
light_color = LIGHT_COLOR_VIOLET
/obj/structure/neon_sign/assunzione/witch_hand/Initialize()
. = ..()
AddComponent(/datum/component/large_transparency)
AddOverlays(emissive_appearance(icon, "[icon_state]-em", src, alpha = src.alpha))
set_light_range_power_color(light_range, light_power, light_color)
set_light_on(TRUE)
bound_width = 96
bound_height = 96
return INITIALIZE_HINT_NORMAL
/obj/structure/shipping_container_old
name = "freight container"
desc = "A hulking industrial shipping container, bound for who knows where."
@@ -627,7 +711,6 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
density = TRUE
anchored = TRUE
/obj/structure/statue/buddha
name = "buddha statue"
desc = "A bronze statue of the Amitabha Buddha, the Buddha of Limitless Light."
@@ -638,6 +721,38 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
desc = "A set of armor modelled after historical designs. Pieces replicating ancient artifacts are common on Konyang and viewed as favored pieces of art."
icon_state = "gusoku"
/obj/structure/statue/aec/small
name = "\improper AEC memorial statue"
desc = "A bronze statue of the Amitabha Buddha, the Buddha of Limitless Light."
icon_state = "aec_small"
/obj/structure/statue/aec/large
name = "\improper AEC memorial statue"
desc = "A towering memorial to all the fatalities incurred over the AEC's operations. Beneath the towering ranger in bronze, a plaque reads:<br>\
<b>FOR ALL HEROES FALLEN;</b><br>\
<b>INTREPID AND PIOUS,</b><br>\
<b>IN THAT HOLIEST OF MISSIONS:</b><br>\
<b>THE SEARCH OF LIGHT IN DARKNESS.</b><br>\
The list of names below is terribly long, the font so small as to be barely readable at all."
icon = 'icons/obj/structure/urban/assunzione_96x160.dmi'
icon_state = "aec_large"
layer = 5.16 // in the biz, we call this the above above ABOVE human layer
pixel_x = -32
pixel_y = -32
light_range = 3.8
light_power = 0.7
light_color = LIGHT_COLOR_VIOLET
/obj/structure/statue/aec/large/Initialize()
. = ..()
AddComponent(/datum/component/large_transparency)
AddOverlays(emissive_appearance(icon, "[icon_state]-em", src, alpha = src.alpha))
set_light_range_power_color(light_range, light_power, light_color)
set_light_on(TRUE)
bound_width = 32
bound_height = 64
return INITIALIZE_HINT_NORMAL
/obj/structure/sign/urban
name = "exit sign"
desc = "A sign indicating where you should probably go in a hurry."
@@ -653,16 +768,58 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
density = TRUE
layer = ABOVE_HUMAN_LAYER
/obj/structure/sign/billboard/Initialize()
. = ..()
AddComponent(/datum/component/large_transparency)
/obj/structure/sign/billboard/nolegs
name = "commercial billboard"
desc = "A large billboard rented out for advertisement space."
icon = 'icons/obj/structure/urban/billboard.dmi'
icon_state = "board_nolegs-l"
density = TRUE
layer = ABOVE_HUMAN_LAYER
/obj/structure/sign/billboard/advert
name = "billboard advertisement"
desc = null
icon_state = "sign"
density = TRUE
/**
* Billboard adverts have icon_states named for whether they're generic or location-specific. These variable records the # of a given type for the purpose of populating appropriate adverts.
* When new adverts are added to a pool, or a new pool is added, the XYZ_adverts variables should be updated so that billboards at a given location populate their adverts randomly.
*/
var/list/advert_pool = list()
var/generic_adverts = 8
var/konyang_adverts = 11
var/assunzione_adverts = 3
/obj/structure/sign/billboard/advert/random/Initialize(mapload)
/obj/structure/sign/billboard/advert/random/generic/Initialize(mapload)
. = ..()
ClearOverlays()
icon_state = "sign[rand(1, 14)]"
for(var/x = 1 to generic_adverts)
advert_pool += "sign_generic[x]"
icon_state = pick(advert_pool)
return
/obj/structure/sign/billboard/advert/random/konyang/Initialize(mapload)
. = ..()
ClearOverlays()
for(var/x = 1 to generic_adverts)
advert_pool += "sign_generic[x]"
for(var/y = 1 to konyang_adverts)
advert_pool += "sign_konyang[y]"
icon_state = pick(advert_pool)
return
/obj/structure/sign/billboard/advert/random/assunzione/Initialize(mapload)
. = ..()
ClearOverlays()
for(var/x = 1 to generic_adverts)
advert_pool += "sign_generic[x]"
for(var/y = 1 to assunzione_adverts)
advert_pool += "sign_assunzione[y]"
icon_state = pick(advert_pool)
return
/obj/structure/sign/urban/drive_thru
@@ -691,14 +848,21 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
light_color = LIGHT_COLOR_CYAN
light_range = 1.8
var/menu_text = ""
/// Whether or not the menu text can be updated.
var/static_menu = FALSE
/obj/structure/restaurant_menu/attack_hand(mob/user)
if(static_menu)
to_chat(user, SPAN_WARNING("This menu sign's text is not configurable."))
var/new_text = sanitize(input(user, "Enter new text for the hologram to display.", "Hologram Display", html2pencode(menu_text, TRUE)) as null|message)
if(!isnull(new_text))
menu_text = pencode2html(new_text)
update_icon()
/obj/structure/restaurant_menu/attackby(obj/item/attacking_item, mob/user)
if(static_menu)
to_chat(user, SPAN_WARNING("This menu sign's text is not configurable."))
return ..()
if(istype(attacking_item, /obj/item/paper))
var/obj/item/paper/P = attacking_item
to_chat(user, SPAN_NOTICE("You scan \the [attacking_item.name] into \the [name]."))
@@ -709,6 +873,30 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
return TRUE
return ..()
/obj/structure/restaurant_menu/stafylia
name = "\improper Stafýlia menu"
icon_state = "menu_gyro"
desc = "Welcome to Stafýlia! The real taste of Assunzione!\
<br><br>\
<br><b>Mains</b>\
<br>Signature Stafýlia Gyro - 6电\
<br>Doner Kebab - 6电\
<br>Falafel Pita - 6电\
<br><br>\
<br><b>Sides</b>\
<br>Salad - 3电\
<br>Fries - 3电\
<br>Chocolate Pita - 4电\
<br><br>\
<br><b>Drinks</b>\
<br>Drosiá Grape - 2电\
<br>Drosiá Cherry - 2电\
<br>Comet Cola - 2电\
<br>Xanu Rush - 2电\
<br><br>\
<br>Get the Stafýlia meal combo! Your choice of main, side and drink for only 9.50电!"
static_menu = TRUE
/obj/structure/sign/urban/konyang
name = "convenience store sign"
desc = "A sign labeling the structure as a 24-7 MINI MART. Convenient!"
@@ -740,6 +928,22 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
desc = "A sign labeling the structure as a Konyang health and supply pharmacy."
icon_state = "pharmacy_sign"
/obj/structure/sign/urban/assunzione
name = "convenience store sign"
desc = "A sign labeling the structure as a 24-7 MINI MART. Convenient!"
icon = 'icons/obj/structure/urban/assunzione_signs.dmi'
icon_state = "shop_sign"
/obj/structure/sign/urban/assunzione/police
name = "police station sign"
desc = "A sign labeling the structure as an Volturno Spaceport security facility; while the spaceport is administered by the government of Triesto, internal security is Zeng-Hu corporate."
icon_state = "police_sign"
/obj/structure/sign/urban/assunzione/pharmacy
name = "pharmacy & clinic sign"
desc = "A sign labeling the structure as a Zeng-Hu pharmaceutical distributor and medical clinic."
icon_state = "pharmacy_sign"
/obj/structure/window/urban
icon = 'icons/obj/structure/urban/windows_tall.dmi'
icon_state = "wood"
@@ -909,6 +1113,7 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
balloon_alert_to_viewers("*unlocks*")
to_chat(user, SPAN_NOTICE("You unlock \the [src]."))
playsound(src.loc, hatch_open_sound, 40, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE)
open()
//Save the list of accesses and empty them up
@@ -927,6 +1132,7 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
balloon_alert_to_viewers("*locks*")
to_chat(user, SPAN_NOTICE("You lock \the [src]."))
playsound(src.loc, hatch_close_sound, 30, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE)
close()
//Readd the list of accesses, and empty up the previous access lists
@@ -1006,3 +1212,39 @@ ABSTRACT_TYPE(/obj/structure/stairs/urban/road_ramp)
/obj/item/key/door_key/GetAccess()
return access_list
// Overhead structural arches. Cool as hell.
ABSTRACT_TYPE(/obj/structure/arch)
icon = 'icons/obj/structure/urban/arches.dmi'
icon_state = "gothic_arch_single"
layer = ABOVE_ABOVE_HUMAN_LAYER
name = "arch"
anchored = TRUE
/obj/structure/arch/Initialize()
. = ..()
AddComponent(/datum/component/large_transparency, 0, 0, 0, 0)
// East/west arch pieces
/obj/structure/arch/gothic/eastwest/_single
dir = 4
/obj/structure/arch/gothic/eastwest/left
icon_state = "gothic_arch_end"
dir = 4
/obj/structure/arch/gothic/eastwest/middle
icon_state = "gothic_arch_middle"
dir = 4
/obj/structure/arch/gothic/eastwest/right
icon_state = "gothic_arch_end"
dir = 8
// North/south arch pieces
/obj/structure/arch/gothic/northsouth/_single
/obj/structure/arch/gothic/northsouth/upper
icon_state = "gothic_arch_end"
/obj/structure/arch/gothic/northsouth/center
icon_state = "gothic_arch_middle"
/obj/structure/arch/gothic/northsouth/lower
icon_state = "gothic_arch_end"
dir = 1