Skip to content
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

Gangs: Duffle bag changes #18345

Merged
merged 25 commits into from Apr 19, 2024
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
292fa99
wip
TDHooligan Mar 25, 2024
928bc36
encryption, pass gang to spawn method
TDHooligan Mar 27, 2024
b8a9371
bully thieves today (crates can probably wait)
TDHooligan Mar 27, 2024
9e2668c
remove bloops, fix status
TDHooligan Mar 27, 2024
fcf30ae
support p_class on items now
TDHooligan Mar 29, 2024
024a09d
always_slow_pull added
TDHooligan Mar 29, 2024
077ef88
duffel bags reusable & trapped
TDHooligan Mar 29, 2024
7a8d5ad
throw range limiting, makes sense.
TDHooligan Mar 29, 2024
9b33d4c
Merge branch 'master' into duffle-traps
TDHooligan Mar 29, 2024
b322133
warnings in texts
TDHooligan Mar 29, 2024
bbaba2f
remove fancy defines and tweak messages
TDHooligan Mar 31, 2024
ef4d36b
Merge branch 'master' into duffle-traps
TDHooligan Mar 31, 2024
d8dc626
Update code/datums/gamemodes/gangwar.dm
TDHooligan Mar 31, 2024
43b7cc1
Update code/datums/gamemodes/gangwar.dm
TDHooligan Mar 31, 2024
72a1871
Update code/modules/status_system/statusEffects.dm
TDHooligan Mar 31, 2024
200880e
Update code/obj/storage/gang_crate.dm
TDHooligan Mar 31, 2024
5c24162
Update code/obj/storage/vis_storage_controller.dm
TDHooligan Mar 31, 2024
be21175
Update code/obj/storage/vis_storage_controller.dm
TDHooligan Mar 31, 2024
c8a304d
garmamr fixxes.,
TDHooligan Apr 1, 2024
c1d3cb2
Merge branch 'master' into duffle-traps
TDHooligan Apr 1, 2024
ccbf254
feedbac
TDHooligan Apr 6, 2024
7b6df00
processing fix
TDHooligan Apr 7, 2024
b4e7c84
Merge branch 'master' into duffle-traps
TDHooligan Apr 7, 2024
c1b03f5
missed thing
TDHooligan Apr 8, 2024
e19c710
Merge branch 'duffle-traps' of https://github.com/TDHooligan/goonstat…
TDHooligan Apr 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions _std/defines/obj.dm
Expand Up @@ -11,6 +11,8 @@
#define HAS_DIRECTIONAL_BLOCKING (1<<3)
/// prevents ghost critter interaction. On obj so it can cover machinery, items etc...
#define NO_GHOSTCRITTER (1<<4)
/// Item treats locker movement as being moved itself (calls OnMove())
#define TRACK_STORAGE_MOVEMENT (1<<5)
TDHooligan marked this conversation as resolved.
Show resolved Hide resolved

/// At which alpha do opague objects become see-through?
#define MATERIAL_ALPHA_OPACITY 190
2 changes: 2 additions & 0 deletions code/atom.dm
Expand Up @@ -506,6 +506,8 @@ TYPEINFO(/atom/movable)

/// how much it slows you down while pulling it, changed this from w_class because that's gunna cause issues with items that shouldn't fit in backpacks but also shouldn't slow you down to pull (sorry grayshift)
var/p_class = 2.5
/// whether it uses p_class regardless of pull_slowing.
var/always_slow_pull = FALSE

// Enables mobs and objs to be mechscannable
/// Can this only be scanned with a syndicate mech scanner?
Expand Down
17 changes: 17 additions & 0 deletions code/datums/actions/actions.dm
Expand Up @@ -1779,6 +1779,23 @@
target.anchored = ANCHORED


/datum/action/bar/icon/unhook_gangbag
duration = 20 SECONDS
interrupt_flags = INTERRUPT_MOVE | INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION
icon = 'icons/obj/items/storage.dmi'
icon_state = "gang_dufflebag"
id = "unhook_gangbag"
var/obj/item/gang_loot/target

New(Owner, var/obj/item/gang_loot/new_target)
TDHooligan marked this conversation as resolved.
Show resolved Hide resolved
owner = Owner
target = new_target
..()
onEnd()
..()
target.unhook()


/datum/action/bar/icon/doorhack
duration = 3 SECONDS
interrupt_flags = INTERRUPT_MOVE | INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION
Expand Down
8 changes: 3 additions & 5 deletions code/datums/components/storage_viscontents.dm
@@ -1,14 +1,12 @@
///
/datum/component/storage_viscontents
var/obj/storage/crate/parent_container
var/datum/vis_storage_controller/controller

/datum/component/storage_viscontents/Initialize(container)
parent_container = container
controller = container
RegisterSignal(parent, COMSIG_ITEM_PICKUP, PROC_REF(remove_self))
..()

/datum/component/storage_viscontents/proc/remove_self(source)
var/obj/O = parent
O.transform = matrix()
parent_container.vis_items -= parent
controller.vis_items -= parent
qdel(src)
2 changes: 1 addition & 1 deletion code/datums/controllers/process/gang.dm
Expand Up @@ -148,7 +148,7 @@
civiliansAlreadyPinged += civvie
if (!(civvie in gangChosenCivvies))
gangChosenCivvies += civvie
targetGang.target_loot_spawn(civvie)
targetGang.target_loot_spawn(civvie,targetGang)
var/broadcast_string = "<span style='font-size:20px'> Our associates have hidden [repeats] bag[s_es(repeats)] of weapons & supplies on board. The location[s_es(repeats)] have been tipped off to the PDAs of: "
if (length(gangChosenCivvies) > 1)
for (var/name=1 to length(gangChosenCivvies)-1)
Expand Down
47 changes: 26 additions & 21 deletions code/datums/gamemodes/gangwar.dm
Expand Up @@ -404,7 +404,7 @@ proc/broadcast_to_all_gangs(var/message)
/// Strings used to build PDA messages sent to civilians.
var/static/gangGreetings[] = list("yo", "hey","hiya","oi", "psst", "pssst" )
var/static/gangIntermediates[] = list("don't ask how I got your number.","heads up.", "help us out.")
var/static/gangEndings[] = list("best of luck.", "maybe help them, yeah?", "stay in line and you'll probably live.", "don't think of stealing it.")
var/static/gangEndings[] = list("help them, or they might break yer' knees.", "stay in line and you'll probably live.", "don't fuck this up, or you're next.", "don't fuck this up.")

proc/living_member_count()
var/result = 0
Expand Down Expand Up @@ -803,10 +803,11 @@ proc/broadcast_to_all_gangs(var/message)
"rhino beetle helm" = /obj/item/clothing/head/rhinobeetle)

/// spawn loot and message a specific mind about it
proc/target_loot_spawn(var/datum/mind/civvie)
var/message = lootbag_spawn()
proc/target_loot_spawn(var/datum/mind/civvie, var/datum/gang/ownerGang)
TDHooligan marked this conversation as resolved.
Show resolved Hide resolved
var/message = lootbag_spawn(civvie, ownerGang)
var/datum/signal/newsignal = get_free_signal()
newsignal.source = src
newsignal.encryption = "GDFTHR+\ref[civvie.originalPDA]"
newsignal.data["command"] = "text_message"
newsignal.data["sender_name"] = "Unknown Sender"
newsignal.data["message"] = "[message]"
Expand Down Expand Up @@ -840,7 +841,7 @@ proc/broadcast_to_all_gangs(var/message)
potential_drop_zones += areas[area]

/// hide a loot bag somewhere, return a probably-somewhat-believable PDA message explaining its' location
proc/lootbag_spawn()
proc/lootbag_spawn(var/datum/mind/civvie, var/datum/gang/ownerGang)
TDHooligan marked this conversation as resolved.
Show resolved Hide resolved
if (!potential_drop_zones)
find_potential_drop_zones()
var/area/loot_zone = pick(potential_drop_zones)
Expand Down Expand Up @@ -871,32 +872,33 @@ proc/broadcast_to_all_gangs(var/message)
turfList.Add(T)
else
uncoveredTurfList.Add(T)

var/obj/item/gang_loot/loot
if(length(bushList))
loot = new/obj/item/gang_loot/guns_and_gear
var/obj/shrub/target = pick(bushList)
target.override_default_behaviour = 1
target.additional_items.Add(/obj/item/gang_loot/guns_and_gear)
target.max_uses = 1
target.additional_items.Add(loot)
target.spawn_chance = 75
target.last_use = 0

target.max_uses += 1
message += " we left some goods in a bush [pick("somewhere around", "inside", "somewhere inside")] \the [loot_zone]."
logTheThing(LOG_GAMEMODE, target, "Spawned at \the [loot_zone] for [src.gang_name], inside a shrub: [target] at [target.x],[target.y]")

else if(length(crateList) && prob(80))
var/obj/storage/target = pick(crateList)
target.contents.Add(new/obj/item/gang_loot/guns_and_gear(target.contents))
loot = new/obj/item/gang_loot/guns_and_gear(target.contents)
target.contents.Add(loot)
message += " we left a bag in \the [target], [pick("somewhere around", "inside", "somewhere inside")] \the [loot_zone]. "
logTheThing(LOG_GAMEMODE, target, "Spawned at \the [loot_zone] for [src.gang_name], inside a crate: [target] at [target.x],[target.y]")

else if(length(disposalList) && prob(85))
var/obj/machinery/disposal/target = pick(disposalList)
target.contents.Add(new/obj/item/gang_loot/guns_and_gear(target.contents))
loot = new/obj/item/gang_loot/guns_and_gear(target.contents)
target.contents.Add(loot)
message += " we left a bag in \the [target], [pick("somewhere around", "inside", "somewhere inside")] \the [loot_zone]. "
logTheThing(LOG_GAMEMODE, target, "Spawned at \the [loot_zone] for [src.gang_name], inside a chute: [target] at [target.x],[target.y]")
else if(length(tableList) && prob(65))
var/turf/simulated/floor/target = pick(tableList)
var/obj/item/gang_loot/loot = new/obj/item/gang_loot/guns_and_gear
var/turf/target = get_turf(pick(tableList))
loot = new/obj/item/gang_loot/guns_and_gear
target.contents.Add(loot)
loot.layer = OVERFLOOR
//nudge this into position, for sneakiness
Expand All @@ -910,24 +912,27 @@ proc/broadcast_to_all_gangs(var/message)
message += " we hid a bag in \the [loot_zone], under a table. "
logTheThing(LOG_GAMEMODE, loot, "Spawned at \the [loot_zone] for [src.gang_name], under a table: [target] at [target.x],[target.y]")
else if(length(turfList))
var/turf/simulated/floor/target = pick(turfList)
var/obj/item/gang_loot/loot = new/obj/item/gang_loot/guns_and_gear
target.contents.Add(loot)
var/turf/target = pick(turfList)
loot = new/obj/item/gang_loot/guns_and_gear(target)
loot.level = UNDERFLOOR
loot.hide(target.intact)
message += " we had to hide a bag in \the [loot_zone], under the floor tiles. "
logTheThing(LOG_GAMEMODE, loot, "Spawned at \the [loot_zone] for [src.gang_name], under the floor at [loot.x],[loot.y]")
else
var/turf/simulated/floor/target = pick(uncoveredTurfList)
var/obj/item/gang_loot/loot = new/obj/item/gang_loot/guns_and_gear
loot = new/obj/item/gang_loot/guns_and_gear
target.contents.Add(loot)
loot.hide(target.intact)
message += " we had to hide a bag in \the [loot_zone]. "
logTheThing(LOG_GAMEMODE, loot, "Spawned at \the [loot_zone] for [src.gang_name], on the floor at [loot.x],[loot.y].")

message += " there are folks aboard who will probably come looking. "
loot.informant = civvie.current.real_name

loot.owning_gang = ownerGang
loot.start_area = get_area(loot.loc)

if (prob(40))
message += pick(gangEndings)
message += " don't try to take it for yourself, you hear? we've got folk aboard who will come by and ask you for this information. "
message += pick(gangEndings)

return message

Expand Down Expand Up @@ -2379,7 +2384,7 @@ proc/broadcast_to_all_gangs(var/message)
on_purchase(var/obj/ganglocker/locker, var/mob/user )
var/datum/gang/ourGang = locker.gang
var/datum/mind/target = ourGang.get_random_civvie()
ourGang.target_loot_spawn(target)
ourGang.target_loot_spawn(target, ourGang)
ourGang.broadcast_to_gang("An extra tip off has been purchased; "+ target.current.real_name + " recieved the location on their PDA.")
return TRUE //don't spawn anything

Expand Down
3 changes: 3 additions & 0 deletions code/datums/movement_modifier/movement_modifiers.dm
Expand Up @@ -53,6 +53,9 @@
/datum/movement_modifier/death_march
additive_slowdown = -0.4

/datum/movement_modifier/gang_trapped
additive_slowdown = 2

/datum/movement_modifier/janktank
health_deficiency_adjustment = -50

Expand Down
5 changes: 5 additions & 0 deletions code/mob/living.dm
Expand Up @@ -1789,6 +1789,11 @@
// if the storage object contains mobs, use its p_class (updated within storage to reflect containing mobs or not)
if (locate(/mob) in A.contents)
. *= lerp(1, max(A.p_class, 1), mob_pull_multiplier)
else if (locate(/obj/item/gang_loot) in A.contents)
. *= lerp(1, max(A.p_class, 1), mob_pull_multiplier)
else if (A.always_slow_pull)
. *= lerp(1, max(A.p_class, 1), mob_pull_multiplier)
TDHooligan marked this conversation as resolved.
Show resolved Hide resolved

. = lerp(1, . , pushpull_multiplier)


Expand Down
11 changes: 11 additions & 0 deletions code/modules/status_system/statusEffects.dm
Expand Up @@ -1382,6 +1382,17 @@
getTooltip()
. = "Your vitals have dropped from the shame you feel hiding your true colors inside enemy territory."

gangtrapped
id = "gang_trap"
name = "Punctured"
desc = "You've grabbed something that wasn't yours, and it's lodged in your hand! Use it in hand to start plucking it free."
icon_state = "gangtrapped"
unique = 1
TDHooligan marked this conversation as resolved.
Show resolved Hide resolved
duration = INFINITE_STATUS
maxDuration = null
effect_quality = STATUS_QUALITY_NEGATIVE
movement_modifier = /datum/movement_modifier/gang_trapped

janktank
id = "janktank"
name = "janktank"
Expand Down
6 changes: 6 additions & 0 deletions code/obj/decorations.dm
Expand Up @@ -311,6 +311,12 @@
visible_message(SPAN_ALERT("<b>[user] violently shakes [src] around! \An [thing] falls out!</b>"))
last_use = world.time
max_uses--
else
if (istype(something, /obj))
TDHooligan marked this conversation as resolved.
Show resolved Hide resolved
var/obj/thing = something
additional_items -= something
thing.set_loc(src.loc)
visible_message(SPAN_ALERT("<b>[user] violently shakes [src] around! \An [thing] falls out!</b>"))
else
visible_message(SPAN_ALERT("<b>[user] violently shakes [src] around![prob(20) ? " A few leaves fall out!" : null]</b>"))

Expand Down
2 changes: 1 addition & 1 deletion code/obj/item/device/pda2/base_os.dm
Expand Up @@ -772,7 +772,7 @@
newsignal.data["owner"] = src.master.owner
src.post_signal(newsignal)

if(signal.encryption) return
if(signal.encryption && signal.encryption != "GDFTHR+\ref[pda]") return

if(signal.data["address_1"] && signal.data["address_1"] != src.master.net_id)
if((signal.data["address_1"] == "ping") && signal.data["sender"])
Expand Down