Files
BurgerLUAandGitHub 2a3bcd2c86 Reworks the Wizardly Die of Fate Rolling, Event, and Teleportation (#4485)
## About The Pull Request

Reworks the Wizardly Die of Fate Rolling, Event, and Teleportation

The Wizardly Die of Fate...
... now only has 20 rolls. Once it is rolled the 20th time, it will
disappear even if a wizard wasn't selected. Only ghosts can see the
number of rolls left.
... now has a lifetime of 10 minutes. Once the 10 minutes is up, the
dice is gone forever.
... is heavily weighted to roll a 1. It can still roll a 20, but it is
significantly less likely to roll a 20 and more likely to roll a 1.
... now teleports to an area* occupied by a randomly selected active
crewmember.**
... now has a 100% chance to be announced, as opposed to the previous
80%.
... now has its destruction and/or disappearance announced, assuming it
was spawned via the event.
... makes you drop everything if you manage to get Wizard (before you
are teleported and made a wizard).

_* Area must be a safe station turf that isn't the current area where
the dice is located._
_** You're considered an active crewmember if you're not in dorms,
you're on station, you're connected, and you're not afk._

Additional minor changes
- Adds additional ghost notifications for when the dice is rolled (1 or
20 only), and when the dice is destroyed.
- Fixes some text I didn't like.

## Why It's Good For The Game

Giving it only 20 rolls fixes the problem that a wizard is pretty much
guaranteed for the round. Same with the 10 minute lifespan.

Making it heavily weighted towards 1 gives it more risk to roll it,
discouraging less than brave players (and also encouraging hilarity.)

Making it teleport to a random lucky crewmember (or rather the area
they're in) means that there is really no point in searching for the
dice as it is incredibly likely for someone else to see it and roll it.
It should stop the low rp unga behavior of bumrushing departments to try
and get wizard.

Announcing the destruction of the dice and it existing just feels like a
QoL.

## Proof Of Testing

The following has been tested:
Rolling it has worked. Smites on 1 and wizard on 20 still work and are
possible.
Destroying the wizard dice early (before the announcement) works as
intended.
Destroying the wizard dice after the announcement ends the event as
intended.
Letting the event end destroys the wizard dice and works as intended.
There are no references of the event or the dice in Garbage Collection
after any of these events ran in any variation.

## Changelog

🆑 BurgerBB
balance: Wizardly Die of Fate has only 20 rolls and 10 minutes before it
disappears. Rolling a 1 is significantly more likely, while the rest of
the numbers (including the nat 20) are less likely.
/🆑
2025-09-14 22:12:37 +03:00

44 lines
1.2 KiB
Plaintext

/proc/get_safe_lucky_player_turf(list/mobs_to_check = GLOB.alive_player_list,list/mobs_to_exclude,list/areas_to_exclude)
var/list/list_to_check = shuffle(mobs_to_check)
if(length(mobs_to_exclude))
list_to_check -= mobs_to_exclude
if(length(list_to_check))
for(var/mob/player_mob as anything in list_to_check)
//Safety bullshit in case of race conditions.
if(!player_mob || !player_mob.mind || !player_mob.client)
continue
//Don't include afk people.
if(player_mob.client.is_afk())
continue
var/datum/job/player_role = player_mob.mind.assigned_role
//Don't include people who aren't crew.
if(!(player_role.job_flags & JOB_CREW_MEMBER))
continue
//Don't include people who aren't even on the station or doing something "important"
if(engaged_role_play_check(player_mob, station = TRUE, dorms = TRUE))
continue
var/turf/player_turf = get_turf(player_mob)
if(!player_turf)
continue //Safety
var/area/player_area = player_turf.loc
if(length(areas_to_exclude) && (player_area in areas_to_exclude))
continue
var/turf/found_turf = get_safe_random_station_turf(player_area)
if(!found_turf)
continue //Safety
return found_turf
return get_safe_random_station_turf()