Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion code/game/objects/effects/posters/official.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

/obj/structure/sign/poster/official/random
name = "Random Official Poster (ROP)"
random_basetype = /obj/structure/sign/poster/official
random_basetype = /obj/structure/sign/poster/propaganda/vibori
icon_state = "random_official"
never_random = TRUE

Expand Down
Binary file modified icons/hud/lobby/signup_button.dmi
Binary file not shown.
Binary file modified icons/map_icons/clothing/suit/costume.dmi
Binary file not shown.
Binary file modified icons/mob/clothing/suits/costume.dmi
Binary file not shown.
Binary file modified icons/obj/clothing/suits/costume.dmi
Binary file not shown.
55 changes: 55 additions & 0 deletions modular_meta/features/pipivspiki/code/propaganda.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/obj/item/poster/random_propaganda
name = "random propaganda poster"
poster_type = /obj/structure/sign/poster/official/random
icon_state = "rolled_legit"

/obj/structure/sign/poster/propaganda
poster_item_name = "propagantistic poster"
poster_item_desc = null
poster_item_icon_state = "rolled_legit"
printable = TRUE

/obj/structure/sign/poster/propaganda/random
name = "Random Propagandistic Poster (ROP)"
random_basetype = /obj/structure/sign/poster/propaganda
icon_state = "random_anything"
never_random = TRUE

MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/random, 32)
//This is being hardcoded here to ensure we don't print directionals from the library management computer because they act wierd as a poster item
/obj/structure/sign/poster/official/random/directional
printable = FALSE

/obj/structure/sign/poster/propaganda/vibori
icon = 'modular_meta/features/pipivspiki/icons/poster.dmi'

/obj/structure/sign/poster/propaganda/vibori/pikita_eats
name = "Пикита Ест Детей"
desc = "И это факт!"
icon_state = "pikita_eats"

MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/propaganda/vibori/pikita_eats, 32)

/obj/structure/sign/poster/propaganda/vibori/i_need_you
name = "Ты Нужен Мне"
desc = "Чтобы проголовать за меня!"
icon_state = "ineedyou"

MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/propaganda/vibori/i_need_you, 32)

/obj/structure/sign/poster/propaganda/vibori/viva_la_pikita
name = "Viva la Pikita"
desc = "За силиконовый стандарт!"
icon_state = "viva_la_pikita"

MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/propaganda/vibori/viva_la_pikita, 32)

/obj/structure/sign/poster/propaganda/vibori/melok
name = "Только Мелок"
desc = "Обязан Я Быть - ЧЕСТНЫМ. \
Сын и слуга народа - ЧИСТЫМ. \
Навечно быть - Благодарным. \
Перед людьми - Пеколюбимым."
icon_state = "viva_la_pikita"

MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/propaganda/vibori/viva_la_pikita, 32)
41 changes: 41 additions & 0 deletions modular_meta/features/pipivspiki/code/shirt.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"wellworn_shirt_pro_pipi": [
{
"type": "icon_state",
"icon_state": "worn_out",
"blend_mode": "overlay",
"color_ids": [1]
},
{
"type": "icon_state",
"icon_state": "pipi_overlay",
"blend_mode": "overlay"
}
],
"wellworn_shirt_pro_piki": [
{
"type": "icon_state",
"icon_state": "worn_out",
"blend_mode": "overlay",
"color_ids": [1]
},
{
"type": "icon_state",
"icon_state": "piki_overlay",
"blend_mode": "overlay"
}
],
"wellworn_shirt_pro_melok": [
{
"type": "icon_state",
"icon_state": "worn_out",
"blend_mode": "overlay",
"color_ids": [1]
},
{
"type": "icon_state",
"icon_state": "melok_overlay",
"blend_mode": "overlay"
}
]
}
213 changes: 213 additions & 0 deletions modular_meta/features/pipivspiki/code/traits.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
#define PRO_PIPI "pro-pipidaster"
#define PRO_PIKI "pro-pikita"
#define PRO_MELOK "pro-melok"
#define RANDOM_PRO null
#define STATION_TRAIT_NO_COST 0

/datum/station_trait/vibori
name = "Выборы.. Выборы.."
cost = STATION_TRAIT_COST_FULL
trait_type = STATION_TRAIT_NO_COST
show_in_report = FALSE
weight = 100
sign_up_button = TRUE
var/list/vibori = list()

/datum/station_trait/vibori/New()
. = ..()
RegisterSignal(SSdcs, COMSIG_GLOB_JOB_AFTER_SPAWN, PROC_REF(on_job_after_spawn))

/datum/station_trait/vibori/setup_lobby_button(atom/movable/screen/lobby/button/sign_up/lobby_button)
RegisterSignal(lobby_button, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_lobby_button_update_overlays))
lobby_button.desc = "За кого ты проголосуешь? Пипидастер, Пикита или же Мелок?"
return ..()

/datum/station_trait/vibori/can_display_lobby_button(client/player)
return sign_up_button

/// We don't destroy buttons on round start for those who are still in the lobby.
/datum/station_trait/vibori/on_round_start()
return

/datum/station_trait/vibori/on_lobby_button_update_icon(atom/movable/screen/lobby/button/sign_up/lobby_button, location, control, params, mob/dead/new_player/user)
var/mob/player = lobby_button.get_mob()
var/vibori_stance = vibori[player.ckey]
switch(vibori_stance)
if(PRO_PIPI)
lobby_button.base_icon_state = "signup"
if(PRO_PIKI)
lobby_button.base_icon_state = "signup"
if(PRO_PIKI)
lobby_button.base_icon_state = "signup"
else
lobby_button.base_icon_state = "signup_neutral"

/datum/station_trait/vibori/on_lobby_button_click(atom/movable/screen/lobby/button/sign_up/lobby_button, updates)
var/mob/player = lobby_button.get_mob()
var/vibori_stance = vibori[player.ckey]
switch(vibori_stance)
if(PRO_PIPI)
vibori[player.ckey] = PRO_PIKI
lobby_button.balloon_alert(player, "За пикиту")
if(PRO_PIKI)
vibori[player.ckey] = PRO_MELOK
lobby_button.balloon_alert(player, "За мелка")
if(PRO_MELOK)
vibori[player.ckey] = RANDOM_PRO
lobby_button.balloon_alert(player, "За лучшего")
if(RANDOM_PRO)
vibori[player.ckey] = PRO_PIPI
lobby_button.balloon_alert(player, "За пипидастера")

/datum/station_trait/vibori/proc/on_lobby_button_update_overlays(atom/movable/screen/lobby/button/sign_up/lobby_button, list/overlays)
SIGNAL_HANDLER
var/mob/player = lobby_button.get_mob()
var/vibori_stance = vibori[player.ckey]
switch(vibori_stance)
if(PRO_PIPI)
overlays += "pipi"
if(PRO_PIKI)
overlays += "piki"
if(PRO_MELOK)
overlays += "melok"
if(RANDOM_PRO)
overlays += "random"

/datum/station_trait/vibori/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned, client/player_client)
SIGNAL_HANDLER

var/vibori_stance = vibori[player_client.ckey]
if((vibori_stance == RANDOM_PRO && prob(33)) || vibori_stance == PRO_PIPI)
var/obj/item/storage/box/stickers/pro_pipi/boxie = new(spawned.loc)
spawned.equip_to_storage(boxie, ITEM_SLOT_BACK, indirect_action = TRUE)
if(ishuman(spawned))
var/obj/item/clothing/suit/costume/wellworn_shirt/vibori/pipi/shirt = new(spawned.loc)
if(!spawned.equip_to_slot_if_possible(shirt, ITEM_SLOT_OCLOTHING, indirect_action = TRUE))
shirt.forceMove(boxie)
return
if((vibori_stance == RANDOM_PRO && prob(33)) || vibori_stance == PRO_PIKI)
var/obj/item/storage/box/stickers/pro_piki/boxie = new(spawned.loc)
spawned.equip_to_storage(boxie, ITEM_SLOT_BACK, indirect_action = TRUE)
if(!ishuman(spawned))
var/obj/item/clothing/suit/costume/wellworn_shirt/vibori/piki/shirt = new(spawned.loc)
if(!spawned.equip_to_slot_if_possible(shirt, ITEM_SLOT_OCLOTHING, indirect_action = TRUE))
shirt.forceMove(boxie)
return
if((vibori_stance == RANDOM_PRO && prob(33)) || vibori_stance == PRO_MELOK)
var/obj/item/storage/box/stickers/pro_mel/boxie = new(spawned.loc)
spawned.equip_to_storage(boxie, ITEM_SLOT_BACK, indirect_action = TRUE)
if(!ishuman(spawned))
var/obj/item/clothing/suit/costume/wellworn_shirt/vibori/melok/shirt = new(spawned.loc)
if(!spawned.equip_to_slot_if_possible(shirt, ITEM_SLOT_OCLOTHING, indirect_action = TRUE))
shirt.forceMove(boxie)


#undef PRO_PIPI
#undef PRO_PIKI
#undef PRO_MELOK
#undef RANDOM_PRO

/obj/item/sticker/vibori
icon = 'modular_meta/features/pipivspiki/icons/stickers.dmi'

/obj/item/sticker/vibori/pipi
name = "стикеры от партии Пипидастера"
icon_state = "pipi"
examine_text = "Стикер указывает о том что думает лидер: <b>Я 2 ЕБАННЫХ ГОДА ПРОШУ ПЕДАЛЬ ЧТОБЫ ПОКАЗАТЬ ЧТО Я НА САМОМ ДЕЛЕ УМЕЮ!</b>"

/obj/item/sticker/vibori/piki
name = "стикеры от партии Пикиты"
icon_state = "piki"
examine_text = "Стикер указывает о том что думает лидер: <b>Пикита пошёл нахуй.</b>"

/obj/item/sticker/vibori/mel
name = "стикеры от партии Мелка"
icon_state = "mel"
examine_text = "Стикер указывает о том что думает лидер: <b>я проголсую за пепедастра.</b>"

/datum/greyscale_config/wellworn_shirt/vibori
name = "Well-Worn Shirt (vibori)"
icon_file = 'icons/obj/clothing/suits/costume.dmi'
json_config = 'modular_meta/features/pipivspiki/code/shirt.json'

/datum/greyscale_config/wellworn_shirt/vibori/worn
name = "Well-Worn Shirt (Worn vibori)"
icon_file = 'icons/mob/clothing/suits/costume.dmi'

/obj/item/clothing/suit/costume/wellworn_shirt/vibori
icon = 'icons/map_icons/clothing/suit/costume.dmi'
icon_state = "/obj/item/clothing/suit/costume/wellworn_shirt"
post_init_icon_state = "wellworn_shirt_pro_pipi"
greyscale_config = /datum/greyscale_config/wellworn_shirt/vibori
greyscale_config_worn = /datum/greyscale_config/wellworn_shirt/vibori/worn

/obj/item/clothing/suit/costume/wellworn_shirt/vibori/pipi
name = "pro-pipidaster shirt"
desc = "A worn out, curiously comfortable t-shirt."
greyscale_colors = "#50D050"

/obj/item/clothing/suit/costume/wellworn_shirt/vibori/piki
name = "pro-pikita shirt"
desc = "A worn out, curiously comfortable t-shirt."
greyscale_colors = "#D0D050"
post_init_icon_state = "wellworn_shirt_pro_piki"

/obj/item/clothing/suit/costume/wellworn_shirt/vibori/melok
name = "pro-melok shirt"
desc = "A worn out, curiously comfortable t-shirt."
greyscale_colors = "#D05050"
post_init_icon_state = "wellworn_shirt_pro_melok"

/obj/item/storage/box/stickers/pro_pipi
name = "Pipidaster approved sticker pack"
icon = 'modular_meta/features/pipivspiki/icons/stickers.dmi'
desc = "2 YEARS ON STATION MADE YOU A FUCKING ADMIN!"
illustration = "label_pipi"
storage_type = /datum/storage/box/vibori/pro_pipi

/obj/item/storage/box/stickers/pro_pipi/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/sticker/vibori/pipi(src)

/obj/item/storage/box/stickers/pro_piki
name = "Pikita approved sticker pack"
icon = 'modular_meta/features/pipivspiki/icons/stickers.dmi'
desc = "За силиконов и текущую власть!"
illustration = "label_piki"
storage_type = /datum/storage/box/vibori/pro_piki

/obj/item/storage/box/stickers/pro_piki/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/sticker/vibori/piki(src)

/obj/item/storage/box/stickers/pro_mel
name = "Melok approved sticker pack"
icon = 'modular_meta/features/pipivspiki/icons/stickers.dmi'
desc = "За новую власть и так далее!"
illustration = "label_mel"
storage_type = /datum/storage/box/vibori/pro_melok

/obj/item/storage/box/stickers/pro_mel/PopulateContents()
for(var/i in 1 to 4)
new /obj/item/sticker/vibori/mel(src)

/datum/storage/box/vibori/pro_pipi/New(atom/parent, max_slots, max_specific_storage, max_total_storage, rustle_sound, remove_rustle_sound)
. = ..()
set_holdable(exception_hold_list = list(
/obj/item/sticker/vibori/pipi,
/obj/item/clothing/suit/costume/wellworn_shirt/vibori/pipi,
))

/datum/storage/box/vibori/pro_piki/New(atom/parent, max_slots, max_specific_storage, max_total_storage, rustle_sound, remove_rustle_sound)
. = ..()
set_holdable(exception_hold_list = list(
/obj/item/sticker/vibori/piki,
/obj/item/clothing/suit/costume/wellworn_shirt/vibori/piki,
))

/datum/storage/box/vibori/pro_melok/New(atom/parent, max_slots, max_specific_storage, max_total_storage, rustle_sound, remove_rustle_sound)
. = ..()
set_holdable(exception_hold_list = list(
/obj/item/sticker/vibori/mel,
/obj/item/clothing/suit/costume/wellworn_shirt/vibori/melok,
))
Binary file added modular_meta/features/pipivspiki/icons/poster.dmi
Binary file not shown.
Binary file not shown.
10 changes: 10 additions & 0 deletions modular_meta/features/pipivspiki/includes.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "code\propaganda.dm"
#include "code\traits.dm"

/datum/modpack/pipi_vs_piki
id = "pvp"
icon = 'modular_meta/features/pipivspiki/preview.dmi'
name = "Пипидастер Против Пикиты Против Мелка"
group = "Features"
desc = "Голосуй или терпи дальше."
author = "Massmeta"
Binary file added modular_meta/features/pipivspiki/preview.dmi
Binary file not shown.
1 change: 1 addition & 0 deletions modular_meta/main_modular_include.dm
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#include "features\soundtrack_modpack\includes.dm"
#include "features\novichok\includes.dm"
#include "features\jukeboxes_to_bartender\includes.dm"
#include "features\pipivspiki\includes.dm"

/* --- Reverts --- */

Expand Down
Loading