From 0684cb1fa07ffb29e10fb91b070c9fc4044eef72 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 27 Jun 2022 18:34:51 +1000 Subject: [PATCH] Decompile dyntexUpdateOcean --- src/game/game_13b670.c | 246 ++++++----------------------------------- 1 file changed, 35 insertions(+), 211 deletions(-) diff --git a/src/game/game_13b670.c b/src/game/game_13b670.c index 5508b9315..6e0ff3d05 100644 --- a/src/game/game_13b670.c +++ b/src/game/game_13b670.c @@ -58,9 +58,6 @@ struct dyntexvtx { s16 t; }; -const char var7f1b5960[] = "modula"; -const char var7f1b5968[] = "ripsize"; - s32 g_DyntexVerticesMax; s32 g_DyntexTypesMax; s32 g_DyntexRoomsMax; @@ -75,22 +72,6 @@ bool g_DyntexTypePopulated = false; s32 g_DyntexRoomsCount = 0; s32 g_DyntexTypesCount = 0; s32 g_DyntexVerticesCount = 0; -u32 var8007f6fc = 0x00000041; -u32 var8007f700 = 0x00000016; -u32 var8007f704 = 0x0000001d; -u32 var8007f708 = 0x0000004a; -u32 var8007f70c = 0x00000006; -u32 var8007f710 = 0x00000006; -u32 var8007f714 = 0x00000038; -u32 var8007f718 = 0x000003d5; -u32 var8007f71c = 0x00000018; -u32 var8007f720 = 0x00000018; -u32 var8007f724 = 0x00000034; -u32 var8007f728 = 0x000002f7; -u32 var8007f72c = 0x00000012; -u32 var8007f730 = 0x00000012; - -void dyntexUpdateOcean(struct gfxvtx *vertices, struct dyntextype *type); void dyntexUpdateLinear(struct gfxvtx *vertices, struct dyntextype *type) { @@ -130,198 +111,28 @@ void dyntexUpdateMonitor(struct gfxvtx *vertices, struct dyntextype *type) } } -GLOBAL_ASM( -glabel dyntexUpdateOcean -.late_rodata -glabel var7f1b5970 -.word 0x40c907a9 -.text -/* f13b8a0: 27bdffb8 */ addiu $sp,$sp,-72 -/* f13b8a4: 3c018006 */ lui $at,%hi(var80061634) -/* f13b8a8: c4241634 */ lwc1 $f4,%lo(var80061634)($at) -/* f13b8ac: 3c0140a0 */ lui $at,0x40a0 -/* f13b8b0: 44813000 */ mtc1 $at,$f6 -/* f13b8b4: afb50040 */ sw $s5,0x40($sp) -/* f13b8b8: afb20034 */ sw $s2,0x34($sp) -/* f13b8bc: 00a09025 */ or $s2,$a1,$zero -/* f13b8c0: 0080a825 */ or $s5,$a0,$zero -/* f13b8c4: f7b80020 */ sdc1 $f24,0x20($sp) -/* f13b8c8: afbf0044 */ sw $ra,0x44($sp) -/* f13b8cc: 3c047f1b */ lui $a0,%hi(var7f1b5960) -/* f13b8d0: 3c058008 */ lui $a1,%hi(var8007f700) -/* f13b8d4: 46062602 */ mul.s $f24,$f4,$f6 -/* f13b8d8: afb4003c */ sw $s4,0x3c($sp) -/* f13b8dc: afb30038 */ sw $s3,0x38($sp) -/* f13b8e0: afb10030 */ sw $s1,0x30($sp) -/* f13b8e4: afb0002c */ sw $s0,0x2c($sp) -/* f13b8e8: f7b60018 */ sdc1 $f22,0x18($sp) -/* f13b8ec: f7b40010 */ sdc1 $f20,0x10($sp) -/* f13b8f0: 24a5f700 */ addiu $a1,$a1,%lo(var8007f700) -/* f13b8f4: 0c0036cc */ jal mainOverrideVariable -/* f13b8f8: 24845960 */ addiu $a0,$a0,%lo(var7f1b5960) -/* f13b8fc: 3c047f1b */ lui $a0,%hi(var7f1b5968) -/* f13b900: 3c058008 */ lui $a1,%hi(var8007f6fc) -/* f13b904: 24a5f6fc */ addiu $a1,$a1,%lo(var8007f6fc) -/* f13b908: 0c0036cc */ jal mainOverrideVariable -/* f13b90c: 24845968 */ addiu $a0,$a0,%lo(var7f1b5968) -/* f13b910: 924e0001 */ lbu $t6,0x1($s2) -/* f13b914: 00009825 */ or $s3,$zero,$zero -/* f13b918: 00008025 */ or $s0,$zero,$zero -/* f13b91c: 19c00083 */ blez $t6,.L0f13bb2c -/* f13b920: 3c017f1b */ lui $at,%hi(var7f1b5970) -/* f13b924: 3c11800a */ lui $s1,%hi(g_DyntexVertices) -/* f13b928: 2631418c */ addiu $s1,$s1,%lo(g_DyntexVertices) -/* f13b92c: c4365970 */ lwc1 $f22,%lo(var7f1b5970)($at) -/* f13b930: 96580002 */ lhu $t8,0x2($s2) -.L0f13b934: -/* f13b934: 8e2f0000 */ lw $t7,0x0($s1) -/* f13b938: 3c0b8008 */ lui $t3,%hi(var8007f700) -/* f13b93c: 0018c880 */ sll $t9,$t8,0x2 -/* f13b940: 0338c823 */ subu $t9,$t9,$t8 -/* f13b944: 0019c840 */ sll $t9,$t9,0x1 -/* f13b948: 01f94021 */ addu $t0,$t7,$t9 -/* f13b94c: 8d6bf700 */ lw $t3,%lo(var8007f700)($t3) -/* f13b950: 01101021 */ addu $v0,$t0,$s0 -/* f13b954: 844a0004 */ lh $t2,0x4($v0) -/* f13b958: 94490000 */ lhu $t1,0x0($v0) -/* f13b95c: 448b9000 */ mtc1 $t3,$f18 -/* f13b960: 014b001b */ divu $zero,$t2,$t3 -/* f13b964: 00006010 */ mfhi $t4 -/* f13b968: 448c4000 */ mtc1 $t4,$f8 -/* f13b96c: 0135a021 */ addu $s4,$t1,$s5 -/* f13b970: 15600002 */ bnez $t3,.L0f13b97c -/* f13b974: 00000000 */ nop -/* f13b978: 0007000d */ break 0x7 -.L0f13b97c: -/* f13b97c: 468042a0 */ cvt.s.w $f10,$f8 -/* f13b980: 05810004 */ bgez $t4,.L0f13b994 -/* f13b984: 3c014f80 */ lui $at,0x4f80 -/* f13b988: 44818000 */ mtc1 $at,$f16 -/* f13b98c: 00000000 */ nop -/* f13b990: 46105280 */ add.s $f10,$f10,$f16 -.L0f13b994: -/* f13b994: 05610005 */ bgez $t3,.L0f13b9ac -/* f13b998: 46809120 */ cvt.s.w $f4,$f18 -/* f13b99c: 3c014f80 */ lui $at,0x4f80 -/* f13b9a0: 44813000 */ mtc1 $at,$f6 -/* f13b9a4: 00000000 */ nop -/* f13b9a8: 46062100 */ add.s $f4,$f4,$f6 -.L0f13b9ac: -/* f13b9ac: 46045203 */ div.s $f8,$f10,$f4 -/* f13b9b0: 46184400 */ add.s $f16,$f8,$f24 -/* f13b9b4: 46168502 */ mul.s $f20,$f16,$f22 -/* f13b9b8: 0c0068f7 */ jal sinf -/* f13b9bc: 4600a306 */ mov.s $f12,$f20 -/* f13b9c0: 964e0002 */ lhu $t6,0x2($s2) -/* f13b9c4: 3c098008 */ lui $t1,%hi(var8007f6fc) -/* f13b9c8: 8d29f6fc */ lw $t1,%lo(var8007f6fc)($t1) -/* f13b9cc: 8e2d0000 */ lw $t5,0x0($s1) -/* f13b9d0: 000ec080 */ sll $t8,$t6,0x2 -/* f13b9d4: 030ec023 */ subu $t8,$t8,$t6 -/* f13b9d8: 0018c040 */ sll $t8,$t8,0x1 -/* f13b9dc: 44899000 */ mtc1 $t1,$f18 -/* f13b9e0: 01b87821 */ addu $t7,$t5,$t8 -/* f13b9e4: 01f0c821 */ addu $t9,$t7,$s0 -/* f13b9e8: 87280004 */ lh $t0,0x4($t9) -/* f13b9ec: 05210005 */ bgez $t1,.L0f13ba04 -/* f13b9f0: 468091a0 */ cvt.s.w $f6,$f18 -/* f13b9f4: 3c014f80 */ lui $at,0x4f80 -/* f13b9f8: 44815000 */ mtc1 $at,$f10 -/* f13b9fc: 00000000 */ nop -/* f13ba00: 460a3180 */ add.s $f6,$f6,$f10 -.L0f13ba04: -/* f13ba04: 46060102 */ mul.s $f4,$f0,$f6 -/* f13ba08: 3c014f80 */ lui $at,0x4f80 -/* f13ba0c: 4600220d */ trunc.w.s $f8,$f4 -/* f13ba10: 440c4000 */ mfc1 $t4,$f8 -/* f13ba14: 00000000 */ nop -/* f13ba18: 000c5c00 */ sll $t3,$t4,0x10 -/* f13ba1c: 000b7403 */ sra $t6,$t3,0x10 -/* f13ba20: 01c86821 */ addu $t5,$t6,$t0 -/* f13ba24: a68d000a */ sh $t5,0xa($s4) -/* f13ba28: 964f0002 */ lhu $t7,0x2($s2) -/* f13ba2c: 8e380000 */ lw $t8,0x0($s1) -/* f13ba30: 3c0e8008 */ lui $t6,%hi(var8007f700) -/* f13ba34: 000fc880 */ sll $t9,$t7,0x2 -/* f13ba38: 032fc823 */ subu $t9,$t9,$t7 -/* f13ba3c: 0019c840 */ sll $t9,$t9,0x1 -/* f13ba40: 03194821 */ addu $t1,$t8,$t9 -/* f13ba44: 01305021 */ addu $t2,$t1,$s0 -/* f13ba48: 854c0002 */ lh $t4,0x2($t2) -/* f13ba4c: 8dcef700 */ lw $t6,%lo(var8007f700)($t6) -/* f13ba50: 258b0016 */ addiu $t3,$t4,0x16 -/* f13ba54: 016e001b */ divu $zero,$t3,$t6 -/* f13ba58: 00004010 */ mfhi $t0 -/* f13ba5c: 44888000 */ mtc1 $t0,$f16 -/* f13ba60: 15c00002 */ bnez $t6,.L0f13ba6c -/* f13ba64: 00000000 */ nop -/* f13ba68: 0007000d */ break 0x7 -.L0f13ba6c: -/* f13ba6c: 448e3000 */ mtc1 $t6,$f6 -/* f13ba70: 05010004 */ bgez $t0,.L0f13ba84 -/* f13ba74: 468084a0 */ cvt.s.w $f18,$f16 -/* f13ba78: 44815000 */ mtc1 $at,$f10 -/* f13ba7c: 00000000 */ nop -/* f13ba80: 460a9480 */ add.s $f18,$f18,$f10 -.L0f13ba84: -/* f13ba84: 05c10005 */ bgez $t6,.L0f13ba9c -/* f13ba88: 46803120 */ cvt.s.w $f4,$f6 -/* f13ba8c: 3c014f80 */ lui $at,0x4f80 -/* f13ba90: 44814000 */ mtc1 $at,$f8 -/* f13ba94: 00000000 */ nop -/* f13ba98: 46082100 */ add.s $f4,$f4,$f8 -.L0f13ba9c: -/* f13ba9c: 46049403 */ div.s $f16,$f18,$f4 -/* f13baa0: 46188280 */ add.s $f10,$f16,$f24 -/* f13baa4: 46165502 */ mul.s $f20,$f10,$f22 -/* f13baa8: 0c0068f4 */ jal cosf -/* f13baac: 4600a306 */ mov.s $f12,$f20 -/* f13bab0: 964f0002 */ lhu $t7,0x2($s2) -/* f13bab4: 3c0c8008 */ lui $t4,%hi(var8007f6fc) -/* f13bab8: 8d8cf6fc */ lw $t4,%lo(var8007f6fc)($t4) -/* f13babc: 8e2d0000 */ lw $t5,0x0($s1) -/* f13bac0: 000fc080 */ sll $t8,$t7,0x2 -/* f13bac4: 030fc023 */ subu $t8,$t8,$t7 -/* f13bac8: 0018c040 */ sll $t8,$t8,0x1 -/* f13bacc: 448c3000 */ mtc1 $t4,$f6 -/* f13bad0: 01b8c821 */ addu $t9,$t5,$t8 -/* f13bad4: 03304821 */ addu $t1,$t9,$s0 -/* f13bad8: 852a0002 */ lh $t2,0x2($t1) -/* f13badc: 05810005 */ bgez $t4,.L0f13baf4 -/* f13bae0: 46803220 */ cvt.s.w $f8,$f6 -/* f13bae4: 3c014f80 */ lui $at,0x4f80 -/* f13bae8: 44819000 */ mtc1 $at,$f18 -/* f13baec: 00000000 */ nop -/* f13baf0: 46124200 */ add.s $f8,$f8,$f18 -.L0f13baf4: -/* f13baf4: 46080102 */ mul.s $f4,$f0,$f8 -/* f13baf8: 26730001 */ addiu $s3,$s3,0x1 -/* f13bafc: 26100006 */ addiu $s0,$s0,0x6 -/* f13bb00: 4600240d */ trunc.w.s $f16,$f4 -/* f13bb04: 44088000 */ mfc1 $t0,$f16 -/* f13bb08: 00000000 */ nop -/* f13bb0c: 00087400 */ sll $t6,$t0,0x10 -/* f13bb10: 000e7c03 */ sra $t7,$t6,0x10 -/* f13bb14: 01ea6821 */ addu $t5,$t7,$t2 -/* f13bb18: a68d0008 */ sh $t5,0x8($s4) -/* f13bb1c: 92580001 */ lbu $t8,0x1($s2) -/* f13bb20: 0278082a */ slt $at,$s3,$t8 -/* f13bb24: 5420ff83 */ bnezl $at,.L0f13b934 -/* f13bb28: 96580002 */ lhu $t8,0x2($s2) -.L0f13bb2c: -/* f13bb2c: 8fbf0044 */ lw $ra,0x44($sp) -/* f13bb30: d7b40010 */ ldc1 $f20,0x10($sp) -/* f13bb34: d7b60018 */ ldc1 $f22,0x18($sp) -/* f13bb38: d7b80020 */ ldc1 $f24,0x20($sp) -/* f13bb3c: 8fb0002c */ lw $s0,0x2c($sp) -/* f13bb40: 8fb10030 */ lw $s1,0x30($sp) -/* f13bb44: 8fb20034 */ lw $s2,0x34($sp) -/* f13bb48: 8fb30038 */ lw $s3,0x38($sp) -/* f13bb4c: 8fb4003c */ lw $s4,0x3c($sp) -/* f13bb50: 8fb50040 */ lw $s5,0x40($sp) -/* f13bb54: 03e00008 */ jr $ra -/* f13bb58: 27bd0048 */ addiu $sp,$sp,0x48 -); +void dyntexUpdateOcean(struct gfxvtx *vertices, struct dyntextype *type) +{ + f32 f24 = var80061634 * 5.0f; + f32 angle; + s32 i; + + static u32 ripsize = 65; + static u32 modula = 22; + + mainOverrideVariable("modula", &modula); + mainOverrideVariable("ripsize", &ripsize); + + for (i = 0; i < type->numvertices; i++) { + struct gfxvtx *vertex = (struct gfxvtx *)((s32)vertices + g_DyntexVertices[type->vertexlistoffset + i].offset); + + angle = ((g_DyntexVertices[type->vertexlistoffset + i].t % modula) / (f32) modula + f24) * M_BADTAU; + vertex->unk0a = g_DyntexVertices[type->vertexlistoffset + i].t + (s16) (sinf(angle) * ripsize); + + angle = (((g_DyntexVertices[type->vertexlistoffset + i].s + 22) % modula) / (f32) modula + f24) * M_BADTAU; + vertex->unk08 = g_DyntexVertices[type->vertexlistoffset + i].s + (s16) (cosf(angle) * ripsize); + } +} void dyntexUpdateArrows(struct gfxvtx *vertices, struct dyntextype *type) { @@ -594,6 +405,19 @@ void dyntexReset(void) if (size1); } +u32 var8007f704 = 0x0000001d; +u32 var8007f708 = 0x0000004a; +u32 var8007f70c = 0x00000006; +u32 var8007f710 = 0x00000006; +u32 var8007f714 = 0x00000038; +u32 var8007f718 = 0x000003d5; +u32 var8007f71c = 0x00000018; +u32 var8007f720 = 0x00000018; +u32 var8007f724 = 0x00000034; +u32 var8007f728 = 0x000002f7; +u32 var8007f72c = 0x00000012; +u32 var8007f730 = 0x00000012; + void dyntex0f13c4e8(void) { // empty