Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
e8565e3
Porting
AltHit Apr 7, 2026
a038e1a
Missed one line from original
AltHit Apr 7, 2026
7cbe4d5
finally SOME death sound
Deal6 Apr 7, 2026
a651737
test
Deal6 Apr 7, 2026
97a99e5
Fix empty objectives text and duplicate show_objectives
AltHit Apr 7, 2026
497fc2e
test2
Deal6 Apr 7, 2026
cf72938
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
Deal6 Apr 7, 2026
17248f2
test3
Deal6 Apr 7, 2026
09889e7
Rename build_path to find_path
AltHit Apr 8, 2026
00ceaaa
Fixed nodeless pathbuild
AltHit Apr 8, 2026
9e38b71
test999
Deal6 Apr 8, 2026
6e2307c
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
Deal6 Apr 8, 2026
8c82e98
Fixed finishing path without a node
AltHit Apr 8, 2026
40d6425
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
AltHit Apr 8, 2026
2da9ffc
Fixed building path from node to itself
AltHit Apr 8, 2026
2c5310c
Fixed erased switch from switch-case
AltHit Apr 8, 2026
ca7f332
th
Deal6 Apr 12, 2026
c82b308
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
Deal6 Apr 12, 2026
3c61bf4
update overlay regardless if we found path or not
AltHit Apr 12, 2026
bc34765
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
AltHit Apr 12, 2026
9bd3e43
polishing da boots
Deal6 Apr 12, 2026
d3b2393
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
Deal6 Apr 12, 2026
d12b92d
Finally fixed sendPath
AltHit Apr 12, 2026
f4631b6
sound + talk
Deal6 Apr 12, 2026
aed4f88
Now fixing overlays
AltHit Apr 12, 2026
fb2c73a
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
AltHit Apr 12, 2026
d337788
g
Deal6 Apr 12, 2026
432a9d9
Hotfix to overlays
AltHit Apr 12, 2026
c045af0
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
AltHit Apr 12, 2026
abd0d77
Node-Centor destruction
AltHit Apr 12, 2026
9304447
Thing...
Deal6 Apr 12, 2026
2740c0e
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
Deal6 Apr 12, 2026
d9c55d2
"Fix" cable coil from teleporter
AltHit Apr 12, 2026
dfd63f5
I hope my comments are not bloaty
Deal6 Apr 12, 2026
97d0e6f
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
Deal6 Apr 12, 2026
c85ec3f
auuugghh
Deal6 Apr 12, 2026
84cd7a6
1
Deal6 Apr 12, 2026
1ea65cd
excelhud replace :)
Deal6 Apr 12, 2026
fdd4bdf
.
Deal6 Apr 13, 2026
7ae54ee
clearer comments me likey
Deal6 Apr 13, 2026
084128b
Typo fix :-p
AltHit Apr 30, 2026
f75e988
comment
Deal6 May 6, 2026
ccdfe5a
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
Deal6 May 6, 2026
c541981
cooldown experiment1
Deal6 May 8, 2026
9049267
No more.
AltHit May 8, 2026
4d024ce
Merge branch 'excel-ort' of https://github.com/AltHit/Junk-Monke into…
AltHit May 8, 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
7 changes: 7 additions & 0 deletions cev_eris.dme
Original file line number Diff line number Diff line change
Expand Up @@ -898,14 +898,21 @@
#include "code\game\machinery\embedded_controller\embedded_program_base.dm"
#include "code\game\machinery\embedded_controller\simple_docking_controller.dm"
#include "code\game\machinery\embedded_controller\~docking_program_undef.dm"
#include "code\game\machinery\excelsior\_excelsior_defines.dm"
#include "code\game\machinery\excelsior\autolathe.dm"
#include "code\game\machinery\excelsior\boombox.dm"
#include "code\game\machinery\excelsior\centor.dm"
#include "code\game\machinery\excelsior\diesel.dm"
#include "code\game\machinery\excelsior\emplacement.dm"
#include "code\game\machinery\excelsior\ex_teleporter.dm"
#include "code\game\machinery\excelsior\ex_turret.dm"
#include "code\game\machinery\excelsior\excelsior_debug_tools.dm"
#include "code\game\machinery\excelsior\excelsior_researches.dm"
#include "code\game\machinery\excelsior\field.dm"
#include "code\game\machinery\excelsior\implantmaker.dm"
#include "code\game\machinery\excelsior\node.dm"
#include "code\game\machinery\excelsior\redirector.dm"
#include "code\game\machinery\excelsior\excelsior_items\KPK.dm"
#include "code\game\machinery\kitchen\gibber.dm"
#include "code\game\machinery\kitchen\microwave.dm"
#include "code\game\machinery\kitchen\smartfridge.dm"
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/dcs/signals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,9 @@
#define COMSIG_DOOR_OPENED "door_opened"
#define COMSIG_DOOR_CLOSED "door_closed"

//excelsior
#define COMSIG_EX_CONNECT "excelsior_connect"

// /obj/item signals
#define COMSIG_IATTACK "item_attack" //from /mob/ClickOn(): (/atom, /src, /params) If any reply to this returns TRUE, overrides attackby and afterattack
#define COMSIG_ATTACKBY "attack_by" //from /mob/ClickOn():
Expand Down
2 changes: 1 addition & 1 deletion code/__DEFINES/turfs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,6 @@

var/vecX = A.x - B.x
var/vecY = A.y - B.y
var/vecZ = (A.y - B.y)*DECK_HEIGHT
var/vecZ = (A.z - B.z)*DECK_HEIGHT

return abs(sqrt((vecX*vecX) + (vecY*vecY) +(vecZ*vecZ)))
17 changes: 17 additions & 0 deletions code/game/antagonist/antagonist_factions.dm
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,23 @@

log_say("[user.name]/[user.key] (REV [name]) : [message]")

/datum/faction/proc/communicate_inanimate(var/obj/user, var/message)
if(!message)
return

message = capitalize(sanitize(message))
var/text = "<span class='revolution'>[message]</span>"
for(var/i in SShumans.mob_list)
if(is_excelsior(i))
to_chat(i, text)

//ghosts
for(var/mob/observer/ghost/M in GLOB.dead_mob_list) //does this include players who joined as observers as well?
if(!M.client)
continue
if((M.antagHUD && M.get_preference_value(/datum/client_preference/ghost_ears) == GLOB.PREF_ALL_SPEECH) || is_admin(M))
to_chat(M, "[text] ([ghost_follow_link(user, M)])")

/datum/faction/proc/is_member(mob/user)
for(var/datum/antagonist/A in members)
if(A.owner.current == user)
Expand Down
7 changes: 4 additions & 3 deletions code/game/antagonist/antagonist_objectives.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@
if(!owner || !owner.current)
return

if(objectives.len)
to_chat(owner.current, span_danger("<font size=3>Your objectives were updated.</font>"))
var/list/old_objectives = objectives

objectives.Cut()
objectives.Add(new_objectives)

show_objectives()
if(old_objectives.len)
to_chat(owner.current, span_danger("<font size=3>Your objectives were updated.</font>"))
show_objectives()

/datum/antagonist/proc/create_survive_objective()
if(ispath(survive_objective))
Expand Down
9 changes: 3 additions & 6 deletions code/game/antagonist/antagonist_print.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

if(length(objectives))
text = "<b>Your [role_text] current objectives:</b>"
else if(faction)
else if(faction && length(faction.objectives))
text = "<b>Your [faction.name] faction current objectives:</b>"
else
text = "<b>Your current objectives:</b>"

text += print_objectives(FALSE)

to_chat(owner.current, text)
if(text)
to_chat(owner.current, text)

/datum/antagonist/proc/greet()
if(!owner || !owner.current)
Expand Down Expand Up @@ -98,8 +97,6 @@
text += "<br><font color='red'><B>The [role_text] has failed.</B></font>"
else
text += "<br><font color='green'><B>The [role_text] was successful!</B></font>"
if(!length(text))
return "<br><b>No objectives available</b>"
return text

/datum/antagonist/proc/print_player()
Expand Down
40 changes: 31 additions & 9 deletions code/game/antagonist/station/revolutionary/excel_faction.dm
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
var/global/was_centor_spawned = FALSE

/datum/faction/excelsior
id = FACTION_EXCELSIOR
name = "Excelsior"
antag = "infiltrator"
antag_plural = "infiltrators"
welcome_text = "You are Excelsior, Ever Upward. You have infiltrated this vessel to further the Revolution.\n\
The People's strength lies in securing our position, gathering the oppressed, spreading propaganda and producing arms and armor for the final revolution. A slow and methodical approach is recommended. \n\n\
Our first phase is to retrieve the cache of manufacturing materials and circuit boards. Without a means of production our revolution is in peril.\n\n\
Our second phase is to establish a fortified position in secret. The People will send additional resources through the teleporter once it is established. This and our autolathe can be protected further with turrets and shield generators, in addition to loyal comrades. <b>To prevent technology theft, your machinery, but not handheld weapons, implanters, and armor, is designed to work only on target vessel, CEV \"Eris\".</b>\n\n\
Our third phase is expansion. Complete mandates for power. Aquire implants, prosthetics or robotic parts and convert them into new implants. These can be injected into the oppressed to formally induct them to the Revolution. Use their labor to produce the weapons of their liberation.\n\n\
When the People are ready, break the chains of the oppressor and seize control of the ship by building the redirector and installing it on the primary control bridge."
welcome_text = "\n <b>THE SHACKLES</b> of forced labor for those, who don't value you, <b>HAVE BEEN FINALLY DROPPED</b>.\n\
You no longer are required to listen to them. You don't need their money to survive. \n\n\
<b>We welcome you to our ranks, fighter.</b>\n\
You now may carve your own destiny despite the attempts of the old greedy world to drag you back in.\n\
Excelsior fights for both your and our right to live without suppression of true human virtue - to create.\n\
We invite you to do the same with us - emancipate those uncapable to resist mad people ruling this world.\n\n\
<b>OUR GOAL:</b> Seize control of the ship by building a redirector on the primary control bridge.\n\n\
<b>PREPARATION:</b> Summon Centor in a hidden location, it will give you KOMPAK and periodically manufacture nodes - all once you tap it.\n\n\
<b>BASE:</b> We'll send resources through teleporters once you build some nodes and we get a good lock-in. Use structures, and of course - loyal comrades. \n\n\
<b>EXPANSION:</b> Spread nodes and ensure their connection to Centor for teleportation power. Acquire implants, prosthetics or robotic parts and rebuild them into our own implants. These can be injected into the oppressed to introduce them into our cause.\n\n\
<b>To prevent important technology theft, your machinery is designed to work only on target vessel: CEV \"Eris\".</b>\n\n\
<h1>Our dreams shan't be ignored! Ever Upward!</h1>"

hud_indicator = "excelsior"

possible_antags = list(ROLE_EXCELSIOR_REV)
faction_datum_verbs = list(/datum/faction/excelsior/proc/communicate_verb,
/datum/faction/excelsior/proc/summon_stash)
/datum/faction/excelsior/proc/summon_centor)

var/stash_holder = null

Expand Down Expand Up @@ -43,8 +51,6 @@
return extra_text
/datum/faction/excelsior/create_objectives()
objectives.Cut()
for (var/datum/antagonist/A in members)
to_chat(A.owner.current, span_notice("You may summon your required materials using the \"summon stash\" command."))

.=..()

Expand All @@ -63,6 +69,20 @@

F.communicate(usr)


/datum/faction/excelsior/proc/summon_centor()

set name = "Summon Centor"
set category = "Cybernetics"

if(was_centor_spawned)
to_chat(usr, SPAN_EXCEL_NOTIF("You've already called the Centor assigned to your operation..."))
return
if(alert(usr, "Centor, your main weapon of revolution will be summoned at your exact position.\nIf you lose it - everything will be over.","Are you sure?","Yes, summon it here","Cancel") == "Yes, summon it here")
new /obj/machinery/centor(usr.loc)
was_centor_spawned = TRUE

/*
/datum/faction/excelsior/proc/summon_stash()

set name = "Summon stash"
Expand Down Expand Up @@ -92,3 +112,5 @@

H.put_in_hands(stash)
F.stash_holder = H.real_name
*/

1 change: 1 addition & 0 deletions code/game/antagonist/station/revolutionary/excelsior.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
/datum/antagonist/excelsior/create_antagonist(datum/mind/target, datum/faction/new_faction, doequip = TRUE, announce = TRUE, update = TRUE, check = TRUE)
. = ..()
BITSET(owner.current?.hud_updateflag, EXCELSIOR_HUD)
was_centor_spawned = FALSE //[excel_faction.dm]

/datum/antagonist/excelsior/remove_antagonist()
BITSET(owner.current?.hud_updateflag, EXCELSIOR_HUD)
Expand Down
13 changes: 10 additions & 3 deletions code/game/gamemodes/roleset/faction/excelsior.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,16 @@
//min_cost = 10
//max_cost = 20

min_quantity = 3 // Don't fire unless we have at least 3 candidates in the pool
base_quantity = 3 //They're a group antag, we want a few of em
min_quantity = 2 // Don't fire unless we have at least 2 candidates in the pool
base_quantity = 3 // try to spawn this amount, but if not it's ok we spawn [min_quantity]"
scaling_threshold = 8

req_crew = 6
leaders = -1 //Every excelsior spawned directly is a leader. Non leaders are those recruited during gameplay
leaders = -1 //Every excelsior spawned directly is a leader. Non leaders are those recruited during gameplay

/datum/storyevent/roleset/faction/excelsior/can_trigger(severity, report)
if(excelsior_centor)
return FALSE
if(!..(severity, report))
return FALSE
return TRUE
29 changes: 29 additions & 0 deletions code/game/machinery/excelsior/_excelsior_defines.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// # Node+Centor related [centor.dm]
// - Node
#define EX_NODE_DISTANCE 7

// - Centor
#define EX_NODE_SPAWN_COOLDOWN 10 MINUTES




var/global/excelsior_energy
var/list/global/excelsior_nodes = list()
var/list/global/excelsior_junctions = list()

var/list/global/excelsior_turf_whitelist = list( // <<< see more at [node.dm] (excelsior)
/turf/floor,
/turf/wall/low
)



//-------------------------------------------------------------------------

// Old, still used code
var/global/excelsior_max_energy //Maximum combined energy of all teleporters
var/global/excelsior_conscripts = 0
var/global/excelsior_last_draft = 0
var/list/global/excelsior_teleporters = list()

Loading
Loading