Skip to content

[BOUNTY] SCRAP VEHICLES! Locker mechs, ambulance and scrap tank! #6165

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

Merged
merged 16 commits into from
Apr 11, 2025
9 changes: 9 additions & 0 deletions code/__DEFINES/exosuit_fab.dm
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@
#define EXOSUIT_MODULE_RETICENCE (1<<9)
/// Module is compatible with Marauder models
#define EXOSUIT_MODULE_MARAUDER (1<<10)
//monkestation edit start
// Module is compatbile with makeshift locker mechs
#define EXOSUIT_MODULE_MAKESHIFT (1<<11)
// Module is compatbile with ambulance "mechs"
#define EXOSUIT_MODULE_AMBULANCE (1<<12)
// Module is compatbile with tank "mechs"
#define EXOSUIT_MODULE_TRASHTANK (1<<13)
//monkestation edit end


/// Module is compatible with "Working" Exosuit models - Ripley and Clarke
#define EXOSUIT_MODULE_WORKING (EXOSUIT_MODULE_RIPLEY | EXOSUIT_MODULE_CLARKE)
Expand Down
5 changes: 5 additions & 0 deletions code/__DEFINES/mecha.dm
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,8 @@
#define MECHA_AMMO_MISSILE_PEP "PEP missile"
#define MECHA_AMMO_FLASHBANG "Flashbang"
#define MECHA_AMMO_CLUSTERBANG "Clusterbang"
//monke edit start
#define MECHA_AMMO_PIPEGUN "Improvised shell"
#define MECHA_AMMO_PEASHOOTER "Peashooter bullet"
#define MECHA_AMMO_ISG "IED grenades"
//monke edit end
13 changes: 10 additions & 3 deletions code/modules/vehicles/mecha/equipment/weapons/weapons.dm
Original file line number Diff line number Diff line change
Expand Up @@ -188,18 +188,25 @@
kickback = FALSE
mech_flags = EXOSUIT_MODULE_HONK

//monkestation edit start
//Range of honk alarm
var/honk_range = 6
//message that blares on firing
var/tactile_message = "HONK"
//monkestation edit end

/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(mob/source, atom/target, list/modifiers)
if(!action_checks(target))
return
playsound(chassis, 'sound/items/airhorn.ogg', 100, TRUE)
to_chat(source, "[icon2html(src, source)]<font color='red' size='5'>HONK</font>")
for(var/mob/living/carbon/M in ohearers(6, chassis))
to_chat(source, "[icon2html(src, source)]<font color='red' size='5'>[tactile_message]</font>") //monkestation edit
for(var/mob/living/carbon/M in ohearers(honk_range, chassis)) //monkestation edit
if(!M.can_hear())
continue
var/turf/turf_check = get_turf(M)
if(isspaceturf(turf_check) && !turf_check.Adjacent(src)) //in space nobody can hear you honk.
continue
to_chat(M, "<font color='red' size='7'>HONK</font>")
to_chat(M, "<font color='red' size='7'>[tactile_message]</font>") //monkestation edit
M.SetSleeping(0)
M.adjust_stutter(40 SECONDS)
var/obj/item/organ/internal/ears/ears = M.get_organ_slot(ORGAN_SLOT_EARS)
Expand Down
7 changes: 7 additions & 0 deletions code/modules/vehicles/mecha/working/ripley.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
var/list/cargo
/// How much things Ripley can carry in their Cargo Compartment
var/cargo_capacity = 15
/// Uses variable speed based on pressure or not
var/uses_variable_speed_pressure = TRUE //monkestation edit
/// How fast the mech is in low pressure
var/fast_pressure_step_in = 1.5
/// How fast the mech is in normal pressure
Expand Down Expand Up @@ -273,6 +275,11 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/working/ripley/cargo)
/obj/vehicle/sealed/mecha/working/ripley/proc/update_pressure()
var/turf/T = get_turf(loc)

//monkestation edit start
if(!uses_variable_speed_pressure)
return
//monkestation edit end

if(lavaland_equipment_pressure_check(T))
movedelay = fast_pressure_step_in
for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in flat_equipment)
Expand Down
Binary file modified icons/mecha/mecha_equipment.dmi
Binary file not shown.
178 changes: 178 additions & 0 deletions monkestation/code/datums/components/crafting/makeshift_mechs.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
/datum/crafting_recipe/lockermech
name = "Locker Mech"
result = /obj/vehicle/sealed/mecha/working/ripley/lockermech
reqs = list(/obj/item/stack/cable_coil = 20,
/obj/item/stack/sheet/iron = 10,
/obj/item/storage/toolbox = 2, // For feet
/obj/item/tank/internals/oxygen = 1, // For air
/obj/item/electronics/airlock = 1, //You are stealing the motors from airlocks
/obj/item/extinguisher = 1, //For bastard pnumatics
/obj/item/paper = 5, //Cause paper is the best for making a mech airtight obviously
/obj/item/flashlight = 1, //For the mech light
/obj/item/stack/rods = 4, //to mount the equipment
/obj/item/chair = 2) //For legs
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
time = 20 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/lockermechdrill
name = "Makeshift exosuit drill"
result = /obj/item/mecha_parts/mecha_equipment/drill/makeshift
reqs = list(/obj/item/stack/cable_coil = 5,
/obj/item/stack/sheet/iron = 2,
/obj/item/surgicaldrill = 1)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 5 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/lockermechclamp
name = "Makeshift exosuit clamp"
result = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/makeshift
reqs = list(/obj/item/stack/cable_coil = 5,
/obj/item/stack/sheet/iron = 2,
/obj/item/wirecutters = 1) //Don't ask, its just for the grabby grabby thing
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 5 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/ambulance
name = "Porta Potty Ambulance"
result = /obj/vehicle/sealed/mecha/makeshift_ambulance
reqs = list(/obj/item/stack/sheet/iron = 30,
/obj/item/chair = 2,
/obj/item/stack/cable_coil = 15,
/obj/item/stack/sheet/cloth = 10,
/obj/item/stock_parts/cell = 2,
/obj/item/stock_parts/manipulator = 4,
/obj/item/light/tube = 1,
/obj/item/toy/crayon/spraycan = 1,
)
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_WRENCH)
time = 5 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/makeshift_sleeper
name = "Makeshift Sleeper Module"
result = /obj/item/mecha_parts/mecha_equipment/medical/sleeper/makeshift
reqs = list(/obj/item/stock_parts/cell = 1,
/obj/item/stack/sheet/cloth = 5,
/obj/item/stack/rods = 10,
/obj/item/stock_parts/manipulator = 1,
/obj/item/reagent_containers/syringe = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
time = 5 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/harm_alarm
name = "Harm Alarm Horn Module"
result = /obj/item/mecha_parts/mecha_equipment/weapon/honker/makeshift
reqs = list(/obj/item/stack/sheet/iron = 2,
/obj/item/stack/cable_coil = 15,
/obj/item/stock_parts/manipulator = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
time = 5 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/scrap_tank
name = "Trash Tank"
result = /obj/vehicle/sealed/mecha/trash_tank
reqs = list(/obj/item/flashlight = 1,
/obj/item/tank/internals/plasma = 2,
/obj/item/tank/internals/oxygen = 8,
/obj/item/stack/cable_coil = 60,
/obj/item/camera = 1,
/obj/item/storage/toolbox = 5,
/obj/item/pipe = 4,
/obj/item/chair = 1,
/obj/item/stack/sheet/cloth = 10,
/obj/item/stack/conveyor = 5,
/obj/item/stock_parts/cell = 1,
)
machinery = list(/obj/machinery/disposal/bin = CRAFTING_MACHINERY_CONSUME)
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_WRENCH, TOOL_CROWBAR)
time = 20 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/pipegun_breech
name = "Pipegun Breech"
result = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/pipegun
reqs = list(/obj/item/gun/ballistic/rifle/boltaction/pipegun = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/sheet/iron = 10,
/obj/item/stack/sheet/glass = 4,
/obj/item/storage/toolbox = 1,
)
tool_behaviors = list(TOOL_WELDER, TOOL_WRENCH)
time = 5 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/peashooter_breech
name = "Peahooter Breech"
result = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/peashooter
reqs = list(/obj/item/pipe = 2,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/extinguisher = 1,
/obj/item/stack/sheet/iron = 10,
/obj/item/stack/sheet/glass = 4,
)
tool_behaviors = list(TOOL_WELDER, TOOL_WRENCH, TOOL_CROWBAR)
time = 5 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/tank_armor_plating
name = "Trash Tank Armor Plating"
result = /obj/item/mecha_parts/mecha_equipment/tankupgrade
reqs = list(/obj/item/pipe = 20,
/obj/item/stack/sheet/mineral/wood = 15,
/obj/item/stack/sheet/iron = 15,
/obj/item/stack/cable_coil = 20,
/obj/item/storage/toolbox = 2,
/obj/item/tank/internals/oxygen = 3,
/obj/item/chair = 2,
)
tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER, TOOL_CROWBAR)
time = 5 SECONDS
category = CAT_ROBOT

/datum/crafting_recipe/pipegun_tank_ammo
name = "Trash Tank Pipegun Ammobox"
result = /obj/item/mecha_ammo/makeshift
reqs = list(/datum/reagent/fuel = 50,
/obj/item/stack/sheet/iron = 30,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER)
time = 0.5 SECONDS

/datum/crafting_recipe/peashooter_tank_ammo
name = "Trash Tank Peashooter Ammobox"
result = /obj/item/mecha_ammo/makeshift/peashooter
reqs = list(/datum/reagent/fuel = 30,
/obj/item/stack/sheet/iron = 20,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER)
time = 0.5 SECONDS

/datum/crafting_recipe/isg_tank
name = "Infantry Support Gun Mantlet"
result = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/infantry_support_gun
reqs = list(/obj/item/pipe = 4,
/obj/item/tank/internals/oxygen = 2,
/obj/item/assembly/igniter = 1,
/obj/item/stack/cable_coil = 15,
/obj/item/stack/sheet/plasteel = 10,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_WRENCH, TOOL_WIRECUTTER)
time = 5 SECONDS

/datum/crafting_recipe/isg_tank_ammo
name = "Infantry Support Gun Ammo"
result = /obj/item/mecha_ammo/makeshift/isg
reqs = list(/obj/item/stack/sheet/iron = 5,
/obj/item/stack/cable_coil = 5,
/obj/item/grenade/iedcasing = 3
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_WIRECUTTER)
time = 0.5 SECONDS
28 changes: 28 additions & 0 deletions monkestation/code/game/mecha/makeshift/locker_mech.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/obj/vehicle/sealed/mecha/working/ripley/lockermech
desc = "A locker with stolen wires, struts, electronics and airlock servos crudely assembled into something that resembles the functions of a mech."
name = "Locker Mech"
icon = 'monkestation/icons/mecha/makeshift_mechs.dmi'
icon_state = "lockermech"
base_icon_state = "lockermech"
silicon_icon_state = "null"
max_integrity = 100 //its made of scraps
lights_power = 5
movedelay = 2 //Same speed as a ripley, for now.
armor_type = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 60) //Same armour as a locker
internal_damage_threshold = 30 //Its got shitty durability
wreckage = null
mech_type = EXOSUIT_MODULE_MAKESHIFT
cargo = list()
cargo_capacity = 5 // you can fit a few things in this locker but not much.
equip_by_category = list(
MECHA_L_ARM = null,
MECHA_R_ARM = null,
MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/ejector),
MECHA_POWER = list(),
MECHA_ARMOR = list(),
)
max_equip_by_category = list(
MECHA_UTILITY = 0,
MECHA_POWER = 0,
MECHA_ARMOR = 0,
)
29 changes: 29 additions & 0 deletions monkestation/code/game/mecha/makeshift/makeshift_ambulance.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/obj/vehicle/sealed/mecha/makeshift_ambulance
desc = "An haphazardly-built vehicle built upon a porta potty locker as it's main chassis. It appears to function as an impromptu makeshift ambulance"
name = "Porta Potty Ambulance"
icon = 'monkestation/icons/mecha/makeshift_mechs.dmi'
icon_state = "pottyambo"
base_icon_state = "pottyambo"
silicon_icon_state = "null"
max_integrity = 125
lights_power = 6
movedelay = 1.5
stepsound = 'sound/vehicles/carrev.ogg'
turnsound = 'sound/vehicles/carrev.ogg'
mecha_flags = ADDING_ACCESS_POSSIBLE | IS_ENCLOSED | HAS_LIGHTS //can't strafe bruv
armor_type = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 60) //Same armour as a locker (close enough to a portapotty no?)
internal_damage_threshold = 30 //Its got shitty durability
wreckage = null
mech_type = EXOSUIT_MODULE_AMBULANCE
equip_by_category = list(
MECHA_L_ARM = null,
MECHA_R_ARM = null,
MECHA_UTILITY = list(),
MECHA_POWER = list(),
MECHA_ARMOR = list(),
)
max_equip_by_category = list(
MECHA_UTILITY = 0,
MECHA_POWER = 0,
MECHA_ARMOR = 0,
)
22 changes: 22 additions & 0 deletions monkestation/code/game/mecha/makeshift/makeshift_ammo.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/obj/item/mecha_ammo/makeshift
name = "makeshift shells ammo box"
desc = "A improvised box of makeshift ammunition, it looks something out of Mad Max"
icon = 'monkestation/icons/mecha/makeshift_ammo.dmi'
icon_state = "pipegun_ammo"
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3)
rounds = 8
ammo_type = MECHA_AMMO_PIPEGUN

/obj/item/mecha_ammo/makeshift/peashooter
name = "peashooter ammo box"
icon_state = "peashooter_ammo"
rounds = 30
ammo_type = MECHA_AMMO_PEASHOOTER

/obj/item/mecha_ammo/makeshift/isg
name = "launchable ieds"
desc = "A rusty box filled with refitted IEDs, for use with a jury-rigged cannon. Cannot be primed by hand."
icon_state = "isg_ammo"
custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2,/datum/material/gold=SMALL_MATERIAL_AMOUNT*5)
rounds = 3
ammo_type = MECHA_AMMO_ISG
Loading
Loading