Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
e0dc8e9
yeah sure
Paxilmaniac Feb 25, 2026
cf73921
I think makes it work
Paxilmaniac Mar 8, 2026
9017ae6
more docking clamp
Paxilmaniac Mar 8, 2026
fbe7700
?? docking port foolishness
Paxilmaniac Mar 8, 2026
5fd1584
clamp and console basics
Paxilmaniac Mar 8, 2026
5be9e15
limits the salvage removal list a bit more
Paxilmaniac Mar 8, 2026
b36ad35
more dock stuff
Paxilmaniac Mar 8, 2026
deeecaa
a little spelling
Paxilmaniac Mar 9, 2026
7a00346
salvage tickets
Paxilmaniac Mar 9, 2026
2da23f3
tickets real
Paxilmaniac Mar 9, 2026
b6967f1
fixes salvage tickets for real
Paxilmaniac Mar 9, 2026
2c5b0a3
hull plates 1
Paxilmaniac Mar 10, 2026
b81a9f7
a few nodiagonal walls
Paxilmaniac Mar 10, 2026
10e5700
wall panels
Paxilmaniac Mar 11, 2026
f67ddab
nuke everyone and leave
Paxilmaniac Mar 11, 2026
e289726
nanocarbon shards 2
Paxilmaniac Mar 12, 2026
308d338
more docking clamp interactions
Paxilmaniac Mar 12, 2026
69e6b3f
exterior decorations
Paxilmaniac Mar 14, 2026
ff21655
some tweaks to layers and fixes to floors
Paxilmaniac Mar 14, 2026
c01f9b7
fixes aluminum floor
Paxilmaniac Mar 14, 2026
43d9213
fixes the area
Paxilmaniac Mar 14, 2026
8038449
door icons
Paxilmaniac Mar 15, 2026
c34ea53
airlocks and some other stuff
Paxilmaniac Mar 15, 2026
8f1ebdf
WIP on master
Paxilmaniac Mar 20, 2026
ee9ece4
Merge branch 'master' into chipbreak
Paxilmaniac Mar 20, 2026
bce8a7c
materials bits
Paxilmaniac Mar 20, 2026
41e34c7
a little bit of formatting
Paxilmaniac Mar 27, 2026
c52f3a5
j kurwa
Paxilmaniac Mar 27, 2026
1217c7c
kurwa j
Paxilmaniac Mar 27, 2026
69a6615
Merge branch 'master' into chipbreak
Paxilmaniac Mar 27, 2026
8f14632
some fixes
Paxilmaniac Mar 27, 2026
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
967 changes: 967 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_fengzhou_patrol.dmm

Large diffs are not rendered by default.

1,337 changes: 1,337 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_ikwa_cargo.dmm

Large diffs are not rendered by default.

1,234 changes: 1,234 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_ikwa_tanker.dmm

Large diffs are not rendered by default.

1,154 changes: 1,154 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_meridian_cargo.dmm

Large diffs are not rendered by default.

1,204 changes: 1,204 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_meridian_exolab.dmm

Large diffs are not rendered by default.

1,167 changes: 1,167 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_meridian_passenger.dmm

Large diffs are not rendered by default.

1,177 changes: 1,177 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_scrappie.dmm

Large diffs are not rendered by default.

894 changes: 894 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_solestra_probe.dmm

Large diffs are not rendered by default.

Large diffs are not rendered by default.

1,405 changes: 1,405 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_vautour_cargo.dmm

Large diffs are not rendered by default.

1,361 changes: 1,361 additions & 0 deletions _maps/shuttles/~doppler_shuttles/salvage/salvage_vautour_salvage.dmm

Large diffs are not rendered by default.

16 changes: 16 additions & 0 deletions code/__DEFINES/~doppler_defines/shipbreaking.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/// Ship contains electrical hazards
#define SALVAGE_HAZARD_ELECTRICAL "Electrical Hazards"
/// Ship contains explosive fuels
#define SALVAGE_HAZARD_FUEL "Explosive Fuels"
/// Ship contains radioactive things
#define SALVAGE_HAZARD_RADIATION "Above-Background Radioactivity"
/// Ship contains a shipmind or equivalent
#define SALVAGE_HAZARD_SHIPMIND "Potentially Active Shipmind"
/// Ship contains coolant canisters
#define SALVAGE_HAZARD_COOLANT "Superketone Coolant"
/// Ship contains a reactor
#define SALVAGE_HAZARD_REACTOR "Active Bloom Reactor"
/// Ship has nonspecific cargo that might be dangerous
#define SALVAGE_HAZARD_CARGO "Potentially Volatile Cargo"
/// Ship has munitions on board
#define SALVAGE_HAZARD_WEAPONS "Uncleared Weaponry"
6 changes: 6 additions & 0 deletions code/__DEFINES/~doppler_defines/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,9 @@
// makes it so held items float by their head
#define TRAIT_FLOATING_HELD "held_items_float"

/// Do non-items still get recycled for their custom materials
#define TRAIT_RECYCLE_LIKE_ITEM "recycle_like_an_item"
/// Do we get recolored based off of a salvage ship datum's primary colour
#define TRAIT_SHIP_PRIMARY_COLOUR "salvage_ship_primary_colour"
/// Do we get recolored based off of a salvage ship datum's secondary colour
#define TRAIT_SHIP_SECONDARY_COLOUR "salvage_ship_secondary_colour"
4 changes: 3 additions & 1 deletion code/_globalvars/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_UNHITTABLE_BY_LASERS" = TRAIT_UNHITTABLE_BY_LASERS,
"TRAIT_UNLINKABLE_FISHING_SPOT" = TRAIT_UNLINKABLE_FISHING_SPOT,
"TRAIT_TETHER_ATTACHED" = TRAIT_TETHER_ATTACHED,
"TRAIT_SHIP_PRIMARY_COLOUR" = TRAIT_SHIP_PRIMARY_COLOUR, // DOPPLER EDIT ADDITION
"TRAIT_SHIP_SECONDARY_COLOUR" = TRAIT_SHIP_SECONDARY_COLOUR, // DOPPLER EDIT ADDITION
),
/atom/movable = list(
"TRAIT_ACTIVE_STORAGE" = TRAIT_ACTIVE_STORAGE,
Expand Down Expand Up @@ -660,7 +662,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_CARP_GOODTOX" = TRAIT_CARP_GOODTOX, // DOPPLER EDIT ADDITION
"TRAIT_CHAMELEON_SKIN" = TRAIT_CHAMELEON_SKIN, // DOPPLER EDIT ADDITION
"TRAIT_FLOATING_HELD" = TRAIT_FLOATING_HELD, // DOPPLER EDIT ADDITION

"TRAIT_RECYCLE_LIKE_ITEM" = TRAIT_RECYCLE_LIKE_ITEM, // DOPPLER EDIT ADDITION
),
/mob/dead/observer = list(
"TRAIT_NO_OBSERVE" = TRAIT_NO_OBSERVE,
Expand Down
3 changes: 3 additions & 0 deletions code/_globalvars/traits/admin_tooling.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER,
"TRAIT_UNHITTABLE_BY_PROJECTILES" = TRAIT_UNHITTABLE_BY_PROJECTILES,
"TRAIT_UNHITTABLE_BY_LASERS" = TRAIT_UNHITTABLE_BY_LASERS,
"TRAIT_SHIP_PRIMARY_COLOUR" = TRAIT_SHIP_PRIMARY_COLOUR, // DOPPLER EDIT ADDITION
"TRAIT_SHIP_SECONDARY_COLOUR" = TRAIT_SHIP_SECONDARY_COLOUR, // DOPPLER EDIT ADDITION
),
/atom/movable = list(
"TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE,
Expand All @@ -31,6 +33,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_CONTRABAND" = TRAIT_CONTRABAND,
"TRAIT_DUCT_TAPE_UNREPAIRABLE" = TRAIT_DUCT_TAPE_UNREPAIRABLE,
"TRAIT_SPEED_POTIONED" = TRAIT_SPEED_POTIONED,
"TRAIT_RECYCLE_LIKE_ITEM" = TRAIT_RECYCLE_LIKE_ITEM, // DOPPLER EDIT ADDITION
),
/mob = list(
"TRAIT_ABDUCTOR_HUD" = TRAIT_ABDUCTOR_HUD,
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/recycler.dm
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@
break
var/full_power_usage = TRUE
var/obj/nom_obj = nom[i]
if (isitem(nom_obj))
if((isitem(nom_obj)) || (HAS_TRAIT(nom_obj, TRAIT_RECYCLE_LIKE_ITEM))) // DOPPLER EDIT CHANGE - Lets non-items get their custom materials recycled - ORIGINAL: if (isitem(nom_obj))
// Whether or not items consume full power depends on if they produced a material when recycled.
full_power_usage = recycle_item(nom_obj)
else
Expand Down
1 change: 1 addition & 0 deletions code/modules/asset_cache/assets/sheetmaterials.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@

/datum/asset/spritesheet_batched/sheetmaterials/create_spritesheets()
insert_all_icons("", 'icons/obj/stack_objects.dmi')
insert_all_icons("", 'modular_doppler/shipbreaking/icons/stacks.dmi') // DOPPLER EDIT ADDITION - SHIPBREAKING MATS DONT RENDER RIGHT

5 changes: 5 additions & 0 deletions modular_doppler/colony_fabricator/code/power/rtg.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@
AddElement(/datum/element/radioactive, threshold = RAD_VERY_LIGHT_INSULATION, minimum_exposure_time = NEBULA_RADIATION_MINIMUM_EXPOSURE_TIME)
AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)

/obj/machinery/power/rtg/portable/wrench_act(mob/living/user, obj/item/tool)
. = ..()
default_unfasten_wrench(user, tool, time = 2 SECONDS)
return ITEM_INTERACT_SUCCESS

/obj/machinery/power/rtg/portable/RefreshParts()
. = ..()
power_gen = initial(power_gen)
Expand Down
6 changes: 3 additions & 3 deletions modular_doppler/epic_loot/code/loot_items/components.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/datum/export/epic_loot_components
cost = PAYCHECK_COMMAND
cost = 50
unit_name = "low value salvage"
export_types = list(
/obj/item/epic_loot/grenade_fuze,
Expand All @@ -10,7 +10,7 @@
)

/datum/export/epic_loot_components_super
cost = PAYCHECK_COMMAND * 2
cost = 75
unit_name = "salvage"
export_types = list(
/obj/item/epic_loot/water_filter,
Expand All @@ -20,7 +20,7 @@
)

/datum/export/epic_loot_components_super_super
cost = PAYCHECK_COMMAND * 3
cost = 125
unit_name = "high value salvage"
export_types = list(
/obj/item/epic_loot/thermal_camera,
Expand Down
4 changes: 2 additions & 2 deletions modular_doppler/epic_loot/code/loot_items/electronics.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/datum/export/epic_loot_electronics
cost = PAYCHECK_COMMAND
cost = 50
unit_name = "electronic salvage"
export_types = list(
/obj/item/epic_loot/device_fan,
Expand All @@ -10,7 +10,7 @@
)

/datum/export/epic_loot_electronics_super
cost = PAYCHECK_COMMAND * 2
cost = 75
unit_name = "high value electronic salvage"
export_types = list(
/obj/item/epic_loot/display,
Expand Down
2 changes: 1 addition & 1 deletion modular_doppler/epic_loot/code/loot_items/medical.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/datum/export/epic_loot_super_med_tools
cost = PAYCHECK_COMMAND * 5
cost = 250
unit_name = "high value medical salvage"
export_types = list(
/obj/item/epic_loot/vein_finder,
Expand Down
4 changes: 2 additions & 2 deletions modular_doppler/epic_loot/code/loot_items/valuables.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/datum/export/epic_loot_valuables
cost = PAYCHECK_COMMAND * 3
cost = 150
unit_name = "recovered valuables"
export_types = list(
/obj/item/epic_loot/press_pass,
Expand All @@ -10,7 +10,7 @@
)

/datum/export/epic_loot_valuables_super
cost = PAYCHECK_COMMAND * 4
cost = 200
unit_name = "recovered high valuables"
export_types = list(
/obj/item/epic_loot/ssd,
Expand Down
151 changes: 151 additions & 0 deletions modular_doppler/shipbreaking/code/docking_clamp.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
/obj/effect/temp_visual/telegraphing/long_duration
duration = 15 SECONDS

// Circuit and RND

/obj/item/circuitboard/machine/docking_clamp
name = "Salvage Clamp"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/docking_clamp

/datum/design/board/salvage_docking_clamp
name = "Salvage Clamp"
desc = "A large clamp for holding shuttles in place without using their own power."
id = "salvage_docking_clamp"
build_path = /obj/item/circuitboard/machine/docking_clamp
category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
)
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING

/datum/techweb_node/mining/New()
design_ids += list(
"salvage_docking_clamp",
)
return ..()

// Everything else

/obj/machinery/docking_clamp
name = "salvage clamp"
desc = "A large clamp for holding shuttles in place without using their own power."
icon = 'icons/obj/machines/floor.dmi'
icon_state = "mass_driver"
use_power = NO_POWER_USE
circuit = /obj/item/circuitboard/machine/docking_clamp
/// The docking port we use to connect ships with
var/obj/docking_port/stationary/salvage_dock/docking_port
/// The computer the clamp is linked to
var/obj/machinery/computer/salvage_bay_controller/controller

/obj/machinery/docking_clamp/Initialize(mapload)
. = ..()
AddComponent(/datum/component/simple_rotation)

/obj/machinery/docking_clamp/Destroy(force)
if(controller)
controller.delink_clamp()
if(docking_port)
QDEL_NULL(docking_port)
return ..()

/obj/machinery/docking_clamp/examine(mob/user)
. = ..()
if(!controller)
. += span_notice("Use a [EXAMINE_HINT("multitool")] to connect this to a [EXAMINE_HINT("salvage bay control console")] before use.")
if(!docking_port)
. += span_notice("Interact with the clamp to set it up for docking, otherwise it will not function.")
. += span_notice("The clamp requires a large space in front of it, indicated by holograms on setup.")
. += span_notice("This space is [EXAMINE_HINT("[floor(/obj/docking_port/stationary/salvage_dock::width / 2)]")] tiles to either side of the clamp, and [EXAMINE_HINT("[/obj/docking_port/stationary/salvage_dock::height]")] tiles straight out.")

/obj/machinery/docking_clamp/multitool_act(mob/living/user, obj/item/multitool/the_tool)
if(!panel_open)
balloon_alert(user, "panel closed!")
return ITEM_INTERACT_BLOCKING
the_tool.set_buffer(src)
balloon_alert(user, "saved to multitool buffer")
return ITEM_INTERACT_SUCCESS

/obj/machinery/docking_clamp/wrench_act(mob/living/user, obj/item/tool)
if(!panel_open)
balloon_alert(user, "panel closed!")
return ITEM_INTERACT_BLOCKING
if(!default_unfasten_wrench(user, tool, 4 SECONDS))
return ITEM_INTERACT_BLOCKING
if(!anchored)
QDEL_NULL(docking_port)
return ITEM_INTERACT_SUCCESS

/obj/machinery/docking_clamp/screwdriver_act(mob/user, obj/item/tool)
if(!default_deconstruction_screwdriver(user, icon_state, icon_state, tool))
return ITEM_INTERACT_BLOCKING
update_appearance()
return ITEM_INTERACT_SUCCESS

/obj/machinery/docking_clamp/crowbar_act(mob/user, obj/item/tool)
if(!default_deconstruction_crowbar(tool))
return ITEM_INTERACT_BLOCKING
return ITEM_INTERACT_SUCCESS

/obj/machinery/docking_clamp/interact(mob/user)
if(!can_interact(user))
return
if(!anchored)
balloon_alert(user, "not secured!")
return ..()
if(docking_port)
balloon_alert(user, "unsetting...")
if(!do_after(user, 3 SECONDS, src))
return ..()
QDEL_NULL(docking_port)
return ..()
balloon_alert(user, "setting clamp")
if(!do_after(user, 2 SECONDS, src))
return ..()
var/turf/dock_location = get_step(src, dir)
var/obj/docking_port/stationary/salvage_dock/temp_docking_port = new(dock_location, dir)
var/list/docking_turfs = temp_docking_port.return_turfs()
var/list/dock_bounds = temp_docking_port.return_coords()
var/list/overlappers = SSshuttle.get_dock_overlap(dock_bounds[1], dock_bounds[2], dock_bounds[3], dock_bounds[4], z)
if(length(overlappers)) // Overlappers list contains ourself as well
for(var/dock as anything in overlappers)
if(dock == temp_docking_port)
continue
balloon_alert(user, "intersecting nearby dock")
temp_docking_port.Destroy(TRUE)
return ..()
for(var/turf/checked_turf as anything in docking_turfs)
if(checked_turf.x <= 10 || checked_turf.y <= 10 || checked_turf.x >= world.maxx - 10 || checked_turf.y >= world.maxy - 10)
balloon_alert(user, "cannot place here")
new /obj/effect/temp_visual/telegraphing/long_duration(checked_turf)
temp_docking_port.Destroy(TRUE)
return ..()
var/area/turf_area = get_area(checked_turf)
if(!is_space_or_openspace(checked_turf) || checked_turf.is_blocked_turf(TRUE) || !is_area_nearby_station(turf_area))
balloon_alert(user, "dock not clear")
new /obj/effect/temp_visual/telegraphing/long_duration(checked_turf)
temp_docking_port.Destroy(TRUE)
return ..()
new /obj/effect/temp_visual/medical_holosign(checked_turf)
docking_port = temp_docking_port
return ..()

/// Scans the docking port area for if living mobs are present inside, TRUE means a mob is in the way (or we have no port?)
/obj/machinery/docking_clamp/proc/check_for_clear_bay()
if(!docking_port)
return TRUE // what ?? No
var/list/docking_turfs = docking_port.return_turfs()
for(var/turf/checked_turf as anything in docking_turfs)
for(var/mob/living/living_mob in checked_turf.contents)
return TRUE
return FALSE

/obj/docking_port/stationary/salvage_dock
name = "Salvage Dock"
width = 31
height = 19
dwidth = 15

/obj/docking_port/stationary/salvage_dock/Initialize(mapload, dock_direction)
setDir(dock_direction)
. = ..()
Loading
Loading