Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WARMONGERS Port: Round Aspects #1258

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
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
1 change: 1 addition & 0 deletions code/__HELPERS/roundend.dm
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,7 @@
shit += "<br><font color='#f200ff'><span class='bold'>Drugs Snorted:</span></font> [snort]"
shit += "<br><font color='#0f555c'><span class='bold'>Beards Shaved:</span></font> [beardshavers]"
shit += "<br><font color='#ffffff'><span class='bold'>Pleasures:</span></font> [cums]"
shit += "<br><font color='#ffee00'><span class='bold'>Round Aspect:</span></font> [round_aspect.name]"
// if(cuckers.len)
// shit += "<br><font color='#4e488a'><span class='bold'>Adulterers:</span></font> "
// for(var/x in cuckers.len)
Expand Down
7 changes: 6 additions & 1 deletion code/controllers/subsystem/rogue/treasury.dm
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,12 @@ SUBSYSTEM_DEF(treasury)

/datum/controller/subsystem/treasury/Initialize()
//Randomizes the roundstart amount of money and the queens tax.
treasury_value = rand(800,1500)
if(aspect_chosen(/datum/round_aspect/fulltreasury))
treasury_value = 2500
else if(aspect_chosen(/datum/round_aspect/emptytreasury))
treasury_value = 100
else
treasury_value = rand(800,1500)
queens_tax = pick(0.09, 0.15, 0.21, 0.30)

//For the merchants import and export.
Expand Down
23 changes: 23 additions & 0 deletions code/controllers/subsystem/ticker.dm
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ SUBSYSTEM_DEF(ticker)

var/hide_mode = 0
var/datum/game_mode/mode = null
var/datum/round_aspect/round_aspect = null
var/forcing_aspect = FALSE

var/login_music //music played in pregame lobby
var/round_end_sound //music/jingle played when the world reboots
Expand Down Expand Up @@ -327,6 +329,16 @@ SUBSYSTEM_DEF(ticker)
var/isroguefight = FALSE
var/isrogueworld = FALSE

/datum/controller/subsystem/ticker/proc/pickaspect()
if(!forcing_aspect)
var/list/possibilities = list()
for(var/thing in subtypesof(/datum/round_aspect))//Populate possible aspects list.
var/datum/round_aspect/A = thing
possibilities += A
var/chosen = pick(possibilities)
round_aspect = new chosen
round_aspect.apply()

/datum/controller/subsystem/ticker/proc/setup()
message_admins("<span class='boldannounce'>Starting game...</span>")
var/init_start = world.timeofday
Expand Down Expand Up @@ -471,9 +483,20 @@ SUBSYSTEM_DEF(ticker)
// SSshuttle.emergency.setTimer(ROUNDTIMERBOAT)

SSdbcore.SetRoundStart()
#ifndef TESTING
pickaspect()
#endif

message_admins("<span class='notice'><B>Welcome to [station_name()], enjoy your stay!</B></span>")

spawn(10)
if(round_aspect.sekrit)
to_chat(world, "<span class='notice'>This round's aspect is: Nothing!</span>")
to_chat(world, "<span class='info'>Normality above all.</span>")
else
to_chat(world, "<span class='notice'>This round's aspect is: [round_aspect.name]</span>")
to_chat(world, "<span class='info'>[round_aspect.description]</span>")

for(var/client/C in GLOB.clients)
if(C.mob == SSticker.rulermob)
C.mob.playsound_local(C.mob, 'sound/misc/royal_roundstart.ogg', 100, FALSE)
Expand Down
75 changes: 75 additions & 0 deletions code/datums/round_aspects.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/datum/round_aspect
var/name = "Round Aspect"
var/description = "Uh oh."
var/sekrit = FALSE // dictates whether the aspect should be revealed on round start. if FALSE it will be only revealed after the round has ended

// Yup, that's all they are. They're basically just hollow shells and don't do much by themselves.

/datum/round_aspect/proc/apply() // Instant thing that happens when it's chosen. Used for aspects that change one single var
return

/proc/aspect_chosen(datum/round_aspect/aspect) // use to check if an aspects chosen
if(istype(SSticker.round_aspect, aspect))
return TRUE

/datum/round_aspect/normal
name = "Nothing!"
description = "Normality above all."

/datum/round_aspect/strongbums // these arent bums. these are fraggers.
name = "Strong Beggars"
description = "Life on the streets requires a lot of physical work, y'know."

/datum/round_aspect/kingforareason
name = "King for a Reason"
description = "The previous ruler's reign was cut unfortunately short after his throat was ripped out. Praise be the new King!"

/datum/round_aspect/somethinginthewater
name = "Something in the Water"
description = "You feel just a little bit dumber."

/datum/round_aspect/merchanthoarder
name = "Greedy Bastard"
description = "The merchant is just a little bit more greedy than usual."

/datum/round_aspect/favorsintherightplaces
name = "Favors in the Right Places"
description = "The merchant knows how to exploit people, the balloon is faster."

/datum/round_aspect/sexless
name = "Sexless"
description = "Everyone in the town is a virgin due to a rumor of a 'Lover's Plague', strange."

/datum/round_aspect/fulltreasury
name = "Full Treasury"
description = "The previous ruler was a great leader."

/datum/round_aspect/emptytreasury
name = "Empty Treasury"
description = "The previous ruler was a dick."

/datum/round_aspect/faulty
name = "Faulty Machines"
description = "SCOMs may need some maintenance from time to time so they don't scramble their messages, maybe a good slap will do the trick."

/datum/round_aspect/drugparty
name = "Town Party"
description = "Ugh... what happened last night?"

/datum/round_aspect/drunkparty
name = "Town Party"
description = "Ugh... what happened last night?"

/datum/round_aspect/drunkgarrison
name = "Delayed Inspection"
description = "The Garrison is overdue on an inspection, hopefully they aren't too rowdy."

/*
/datum/round_aspect/beggarking
name = "Peasantry Revolutionized"
description = "Well, the peasants revolted; and they won. Is this what you wanted? He looks like a fucking clown."
*/

/datum/round_aspect/crippledbeggars
name = "Crippled Beggars"
description = "Due to a previous Lord's decree all beggars got their legs broken, that was a long time ago, and they were training their arms. Better get a bow."
17 changes: 17 additions & 0 deletions code/modules/admin/admin_verbs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ GLOBAL_PROTECT(admin_verbs_admin)
return list(
/client/proc/adjusttriumph,
/client/proc/end_party, /*destroys our own admin datum so we can play as a regular player*/
/client/proc/forceaspect,
/client/proc/cmd_admin_say, /*admin-only ooc chat*/
/client/proc/hide_verbs, /*hides all our adminverbs*/
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
Expand Down Expand Up @@ -767,6 +768,22 @@ GLOBAL_PROTECT(admin_verbs_hideable)
log_admin("[key_name(usr)] has [AI_Interact ? "activated" : "deactivated"] Admin AI Interact")
message_admins("[key_name_admin(usr)] has [AI_Interact ? "activated" : "deactivated"] their AI interaction")

/client/proc/forceaspect()
set category = "GameMaster"
set name = "Force Aspect"
if(!holder)
return

var/list/possibilities = list()
for(var/thing in subtypesof(/datum/round_aspect))//Populate possible aspects list.
var/datum/round_aspect/A = thing
possibilities += A
var/chosen = input(usr, "Choose", "STONEMONGERS") as null|anything in possibilities
if(chosen)
SSticker.round_aspect = new chosen
SSticker.forcing_aspect = TRUE
SSticker.round_aspect.apply()

/client/proc/end_party()
set category = "GameMaster"
set name = "EndPlaytest"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@
shoes = /obj/item/clothing/shoes/roguetown/boots
belt = /obj/item/storage/belt/rogue/leather

/datum/outfit/job/roguetown/guardsman/pre_equip(mob/living/carbon/human/H, visualsOnly)
. = ..()
if(aspect_chosen(/datum/round_aspect/drunkgarrison))
H.reagents.add_reagent(/datum/reagent/consumable/ethanol/beer, 72) // 3 goblets worth

/* ! ! ! Class Selection Section Below ! ! !
Design philosphy:
- Footman, specializes in using axes/maces and shields. - Medium armor
Expand Down
3 changes: 3 additions & 0 deletions code/modules/jobs/job_types/roguetown/nobility/lord.dm
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@
H.change_stat("speed", 1)
H.change_stat("perception", 2)
H.change_stat("fortune", 5)
if(aspect_chosen(/datum/round_aspect/kingforareason))
H.change_stat("strength", 5)
H.change_stat("intelligence", -5)
if(H.gender == MALE)
pants = /obj/item/clothing/under/roguetown/tights/black
shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt/black
Expand Down
5 changes: 5 additions & 0 deletions code/modules/jobs/job_types/roguetown/nobility/merchant.dm
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
min_pq = 0
selection_color = "#61679d"

/datum/job/roguetown/merchant/after_spawn(mob/living/H, mob/M, latejoin)
if(aspect_chosen(/datum/round_aspect/merchanthoarder))
give_bank_account = 250
. = ..()

/datum/outfit/job/roguetown/merchant/pre_equip(mob/living/carbon/human/H)
..()

Expand Down
7 changes: 7 additions & 0 deletions code/modules/jobs/job_types/roguetown/peasants/beggar.dm
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,13 @@
H.change_stat("intelligence", -3)
H.change_stat("constitution", -2)
H.change_stat("endurance", -2)
if(aspect_chosen(/datum/round_aspect/strongbums))
H.change_stat("strength", 5)
H.change_stat("intelligence", -2)
if(aspect_chosen(/datum/round_aspect/crippledbeggars))
var/datum/brain_trauma/severe/paralysis/paraplegic/T = new()
H.change_stat("strength", 6)
H.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE)

/datum/outfit/job/roguetown/vagrant
name = "Beggar"
6 changes: 6 additions & 0 deletions code/modules/jobs/job_types/roguetown/roguetown.dm
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,12 @@
if(check_crownlist(H.ckey))
H.mind.special_items["Champion Circlet"] = /obj/item/clothing/head/roguetown/crown/sparrowcrown
give_special_items(H)
if(aspect_chosen(/datum/round_aspect/somethinginthewater))
H.change_stat("intelligence", -1)
if(aspect_chosen(/datum/round_aspect/drugparty))
H.reagents.add_reagent(pick(/datum/reagent/ozium, /datum/reagent/moondust, /datum/reagent/druqks), 15)
if(aspect_chosen(/datum/round_aspect/drunkparty))
H.reagents.add_reagent(/datum/reagent/consumable/ethanol/beer, 72) // 3 goblets worth
for(var/list_key in SStriumphs.post_equip_calls)
var/datum/triumph_buy/thing = SStriumphs.post_equip_calls[list_key]
thing.on_activate(H)
Expand Down
2 changes: 2 additions & 0 deletions code/modules/mob/living/carbon/human/human.dm
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@
#ifdef MATURESERVER
sexcon = new /datum/sex_controller(src)
#endif
if(aspect_chosen(/datum/round_aspect/sexless))
virginity = TRUE
verbs += /mob/living/proc/mob_sleep
verbs += /mob/living/proc/lay_down

Expand Down
5 changes: 4 additions & 1 deletion code/modules/roguetown/roguemachine/merchant.dm
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,10 @@
if(!anchored)
return TRUE
if(world.time > next_airlift)
next_airlift = world.time + rand(2 MINUTES, 3 MINUTES)
if(aspect_chosen(/datum/round_aspect/favorsintherightplaces))
next_airlift = world.time + 1 MINUTES
else
next_airlift = world.time + rand(2 MINUTES, 3 MINUTES)
#ifdef TESTSERVER
next_airlift = world.time + 5 SECONDS
#endif
Expand Down
13 changes: 13 additions & 0 deletions code/modules/roguetown/roguemachine/scomm.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
var/listening = TRUE
var/speaking = TRUE
var/dictating = FALSE
var/fucked = FALSE

/obj/structure/roguemachine/scomm/r
pixel_y = 0
Expand Down Expand Up @@ -46,6 +47,11 @@
if(.)
return
user.changeNext_move(CLICK_CD_MELEE)
if(user.used_intent.type == INTENT_HARM)
playsound(loc, 'sound/combat/hits/punch/punch (1).ogg', 100, FALSE, -1)
fucked = FALSE
update_icon()
return
playsound(loc, 'sound/misc/beep.ogg', 100, FALSE, -1)
listening = !listening
speaking = !speaking
Expand Down Expand Up @@ -94,6 +100,8 @@
icon_state = "scomm1"
else
icon_state = "scomm0"
if(fucked)
icon_state = "scomm-fucked"

/obj/structure/roguemachine/scomm/Destroy()
SSroguemachine.scomm_machines -= src
Expand Down Expand Up @@ -128,6 +136,11 @@
if(lowertext(raw_message) == "say laws")
dictate_laws()
return
if(aspect_chosen(/datum/round_aspect/faulty))
if(prob(22))
fucked = TRUE
if(fucked)
raw_message = stars(raw_message)
for(var/obj/structure/roguemachine/scomm/S in SSroguemachine.scomm_machines)
S.repeat_message(raw_message, src, usedcolor, message_language)
for(var/obj/item/scomstone/S in SSroguemachine.scomm_machines)
Expand Down
Binary file modified icons/roguetown/misc/machines.dmi
Binary file not shown.
1 change: 1 addition & 0 deletions stonekeep.dme
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,7 @@
#include "code\datums\progressbar.dm"
#include "code\datums\radiation_wave.dm"
#include "code\datums\recipe.dm"
#include "code\datums\round_aspects.dm"
#include "code\datums\ruins.dm"
#include "code\datums\saymode.dm"
#include "code\datums\shuttles.dm"
Expand Down
Loading