Mecha Gamemode: Jockeys (#17148)

This commit is contained in:
Geeves
2023-10-18 16:49:44 +02:00
committed by GitHub
parent 665b1cd381
commit ebf0f3458f
22 changed files with 2013 additions and 2427 deletions
+3
View File
@@ -515,6 +515,7 @@
#include "code\game\antagonist\outsider\commando.dm"
#include "code\game\antagonist\outsider\deathsquad.dm"
#include "code\game\antagonist\outsider\ert.dm"
#include "code\game\antagonist\outsider\jockey.dm"
#include "code\game\antagonist\outsider\loner.dm"
#include "code\game\antagonist\outsider\mercenary.dm"
#include "code\game\antagonist\outsider\ninja.dm"
@@ -623,6 +624,7 @@
#include "code\game\gamemodes\events\holidays\holidays.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\heist\heist.dm"
#include "code\game\gamemodes\jockeys\jockeys.dm"
#include "code\game\gamemodes\loner\loner.dm"
#include "code\game\gamemodes\malfunction\malf_hardware.dm"
#include "code\game\gamemodes\malfunction\malf_research.dm"
@@ -2059,6 +2061,7 @@
#include "code\modules\heavy_vehicle\mech_life.dm"
#include "code\modules\heavy_vehicle\mech_wreckage.dm"
#include "code\modules\heavy_vehicle\mecha.dm"
#include "code\modules\heavy_vehicle\mecha_part_spawners.dm"
#include "code\modules\heavy_vehicle\components\_components.dm"
#include "code\modules\heavy_vehicle\components\armor.dm"
#include "code\modules\heavy_vehicle\components\arms.dm"
+1
View File
@@ -62,6 +62,7 @@
#define MODE_THRALL "thrall"
#define MODE_REVENANT "revenant"
#define MODE_GOLEM "golem"
#define MODE_JOCKEY "jockey"
#define DEFAULT_TELECRYSTAL_AMOUNT 20
#define DEFAULT_BLUECRYSTAL_AMOUNT 15
+1
View File
@@ -6,6 +6,7 @@
#define IFF_RAIDER "raider"
#define IFF_LONER "loner"
#define IFF_BURGLAR "burglar"
#define IFF_JOCKEY "jockey"
#define IFF_CULTIST "cultist"
#define IFF_BLUESPACE "bluespace"
#define IFF_DEATHSQUAD "deathsquad"
+3
View File
@@ -21,6 +21,7 @@
#define BLSP_FREQ 1253
#define NINJ_FREQ 1255
#define BURG_FREQ 1257
#define JOCK_FREQ 1259
#define RAID_FREQ 1277
#define DTH_FREQ 1341
#define AI_FREQ 1343
@@ -52,6 +53,7 @@ var/list/radiochannels = list(
"Ninja" = NINJ_FREQ,
"Bluespace" = BLSP_FREQ,
"Burglar" = BURG_FREQ,
"Jockey" = JOCK_FREQ,
"Raider" = RAID_FREQ,
"Operations" = SUP_FREQ,
"Service" = SRV_FREQ,
@@ -78,6 +80,7 @@ var/list/reverseradiochannels = list(
"[NINJ_FREQ]" = "Ninja",
"[BLSP_FREQ]" = "Bluespace",
"[BURG_FREQ]" = "Burglar",
"[JOCK_FREQ]" = "Jockey",
"[RAID_FREQ]" = "Raider",
"[SUP_FREQ]" = "Operations",
"[SRV_FREQ]" = "Service",
+60
View File
@@ -487,6 +487,66 @@
if(W)
W.handle_item_insertion(passport)
/datum/outfit/admin/syndicate/jockey
name = "Jockey"
allow_backbag_choice = FALSE
uniform = list(
/obj/item/clothing/under/color/darkred,
/obj/item/clothing/under/color/red,
/obj/item/clothing/under/color/lightred
)
suit = list(
/obj/item/clothing/suit/storage/hazardvest,
/obj/item/clothing/suit/storage/hazardvest/green,
/obj/item/clothing/suit/storage/hazardvest/red
)
back = /obj/item/storage/backpack/duffel/syndie
belt = /obj/item/storage/belt/utility/very_full
shoes = /obj/item/clothing/shoes/workboots/all_species
glasses = null
head = /obj/item/clothing/head/welding
gloves = /obj/item/clothing/gloves/yellow // glubbs
backpack_contents = list(
/obj/item/storage/box/survival/engineer = 1,
/obj/item/device/flashlight = 1,
/obj/item/card/emag = 1
)
l_ear = /obj/item/device/radio/headset/jockey
r_pocket = /obj/item/device/special_uplink/jockey
id = /obj/item/storage/wallet
id_iff = IFF_JOCKEY
/datum/outfit/admin/syndicate/jockey/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/turf/T = get_turf(H)
var/obj/item/gun/projectile/primary = new /obj/item/gun/projectile/silenced(T)
var/obj/item/magazine = new primary.magazine_type(T)
H.equip_to_slot_or_del(magazine, slot_l_store)
var/obj/item/clothing/accessory/holster/armpit/holster = new /obj/item/clothing/accessory/holster/armpit(T)
holster.holstered = primary
primary.forceMove(holster)
var/obj/item/clothing/under/uniform = H.w_uniform
uniform.attackby(holster, H)
var/obj/item/storage/wallet/W = H.wear_id
var/obj/item/card/id/syndicate/raider/passport = new(H.loc)
passport.name = "[H.real_name]'s Passport"
if(W)
W.handle_item_insertion(passport)
// Non-syndicate antag outfits
/datum/outfit/admin/highlander
+57
View File
@@ -0,0 +1,57 @@
var/datum/antagonist/jockey/jockeys
/datum/antagonist/jockey
id = MODE_JOCKEY
role_text = "Jockey"
role_text_plural = "Jockeys"
bantype = "jockey"
antag_indicator = "jockey"
landmark_id = "jockeyspawn"
welcome_text = "You are a Jockey, one of the best damn mech pilots in the spur.<br>\
Your uplink will grant you access to various tools you may need to attempt to accomplish your goal.<br>\
You can use :H or :B to talk on your encrypted channel, which only you and your partner can read.<br>"
flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER
antaghud_indicator = "hudjockey"
required_age = 7
hard_cap = 3
hard_cap_round = 3
initial_spawn_req = 2
initial_spawn_target = 2
faction = "syndicate"
id_type = /obj/item/card/id/syndicate
/datum/antagonist/jockey/New()
..()
jockeys = src
/datum/antagonist/jockey/update_access(var/mob/living/player)
for(var/obj/item/storage/wallet/W in player.contents)
for(var/obj/item/card/id/id in W.contents)
id.name = "passport - [player.real_name]"
id.registered_name = player.real_name
W.name = "[initial(W.name)] ([id.name])"
/datum/antagonist/jockey/equip(var/mob/living/carbon/human/player)
if(!..())
return FALSE
for(var/obj/item/I in player)
if(istype(I, /obj/item/implant))
continue
player.drop_from_inventory(I)
if(I.loc != player)
qdel(I)
player.preEquipOutfit(/datum/outfit/admin/syndicate/jockey, FALSE)
player.equipOutfit(/datum/outfit/admin/syndicate/jockey, FALSE)
player.force_update_limbs()
player.update_eyes()
player.regenerate_icons()
return TRUE
/datum/antagonist/jockey/get_antag_radio()
return "Jockey"
+14
View File
@@ -0,0 +1,14 @@
// medpop burglar/merc hybrid
/datum/game_mode/jockeys
name = "jockeys"
config_tag = "jockeys"
required_enemies = 2
required_players = 10
antag_scaling_coeff = 7 // three jockeys at highpop
round_description = "Metal Crushers ain't got shit on this."
antag_tags = list(MODE_JOCKEY)
/datum/game_mode/jockeys/pre_setup()
extended_round_description = "A couple coolant-soaked knuckleheads are on their way to turn a corporate workplace into a thunderdome. Is the crew ready to rumble?"
return ..()
@@ -18,6 +18,7 @@
#define CHANNEL_NINJA "Ninja"
#define CHANNEL_BLUESPACE "Bluespace"
#define CHANNEL_BURGLAR "Burglar"
#define CHANNEL_JOCKEY "Jockey"
var/global/list/ALL_RADIO_CHANNELS = list(
CHANNEL_COMMON = TRUE,
@@ -37,5 +38,6 @@ var/global/list/ALL_RADIO_CHANNELS = list(
CHANNEL_MERCENARY = TRUE,
CHANNEL_NINJA = TRUE,
CHANNEL_BLUESPACE = TRUE,
CHANNEL_BURGLAR = TRUE
)
CHANNEL_BURGLAR = TRUE,
CHANNEL_JOCKEY = TRUE
)
@@ -63,6 +63,12 @@
origin_tech = list(TECH_ILLEGAL = 2)
syndie = TRUE
/obj/item/device/encryptionkey/jockey
icon_state = "cypherkey"
additional_channels = list(CHANNEL_JOCKEY = TRUE, CHANNEL_HAILING = TRUE)
origin_tech = list(TECH_ILLEGAL = 2)
syndie = TRUE
/obj/item/device/encryptionkey/ninja
icon_state = "cypherkey"
additional_channels = list(CHANNEL_NINJA = TRUE, CHANNEL_HAILING = TRUE)
@@ -679,6 +679,12 @@
syndie = TRUE
ks1type = /obj/item/device/encryptionkey/burglar
/obj/item/device/radio/headset/jockey
icon_state = "syn_headset"
origin_tech = list(TECH_ILLEGAL = 2)
syndie = TRUE
ks1type = /obj/item/device/encryptionkey/jockey
/obj/item/device/radio/headset/ninja
icon_state = "syn_headset"
origin_tech = list(TECH_ILLEGAL = 3)
+13 -9
View File
@@ -188,15 +188,15 @@ Then check if it's true, if true return. This will stop the normal menu appearin
// and if it's sanitized for html.
nanoui_data["exploit"]["nanoui_exploit_record"] = html_encode(L.exploit_record) // Change stuff into html
nanoui_data["exploit"]["nanoui_exploit_record"] = replacetext(nanoui_data["exploit"]["nanoui_exploit_record"], "\n", "<br>") // change line breaks into <br>
nanoui_data["exploit"]["name"] = html_encode(L.name)
nanoui_data["exploit"]["sex"] = html_encode(L.sex)
nanoui_data["exploit"]["age"] = html_encode(L.age)
nanoui_data["exploit"]["species"] = html_encode(L.species)
nanoui_data["exploit"]["rank"] = html_encode(L.rank)
nanoui_data["exploit"]["citizenship"] = html_encode(L.citizenship)
nanoui_data["exploit"]["employer"] = html_encode(L.employer)
nanoui_data["exploit"]["religion"] = html_encode(L.religion)
nanoui_data["exploit"]["fingerprint"] = html_encode(L.fingerprint)
nanoui_data["exploit"]["name"] = html_encode(L.name)
nanoui_data["exploit"]["sex"] = html_encode(L.sex)
nanoui_data["exploit"]["age"] = html_encode(L.age)
nanoui_data["exploit"]["species"] = html_encode(L.species)
nanoui_data["exploit"]["rank"] = html_encode(L.rank)
nanoui_data["exploit"]["citizenship"] = html_encode(L.citizenship)
nanoui_data["exploit"]["employer"] = html_encode(L.employer)
nanoui_data["exploit"]["religion"] = html_encode(L.religion)
nanoui_data["exploit"]["fingerprint"] = html_encode(L.fingerprint)
nanoui_data["exploit_exists"] = 1
break
@@ -441,6 +441,10 @@ Then check if it's true, if true return. This will stop the normal menu appearin
name = "sponsored uplink"
starting_telecrystals = 20
/obj/item/device/special_uplink/jockey
name = "jockey uplink"
starting_telecrystals = 10
/obj/item/device/special_uplink/raider
name = "underground uplink"
starting_telecrystals = 3
@@ -166,6 +166,28 @@
charge = min(charge + (maxcharge / 10), maxcharge)
next_recharge = world.time + 1 MINUTE
/obj/item/cell/nuclear
name = "miniaturized nuclear power core"
desc = "A small self-charging thorium core that can store an immense amount of charge."
origin_tech = list(TECH_POWER = 8, TECH_ILLEGAL = 4)
icon_state = "icell"
maxcharge = 50000
matter = null
var/next_recharge
/obj/item/cell/nuclear/Initialize()
. = ..()
START_PROCESSING(SSprocessing, src)
/obj/item/cell/nuclear/Destroy()
STOP_PROCESSING(SSprocessing, src)
return ..()
/obj/item/cell/nuclear/process()
if(next_recharge < world.time)
charge = min(charge + (maxcharge / 10), maxcharge)
next_recharge = world.time + 30 SECONDS
/obj/item/cell/device/emergency_light
name = "miniature power cell"
desc = "A small power cell intended for use with emergency lighting."
+3
View File
@@ -86,6 +86,9 @@
icon_auto_adapt = TRUE
icon_supported_species_tags = list("taj")
/obj/item/clothing/shoes/workboots/all_species
species_restricted = null
/obj/item/clothing/shoes/workboots/brown
name = "brown workboots"
desc = "A pair of brown steel-toed work boots designed for use in industrial settings. Safety first."
+2 -1
View File
@@ -136,7 +136,8 @@
if(!user || !user.client)
return TRUE
to_chat(user, "That's \a <b>[src]</b>.")
to_chat(user, desc)
if(desc)
to_chat(user, desc)
if(LAZYLEN(pilots) && (!hatch_closed || body.pilot_coverage < 100 || body.transparent_cabin))
if(length(pilots) == 0)
to_chat(user, "It has <b>no pilot</b>.")
@@ -0,0 +1,71 @@
/obj/effect/map_effect/mecha_part_spawner
name = "mecha part spawner"
icon_state = "beam_point"
var/list/parts_to_spawn = list()
/obj/effect/map_effect/mecha_part_spawner/Initialize(mapload)
..()
parts_to_spawn = get_parts_to_spawn()
spawn_parts()
return INITIALIZE_HINT_LATEQDEL
/obj/effect/map_effect/mecha_part_spawner/proc/get_parts_to_spawn()
return list()
/obj/effect/map_effect/mecha_part_spawner/proc/spawn_parts()
for(var/thing in parts_to_spawn)
new thing(loc)
/obj/effect/map_effect/mecha_part_spawner/manipulator
name = "mecha manipulator spawner"
/obj/effect/map_effect/mecha_part_spawner/manipulator/get_parts_to_spawn()
return subtypesof(/obj/item/mech_component/manipulators)
/obj/effect/map_effect/mecha_part_spawner/manipulator/spawn_parts()
. = ..()
new /obj/item/robot_parts/robot_component/actuator(loc)
/obj/effect/map_effect/mecha_part_spawner/propulsion
name = "mecha propulsion spawner"
/obj/effect/map_effect/mecha_part_spawner/propulsion/get_parts_to_spawn()
return subtypesof(/obj/item/mech_component/propulsion)
/obj/effect/map_effect/mecha_part_spawner/propulsion/spawn_parts()
. = ..()
new /obj/item/robot_parts/robot_component/actuator(loc)
/obj/effect/map_effect/mecha_part_spawner/sensors
name = "mecha sensors spawner"
/obj/effect/map_effect/mecha_part_spawner/sensors/get_parts_to_spawn()
return subtypesof(/obj/item/mech_component/sensors)
/obj/effect/map_effect/mecha_part_spawner/sensors/spawn_parts()
. = ..()
new /obj/item/robot_parts/robot_component/radio(loc)
new /obj/item/robot_parts/robot_component/camera(loc)
new /obj/item/mech_component/control_module(loc)
var/list/softwares = subtypesof(/obj/item/circuitboard/exosystem)
for(var/software in softwares)
new software(loc)
/obj/effect/map_effect/mecha_part_spawner/chassis
name = "mecha chassis spawner"
/obj/effect/map_effect/mecha_part_spawner/chassis/get_parts_to_spawn()
return subtypesof(/obj/item/mech_component/chassis)
/obj/effect/map_effect/mecha_part_spawner/chassis/spawn_parts()
. = ..()
new /obj/item/robot_parts/robot_component/diagnosis_unit(loc)
var/list/armors = typesof(/obj/item/robot_parts/robot_component/armor/mech)
for(var/armor in armors)
new armor(loc)
+2
View File
@@ -15,6 +15,7 @@ var/list/department_radio_keys = list(
":t" = "Mercenary", ".t" = "Mercenary",
":x" = "Raider", ".x" = "Raider",
":b" = "Burglar", ".b" = "Burglar",
":k" = "Jockey", ".k" = "Jockey",
":j" = "Bluespace", ".j" = "Bluespace",
":y" = "Hailing", ".y" = "Hailing",
":q" = "Ninja", ".q" = "Ninja",
@@ -38,6 +39,7 @@ var/list/department_radio_keys = list(
":T" = "Mercenary", ".T" = "Mercenary",
":X" = "Raider", ".X" = "Raider",
":B" = "Burglar", ".B" = "Burglar",
":K" = "Jockey", ".K" = "Jockey",
":J" = "Bluespace", ".J" = "Bluespace",
":Y" = "Hailing", ".Y" = "Hailing",
":Q" = "Ninja", ".Q" = "Ninja",
+6
View File
@@ -0,0 +1,6 @@
author: Geeves
delete-after: True
changes:
- rscadd: "Added a new gamemode, Jockeys, featuring a new antag, Jockey. A mecha-antag focused gamemode. Minimum two antags, minimum ten players on the server for it to roll."
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

+5 -1
View File
@@ -132,6 +132,10 @@
name = "Burglar Hideout"
icon_state = "burglar"
/area/antag/jockey
name = "Jockey Workshop"
icon_state = "jockey"
/area/antag/loner
name = "Loner Basement"
icon_state = "loner"
@@ -224,4 +228,4 @@
requires_power = 0
sound_env = STANDARD_STATION
no_light_control = 1
flags = RAD_SHIELDED | SPAWN_ROOF
flags = RAD_SHIELDED | SPAWN_ROOF
File diff suppressed because it is too large Load Diff