Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 10 additions & 0 deletions code/datums/ert.dm
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@
leader_role = /datum/antagonist/ert/amber/commander
roles = list(/datum/antagonist/ert/amber,/datum/antagonist/ert/amber,/datum/antagonist/ert/amber/medic) // entered duplicate here to increase change of soldiers

/datum/ert/occupying
opendoors = FALSE
code = "Blue"
rename_team = "Occupying Force"
mission = "Occupy the station. Minimize crew casulties. Enforce space law."
polldesc = "the Occupying Force"
teamsize = 5 // redundant but keeping this here for clarity
leader_role = /datum/antagonist/ert/occupying/commander
roles = list(/datum/antagonist/ert/occupying,/datum/antagonist/ert/occupying/heavy,/datum/antagonist/ert/occupying,/datum/antagonist/ert/occupying)

/datum/ert/red
leader_role = /datum/antagonist/ert/commander/red
roles = list(/datum/antagonist/ert/security/red, /datum/antagonist/ert/medic/red, /datum/antagonist/ert/engineer/red)
Expand Down
15 changes: 15 additions & 0 deletions code/game/machinery/doors/airlock.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1236,6 +1236,21 @@
if(hasPower() && !prying_so_hard)
if (I.tool_behaviour == TOOL_CROWBAR) //we need another check, futureproofing for if/when bettertools actually completely replaces the old jaws
time_to_open = 50
if(istype(I,/obj/item/jawsoflife/jimmy))
time_to_open = 30
var/obj/item/jawsoflife/jimmy/J = I
if(J.pump_charge >= J.pump_cost)
J.pump_charge = J.pump_charge - J.pump_cost
if(J.pump_charge < 0)
J.pump_charge = 0
playsound(src, 'sound/items/jimmy_pump.ogg', 100, TRUE)
if(J.obj_flags & EMAGGED)
time_to_open = 15
else
if(user)
to_chat(user, "<span class='warning'>You do not have enough charge in the [J] for this. You need at least [J.pump_cost]% </span>")
return

playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) //is it aliens or just the CE being a dick?
prying_so_hard = TRUE
if(do_after(user, time_to_open, TRUE, src))
Expand Down
9 changes: 9 additions & 0 deletions code/game/objects/items/cards_ids.dm
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,15 @@ update_label("John Doe", "Clowny")
desc = "An Amber Task Force ID card."
assignment = "Amber Task Force"

/obj/item/card/id/ert/occupying
name = "\improper Occupying Force ID"
desc = "An Occupying Force ID card."
assignment = "Occupying Officer"

/obj/item/card/id/ert/occupying/Initialize()
Comment thread
Hopekz marked this conversation as resolved.
access = list(ACCESS_SECURITY,ACCESS_BRIG,ACCESS_WEAPONS,ACCESS_SEC_DOORS,ACCESS_MAINT_TUNNELS)+get_ert_access("sec")
. = ..()

/obj/item/card/id/ert/Initialize()
access = get_all_accesses()+get_ert_access("commander")-ACCESS_CHANGE_IDS
. = ..()
Expand Down
5 changes: 5 additions & 0 deletions code/game/objects/items/cigs_lighters.dm
Original file line number Diff line number Diff line change
Expand Up @@ -927,3 +927,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM

if(reagents && reagents.total_volume)
hand_reagents()

/obj/item/clothing/mask/cigarette/lit/Initialize()
. = ..()
light() // These cigarettes start lit.

6 changes: 6 additions & 0 deletions code/game/objects/items/stunbaton.dm
Original file line number Diff line number Diff line change
Expand Up @@ -255,3 +255,9 @@
/obj/item/melee/baton/cattleprod/baton_stun()
if(sparkler.activate())
..()

/obj/item/melee/baton/cattleprod/tactical
name = "tactical stunprod"
desc = "A cost-effective, mass-produced, tactical stun prod."
preload_cell_type = /obj/item/stock_parts/cell/high/plus // comes with a cell
color = "#aeb08c" // super tactical
3 changes: 3 additions & 0 deletions code/game/turfs/simulated/floor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,9 @@
return 0

/turf/open/floor/crowbar_act(mob/living/user, obj/item/I)
if(istype(I,/obj/item/jawsoflife/jimmy))
to_chat(user,"The [I] cannot pry tiles.")
return
return intact ? pry_tile(I, user) : FALSE

/turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
Expand Down
15 changes: 15 additions & 0 deletions code/modules/antagonists/ert/ert.dm
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,21 @@
outfit = /datum/outfit/amber/commander
role = "Commander"

/datum/antagonist/ert/occupying
name = "Occupying Officer"
outfit = /datum/outfit/occupying
role = "Officer"

/datum/antagonist/ert/occupying/heavy
name = "Occupying Riot Officer"
outfit = /datum/outfit/occupying/heavy
role = "Riot Officer"

/datum/antagonist/ert/occupying/commander
name = "Occupying Commander"
outfit = /datum/outfit/occupying/commander
role = "Commander"

/datum/antagonist/ert/clown
name = "Comedy Response Officer"
outfit = /datum/outfit/centcom_clown
Expand Down
11 changes: 9 additions & 2 deletions code/modules/clothing/clothing.dm
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ SEE_MOBS // can see all mobs, no matter what
SEE_OBJS // can see all objs, no matter what
SEE_TURFS // can see all turfs (and areas), no matter what
SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are
// in a lit area (via pixel_x,y or smooth movement), can see those pixels
// in a lit area (via pixel_x,y or smooth movement), can see those pixels
BLIND // can't see anything
*/

Expand Down Expand Up @@ -244,7 +244,14 @@ BLIND // can't see anything
set src in usr
rolldown()

/obj/item/clothing/under/proc/rolldown()
/obj/item/clothing/under/proc/rolldown(bypass = FALSE)
if(bypass)
toggle_jumpsuit_adjust()
if(usr)
var/mob/living/carbon/human/H = usr
H.update_inv_w_uniform()
H.update_body()
return
if(!can_use(usr))
return
if(!can_adjust)
Expand Down
8 changes: 8 additions & 0 deletions code/modules/clothing/head/helmet.dm
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,14 @@
return
return ..()

/obj/item/clothing/head/helmet/sec/occupying
name = "occupying force helmet"
desc = "Standard deployment gear. Protects the head from impacts and has a built in mounted light."

/obj/item/clothing/head/helmet/sec/occupying/Initialize(mob/user)
attached_light = new /obj/item/flashlight/seclite(null)
. = ..()

/obj/item/clothing/head/helmet/alt
name = "bulletproof helmet"
desc = "A bulletproof combat helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent."
Expand Down
121 changes: 121 additions & 0 deletions code/modules/clothing/outfits/occupying.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
// occupying force clothing
/obj/item/clothing/under/rank/security/grey/amber/occupying
name = "occupying force jumpsuit"
color = "#55ff9b"

/obj/item/clothing/under/rank/security/grey/amber/occupying/Initialize(mob/user)
. = ..()
if(prob(50)) // Adds variation to the uniform. 50% will be worn casually.
rolldown(TRUE)

/obj/item/clothing/head/beret/sec/centcom/occupying
name = "occupying force beret"
desc = "A special green beret for the mundane life of an Occupying Force commander."
color = "#55ff9b"

/obj/item/clothing/suit/armor/riot/occupying
armor = list("melee" = 40, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 40)
name = "occupying force riot suit"
desc = "A mass produced semi-flexible polycarbonate body armor with decent padding to protect against melee attacks. Not as strong as riot suits typically issued to NT stations."
color = "#55ff9b"

/obj/item/clothing/head/helmet/riot/raised/occupying
name = "occupying force riot helmet"
desc = "It's a helmet specifically designed for the Occupying force to protect against close range attacks."
color = "#55ff9b"

// occupying force vest loadouts
// To note: each vest has 7 normal slots - Hopek
/obj/item/storage/belt/military/occupying_officer/ComponentInitialize() // Occupying Officer
. = ..()
new /obj/item/ammo_box/magazine/wt550m9/wtr(src)
new /obj/item/ammo_box/magazine/wt550m9/wtr(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/reagent_containers/food/snacks/pizzaslice/pepperoni(src)
new /obj/item/jawsoflife/jimmy(src)


/obj/item/storage/belt/military/occupying_commander/ComponentInitialize() // Occupying force Commander
. = ..()
new /obj/item/ammo_box/magazine/wt550m9/wtr(src)
new /obj/item/ammo_box/magazine/wt550m9/wtr(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
new /obj/item/reagent_containers/food/snacks/pizzaslice/pepperoni(src)
new /obj/item/megaphone(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/jawsoflife/jimmy(src)

/obj/item/storage/belt/military/occupying_heavy
color = "#55ff9b"

/obj/item/storage/belt/military/occupying_heavy/ComponentInitialize() // Occupying Riot Officer
. = ..()
new /obj/item/restraints/legcuffs/bola/energy(src)
new /obj/item/restraints/legcuffs/bola/energy(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/reagent_containers/food/snacks/pizzaslice/pepperoni(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
new /obj/item/flashlight/flare(src)
new /obj/item/jawsoflife/jimmy(src)


/datum/outfit/occupying
name = "Occupying Officer"
uniform = /obj/item/clothing/under/rank/security/grey/amber/occupying
suit = /obj/item/clothing/suit/armor/vest/alt
shoes = /obj/item/clothing/shoes/jackboots
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/radio/headset/headset_cent/alt
mask = /obj/item/clothing/mask/cigarette/lit
belt = /obj/item/storage/belt/military/occupying_officer
suit_store = /obj/item/gun/ballistic/automatic/wt550/occupying
back = /obj/item/melee/baton/cattleprod/tactical
head = /obj/item/clothing/head/helmet/sec/occupying
l_pocket = /obj/item/reagent_containers/food/drinks/beer
r_pocket = /obj/item/storage/box/fancy/cigarettes
id = /obj/item/card/id/ert/occupying
implants = list(/obj/item/implant/mindshield)


/datum/outfit/occupying/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return

H.facial_hair_style = "None" // Everyone in the Occupying force is bald and has no facial hair
H.hair_style = "None"

var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CENTCOM)
R.freqlock = TRUE

var/obj/item/card/id/W = H.wear_id
W.icon_state = "centcom"
W.registered_name = "Unknown" // continuing the tradition of these ID's not being assigned to a particular person
W.assignment = "Occupying Force"
W.update_label(W.registered_name, W.assignment)

H.ignores_capitalism = TRUE // Yogs -- Lets the Occupying force buy a damned smoke for christ's sake


/datum/outfit/occupying/commander
name = "Occupying force Commander"
head = /obj/item/clothing/head/beret/sec/centcom/occupying
belt = /obj/item/storage/belt/military/occupying_commander
l_pocket = /obj/item/pinpointer/nuke
r_pocket = /obj/item/lighter/greyscale // everyone has ciggies, only commander has a lighter
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
glasses = /obj/item/clothing/glasses/hud/security

/datum/outfit/occupying/heavy
name = "Occupying Riot Officer"
belt = /obj/item/storage/belt/military/occupying_heavy
back = /obj/item/shield/riot
l_pocket = /obj/item/clothing/ears/earmuffs
r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
head = /obj/item/clothing/head/helmet/riot/raised/occupying
suit = /obj/item/clothing/suit/armor/riot/occupying
mask = /obj/item/clothing/mask/breath/tactical
suit_store = /obj/item/melee/baton/loaded
glasses = /obj/item/clothing/glasses/sunglasses
6 changes: 6 additions & 0 deletions code/modules/projectiles/guns/ballistic/automatic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,12 @@
mag_display_ammo = TRUE
empty_indicator = TRUE

/obj/item/gun/ballistic/automatic/wt550/occupying
name = "surplus security auto rifle"
desc = "Crude surplus variant of the WT-550 Automatic Rifle meant for mass deployment. Does not come with the benefits of a two round burst."
burst_size = 1
mag_type = /obj/item/ammo_box/magazine/wt550m9/wtr

/obj/item/gun/ballistic/automatic/mini_uzi
name = "\improper Type U3 Uzi"
desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds."
Expand Down
Binary file modified icons/obj/tools.dmi
Binary file not shown.
Binary file added sound/items/jimmy_pump.ogg
Binary file not shown.
1 change: 1 addition & 0 deletions yogstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -1671,6 +1671,7 @@
#include "code\modules\clothing\outfits\amber.dm"
#include "code\modules\clothing\outfits\ert.dm"
#include "code\modules\clothing\outfits\event.dm"
#include "code\modules\clothing\outfits\occupying.dm"
#include "code\modules\clothing\outfits\plasmaman.dm"
#include "code\modules\clothing\outfits\standard.dm"
#include "code\modules\clothing\outfits\vr.dm"
Expand Down
68 changes: 68 additions & 0 deletions yogstation/code/game/objects/items/tools.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
force = 15
toolspeed = 0.7
tool_behaviour = TOOL_CROWBAR
var/pryforce = 1 // the speed at which airlocks are pried open. Default is 1 .

//jaws of life changing jaw code
/obj/item/jawsoflife/attack_self(mob/user)
Expand Down Expand Up @@ -131,3 +132,70 @@
to_chat(user, "<span class='notice'>You attach the screw driver bit to [src].</span>")
update_icon()

/obj/item/jawsoflife/jimmy
name = "airlock jimmy"
desc = "A pump assisted airlock prying jimmy."
icon_state = "jimmy"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
materials = list(MAT_METAL=400,MAT_SILVER=10,MAT_TITANIUM=80)
toolspeed = 0.3 // Starting minimum value. Pump it up by using it up to the max
tool_behaviour = TOOL_CROWBAR
pryforce = 0.4
var/pump_charge = 0
var/pump_max = 100
var/pump_min = 0
var/pump_cost = 50 // the cost to pump best if done in incriments of 25 up to the max
var/pump_rate = 25
var/is_pumping = FALSE // are we charging at the moment?

/obj/item/jawsoflife/jimmy/attack_self(mob/user) // airlock jimmy can't switch tool modes back to cutters.
if(user)
pump(user)
show_gage(user)

/obj/item/jawsoflife/jimmy/proc/pump(mob/user)
if(pump_charge >= pump_max && user)
to_chat(user,"[src] is fully pumped.")
else
if(!is_pumping)
var/old_value = pump_charge
is_pumping = TRUE
pump_charge = (pump_charge + pump_rate) > pump_max ? pump_max : pump_charge + pump_rate
if(old_value != pump_charge)
playsound(src, 'sound/items/jimmy_pump.ogg', 100, TRUE) // no need you pump; didn't pump but instead looked at the gage
addtimer(CALLBACK(src, .proc/pump_cooldown), 5) // cooldown between pumps
addtimer(CALLBACK(src, .proc/pump_powerdown), 300) // lose gained power after 30 seconds
return

/obj/item/jawsoflife/jimmy/proc/pump_powerdown(mob/user)
if((pump_charge - 25) >= 0)
pump_charge = pump_charge - 25
return

/obj/item/jawsoflife/jimmy/proc/show_gage(mob/user)
var/emag_givaway_flavor = ""
message_admins("pump charge is [pump_charge]")
if(pump_charge > 101)
emag_givaway_flavor = pick("somehow ","unironically ","ironically ","actually ","maybe ")
to_chat(user,"[src]'s pressure gage [emag_givaway_flavor]reads [pump_charge]%")

/obj/item/jawsoflife/jimmy/proc/pump_cooldown()
is_pumping = FALSE

/obj/item/jawsoflife/jimmy/emag_act(mob/user)
if(obj_flags & EMAGGED)
to_chat(user, "<span class='warning'>Nothing new seems to happen when you swipe the emag.</span>")
return
to_chat(user, "<span class='notice'>You swipe the emag on [src]'s pressure gage' enabling you to pump more pressure. </span>")
obj_flags |= EMAGGED
pump_max = 150
pump_cost = 75
. = ..()

/obj/item/jawsoflife/jimmy/examine(mob/user)
. = ..()
if(obj_flags & EMAGGED)
. += "<span class='danger'>The pressure gage has been tampered with.</span>"
if(user)
show_gage(user)