1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-12-05 01:06:37 +00:00
Commit graph

36 commits

Author SHA1 Message Date
fig02
078e21f6c6
InitVars -> Profile (#2011)
* rename ActorInit

* rename actorInit

* rename initInfo

* EffectSs Profile

* _InitVars -> _Profile

* format, loose ends

* revert tutorial
2024-08-02 17:50:02 -04:00
cadmic
10bae68937
Match En actors A-C, and a few more (#1890) 2024-02-24 13:00:37 -05:00
cadmic
324db1d578
Replace most osSyncPrintf calls with PRINTF macro (#1598)
* Replace most osSyncPrintf calls with PRINTF macro

* DEBUG -> OOT_DEBUG
2024-01-12 10:38:13 -05:00
cadmic
cd917b0cb8
Create debug macros for common functions (#1597)
* Create debug macros for common functions

* Revert NDEBUG change

* MALLOCR -> MALLOC_R

* DEBUG -> OOT_DEBUG

* Use the same name for debug and non-debug matrix functions

* Fix file/line argument order

* Revert g[s]DPNoOp[Tag]

* Use SystemArena_MallocDebug directly in GameAlloc_MallocDebug

* MTXF_TO_MTX -> MATRIX_TO_MTX
2024-01-09 07:59:03 -05:00
engineer124
3d1ee33d7b
Document Actor "OfferTalk" (#1567)
* OfferTalk

* rm comment

* exch to offer in comment

* reword again

* Partial PR Review

* Actor_AcknowledgeTalking

* Actor_TalkOfferAccepted

* PR Review

* rm part of comment

* rm comment
2023-11-19 11:11:59 -05:00
Dragorn421
8718a5c8c0
Remove (ActorFunc) casts in initvars (#1571)
* Remove `(ActorFunc)` casts in initvars, use `/**/` trick for format

Achieved by using the following regex:

(ActorInit.*)(\n\s+)(.*)(\n\s+)(.*)(\n\s+)(.*)(\n\s+)(.*)(\n\s+)(.*)(\n\s+)(?:\(ActorFunc\))?(.*)(\n\s+)(?:\(ActorFunc\))?(.*)(\n\s+)(?:\(ActorFunc\))?(.*)(\n\s+)(?:\(ActorFunc\))?(.*\n\};)

replaced with

$1$2/**/ $3$4/**/ $5$6/**/ $7$8/**/ $9$10/**/ $11$12/**/ $13$14/**/ $15$16/**/ $17$18/**/ $19

plus a change from /**/ to #if 0 #endif in docs/

* Manual fixes
2023-10-30 10:19:16 -04:00
Dragorn421
ab90300062
Rename vt.h to terminal.h (#1339)
* `vt.h` -> `terminal.h`

* `VT_` -> `T_` (as in Terminal)

* `vt.h` -> `terminal.h` in includes too Pepega

* Sort out tiny terminal.h include inconsistencies

* Format

* -> `TE_`

* format

* `TE_` -> back to `VT_` (parkour!)

* explicit VT
2022-11-01 19:17:11 -04:00
Dragorn421
c0a0688dc5
Remove const from ActorInit initvars declarations (#1417) 2022-10-24 19:29:38 -04:00
Roman971
b0bfa9eb69
Fix asset file includes to always start with assets/ (#1260)
* Fix asset includes to consistently start with assets/

* Fix header paths in asset xmls to start with assets/

* Remove -Iassets from compiler options
2022-06-06 15:37:25 -04:00
Dragorn421
1a41694d58
Add enum for setup dls and name z_rcp.c functions (#1196)
* Introduce `SetupDL` enum

* wip

* wip

* Remove comments on each setupdl index

* Name setup dl functions by setupdl index

* `Gfx_SetupDl` -> `Gfx_SetupDL`

* Run formatter

* globalctx -> play

* fix regressions

* `Gfx_SetupDL` -> `Gfx_SetupDL_` (add separating underscore)

* `CallSetupDL` -> `SetupDL`
2022-06-03 18:25:48 -04:00
fig02
2e6279bc8e
PlayState Rename (#1231)
* global context -> play

* fix PlayState* PlayState
2022-05-21 14:23:43 -04:00
EllipticEllipsis
eadc477187
New relocation-generating program (#1016)
* Update makefiles

* git subrepo clone git@github.com:EllipticEllipsis/fado.git tools/fado

subrepo:
  subdir:   "tools/fado"
  merged:   "46c4d751a"
upstream:
  origin:   "git@github.com:EllipticEllipsis/fado.git"
  branch:   "master"
  commit:   "46c4d751a"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo.git"
  commit:   "2f68596"

* git subrepo pull tools/fado

subrepo:
  subdir:   "tools/fado"
  merged:   "88114ebce"
upstream:
  origin:   "git@github.com:EllipticEllipsis/fado.git"
  branch:   "master"
  commit:   "88114ebce"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo.git"
  commit:   "2f68596"

* A few ideas for computing dependencies

* Remove reserved identifiers from spec.h and util.h
and add required headers

* Fix a couple more headers

* Program for reloc prerequisites

* git subrepo pull tools/fado

subrepo:
  subdir:   "tools/fado"
  merged:   "36a905f72"
upstream:
  origin:   "git@github.com:EllipticEllipsis/fado.git"
  branch:   "master"
  commit:   "36a905f72"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo.git"
  commit:   "2f68596"

* Update makefile to make dependency files and use overlay's name

* git subrepo pull tools/fado

subrepo:
  subdir:   "tools/fado"
  merged:   "43c339a59"
upstream:
  origin:   "git@github.com:EllipticEllipsis/fado.git"
  branch:   "master"
  commit:   "43c339a59"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo.git"
  commit:   "2f68596"

* Change awk to grep, delete ZAPD files, gitignore elf

* Delete all the cfg files

* Fix memory leaks

* Rename and add coloured errors

* Makefile tweaks
- preprocess spec before grep
- split order prerequisites via phony target to reduce dependency edges
- remove `resources` target
- remove separate overlays targets
- use `$(SPEC)` throughout
- change to using filenames of relocs for overlay names via `$*`
- Rearrange targets to better reflect their categories

* Update gitignore

* Review

* Add a check for the reloc file name

* get_segment_by_name

* get_stmt_id_by_stmt_name

* Cleaning up

* algorithm change

* function rename

* Fix typos

Co-authored-by: angie <angheloalf95@gmail.com>
2022-02-06 14:40:26 -05:00
Dragorn421
a9284494f2
Use defines for actor flags (#873)
* Add ACTOR_FLAG_ defines

* Add ACTOR_FLAGS_ALL macro and use ACTOR_FLAG_* constants everywhere

* Remove unused ACTOR_FLAG_* constants

* actor flags in bigokuta & ko

* actor flags in obj_mure

* actor flags in stalfos, twinrova & ganon2

* actor flags in morpha & barinade

* name some previously missed actor flags

* found some comments using hex for actor flags

* Actor flags in ovl_En_Ganon_Mant

* Actor flags in EnWf

* Flags in en_zf

* Actor flags in BossGanon (FeelsOKMan)

* Remove `ACTOR_FLAG_NONE`

* Wrap expansion of `FLAGS` in parentheses

* `ACTOR_FLAGS_ALL` -> `CHECK_FLAG_ALL`

* Move `CHECK_FLAG_ALL` to `macros.h`

* Run formatter
2021-12-05 19:11:38 -05:00
fig02
e635e34265
Remove THIS macro (#1047)
* remove THIS

* fix

* forgot dorf
2021-12-04 11:33:00 -05:00
Tharo
a497f33bda
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy

* Fix merge

* Some more progress

* Fix merge

* More z_message_PAL

* Small progress

* More small progress

* message_data_static files OK

* Prepare z_message_tables

* Matched another function, small updates

* Attempt to use asm-processor static-symbols branch

* Refactor text id declarations

* Begin large text codes parser function

* Fix merge

* Refactor done

* Build OK, add color and highscore names

* Remove encoded text headers and automatically encode during build

* Fix kanfont

* Various cleanups

* DISP macros

* Another match aside data

* Further progress

* Small improvements

* Deduplicate magic values for text control codes, small improvements

* Tiny progress

* Minor cleanups

* Clean up z_message_PAL comment

* Progress on large functions

* Further progress on large functions

* Changes to mkldscript to link .data in the .rodata section

* data OK

* Few improvements

* Use gDPLoadTextureBlock macros where appropriate

* rm z_message_tables, progress on large functions

* 2 more matches

* Improvements

* Small progress

* More progress on big function

* progress

* match func_80107980

* match Message_Update

* match func_8010BED8

* done

* Progress on remaining large functions

* Small progress on largest function

* Another match, extract text and move to assets, improve text build system

* Small nonmatchings improvements

* docs wip

* Largest function maybe equivalent

* Fix merge

* Document do_action values, largest function is almost instruction-matching

* Rename NAVI do_action to NONE, as that appears to be how that value is used in practice

* Fix merge

* one match

* Last function is instruction-matching

* Fix

* Improvements thanks to engineer124

* Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup

* More variables labeled, use text state enum everywhere

* More labels and names

* Fix

* Actor_IsTalking -> Actor_TalkRequested

* Match func_8010C39C and remove unused asm

* More docs

* Mostly ocarina related docs

* All msgModes named

* Fix assetclean

* Cleanup

* Extraction fixes and headers

* Suggestions

* Review suggestions

* Change text extraction again, only extract if the headers do not already exist

* Fix

* Use ast for charmap, fix assetclean for real this time

* Review suggestions

* BGM ids and ran formatter

* Review comments

* rename include_readonly to include_data_with_rodata

* Remove leading 0s in number directives

* Review suggestions for message_data_static

* textbox pos enum comments, rename several enum names from Message to TextBox

Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: Roman971 <romanlasnier@hotmail.com>
2021-11-22 20:20:30 -05:00
louist103
781d497264
Extract the assets from most of the overlays (#985)
* remove fake match

* Fire and Ice arrows

* Light arrows

* Ganon otyuka and end title

* Oceff_Spot

* Add missing Vtx to arrows

* Update assets/xml/overlays/ovl_Arrow_Ice.xml

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

* Update assets/xml/overlays/ovl_Arrow_Light.xml

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

* Fix fire arrows

* Update assets/xml/overlays/ovl_Arrow_Fire.xml

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Update ovl_Bg_Ganon_Otyuka.xml

* Update src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Change a comment and rename a DList

* rename DList

* Jya cobra

* shd and elf_msg

* elf msg 2

* En Bili

* Remove extern form ice piece

* remove some externs

* en holl

* kanban

* make

* sda

* ssh and some cleanup

* replace undefined sym in en_kusa

* st

* oceff wipe 3

* oceff wipe

* oceff spot

* oceff spot

* oceff wipe 4

* Update VTXDIS

* update VTXDIS again

* fix sun song

* magic dark

* magic wind and oceff wipe 2

* magic fire and oceff storm

* Update src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Update assets/xml/overlays/ovl_En_Sth.xml.ignore

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Update assets/xml/overlays/ovl_Elf_Msg.xml

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Update assets/xml/overlays/ovl_Magic_Wind.xml

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* fix emptyDL, run formatter on en_ssh

* run formatter

* Update format.sh

* update to VTXDIS

* small change

* textureDL -> materialDL, vtxDL -> modelDL

* upper CASE

* setupDL -> materialDL

* GeometryDL->ModelDL and VisualDL->MaterialDL

* revert rcp.c

* revert holl.c

* another revert in rcp.c

* some u32 DL -> Gfx* DL

* the rest of dragorns comments

* git subrepo pull --force tools/ZAPD

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

* start updating overlays with static

* en sth OK

* git subrepo pull --force tools/ZAPD

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

* fix names of the overlays

* remove segment 128, add gameplay keep to global config file

* Fix end title and remove hex mode from VTXdis.c

* add code assets

Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com>
Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>
2021-11-08 20:51:45 -05:00
Dragorn421
f1d27bf653
Fix/cleanup/rephrase miscellaneous stuff (#983)
* Add parens around params usage in VEC_SET macro

* Remove unnecessary space character in a xml

* Use defines instead of magic values in head/tail magic comments

* Use `OS_USEC_TO_CYCLES` to make a time look better in `Graph_TaskSet00`

* `0x25800` -> `sizeof(u16[SCREEN_HEIGHT][SCREEN_WIDTH])`

* `0x803DA800` -> `0x80400000 - frame buffer size`

* Use `OS_VI_` defines instead of hex

* Add empty line after some variable declarations

* Remove unused `extern CutsceneData` in `z_bg_dy_yoseizo.c`

* `Matrix_MtxFToYXZRotS` does not use `MTXMODE_`

* Use `MTXMODE_` more

* Remove `ASCII_TO_U32`, use `'IS64'`

* Add explicit `!= NULL` in some ternaries

* Use `INV_CONTENT`, `AMMO` macros more

* Use `PLAYER_AP_` enum more to compare to `Player#heldItemActionParam`

* Get rid of lowercase hex (outside libultra)

* `gWindMill*` -> `gWindmill*`

* Format and small fix enums in `z_boss_mo.h`

* Use `CHECK_BTN_ANY` more

* Fix xz/xy mistake in comment in tektite

* Rephrase comments mentioning "the devs" in a more neutral way

* Clean-up some objectively useless parens

* Fix some negative values written as u16 instead of s16 in ichains

* `SKJ_ACTON_` -> `SKJ_ACTION_`

* Run formatter

* Fix unk_ offset of `TransformUpdateIndex#unk_10` -> `unk_0E`

* Remove comments using in-game text

* Remove `U` suffix from integer literals

* Revert "Remove `ASCII_TO_U32`, use `'IS64'`"

This reverts commit c801337dde.

* Use `PLAYER_STR_*` to compare to `CUR_UPG_VALUE(UPG_STRENGTH)`

* Add empty line after decl x2

* Revert "Use `PLAYER_STR_*` to compare to `CUR_UPG_VALUE(UPG_STRENGTH)`"

This reverts commit d80bdb32da.

* Make `CUR_UPG_VALUE(UPG_STRENGTH)` compare to integers (eventually needs its own enum)

* Only use `PLAYER_SHIELD_` enum with `Player#currentShield`

* Only use `PLAYER_TUNIC_` enum with `Player#currentTunic`
2021-10-02 23:17:09 -04:00
louist103
e3f1ccd902
Fix all headers to comply with C standard (#957)
* Fix all headers to comply with C standard

* fix a file in libultra

* Update include/stdbool.h

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Update stdbool.h

* Update z64animation.h

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>
2021-09-15 19:24:19 -04:00
Dragorn421
81830a6e8b
Cleanup translation comments (#924)
* `// Translates to:` -> `//`

* `// Translation: ([^"].*)` -> `// "$1"`

* Manual cleanup

* Manual cleanup in `src/code/`

* Use more lowercase for some all caps translations

* Move translations to end of lines where it fits under 100 bytes

* Move one translation to end of line manually

* Run formatter

* Cleanup in EnHeishi1 as suggested by Roman

* Update src/code/z_play.c

Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>

Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
2021-09-04 15:33:19 +02:00
Roman971
15c3a5eb91
Remove InitVars declarations from actor headers (#939)
* Remove InitVars declarations from actor headers

* Remove unused files in ovl_En_Ms
2021-09-01 15:03:52 -04:00
engineer124
1117783731
Macros: PLAYER -> GET_PLAYER(globalCtx), ACTIVE_CAM -> GET_ACTIVE_CAM(globalCtx) (#921)
* PLAYER -> GET_PLAYER(globalCtx)

* ACTIVE_CAM -> GET_ACTIVE_CAM(globalCtx)

* PR Suggestions

* formatter

* Add brackets

* remove from actorfixer.py

* Bring back actorfixer.py change
2021-08-31 12:22:03 +02:00
fig02
00a5edea71
Actor Struct Changes (and a few related things) (#617)
* reformat header

* type -> category

* done for now i think

* some more stuff

* first -> head

* focus

* flag comment

* ground -> floor

* remove asm, name wrapper funcs

* name func, format

* review

* targetPriority, format

* git subrepo pull --force tools/ZAPD

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

* comment

* review

* feet flags

* horse shadow
2021-01-18 16:04:04 -05:00
petrie911
3aa76152c5
En_Attack_Niw, En_Insect, z_skin_matrix, and z_skelanime matched (#493)
* Darkmeiro decompilation

Bg_Gnd_Darkmeiro decompiled, matched, and documented.

* give this a shot

* fix conflict

* one more try

* could be useful

* whoops

* ZAP2 stuff

* ZAP why

* ZAP again

* marginal improvement

* matched functions. Also fixed a serious lack of static

* format

* more static

* fixing a function prototype

* skelanime OK

* forgot .s

* skin matrix matched

* format
2020-11-23 21:34:32 -05:00
fig02
3c5fe66dcd
Use macros for oGfxCtx accesses (#465)
* fix colliderinit typo

* fix initchain

* reloc

* add defines

* add defines

* missed some on merge

* rename gfxCtx and add comment

* remove space
2020-10-29 17:31:09 -04:00
fig02
6e000fcc54
En_Elf Decompiled (#432)
* init matched

* everything but navi OK

* progress

* 4 left

* remove asm

* progress

* progress

* asm and spec

* remove comment

* suggestion

* review1

* use type enum

* name func

* overridelimbdraw

* review 2

* forgot one

* merge master

* format
2020-10-28 13:02:35 -04:00
Random
174af7384d
libultra cleanup (#215)
* cleanup libultra

* fixes

- use quotes instead of <> for includes
- add macros for zelda specific thread priorities
- fix Makefile
- properly format the remaining pfs structs

* fix button macros + add CHECK_BTN_ANY/CHECK_BTN_ALL

* remove ULTRA_ABS

* fix includes

* update z_player.c/z_lib.c + run format.sh

* merge upstream/master

* fix include in En_Goroiwa

* fix includes
2020-10-03 11:22:44 -04:00
Roman971
14191307e9
Decompile Player (#387)
* Setup player decomp

* Decompile z_player.c and z_player_lib.c

* Decompile remaining z_player.c functions

* Various player improvements

* Player progress (some non matchings and .data migrated)

* Player progress (reposition data and fix some non matchings)

* Cleanup, improve and document parts of z_player_lib.c/z_player.c

* Fix player renames in z_en_st.c

* Fix missing open/close disps in z_player.c

* Minor player fixes

* Address player comments
2020-09-18 21:45:39 -04:00
Roman971
2a2fdf7f3e
Introduce OPEN_DISPS/CLOSE_DISPS macros (#360) 2020-08-29 19:00:17 -04:00
AdamKiddle
7a9c51375b
Elf_Msg, Elf_Msg2 OK (#317)
* matched func_809AD700, ElfMsg2_Init

* func_809AD968 done

* func_809AD978 and func_809AD9F4 done

* func_809ADA28 done

* ElfMsg2_Update Done, ElfMsg2_Draw Started

* whole file decomped

* Matching and all symbols defined

* Formatting changes, not currently building

* run format.sh

* fixed typos in comments

* Changes to reflect comments

* C file matching, polish needed

* making parenthesis usage consistent

* Documenting draw function, Vtx and Gfx arrays

* Added japanese translation comments

* line spacing fix

* renaming stuff

* Early return in Draw

* naming updates

* Cleaning up names, comments and formatting after the merge

* comment cleanup

* more cleanup

* More cleanup

* Adding commas at end of arrays so they look nicer :)

* more cleanup

* removing unnecessary parentheses

* comment and code changes

* Name changes

* Renamings

* Removing documentation at top
2020-08-18 14:31:34 -04:00
Roman971
1425678d8a
More actor cleanup Part 3 (#118)
* Add custom types for actor specific functions (like actions)

* Add a forward struct declaration for all other actors
2020-05-05 18:53:15 -04:00
Roman971
f114df8929
More actor cleanup Part 2 (#116)
* Change all main actor functions to take a 'Actor* thisx' argument

* Change all actor callbacks to also take a 'Actor* thisx' argument
2020-05-04 15:02:51 -04:00
Lucas Shaw
045a92d7c3
Big actor cleanup (fixed) (#69)
* Started doing cleanup

* did more work

* did more migration

* migrated more rodata and worked on some structs

* did more work

* Removal of ROOM field from initvars, some rodata migration, some string decompilation

* General update

* Decompiled vt strings

* Tool work

* Tool improvements

* 270 overlay rodata files remaining

* better float handling

* floats

* Many more floats

* migrated boss_mo

* assorted fixes

* Migrated 10

* tool improvements

* migrated 10

* 10 more

* 1 more

* did a few more

* fixes

* 10 more

* more floats

* Did some more, updated migrate-rodata.py to 'modify' the C file after processing in order to make to compiler process it as if it was changed.

* removed changes made to script by accident

* migrated largest rodata - ovl_fishing

* Did some more

* 114 remaining

* 99 left !

* almost done migrating rodata

* did some more, done for tonight

* almost done, tried add support to the script for z_player

* All possible rodata migrated in actor overlays

* update

* removed static from all overlays, ran format.sh

* Removed unknown actor structs

* converted a few floats

* Added new lines to header files that were missing them. Removed unused asm files

* Removed unused asm files

* Formatting newlines

Further formatting

spacing

.float spacing

More space formatting

More spacing formatting

Removing .balign 4 after floats

Co-authored-by: Ethan Roseman <ethteck@gmail.com>
2020-04-14 14:16:34 -04:00
Roman971
3acb30694b Fix actor init vars brace style under bootstrap comments 2020-03-24 00:35:35 +01:00
Roman971
51290f6126 Partially format header files 2020-03-22 22:50:15 +01:00
Roman971
8cfe7cce9f Format all src C files 2020-03-22 22:20:03 +01:00
Jack Walker
087f561f77 First proper commit. 2020-03-17 00:31:30 -04:00