Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
863edc2
v0.5
Kocma-san Jun 9, 2025
cb37c7e
Apply suggestions from code review
Iajret Jun 10, 2025
e114dab
Update tff_modular/modules/shift_intensity/shift_intensity_vote.dm
Kocma-san Jun 10, 2025
0825e40
Update tff_modular/modules/shift_intensity/shift_intensity_vote.dm
Kocma-san Jun 11, 2025
7bc9eee
Update tff_modular/modules/shift_intensity/shift_intensity_vote.dm
Kocma-san Jun 11, 2025
ba6e593
Update tff_modular/modules/shift_intensity/shift_intensity_vote.dm
Kocma-san Jun 11, 2025
537b4b6
verb for admins
Kocma-san Jun 15, 2025
db73f42
weh (Теперь все привязано к конфигам)
Kocma-san Jun 16, 2025
5872434
configs (probably bad)
Kocma-san Jun 17, 2025
761b051
Update tff_modular/modules/shift_intensity/shift_intensity_config.dm
Kocma-san Jun 17, 2025
9d5d421
Update shift_intensity.dm
Kocma-san Jun 17, 2025
dd44e6f
Merge branch 'vote-things' of https://github.com/Kocma-san/FluffySTG …
Kocma-san Jun 17, 2025
da44838
Update dynamic_hard.json
Kocma-san Jun 17, 2025
e640daf
Merge remote-tracking branch 'upstream/master' into vote-things
Kocma-san Sep 12, 2025
95a215f
v2
Kocma-san Sep 12, 2025
f41a1fa
Merge branch 'master' into vote-things
Kocma-san Sep 12, 2025
10a8680
fixes
Kocma-san Sep 13, 2025
4f7c41d
update
Kocma-san Sep 13, 2025
54fd7fb
Update dynamic.dm
Kocma-san Sep 13, 2025
d0dafe3
v2.1
Kocma-san Sep 26, 2025
e948bfa
Update statpanel.dm
Kocma-san Nov 14, 2025
838198c
Update code/modules/mob/dead/new_player/login.dm
Kocma-san Nov 20, 2025
edb9723
Update code/modules/mob/dead/new_player/login.dm
Kocma-san Nov 20, 2025
58e7336
small addition
Kocma-san Jan 13, 2026
e21f67a
Update shift_intensity_vote.dm
Kocma-san Jan 13, 2026
4e4a389
Update shift_intensity.dm
Kocma-san Jan 13, 2026
d95b454
Update shift_intensity.dm
Kocma-san Jan 13, 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
9 changes: 9 additions & 0 deletions code/__DEFINES/~ff_defines/dynamic.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#define ROUND_LIGHT_SHIFT "Green"
#define ROUND_MID_SHIFT "Blue"
#define ROUND_HARD_SHIFT "Red"

#define ROUND_LIGHT_SHIFT_STRING "Green Shift"
#define ROUND_MID_SHIFT_STRING "Blue Shift"
#define ROUND_HARD_SHIFT_STRING "Red Shift"

GLOBAL_VAR(shift_intensity_level)
8 changes: 8 additions & 0 deletions code/controllers/subsystem/statpanel.dm
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,14 @@ SUBSYSTEM_DEF(statpanels)
"Actual Round Timer: [time2text(real_round_time, "hh:mm:ss", 0)]"
)
// NOVA EDIT CHANGE END
// FLUFFY FRONTIER ADDITION START - shift_intensity
if(!isnull(GLOB.shift_intensity_level))
global_data += list(
" ",
"Shift Intensity: [GLOB.shift_intensity_level]",
" ",
)
// FLUFFY FRONTIER ADDITION END

if(SSshuttle.emergency)
var/ETA = SSshuttle.emergency.getModeStr()
Expand Down
1 change: 1 addition & 0 deletions config/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ $include interviews.txt
$include lua.txt
$include auxtools.txt
$include map_vote.txt
$include tff/config_tff.txt

# You can use the @ character at the beginning of a config option to lock it from being edited in-game
# Example usage:
Expand Down
11 changes: 11 additions & 0 deletions config/tff/config_tff.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## Включает систему голосования за тип раунда
#SHIFT_INTENSITY

## Включает возможность начать голосование за тип раунда
#ALLOW_SHIFT_INTENSITY_VOTE

## Время до начала раунда (в децисекундах), в которое запускается голосование за тип раунда
SHIFT_INTENSITY_VOTE_STARTTIME 1000

## Количество игроков, необходимое для старта голосования за тип раунда
SHIFT_INTENSITY_VOTE_MINIMUM_PLAYERS 20
36 changes: 36 additions & 0 deletions tff_modular/modules/shift_intensity/shift_intensity.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
SUBSYSTEM_DEF(shift_intensity)
name = "Shift Intensity Vote"
flags = SS_BACKGROUND
runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP
dependencies = list(
/datum/controller/subsystem/vote,
)

// Время до начала раунда, после которого подсистема будет пытаться запустить голосование
var/start_time
// Количество игроков, необходимое для старта голосования
var/minimum_players

/datum/controller/subsystem/shift_intensity/Initialize()
if(!CONFIG_GET(flag/shift_intensity))
can_fire = FALSE
return SS_INIT_NO_NEED

start_time = CONFIG_GET(number/shift_intensity_vote_starttime)
minimum_players = CONFIG_GET(number/shift_intensity_vote_minimum_players)
return SS_INIT_SUCCESS

/datum/controller/subsystem/shift_intensity/Recover()
start_time = SSshift_intensity.start_time

/datum/controller/subsystem/shift_intensity/fire()
if(SSticker.current_state > GAME_STATE_PREGAME)
can_fire = FALSE
return

if(SSticker.GetTimeLeft() <= start_time)
can_fire = FALSE
if(GLOB.clients.len < minimum_players)
return
SSvote.initiate_vote(/datum/vote/shift_intensity, "server", forced = TRUE)

14 changes: 14 additions & 0 deletions tff_modular/modules/shift_intensity/shift_intensity_config.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Определяет, работает ли SSshiftcolor или нет
/datum/config_entry/flag/shift_intensity

// Определяет, может ли голосование за shiftcolor быть начато кем-либо или нет
/datum/config_entry/flag/allow_shift_intensity_vote

// Время (в децисекундах) до начала раунда, после которого SSshiftcolorvote будет пытаться запустить голосование
/datum/config_entry/number/shift_intensity_vote_starttime
min_val = 50
default = 1000

// Количество игроков, необходимое для старта голосования
/datum/config_entry/number/shift_intensity_vote_minimum_players
default = 20
78 changes: 78 additions & 0 deletions tff_modular/modules/shift_intensity/shift_intensity_vote.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/datum/vote/shift_intensity
name = "Intensity"
default_choices = list(
ROUND_LIGHT_SHIFT_STRING,
ROUND_MID_SHIFT_STRING,
ROUND_HARD_SHIFT_STRING,
)
var/list/roundstart_rulesets = list(
/datum/dynamic_ruleset/roundstart/nuclear,
/datum/dynamic_ruleset/roundstart/revs,
/datum/dynamic_ruleset/roundstart/bloodcult,
)

/datum/vote/shift_intensity/toggle_votable()
CONFIG_SET(flag/allow_shift_intensity_vote, !CONFIG_GET(flag/allow_shift_intensity_vote))

/datum/vote/shift_intensity/is_config_enabled()
return CONFIG_GET(flag/shift_intensity) && CONFIG_GET(flag/allow_shift_intensity_vote)

/datum/vote/shift_intensity/can_be_initiated(forced)
. = ..()
if(. != VOTE_AVAILABLE)
return .

if(SSticker.current_state != GAME_STATE_PREGAME)
return "It's too late for that, the round is already starting."

if(forced)
return VOTE_AVAILABLE

return VOTE_AVAILABLE

/datum/vote/shift_intensity/initiate_vote(initiator, duration)
. = ..()
// Необходимо продлить время до старта раунда, асли до него меньше 90 секунд (60 секунд сам воут + 30 на то, чтобы игроки успели понять тип раунда)
if(SSticker.GetTimeLeft() < 90 SECONDS)
SSticker.SetTimeLeft(90 SECONDS)

/datum/vote/shift_intensity/tiebreaker(list/winners)
// Если никто не проголосовал - смена будет *обычная*
if(choices_by_ckey.len == 0)
return ROUND_MID_SHIFT_STRING
return ..()


/datum/vote/shift_intensity/finalize_vote(winning_option)
if(SSticker.current_state != GAME_STATE_PREGAME)
message_admins("Shift type vote ended after the round started. No changes to the round type. Current type: []")
log_admin("Shift type vote ended after the round started. No changes to the round type. Current type: []")
return

// Боже, прости меня за это, но меня заставляют. Нужно будет заменить на отдельные конфиги для каждого типа раунда
Copy link
Contributor

Choose a reason for hiding this comment

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

или сделать свой датум с типами раундов и их параметрами и просто осле голосования создавать его и вызывать его методы.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Ну было бы круто конечно без конфигов обойтись, но некоторые штуки, такие как вес антагонистов, можно только в конфигах настраивать (Либо городить страшные немодульные костыли).

Если идея с конфигами не очень плохая, то я в течении пары дней доделаю ее (Тоже будет 1 немодульное изменение, но его я хотя бы знаю как сделать)

switch(winning_option)
if(ROUND_LIGHT_SHIFT_STRING)
SSdynamic.max_threat_level = 30
SSdynamic.low_pop_maximum_threat = 20
SSdynamic.threat_curve_centre = -4
SSdynamic.threat_curve_width = 2.2
GLOB.shift_intensity_level = ROUND_LIGHT_SHIFT
message_admins("Selected Green Shift")
if(ROUND_MID_SHIFT_STRING)
// Ничего не меняем, все как обычно
GLOB.shift_intensity_level = ROUND_MID_SHIFT
message_admins("Selected Blue Shift")
if(ROUND_HARD_SHIFT_STRING)
GLOB.dynamic_no_stacking = FALSE
SSdynamic.threat_curve_centre = 4
SSdynamic.threat_curve_width = 2.2
// Ужас. Но нужен, чтобы выбирать случайно культ, нюку или реву для спавна раундстартом
var/chosen_roundstart_ruleset = pick(roundstart_rulesets)
GLOB.dynamic_forced_roundstart_ruleset += new chosen_roundstart_ruleset()
GLOB.shift_intensity_level = ROUND_HARD_SHIFT
message_admins("Selected Red Shift. Randomly selected ruleset: [chosen_roundstart_ruleset]")
else
CRASH("[type] wasn't passed a valid winning choice. (Got: [winning_option || "null"])")

message_admins("Shift type vote ended ")
log_admin("Shift type vote ended ")
4 changes: 4 additions & 0 deletions tgstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,7 @@
#include "code\__DEFINES\traits\sources.dm"
#include "code\__DEFINES\~ff_defines\barsigns.dm"
#include "code\__DEFINES\~ff_defines\DNA.dm"
#include "code\__DEFINES\~ff_defines\dynamic.dm"
#include "code\__DEFINES\~ff_defines\flavor_misc.dm"
#include "code\__DEFINES\~ff_defines\nabber_clothes_pathes.dm"
#include "code\__DEFINES\~ff_defines\say.dm"
Expand Down Expand Up @@ -9299,6 +9300,9 @@
#include "tff_modular\modules\security_rearm\code\shotgun\ammobox.dm"
#include "tff_modular\modules\security_rearm\code\shotgun\shotgunammo.dm"
#include "tff_modular\modules\selestial_language\language.dm"
#include "tff_modular\modules\shift_intensity\shift_intensity.dm"
#include "tff_modular\modules\shift_intensity\shift_intensity_config.dm"
#include "tff_modular\modules\shift_intensity\shift_intensity_vote.dm"
#include "tff_modular\modules\silicon_laws_tweaks\code\upload.dm"
#include "tff_modular\modules\snowfall\snowfall.dm"
#include "tff_modular\modules\spiderbuff\giant_spiders.dm"
Expand Down
Loading