Commit Graph

533 Commits

Author SHA1 Message Date
Matthew Olker
b950af9bac hotfix zh language shadows 2024-06-12 22:19:30 -04:00
ysh4296
c71d794d97
[Bug] remove playing tween with clear in form modal ui (#2122) 2024-06-12 10:03:26 -04:00
prime
0c85823645
[Enhancement] Golden IVs Chart when all IVs are perfect (#2019)
* golden chart for perfect IVs

The IVs chart is now golden in case all IVs are perfect.

A few overrides have also been added to make testing easier:
- the opponents IVs can be overridden
- the color can be modded via the window.perfectIVsChartColor variable.

* added perfectIVsChartColor to window

* added changes as requested

- removed global variable
- removed chart versatility
- changed color
2024-06-12 09:56:23 -04:00
Jannik Tappert
6e52bc7980
[Localization] Ability Bar can now be localized. In a way that pokemonName abilityNa… (#1921)
* Ability Bar can now be localized. In a way that pokemonName abilityName and passive string can be ordered freely

* Update src/locales/ko/fight-ui-handler.ts

Co-authored-by: returntoice <dieandbecome@gmail.com>

* Update src/locales/de/fight-ui-handler.ts

* Update src/locales/de/fight-ui-handler.ts

---------

Co-authored-by: returntoice <dieandbecome@gmail.com>
2024-06-12 09:45:20 -04:00
Opaque02
576bcf7bdb
[Bug] Fixed a bug where genderless and non shiny pokemon could show the new gender or shiny indicator (#2090) 2024-06-11 11:34:11 -04:00
Matthew Olker
8c596c6f33 update zh font to unicode to fit both 2024-06-10 23:21:19 -04:00
Matthew
8d75670a81
[UI] egg and starter formatting (#2043)
* egg and starter formatting

* localization update

* localization update

* fix local voucher test

* pr comments

* pr comments

* account for new font
2024-06-10 21:58:01 -04:00
Matthew
5248160112
add zh localization font (#2066) 2024-06-10 21:36:09 -04:00
Adrian T
5d358fc57f
[Enhancement] Refactor egg counter (#1996)
* refactor egg counter

* add documentation
2024-06-10 20:20:00 -05:00
Adrian T
65ddd49d64
[Enhancement] Move event files to a central directory (#1918)
* Move events to a central directory

* Update modifier import

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* remove old battle-scene-events

* Move to field events

* Update battle-scene.ts

---------

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>
Co-authored-by: Benjamin Odom <bennybroseph@gmail.com>
2024-06-10 20:19:07 -05:00
SquillWall
a97933fe4c
[Bug] Fix inputs being annoying in the corner of the screen again (#2054) 2024-06-10 16:19:06 -04:00
José Ricardo Fleury Oliveira
36f3cc6b47
[Localization] Localizing "Loading..." text (#1822)
* localized "Loading..." texts

* fixes
2024-06-10 13:33:48 -04:00
Dakurei
c2375a0f5d
[Enhancement] Fix - Adjusts the color of the remaining PPs correctly to the theme (#2045)
+ Choose colors adapted to provide a contrast that facilitates reading (ratio of 3.0 or more)
    Tool used: https://webaim.org/resources/contrastchecker/
  + Refactoring of the condition to avoid unnecessarily assigning variable several times depending on the contents of 'ppPercentLeft'
2024-06-10 13:30:02 -04:00
SquillWall
f672ecc8ed
[Bug] resolve issue with input text persisting in top left of game screen in certain cases (#1982)
* resolve issue with input text persisting in top left of game screen in certain cases

* Clean up ui logic for fix
2024-06-10 11:41:01 -05:00
José Ricardo Fleury Oliveira
29d9ac7038
[Localization][pt] move pokemon-info-container label 1 pixel to the right (#2041) 2024-06-10 10:55:10 -04:00
Adrian T
7d55c165df
[QoL] add dynamic default pp color (#2039) 2024-06-10 10:46:08 -04:00
Opaque02
5de0185c0a
[Bug] Fixed bug where pokemon info container shows form of pokemon that doesn't have it if the previously caught pokemon has a form (#2029)
* Fixed bug where pokemon info container will show form of a pokemon that doesn't have it if the previously caught pokemon has a form

* Updated pokemonFormText to also disable interactive section if there was one
2024-06-10 01:41:06 -04:00
Opaque02
91abddb693
[QOL] Updating pokemon-info-container to show what is new when you catch/hatch a pokemon (#1754)
* Adding UI elements for new gender, ability and nature

* Added new indicators for shiny, gender, ability and nature

* Changed position of gender icon to top left

* Changes with logging and old (+) indicators for nature, form and ability

* Updated to remove old code and comments, as well as various console logs

* Updated commented code

* Addressing PR feedback

* Updated form to have a label and form name, along with cutting off the form name if it's too long

* Updated stats container to move some labels around so there's less text clumped together

* Removed some old commented code

* Fixed some issues with typing and naming

* Accidentally pushed my overrides.ts before :). Sorry!

* Updated the form name's hover over section to only work when the text is truncated

* Updating the gender check to work off DexAttr instead of a weird 2

---------

Co-authored-by: Temps Ray <temps.ray@gmail.com>
2024-06-09 23:44:38 -04:00
kvngrnr
aba9310ddf
[Enhancement] Color code for used PP in fight UI (#2014)
* Colorcode pp in fight ui if only half/quarter of maxPP is left

* Use three-level color coding for remaining pp

* use if/else for calculating pp color

---------

Co-authored-by: Kevin Greiner <greiner@infai.org>
2024-06-09 15:30:33 -04:00
ReneGV
fdc2d1cd02
[enhacement] Show Egg tier icon on starter UI (#1933)
* Show Egg tier on starter UI

* Use CamelCase on method name

* Remove egg if evolved

* Adding ts-doc
2024-06-09 12:45:21 -04:00
Jannik Tappert
a99bcbce3d
[Localization] Achievements are now based on Player Gender (because some languages differ based on that). (#1721)
* Achivments(localization of name and description) now depend on the player gender

* Fixed Name in ptBr config

* Now the achivments are also shown with a gender specific title

* Changed it so it checks if PlayerGender is undefined first

* Update src/locales/de/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/locales/en/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/locales/es/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/locales/fr/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/locales/it/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/locales/ko/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/locales/pt_BR/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/system/voucher.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/locales/zh_CN/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/locales/zh_TW/config.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/ui/achv-bar.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/ui/achv-bar.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/ui/achv-bar.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/ui/achv-bar.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/system/achv.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/system/achv.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/system/achv.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/ui/achvs-ui-handler.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/ui/achvs-ui-handler.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* Update src/ui/achvs-ui-handler.ts

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>

* instantiate player gender on in AchvBar constructor

* Reverted the change made only for the tests. And adjusted the import to use the new enum file

* Changed a import to make vite build it again correctly

* Again some changes to the imports for the github docs that was complaining

* The new challenges are also now localized and gender based

* Readded getDescription

---------

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>
Co-authored-by: ImperialSympathizer <imperialsympathizer@gmail.com>
2024-06-09 12:40:23 -04:00
Xavion3
d06e5d2fc6
Fix doubles battles bugs with challenges (#1986)
* Fix doubles battles bugs with challenges

* Make a fully illegal party gameover instead of error
2024-06-09 14:37:33 +02:00
SquillWall
a1171eceb9
[QoL] Show currently bound controls on starter menu for last active device (#1859)
* show currently bound controls on starter menu for last active device

* add special handling for touch controls

* remove hardcoded controls for all locales
2024-06-09 03:35:11 +02:00
Yentis
3f9eaf4a5d
Add setting for showing type effectiveness hints (#1061)
* type hints

* fix overwritten change

* don't set color to white, just leave it unchanged

* remove unrelated code

* don't show hints if no opponents, use type effectiveness instead of move effectiveness

* fix color not going back to white when new opponent is sent

* move effectiveness to move info container

* add effectiveness overlay, partial hints only show move effectiveness, improve colors

* lint

* docs

* remove full hints, move container to right of enemy info box

* hide effectiveness while flyout is visible

* move setting to display, use default style color instead of white
2024-06-08 15:33:13 -04:00
José Ricardo Fleury Oliveira
480a2568a9
[Localization] Fixed the localization of getModeName and "Wave" text (#1953)
* localized getModeName

* wave fix
2024-06-08 11:28:45 -04:00
José Ricardo Fleury Oliveira
7cee16cee2
[Localization] Localized game-mode and save-slot-select-ui-handler (#1728)
* localized game-mode and save-slot-select-ui-handler

* Update src/locales/de/game-mode.ts

Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com>

* Update src/locales/de/save-slot-select-ui-handler.ts

Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com>

* Update French save-slot-select-ui-handler.ts

* Update French game-mode.ts

* Update French game-mode.ts

* Update Spanish game-mode.ts and save-slot-select-ui-handler.ts

* fixes

* fix 2

* Update src/locales/ko/game-mode.ts

Co-authored-by: returntoice <dieandbecome@gmail.com>

* Update src/locales/ko/save-slot-select-ui-handler.ts

Co-authored-by: returntoice <dieandbecome@gmail.com>

* fix 3

---------

Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com>
Co-authored-by: Lugiad <adrien.grivel@hotmail.fr>
Co-authored-by: GoldTra <ericpazos02@gmail.com>
Co-authored-by: returntoice <dieandbecome@gmail.com>
2024-06-08 11:03:01 -04:00
Lee ByungHoon
a4cb75aaf0
[Bug] Fix to show current locale in setting (#1942)
* [Bug] Fix to show current locale in setting

* Add default value of lauguage option
2024-06-08 10:15:53 -04:00
Xavion3
8142f26833
Fix endless starter points (#1941) 2024-06-08 15:31:31 +10:00
Xavion3
696ff6eae3
Add Challenges (#1459)
* Initial challenge framework

* Add type localisation

* Change how challenges are tracked

Also fixes the difficulty total text

* MVP

Renames challenge types, temporarily hides difficulty, and implements challenge saving.

* Attempt to fix one legal pokemon in a double battle

* Make monotype ignore type changing effects

* Make isOfType correctly detect normal types

* Try to fix double battles again

* Make challenge function more like classic

* Add helper function for fainted or not allowed

* Add framework for fresh start challenge and improve comments

* Try to fix evolution issues

* Make form changing items only usable from rewards screen

* Update localisation

* Additional localisation change

* Add achievements for completing challenges

* Fix initialisation bug with challenge achievements

* Add support for gamemode specific fixed battles

Also make monogen challenges face the e4 of their generation

* Add better support for mobile in challenges

* Localise illegal evolution/form change message

* Update achievement names

* Make alternate forms count for monogen

* Update monotype achievement icons

* Add more comments

* Improve comments

* Fix mid battle form changes

* Reorder mode list

* Remove currently unused localisation entry

* Add type overrides for monotype challenges

Meloetta always counts for psychic and castform always counts for normal

* Change how form changes are handled

Now attempts a switch at the start of each turn instead of immediately

* Add start button to challenge select screen

* Make starter select back out to challenge screen if using challenges

* Fix daily runs

* Update tests to new game mode logic
2024-06-08 01:07:23 -04:00
Matthew
3022aabc32
Cleanup format, show correct value for money rewards (#1926) 2024-06-08 02:09:12 +01:00
Greenlamp2
1a149bfa04
[Testing] Flexible Testing Wrapper for Phaser-Based Battle-Scenes (#1908)
* refactor executed code while importing and initializing all of these in loading-scene

* reset to main

* fix server url

* added rule no-trailing-spaces

* made progress

* test somme data from a session save is working

* trying to launch a battle

* added fetch wrapper to load data locally

* trying to mockAllSettled

* pushPhase & shiftPhase

* check integrity of exported session

* set toke + loggedInUser in tests

* progress on starting new battle

* tring to test phase but it's async

* mocking fetch

* working mock fetch

* need to handle pile of data

* attempt to use real phaser classes

* reorder overrides

* refactored to use some real classes from phaser

* removed useless things

* started to work on some container mock

* finished the mockContainer time to add some logic

* some more mock containers

* removed addMethods since there is the mock classes now

* commented issues

* attempt to create mockTextureManager

* fix tests

* mockSprite & mockText

* yes but not really

* yes but not really

* fix tutorial callback

* reached mode title

* added achievement tests

* fix test achievements with current state of mock

* correct sequence loading for BattleScene with mockLoader !

* deep dive into next step

* working wait until starter selection screen

* added newGame method into wrapper

* expect to save_slot

* trying to manage pokemon sprite for getAll without success yet

* added test for egg output

* fixed egg test for June

* fix tests + locate next issue to fix

* we are in battle baby

* added new game in one-line

* export is working but export only what's in the fetch

* fix start game as guest

* refactored how we start a battle + cleanup

* overrided mewtwo but issue with currentBattle

* refactor: rename InitAchievements to initAchievements

* added missing mock method

* override level and pokemon forms working as intended

* bringToTop Obj

* remove launch battle in achivement test

* fix getIndex when same pokemon

* can run all tests

* first attack, faint, and shop modifiers, MockClock

* on method for container

* added doAttack one-liner

* one-line export data

* removed throw error

* feat: Make `scenes` property of `GameWrapper` class public

The `scenes` property of the `GameWrapper` class was changed from private to public. This change allows external access to the `scenes` map, which is used to store Phaser scenes. This modification was made to enable easier manipulation and interaction with the scenes in the game.

* correction

* removed CanvasRenderer

* added a param to remove console.log and added a param to preven scene create call

* fix encounter wave 30 when it's a trainer

* test double-battle

* test fight without KO

* test double fight no ko

* fix crashing texture + added Text wrapper to log fight

* fix tests on boss - trainer - rival

* chore: Refactor BattleScene initialization and add new phases

Refactor the BattleScene initialization code to remove unnecessary delay and improve performance. Also, add new phases for the title and unavailable states to enhance the game experience.

* rework of Game tests

* skipFn is working

* added onNextPrompt and restore Og Start

* better newGame

* added skipFN in remove

* not yet working test but updated interceptors

* do attack work but not on PostSummonPhase phase when there is mention of silcoon and wurmple

* error located, it's just a double fight, i was not there yet

* single OHKO & double no OHKO

* added expirationFn into next prompt

* all tests are passing

* working test on non damaging move from opponent

* cleaned a bit

* removed phaser initialisation on every tests

* renamed test file

* added load system data

* added some ability support

* added onKill & onSummon abilities test

* removed useless test + cleanup

* removed useless test + cleanup

* fixed tests after merge main

* added itemHeld endTurn trigger test (toxic orb)

* added runFrom..To

* added mustRun to assert currentPhase

* added no-miss move to test things

* cleaner restore mock

* fix test

* fix moxie test + game speed

* improve test speed

* added onOurself and onOpponent mvoe test

* added onDamage test for tackle

* removed timeout in intervals to run tests faster

* cleanup

* added never crit override + separate file per test + remove randomness in randBattleSeedInt

* move folders

* better org

* renamed itemHeld folder to items

* fix deploy.yml

* cleanup

* simplified the gameManager start battle and allow single pokemon in party

* remove the need of mode development

* added input handler to test inputs + remove time from phaser into inputController

* added keyboard support

* added fakeMobile support

* added details

* removed a console.log + added logUp

* move test to folder

* fixed canvas issue

* added starter select tests

* added some more test on starter-select

* added battle-order tests

* added battle-order tests

* fixing Phaser RNG

* ordering stats for better reading

* fix tests for main

* adapt battle-order test to be more readable

* fix merge

* fix some errors and silent all errors from gameWrapper since it's not possible to avoid them

* fix mocks to manage childs & stuffs

* added some docs

* fix achievement test

* removed an unused file

* separate misc tests to clean battle.test file

* added a basic french lokalization test

* added i18n where it needs to be used only

* revers extracted method

* removed unused method

* removed handler fetch since we do not test anything server related

* fix test with handlers removed

* added intrepid sword test

* fix enum exp party

---------

Co-authored-by: Frederico Santos <frederico.f.santos@tecnico.ulisboa.pt>
2024-06-07 18:33:45 -04:00
prime
f5f98ec537
[Bug] fixed wrong stacking of move info overlay issues (#1888)
* fixed wrongly stacking overlay issues

- starter selection
 - IVs are now behind the overlay
 - the overlay should clear when exiting it via controller (requires tests as i don't have a controller)
- TM
 - will prevent C/Shift from showing the overlay until the next item selection, when selecting a TM as item reward.
 - will prevent C/Shift from showing the overlay when canceling item selection

* removed reference to previously deleted resource

* fixed override
2024-06-07 16:45:49 -04:00
Lee ByungHoon
d592187f2c
[Localization] Add localization in party-ui-handler (#1712)
* [Localization] Add localization in party-ui-handler

* [Localization] Add "Release", "Apply", "Teach" localization, changed translation of Korean

* [Localization] Translated party-ui-handler's localization to Deutsch
2024-06-07 15:08:34 -04:00
HighMans
17edaeb708
[QoL] Sort items on summary screen (#1880) 2024-06-06 13:13:14 -04:00
Lee ByungHoon
081d813540
[Feature] Move to start button when you can't add party anymore (#1673)
* [Feature] Move to start button when you can't add party anymore

* Add comment about #1673

* Update starter-select-ui-handler.ts

---------

Co-authored-by: Benjamin Odom <bennybroseph@gmail.com>
2024-06-06 10:12:19 -05:00
SeafoamQueen
5ac1b7245f
[Feature] Refactored Game Settings UI navigation menu and sorting (#1860)
* Refactored settings UI menu options and added the battle style setting

* Removed the new Battle Style setting. It will be added in a seperate PR.

* Fixed typo and spacing
2024-06-06 10:38:54 -04:00
Frede
40328d5712
[BUG] Fix Move Info Overlay Scroll Bug (#1856)
* Added "Skip Dialogues" option (if at least 1 classic win)

* Removed error sound and hide option instead when classic wins = 0

* Add skip dialogues option to Unlockables and show unlocked message on first classic win

* Only skips seen dialogues, removed dialogue option from unlockables, seen dialogues get saved to local storage

* oops

* dont show charSprite when skipping a dialogue, small fixes

* correctly reset move description scrolling when changing move

* override fix

---------

Co-authored-by: Frederik Hobein <frederik.hobein@nterra.com>
2024-06-06 08:22:37 -05:00
flx-sta
a8489cc707
[Bug] Revert start-label text to translation (#1855) 2024-06-06 01:18:54 -04:00
Benjamin Odom
5e52be676f
[QoL] Add Time of Day Widget to Arena Flyout (#1846)
* Time of Day Sample

* Add Proper Time of Day Tracking

* Add Settings
2024-06-05 22:57:55 -05:00
prime
1c98106642
[QoL] Move Info Overlay (#1585)
* move info implemented for starter selection

a move info box is displayed when editing the starter moveset.

also menus have now onHover triggers.

todo:
- show ui when selecting TMs
- show ui when selecting moves to remember (memory mushroom)

* More Move Info Overlays

Added overlays during Memory Mushroom use and when viewing TMs.
Furthermore a settings option can enable/disable those overlays.

* Added missing ko language entry

... though translation still remains necessary

* updated ui

also added overrides for item rewards

* minor ui update

moved values to the right in the tm move info box

* fixed typedoc issues

* removed settings in to prepare for merge

* updated settings option

added settings option to new settings implementation

* minor changes

removed unused graphic
moved settings option to accessibility
2024-06-05 20:28:12 -05:00
flx-sta
283714bd0f
[Refactor] Move enums from game-data into their respective files in src/data/enums (#1837)
* move PlayerGender enum into src/data/enums/player-gender.ts

this is necessary to avoid circular dependencies which did crash tests in the past (in PRs)

* Update settings.ts

* Update game-data.ts

* Update summary-ui-handler.ts

* Update ui.ts

* move Passive & GameDataType enums into own files
2024-06-05 19:11:07 -05:00
Frede
fe732bbbe6
[QoL] Pokemon Info Container hides Enemy Modifier Bar (#1820)
* Added "Skip Dialogues" option (if at least 1 classic win)

* Removed error sound and hide option instead when classic wins = 0

* Add skip dialogues option to Unlockables and show unlocked message on first classic win

* Only skips seen dialogues, removed dialogue option from unlockables, seen dialogues get saved to local storage

* oops

* dont show charSprite when skipping a dialogue, small fixes

* pokemonInfoContainer always on top of battle UI when shown

* removed setDepth and rather hide enemyModifierBar

---------

Co-authored-by: Frederik Hobein <frederik.hobein@nterra.com>
2024-06-05 10:09:06 -04:00
Matthew Olker
7eb0e8e77d revert pokemon info container depth change 2024-06-04 21:45:36 -04:00
Matthew Olker
5464f964c9 add more gameobject names for debugging 2024-06-04 21:06:46 -04:00
Frede
cfe9b3303a
[QoL] Pokemon Info Container always on top of Battle UI (#1782)
* Added "Skip Dialogues" option (if at least 1 classic win)

* Removed error sound and hide option instead when classic wins = 0

* Add skip dialogues option to Unlockables and show unlocked message on first classic win

* Only skips seen dialogues, removed dialogue option from unlockables, seen dialogues get saved to local storage

* oops

* dont show charSprite when skipping a dialogue, small fixes

* pokemonInfoContainer always on top of battle UI when shown

---------

Co-authored-by: Frederik Hobein <frederik.hobein@nterra.com>
2024-06-04 21:05:25 -04:00
Benjamin Odom
d04010226d
[Bug] Fix Leppa Berries not Updating Flyout PP (#1806)
* Fix Leppa Berries not Updating Flyout PP

* Code Cleanup

* Update battle-flyout.ts
2024-06-04 16:59:39 -05:00
Jannik Tappert
a8205ae819
[Bug] Handle if the browser gives a long form of a language (like "de-DE") … (#1795)
* Handle if the browser gives a long form of a language (like "de-DE") for cases where we only have the short form "de".

* Changed it so that now resolved Language is now used anywhere. This is basically what i orignally did manually but provided from i18next directly
2024-06-04 15:11:02 -05:00
Benjamin Odom
98cff12fd1
[QoL] Add Arena Info Flyout for Weather, Terrain, etc. (#1734)
* Initial Commit

* Add Time of Day Icons and Remove Fight UI Dependancy

* Rename to Match

* Update battle-scene.ts

* Add Settings

* Add Comments
2024-06-03 21:18:09 -05:00
Matthew
69da96d543
Settings Refactor (#1771) 2024-06-03 19:57:47 -04:00
Xavion3
ff0e4fbdf0
Implement Pity System (#1752)
* Implement Pity System

* Add comments and optimised worst case slightly
2024-06-03 15:43:52 -04:00