1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-12-29 08:16:11 +00:00
Commit graph

166 commits

Author SHA1 Message Date
Roman971
e29b77919b
Decompile most effect files in "code" (#144)
- `z_effect`: Matched and essentially all documented.
- `z_eff_spark.c`: Decompiled (1 non matching left) and mostly documented.
- `z_eff_shield_particle.c`: Matched and mostly documented.
- `z_eff_blure.c`: Decompiled (5 non matchings left) and partially documented.
- `z_effect_soft_sprite.c`: Matched and mostly documented.
- `z_eff_ss_dead.c`: Matched but not documented.
- `z_effect_soft_sprite_dlftbls.c`: "Matched" (only data, contains the effect ss overlay table).
- `z_effect_soft_sprite_old_init.c`: Not decompiled, but functions are categorized by effect ss overlay. And they should be decompiled at the same time as their corresponding effect ss in the future.

Other changes:
- Added a lot of types/enums to `z64effect.h`and moved+renamed some structs from `z64.h` to this header
- Added effect ss overlay segments to `segment_symbols.h` and effect ss init vars to `initvars.h`
- Added a macro called `VTX_T` to generate a `Vtx_t` in the same style as `VTX`
- Fixed `flg_set.c` .bss to be in the right file
- Removed `tools/overlayhelpers/batchdisasm` since it's no longer relevant
- Removed unused leftover asm from recent PRs
2020-05-18 14:24:00 -04:00
Zelllll
785011c33c
Decompile En_Dha (#130)
* Decompile En_Dha

* Removed original reloc data and fixed actor struct

* Update z_en_dha.c

- Removed unnecessary line breaks
- Changed `colliderSphere` to `collider` and `colliderSphereItem` to `colliderItem`
- Removed unnecessary & pointers
- Renamed various functions

* Update z_en_dha.h

Changed collider names

* Fixed all issues with `En_Dha`

* Update src/overlays/actors/ovl_En_Dha/z_en_dha.c

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

* Update src/overlays/actors/ovl_En_Dha/z_en_dha.c

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

* Update src/overlays/actors/ovl_En_Dha/z_en_dha.c

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

* Update src/overlays/actors/ovl_En_Dha/z_en_dha.c

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

* Update src/overlays/actors/ovl_En_Dha/z_en_dha.c

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

* Update src/overlays/actors/ovl_En_Dha/z_en_dha.c

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

* All suggested changes applied

* Update z_en_dha.c

Fixed unresolved changes that were marked as resolved. Whoops!

Co-authored-by: Zelllll <elijah@DESKTOP-QDIECM7.localdomain>
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
2020-05-18 04:34:34 -04:00
Random
1a51ad5944
Decompile z_vr_box_draw.c (#138)
* Decompile z_vr_box_draw.c

* Rename vrbox to skybox

* run format.sh
2020-05-15 05:14:07 -04:00
Random
d556999b2b
Decompile remaining z_vis... files (#131)
* Decompile z_vismono.c / code_800AD920.c

- z_vismono.c: OK
- code_800AD920.c: OK

* Minor fixes in PR #131
2020-05-15 05:02:39 -04:00
krimtonz
44ffb7ec62
Decomp game.c (#129)
* decomp most of game.c

* improve GameState_DrawInputDisplay matching

* fix merge conflicts

* pr suggestions

* remove builtin math functions
2020-05-14 19:11:33 -04:00
Random
08d9fee6e4
Decompile speed_meter.c and add VIEWPORT_INIT macro (#127)
* Decompile speed_meter.c and add VIEWPORT_INIT macro

- speed_meter.c: OK
- Add VIEWPORT_INIT(viewport, by, rx, ty, lx) macro

* get rid of some magic numbers

* use early return instead of a big if block in SpeedMeter_DrawTimeEntries
2020-05-12 23:05:55 -04:00
Tharo
74a654ecae
Decompile audioMgr (#124)
* Decompile most of AudioMgr

* Decompile most of audioMgr

* Decompile audioMgr

* Remove commented out rodata from spec

* Small cleanup

* Last function OK, renamed functions and removed asm

* Remove sched.h and audiomgr.h and include contents in z64.h

* Un-comment prototypes in functions.h

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

* Remove prototypes from audioMgr.c

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

Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
2020-05-10 20:04:41 -04:00
Random
3e5ed389b9
Decompile the remaining Oceff actors + Add ichaindis.py (#125)
* Decompile the remaining Oceff actors + Add ichaindis.py

- z_oceff_spot.c: OK
- z_oceff_storm.c : 1 non-matching left
- Add ichaindis.py

* Rename SetActionFunc to SetupAction + Add Actor descriptions

* Minor fixes in PR #125
2020-05-10 13:09:26 -04:00
Random
40836f5d82
Decompile z_oceff_wipe (#122)
* Decompile z_oceff_wipe

- z_oceff_wipe: OK
- z_oceff_wipe2: OK
- z_oceff_wipe3: OK
- z_oceff_wipe4: OK
- Add patched libmalloc to ido 7 to prevent segfaults
- Add CUR_CAM macro

* Rename CUR_CAM to ACTIVE_CAM

* Fixes in PR #122
2020-05-09 16:58:02 -04:00
krimtonz
0ebe904d0c
En_Floormas OK (#97)
* EnFloorMas wip

* floormaster formatting

* floormaster wip

* ovl_En_Floormas OK

* pr recommendations

* pr updates
2020-05-07 19:18:09 -04:00
Ethan Roseman
ca20f56c09
Decompiled ovl_En_Ma3 (re-created) (#114)
* Decompiled ovl_En_Ma3

* PR suggestions
2020-05-04 12:03:12 -04:00
Nathan Faltermeier
a65554d586
Decompile most of ovl_En_Horse_Ganon (#108)
* Work on horse ganon

* Match destroy, init matches but need mv data -> .c

* Match EnHorseGanon_Draw and func_80A68E14

* Move some data to .c

* Decomp func_80A68870

* EnHorseGanon_Update nearly matches

* func_80A68FA8 and func_80A686A8 match

* Fix EnHorseGanon_Init, start on func_80A68B20

* match func_80A68B20

* Migrate data but something doesn't match

* Matches with migrated data, fix most warnings

* Rename some variables, some clean up

* A little more cleanup before PR

* Move commented out code to NON_MATCHING blocks

* Run formatter and delete unused line, char -> u8

* Update function was matched
Also imports another type from z_skin.Seeing as they are somewhat
tentative I decided not to put them in any global file.

* Update src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c

Co-authored-by: Random <28494085+Random06457@users.noreply.github.com>

* PR Changes

* Apply suggestions from code review

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

* PR Changes round 2

Co-authored-by: Random <28494085+Random06457@users.noreply.github.com>
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
2020-05-04 11:43:04 -04:00
Roman971
9f98210488
Decompile z_map_exp.c (2 non matchings left) (#104)
Also documented the map data table (not decompiled yet however), and added a DungeonItem enum to use with gSaveContext.dungeonItems reads/writes.
2020-05-01 11:09:20 -04:00
Roman971
4932e93ba2
Decompile 2 small files (code_8006BA00.c and code_8006C3A0.c) (#101)
* Decompile code_8006C3A0.c (handling "env" flags)

* Decompile code_8006BA00.c (handling sound sources)
2020-04-30 22:00:39 -04:00
krimtonz
5525365f7f
Decompiles most FBDemo and transition functions (#92)
* Decompile fbdemo (transition) files

* run format.sh

* reformat vtx array, fill in a couple unk

* match TransitionTriforce_IsDone

* add VTX macro, add DW_ wrapping around triangle macros

* use new VTX macro, name graphic assets

* Naming updates

* pr updates

* naming updates

* remove symbols for COLOR_BUFFER, D_08000000, and D_09000000
2020-04-30 14:41:09 -04:00
krimtonz
16b304d548
Split remaining z_camera files (#98)
* split func_800473A0.s

* split func_80051B3C.s

* split func_80054478

* split func_8004B5A0, match a few functions

* rename Matrix_TranslateThenRotateZYX to Matrix_RotateRPYf (#96)

* rename Matrix_TranslateThenRotateZYX to Matrix_RotateRPYf

* rename Matrix_RotateRPYf to Matrix_JointPosition

* rename Matrix_RotateZYX to Matrix_RotateRPY

* extract camera floats, and jump tables

* decompile baby functions

priv_wip

wip

* rename struct_80045714 to VecSph
2020-04-30 10:49:11 -04:00
Ethan Roseman
d58983494c
Decompiled ovl_En_Ma1 (#83)
* first steps

* some more

* fixing merge

* more progress

* progs

* Decompiled ovl_En_Ma1

* newline

* Pr suggestion

* Fixing some small things

* Update src/overlays/actors/ovl_En_Ma1/z_en_ma1.c

Co-Authored-By: Roman971 <32455037+Roman971@users.noreply.github.com>

* Removing padding

* Fixing script

* Fixing some things

Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
2020-04-27 01:47:35 -04:00
Dragorn421
e126e37084
func_800418D0 and func_800417A0 in z_bgcheck.c, matching (#79)
* func_800418D0 and func_800417A0 in z_bgcheck.c, matching

* func_800417A0 cleanup

* More func_800418D0 cleanup

Co-authored-by: fig02 <fig02srl@gmail.com>
2020-04-26 21:12:27 -04:00
mzxrules
aa91a7ee32
z_collision_check.c (#73)
* func_8005B280 ok

* func_8005B65C OK

* split out func_8005BD50

* func_8005B7C0 OK

* func_8005B7F4 OK

* func_8005B824 OK

* func_8005B860 ok

* improve sanity

* func_8005B6B0 ok, ColliderInit_Actor structs added

* func_8005B884 ok

* func_8005BBF8 ok, split out func_8005BF50

* split more stuff out of func_8005C050.s

* func_8005C050 OK

* func_8005BA30 fakish OK, func_8005BAD8 real OK

* func_8005BB48 OK, func_8005BA84 almost decomp'd, but type issues

* func_8005BB10 Ok

* func_8005BF50 OK

* func_8005BE50 OK

* func_8005BD50 OK

* func_8005BCC8 Ok

* func_8005BC28

* func_8005BB8C func_8005BBB0 func_8005BBD4 Ok

* save my work commit

* func_8005C2BC fake OK

* func_8005C5B0 ok

* func_8005C608 ok

* func_8005C6C0 ok

* func_8005C6F8 ok

* func_8005C730 ok

* func_8005C774 func_8005C798 func_8005C7BC OK

* func_8005C7E0 ok, func_8005C810 split

* func_8005C810 OK

* func_8005C8C8 ok

* func_8005C964 OK

* func_8005CA88 ok

* func_8005CBAC ok

* func_8005C124 func_8005C1AC func_8005C234 func_8005CC98 OK

* func_8005CD34 func_8005CDD0 Ok

* func_8005CE6C ok

* func_8005CEC4 ok

* func_8005CEDC ok

* func_8005CF90 Ok

* standardize type names/vars more

* func_8005D3BC ok

* func_8005D40C OK, z64.h CollisionCheckContext

* func_8005D4B4 func_8005D4C8 ok

* partial data section migration

* improve function documentation, OT->OC

* Actor_CollisionCheck_SetOC ok

* Actor_CollisionCheck_SetAT Actor_CollisionCheck_SetAC Ok

* func_8005BA84 ok

* func_800611A0 ok

* func_80061274 ok

* clean up func_80061274

* func_8006139C ok

* func_8005E9C0 and dependencies OK

* minor cleanup to func_8005E9C0

* func_8005EC6C OK!

* func_8005E81C ok

* func_8005E604 ok

* func_8005E2EC func_8005E4F8 OK

* func_8005DE9C OK func_8005D8AC disassembled

* func_8006146C func_8006268C ok

* func_8005EEE0 ok

* func_8005F17C

* func_8005F39C ok

* func_8005F5B0 decompiled, not matching

* func_8005F7D0 decomp, func_8005D218 and func_8005D324 OK

* func_8005FA30 ok, split more functions

* func_8005FC04 ok

* func_8005FDCC k

* func_8005FF90 OK OK OK

* func_80060204 dead

* func_800604B0 ok

* func_80060704 func_80060994 ok, func_80060C2C somewhat disassembled. AT to AC matrix doneish

* func_800635D0 ok, func_80062ECC not so much

* OcLine oks

* D_8011DF28 functions disassembled

* D_8011DF5C functions OK

* setAT_SAC. setAC_SAC, setOC_SAC OK

* func_80061C98 decompiled, func_80061BF4, func_80061C18 OK

* func_800617D4 ok, func_800614A4 disassembled

* CollisionCheck_OC D_8011DFAC functions OK

* func_80062530 ok

* CollisionCheck_generalLineOcCheck subfunctions OK

* func_800622E4 ok

* after a long fought battle, func_80061F64 has fallen.

* func_800628A4 disassembled

* func_800627A0 func_8006285C OK

* ActorCollider_Cylinder_Update, func_80062718, func_80062734 ok

* func_80062CD4 decompiled, import EffShield/EffSpark types from MM

* various SubActor98 struct functions OK

* func_8005D4DC func_8005D62C ok

* .data section migrated, more OKs, fix NON_MATCHINGs to use effect structs

* func_80060C2C ok

* minor code tweaks

* func_80061C98 ok somehow

* Attempt to fix some unknowns, move types out of z64actor, add set3 ColliderInit types

* Apply changes

* formatting

* tweak a couple function names

* krim changes, func naming

* missed some things

* function renames

* Implement GenColliderInit.py utility

* Implement pr changes, GenColliderInit.py, DamageTable.py, z_collision_btltbls.c fully matching

* func_800614A4 ok

* Implement Roman's fixes, name Collider unknowns, rename COLTYPE -> COLSHAPE and define new COLTYPE

* collisionCheckCtx -> colChkCtx, fix small things
2020-04-25 22:43:35 -04:00
JoshDuMan
e050319e07
Decompile playback.c (#82)
* Decompile playback.c

* Remove rename_sym.sh

* Fixed for loop in pop_node_...

* Address krim's other issues

* Remove rename_sym again

* Address Roman's comments.

* Fix build and remove rename_sym another time.
2020-04-21 04:19:33 -04:00
krimtonz
ee48867446
Math Files (#76)
* math3d wip

* math3d wip

* wip

* wip

* wip

* wip

* final update before pr

* run format.sh

* fix merge conflicts

* tharo suggestions update

* fig formatting suggestion

* math3d pr updates

* use sFactorialTbl in sys_math
2020-04-18 23:28:24 -04:00
Synray
eefbe9afe1
Decompile code_800D2E30 and use struct in code_800A9F30 (#80)
* Match func_800AA000

* Match z_camera/func_800437F0

* Decompile code_800D2E30, use struct in 800A9F30

* Format

* Remove 'U' from literals

* Remove bss, cleanup z_camera

* Review changes, rename temp

* Move externs to variables.h
2020-04-18 22:56:53 -04:00
Lucas Shaw
21750d5aee
Naming some functions in libultra_code, decompiling a decent amount. (#77)
* osgetactivequeue ok

* osspdevicebusy ok

* osGetCurrFaultedThread ok

* osSpRawStartDma OK

* __osSpSetPc and osViGetCurrentFramebuffer OK

* sinf, sins, and sptask OK

* coss OK

* cosf OK

* ran format.sh

* Updated PR to use ultratypes

* osContStartQuery OK

* ran format.sh

* Updated PR to fix issues

* Made suggested changes
2020-04-18 21:40:27 -04:00
Ethan Roseman
cb5a604ea7
Decompiled ovl_En_Ru1 (#72)
* Decompiled ovl_En_Ru1

* Formatting

* Actor/TransitionDrawTable struct fixes

* addressing PR comments

* addressing PR comments (2)
2020-04-18 04:50:41 -04:00
Roman971
262f6c507c
Decompile z_play.c and Match/Document some of z_view.c (#74)
* Decompile z_play.c and Match/Document some of z_view.c

Also fix the last non matching in z_sample.c and update some game state functions.

* Suggestions from PR #74

* Fix undefined reference to Gameplay_DrawOverlay

* Suggestion from PR #74 (2)

* Fix a fake argument in func_800BC450
2020-04-16 17:36:12 -04:00
Random
9ac1f8130d
Decompile jpegutils.c (#75)
* Decompile jpegutils.c

jpegutils.c : OK

* Fix a typo

* Fixes in PR #75

- Fix a type in JpegWork
- Remove clang-format off/on in z_quake.c
- Move the jpegutils rule at the end of makefile
2020-04-16 14:08:23 -04:00
silv3rwing07
5aef81071e
padmgr and related (#71)
* In process of moving changes over from old repo

* Merged in changes

* Finished import of padmgr changes from old repo

* Adjusted some volatile

* Improving padmgr volatile situation

* Almost matched osReadMempak

* Working on osMempakDataCRC

* Explanations and equivalents but no matches for osMempakAddrCRC and osMempakDataCRC

* OK after merge

* Matched osMempakAddrCRC and osMempakDataCRC

* Matched osReadMempak

* Updated PadMgr function names to be less like original code

* Changed variable names to make them further from original code

* Changed names and it stopped matching

* Undid clang-format steamrollering whitespace memes

* Cleaned up Input names

* More formatting changes

* Moved padmgr to z64.h, deleted padmgr.h
2020-04-14 13:17:25 -04:00
Random
298abfb128
Decompile z_jpeg.c (#70)
* Decompile z_jpeg.c

- Decompile z_jpeg.c
- Move .bss variables from fault.c and fault_drawer.c into .s files to avoid bss reordering

* Rename JPEGWork to JpegWork and minor fix in Jpeg_GetU16
2020-04-13 19:03:10 -04:00
Ethan Roseman
f3c945cc82
Decompiled ovl_Bg_Bdan_Objects (#66)
* Decompiled ovl_Bg_Bdan_Objects

* Update src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c

Co-Authored-By: Roman971 <32455037+Roman971@users.noreply.github.com>

* Update src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c

Co-Authored-By: Roman971 <32455037+Roman971@users.noreply.github.com>

* Update src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c

Co-Authored-By: Roman971 <32455037+Roman971@users.noreply.github.com>

* Header update

* formatting

* Update include/z64.h

Co-Authored-By: Roman971 <32455037+Roman971@users.noreply.github.com>

* Fixing structs

Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
2020-04-12 12:04:14 -04:00
fig02
d975d809b8
Merge pull request #51 from Thar0/z_view
Decompile z_view.c
2020-04-05 13:54:17 -04:00
Random
62c6549eec Fixes in PR #50 (2)
- Fix a typo
2020-04-05 16:01:46 +02:00
Random
02eaaa2039 Fixes in PR #50
- Rename "sGraph_UpdateTime" to "sGraphUpdateTime"
- Rename "Graph_Ct"/"Graph_Dt" to "Graph_Init"/"Graph_Destroy"
- Change the LOG_STRING macro
- Rename "LOG_VALUE" to "LOG_NUM"
- Fix brace style
- Rename "UcodeInfo"/"UcodeDisas" to "UCodeInfo"/"UCodeDisas"
- Fix field names in "UCodeDisas"
- Fix typo in "GraphicsContext"
- Change the size of unknown fields in "GraphicsContext" to hex
- Rename "game_init_func" to "gameStateInitFunc"
2020-04-05 12:32:08 +02:00
Thar0
668d35b77f Cleanups, Use VT macros 2020-04-05 02:50:46 +01:00
Thar0
9b6cf8a92a Merge https://github.com/zeldaret/oot into z_view 2020-04-04 18:20:45 +01:00
Thar0
5dea0fd785 Decompile most of z_view 2020-04-04 18:17:56 +01:00
Random
fed29c029c Run format.sh 2020-04-04 18:38:05 +02:00
Random
f818fb5299 Decompile graph.c
- decompile `graph.c` (2 non-matchings left)
- decompile `z_game_dlftbls.c`
- add noop macros in `gbi.h`
2020-04-04 18:12:59 +02:00
KrimtonZ
3ab1af0c24 pr updates 2020-04-02 12:44:19 -05:00
Roman971
e99b2af35a Merge branch 'master' into z_rcp 2020-03-31 10:02:59 +02:00
Roman971
f64174730c Decompile z_elf_message.c (1 non matching left) 2020-03-30 22:29:55 +02:00
Roman971
f5ffe8687d Decompile z_rcp.c (1 non matching left) 2020-03-29 18:47:38 +02:00
Random
462c284a17 Fixes in PR #41
- Use  VT macros in code_800D31A0.c
- Change D_8012DBC0 to false instead of 0
- Fix brace style
2020-03-29 11:57:52 +02:00
Random
5f027cb431 Decompile z_quake.c and code_800D31A0.c
- `code_800D31A0.c` : OK
- `z_quake.c` : OK
2020-03-29 03:24:39 +02:00
KrimtonZ
8970968cfc name SkelAnime_InitLinkAnimetion, name load animation types and callbacks, rename several segement addresses in decompiled actors 2020-03-25 10:51:25 -05:00
KrimtonZ
6072055c85 fix merge conflics 2020-03-22 20:57:25 -05:00
KrimtonZ
d136468ace Merge branch 'master' into skelanime 2020-03-22 20:35:10 -05:00
KrimtonZ
2a158f79ce skelanime WIP 2020-03-22 20:24:00 -05:00
Roman971
51290f6126 Partially format header files 2020-03-22 22:50:15 +01:00
Random
bd00e0d1da Decompiled z_sample.c
`z_sample.c` : 1 non matching left
2020-03-22 17:37:38 +01:00
Roman971
f0026cee24
Merge pull request #16 from fig02/en_dog
en_dog OK
2020-03-22 00:46:28 +01:00
KrimtonZ
7bf1c2fb50 Merge branch 'master' into skelanime 2020-03-20 21:53:46 -05:00
KrimtonZ
96ba073f19 skelanime, wip 2020-03-20 21:51:12 -05:00
fig02
dff17518ef pr review changes 2020-03-20 20:42:57 -04:00
KrimtonZ
db5f70ad1c skelanime wip 2020-03-20 16:12:26 -05:00
Random
8779aaa758 Decompiled various small files
- Decompiled `code_8006C360.c`
- Decompiled `prenmi_buf.c` (previously `code_8007BE60.c`)
- Decompiled `code_8007BF10.c`
- Documented `sys_ucode.c`
2020-03-20 15:26:43 +01:00
fig02
aa603ca229 merge and change scene thing 2020-03-20 08:17:48 -04:00
fig02
f3b509eb68 en_dog OK 2020-03-20 08:04:35 -04:00
Roman971
c0965dcbe6
Merge pull request #5 from mzxrules/z_debug
z_debug.c
2020-03-20 01:44:59 +01:00
Random
c931cd5837 Decompiled z_title.c
`z_title.c` : matching
2020-03-19 23:29:33 +01:00
mzxrules
8063249af4 changes 2020-03-19 18:06:41 -04:00
Roman971
85237605e2 Fix and cleanup ovl_En_Tubo_Trap (4/7 matched) 2020-03-18 21:22:00 +01:00
KrimtonZ
e73ac1ed58 Adjust SkelAnime struct to 44 bytes, fix usage of SkelAnime to account for new size 2020-03-18 09:41:18 -05:00
mzxrules
32fe030b42 new repo, OK++ 2020-03-18 10:27:49 -04:00
KrimtonZ
aa2d45310d start z_skelanime.c 2020-03-17 22:15:19 -05:00
fig02
898a103b78 move en_dog progress from old repo 2020-03-17 04:38:46 -04:00
Jack Walker
087f561f77 First proper commit. 2020-03-17 00:31:30 -04:00