38 Commits

Author SHA1 Message Date
Maide
837eb1c806
En_Tk (#338)
* En_Tk

* PR

* Warnings

Co-authored-by: root <root@Careface.localdomain>
2021-11-20 12:10:37 -03:00
Isghj
89b9d90826
En_Kakasi (Scarecrow) (#279)
* EnKakasi: rebase progress into one commit

* EnKakasi: fixes to get compiling on master, still doesn't match

* EnKakasi: is this even progress?

* EnKakasi: docs and cleaning

* EnKaksi: damn it, that master merge really messed up more than I thought, after clean build something really weird is going on and now I REALLY need firstdiff

* EnKakasi: Back to building, NOT OK

* fixed a code

* only rodata left to fix

* EnKakasi: functions got removed in included functions

* EnKakasi: thanks to fig mentioning there were missing cases, OK

* EnKakasi: (OK) docs and cleaning

* EnKakasi: Init now matches

* EnKakasi: cleaning and docs

* EnKakasi: more cleaning and docs

* EnKakasi: forgot function declarations

* EnKakasi: spec

* EnKakasi: animation array symbols added

* EnKakasi: formater pass

* EnKakasi: type warning fix

* EnKakasi: little descriptor

* EnKakasi: OK thanks to AngheloAlf

* Apply suggestions from code review

Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com>

* Update src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c

Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com>

* Apply suggestions from code review

Splitting this into pieces to not have a huge pile of bugs

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* EnKakasi: wrong type of inverse flag

* Apply suggestions from code review

Batch 2

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* EnKakasi: RIP Anime

* Apply suggestions from code review

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* EnKakasi: Anim enum update

* EnKakasi: Removed text documentation

* EnKakas: return of THIS

* Update src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* EnKakasi: mystery solved but not understood

* Apply suggestions from code review

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* EnKakasi: rename EnKakasi_CheckAnimateSFX to EnKakasi_CheckAnimationSfx (no real reason to shorten Animation to Animate, and SFX is not initialism, its a shorten)

* EnKakasi: minor change to touch jenkins

* EnKakasi: is it loise-uni?

* EnKakasi: fixed skelanime changes

* EnKakasi: formater pass

* EnKakasi: requested changes

* Update src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* EnKakasi: removed un needed pad

* EnKakasi: removed redundant documentation comment

Co-authored-by: isghj8 <isghj8@gmail.com>
Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com>
Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>
Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
2021-11-18 14:33:23 -03:00
Maide
602f348928
En_Pm (#309)
* En_Pm

* Format

* PR

* a

* a

* Finally fixed?

* PR

* Fix enum
2021-11-11 22:41:59 -03:00
Tom Overton
c706b2be70
En_Baguo (Nejiron) OK and mostly documented (#351)
* Migrate data to C

* EnBaguo_Init OK

* EnBaguo_Destroy OK

* func_80A3B220 OK

* func_80A3B2CC OK

* func_80A3B2CC OK

* func_80A3B794 OK

* func_80A3B5E0 OK

* func_80A3B7B8 OK

* EnBaguo_Update OK

* func_80A3B8F8

* func_80A3BE24 OK, some other not-OK junk

* func_80A3BE60 OK (wow this is bad!)

* Document the blink system

* func_80A3C17C OK

* Document timer and fix warnings

* func_80A3C008 OK

* Rename x/y/z so it's clear they are positions

* func_80A3BE60 OK in a not-crazy way

* func_80A3B958 OK

* func_80A3BF0C OK

* Make the rotation a Vec3s

* Update the spec to use the built reloc

* Use ARRAY_COUNT instead of hardcoded length

* Document the state stuff

* Document NejironParticle

* Document the rolling rotation stuff

* unk_1BC -> maxDistanceFromHome

* unk_1B8 -> zRollDirection

* Name the two draw functions

* Name the static variables properly

* Name all other functions

* Clean up forward declares

* Last bit of documentation and cleanup

* Add an enum for the rolling direction

* Add explanatory comment

* state -> action and move action descriptions inline

* Use enum for Stone Mask

* Use "Setup" for the setup function

* Document the damage effect

* Add some space around the for-loop

* ./format.sh

* Use % 8 everywhere

* Use -= instead of += a negative number

* Switch order of max check

* Use CLEAR_TAG_POP enum value

* eyeIndexTemp -> eyeIndex

* visible -> isVisible

* Move enums above structs

* Merge animation system changes

* yDist fix

* Respond to review feedback
2021-11-05 10:14:22 -03:00
Maide
693c701025
Boss_02 (3 non-matching) (#324)
* Boss_02

* Fixups

* Warnings
2021-11-05 08:04:10 -04:00
Maide
31e4089a4b
En_Goroiwa (3 non-matching) (#375)
* En_Goroiwa

* Fix names

* Params

* Revert PR
2021-11-04 14:42:01 -03:00
Maide
5a4bceea2c
En_Wf (#370)
* En_Wf

* PR

* Fix make and actorfixer

* Format

* Warnings
2021-11-01 11:47:04 -03:00
Maide
829d1d4c2a
En_Po_Sisters (#345)
* En_Po_Sisters

* Tharo magic

* Rebase

* PR

* Fix make and actorfixer

* Format
2021-10-31 16:07:08 -03:00
Tharo
b1b114e142
Decompile graph.c (#274)
* Decompiled, 1 non-matching, add some bss reordering helpers

* Document stuff

* Review suggestions

* graphutil.c -> graphalloc.c

* Try to fix fault callback warnings

* Remove extra comments in GfxMasterList

* char pad -> u32 pad

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* Fix gameState

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Other suggestions

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>
2021-10-29 15:30:48 -03:00
Maide
de3fc29d51
En_Ot ~~(1 non-matching)~~ (#302)
* En_Ot

* Fix
2021-10-27 11:59:21 -03:00
Maide
c97a8e5225
En_Tite (#318)
* En_Tite

* Fix
2021-10-27 11:02:26 -03:00
Maide
a60c47a970
En_Fish2 (#292)
* En_Fish2

* Fix
2021-10-27 10:28:52 -03:00
Tom Overton
bfd1ab28a6
En_Giant OK and mostly documented (#346)
* Migrate data to C

* EnGiant_Destroy OK

* EnGiant_Init OK

* func_80B01A74 OK

* Comment what each of the quest items are

* Put a little comment for myself on func_80B01A74 because it was confusing me lol

* Very early names (they're all bad)

* func_80B01990 OK

* EnGiant_Update OK

* func_80B024AC OK

* func_80B023D0 OK

* func_80B024D8 OK

* func_80B02354 OK (this function is bad!)

* func_80B020A0 OK

* func_80B01EE8 OK

* func_80B01E84 OK

* func_80B0211C OK

* func_80B02234 OK

* unk_250 -> sfxId and label SFX

* func_80B02688 OK

* func_80B026C4 OK

* EnGiant_Draw OK

* Update spec

* Fix up the static data

* unk_24E -> alpha

* Document some of the animation stuff

* Name EnGiant_IsNotFreed

* Document the giant types better

* Minor cleanup

* Add explanatory comment

* Rename the functions in functions.txt too, whoops

* Document sFaceTextures and blink routine

* Document all the various animations

* Name EnGiant_PlaySound

* Document some functions and change an unknown to action

* Add an SFX id I missed

* Name all the action funcs

* Name last two functions

* Mark one case as unused

* Change func_800F5A8C to use arg0, arg1, arg2, etc.

* Move sFaceTextures to EnGiant_Draw and comment what they are

* EnGiant_IsNotFreed -> EnGiant_IsImprisoned

* Use booleans in EnGiant_IsImprisoned

* **/ -> */

* action -> csAction

* Make macros for all type conditional checks

* Add warning about inconsistency

* Document the cs actions

* Add some documentation to animation-changing functions

* Update the function name in functions.txt too

* Improve GIANT_TYPE macros

* Remove an unncessary early return

* Incorporate animation changes
2021-10-25 09:22:17 -03:00
Maide
94e6ebaec9
En_Fu (#343)
* En_Fu

* Fix non-matching, thanks Anon58
2021-10-11 16:48:03 -03:00
Maide
a2666a6ee0
En_Sw (6 non-matching) (#295)
* En_Sw

* spec

* Sw

* Fix
2021-10-11 13:41:02 -04:00
Maide
f059baa87f
En_Owl (#271)
* En_Owl

* a

* PR

* a

* Rebase
2021-10-10 21:36:24 -04:00
Connor Anderson
1713e8a97d
ovl_En_Ending_Hero6 OK (#333)
* All functions in z_en_ending_hero6.c matching

* Add data to z_en_ending_hero6.c

* Remove duplicate declarations

* Add symbols to undefined_syms.txt

* Address initial PR comments

* Add heading, rename variables, and remove U suffix

* Further variable renamings according to PR suggestions
2021-09-28 20:50:04 -04:00
Maide
9478fc760f
Thiefbird (#290)
* Thiefbird

* Fix enums

* Rename funcs

* PR
2021-09-28 17:56:25 -04:00
Maide
edb1dd4675
En_Zot (#320)
* En_Zot

* PR
2021-09-28 10:28:06 -03:00
Tom Overton
0f4bdbc020
Obj_Etcetera (Deku Flower) OK and somewhat documented (#326)
* Migrate data to C

* ObjEtcetera_Init OK

* ObjEtcetera_Destroy OK

* ObjEtcetera_Update OK

* func_80A7C690 OK

* func_80A7C718 OK

* func_80A7C168 OK

* func_80A7BE8C OK

* Make the draw functions take Actor*

* CollisionCheck_SetAC should take a Collider

* func_80A7BDC8 OK (with silly dummy label meme)

* func_80A7C1F0 OK

* unk_276 is almost certainly a u16 since I constantly have to cast it, so just retype it

* func_80A7BF08 OK

* Some minor cleanup

* Convert D_80A7C80C to array of CollisionHeader*

* Finish defining struct to prepare for func_80A7C308

* func_80A7C308 OK

* Move gameplay_keep symbols to variables.h

* Explanatory comment at the top

* Type gameplay_keep animation headers too

* Update the spec (why do I always forget this?)

* Rename func_80A7BDC8 to ObjEtcetera_PerformFlutter (name still up for debate)

* Name objIndex

* Document the types of flowers

* Name displayListPtr

* Name burrowFlag and provide a macro

* Name specialFlutterScale and clean up some things with newer understanding

* Give the draw functions (bad) names

* Name ObjEtcetera_Idle

* Name ObjEtcetera_Setup (name sucks but oh well lol)

* Name ObjEtcetera_ReturnToIdle. These names all suck but they're a start

* Document some of ObjEtcetera_Idle's behavior

* Name and document objectIds

* Remove the burrow macro because it's frankly more confusing for now

* Name the draw functions something slightly better

* MUCH better names for things + more documentation

* Clean up ObjEtcetera_Setup a bit

* Call it NUMBER_OF_FLOWER_TYPES instead

* A few more name changes

* Link -> Player in comments

* displayListPtr -> dList

* Trailing commas + format

* Move initialization of type up

* Improve conditional check

* Use BGCHECK_SCENE macro

* Move initialization of floorBgId up

* Use documentation comment style

* Match ObjEtcetera_DoNormalOscillation without a dummy label

* param_2 -> arg1

* Insert blank line after scoped pad

* OBJETCETERA_TYPE -> DEKU_FLOWER_TYPE

* Cleanup and rename enum

* Break up ObjEtcetera_Setup a bit and convert DekuFlowerType to an s32 to remove warnings

* Whoops, run format

* Delete leading 0 on struct comments

* Rename pad to requiredScopeTemp to match my other PR
2021-09-28 08:18:31 -04:00
rylieb
bc5c3866d5
Obj_Syokudai (Torch) OK and mostly documented (#306)
* Started uncommenting statics, but then realized this actor has BSS, lol.

* Import .data and .bss. Run format.sh.

* ObjSyokudai_Init OK and mostly documented.

* ObjSyokudai_Destroy OK and fully documented.

* ObjSyokudai_Draw OK and partially documented.

* Good progress on ObjSyokudai_Update, but NOT OK.

* Instruction match, but needs regalloc and stack.

* Stack is closer now.

* Obj_Syokudai OK, no new warnings, ran formatter.

* Documented .data and .bss variables.

* Final documentation pass before PR.

* Add header, fix build errors.

* Use COLTYPE_METAL and COLTYPE_WOOD macros.

* Apply suggestions from code review

engineer124's suggestions.

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Apply suggestions from code review

engineer124: WaterBox* instead of UNK_PTR

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Update src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c

engineer124: AC_HARD -> AC_HIT so Jenkins stops complaining

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Hopefully fix Jenkins via z_bg_lotus WaterBox*.

* Rename sp2C to waterBox in BgLotus.

* Run format.sh.

* Update include/functions.h

Change func_800F22C4 param_1 from s8 to s16.

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* Change func_801A5CFC param_1 to sfxId in prototype

* Document interactions.

* Run formatter.

* Clarify that posDiff is relative to stick *tip*.

* Changed interaction comparisons to better fit enum

* snuffTimer enum

* Added more #defines.

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>
2021-09-25 09:53:53 -04:00
Maide
5b9a825cad
Bg_Hakugin_Post (#258)
* Bg_Hakugin_Post

* PR

* a

* PR

* a
2021-09-21 18:08:09 -04:00
Maide
4796e6f61d
En_Railgibud (#268)
* En_Railgibud

* Match func_80BA57F8 (thanks Petrie, Simon, Anghelo)

* Match func_80BA5E18, thanks to engineer

* a

* PR
2021-09-19 22:46:56 -03:00
Maide
9312fe4d11
En_Sellnuts (#264)
* En_Sellnuts

* a
2021-09-19 10:39:39 -04:00
Maide
3c779d7fd5
En_Skb (#262)
* En_Skb

* a

* a

* a

* Func namesW
2021-09-19 10:05:21 -04:00
Maide
da1265f4bc
En_Dns (#241)
* En_Dns

* NBS

* PR

* PR

* Fix warnings

* PR

Co-authored-by: Angie <angheloalf95@gmail.com>
2021-09-02 12:27:11 -04:00
Maide
1f4973d9b4
En_Kgy (#244)
* En_Kgy

* NBS

* PR

* PR

* PR
2021-09-02 11:27:26 -04:00
Maide
e1cb76c258
En_Dnq (#240)
* En_Dnq

* NBS

* PR

* PR

* PR
2021-09-01 18:03:51 -04:00
Maide
e6d263b738
En_Dnk (#237)
* En_Dnk

* NBS

* PR

* PR
2021-08-24 19:38:19 -04:00
Andzura
3e0801890d
z_lifemeter (#247)
* z_lifemeter done.

* fix new warning I didn't saw. add variables.txt

* suggested changes

* add new texture ptrs to undefined_sym, changed heartTex & temp to TexturePtr in LifeMeter_Draw

* change hex literal to decimal and other small suggestions

* change bool to u32; change hexa literal to decimal in LifeMeter_IsCritical; renamed undefined sym to their D_02 addresses

* re-applied format.sh on z_lifemeter

* coding style fixes

* fix typo in undefined_sym

* named func and vars.

* changed modulo check

* add extra line after var declaration in LifeMeter_Draw

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

* changed unkTimer to camelCase; timer constant as decimal; flip some comparison in LifeMeter_Draw

* uncomment & rename func_ in functions.h

* Update include/functions.h

Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>

Co-authored-by: Andzura <andzura@andzura.fr>
Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>
2021-08-15 12:20:35 -04:00
Maide
9dd5821669
En_Dg (#233)
* En_Dg

* Macros & Anim struct

* NBS

* PR

* PR

* Sort funcs/externs
2021-08-08 17:10:31 -04:00
Maide
a0896b0895
En_Dnp (#239)
* En_Dnp

* PR

* NBS

* PR

* PR
2021-08-08 16:43:12 -04:00
Maide
f5cbbc3268
Daiku2 (#228)
* Daiku2

* PR

* Macros

* NBS

* PR

* Format
2021-08-08 15:28:45 -04:00
Maide
a35f091505
En_Dno (#238)
* En_Dno

* NBS

* PR

* PR
2021-08-08 14:05:52 -04:00
Maide
368b903341
En_Daiku (#230)
* En_Daiku

* Macros

* NBS

* PR

* PR
2021-08-08 12:38:47 -04:00
Maide
1836844ea8
En_Dinofos (#235)
* En_Dinofos

* PR

* NBS

* PR

* PR
2021-08-06 17:14:09 -04:00
Maide
ee2344bc8a
En_Dai (#229)
* Dai

* Stuff

* NBS
2021-08-04 18:41:40 -04:00
Tharo
7743e5a2c4
Overhaul the build system (#234)
* wip

* fix

* add disassembler

* Disasm builds OK

* Variable addends

* More wip

* Rodata migration implemented

* Cleanup old tools

* Try fix submodule -> subrepo merge

* git subrepo pull --force --remote=https://github.com/zeldaret/ZAPD.git tools/ZAPD

subrepo:
  subdir:   "tools/ZAPD"
  merged:   "602e609"
upstream:
  origin:   "https://github.com/zeldaret/ZAPD.git"
  branch:   "master"
  commit:   "602e609"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* Builds again but assets are totally broken

* git subrepo pull --force tools/asm-processor

subrepo:
  subdir:   "tools/asm-processor"
  merged:   "1ffdb08a"
upstream:
  origin:   "https://github.com/simonlindholm/asm-processor.git"
  branch:   "master"
  commit:   "1ffdb08a"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* More cleanup, move functions.txt and variables.txt to tools/disasm and rm tables

* rm z64compress in preparation for subrepo

* git subrepo clone (merge) https://github.com/z64me/z64compress.git tools/z64compress

subrepo:
  subdir:   "tools/z64compress"
  merged:   "eb11085c"
upstream:
  origin:   "https://github.com/z64me/z64compress.git"
  branch:   "main"
  commit:   "eb11085c"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* Fix asset extraction

* Fix diff-init make rule

* Split code bss

* Split assumed linker bug padding from assembly files

* add filelists for mm.us.rev1

* Maybe working, but I'm not sure

* add overlays to spec

* Add rodata to actos

* Everything compiles

* Make a lot of C files for code

* Add almost every file in code to spec

* whoops

* 3 code files left

* add scenes to spec

* More progress on progress.py

* Fix skelanime in spec

* audio files!

* Fix merge issues

* Fix some C files in code

* Fix remaining code files

* Use existing O1 C files in spec

* reorder boot order in spec

* update spec

* fault.c

* Convert relocs on completed actors, fixbaserom uses current rom name

* more boot files

* Add VT macros and script

* finish already existing boot files

* most of  libultra

* fix 64bits libultra files

* Use C files for libultra, wrap some functions in NON_MATCHING

* Remove duplicate of OS_CLOCK_RATE from fault.c

* C files for fbdemos

* delete dumb files

* bootstrap C files, still need to add them to the spec

* update fixbaserom

* boot OK?

* I forgot to commit the spec

* C for gamestates

* C for kaleido

* Change all includes to ""

* copy actor sizes script from oot

* I forgot to delete those files

* Basic C files for effects

* Add effects initvars names

* Remove mislabelled boot functions from header/txt

* Begin porting bootstrap_fx, some sizes

* Fix <>

* Fix enum

* Fix diff.py

* fix libultra stuff

* update regconvert

* update setup warnings

* add some missing ;

* Fix some makefile stuff and other fixes on some non_matching functions

* add executable flag in extract_baserom and fixbaserom

* fix relative path

* copy assist from oot

* fix map path

* another assist path fix

* Delete C files for handwritten files

* add code_801A51F0 to spec

* add gfxbuffers to spec

* Move rodata to top of each file when possible

* UNK_TYPEs for func_801A51F0

* Remove kaleido rodata from spec

* Update spec and undefined_syms for recent merge

* GCC warnings and fix errors in nonmatchings,

* round percentage numbers

* progress script: format changes

* progress: error on non-existing files

* fix warning in z_scene_table

* Match 2 nonmatchings in z_actor

* Warnings in lightswitch and invadepoh

* Fix warning in z_actor_dlftbls

* I though I fixed this one

* whoops

* Comment out CC_CHECK

* Removed redundant ultra64.h includes

* Update asm_processor, sorted boot_O1 into other folders, completed the fbdemo bootstrap, cleaned up undefined_syms

* Completed gamestates bootstrap

* Split kaleido_scope

* Remove section.h and segment.h, move keep object externs to a common location in variables.h

* Completed effects bootstrap

* Segmented address externs for effects, fbdemos, gamestates and kaleido

* Move actor data externs out of the if 0

* Segmented address externs for actors

* Prepare actionfunc detection

* fix script, how did it even work before

* Fix actionfunc script again, re-introduce some more intermediate prints to the disassembler

* Automated actionFunc detection in actors

* Segmented addresses from player .text

* rm old segment addrs script and fix build

* Move sizes folder to tools

* Make build.py executable

* New Jenkinsfile Prayge

* Remove numpy dependencies

* Add warnings_disasm_current.txt

* my bad

* Update spec and undefined_syms

* Add z_eff_ss_hahen to pametfrog

* git subrepo pull (merge) --force tools/z64compress

subrepo:
  subdir:   "tools/z64compress"
  merged:   "163ca2af"
upstream:
  origin:   "https://github.com/z64me/z64compress.git"
  branch:   "main"
  commit:   "163ca2af"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* Make z64compress print to stdout

* sneeky commit to update warnings tooling

* test

* Another test

* Mark fixing overlay reloc generating as a TODO

* Update warnings stuff

* Communicate the return code from running z64compress back to the Makefile through the wrapper

* Run formatter, remove extra commented copy of function

* Re-fix some includes

* Convert atan to hex to conform to decided style

* Some tidying up, remove c for fp and the other two handwritten code files

* BSS in z_collision_check & z_scene_proc

* add static back in

* Fix timerintr bss, add file to spec, some cleanup

* Remove externs

* Newline

* Readd enums

* Typo

* Colours

* Comments for hitmark enum values

Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>

* Improvements and suggestions

* Organize and remove unused imports and use env for python3 scripts, delete unused overlay.py

Co-authored-by: angie <angheloalf95@gmail.com>
Co-authored-by: Elliptic Ellipsis <elliptic.ellipsis@gmail.com>
Co-authored-by: engineer124 <engineer124engineer124@gmail.com>
Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>
2021-08-03 23:21:31 -04:00