mirror of
https://github.com/zeldaret/tp
synced 2026-06-11 13:10:34 -04:00
1058 lines
41 KiB
C++
1058 lines
41 KiB
C++
#include "d/actor/d_a_grass.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_s_play.h"
|
|
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
|
|
#include "SSystem/SComponent/c_lib.h"
|
|
#include "f_op/f_op_overlap_mng.h"
|
|
#include <dolphin/gf.h>
|
|
|
|
/* 805231F8-805239F8 000020 0800+00 0/1 0/0 0/0 .data l_M_kusa05_RGBATEX */
|
|
const u16 l_M_Hijiki00TEX__width = 31;
|
|
const u16 l_M_Hijiki00TEX__height = 31;
|
|
#include "assets/l_M_kusa05_RGBATEX.h" // ALIGN 32
|
|
|
|
/* 805239F8-805241F8 000820 0800+00 0/1 0/0 0/0 .data l_M_Hijiki00TEX */
|
|
const u16 l_M_kusa05_RGBATEX__width = 31;
|
|
const u16 l_M_kusa05_RGBATEX__height = 31;
|
|
#include "assets/l_M_Hijiki00TEX.h" // ALIGN 32
|
|
|
|
/* 805241F8-805245B8 001020 03C0+00 0/1 0/0 0/0 .data l_pos */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DATA static u8 l_pos[960] = {
|
|
0x3F, 0x4A, 0x56, 0xEF, 0xC2, 0x20, 0x00, 0x00, 0x41, 0xFB, 0x17, 0xE4, 0x41, 0xAA, 0xBB, 0xEA,
|
|
0xC2, 0x20, 0x00, 0x00, 0xC1, 0xB7, 0x03, 0x7A, 0x42, 0x55, 0x8D, 0x6F, 0x43, 0x13, 0x16, 0x3F,
|
|
0xC0, 0xC7, 0x24, 0x07, 0x41, 0xE3, 0xC5, 0x31, 0x43, 0x13, 0x16, 0x3F, 0x42, 0x3A, 0x76, 0x90,
|
|
0xC1, 0xDE, 0xF6, 0x89, 0xC2, 0x20, 0x00, 0x00, 0xC1, 0x4E, 0xFE, 0x02, 0xC2, 0x28, 0x22, 0x86,
|
|
0x43, 0x13, 0x16, 0x3F, 0xC2, 0x07, 0x6E, 0x2C, 0x41, 0x51, 0x51, 0xEE, 0x43, 0x13, 0x16, 0x3F,
|
|
0xC2, 0x54, 0xE3, 0xFA, 0xC1, 0x89, 0xD7, 0x9B, 0x43, 0x13, 0x16, 0x3F, 0x42, 0x47, 0x60, 0x87,
|
|
0xC2, 0x59, 0x1D, 0x0E, 0x43, 0x13, 0x16, 0x3F, 0x40, 0x95, 0x9B, 0x11, 0x3F, 0x3A, 0x78, 0x8E,
|
|
0x43, 0x13, 0x16, 0x3F, 0x41, 0xE0, 0xD9, 0x17, 0xC1, 0xE3, 0x1B, 0x10, 0x43, 0x13, 0x16, 0x3F,
|
|
0x42, 0x5A, 0xDD, 0x48, 0xC1, 0xEE, 0x39, 0x52, 0xC2, 0x20, 0x00, 0x00, 0x41, 0xC4, 0x63, 0x09,
|
|
0x00, 0x00, 0x00, 0x00, 0xC2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x03, 0x56, 0x8B,
|
|
0xC2, 0x20, 0x00, 0x00, 0x41, 0x08, 0xF1, 0x43, 0x42, 0x14, 0xBE, 0x15, 0x43, 0x13, 0x16, 0x3F,
|
|
0x42, 0x3E, 0x56, 0x15, 0x41, 0x9A, 0x86, 0xFF, 0x43, 0x13, 0x16, 0x3F, 0xC1, 0xA7, 0xC6, 0xC3,
|
|
0x42, 0x6A, 0xD4, 0x7A, 0x43, 0x13, 0x16, 0x3F, 0xC1, 0x97, 0x6D, 0x9D, 0xC1, 0x19, 0xCD, 0xF3,
|
|
0xC2, 0x20, 0x00, 0x00, 0xC2, 0x15, 0xFA, 0x6B, 0x40, 0xF2, 0xA2, 0x21, 0x43, 0x13, 0x16, 0x3F,
|
|
0xC2, 0x72, 0x6C, 0x7F, 0xC1, 0xC9, 0x8C, 0x79, 0x43, 0x13, 0x16, 0x3F, 0xC1, 0x3F, 0xB7, 0x0B,
|
|
0xC2, 0x12, 0xFB, 0xE4, 0x43, 0x13, 0x16, 0x3F, 0xC2, 0x46, 0xC9, 0xEB, 0xC2, 0x69, 0xB2, 0x46,
|
|
0x43, 0x13, 0x16, 0x3F, 0x41, 0x49, 0x97, 0x1C, 0x3E, 0xBA, 0x78, 0x8E, 0x42, 0x0E, 0x6B, 0x09,
|
|
0x41, 0x60, 0xD9, 0x17, 0xC1, 0xE8, 0xAA, 0x31, 0x42, 0x0E, 0x6B, 0x09, 0x42, 0x1E, 0x87, 0x66,
|
|
0xC1, 0xEE, 0x39, 0x52, 0xC1, 0xA0, 0x00, 0x00, 0x41, 0xC4, 0x63, 0x09, 0x00, 0x00, 0x00, 0x00,
|
|
0xC1, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x03, 0x56, 0x8B, 0xC1, 0xA0, 0x00, 0x00,
|
|
0x41, 0x08, 0xF1, 0x43, 0x42, 0x0C, 0x0A, 0x50, 0x42, 0x0E, 0x6B, 0x09, 0x41, 0xE0, 0x92, 0x67,
|
|
0x41, 0x1A, 0x86, 0xFF, 0x42, 0x0E, 0x6B, 0x09, 0xC1, 0x27, 0xC6, 0xC3, 0x42, 0x37, 0x15, 0x83,
|
|
0x42, 0x0E, 0x6B, 0x09, 0xC0, 0xA5, 0xE9, 0xF7, 0xC1, 0x19, 0xCD, 0xF3, 0xC1, 0xA0, 0x00, 0x00,
|
|
0xC2, 0x15, 0xFA, 0x6B, 0xBF, 0x81, 0xF3, 0x8C, 0x42, 0x0E, 0x6B, 0x09, 0xC2, 0x44, 0x33, 0x76,
|
|
0xC1, 0x49, 0x8C, 0x7A, 0x42, 0x0E, 0x6B, 0x09, 0xC0, 0xBF, 0xB7, 0x0B, 0xC1, 0xB9, 0x6F, 0x60,
|
|
0x42, 0x0E, 0x6B, 0x09, 0xC2, 0x2E, 0x62, 0x2B, 0xC2, 0x30, 0x67, 0x78, 0x42, 0x0E, 0x6B, 0x09,
|
|
0x41, 0x94, 0x97, 0x4B, 0x3F, 0x4A, 0x56, 0xEF, 0xC1, 0xA0, 0x00, 0x00, 0x41, 0xFB, 0x17, 0xE4,
|
|
0x41, 0xAA, 0xBB, 0xEA, 0xC1, 0xA0, 0x00, 0x00, 0xC1, 0xB7, 0x03, 0x7A, 0x42, 0x15, 0x75, 0xB2,
|
|
0x41, 0xD4, 0xFE, 0xE0, 0xC1, 0x68, 0xCC, 0x7C, 0x41, 0x6A, 0x17, 0xE7, 0x41, 0xD4, 0xFE, 0xE0,
|
|
0x42, 0x1C, 0x01, 0x41, 0xC1, 0xDE, 0xF6, 0x89, 0xC1, 0xA0, 0x00, 0x00, 0xC1, 0x4E, 0xFE, 0x02,
|
|
0xC2, 0x0B, 0xCE, 0xE5, 0x41, 0xD4, 0xFE, 0xE0, 0xC1, 0xBB, 0x2D, 0xAD, 0x41, 0x89, 0xB2, 0x71,
|
|
0x41, 0xD4, 0xFE, 0xE0, 0xC2, 0x18, 0x32, 0xDB, 0xC1, 0x03, 0x84, 0xE4, 0x41, 0xD4, 0xFE, 0xE0,
|
|
0x42, 0x22, 0x76, 0x3C, 0xC2, 0x24, 0x4C, 0x29, 0x41, 0xD4, 0xFE, 0xE0, 0xC0, 0x84, 0x30, 0x7B,
|
|
0x41, 0x47, 0x75, 0x1E, 0x43, 0x9F, 0x77, 0x6C, 0x42, 0xE0, 0x3F, 0xC6, 0x41, 0x8A, 0x76, 0x75,
|
|
0xC2, 0x05, 0x2D, 0xB7, 0xC1, 0xCF, 0xDC, 0xAC, 0xC1, 0x8C, 0x34, 0xB2, 0xC2, 0x3A, 0xD2, 0x49,
|
|
0x40, 0xA1, 0xFC, 0xF0, 0x43, 0x07, 0x5C, 0xA5, 0x43, 0x37, 0x70, 0xEE, 0x42, 0x80, 0x8E, 0x59,
|
|
0x40, 0xAF, 0x73, 0x3F, 0x40, 0x5B, 0xFC, 0x44, 0x41, 0xA2, 0xC5, 0x58, 0xBE, 0x8F, 0xF1, 0x0F,
|
|
0x41, 0xD6, 0xD6, 0xFB, 0xC0, 0xFF, 0xAA, 0x6F, 0x42, 0x47, 0x87, 0xFB, 0x43, 0x71, 0x58, 0x6A,
|
|
0xC2, 0x6A, 0x7B, 0x21, 0x41, 0x79, 0x6D, 0x34, 0x42, 0x7D, 0x14, 0x66, 0x41, 0xC5, 0x98, 0xA7,
|
|
0xC1, 0x3D, 0x22, 0x18, 0x42, 0x94, 0x1C, 0x80, 0x41, 0xF6, 0xE0, 0x36, 0x42, 0xDF, 0xB0, 0x65,
|
|
0x43, 0xA2, 0xC0, 0xAF, 0xC1, 0x24, 0x3C, 0xD0, 0xC1, 0xD2, 0x1A, 0x2E, 0xC1, 0xD5, 0xC7, 0x38,
|
|
0xC1, 0x71, 0xB4, 0x9D, 0x40, 0x99, 0x06, 0xE6, 0xC2, 0x20, 0x88, 0x2D, 0x41, 0x9D, 0xD0, 0xD9,
|
|
0x41, 0xBB, 0x21, 0x46, 0x43, 0x39, 0xA7, 0xB9, 0xC3, 0x11, 0x8D, 0x20, 0x41, 0x8D, 0xE2, 0x64,
|
|
0x40, 0xB4, 0xD7, 0xAE, 0xC0, 0xDD, 0x14, 0x64, 0xC1, 0x02, 0x49, 0xD6, 0x41, 0xE8, 0x8D, 0x5E,
|
|
0x40, 0xBF, 0xC4, 0x15, 0xC1, 0xD9, 0x0C, 0xDC, 0x43, 0x68, 0x5A, 0x22, 0xC2, 0x4F, 0xE7, 0x5E,
|
|
0x41, 0x82, 0x49, 0x5F, 0x42, 0x5A, 0x19, 0xB6, 0xC1, 0x89, 0xC1, 0xA5, 0x41, 0xB3, 0x90, 0xED,
|
|
0x42, 0x82, 0x9F, 0x28, 0x41, 0x23, 0x0C, 0x02, 0xC1, 0x8D, 0x1C, 0xF7, 0x43, 0x9F, 0x77, 0x6C,
|
|
0xC2, 0xE5, 0xDF, 0x4C, 0xC1, 0xB3, 0xD8, 0xDD, 0xC2, 0x05, 0x2D, 0xB7, 0x41, 0xB9, 0x5E, 0x95,
|
|
0x41, 0x45, 0xA4, 0x94, 0xC2, 0x3A, 0xD2, 0x49, 0xC0, 0xFB, 0xF5, 0x4D, 0xC3, 0x16, 0x18, 0x11,
|
|
0x43, 0x39, 0xA7, 0xB9, 0xC2, 0x07, 0x6F, 0xB1, 0xC1, 0x71, 0x27, 0xE6, 0x40, 0xB4, 0xD7, 0xAE,
|
|
0xC1, 0xAE, 0x78, 0x69, 0xC0, 0x0A, 0xEE, 0xAA, 0x41, 0xE8, 0x8D, 0x5E, 0x40, 0x82, 0x3B, 0x99,
|
|
0xC2, 0x33, 0x95, 0x59, 0x43, 0x5F, 0x75, 0x5E, 0x3D, 0xF4, 0x6A, 0x1A, 0xC1, 0x9E, 0xD4, 0x98,
|
|
0x42, 0x7D, 0x14, 0x66, 0xC1, 0xDD, 0xD4, 0x93, 0x40, 0xF1, 0xCC, 0x38, 0x42, 0x94, 0x1C, 0x80,
|
|
0xC2, 0x07, 0x8E, 0x11, 0xC2, 0xE0, 0xEF, 0x0C, 0x43, 0xA0, 0x12, 0xC6, 0xC1, 0x91, 0xCE, 0x9E,
|
|
0x41, 0x9D, 0x73, 0x77, 0xC2, 0x00, 0x52, 0xDD, 0x41, 0xB1, 0x90, 0xD0, 0xBF, 0xA5, 0x21, 0x04,
|
|
0xC2, 0x35, 0xF7, 0x70, 0xC1, 0x9B, 0xE3, 0x38, 0xC2, 0x84, 0xB6, 0xB8, 0x43, 0x43, 0x0C, 0x16,
|
|
0x42, 0xFA, 0x80, 0xC7, 0xC1, 0xCC, 0x7C, 0xFD, 0x41, 0x7A, 0x99, 0xDC, 0x40, 0x0F, 0xBE, 0x34,
|
|
0x40, 0x31, 0x97, 0xA6, 0x42, 0x1C, 0x52, 0x30, 0xC0, 0x61, 0x26, 0x39, 0x42, 0x41, 0xBD, 0x21,
|
|
0x43, 0x72, 0x8F, 0x21, 0x42, 0x23, 0xF4, 0x30, 0xC1, 0xE5, 0xEB, 0x07, 0x42, 0x80, 0xF7, 0x9F,
|
|
0x40, 0xD8, 0x8F, 0xF3, 0xC1, 0xDC, 0xC3, 0xBB, 0x42, 0x96, 0x89, 0xEC, 0xC1, 0xAA, 0x6C, 0x09,
|
|
};
|
|
#pragma pop
|
|
|
|
/* 805245B8-805245C4 0013E0 000C+00 0/1 0/0 0/0 .data l_normal */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DATA static Vec l_normal = {0.0f, 1.0f, 0.0f};
|
|
#pragma pop
|
|
|
|
/* 805245C4-805245D8 0013EC 0014+00 0/1 0/0 0/0 .data l_color */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DATA static GXColor l_color[] = {
|
|
{0xFF, 0xFF, 0xFF, 0x00}, {0xFF, 0xFF, 0xFF, 0x80}, {0xFF, 0xFF, 0xFF, 0x79},
|
|
{0xFF, 0xFF, 0xFF, 0x73}, {0xFF, 0xFF, 0xFF, 0xFF},
|
|
};
|
|
#pragma pop
|
|
|
|
/* 805245D8-80524678 001400 00A0+00 0/1 0/0 0/0 .data l_texCoord */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DATA static u8 l_texCoord[160] = {
|
|
0x3F, 0x86, 0xF6, 0x27, 0x3F, 0x9C, 0x00, 0x00, 0x40, 0x03, 0x7B, 0x14, 0x3F, 0x9C, 0x00, 0x00,
|
|
0x40, 0x03, 0x7B, 0x14, 0x3D, 0x00, 0x00, 0x00, 0x3F, 0x86, 0xF6, 0x27, 0x3D, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00,
|
|
0xBF, 0x80, 0x00, 0x00, 0x3F, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9C, 0x00, 0x00,
|
|
0x3F, 0x80, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x9C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x3E, 0xC4, 0xF3, 0xBA, 0xBF, 0x80, 0x00, 0x00, 0x3E, 0xC4, 0xF3, 0xBA,
|
|
0x3F, 0x80, 0x00, 0x00, 0x3E, 0xC4, 0xF3, 0xBA, 0x40, 0x03, 0x7B, 0x14, 0x3E, 0xC4, 0xF3, 0xBA,
|
|
0x3F, 0x86, 0xF6, 0x27, 0x3E, 0xC4, 0xF3, 0xBA, 0x3E, 0xF0, 0x00, 0x00, 0xBF, 0xDC, 0x00, 0x00,
|
|
0x3F, 0x94, 0x00, 0x00, 0x3F, 0x9C, 0x00, 0x00, 0xBD, 0xC0, 0x00, 0x00, 0x3F, 0x9C, 0x00, 0x00,
|
|
0x3F, 0x94, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xBD, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00,
|
|
};
|
|
#pragma pop
|
|
|
|
/* 80524678-80524758 0014A0 00CB+15 0/1 0/0 0/0 .data l_M_Kusa_9qDL */
|
|
#include "assets/l_M_Kusa_9qDL.h"
|
|
|
|
/* 80524758-80524838 001580 00CB+15 0/1 0/0 0/0 .data l_M_Kusa_9q_cDL */
|
|
#include "assets/l_M_Kusa_9q_cDL.h"
|
|
|
|
/* 80524838-80524918 001660 00D4+0C 0/1 0/0 0/0 .data l_M_TenGusaDL */
|
|
#include "assets/l_M_TenGusaDL.h"
|
|
|
|
/* 80524918-805249D8 001740 00A8+18 0/2 0/0 0/0 .data l_Tengusa_matDL */
|
|
#include "assets/l_Tengusa_matDL.h"
|
|
l_Tengusa_matDL(l_M_Hijiki00TEX)
|
|
|
|
/* 805249D8-80524A98 001800 00A8+18 0/2 0/0 0/0 .data l_kusa9q_matDL */
|
|
#include "assets/l_kusa9q_matDL.h"
|
|
l_kusa9q_matDL(l_M_kusa05_RGBATEX)
|
|
|
|
/* 80524A98-80524B40 0018C0 00A8+00 0/2 0/0 0/0 .data l_kusa9q_l4_matDL */
|
|
#include "assets/l_kusa9q_l4_matDL.h"
|
|
l_kusa9q_l4_matDL(l_M_kusa05_RGBATEX)
|
|
|
|
/* 8051D88C-8051DA20 001C2C 0194+00 1/1 0/0 0/0 .text WorkCo__13dGrass_data_cFP10fopAc_ac_cUli */
|
|
void dGrass_data_c::WorkCo(fopAc_ac_c* i_hitActor, u32 i_massFlg, int i_roomNo) {
|
|
cXyz sp18;
|
|
|
|
if (!(dKyw_get_wind_pow() >= 0.6f)) {
|
|
sp18.x = m_pos.x - i_hitActor->current.pos.x;
|
|
sp18.z = m_pos.z - i_hitActor->current.pos.z;
|
|
|
|
f32 var_f31 = sp18.abs2XZ();
|
|
if (!(var_f31 > 1600.0f)) {
|
|
sp18.y = m_pos.y - i_hitActor->current.pos.y;
|
|
|
|
s16 temp_r26 = cM_atan2s(sp18.x, sp18.z);
|
|
var_f31 = JMAFastSqrt(var_f31);
|
|
|
|
dGrass_anm_c* var_r28;
|
|
if (field_0x02 < 16) {
|
|
if (i_hitActor->speedF > 16.0f) {
|
|
cXyz spC(m_pos.x, 20.0f + m_pos.y, m_pos.z);
|
|
dKy_tevstr_c* var_r25 = dComIfGp_roomControl_getTevStr(i_roomNo);
|
|
}
|
|
|
|
int var_r27 = daGrass_c::getGrass()->newAnm();
|
|
if (var_r27 < 0) {
|
|
return;
|
|
}
|
|
|
|
field_0x02 = var_r27;
|
|
var_r28 = daGrass_c::getGrass()->getAnm(field_0x02);
|
|
} else {
|
|
var_r28 = daGrass_c::getGrass()->getAnm(field_0x02);
|
|
}
|
|
|
|
cLib_addCalcAngleS(&var_r28->m_angY, temp_r26, 20, 4000, 1);
|
|
cLib_addCalcAngleS(&var_r28->m_angX, cM_atan2s(40.0f - var_f31, 65.0f), 10, 4000, 1);
|
|
var_r28->m_state = 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8051DA20-8051DF54 001DC0 0534+00 1/1 0/0 0/0 .text
|
|
* WorkAt_NoCutAnim__13dGrass_data_cFP10fopAc_ac_cUliP15dCcMassS_HitInfP8cCcD_Obj */
|
|
void dGrass_data_c::WorkAt_NoCutAnim(fopAc_ac_c* i_hitActor, u32 i_massFlg, int i_roomNo, dCcMassS_HitInf* i_hitinf, cCcD_Obj* i_hitObj) {
|
|
cXyz spC;
|
|
dCcD_GObjInf* gobj_p = dCcD_GetGObjInf(i_hitObj);
|
|
|
|
f32 var_f31;
|
|
s16 var_r26;
|
|
if (i_hitObj == NULL) {
|
|
spC.x = m_pos.x - i_hitActor->current.pos.x;
|
|
spC.y = m_pos.y - i_hitActor->current.pos.y;
|
|
spC.z = m_pos.z - i_hitActor->current.pos.z;
|
|
|
|
var_f31 = spC.abs2XZ();
|
|
var_r26 = i_hitActor->shape_angle.y;
|
|
} else {
|
|
spC = *dCcD_GetGObjInf(i_hitObj)->GetAtVecP();
|
|
var_f31 = spC.abs2XZ();
|
|
|
|
if (cM3d_IsZero(var_f31)) {
|
|
cCcD_ShapeAttr* shape = i_hitObj->GetShapeAttr();
|
|
if (shape->GetNVec(m_pos, &spC)) {
|
|
PSVECScale(&spC, &spC, 5.0f);
|
|
var_f31 = spC.abs2XZ();
|
|
} else {
|
|
spC.x = m_pos.x - i_hitActor->current.pos.x;
|
|
spC.y = m_pos.y - i_hitActor->current.pos.y;
|
|
spC.z = m_pos.z - i_hitActor->current.pos.z;
|
|
|
|
var_f31 = spC.abs2XZ();
|
|
}
|
|
}
|
|
|
|
if (cM3d_IsZero(var_f31)) {
|
|
return;
|
|
}
|
|
|
|
var_r26 = cM_atan2s(spC.x, spC.z);
|
|
}
|
|
|
|
dGrass_anm_c* anm_p;
|
|
if (field_0x02 < 16) {
|
|
int var_r25 = daGrass_c::getGrass()->newAnm();
|
|
if (var_r25 < 0) {
|
|
return;
|
|
}
|
|
|
|
field_0x02 = var_r25;
|
|
anm_p = daGrass_c::getGrass()->getAnm(field_0x02);
|
|
} else {
|
|
anm_p = daGrass_c::getGrass()->getAnm(field_0x02);
|
|
}
|
|
|
|
anm_p->m_angY = var_r26 * (0.9f + (0.2f * cM_rnd()));
|
|
|
|
if (i_hitObj->ChkAtType(AT_TYPE_BOMB)) {
|
|
anm_p->m_angX = cM_atan2s(var_f31, 40.0f) * (2.5f + (0.5f * cM_rnd()));
|
|
} else if (i_hitObj->ChkAtType(AT_TYPE_BOOMERANG)) {
|
|
anm_p->m_angX = cM_atan2s(var_f31, 40.0f) * (1.5f + (0.5f * cM_rnd()));
|
|
} else if (i_hitObj->ChkAtType(AT_TYPE_100) || i_hitObj->ChkAtType(AT_TYPE_LANTERN_SWING)) {
|
|
anm_p->m_angX = 0.05f * (cM_atan2s(var_f31, 40.0f) * (1.5f + cM_rnd()));
|
|
} else if (daPy_getPlayerActorClass()->getCutType() >= daPy_py_c::CUT_TYPE_NM_VERTICAL && daPy_getPlayerActorClass()->getCutType() <= daPy_py_c::CUT_TYPE_FINISH_VERTICAL) {
|
|
anm_p->m_angX = 0.5f * (cM_atan2s(var_f31, 20.0f) * (0.5f + (0.2f * cM_rnd())));
|
|
} else if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_TURN_RIGHT ||
|
|
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_TURN_LEFT ||
|
|
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT ||
|
|
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT)
|
|
{
|
|
anm_p->m_angX = cM_atan2s(var_f31, 40.0f) * (1.5f + (0.3f * cM_rnd()));
|
|
} else {
|
|
anm_p->m_angX = cM_atan2s(var_f31, 40.0f) * (0.9f + (0.2f * cM_rnd()));
|
|
}
|
|
|
|
anm_p->m_state = 2;
|
|
}
|
|
|
|
/* 8051DF54-8051E1C8 0022F4 0274+00 1/1 0/0 0/0 .text
|
|
* Direction_Set__13dGrass_data_cFP10fopAc_ac_cUliP15dCcMassS_HitInfP8cCcD_ObjP5csXyz */
|
|
void dGrass_data_c::Direction_Set(fopAc_ac_c* i_hitActor, u32 i_massFlg, int i_roomNo,
|
|
dCcMassS_HitInf* i_hitinf, cCcD_Obj* i_hitObj, csXyz* i_rotation) {
|
|
cXyz sp8;
|
|
|
|
f32 var_f31;
|
|
s16 var_r27;
|
|
if (i_hitObj == NULL) {
|
|
sp8.x = m_pos.x - i_hitActor->current.pos.x;
|
|
sp8.y = m_pos.y - i_hitActor->current.pos.y;
|
|
sp8.z = m_pos.z - i_hitActor->current.pos.z;
|
|
|
|
var_f31 = sp8.abs2XZ();
|
|
var_r27 = i_hitActor->shape_angle.y;
|
|
} else {
|
|
sp8 = *dCcD_GetGObjInf(i_hitObj)->GetAtVecP();
|
|
var_f31 = sp8.abs2XZ();
|
|
|
|
if (cM3d_IsZero(var_f31)) {
|
|
cCcD_ShapeAttr* shape = i_hitObj->GetShapeAttr();
|
|
if (shape->GetNVec(m_pos, &sp8)) {
|
|
PSVECScale(&sp8, &sp8, 5.0f);
|
|
var_f31 = sp8.abs2XZ();
|
|
} else {
|
|
sp8.x = m_pos.x - i_hitActor->current.pos.x;
|
|
sp8.y = m_pos.y - i_hitActor->current.pos.y;
|
|
sp8.z = m_pos.z - i_hitActor->current.pos.z;
|
|
|
|
var_f31 = sp8.abs2XZ();
|
|
}
|
|
}
|
|
|
|
if (cM3d_IsZero(var_f31)) {
|
|
return;
|
|
}
|
|
|
|
var_r27 = cM_atan2s(sp8.x, sp8.z);
|
|
}
|
|
|
|
i_rotation->y = var_r27 * (0.89999998f + (0.2f * cM_rnd()));
|
|
i_rotation->x = 0.6f * (cM_atan2s(var_f31, 40.0f));
|
|
i_rotation->z = 0;
|
|
}
|
|
|
|
static u8 data_8052790d;
|
|
|
|
/* 8051E1C8-8051EB4C 002568 0984+00 1/1 0/0 0/0 .text
|
|
* WorkAt__13dGrass_data_cFP10fopAc_ac_cUliP15dCcMassS_HitInfUs */
|
|
void dGrass_data_c::WorkAt(fopAc_ac_c* i_hitActor, u32 i_massFlg, int i_roomNo, dCcMassS_HitInf* i_hitinf,
|
|
u16 i_particleID) {
|
|
cCcD_Obj* hit_obj = i_hitinf->GetAtHitObj();
|
|
|
|
if (hit_obj != NULL) {
|
|
if (hit_obj->ChkAtType(0) || hit_obj->ChkAtType(AT_TYPE_ARROW) ||
|
|
hit_obj->ChkAtType(AT_TYPE_SLINGSHOT) || hit_obj->ChkAtType(AT_TYPE_20000000) ||
|
|
hit_obj->ChkAtType(AT_TYPE_SHIELD_ATTACK) || hit_obj->ChkAtType(AT_TYPE_BOOMERANG) ||
|
|
hit_obj->ChkAtType(AT_TYPE_100) || hit_obj->ChkAtType(AT_TYPE_LANTERN_SWING) ||
|
|
hit_obj->ChkAtType(AT_TYPE_HOOKSHOT))
|
|
{
|
|
WorkAt_NoCutAnim(i_hitActor, i_massFlg, i_roomNo, i_hitinf, hit_obj);
|
|
return;
|
|
}
|
|
}
|
|
|
|
fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
|
|
if (hit_obj->ChkAtType(AT_TYPE_BOMB)) {
|
|
if (i_hitActor != NULL && m_pos.abs(i_hitActor->current.pos) > 200.0f) {
|
|
WorkAt_NoCutAnim(i_hitActor, i_massFlg, i_roomNo, i_hitinf, hit_obj);
|
|
return;
|
|
}
|
|
} else if (daPy_getPlayerActorClass()->getCutType() >= daPy_py_c::CUT_TYPE_NM_RIGHT &&
|
|
daPy_getPlayerActorClass()->getCutType() <= daPy_py_c::CUT_TYPE_FINISH_VERTICAL)
|
|
{
|
|
if (m_pos.abs(player_p->current.pos) > 158.0f) {
|
|
if (m_pos.abs(player_p->current.pos) < 200.0f) {
|
|
WorkAt_NoCutAnim(i_hitActor, i_massFlg, i_roomNo, i_hitinf, hit_obj);
|
|
}
|
|
return;
|
|
}
|
|
} else if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_TURN_RIGHT ||
|
|
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_TURN_LEFT)
|
|
{
|
|
if (m_pos.abs(player_p->current.pos) > 200.0f) {
|
|
WorkAt_NoCutAnim(i_hitActor, i_massFlg, i_roomNo, i_hitinf, hit_obj);
|
|
return;
|
|
}
|
|
} else if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT ||
|
|
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT)
|
|
{
|
|
if (m_pos.abs(player_p->current.pos) > 500.0f) {
|
|
WorkAt_NoCutAnim(i_hitActor, i_massFlg, i_roomNo, i_hitinf, hit_obj);
|
|
return;
|
|
}
|
|
} else if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_NM_VERTICAL ||
|
|
daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_NM_STAB)
|
|
{
|
|
if (m_pos.abs(player_p->current.pos) > 158.0f) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (field_0x02 >= 16) {
|
|
daGrass_c::getGrass()->deleteAnm(field_0x02);
|
|
}
|
|
|
|
int itemBitNo = m_itemBitNo;
|
|
if (m_itemBitNo == 0xFF) {
|
|
itemBitNo = -1;
|
|
}
|
|
|
|
bool create_direct = false;
|
|
if (daPy_getPlayerActorClass()->checkHorseRide()) {
|
|
create_direct = true;
|
|
}
|
|
|
|
fopAcM_createItemFromTable(&m_pos, m_tableNo, itemBitNo, i_roomNo, NULL, 0, NULL, NULL, NULL,
|
|
create_direct);
|
|
|
|
field_0x02 = -1;
|
|
|
|
static csXyz ang(0, 0, 0);
|
|
|
|
cXyz particle_pos(m_pos.x, m_pos.y + 25.0f, m_pos.z);
|
|
dKy_tevstr_c* tevstr = dComIfGp_roomControl_getTevStr(i_roomNo);
|
|
|
|
csXyz particle_rot;
|
|
Direction_Set(i_hitActor, i_massFlg, i_roomNo, i_hitinf, hit_obj, &particle_rot);
|
|
|
|
GXColor envcolor;
|
|
envcolor.r = m_addCol >> 8;
|
|
envcolor.g = m_addCol & 0xFF;
|
|
dComIfGp_particle_set(i_particleID, &particle_pos, tevstr, &particle_rot, NULL, 255,
|
|
dPa_control_c::getLight8EcallBack(), -1, &envcolor, NULL, NULL);
|
|
|
|
if (data_8052790d == 0) {
|
|
data_8052790d = 1;
|
|
mDoAud_seStart(JA_SE_LK_CUT_GRASS, &m_pos, 0, dComIfGp_getReverb(i_roomNo));
|
|
}
|
|
}
|
|
|
|
/* 8051EB88-8051ED98 002F28 0210+00 1/1 0/0 0/0 .text hitCheck__13dGrass_data_cFiUs */
|
|
void dGrass_data_c::hitCheck(int i_roomNo, u16 i_particleName) {
|
|
dCcMassS_HitInf hitinf;
|
|
fopAc_ac_c* hit_actor;
|
|
|
|
u32 mass_flags = dComIfG_Ccsp()->ChkMass(&m_pos, &hit_actor, &hitinf);
|
|
bool at_hit = (mass_flags & 1) && (hit_actor != NULL && fopAcM_GetName(hit_actor) != PROC_Obj_Carry);
|
|
|
|
if (!(mass_flags & 2) && !at_hit) {
|
|
if (field_0x02 >= 16) {
|
|
dGrass_anm_c* anm_p = daGrass_c::getGrass()->getAnm(field_0x02);
|
|
s16 spC = anm_p->m_angY & 0xE000;
|
|
int sp10 = field_0x02 & 15;
|
|
dGrass_anm_c* temp_r27 = daGrass_c::getGrass()->getAnm(sp10);
|
|
|
|
if (anm_p->m_state == 2) {
|
|
mDoAud_seStart(JA_SE_FT_ADD_GRASS, &m_pos, 0, dComIfGp_getReverb(i_roomNo));
|
|
anm_p->m_state = 1;
|
|
}
|
|
|
|
if (cLib_addCalcAngleS(&anm_p->m_angX, temp_r27->m_angX, 10, 4400, 400) == 0) {
|
|
if (cLib_addCalcAngleS(&anm_p->m_angY, temp_r27->m_angY, 10, 4400, 400) == 0) {
|
|
daGrass_c::getGrass()->deleteAnm(field_0x02);
|
|
field_0x02 &= 15;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (mass_flags & 2) {
|
|
WorkCo(hit_actor, mass_flags, i_roomNo);
|
|
}
|
|
|
|
if (at_hit) {
|
|
WorkAt(hit_actor, mass_flags, i_roomNo, &hitinf, i_particleName);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8051EDE0-8051EDF0 003180 0010+00 1/1 0/0 0/0 .text newData__13dGrass_room_cFP13dGrass_data_c */
|
|
void dGrass_room_c::newData(dGrass_data_c* i_data) {
|
|
i_data->mp_next = mp_data;
|
|
mp_data = i_data;
|
|
}
|
|
|
|
/* 8051EDF0-8051EE8C 003190 009C+00 1/1 0/0 0/0 .text deleteData__13dGrass_room_cFv */
|
|
void dGrass_room_c::deleteData() {
|
|
while (mp_data != NULL) {
|
|
mp_data->m_state = 0;
|
|
|
|
s8 anm_id = mp_data->field_0x02;
|
|
if (anm_id >= 16) {
|
|
daGrass_c::getGrass()->deleteAnm(anm_id);
|
|
mp_data->field_0x02 = cM_rnd() * 15.0f;
|
|
}
|
|
|
|
mp_data = mp_data->mp_next;
|
|
}
|
|
}
|
|
|
|
/* 8051EE8C-8051F03C 00322C 01B0+00 1/1 0/0 0/0 .text __ct__15dGrass_packet_cFv */
|
|
dGrass_packet_c::dGrass_packet_c() {
|
|
dGrass_data_c* data_p = m_data;
|
|
for (int i = 0; i < 1500; i++) {
|
|
data_p->m_state = 0;
|
|
data_p++;
|
|
}
|
|
|
|
m_dataNum = 0;
|
|
|
|
dGrass_anm_c* anm_p = m_anm;
|
|
for (int i = 0; i < 112; i++) {
|
|
anm_p->m_state = 0;
|
|
anm_p++;
|
|
}
|
|
|
|
s16 unused = 0;
|
|
for (int i = 0; i < 16; i++) {
|
|
setAnm(i, unused);
|
|
unused += 0x1000;
|
|
}
|
|
|
|
mp_pos = (Vec*)l_pos;
|
|
mp_normal = (Vec*)&l_normal;
|
|
mp_colors = (GXColor*)l_color;
|
|
mp_texCoords = (Vec*)l_texCoord;
|
|
mp_kusa9q_DL = l_kusa9q_matDL;
|
|
m_kusa9q_DL_size = 0xA0;
|
|
mp_kusa9q_14_DL = l_kusa9q_l4_matDL;
|
|
m_kusa9q_DL_14_size = 0xA0;
|
|
mp_Mkusa_9q_DL = l_M_Kusa_9qDL;
|
|
m_Mkusa_9q_DL_size = 0xC0;
|
|
mp_Mkusa_9q_cDL = l_M_Kusa_9q_cDL;
|
|
m_Mkusa_9q_cDL_size = 0xC0;
|
|
field_0x1d714 = 0;
|
|
|
|
m_deleteRoom = &dGrass_packet_c::deleteRoom;
|
|
}
|
|
|
|
/* 8051F03C-8051FABC 0033DC 0A80+00 1/0 0/0 0/0 .text draw__15dGrass_packet_cFv */
|
|
// NONMATCHING
|
|
void dGrass_packet_c::draw() {
|
|
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
|
|
cXyz spB4;
|
|
cXyz spA8;
|
|
|
|
j3dSys.reinitGX();
|
|
GXSetNumIndStages(0);
|
|
dKy_setLight_again();
|
|
GXClearVtxDesc();
|
|
|
|
static GXVtxDescList l_vtxDescList[] = {
|
|
{GX_VA_POS, GX_INDEX8},
|
|
{GX_VA_NRM, GX_INDEX8},
|
|
{GX_VA_CLR0, GX_INDEX8},
|
|
{GX_VA_TEX0, GX_INDEX8},
|
|
{GX_VA_NULL, GX_NONE},
|
|
};
|
|
|
|
static GXVtxAttrFmtList l_vtxAttrFmtList[] = {
|
|
GX_VA_POS,
|
|
GX_POS_XYZ,
|
|
GX_F32,
|
|
0,
|
|
|
|
GX_VA_NRM,
|
|
GX_NRM_XYZ,
|
|
GX_F32,
|
|
0,
|
|
|
|
GX_VA_CLR0,
|
|
GX_CLR_RGBA,
|
|
GX_RGBA8,
|
|
0,
|
|
|
|
GX_VA_TEX0,
|
|
GX_TEX_ST,
|
|
GX_F32,
|
|
0,
|
|
|
|
GX_VA_NULL,
|
|
GX_TEX_ST,
|
|
GX_S8,
|
|
0,
|
|
};
|
|
|
|
GXSetVtxDescv(l_vtxDescList);
|
|
GXSetVtxAttrFmtv(GX_VTXFMT0, l_vtxAttrFmtList);
|
|
GXSetArray(GX_VA_POS, mp_pos, sizeof(Vec));
|
|
GXSetArray(GX_VA_NRM, mp_normal, sizeof(Vec));
|
|
GXSetArray(GX_VA_CLR0, mp_colors, sizeof(GXColor));
|
|
GXSetArray(GX_VA_TEX0, mp_texCoords, 8);
|
|
|
|
GXColorS10 spA0 = {0, 0, 0, 0};
|
|
GXColorS10 sp98 = {0, 0, 0, 0};
|
|
|
|
dGrass_room_c* sp54 = m_room;
|
|
|
|
f32 var_f31 = g_env_light.getDaytime();
|
|
f32 var_f30;
|
|
f32 var_f29;
|
|
if (var_f31 >= 90.0f && var_f31 < 135.0f) {
|
|
var_f30 = 1.0f - (0.022222223f * (135.0f - var_f31));
|
|
var_f29 = 100.0f - (18.0f * var_f30);
|
|
} else if (var_f31 >= 135.0f && var_f31 < 225.0f) {
|
|
var_f30 = 1.0f - (0.011111111f * (225.0f - var_f31));
|
|
var_f29 = 82.0f - (25.0f * var_f30);
|
|
} else if (var_f31 >= 225.0f && var_f31 < 270.0f) {
|
|
var_f30 = 1.0f - (0.022222223f * (270.0f - var_f31));
|
|
var_f29 = 57.0f - (-25.0f * var_f30);
|
|
} else if (var_f31 >= 270.0f && var_f31 < 315.0f) {
|
|
var_f30 = (1.0f - (0.022222223f * (315.0f - var_f31)));
|
|
var_f29 = 82.0f - (-18.0f * var_f30);
|
|
} else {
|
|
var_f29 = 100.0f;
|
|
}
|
|
|
|
for (int i = 0; i < 64; i++) {
|
|
dGrass_data_c* var_r29 = sp54->getData();
|
|
if (var_r29 != NULL && dComIfGp_roomControl_checkStatusFlag(i, 0x10)) {
|
|
int sp4C = 0;
|
|
int sp48 = 6;
|
|
dKy_tevstr_c* sp44 = dComIfGp_roomControl_getTevStr(i);
|
|
|
|
f32 temp_f27 = g_env_light.grass_light_inf_rate * g_env_light.bg_light_influence;
|
|
f32 sp58 = 1.0f - temp_f27;
|
|
temp_f27 += 0.5f * sp58;
|
|
|
|
J3DLightInfo& sp40 = sp44->mLights[0].getLightInfo();
|
|
sp98.r = sp40.mColor.r * temp_f27;
|
|
sp98.g = sp40.mColor.g * temp_f27;
|
|
sp98.b = sp40.mColor.b * temp_f27;
|
|
sp98.a = var_f29;
|
|
|
|
if (memcmp(dComIfGp_getStartStageName(), "D_MN01", 6) == 0) {
|
|
sp98.r = 0;
|
|
sp98.g = 0x1E;
|
|
sp98.b = 5;
|
|
sp98.a = 0x50;
|
|
}
|
|
|
|
GFSetTevColorS10(GX_TEVREG1, sp98);
|
|
|
|
if (dComIfGp_roomControl_getStatusRoomDt(i) != NULL) {
|
|
sp48 = dComIfGp_roomControl_getStatusRoomDt(i)->getLightVecInfoNum();
|
|
}
|
|
|
|
if (dKy_SunMoon_Light_Check() == TRUE && sp48 < 2) {
|
|
sp48 = 2;
|
|
}
|
|
|
|
for (int j = 0; j < 6; j++) {
|
|
if (kankyo->field_0x0c18[j].field_0x26 == 1) {
|
|
sp48++;
|
|
}
|
|
}
|
|
|
|
if (var_r29->field_0x05 <= 3 || var_r29->field_0x05 >= 10) {
|
|
if (sp48 <= 3) {
|
|
GXCallDisplayList(mp_kusa9q_14_DL, m_kusa9q_DL_14_size);
|
|
} else {
|
|
GXCallDisplayList(mp_kusa9q_DL, m_kusa9q_DL_size);
|
|
}
|
|
} else {
|
|
GXCallDisplayList(l_Tengusa_matDL, 0xA0);
|
|
}
|
|
|
|
GFSetTevColorS10(GX_TEVREG2, spA0);
|
|
|
|
dKy_Global_amb_set(sp44);
|
|
dKy_GfFog_tevstr_set(sp44);
|
|
dKy_setLight_nowroom_grass(sp44->room_no, 0.0f);
|
|
|
|
while (var_r29 != NULL) {
|
|
if (var_r29->field_0x05 <= 3 || var_r29->field_0x05 >= 10) {
|
|
if (sp48 <= 2) {
|
|
GXCallDisplayList(mp_kusa9q_14_DL, m_kusa9q_DL_14_size);
|
|
} else {
|
|
GXCallDisplayList(mp_kusa9q_DL, m_kusa9q_DL_size);
|
|
}
|
|
} else {
|
|
GXCallDisplayList(l_Tengusa_matDL, 0xA0);
|
|
}
|
|
|
|
if (var_r29->field_0x02 <= -1) {
|
|
sp98.a = 0;
|
|
} else {
|
|
sp98.a = var_f29;
|
|
}
|
|
|
|
GFSetTevColorS10(GX_TEVREG1, sp98);
|
|
|
|
GXColor sp38;
|
|
sp38.r = (var_r29->m_addCol & 0x1F) * 2;
|
|
sp38.g = ((var_r29->m_addCol >> 5) & 0x1F) * 2;
|
|
sp38.b = ((var_r29->m_addCol >> 0xA) & 0x1F) * 2;
|
|
|
|
if (daPy_py_c::checkNowWolfPowerUp()) {
|
|
f32 var_f26 = g_env_light.bg_amb_col[0].r / 255.0f;
|
|
sp38.r = (((var_r29->m_addCol & 0x1F) * 2) + 0x10) * (4.0f * var_f26);
|
|
|
|
var_f26 = g_env_light.bg_amb_col[0].g / 255.0f;
|
|
sp38.g = ((((var_r29->m_addCol >> 5) & 0x1F) * 2) + 0x10) * (4.0f * var_f26);
|
|
|
|
var_f26 = g_env_light.bg_amb_col[0].b / 255.0f;
|
|
sp38.b = ((((var_r29->m_addCol >> 0xA) & 0x1F) * 2) + 0x10) * (4.0f * var_f26);
|
|
}
|
|
|
|
f32 sp2C = 1.0f - ((int)var_r29->m_pos.x * 0.001953125f);
|
|
|
|
f32 var_f28 = 1.1f - ((int)var_r29->m_pos.x / 2000.0f);
|
|
var_f28 -= (int)var_r29->m_pos.z / 2000.0f;
|
|
|
|
if (var_f28 > 1.0f) {
|
|
var_f28 = 1.0f;
|
|
}
|
|
|
|
if (sp38.r == 0x3E) {
|
|
sp38.r = sp44->AmbCol.r * sp2C;
|
|
} else {
|
|
sp38.r = sp38.r * var_f28;
|
|
}
|
|
|
|
if (sp38.g == 0x3E) {
|
|
sp38.g = sp44->AmbCol.g * sp2C;
|
|
} else {
|
|
sp38.g = sp38.g * var_f28;
|
|
}
|
|
|
|
if (sp38.b == 0x3E) {
|
|
sp38.b = sp44->AmbCol.b * sp2C;
|
|
} else {
|
|
sp38.b = sp38.b * var_f28;
|
|
}
|
|
|
|
GXSetChanAmbColor(GX_COLOR0A0, sp38);
|
|
|
|
if (!cLib_checkBit<u8>(var_r29->field_0x01, 2)) {
|
|
GXLoadPosMtxImm(var_r29->m_modelMtx, 0);
|
|
GXLoadNrmMtxImm(j3dSys.getViewMtx(), 0);
|
|
if (var_r29->field_0x05 <= 3 || var_r29->field_0x05 >= 10) {
|
|
if (var_r29->field_0x02 < -1) {
|
|
spA0.a = (-0x100 - ((var_r29->field_0x02 << 8) / 40));
|
|
GFSetTevColorS10(GX_TEVREG2, spA0);
|
|
|
|
if (var_r29->field_0x02 != -2) {
|
|
GXCallDisplayList(mp_Mkusa_9q_DL, m_Mkusa_9q_DL_size);
|
|
} else {
|
|
GXCallDisplayList(mp_Mkusa_9q_cDL, m_Mkusa_9q_cDL_size);
|
|
}
|
|
|
|
spA0.a = 0;
|
|
GFSetTevColorS10(GX_TEVREG2, spA0);
|
|
} else if (var_r29->field_0x02 >= 0) {
|
|
GXCallDisplayList(mp_Mkusa_9q_DL, m_Mkusa_9q_DL_size);
|
|
} else {
|
|
GXCallDisplayList(mp_Mkusa_9q_cDL, m_Mkusa_9q_cDL_size);
|
|
}
|
|
} else if (var_r29->field_0x02 < -1) {
|
|
spA0.a = (-0x100 - ((var_r29->field_0x02 << 8) / 40));
|
|
GFSetTevColorS10(GX_TEVREG2, spA0);
|
|
|
|
if (var_r29->field_0x02 != -2) {
|
|
GXCallDisplayList(l_M_TenGusaDL, 0xC0);
|
|
} else {
|
|
GXCallDisplayList(mp_Mkusa_9q_cDL, m_Mkusa_9q_cDL_size);
|
|
}
|
|
|
|
spA0.a = 0;
|
|
GFSetTevColorS10(GX_TEVREG2, spA0);
|
|
} else if (var_r29->field_0x02 >= 0) {
|
|
GXCallDisplayList(l_M_TenGusaDL, 0xC0);
|
|
} else {
|
|
GXCallDisplayList(mp_Mkusa_9q_cDL, m_Mkusa_9q_cDL_size);
|
|
}
|
|
}
|
|
|
|
var_r29 = var_r29->mp_next;
|
|
}
|
|
}
|
|
sp54++;
|
|
}
|
|
|
|
J3DShape::resetVcdVatCache();
|
|
}
|
|
|
|
/* 8051FABC-8051FF88 003E5C 04CC+00 1/1 0/0 0/0 .text calc__15dGrass_packet_cFv */
|
|
// NONMATCHING
|
|
void dGrass_packet_c::calc() {
|
|
cXyz* temp_r29 = dKyw_get_wind_vec();
|
|
f32 var_f31 = dKyw_get_wind_pow() * dKyw_get_wind_pow();
|
|
|
|
static s16 exec_count_dammy = 0;
|
|
static s16 exec_count_dammy2 = 0;
|
|
|
|
if (var_f31 < 0.09f) {
|
|
var_f31 = 0.09f;
|
|
}
|
|
|
|
if (memcmp(dComIfGp_getStartStageName(), "D_MN01", 6) == 0 && temp_r29 != NULL) {
|
|
temp_r29->x = 0.0f;
|
|
temp_r29->y = 0.0f;
|
|
temp_r29->z = 0.0f;
|
|
var_f31 = 0.0f;
|
|
}
|
|
|
|
if (memcmp(dComIfGp_getStartStageName(), "D_MN54", 6) == 0 && temp_r29 != NULL) {
|
|
temp_r29->x = 0.0f;
|
|
temp_r29->y = 0.0f;
|
|
temp_r29->z = 0.0f;
|
|
var_f31 = 0.01f;
|
|
}
|
|
|
|
dGrass_anm_c* sp14 = getAnm();
|
|
f32 temp_f30 = cM_scos(field_0x1d714);
|
|
field_0x1d714 += (int)(40.0f + cM_rndF(290.0f));
|
|
|
|
int sp18 = 1.0f + ((1.0f - var_f31) * (2.0f + NREG_F(3)));
|
|
|
|
for (int i = 0; i < 16; i++) {
|
|
f32 temp_f28 = i * 0.0625f;
|
|
f32 temp_f29 = cLib_maxLimit<f32>(500.0f + (500.0f * (i / 16)), 2000.0f);
|
|
f32 temp_f27_2 = 1.6f + (0.69999999f * cM_ssin(exec_count_dammy2));
|
|
|
|
s16 sp8 = 0.69999999f * var_f31 * (temp_f29 + ((1.0f + (-0.2f * temp_f28)) * (10.0f * temp_f29 * (cM_ssin(exec_count_dammy + (i * 3050)) + temp_f27_2))));
|
|
|
|
exec_count_dammy += (int)(525.0f * var_f31);
|
|
exec_count_dammy2 += (int)(325.0f * var_f31);
|
|
|
|
cLib_addCalcAngleS(&sp14->m_angX, (s16)sp8, sp18, 4000, 1);
|
|
cLib_addCalcAngleS(&sp14->m_angY, (s16)cM_atan2s(temp_r29->x, temp_r29->z), 20, 4000, 1);
|
|
|
|
sp14++;
|
|
}
|
|
|
|
int sp10 = dComIfGp_roomControl_getStayNo();
|
|
dGrass_data_c* var_r30 = m_room[sp10].getData();
|
|
dComIfGs_Grass_hide_Set(0);
|
|
|
|
if (var_r30 != NULL) {
|
|
data_8052790d = 0;
|
|
dComIfG_Ccsp()->SetMassAttr(40.0f, 120.0f, 11, 0);
|
|
|
|
do {
|
|
u16 spA = 0x89D7;
|
|
if (var_r30->field_0x05 >= 7 && var_r30->field_0x05 <= 9) {
|
|
spA = 0x89D6;
|
|
} else if (var_r30->field_0x05 >= 4 && var_r30->field_0x05 <= 6) {
|
|
spA = 0x89D8;
|
|
}
|
|
|
|
if (!cLib_checkBit<u8>(var_r30->field_0x01, 2)) {
|
|
if (var_r30->field_0x02 >= 0) {
|
|
var_r30->hitCheck(sp10, spA);
|
|
} else if (var_r30->field_0x02 < -2) {
|
|
var_r30->field_0x02 += 1;
|
|
}
|
|
} else if (var_r30->field_0x02 >= 16) {
|
|
daGrass_c::getGrass()->deleteAnm(var_r30->field_0x02);
|
|
var_r30->field_0x02 = 15.0f * cM_rnd();
|
|
}
|
|
|
|
var_r30 = var_r30->mp_next;
|
|
} while (var_r30 != NULL);
|
|
} else {
|
|
dComIfG_Ccsp()->SetMassAttr(40.0f, 40.0f, 11, 0);
|
|
}
|
|
}
|
|
|
|
/* 8051FF88-80520030 004328 00A8+00 2/3 0/0 0/1 .text checkGroundY__FR4cXyz */
|
|
static f32 checkGroundY(cXyz& param_0) {
|
|
dBgS_GndChk sp8;
|
|
param_0.y += 50.0f;
|
|
|
|
bool temp_r3 = fopAcM_gc_c::gndCheck(¶m_0);
|
|
f32 temp_f31 = fopAcM_gc_c::getGroundY();
|
|
|
|
param_0.y -= 50.0f;
|
|
|
|
f32 temp_f30;
|
|
if (!temp_r3) {
|
|
temp_f30 = param_0.y;
|
|
return temp_f30;
|
|
}
|
|
|
|
return temp_f31;
|
|
}
|
|
|
|
/* 80520030-8052067C 0043D0 064C+00 1/1 0/0 0/0 .text update__15dGrass_packet_cFv */
|
|
void dGrass_packet_c::update() {
|
|
static s16 mAngleZ[1500];
|
|
|
|
dGrass_anm_c* anm_p = getAnm();
|
|
for (int i = 0; i < 112; i++) {
|
|
mDoMtx_stack_c::YrotS(anm_p->m_angY);
|
|
mDoMtx_stack_c::XrotM(anm_p->m_angX);
|
|
mDoMtx_stack_c::YrotM(-anm_p->m_angY);
|
|
cMtx_copy(mDoMtx_stack_c::get(), anm_p->m_animMtx);
|
|
anm_p++;
|
|
}
|
|
|
|
dGrass_data_c* data_p = getData();
|
|
anm_p = getAnm();
|
|
|
|
int var_r26 = 0;
|
|
|
|
cXyz sp1C;
|
|
f32 far = mDoLib_clipper::getFar();
|
|
mDoLib_clipper::changeFar(far * 1.6363636f);
|
|
|
|
for (int i = 0; i < 1500; i++) {
|
|
if (data_p->m_state != 0) {
|
|
if (data_p->m_state == 1 && var_r26 < 30) {
|
|
data_p->m_pos.y = checkGroundY(data_p->m_pos);
|
|
data_p->m_state = 2;
|
|
var_r26++;
|
|
}
|
|
|
|
sp1C.set(data_p->m_pos.x, data_p->m_pos.y + 260.0f, data_p->m_pos.z);
|
|
if (mDoLib_clipper::clip(j3dSys.getViewMtx(), sp1C, 260.0f)) {
|
|
cLib_onBit<u8>(data_p->field_0x01, 2);
|
|
} else {
|
|
cLib_offBit<u8>(data_p->field_0x01, 2);
|
|
|
|
if (data_p->field_0x02 >= 0) {
|
|
MtxP mtx = anm_p[data_p->field_0x02].m_animMtx;
|
|
mtx[0][3] = data_p->m_pos.x;
|
|
mtx[1][3] = data_p->m_pos.y;
|
|
mtx[2][3] = data_p->m_pos.z;
|
|
|
|
if (g_env_light.light_init_timer == 1) {
|
|
mAngleZ[i] = 0;
|
|
}
|
|
|
|
f32 temp_f2 = (((s16)data_p->m_pos.x * 3535) & 0xFFF) / 4096.0f;
|
|
temp_f2 = (temp_f2 + ((((s16)data_p->m_pos.z * 3535) & 0xFFF) / 4096.0f)) / 2;
|
|
|
|
f32 var_f31;
|
|
f32 var_f30;
|
|
if (data_p->field_0x05 >= 10) {
|
|
var_f31 = temp_f2 * 0.39999998f + 0.6f;
|
|
var_f30 = temp_f2 * 0.3f + 0.7f;
|
|
} else {
|
|
var_f31 = temp_f2 * 0.3f + 0.7f;
|
|
var_f30 = (temp_f2 * 0.3f + 0.7f) * 0.8f;
|
|
}
|
|
|
|
mDoMtx_stack_c::copy(mtx);
|
|
|
|
if (data_p->field_0x05 >= 7 && data_p->field_0x05 <= 9) {
|
|
mDoMtx_stack_c::ZrotM(mAngleZ[i]);
|
|
mDoMtx_stack_c::scaleM(var_f31, var_f30 - 0.22f, var_f31);
|
|
mDoMtx_stack_c::ZrotM(-mAngleZ[i]);
|
|
|
|
s16 ang = ((i + 1) & 0xF) * 5.0f + 162.0f;
|
|
mAngleZ[i] += ang;
|
|
} else {
|
|
if (data_p->field_0x05 >= 10 &&
|
|
memcmp(dComIfGp_getStartStageName(), "D_MN54", 6) != 0)
|
|
{
|
|
mDoMtx_stack_c::ZrotM(mAngleZ[i]);
|
|
}
|
|
|
|
mDoMtx_stack_c::scaleM(var_f31, var_f30, var_f31);
|
|
|
|
if (data_p->field_0x05 >= 10 &&
|
|
memcmp(dComIfGp_getStartStageName(), "D_MN54", 6) != 0)
|
|
{
|
|
mDoMtx_stack_c::ZrotM(-mAngleZ[i]);
|
|
}
|
|
|
|
if (data_p->field_0x05 >= 10) {
|
|
mDoMtx_stack_c::scaleM(2.0f, (i & 3) * 0.1f + 0.64f, 2.0f);
|
|
}
|
|
|
|
if (data_p->field_0x05 >= 10 &&
|
|
memcmp(dComIfGp_getStartStageName(), "D_MN54", 6) != 0)
|
|
{
|
|
mAngleZ[i] += (int)((((i + 1) & 0xF) * 25.0f + 3200.0f) * (dKyw_get_wind_pow() * dKyw_get_wind_pow() * dKyw_get_wind_pow()));
|
|
}
|
|
}
|
|
|
|
cMtx_concat(j3dSys.getViewMtx(), mDoMtx_stack_c::get(), data_p->m_modelMtx);
|
|
} else {
|
|
mDoMtx_stack_c::transS(data_p->m_pos.x, data_p->m_pos.y, data_p->m_pos.z);
|
|
mDoMtx_stack_c::YrotM(i * 3535);
|
|
|
|
if (data_p->field_0x02 < -2) {
|
|
mDoMtx_stack_c::scaleM(1.0f, -data_p->field_0x02 / 40.0f, 1.0f);
|
|
}
|
|
|
|
f32 scale = ((((s16)data_p->m_pos.x * 3535) & 0xFFF) / 4096.0f) * 0.3f + 0.7f;
|
|
mDoMtx_stack_c::scaleM(scale, scale, scale);
|
|
cMtx_concat(j3dSys.getViewMtx(), mDoMtx_stack_c::get(), data_p->m_modelMtx);
|
|
}
|
|
}
|
|
}
|
|
data_p++;
|
|
}
|
|
|
|
mDoLib_clipper::resetFar();
|
|
dComIfGd_getListPacket()->entryImm(this, 0);
|
|
}
|
|
|
|
/* 8052067C-80520770 004A1C 00F4+00 1/1 0/0 0/0 .text
|
|
* setData__15dGrass_packet_cFP13dGrass_data_ciR4cXyziUcUcsUc */
|
|
void dGrass_packet_c::setData(dGrass_data_c* i_data, int i_dataNo, cXyz& i_pos, int i_roomNo,
|
|
u8 i_tableNo, u8 i_itemBitNo, s16 i_addCol, u8 param_7) {
|
|
f32 y_pos;
|
|
if (fopOvlpM_IsPeek()) {
|
|
y_pos = checkGroundY(i_pos);
|
|
i_data->m_state = 2;
|
|
} else {
|
|
y_pos = i_pos.y;
|
|
i_data->m_state = 1;
|
|
}
|
|
|
|
i_data->field_0x01 = 2;
|
|
i_data->field_0x02 = cM_rndF(15.0f);
|
|
i_data->m_pos.set(i_pos.x, y_pos, i_pos.z);
|
|
i_data->m_tableNo = i_tableNo;
|
|
i_data->m_itemBitNo = i_itemBitNo;
|
|
i_data->m_addCol = i_addCol;
|
|
i_data->field_0x05 = param_7;
|
|
|
|
m_room[i_roomNo].newData(i_data);
|
|
m_dataNum = i_dataNo;
|
|
}
|
|
|
|
/* 80520770-80520864 004B10 00F4+00 1/1 0/0 0/0 .text newData__15dGrass_packet_cFR4cXyziUcUcsUc */
|
|
dGrass_data_c* dGrass_packet_c::newData(cXyz& i_pos, int i_roomNo, u8 i_tableNo, u8 i_itemBitNo,
|
|
s16 i_addCol, u8 param_5) {
|
|
dGrass_data_c* data_p = m_data + m_dataNum;
|
|
|
|
for (int i = m_dataNum; i < 1500; i++) {
|
|
if (data_p->m_state == 0) {
|
|
setData(data_p, i, i_pos, i_roomNo, i_tableNo, i_itemBitNo, i_addCol, param_5);
|
|
return data_p;
|
|
}
|
|
data_p++;
|
|
}
|
|
|
|
data_p = m_data;
|
|
for (int i = 0; i < m_dataNum; i++) {
|
|
if (data_p->m_state == 0) {
|
|
setData(data_p, i, i_pos, i_roomNo, i_tableNo, i_itemBitNo, i_addCol, param_5);
|
|
return data_p;
|
|
}
|
|
data_p++;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 80520864-80520898 004C04 0034+00 1/0 0/0 0/0 .text deleteRoom__15dGrass_packet_cFi */
|
|
void dGrass_packet_c::deleteRoom(int i_roomNo) {
|
|
m_room[i_roomNo].deleteData();
|
|
}
|
|
|
|
/* 80520898-805208E4 004C38 004C+00 2/2 0/0 0/0 .text newAnm__15dGrass_packet_cFv */
|
|
int dGrass_packet_c::newAnm() {
|
|
dGrass_anm_c* anm_p = m_anm + 16;
|
|
for (int i = 16; i < 112; i++) {
|
|
if (anm_p->m_state == 0) {
|
|
anm_p->m_state = 1;
|
|
anm_p->m_angY = 0;
|
|
anm_p->m_angX = 0;
|
|
return i;
|
|
}
|
|
|
|
anm_p++;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
/* 805208E4-8052090C 004C84 0028+00 1/1 0/0 0/0 .text setAnm__15dGrass_packet_cFis */
|
|
void dGrass_packet_c::setAnm(int i_idx, s16) {
|
|
dGrass_anm_c* anm_p = m_anm + i_idx;
|
|
|
|
anm_p->m_state = 1;
|
|
anm_p->m_angY = 0;
|
|
anm_p->m_angX = 0;
|
|
}
|
|
|
|
/* 80520928-80520934 004CC8 000C+00 1/1 0/0 0/0 .text __ct__13dGrass_room_cFv */
|
|
dGrass_room_c::dGrass_room_c() {
|
|
mp_data = NULL;
|
|
}
|
|
|
|
/* 80520934-80520940 004CD4 000C+00 1/1 0/0 0/0 .text __ct__12dGrass_anm_cFv */
|
|
dGrass_anm_c::dGrass_anm_c() {
|
|
m_state = 0;
|
|
}
|
|
|
|
/* 80520940-8052097C 004CE0 003C+00 2/2 0/0 0/0 .text __dt__13dGrass_data_cFv */
|
|
dGrass_data_c::~dGrass_data_c() {}
|
|
|
|
/* 8052097C-80520988 004D1C 000C+00 1/1 0/0 0/0 .text __ct__13dGrass_data_cFv */
|
|
dGrass_data_c::dGrass_data_c() {
|
|
m_state = 0;
|
|
}
|