mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
## 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. /🆑
44 lines
1.2 KiB
Plaintext
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()
|