Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
070f7d7
adds the mercenary statue and rings
Monkeke2 Aug 6, 2026
e1b5364
Merge branch 'main' into MercStatue
Monkeke2 Aug 6, 2026
951b509
Adds statues to maps and changes statue description
Monkeke2 Aug 6, 2026
c96fa8c
accidental deletion
Monkeke2 Aug 6, 2026
8d07989
Empty commit to restart checks
Monkeke2 Aug 6, 2026
4019795
fixes href
Monkeke2 Aug 6, 2026
341c2cb
space indentations
Monkeke2 Aug 6, 2026
2b8f5d2
hopefully fixed item_detail_sanity
Monkeke2 Aug 6, 2026
e23f022
attempt number two
Monkeke2 Aug 6, 2026
7b85bf8
Empty commit because checks decided to cancel
Monkeke2 Aug 6, 2026
e046afc
Update servant_bell.dm
Monkeke2 Aug 8, 2026
2491c50
Update mercstatue.dm
Monkeke2 Aug 8, 2026
1544039
Changes statue description
Monkeke2 Aug 8, 2026
069aae3
Removes "sign up" pop-up on voyage
Monkeke2 Aug 8, 2026
ec093c4
Makes the ring a separate thing from the servant bell.
Monkeke2 Aug 11, 2026
1249403
Requested changes + proper status effect for the ring instead of the …
Monkeke2 Aug 17, 2026
a4067bc
Requested changes + proper status effect for the ring instead of the …
Monkeke2 Aug 17, 2026
e604de2
Merge branch 'MercStatue' of https://github.com/Monkeke2/monkelin int…
Monkeke2 Aug 17, 2026
617f539
Merge branch 'main' into MercStatue
Monkeke2 Aug 17, 2026
a98d98e
Merge conflicts
Monkeke2 Aug 20, 2026
572f153
placing the statues again because maps broke
Monkeke2 Aug 20, 2026
da8db1b
Merge branch 'main' into MercStatue
Monkeke2 Aug 21, 2026
8559125
Accidentally removed the campfire icon, somehow.
Monkeke2 Aug 21, 2026
59dc78d
Merge branch 'main' into MercStatue
Monkeke2 Aug 27, 2026
ee4dd70
Merge branch 'main' into MercStatue
Monkeke2 Aug 28, 2026
7811048
The diffbots have been stuck for 40 minutes
Monkeke2 Aug 28, 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
15 changes: 13 additions & 2 deletions _maps/map_files/daftmarsh/daftmarsh.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -3169,6 +3169,13 @@
},
/turf/open/floor/ruinedwood/spiral,
/area/outdoors/town)
"crT" = (
/obj/structure/fluff/railing/wood{
dir = 4
},
/obj/structure/mercstatue,
/turf/open/floor/twig,
/area/outdoors/town)
"cso" = (
/turf/open/floor/grass/yel,
/area/outdoors/exposed/church)
Expand Down Expand Up @@ -9512,6 +9519,10 @@
},
/turf/closed/wall/mineral/stone/moss,
/area/under/town/basement)
"hCH" = (
/obj/structure/mercstatue,
/turf/open/floor/grass,
/area/outdoors/town/keep)
"hCR" = (
/obj/structure/fluff/walldeco/church/line{
dir = 8
Expand Down Expand Up @@ -127081,7 +127092,7 @@ xuJ
oQv
iHi
dcH
bYV
crT
ffK
lfe
owc
Expand Down Expand Up @@ -130676,7 +130687,7 @@ eUn
ttL
ttL
iiV
vVc
hCH
tea
tea
tea
Expand Down
36 changes: 32 additions & 4 deletions _maps/map_files/vanderlin/vanderlin.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
/obj/structure/fluff/walldeco/customflag{
pixel_x = -32
},
/obj/structure/mercstatue,
/turf/open/floor/grass/red,
/area/outdoors/woods_safe)
"aaX" = (
Expand Down Expand Up @@ -2597,6 +2598,16 @@
"bfG" = (
/turf/closed/wall/mineral/decowood,
/area/under/town/basement)
"bfN" = (
/obj/structure/fluff/railing/wood{
dir = 1;
layer = 2.7;
pixel_x = 2;
pixel_y = 7
},
/obj/structure/mercstatue,
/turf/open/floor/cobble,
/area/outdoors/town)
"bfO" = (
/obj/machinery/light/fueled/torchholder/l{
dir = 1
Expand Down Expand Up @@ -25427,6 +25438,13 @@
/obj/structure/bed/shit,
/turf/open/floor/greenstone,
/area/under/town/sewer)
"kCm" = (
/obj/machinery/light/fueled/torchholder{
dir = 4
},
/obj/structure/mercstatue,
/turf/open/floor/dirt/road,
/area/outdoors/town)
"kCM" = (
/obj/effect/landmark/start/vagrant,
/turf/open/floor/dirt,
Expand Down Expand Up @@ -26906,6 +26924,10 @@
},
/turf/open/floor/ruinedwood/spiral,
/area/indoors/town/keep/library)
"lht" = (
/obj/structure/mercstatue,
/turf/open/floor/dirt/road,
/area/outdoors/beach)
"lhy" = (
/obj/structure/fluff/railing/border{
dir = 8
Expand Down Expand Up @@ -33767,6 +33789,10 @@
/obj/item/clothing/face/shepherd/clothmask,
/turf/open/floor/tile,
/area/indoors/town/keep/courtagent)
"oaS" = (
/obj/structure/mercstatue,
/turf/open/floor/dirt/road,
/area/outdoors/town/keep)
"oba" = (
/turf/open/floor/cobble,
/area/indoors/dungeon)
Expand Down Expand Up @@ -45714,6 +45740,7 @@
/obj/effect/decal/borderfall{
dir = 1
},
/obj/structure/mercstatue,
/turf/open/floor/blocks,
/area/outdoors/town)
"sKG" = (
Expand Down Expand Up @@ -51780,6 +51807,7 @@
/area/indoors/town/shop)
"vjZ" = (
/obj/structure/fake_machine/hailerboard/r,
/obj/structure/mercstatue,
/turf/open/floor/tile/brownbrick,
/area/indoors/town/merc_guild)
"vkc" = (
Expand Down Expand Up @@ -67718,7 +67746,7 @@ pao
uvp
mIW
nTH
qAA
lht
npN
npN
qAA
Expand Down Expand Up @@ -113820,7 +113848,7 @@ oWd
mFi
kwJ
mFi
cJK
kCm
kwJ
eYe
xRO
Expand Down Expand Up @@ -118829,7 +118857,7 @@ qFx
qVe
weQ
oho
xTl
oaS
xTl
vqf
viN
Expand Down Expand Up @@ -124992,7 +125020,7 @@ wmF
wrm
wrm
wrm
vbp
bfN
mFi
hZn
hZn
Expand Down
12 changes: 10 additions & 2 deletions _maps/map_files/whitepalacepass/WhitePalacePass.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -14563,6 +14563,10 @@
/obj/machinery/light/fueled/wallfire/candle/skull/l,
/turf/open/floor/dirt,
/area/under/cavewet)
"iNM" = (
/obj/structure/mercstatue,
/turf/open/floor/cobble,
/area/indoors/town/merc_guild)
"iNV" = (
/obj/structure/soil/mushmound,
/obj/machinery/light/fueled/wallfire/candle/lamp,
Expand Down Expand Up @@ -38430,6 +38434,10 @@
/obj/item/natural/melded/t5,
/turf/open/floor/tile/masonic/spiral,
/area/under/town/basement)
"ybs" = (
/obj/structure/mercstatue,
/turf/open/floor/grass/cold,
/area/outdoors/town/keep)
"ybJ" = (
/obj/structure/bars,
/turf/open/floor/cobblerock,
Expand Down Expand Up @@ -59990,7 +59998,7 @@ qPf
jxh
vhP
vhP
vhP
iNM
gBj
tnl
dIH
Expand Down Expand Up @@ -180521,7 +180529,7 @@ aYU
ewa
aYU
ewa
tck
ybs
tck
gLm
rZA
Expand Down
3 changes: 3 additions & 0 deletions code/_globalvars/lists/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs
GLOBAL_LIST_EMPTY(bots_list)
GLOBAL_LIST_EMPTY(aiEyes)

GLOBAL_LIST_EMPTY(available_mercenaries)
GLOBAL_LIST_EMPTY(contracted_mercenaries)

GLOBAL_LIST_EMPTY(language_datum_instances)
GLOBAL_LIST_EMPTY(all_languages)

Expand Down
140 changes: 140 additions & 0 deletions code/game/objects/items/mercenary_ring.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
/obj/item/mercenary_ring
name = "mercenary ring"
desc = "A beautiful golden ring, which resonates in a mercenary's mind when twisted. Usually given to their employers as a way of communication. Only a mercenary may bind themselves to such ring."
icon = 'icons/roguetown/clothing/rings.dmi'
icon_state = "g_newring_topaz"
slot_flags = ITEM_SLOT_RING
sellprice = 1
dyeable = FALSE
detail_tag = null
detail_color = null
dropshrink = 0.7
grid_height = 32
grid_width = 32
item_weight = 60 GRAMS

var/datum/weakref/mob_ref

COOLDOWN_DECLARE(ring_bell)
var/cooldown = 3 MINUTES
var/hear_distance = 100

/obj/item/mercenary_ring/Initialize(mapload)
. = ..()
RegisterSignal(SSdcs, COMSIG_GLOB_HUMAN_ENTER_CRYO, PROC_REF(remove_mercenary))

/obj/item/mercenary_ring/Destroy()
mob_ref = null
. = ..()

/obj/item/mercenary_ring/examine(mob/user)
. = ..()
if(!mob_ref)
to_chat(user, span_warning("There is no mercenary bound to the ring."))
return

var/mob/living/carbon/human/bound_merc = mob_ref.resolve()
. += span_notice("The ring is bound to [bound_merc.real_name].")

/obj/item/mercenary_ring/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)

if(!ishuman(interacting_with))
return NONE

var/mob/living/carbon/human/H = interacting_with

if(!H.mind)
return ITEM_INTERACT_BLOCKING

if(mob_ref)
to_chat(user, span_warning("It can hold no more minds."))
return ITEM_INTERACT_BLOCKING

if(!(user == H))
to_chat(user, span_warning("I can only bind myself to the ring."))
return
if(!is_mercenary_job(user.mind.assigned_role))
to_chat(user, span_warning("I am not a mercenary, the ring does not answer to me."))
return

if(IS_DEADITE(H))
to_chat(user, span_warning("The deadite curse resists the bell's charm."))
else
add_mercenary(H)
to_chat(user, span_smallnotice("I bind myself to the ring."))

playsound(src, 'sound/items/servant_bell.ogg', 80, TRUE)
return ITEM_INTERACT_SUCCESS

/obj/item/mercenary_ring/attack_self(mob/living/user, list/modifiers)
. = ..()
if(COOLDOWN_FINISHED(src, ring_bell))
ring_bell(user)
COOLDOWN_START(src, ring_bell, cooldown)
else
playsound(src, 'sound/items/servant_bell.ogg', 80, TRUE)

/obj/item/mercenary_ring/proc/ring_bell(mob/living/user)
if(!mob_ref)
return
var/mob/living/carbon/human/player = mob_ref.resolve()
if(!player)
return
if(!player.client)
return
if(player.stat >= DEAD)
return
if(HAS_TRAIT(player, TRAIT_DEAF))
return
if(player.can_block_magic(MAGIC_RESISTANCE_MIND, 0))
return
var/turf/origin_turf = get_turf(src)
if(!is_in_zweb(player.z, origin_turf.z))
return
var/distance = get_dist(player, origin_turf)
if(distance > hear_distance)
return

user.visible_message("[user] twists the mercenary ring.")
playsound(src, 'sound/items/servant_bell.ogg', 100, TRUE)

player.apply_status_effect(/datum/status_effect/signal_horn/mercenary_ring, null, origin_turf)
var/dirText = ""
var/z_dist = origin_turf.z - player.z
if(z_dist != 0)
var/abs_z = abs(z_dist)
switch(abs_z)
if(1)
dirText += " one story"
if(2)
dirText += " two stories"
else
dirText += " far"
dirText += z_dist > 0 ? " above me" : " below me"
to_chat(player, span_warning("The mercenary ring resonates[dirText]."))
if(distance <= 7)
return
//sound played for other players, by fem_tanyl !!!1!!
player.playsound_local(get_turf(player), 'sound/items/servant_bell.ogg', 35, FALSE, pressure_affected = FALSE)

/obj/item/mercenary_ring/proc/add_mercenary(mob/living/carbon/human/H)
if(mob_ref)
return
mob_ref = WEAKREF(H)

/obj/item/mercenary_ring/proc/remove_mercenary(datum/source, mob/living/carbon/human/H)
if(!mob_ref || !ishuman(H))
return
var/mob/living/carbon/human/bound_mob = mob_ref.resolve()
if(!bound_mob || bound_mob == H)
mob_ref = null

/datum/status_effect/signal_horn/mercenary_ring
id = "mercenary ring indicator"
duration = 25 SECONDS
alert_type = /atom/movable/screen/alert/status_effect/mercenary_ring

/atom/movable/screen/alert/status_effect/mercenary_ring
name = "Mercenary Ring"
desc = "I've been summoned by the ring."
icon_state = "mercenary_ring"
2 changes: 2 additions & 0 deletions code/game/objects/items/servant_bell.dm
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
return ITEM_INTERACT_BLOCKING

var/mob/living/carbon/human/H = interacting_with

if(!H.mind)
return ITEM_INTERACT_BLOCKING

Expand Down Expand Up @@ -243,3 +244,4 @@
name = "Servant Bell"
desc = "I've been summoned by the bell."
icon_state = "servant_bell"

Loading
Loading