Skip to content
Open
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
0b6d5c8
gangsta shit
munchyi Jul 31, 2026
0e0281e
Initial gangs commit
sylvia-from-fulp-station Aug 1, 2026
b5fb90f
door area spawner
munchyi Aug 1, 2026
877abdf
associates and soldiers
sylvia-from-fulp-station Aug 1, 2026
14052fa
light
munchyi Aug 1, 2026
c340cb8
Merge branch 'gangs' of https://github.com/sylvia-from-fulp-station/c…
munchyi Aug 1, 2026
04d4164
loadout updates
sylvia-from-fulp-station Aug 1, 2026
86ffcc6
Merge branch 'gangs' of https://github.com/sylvia-from-fulp-station/c…
sylvia-from-fulp-station Aug 1, 2026
96741fa
fix
sylvia-from-fulp-station Aug 1, 2026
2cc7260
give that mf a chain
sylvia-from-fulp-station Aug 1, 2026
ccb2ccb
fixup
munchyi Aug 1, 2026
49b6311
x
munchyi Aug 1, 2026
0e7a0ed
Merge branch 'gangs' of https://github.com/sylvia-from-fulp-station/c…
munchyi Aug 1, 2026
4f63f48
xzz
munchyi Aug 1, 2026
e4686ef
fix
sylvia-from-fulp-station Aug 1, 2026
085d110
Merge branch 'gangs' of https://github.com/sylvia-from-fulp-station/c…
munchyi Aug 1, 2026
6396c65
try2
munchyi Aug 1, 2026
c380b40
lava
munchyi Aug 1, 2026
7d88230
More fixes
sylvia-from-fulp-station Aug 1, 2026
dd16a8e
Merge remote-tracking branch 'upstream/master' into gangs
sylvia-from-fulp-station Aug 1, 2026
c4f8816
the dealening
sylvia-from-fulp-station Aug 2, 2026
800cb29
tiny ahh mistake
sylvia-from-fulp-station Aug 2, 2026
249efda
pressed the space bar button award
sylvia-from-fulp-station Aug 2, 2026
10fc984
Merge branch 'Monkestation:master' into gangs
sylvia-from-fulp-station Aug 2, 2026
dcbd2fb
fixes the map a bit
sylvia-from-fulp-station Aug 3, 2026
996c381
more fixes
sylvia-from-fulp-station Aug 3, 2026
2755119
you map like a cat mrprprprpr meow
sylvia-from-fulp-station Aug 3, 2026
ecf30d5
Update landmarks.dmi
sylvia-from-fulp-station Aug 3, 2026
1607295
Update modular_darkpack/modules/npc/code/human/__npc.dm
sylvia-from-fulp-station Aug 4, 2026
2177cff
Update modular_darkpack/modules/npc/code/human/__npc.dm
sylvia-from-fulp-station Aug 4, 2026
03962d2
Update modular_darkpack/modules/npc/code/human/__npc.dm
sylvia-from-fulp-station Aug 4, 2026
e753db0
useless define gone
sylvia-from-fulp-station Aug 4, 2026
7399d4f
Update __npc.dm
sylvia-from-fulp-station Aug 4, 2026
7151eef
Update modular_vcg/modules/jobs/code/gang/associate.dm
sylvia-from-fulp-station Aug 4, 2026
24f6bcf
Update modular_darkpack/modules/npc/code/human/socialroles/__socialro…
sylvia-from-fulp-station Aug 4, 2026
7d99a8d
Update modular_vcg/modules/jobs/code/gang/soldier.dm
sylvia-from-fulp-station Aug 4, 2026
d5fbfc5
Update modular_vcg/modules/jobs/code/gang/soldier.dm
sylvia-from-fulp-station Aug 4, 2026
96e595e
this doesnt do what i thought
sylvia-from-fulp-station Aug 4, 2026
fc86269
Merge branch 'gangs' of https://github.com/sylvia-from-fulp-station/c…
sylvia-from-fulp-station Aug 4, 2026
2e7c135
there are actually not that many of these NPCs
sylvia-from-fulp-station Aug 4, 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
8,386 changes: 5,030 additions & 3,356 deletions _maps/map_files/Vampire/san_fangsisco/sanfangsisco.dmm

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions code/__DEFINES/~darkpack/crimes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
#define CRIME_BURGLARY "Burglary"
#define CRIME_EMERGENCY "Emergency Alarm"
#define CRIME_ATM_TAMPERING "Atm Tampering"
#define CRIME_DRUG_SALE "Drug Sale"
1 change: 1 addition & 0 deletions code/__DEFINES/~darkpack/factions.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

// City faction
#define FACTION_CITY "city"
#define FACTION_GANG "gang"

#define FACTION_GAIA "gaia"
#define FACTION_PENTEX "pentex"
16 changes: 16 additions & 0 deletions code/__DEFINES/~darkpack/jobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,12 @@
#define JOB_CONDOTTIERI "Condottieri"
#define JOB_INQUISITOR "Inquisitor"

// Gang
#define JOB_GANG_BOSS "Street Boss"
#define JOB_GANG_UNDERBOSS "Underboss"
#define JOB_GANG_SOLDIER "Enforcer"
#define JOB_GANG "Associate"

//////////////////////////////////////////////////

#define JOB_DISPLAY_ORDER_CITIZEN 1
Expand Down Expand Up @@ -174,6 +180,11 @@
#define JOB_DISPLAY_ORDER_CONDOTTIERI 3
#define JOB_DISPLAY_ORDER_NOVICE 4

#define JOB_DISPLAY_ORDER_GANG_BOSS 1
#define JOB_DISPLAY_ORDER_GANG_UNDERBOSS 2
#define JOB_DISPLAY_ORDER_GANG_SOLDIER 3
#define JOB_DISPLAY_ORDER_GANG 4

//////////////////////////////////////////////////

#define DEPARTMENT_BITFLAG_CITIZEN (1<<0)
Expand Down Expand Up @@ -210,6 +221,8 @@
#define DEPARTMENT_GAIA "Garou Nation"
#define DEPARTMENT_BITFLAG_SOCIETY_OF_LEOPOLD (1<<16)
#define DEPARTMENT_SOCIETY_OF_LEOPOLD "Society of Leopold"
#define DEPARTMENT_BITFLAG_GANG (1<<17)
#define DEPARTMENT_GANG "Gang"

DEFINE_BITFIELD(departments_bitflags, list(
"CITIZEN" = DEPARTMENT_BITFLAG_CITIZEN,
Expand All @@ -229,6 +242,7 @@ DEFINE_BITFIELD(departments_bitflags, list(
"MANOR" = DEPARTMENT_BITFLAG_MANOR,
"CITY_SERVICES" = DEPARTMENT_BITFLAG_CITY_SERVICES,
"SOCIETY_OF_LEOPOLD" = DEPARTMENT_BITFLAG_SOCIETY_OF_LEOPOLD,
"GANG" = DEPARTMENT_BITFLAG_GANG,
))

/// Combination flag for jobs which are considered regular crew members of the station.
Expand All @@ -250,6 +264,7 @@ DEFINE_BITFIELD(departments_bitflags, list(
#define SUPERVISOR_SENESCHAL_PUBLIC "the COO"
#define SUPERVISOR_BARON_PUBLIC "the Bar's Owner"
#define SUPERVISOR_SOCIETY_OF_LEOPOLD "the Society of Leopold, the Inquisition, the local Provincial, and God"
#define SUPERVISOR_GANG "the Street Boss"

// Playtime tracking system, see jobs_exp.dm
// weird one.
Expand All @@ -271,3 +286,4 @@ DEFINE_BITFIELD(departments_bitflags, list(
#define EXP_TYPE_MANOR "Tzimisce Manor"
#define EXP_TYPE_CHURCH "Church"
#define EXP_TYPE_CLUB "Strip Club"
#define EXP_TYPE_GANG "Gang"
1 change: 1 addition & 0 deletions code/__DEFINES/~darkpack/lock_access_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
#define LOCKACCESS_CHURCH "church"
#define LOCKACCESS_TAXI "taxi"

#define LOCKACCESS_GANG "gang"
#define LOCKACCESS_TRAID "triad"
#define LOCKACCESS_CLEANING "cleaning"
#define LOCKACCESS_LAUNDROMAT "laundromat"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -304,3 +304,8 @@
ambience_index = AMBIENCE_OFFICE
fire_controled = TRUE
domain = TRUE

/area/vtm/interior/gangbase
name = "Gang Hideout"
fire_controled = TRUE
domain = TRUE
3 changes: 3 additions & 0 deletions modular_darkpack/modules/doors/code/helpers/door_access.dm
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,9 @@
lock_id = LOCKACCESS_TAXI


/obj/effect/mapping_helpers/door/access/gang
lock_id = LOCKACCESS_GANG

/obj/effect/mapping_helpers/door/access/triad
lock_id = LOCKACCESS_TRAID

Expand Down
7 changes: 7 additions & 0 deletions modular_darkpack/modules/doors/code/keys/keys.dm
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,13 @@ GLOBAL_LIST_INIT(city_door_lock_ids, list())

//===========================MISC KEYS===========================

/obj/item/vamp/keys/gang
name = "bloody keys"
accesslocks = list(
LOCKACCESS_GANG
)
color = "#bd3327"

/obj/item/vamp/keys/triads
name = "rusty keys"
accesslocks = list(
Expand Down
10 changes: 9 additions & 1 deletion modular_darkpack/modules/jobs/code/_departments.dm
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,17 @@
display_order = 15
ui_color = "#fff022"

/datum/job_department/gang // humans only
department_name = DEPARTMENT_GANG
department_bitflags = DEPARTMENT_BITFLAG_GANG
department_head = /datum/job/vampire/gangboss
department_experience_type = EXP_TYPE_GANG
display_order = 16
ui_color = "#b1291f"

// Bottom of the barrel
/datum/job_department/citizen
department_name = DEPARTMENT_CITIZEN
department_bitflags = DEPARTMENT_BITFLAG_CITIZEN
display_order = 16
display_order = 17
// Don't add department_head! citizens names should not be in bold.
9 changes: 9 additions & 0 deletions modular_darkpack/modules/jobs/code/landmarks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,13 @@ JOB_START_HELPER(society_of_leopold/condittieri, JOB_CONDOTTIERI)
JOB_START_HELPER(society_of_leopold/inquisitor, JOB_INQUISITOR)
JOB_START_HELPER(society_of_leopold/novice, JOB_NOVICE)

/* Gang */
/obj/effect/landmark/start/darkpack/citizen
name = "generic gang start"

JOB_START_HELPER(gang/boss, JOB_GANG_BOSS)
JOB_START_HELPER(gang/underboss, JOB_GANG_UNDERBOSS)
JOB_START_HELPER(gang/enforcer, JOB_GANG_SOLDIER)
JOB_START_HELPER(gang/associate, JOB_GANG)

#undef JOB_START_HELPER
Binary file modified modular_darkpack/modules/jobs/icons/landmarks.dmi
Binary file not shown.
97 changes: 97 additions & 0 deletions modular_darkpack/modules/npc/code/human/__npc.dm
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
#define BANDIT_TYPE_NPC /mob/living/carbon/human/npc/bandit
#define POLICE_TYPE_NPC /mob/living/carbon/human/npc/police

#define NPC_DRUG_SALE_DIFFICULTY 6
Comment thread
sylvia-from-fulp-station marked this conversation as resolved.
Outdated
#define NPC_DRUG_SALE_BOTCH_PENALTY 0.5
#define NPC_DRUG_LINE_COOLDOWN 3 SECONDS

/datum/storyteller_roll/npc_drug_sale
bumper_text = "dealing"
applicable_stats = list(STAT_STREETWISE, STAT_CHARISMA)
Comment thread
sylvia-from-fulp-station marked this conversation as resolved.
Outdated
difficulty = NPC_DRUG_SALE_DIFFICULTY
Comment thread
sylvia-from-fulp-station marked this conversation as resolved.
Outdated
numerical = TRUE

/mob/living/carbon/human/npc
name = "NPC"

Expand Down Expand Up @@ -32,12 +42,14 @@

var/is_talking = FALSE
COOLDOWN_DECLARE(annoyed_cooldown)
COOLDOWN_DECLARE(drug_line_cooldown)
COOLDOWN_DECLARE(car_dodge)
var/hostile = FALSE
var/aggressive = FALSE
var/last_antagonised = 0
var/mob/living/danger_source
var/obj/effect/abstract/turf_fire/afraid_of_fire
var/mob/living/fleeing_from
var/mob/living/last_attacker
var/last_health = 100
var/mob/living/last_damager
Expand Down Expand Up @@ -78,6 +90,16 @@

var/list/drop_on_death_list = null

var/drug_price = 0
var/drug_purchase_limit = 3 // so you can't just keep an NPC next to a weed farm
var/drug_purchases = 0
var/datum/storyteller_roll/npc_drug_sale/drug_sell_roll
var/static/list/npc_buyable_categories = list(
"weed",
"meth",
"cocaine",
)

/mob/living/carbon/human/npc/Initialize(mapload)
. = ..()

Expand Down Expand Up @@ -269,3 +291,78 @@

/mob/living/carbon/human/npc/proc/ghoul_player_controlled(mob/owner)
message_admins("[key_name_admin(src)] has became a ghoul by [key_name_admin(owner)].")

//drug dealing
/mob/living/carbon/human/npc/proc/announce_drug_line(list/phrases)
if(!LAZYLEN(phrases))
return
if(!COOLDOWN_FINISHED(src, drug_line_cooldown))
return
COOLDOWN_START(src, drug_line_cooldown, NPC_DRUG_LINE_COOLDOWN)
say(pick(phrases))

/mob/living/carbon/human/npc/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
. = ..()
if(.)
return

if(user.combat_mode)
return NONE

var/datum/component/selling/selling_comp = tool.GetComponent(/datum/component/selling)
if(!selling_comp || !selling_comp.illegal || !(selling_comp.object_category in npc_buyable_categories))
Comment thread
sylvia-from-fulp-station marked this conversation as resolved.
Outdated
return NONE
// dont deal drugs to cops
if(istype(src, /mob/living/carbon/human/npc/police))
announce_drug_line(socialrole?.drug_witness_phrases)
last_antagonised = world.time
Aggro(user, TRUE)
SEND_SIGNAL(SSdcs, COMSIG_GLOB_REPORT_CRIME, CRIME_DRUG_SALE, get_turf(src))
return ITEM_INTERACT_SUCCESS
// dont deal drugs to drug dealers
if(istype(src, /mob/living/carbon/human/npc/bandit) && prob(50))
announce_drug_line(socialrole?.drug_turf_phrases)
last_antagonised = world.time
Aggro(user, TRUE)
return ITEM_INTERACT_SUCCESS

if(danger_source == user)
return ITEM_INTERACT_SUCCESS

if(drug_price <= 0 || drug_purchases >= drug_purchase_limit)
realistic_say(pick(socialrole?.drug_refusal_phrases))
return ITEM_INTERACT_SUCCESS

drug_purchases++

if(!drug_sell_roll)
drug_sell_roll = new()
var/success_count = drug_sell_roll.st_roll(user, src)
var/stack_multiplier = 1
if(istype(tool, /obj/item/stack))
var/obj/item/stack/stack_item = tool
stack_multiplier = stack_item.amount
var/sale_price = round(selling_comp.cost * stack_multiplier * drug_price * (success_count > 0 ? success_count : NPC_DRUG_SALE_BOTCH_PENALTY))

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol - this is gonna be nuts. we will have to balance this. keep for now.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it uses the same value as black market so if that's nerfed this will be nerfed too


var/obj/item/stack/dollar/cash = new(get_turf(src), sale_price)
user.put_in_hands(cash)

// dont deal drugs infront of cops
for(var/mob/living/carbon/human/npc/police/witness in oviewers(DEFAULT_SIGHT_DISTANCE, src))
witness.announce_drug_line(witness.socialrole?.drug_witness_phrases)
witness.last_antagonised = world.time
witness.Aggro(user, TRUE)
fleeing_from = witness

if(!fleeing_from)
realistic_say(pick(socialrole?.drug_purchase_phrases))

SEND_SIGNAL(SSdcs, COMSIG_GLOB_REPORT_CRIME, CRIME_DRUG_SALE, get_turf(src))

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sidenote - pretty sure the crime always gets 'reported' even no matter if there are no witnesses. have to check tho.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this only runs if a cop sees it (or should)


log_game("[key_name(user)] sold [tool] to [src] for $[sale_price]")
qdel(tool)
return ITEM_INTERACT_SUCCESS

#undef NPC_DRUG_SALE_DIFFICULTY
#undef NPC_DRUG_SALE_BOTCH_PENALTY
#undef NPC_DRUG_LINE_COOLDOWN
6 changes: 6 additions & 0 deletions modular_darkpack/modules/npc/code/human/npc_movement.dm
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,12 @@
if (prob(25))
emote("scream")

// Fleeing from cops who witnessed a drug deal
else if (fleeing_from)
GLOB.move_manager.move_away(src, fleeing_from, 10, cached_multiplicative_slowdown)
if(fleeing_from.stat > UNCONSCIOUS || !(fleeing_from in view(DEFAULT_SIGHT_DISTANCE, src)))
fleeing_from = null

// Walking around behaviour
else if (walktarget && !staying)
GLOB.move_manager.move_to(src, walktarget, 0, cached_multiplicative_slowdown)
Expand Down
2 changes: 2 additions & 0 deletions modular_darkpack/modules/npc/code/human/npc_types/bandit.dm
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/mob/living/carbon/human/npc/bandit
max_stat = HARD_CRIT
my_backup_weapon_type = /obj/item/knife/vamp
drug_price = 0.5
drug_purchase_limit = 2

/mob/living/carbon/human/npc/bandit/Initialize(mapload)
. = ..()
Expand Down
2 changes: 2 additions & 0 deletions modular_darkpack/modules/npc/code/human/npc_types/business.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
/mob/living/carbon/human/npc/business
bloodquality = BLOOD_QUALITY_HIGH
drug_price = 2 // the golden goose
drug_purchase_limit = 4

/mob/living/carbon/human/npc/business/Initialize(mapload)
. = ..()
Expand Down
1 change: 1 addition & 0 deletions modular_darkpack/modules/npc/code/human/npc_types/club.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/mob/living/carbon/human/npc/walkby/club
staying = TRUE
drug_price = 1

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be increased. socialites go skiing all the time.


/mob/living/carbon/human/npc/walkby/club/Life()
. = ..()
Expand Down
2 changes: 2 additions & 0 deletions modular_darkpack/modules/npc/code/human/npc_types/hobo.dm
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/mob/living/carbon/human/npc/hobo
bloodquality = BLOOD_QUALITY_LOW
old_movement = TRUE
drug_price = 0.5
drug_purchase_limit = 1

/mob/living/carbon/human/npc/hobo/Initialize(mapload)
. = ..()
Expand Down
1 change: 1 addition & 0 deletions modular_darkpack/modules/npc/code/human/npc_types/incel.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/mob/living/carbon/human/npc/incel
staying = TRUE
drug_price = 0.75

/mob/living/carbon/human/npc/incel/Initialize(mapload)
. = ..()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/mob/living/carbon/human/npc/stripper
staying = TRUE
drug_price = 1

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be increased


/mob/living/carbon/human/npc/stripper/Initialize(mapload)
. = ..()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/mob/living/carbon/human/npc/walkby
drug_price = 0.75

/mob/living/carbon/human/npc/walkby/Initialize(mapload)
. = ..()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,19 @@
"You almost ran me over!",
"What the fuck!?",
)
var/list/drug_purchase_phrases = list(
"Here you go.",
)
var/list/drug_refusal_phrases = list(
"That looks like crap.",
"Get lost."
)
var/list/drug_witness_phrases = list(
"I'm calling the cops!"
)
var/list/drug_turf_phrases = list(
"You're selling on the wrong turf."
Comment thread
sylvia-from-fulp-station marked this conversation as resolved.
Outdated
)

var/is_criminal = FALSE

Expand Down
12 changes: 12 additions & 0 deletions modular_darkpack/modules/npc/code/human/socialroles/bandit.dm
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,13 @@
"Uhmm... Cool I guess",
"Had some good food over at gummaguts, stomach hurts though..."
)
drug_turf_phrases = list(
"I'll beat your ass punk!",
"Scram you fuckin' rat!",
"Find your own corner bitch!",
"You're pushin' weight on my block?",
"Someone's about to learn some respect!",
)
help_phrases = list(
"God, not again!",
"Fucking FREAK!",
Expand All @@ -143,3 +150,8 @@
"Check yo' self, fool!",
"We got shit, shit that'll shut you up for good!"
)
drug_purchase_phrases = list(
"You know what kid? I'm feeling generous.",
"Yeah, that's about as much as that junk is worth.",
"Take that and take a hike if you know what's good for ya."

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sounds like the tunnel snakes

)
5 changes: 5 additions & 0 deletions modular_darkpack/modules/npc/code/human/socialroles/police.dm
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,11 @@
answer_phrases = list(
"I'm here to protect you."
)
drug_witness_phrases = list(
"Get on the ground!",
"SFPD! Freeze!",
"Drop the drugs!",
)
help_phrases = list(
"Lay down!",
"Stop right there!!",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,3 +122,8 @@
"Ass!",
"Dick!"
)
drug_refusal_phrases = list(
"I'll get you the money tommorow i promise..",
"Can't you go cheaper?",
"Too expensive.."
)
Loading
Loading