diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index cd1bf63cccb1..f63f03242a8e 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -75,6 +75,7 @@ #define ANTAG_HUD_ALIEN "antag_hud_alien" #define ANTAG_HUD_DEATHCOM "antag_hud_deathcom" #define ANTAG_HUD_ERT "antag_hud_ert" +#define ANTAG_HUD_LATE_PARTY "antag_hud_late_party" #define ANTAG_HUD_MALF "antag_hud_malf" #define ANTAG_HUD_ZOMB "antag_hud_zomb" #define ANTAG_HUD_GANGSTER "antag_hud_gangster" diff --git a/code/__DEFINES/gamemodes.dm b/code/__DEFINES/gamemodes.dm index 24aa2cde80a7..68a9ebb1aabb 100644 --- a/code/__DEFINES/gamemodes.dm +++ b/code/__DEFINES/gamemodes.dm @@ -14,6 +14,8 @@ #define F_FAMILIES "Families" #define F_HEIST "Vox Shoal" #define F_HIVEMIND "Changeling Hivemind" +#define F_LATE_PARTY "Late Party" +#define F_LP_COMMUNISTS "Late Party: Communists" #define F_PROPS "Props" #define F_REVOLUTION "Revolution" #define F_SYNDIOPS "Syndicate Operatives" @@ -43,6 +45,7 @@ #define GANGSTER_LEADER "Gangster Leader" #define GANGSTER_DEALER "Gangster Dealer" #define HEADREV "Head Revolutionary" +#define LATE_PARTY_MEMBER "Late Party Member" #define MALF "Malf AI" #define MALFBOT "Malf-Slaved Cyborg" #define NUKE_OP "Nuclear Operative" diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 16f115d421c2..b2e787fa10d2 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -603,6 +603,7 @@ SUBSYSTEM_DEF(ticker) create_spawner(/datum/spawner/mouse) if(config.allow_drone_spawn) create_spawner(/datum/spawner/drone) + create_spawners(/datum/spawner/late_party, 0) /datum/controller/subsystem/ticker/proc/teleport_players_to_eorg_area() if(!config.deathmatch_arena) diff --git a/code/datums/atom_huds/atom_hud.dm b/code/datums/atom_huds/atom_hud.dm index f0a9151221f8..56a7c12d5fa3 100644 --- a/code/datums/atom_huds/atom_hud.dm +++ b/code/datums/atom_huds/atom_hud.dm @@ -25,6 +25,7 @@ var/global/list/huds = list( ANTAG_HUD_ALIEN = new/datum/atom_hud/antag/hidden, ANTAG_HUD_DEATHCOM = new/datum/atom_hud/antag, ANTAG_HUD_ERT = new/datum/atom_hud/antag, + ANTAG_HUD_LATE_PARTY = new/datum/atom_hud/antag/hidden, ANTAG_HUD_MALF = new/datum/atom_hud/antag/hidden, ANTAG_HUD_ZOMB = new/datum/atom_hud/antag, ANTAG_HUD_GANGSTER = new/datum/atom_hud/antag/hidden, diff --git a/code/datums/spawners_menu/spawners_lateparty.dm b/code/datums/spawners_menu/spawners_lateparty.dm new file mode 100644 index 000000000000..c3473f633bcd --- /dev/null +++ b/code/datums/spawners_menu/spawners_lateparty.dm @@ -0,0 +1,118 @@ +var/global/datum/late_party/current_late_party + +/datum/spawner/late_party + name = "Поздняя Группа" + desc = "." + ranks = list(ROLE_GHOSTLY) + priority = 1001 + + register_only = TRUE + + var/datum/late_party/late_party_type + var/list/datum/late_party/possible_parties = list() + + +/datum/spawner/late_party/New() + for(var/party_type in subtypesof(/datum/late_party)) + var/datum/late_party/party = new party_type + if(!party.name) + qdel(party) + continue + LAZYADD(possible_parties, party) + late_party_type = pick(possible_parties) + global.current_late_party = late_party_type + //time_for_registration = rand(25 MINUTES, 45 MINUTES) + time_for_registration = rand(30 SECONDS, 45 SECONDS) + positions = late_party_type.members.len + to_chat(world, "[late_party_type.name]") + to_chat(world, "[late_party_type.members.len]") + ..() + + +/datum/spawner/late_party/roll_registrations() + if(registered_candidates.len < late_party_type.members.len) + //REROLL + for(var/party_type in subtypesof(/datum/late_party)) + var/datum/late_party/party = new party_type + if(!party.name) + qdel(party) + continue + LAZYADD(possible_parties, party) + late_party_type = pick(possible_parties) + time_for_registration = 5 MINUTES + positions = late_party_type.members.len + global.current_late_party = late_party_type + start_timers() + for(var/mob/dead/M in registered_candidates) + to_chat(M, "Недостаточно кандидатов для создания поздней группы! Следующая попытка набора через 5 минут!") + return + ..() + +/datum/spawner/late_party/spawn_body(mob/dead/spectator) + var/list/potential_roles = list() + for(var/datum/late_party_member/members_in_list in late_party_type.members) + LAZYADD(potential_roles, members_in_list) + to_chat(world, "[members_in_list.name]") + var/datum/late_party_member/member = pick(potential_roles) + //LAZYREMOVE(late_party_type.members, member) + + var/client/C = spectator.client + + var/datum/faction/F = find_faction_by_type(member.faction) + member.holder = new(null) + C.create_human_apperance(member.holder) + + var/turf/T = pick(landmarks_list[member.spawnloc]) + member.holder.loc = get_turf(T) + member.holder.key = C.key + + create_and_setup_role(member.role, member.holder) + add_faction_member(F, member.holder, FALSE, TRUE) + member.holder.equipOutfit(member.outfit) + to_chat(member.holder, "Вот ты и здесь...") + + +/datum/late_party + var/name + var/list/datum/late_party_member/members = list() //members of lateparty (/datum/late_party_member) + +/datum/late_party/proc/post_spawn() //for announcements and events after the party appears. + return + +/datum/late_party_member + var/name = "Generic Name" + var/datum/role/role //member role + var/datum/faction/faction //member faction + var/spawnloc //spawn landmark + var/mob/living/carbon/human/holder //spectator new body + var/outfit //holder outfit + +////////////////////////////////Communists!/////////////////////////////////////////////////////////// + +/datum/late_party/commy + name = "Отряд СССП" + members = list( + /datum/late_party_member/soviet_soldier + ///datum/late_party_member/soviet_soldier, + ///datum/late_party_member/soviet_soldier, + ///datum/late_party_member/soviet_soldier, + ///datum/late_party_member/soviet_soldier, + ///datum/late_party_member/soviet_soldier, + ///datum/late_party_member/soviet_soldier, + ///datum/late_party_member/soviet_comissar + ) + + +/datum/late_party_member/soviet_soldier + name = "Красноармеец" + role = /datum/role/late_party_member + faction = /datum/faction/late_party/communists + spawnloc = "lp_communist" + outfit = /datum/outfit/responders/ussp + +///datum/late_party_member/soviet_comissar +// name = "Коммисар СССП" +// role = +// faction = +// spawnloc = +// outfit = /datum/outfit/responders/ussp/leader diff --git a/code/game/gamemodes/factions/late_parties.dm b/code/game/gamemodes/factions/late_parties.dm new file mode 100644 index 000000000000..d7007766c4b1 --- /dev/null +++ b/code/game/gamemodes/factions/late_parties.dm @@ -0,0 +1,12 @@ +/datum/faction/late_party + name = "Late Party" + ID = F_LATE_PARTY + logo_state = "late_party_logo" + + initroletype = /datum/role/late_party_member + +/datum/faction/late_party/communists + name = F_LP_COMMUNISTS + ID = F_LP_COMMUNISTS + logo_state = "soviet" + diff --git a/code/game/gamemodes/roles/late_party_members.dm b/code/game/gamemodes/roles/late_party_members.dm new file mode 100644 index 000000000000..6ad819f4948c --- /dev/null +++ b/code/game/gamemodes/roles/late_party_members.dm @@ -0,0 +1,9 @@ +/datum/role/late_party_member + name = LATE_PARTY_MEMBER + id = LATE_PARTY_MEMBER + disallow_job = TRUE + + logo_state = "late_party_logo" + antag_hud_type = ANTAG_HUD_LATE_PARTY + antag_hud_name = "hud_late_party_member" + skillset_type = /datum/skillset/max diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 7d2842d7e65f..6513663dffe5 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -356,6 +356,13 @@ var/global/list/list/landmarks_list = list() // assoc list of all landmarks crea /obj/effect/landmark/heist_spawn name = "Heist" +/obj/effect/landmark/late_party + icon = 'icons/effects/landmarks_static.dmi' + +/obj/effect/landmark/late_party/communist + name = "lp_communist" + icon_state = "late_party_commy" + /obj/effect/landmark/latejoin name = "JoinLate" diff --git a/icons/effects/landmarks_static.dmi b/icons/effects/landmarks_static.dmi index 9fe069642c2b..5082bccd098d 100644 Binary files a/icons/effects/landmarks_static.dmi and b/icons/effects/landmarks_static.dmi differ diff --git a/icons/hud/hud.dmi b/icons/hud/hud.dmi index 68173b4e195d..a742e27cc959 100644 Binary files a/icons/hud/hud.dmi and b/icons/hud/hud.dmi differ diff --git a/icons/misc/logos.dmi b/icons/misc/logos.dmi index d394141d74f5..c694e738779f 100644 Binary files a/icons/misc/logos.dmi and b/icons/misc/logos.dmi differ diff --git a/maps/centcom/centcom.dmm b/maps/centcom/centcom.dmm index 37ed2bec28ff..c96d2e2181ed 100644 --- a/maps/centcom/centcom.dmm +++ b/maps/centcom/centcom.dmm @@ -29755,6 +29755,10 @@ }, /turf/environment/space, /area/shuttle/escape/centcom) +"pVk" = ( +/obj/effect/landmark/late_party/communist, +/turf/unsimulated/floor, +/area/centcom/specops) "pWb" = ( /obj/structure/object_wall/evac{ density = 0; @@ -60005,7 +60009,7 @@ aCV aDi bpb aEc -aCV +pVk aBQ bib aBY diff --git a/taucetistation.dme b/taucetistation.dme index af1090459254..de83246fb4af 100644 --- a/taucetistation.dme +++ b/taucetistation.dme @@ -441,6 +441,7 @@ #include "code\datums\qualities\quirkieish.dm" #include "code\datums\round_aspects\round_aspects.dm" #include "code\datums\spawners_menu\spawners.dm" +#include "code\datums\spawners_menu\spawners_lateparty.dm" #include "code\datums\spawners_menu\spawners_living.dm" #include "code\datums\spawners_menu\spawners_menu.dm" #include "code\datums\spawners_menu\spawners_replicators.dm" @@ -556,6 +557,7 @@ #include "code\game\gamemodes\factions\families.dm" #include "code\game\gamemodes\factions\heist.dm" #include "code\game\gamemodes\factions\infestation.dm" +#include "code\game\gamemodes\factions\late_parties.dm" #include "code\game\gamemodes\factions\malf_silicons.dm" #include "code\game\gamemodes\factions\ninja.dm" #include "code\game\gamemodes\factions\props.dm" @@ -759,6 +761,7 @@ #include "code\game\gamemodes\roles\evil_shade.dm" #include "code\game\gamemodes\roles\families.dm" #include "code\game\gamemodes\roles\heist.dm" +#include "code\game\gamemodes\roles\late_party_members.dm" #include "code\game\gamemodes\roles\malf_unit.dm" #include "code\game\gamemodes\roles\ninja.dm" #include "code\game\gamemodes\roles\prisoner.dm"