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
Show all changes
68 commits
Select commit Hold shift + click to select a range
20e88df
Infiltrators!
Absolucy Sep 8, 2021
4332960
Fix the cigarette vending machine in the infiltrator base
Absolucy Sep 9, 2021
11ac8c6
Uncomment role preference
Absolucy Sep 9, 2021
88bf04e
Fix a bunch of bugs.
Absolucy Sep 9, 2021
0e22144
Changes to AI hijack
Absolucy Sep 9, 2021
84377ed
GODDAMIT I FORGOT TO SAVE IN STRONGDMM
Absolucy Sep 9, 2021
264590f
Fix the dumb gravgen runtime.
Absolucy Sep 9, 2021
aa2620d
Just throw the infiltrator base on centcom directly
Absolucy Sep 9, 2021
e73183f
Add infiltrators to one-click antag (and fix vampires not being in it)
Absolucy Sep 10, 2021
549e119
Merge branch 'master' into mission-shitpossible
JamieD1 Sep 11, 2021
5cc76a5
blame jamie
Absolucy Sep 12, 2021
fc69a58
add infiltrators event
Absolucy Sep 12, 2021
e8f38bd
Merge branch 'mission-shitpossible' of github.com:Absolucy/Yogstation…
Absolucy Sep 12, 2021
e9356ef
Admin only for now.
JamieD1 Sep 12, 2021
e8578d0
Maybe fix the round ending a BIT too early?
Absolucy Sep 12, 2021
5ed0a7b
Merge branch 'mission-shitpossible' of github.com:Absolucy/Yogstation…
Absolucy Sep 12, 2021
268e61d
Fix uplink not appearing properly in the roundend report
Absolucy Sep 12, 2021
00b7971
Improve examine text for infiltrator power sink
Absolucy Sep 12, 2021
2c57c2e
Whoops, remove the J
Absolucy Sep 12, 2021
f9843f8
More stuff.
Absolucy Sep 12, 2021
ef81ad7
Jamie's map changes
Absolucy Sep 12, 2021
d0eca82
Make the AI hijacker more idiot-proof.
Absolucy Sep 13, 2021
9e87ebc
Update map again.
Absolucy Sep 13, 2021
3409abe
fix infiltrators not being able to use edaggers
Absolucy Sep 13, 2021
85d81a9
Update centcomm map again
Absolucy Sep 13, 2021
f5aefe5
aaaaa
Absolucy Sep 13, 2021
4bb4fb4
fix powersink examine
Absolucy Sep 13, 2021
2cc11c5
e
Absolucy Sep 13, 2021
93ff20c
wait nvm that's right
Absolucy Sep 13, 2021
cac70b5
big typo whoopsie
Absolucy Sep 13, 2021
fc2a7df
Some big ol' improvements!
Absolucy Sep 16, 2021
13c8af8
some tweaks to infiltrator uplink items
Absolucy Sep 18, 2021
f5dc388
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Sep 19, 2021
a8b281f
Use span defines, some hijacked AI stuff...
Absolucy Sep 19, 2021
f70ef7d
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Oct 17, 2021
30fc348
infiltration implants! woohoo!
Absolucy Oct 17, 2021
9b05590
fix pinpointer to objectives not working
Absolucy Oct 17, 2021
ee5e92c
dammit actually fix the pinpointer
Absolucy Oct 26, 2021
d58da62
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Nov 12, 2021
b789d26
New pinpointer sprite!
Absolucy Nov 12, 2021
40d121b
new sprites!
Absolucy Nov 13, 2021
9c10ecc
Finishing all objectives no longer finishes the round.
Absolucy Nov 14, 2021
d6d155f
Fix sprite
Absolucy Nov 14, 2021
a105f1c
fixy fixy
Absolucy Nov 14, 2021
4fc04e6
you can now put TC into your uplink
Absolucy Nov 14, 2021
0c0ff7f
restrict holoparas for infiltrators
Absolucy Nov 14, 2021
9b786b8
Fix infiltration implant creating a bugged implant case
Absolucy Nov 14, 2021
be851a1
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Nov 14, 2021
2c2b88c
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Nov 16, 2021
426411f
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Nov 16, 2021
8b16727
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Nov 17, 2021
721a30c
Fix CTF; add another infiltrator item spawnpoint
Absolucy Nov 17, 2021
ac6825d
tweak shuttle a bit
Absolucy Nov 17, 2021
6c78d89
you can no longer hijack dead AIs; 3rd item spawnpoint is now on the …
Absolucy Nov 17, 2021
77eed33
prevent using PDAs to metagame
Absolucy Nov 18, 2021
c700f47
no removing purrbation
Absolucy Nov 18, 2021
005f608
hijacked ais can no longer doomsday; infiltrator objectives now prope…
Absolucy Nov 20, 2021
8cb4987
make kidnap code slightly better
Absolucy Nov 20, 2021
b2b22e2
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Nov 23, 2021
056c649
show to ghosts
Absolucy Nov 23, 2021
3613ede
remove cornered donuts in infiltrator ship
Absolucy Nov 23, 2021
744d2c5
fix up objective code stuff
Absolucy Nov 25, 2021
5ab2daf
fix telecrystal thing still not working
Absolucy Nov 25, 2021
c3517c8
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Nov 29, 2021
9f17f2f
Add to config
Absolucy Dec 3, 2021
ad25bf5
Merge branch 'master' of https://github.com/yogstation13/Yogstation i…
Absolucy Dec 3, 2021
35f6d94
add minimum age of 3 weeks; add dynamic ruleset copy-pasted from nukies
Absolucy Dec 3, 2021
45d8efd
nvm i'm too lazy to figure out how this works
Absolucy Dec 3, 2021
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
6,987 changes: 4,346 additions & 2,641 deletions _maps/map_files/generic/CentCom.dmm

Large diffs are not rendered by default.

1,415 changes: 1,415 additions & 0 deletions _maps/shuttles/infiltrator_cutter.dmm

Large diffs are not rendered by default.

3,106 changes: 3,106 additions & 0 deletions _maps/templates/infiltrator_base.dmm

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion code/__DEFINES/role_preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@
#define ROLE_SHADOWLING "Shadowling" // Yogs
#define ROLE_VAMPIRE "Vampire" // Yogs
#define ROLE_GANG "gangster" // Yogs
#define ROLE_DARKSPAWN "darkspawn" //Yogs
#define ROLE_DARKSPAWN "darkspawn" // Yogs
#define ROLE_HOLOPARASITE "Holoparasite" // Yogs
#define ROLE_INFILTRATOR "Infiltrator" // Yogs
#define ROLE_ZOMBIE "Zombie"


Expand Down Expand Up @@ -77,6 +78,7 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_GANG = /datum/game_mode/gang, // yogs
ROLE_HERETIC = /datum/game_mode/heretics,
ROLE_HIVE = /datum/game_mode/hivemind,
ROLE_INFILTRATOR = /datum/game_mode/infiltration, // Yogs
ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs,
ROLE_DARKSPAWN = /datum/game_mode/darkspawn,
ROLE_SENTIENCE,
Expand Down
12 changes: 7 additions & 5 deletions code/__DEFINES/{yogs_defines}/antagonists.dm
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#define ANTAG_DATUM_VAMPIRE /datum/antagonist/vampire
#define ANTAG_DATUM_THRALL /datum/antagonist/thrall
#define ANTAG_DATUM_SLING /datum/antagonist/shadowling
#define ANTAG_DATUM_DARKSPAWN /datum/antagonist/darkspawn
#define ANTAG_DATUM_VEIL /datum/antagonist/veil
#define ANTAG_DATUM_VAMPIRE /datum/antagonist/vampire
#define ANTAG_DATUM_THRALL /datum/antagonist/thrall
#define ANTAG_DATUM_SLING /datum/antagonist/shadowling
#define ANTAG_DATUM_DARKSPAWN /datum/antagonist/darkspawn
#define ANTAG_DATUM_VEIL /datum/antagonist/veil
#define ANTAG_DATUM_INFILTRATOR /datum/antagonist/infiltrator
#define ANTAG_DATUM_HIJACKEDAI /datum/antagonist/hijacked_ai

#define NOT_DOMINATING -1
#define MAX_LEADERS_GANG 3
Expand Down
3 changes: 2 additions & 1 deletion code/__DEFINES/{yogs_defines}/atom_hud.dm
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
#define ANTAG_HUD_VAMPIRE 23
#define ANTAG_HUD_DARKSPAWN 24
#define ANTAG_HUD_DARKSPAWN 24
#define ANTAG_HUD_INFILTRATOR 32
5 changes: 3 additions & 2 deletions code/__DEFINES/{yogs_defines}/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#define is_traitor(M) (istype(M, /mob/living) && M.mind && M.mind.has_antag_datum(/datum/antagonist/traitor) || is_mindslaved(M))
#define is_blood_brother(M) (istype(M, /mob/living) && M.mind && M.mind.has_antag_datum(/datum/antagonist/brother))
#define is_nukeop(M) (M.mind && M.mind.has_antag_datum(/datum/antagonist/nukeop)) // also detects clownOP
#define is_syndicate(M) (istype(M, /mob/living) && is_traitor(M) || is_blood_brother(M) || is_nukeop(M))
#define is_infiltrator(M) (M.mind && M.mind.has_antag_datum(/datum/antagonist/infiltrator))
#define is_syndicate(M) (istype(M, /mob/living) && is_traitor(M) || is_blood_brother(M) || is_nukeop(M) || is_infiltrator(M))

#define isspacepod(A) (istype(A, /obj/spacepod))
#define isspacepod(A) (istype(A, /obj/spacepod))
6 changes: 5 additions & 1 deletion code/__DEFINES/{yogs_defines}/misc.dm
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
//Endgame Results
#define GANG_LOSS 6
#define GANG_TAKEOVER 7
#define GANG_TAKEOVER 7
#define INFILTRATION_ALLCOMPLETE 25
#define INFILTRATION_MOSTCOMPLETE 26
#define INFILTRATION_SOMECOMPLETE 27
#define INFILTRATION_NONECOMPLETE 28
5 changes: 3 additions & 2 deletions code/datums/components/uplink.dm
Original file line number Diff line number Diff line change
Expand Up @@ -245,8 +245,9 @@ GLOBAL_LIST_EMPTY(uplinks)
interact(null, implant.imp_in)

/datum/component/uplink/proc/implanting(datum/source, list/arguments)
var/mob/user = arguments[2]
owner = "[user.key]"
var/mob/target = arguments[1]
var/mob/user = arguments[2] // YOGS START -- Fix runtime when implanting infiltrators
owner = "[user ? user.key : target.key]" // YOGS END

/datum/component/uplink/proc/old_implant(datum/source, list/arguments, obj/item/implant/new_implant)
// It kinda has to be weird like this until implants are components
Expand Down
1 change: 1 addition & 0 deletions code/datums/hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ GLOBAL_LIST_INIT(huds, list(
ANTAG_HUD_HERETIC = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_MINDSLAVE = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_ZOMBIE = new/datum/atom_hud/antag(),
ANTAG_HUD_INFILTRATOR = new/datum/atom_hud/antag() // Yogs
))

/datum/atom_hud
Expand Down
30 changes: 30 additions & 0 deletions code/game/gamemodes/objective.dm
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,13 @@ GLOBAL_LIST_EMPTY(objectives)
explanation_text = team_explanation_text

/datum/objective/proc/give_special_equipment(special_equipment)
if(istype(team, /datum/team/infiltrator))
for(var/eq_path in special_equipment)
if(eq_path)
for(var/turf/T in GLOB.infiltrator_objective_items)
if(!(eq_path in T.contents))
new eq_path(T)
return
var/datum/mind/receiver = pick(get_owners())
if(receiver && receiver.current)
if(ishuman(receiver.current))
Expand Down Expand Up @@ -661,6 +668,21 @@ GLOBAL_LIST_EMPTY(possible_items)
if(targetinfo && (I.type in targetinfo.altitems)) //Ok, so you don't have the item. Do you have an alternative, at least?
if(targetinfo.check_special_completion(I))//Yeah, we do! Don't return 0 if we don't though - then you could fail if you had 1 item that didn't pass and got checked first!
return TRUE
if (istype(team, /datum/team/infiltrator))
for (var/area/A in world)
if (is_type_in_typecache(A, GLOB.infiltrator_objective_areas))
for (var/obj/item/I in A.GetAllContents()) //Check for items
if (istype(I, steal_target))
if (!targetinfo)
return TRUE
else if (targetinfo.check_special_completion(I))
return TRUE
if (targetinfo && (I.type in targetinfo.altitems))
if (targetinfo.check_special_completion(I))
return TRUE
CHECK_TICK
CHECK_TICK
CHECK_TICK
return FALSE

GLOBAL_LIST_EMPTY(possible_items_special)
Expand Down Expand Up @@ -741,6 +763,14 @@ GLOBAL_LIST_EMPTY(possible_items_special)
var/list/otherwise = M.GetAllContents()
for(var/obj/item/disk/tech_disk/TD in otherwise)
TD.stored_research.copy_research_to(checking)
if (istype(team, /datum/team/infiltrator))
for (var/area/A in world)
if (is_type_in_typecache(A, GLOB.infiltrator_objective_areas))
for (var/obj/item/disk/tech_disk/TD in A.GetAllContents()) //Check for items
TD.stored_research.copy_research_to(checking)
CHECK_TICK
CHECK_TICK
CHECK_TICK
return checking.researched_nodes.len >= target_amount

/datum/objective/download/admin_edit(mob/admin)
Expand Down
15 changes: 15 additions & 0 deletions code/modules/admin/topic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,21 @@
else
message_admins("[key_name_admin(usr)] tried to create a shadowling. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to create a shadowling.")
if("vampire")
if(makeVampire())
message_admins("[key_name(usr)] created a vampire.")
log_admin("[key_name(usr)] created a vampire.")
else
message_admins("[key_name_admin(usr)] tried to create a vampire. Unfortunately, there were no candidates available.")
log_admin("[key_name(usr)] failed to create a vampire.")
if("infiltrator")
message_admins("[key_name(usr)] is creating an infiltration team...")
if(makeInfiltratorTeam())
message_admins("[key_name(usr)] created an infiltration team.")
log_admin("[key_name(usr)] created an infiltration team.")
else
message_admins("[key_name_admin(usr)] tried to create an infiltration team. Unfortunately, there were not enough candidates available.")
log_admin("[key_name(usr)] failed to create an infiltration team.")
else if(href_list["forceevent"])
if(!check_rights(R_FUN))
return
Expand Down
2 changes: 2 additions & 0 deletions code/modules/admin/verbs/one_click_antag.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
<a href='?src=[REF(src)];[HrefToken()];makeAntag=abductors'>Make Abductor Team (Requires Ghosts)</a><br>
<a href='?src=[REF(src)];[HrefToken()];makeAntag=revenant'>Make Revenant (Requires Ghost)</a><br>
<a href='?src=[REF(src)];[HrefToken()];makeAntag=shadowling'>Make Shadowling</a><br>
<a href='?src=[REF(src)];[HrefToken()];makeAntag=vampire'>Make Vampire</a><br>
<a href='?src=[REF(src)];[HrefToken()];makeAntag=infiltrator'>Make Infiltration Team (Requires Ghosts)</a>
"}

var/datum/browser/popup = new(usr, "oneclickantag", "Quick-Create Antagonist", 400, 400)
Expand Down
9 changes: 9 additions & 0 deletions code/modules/antagonists/traitor/equipment/Malf_Modules.dm
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/AI_Module))
/// Sound played when an ability is unlocked
var/unlock_sound

/datum/AI_Module/proc/can_use(mob/living/silicon/ai/AI)
return TRUE

/// Applies upgrades
/datum/AI_Module/proc/upgrade(mob/living/silicon/ai/AI)
return
Expand All @@ -159,6 +162,9 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/AI_Module))
power_type = /datum/action/innate/ai/nuke_station
unlock_text = span_notice("You slowly, carefully, establish a connection with the on-station self-destruct. You can now activate it at any time.")

/datum/AI_Module/destructive/nuke_station/can_use(mob/living/silicon/ai/AI)
return !AI.mind.has_antag_datum(/datum/antagonist/hijacked_ai)

/datum/action/innate/ai/nuke_station
name = "Doomsday Device"
desc = "Activates the doomsday device. This is not reversible."
Expand Down Expand Up @@ -545,6 +551,9 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/AI_Module))
unlock_text = span_notice("You make contact with Space Amazon and request a robotics factory for delivery.")
unlock_sound = 'sound/machines/ping.ogg'

/datum/AI_Module/utility/place_cyborg_transformer/can_use(mob/living/silicon/ai/AI)
return !AI.mind.has_antag_datum(/datum/antagonist/hijacked_ai)

/datum/action/innate/ai/place_transformer
name = "Place Robotics Factory"
desc = "Places a machine that converts humans into cyborgs. Conveyor belts included!"
Expand Down
11 changes: 10 additions & 1 deletion code/modules/clothing/chameleon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@
thing.update_slot_icon()
UpdateButtonIcon()

/datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item)
/datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item, obj/item/target = src.target) //yogs -- add support for cham hardsuits
target.name = initial(picked_item.name)
target.desc = initial(picked_item.desc)
target.icon_state = initial(picked_item.icon_state)
Expand All @@ -225,6 +225,15 @@
var/obj/item/clothing/CL = I
var/obj/item/clothing/PCL = picked_item
CL.flags_cover = initial(PCL.flags_cover)
if(istype(target, /obj/item/clothing/suit/space/hardsuit/infiltration)) //YOGS START
var/obj/item/clothing/suit/space/hardsuit/infiltration/I = target
var/obj/item/clothing/suit/space/hardsuit/HS = picked_item
var/obj/item/clothing/head/helmet/helmet = initial(HS.helmettype)
I.head_piece.initial_state = initial(helmet.icon_state)
update_item(helmet, I.head_piece)
I.head_piece.update_icon()
qdel(helmet)
//YOGS END
target.icon = initial(picked_item.icon)

/datum/action/item_action/chameleon/change/Trigger()
Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/living/silicon/ai/life.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
update_gravity(mob_has_gravity())

handle_status_effects()
process_hijack() // yogs

if(malfhack && malfhack.aidisabled)
deltimer(malfhacking)
Expand Down
2 changes: 1 addition & 1 deletion code/modules/power/gravitygenerator.dm
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
return main_part.attackby(I, user)

/obj/machinery/gravity_generator/part/get_status()
return main_part.get_status()
return main_part?.get_status()

/obj/machinery/gravity_generator/part/attack_hand(mob/user)
return main_part.attack_hand(user)
Expand Down
42 changes: 23 additions & 19 deletions code/modules/surgery/implant_removal.dm
Original file line number Diff line number Diff line change
Expand Up @@ -34,26 +34,30 @@

/datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(I)
display_results(user, target, span_notice("You successfully remove [I] from [target]'s [target_zone]."),
"[user] successfully removes [I] from [target]'s [target_zone]!",
"[user] successfully removes something from [target]'s [target_zone]!")
I.removed(target)

var/obj/item/implantcase/case
for(var/obj/item/implantcase/ic in user.held_items)
case = ic
break
if(!case)
case = locate(/obj/item/implantcase) in get_turf(target)
if(case && !case.imp)
case.imp = I
I.forceMove(case)
case.update_icon()
display_results(user, target, span_notice("You place [I] into [case]."),
"[user] places [I] into [case]!",
"[user] places it into [case]!")
if (QDELETED(I)) // yogs: properly handle self-deleting implants
display_results(user, target, span_notice("You remove [I] from [target]'s [target_zone], destroying it in the process!"),
"[user] removes [I] from [target]'s [target_zone], destroying it in the process!",
"[user] removes something from [target]'s [target_zone], destroying it in the process!")
else
qdel(I)
display_results(user, target, span_notice("You successfully remove [I] from [target]'s [target_zone]."),
"[user] successfully removes [I] from [target]'s [target_zone]!",
"[user] successfully removes something from [target]'s [target_zone]!")
var/obj/item/implantcase/case
for(var/obj/item/implantcase/ic in user.held_items)
case = ic
break
if(!case)
case = locate(/obj/item/implantcase) in get_turf(target)
if(case && !case.imp)
case.imp = I
I.forceMove(case)
case.update_icon()
display_results(user, target, span_notice("You place [I] into [case]."),
"[user] places [I] into [case]!",
"[user] places it into [case]!")
else
qdel(I)

else
to_chat(user, span_warning("You can't find anything in [target]'s [target_zone]!"))
Expand All @@ -68,4 +72,4 @@
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/extract_implant,
/datum/surgery_step/mechanic_wrench,
/datum/surgery_step/mechanic_close)
/datum/surgery_step/mechanic_close)
Loading