mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-18 05:08:57 -04:00
1135 lines
37 KiB
C++
1135 lines
37 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_obj_apzl.cpp
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_obj_apzl.h"
|
|
#include "d/actor/d_a_item.h"
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
#include "res/Object/Apzl.h"
|
|
|
|
static const u32 daObjApzl_bmt_table[16][16] = {
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_I00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_I15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_J00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_J15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_K00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_K15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_L00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_L15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_M00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_M15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_N00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_N15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_O00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_O15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_P00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_P15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_Q00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_Q15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_R00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_R15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_S00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_S15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_T00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_T15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_U00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_U15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_V00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_V15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_W00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_W15_e,
|
|
},
|
|
{
|
|
dRes_INDEX_APZL_BMT_APZLP_X00_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X01_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X02_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X03_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X04_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X05_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X06_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X07_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X08_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X09_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X10_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X11_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X12_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X13_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X14_e,
|
|
dRes_INDEX_APZL_BMT_APZLP_X15_e,
|
|
},
|
|
};
|
|
|
|
/* 00000078-0000025C .text move_piece__11daObjApzl_cFv */
|
|
bool daObjApzl_c::move_piece() {
|
|
stick->checkTrigger();
|
|
bool swapped = false;
|
|
if (mMoveTimer != 0) {
|
|
mMoveTimer--;
|
|
return false;
|
|
}
|
|
|
|
if ((getblank() & 3) != 3 && stick->checkLeftTrigger()) {
|
|
mMoveDirection = 1;
|
|
mSwappedPieceIdx = search_piece(getblank() + 1);
|
|
swapped = true;
|
|
}
|
|
|
|
if ((getblank() & 3) != 0 && stick->checkRightTrigger()) {
|
|
mMoveDirection = 3;
|
|
mSwappedPieceIdx = search_piece(getblank() - 1);
|
|
swapped = true;
|
|
}
|
|
|
|
if ((getblank() & 0xC) != 0xC && stick->checkUpTrigger()) {
|
|
mMoveDirection = 0;
|
|
mSwappedPieceIdx = search_piece(getblank() + 4);
|
|
swapped = true;
|
|
}
|
|
if ((getblank() & 0xC) != 0 && stick->checkDownTrigger()) {
|
|
mMoveDirection = 2;
|
|
mSwappedPieceIdx = search_piece(getblank() - 4);
|
|
swapped = true;
|
|
}
|
|
|
|
if (swapped == true) {
|
|
swap_piece(mBlankIdx, mSwappedPieceIdx);
|
|
if (check_clear()) {
|
|
mMoveTimer = 40;
|
|
} else {
|
|
mMoveTimer = 5;
|
|
}
|
|
}
|
|
return swapped;
|
|
}
|
|
|
|
/* 0000025C-00000310 .text check_arrow_draw__11daObjApzl_cFv */
|
|
void daObjApzl_c::check_arrow_draw() {
|
|
for(int i = 0; i < 4; i++) {
|
|
mDrawArrow[i] = false;
|
|
}
|
|
|
|
if (mState != STATE_PLAYING) {
|
|
return;
|
|
}
|
|
|
|
if (mMoveTimer != 0) {
|
|
return;
|
|
}
|
|
|
|
if ((getblank() & 3) != 3) {
|
|
mDrawArrow[1] = true; // left
|
|
}
|
|
if ((getblank() & 3) != 0) {
|
|
mDrawArrow[3] = true; // right
|
|
}
|
|
if ((getblank() & 0xc) != 0xc) {
|
|
mDrawArrow[0] = true; // up
|
|
}
|
|
if ((getblank() & 0xc) != 0) {
|
|
mDrawArrow[2] = true; // down
|
|
}
|
|
}
|
|
|
|
/* 00000310-0000033C .text search_piece__11daObjApzl_cFUc */
|
|
u8 daObjApzl_c::search_piece(u8 piece) {
|
|
for (int i = 0; ; i++) {
|
|
if (mPiecePos[i] == piece) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 0000033C-00000360 .text swap_piece__11daObjApzl_cFUcUc */
|
|
void daObjApzl_c::swap_piece(u8 firstPieceIdx, u8 secondPieceIdx) {
|
|
u8 tempPiece = mPiecePos[firstPieceIdx];
|
|
mPiecePos[firstPieceIdx] = mPiecePos[secondPieceIdx];
|
|
mPiecePos[secondPieceIdx] = tempPiece;
|
|
}
|
|
|
|
/* 00000360-00000598 .text randamize_piece__11daObjApzl_cFv */
|
|
void daObjApzl_c::randamize_piece() {
|
|
for(int i = 0; i < 16; i++) {
|
|
mPiecePos[i] = i;
|
|
}
|
|
|
|
u8 unscrambledCount;
|
|
while(true) {
|
|
unscrambledCount = 0;
|
|
for(int j = 0; j < 10000; j++) {
|
|
u8 temp = (int)cM_rndF(4.0f) & 3;
|
|
if(temp == 1) {
|
|
if((getblank() & 3) != 3) {
|
|
swap_piece(mBlankIdx, search_piece(getblank() + 1));
|
|
}
|
|
|
|
} else if(temp == 3) {
|
|
if((getblank() & 3) != 0) {
|
|
swap_piece(mBlankIdx, search_piece(getblank() - 1));
|
|
}
|
|
} else if(temp == 0) {
|
|
if((getblank() & 0xc) != 0xc) {
|
|
swap_piece(mBlankIdx, search_piece(getblank() + 4));
|
|
}
|
|
} else if((getblank() & 0xc) != 0) {
|
|
swap_piece(mBlankIdx, search_piece(getblank() - 4));
|
|
}
|
|
}
|
|
|
|
for(int j = 0; j < 16; j++) {
|
|
if((u32)mPiecePos[j] == (j & 0xff)) {
|
|
unscrambledCount++;
|
|
}
|
|
}
|
|
|
|
if(unscrambledCount < 3) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
for(int i = 0; i < 3; i++) {
|
|
if ((getblank() & 3) != 3) {
|
|
swap_piece(mBlankIdx, search_piece(getblank() + 1));
|
|
}
|
|
if ((getblank() & 0xC) != 0) {
|
|
swap_piece(mBlankIdx, search_piece(getblank() - 4));
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000598-000005CC .text save_piece__11daObjApzl_cFv */
|
|
void daObjApzl_c::save_piece() {
|
|
for(int i = 0; i < 16; i++) {
|
|
dComIfGs_setPuzzleData(i, mPiecePos[i]);
|
|
}
|
|
}
|
|
|
|
/* 000005CC-00000604 .text check_clear__11daObjApzl_cFv */
|
|
bool daObjApzl_c::check_clear() {
|
|
for (int i = 0; i < 16; i++) {
|
|
if ((u32)mPiecePos[i] != (i & 0xff)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 00000604-00000748 .text next_msgStatus__11daObjApzl_cFPUl */
|
|
u16 daObjApzl_c::next_msgStatus(u32* pMsgNo) {
|
|
u16 status = fopMsgStts_MSG_CONTINUES_e;
|
|
switch(*pMsgNo) {
|
|
case 0x1BC5:
|
|
mQuitGame = true;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
case 0x1BC6:
|
|
if (mpCurrMsg->mSelectNum == 0) {
|
|
*pMsgNo = 0x1BC7;
|
|
} else {
|
|
*pMsgNo = 0x1BC8;
|
|
}
|
|
break;
|
|
|
|
case 0x1BC7:
|
|
if (mpCurrMsg->mSelectNum == 0) {
|
|
*pMsgNo = 0x1BCA;
|
|
} else {
|
|
*pMsgNo = 0x1BC9;
|
|
}
|
|
break;
|
|
|
|
case 0x1BC8:
|
|
mQuitGame = true;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
|
|
case 0x1BC9:
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
|
|
case 0x1BCA:
|
|
*pMsgNo = 0x1BCB;
|
|
break;
|
|
|
|
case 0x1BCB:
|
|
if (mpCurrMsg->mSelectNum == 0) {
|
|
*pMsgNo = 0x1BC9;
|
|
} else {
|
|
*pMsgNo = 0x1BCC;
|
|
}
|
|
break;
|
|
|
|
case 0x1BCC:
|
|
*pMsgNo = 0x1BCA;
|
|
break;
|
|
|
|
case 0x1BCD:
|
|
if (mpCurrMsg->mSelectNum == 0) {
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
} else {
|
|
*pMsgNo = 0x1BCE;
|
|
}
|
|
break;
|
|
|
|
case 0x1BCE:
|
|
mQuitGame = true;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
|
|
case 0x1BCF:
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
|
|
case 0x1BD0:
|
|
mShownRewardMessage = true;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
|
|
default:
|
|
mQuitGame = true;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
return status;
|
|
}
|
|
|
|
/* 00000748-0000079C .text getMsg__11daObjApzl_cFv */
|
|
u32 daObjApzl_c::getMsg() {
|
|
if (mShownRewardMessage == true) {
|
|
return 0x1BC5;
|
|
}
|
|
if (mGaveReward == true) {
|
|
return 0x1BD0;
|
|
}
|
|
if (mGameCleared == true) {
|
|
return 0x1BCF;
|
|
}
|
|
if (mGameStarted == true) {
|
|
return 0x1BCD;
|
|
}
|
|
return 0x1BC6;
|
|
}
|
|
|
|
/* 0000079C-0000087C .text talk__11daObjApzl_cFi */
|
|
u16 daObjApzl_c::talk(int param_1) {
|
|
u16 status = 0xFF;
|
|
|
|
if (mCurrMsgId == fpcM_ERROR_PROCESS_ID_e) {
|
|
if (param_1 == 1) {
|
|
mMsgNo = getMsg();
|
|
}
|
|
mCurrMsgId = fopMsgM_messageSet(mMsgNo, this);
|
|
mpCurrMsg = NULL;
|
|
} else {
|
|
if (mpCurrMsg != NULL) {
|
|
status = mpCurrMsg->mStatus;
|
|
if (status == fopMsgStts_MSG_DISPLAYED_e) {
|
|
mpCurrMsg->mStatus = next_msgStatus(&mMsgNo);
|
|
if (mpCurrMsg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(mMsgNo);
|
|
}
|
|
} else if (status == fopMsgStts_BOX_CLOSED_e) {
|
|
mpCurrMsg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
mCurrMsgId = -1;
|
|
}
|
|
} else {
|
|
mpCurrMsg = fopMsgM_SearchByID(mCurrMsgId);
|
|
}
|
|
}
|
|
return status;
|
|
}
|
|
#if VERSION > VERSION_JPN
|
|
u8 daObjApzl_Rupee_Table[] = {
|
|
0x01, 0x00, 0x01, 0x00,
|
|
0x01, 0x00, 0x02, 0x00,
|
|
0x01, 0x00, 0x02, 0x00,
|
|
0x03, 0x00, 0x01, 0x00,
|
|
0x01, 0x02, 0x01, 0x00,
|
|
0x01, 0x01, 0x01, 0x00,
|
|
0x01, 0x03, 0x01, 0x01,
|
|
0x01, 0x04,
|
|
};
|
|
#endif
|
|
|
|
/* 0000087C-00000D08 .text privateCut__11daObjApzl_cFv */
|
|
void daObjApzl_c::privateCut() {
|
|
static char* cut_name_tbl[] = {
|
|
"WAIT",
|
|
"TALK",
|
|
"GAME",
|
|
"GETITEM",
|
|
"STOP",
|
|
"SOUND",
|
|
"PUSH_A",
|
|
"EVENT_END"
|
|
};
|
|
|
|
enum {
|
|
ACT_WAIT,
|
|
ACT_TALK,
|
|
ACT_GAME,
|
|
ACT_GETITEM,
|
|
ACT_STOP,
|
|
ACT_SOUND,
|
|
ACT_PUSH_A,
|
|
ACT_EVENT_END
|
|
};
|
|
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Apzl");
|
|
bool temp;
|
|
if (staffIdx != -1) {
|
|
|
|
mActIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), TRUE, 0);
|
|
if (mActIdx == -1) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
} else {
|
|
temp = false;
|
|
|
|
if (dComIfGp_evmng_getIsAddvance(staffIdx)) {
|
|
switch(mActIdx) {
|
|
case ACT_WAIT:
|
|
case ACT_TALK:
|
|
case ACT_STOP:
|
|
case ACT_PUSH_A:
|
|
break;
|
|
case ACT_GAME:
|
|
mGameStarted = true;
|
|
break;
|
|
case ACT_GETITEM:
|
|
mGaveReward = true;
|
|
mRewardTimer = 150;
|
|
break;
|
|
case ACT_SOUND:
|
|
mDoAud_seStart(JA_SE_15PUZZLE_COMPLETE);
|
|
break;
|
|
case ACT_EVENT_END:
|
|
fopAc_ac_c* actor;
|
|
for(int i = 0; i < mGivenRupeeCount; i++) {
|
|
actor = fopAcM_SearchByID(mRupeeIds[i]);
|
|
if (actor != NULL) {
|
|
actor->current.angle.set(0, 0, 0);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
switch(mActIdx) {
|
|
case 0:
|
|
temp = true;
|
|
break;
|
|
case 1:
|
|
if (talk(1) == 0x12) {
|
|
temp = true;
|
|
}
|
|
break;
|
|
case 2:
|
|
temp = true;
|
|
break;
|
|
case 3:
|
|
dComIfGp_setDoStatusForce(dActStts_BLANK_e);
|
|
dComIfGp_setAStatusForce(dActStts_BLANK_e);
|
|
if (mRewardTimer == 0) {
|
|
temp = true;
|
|
} else {
|
|
mRewardTimer--;
|
|
if ((mRewardTimer & 2) == 0 && mGivenRupeeCount < 30) {
|
|
csXyz rupeeAngle(current.angle);
|
|
cXyz rupeePos(0.0f, 100.0f, 735.0f);
|
|
rupeeAngle.x += (s16)cM_rndFX(4000.0f);
|
|
rupeeAngle.y = (s16)cM_rndFX(6000.0f) + rupeeAngle.y - 0x4000;
|
|
rupeeAngle.z = 0;
|
|
|
|
|
|
int itemNo;
|
|
#if VERSION <= VERSION_JPN
|
|
if(mPuzzleNo == 15) {
|
|
f32 temp2 = cM_rndF(1000.0f);
|
|
if(temp2 < 900.0) {
|
|
itemNo = dItemNo_GREEN_RUPEE_e;
|
|
} else if (temp2 < 980.0) {
|
|
itemNo = dItemNo_BLUE_RUPEE_e;
|
|
} else if (temp2 < 995.0) {
|
|
itemNo = dItemNo_YELLOW_RUPEE_e;
|
|
} else if (temp2 < 999.0) {
|
|
itemNo = dItemNo_RED_RUPEE_e;
|
|
} else {
|
|
itemNo = dItemNo_PURPLE_RUPEE_e;
|
|
}
|
|
} else {
|
|
itemNo = dItemNo_GREEN_RUPEE_e;
|
|
}
|
|
#else
|
|
|
|
if (mPuzzleNo == 15) {
|
|
u8 rupeeType = daObjApzl_Rupee_Table[mGivenRupeeCount];
|
|
if (rupeeType == 0) {
|
|
itemNo = dItemNo_GREEN_RUPEE_e;
|
|
} else if (rupeeType == 1) {
|
|
itemNo = dItemNo_BLUE_RUPEE_e;
|
|
} else if (rupeeType == 2) {
|
|
itemNo = dItemNo_YELLOW_RUPEE_e;
|
|
} else if (rupeeType == 3) {
|
|
itemNo = dItemNo_RED_RUPEE_e;
|
|
} else {
|
|
itemNo = dItemNo_PURPLE_RUPEE_e;
|
|
}
|
|
} else if (mGivenRupeeCount % 6 == 0) {
|
|
itemNo = dItemNo_BLUE_RUPEE_e;
|
|
} else {
|
|
itemNo = dItemNo_GREEN_RUPEE_e;
|
|
}
|
|
#endif
|
|
|
|
daItem_c* item = (daItem_c*)fopAcM_fastCreateItem(&rupeePos, itemNo, fopAcM_GetRoomNo(this), &rupeeAngle, NULL, cM_rndF(15.0f) + 5.0f, cM_rndF(15.0f) + 5.0f, -2.1f);
|
|
if(item != NULL) {
|
|
fopAcM_OnStatus(item, fopAcStts_UNK4000_e);
|
|
item->setItemTimer(450);
|
|
}
|
|
|
|
mRupeeIds[mGivenRupeeCount] = fopAcM_GetID(item);
|
|
mGivenRupeeCount++;
|
|
mGaveReward = true;
|
|
mRewardTimer = 60;
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
break;
|
|
case 5:
|
|
dComIfGp_setDoStatusForce(dActStts_BLANK_e);
|
|
dComIfGp_setAStatusForce(dActStts_BLANK_e);
|
|
if (!mDoAud_checkSePlaying(JA_SE_15PUZZLE_COMPLETE)) {
|
|
temp = true;
|
|
}
|
|
break;
|
|
case 6:
|
|
dComIfGp_setDoStatusForce(dActStts_NEXT_e);
|
|
dComIfGp_setAStatusForce(dActStts_BLANK_e);
|
|
if (CPad_CHECK_HOLD_A(0)) {
|
|
temp = true;
|
|
}
|
|
break;
|
|
case 7:
|
|
temp = true;
|
|
break;
|
|
default:
|
|
temp = true;
|
|
break;
|
|
}
|
|
if (temp) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000D08-00000D28 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return ((daObjApzl_c*)i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 00000D28-00001088 .text CreateHeap__11daObjApzl_cFv */
|
|
BOOL daObjApzl_c::CreateHeap() {
|
|
J3DModelData * modelData = (J3DModelData *)dComIfG_getObjectRes("Apzl", dRes_INDEX_APZL_BDL_APZLP_e);
|
|
JUT_ASSERT(VERSION_SELECT(0x2B9, 0x2B9, 0x2E2, 0x2E2), modelData != NULL);
|
|
|
|
for(int i = 0; i < 16; i++) {
|
|
mpPieceModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x37441422);
|
|
if (mpPieceModel[i] == NULL) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
modelData = (J3DModelData *)dComIfG_getObjectRes("Apzl", dRes_INDEX_APZL_BDL_APZLY_e);
|
|
JUT_ASSERT(VERSION_SELECT(0x2C6, 0x2C6, 0x2EF, 0x2EF), modelData != NULL);
|
|
|
|
for(int i = 0; i < 4; i++) {
|
|
mpArrowModel[i] = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
|
if (mpArrowModel[i] == NULL) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
modelData = (J3DModelData *)dComIfG_getObjectRes("Apzl", dRes_INDEX_APZL_BDL_VBSRP_e);
|
|
JUT_ASSERT(VERSION_SELECT(0x2D1, 0x2D1, 0x2FA, 0x2FA), modelData != NULL);
|
|
|
|
J3DAnmTexPattern* btp_data = (J3DAnmTexPattern *)dComIfG_getObjectRes("Apzl", dRes_INDEX_APZL_BTP_VBSRP_e);
|
|
|
|
JUT_ASSERT(VERSION_SELECT(0x2D6, 0x2D6, 0x2FF, 0x2FF), btp_data != NULL);
|
|
|
|
int i = 0;
|
|
while (true) {
|
|
mpScoreboardModel[i] = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
|
if (mpScoreboardModel[i] == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
if(mScoreboardBtpAnm[i].init(modelData, btp_data, 1, 0) == 0) {
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
if(i >= 0x10) {
|
|
stick = new STControl(0x3C, 0x1E, 0, 0, 0.9, 0.5, 0, 0);
|
|
JUT_ASSERT(VERSION_SELECT(0x2E7, 0x2E7, 0x310, 0x310), stick != NULL);
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00001088-000012BC .text CreateInit__11daObjApzl_cFv */
|
|
void daObjApzl_c::CreateInit() {
|
|
mType = daObjApzl_prm::getType(this);
|
|
mPuzzleNo = dComIfGs_getPuzzleInfo();
|
|
if (mPuzzleNo >= 0x10) {
|
|
mPuzzleNo = 0;
|
|
}
|
|
for(int i = 0; i < 16; i++) {
|
|
if (i >= mPuzzleNo) {
|
|
mScoreboardBtpAnm[i].setFrame(0.0f);
|
|
} else {
|
|
mScoreboardBtpAnm[i].setFrame(1.0f);
|
|
}
|
|
}
|
|
fopAcM_SetMtx(this, mpPieceModel[0]->getBaseTRMtx());
|
|
|
|
fopAcM_setCullSizeBox(this, -600.0f, -600.0f, -600.0f, 600.0f, 600.0f, 600.0f);
|
|
fopAcM_setCullSizeFar(this, 1.0f);
|
|
|
|
mBlankIdx = 3;
|
|
mShowBlankPiece = false;
|
|
|
|
if (mType == 0) {
|
|
randamize_piece();
|
|
} else {
|
|
for(int i = 0; i < 16; i++) {
|
|
mPiecePos[i] = i;
|
|
}
|
|
}
|
|
|
|
mEventIdx[EVENT_TALK] = dComIfGp_evmng_getEventIdx("PUZZLE_TALK", 0xff);
|
|
mEventIdx[EVENT_GAME] = dComIfGp_evmng_getEventIdx("PUZZLE_GAME", 0xff);
|
|
mEventIdx[EVENT_RUPEE] = dComIfGp_evmng_getEventIdx("PUZZLE_RUPEE", 0xff);
|
|
|
|
eventInfo.setEventId(mEventIdx[EVENT_TALK]);
|
|
if (mType == 0) {
|
|
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_TALKFLAG_CHECK_e | fopAc_Attn_ACTION_SPEAK_e);
|
|
}
|
|
|
|
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0x28;
|
|
attention_info.position = current.pos;
|
|
|
|
mpCurrMsg = NULL;
|
|
mCurrMsgId = -1;
|
|
|
|
mQuitGame = false;
|
|
mGameStarted = false;
|
|
mGameCleared = false;
|
|
mGaveReward = false;
|
|
mShownRewardMessage = false;
|
|
|
|
mSwappedPieceIdx = 0;
|
|
mMoveTimer = 0;
|
|
mMoveDirection = 0;
|
|
mPlayedStartSound = false;
|
|
mState = STATE_IDLE;
|
|
|
|
for(int i = 0; i < 4; i++) {
|
|
mDrawArrow[i] = false;
|
|
}
|
|
|
|
mGivenRupeeCount = 0;
|
|
set_mtx();
|
|
}
|
|
|
|
/* 000012BC-000016B8 .text set_mtx__11daObjApzl_cFv */
|
|
void daObjApzl_c::set_mtx() {
|
|
for(int i = 0; i < 16; i++) {
|
|
mpPieceModel[i]->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
s32 piecePos = mPiecePos[i];
|
|
mDoMtx_stack_c::transM((piecePos % 4) * 40.0f - 60.0f, 60.0f - (piecePos / 4) * 40.0f, 0.0f);
|
|
if (i == mSwappedPieceIdx && mMoveTimer != 0) {
|
|
f32 moveTimer;
|
|
if (!check_clear()) {
|
|
moveTimer = mMoveTimer * 8.0f;
|
|
} else {
|
|
moveTimer = mMoveTimer;
|
|
}
|
|
|
|
u8 moveDirection = mMoveDirection;
|
|
if (moveDirection == 0) { // up
|
|
mDoMtx_stack_c::transM(0.0,-moveTimer,0.0);
|
|
} else if (moveDirection == 1) { // left
|
|
mDoMtx_stack_c::transM(moveTimer,0.0,0.0);
|
|
} else if (moveDirection == 2) { // down
|
|
mDoMtx_stack_c::transM(0.0,moveTimer,0.0);
|
|
} else { //right
|
|
mDoMtx_stack_c::transM(-moveTimer,0.0,0.0);
|
|
}
|
|
}
|
|
mpPieceModel[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
for(int i = 0; i < 4; i++) {
|
|
mpArrowModel[i]->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
s32 blankIdx = getblank();
|
|
mDoMtx_stack_c::transM((blankIdx % 4) * 40.0f - 60.0f, 60.0f - (blankIdx / 4) * 40.0f, 0.0f);
|
|
mDoMtx_stack_c::ZrotM(i * 0x4000);
|
|
mDoMtx_stack_c::transM(0.0f, -15.0f, 0.0f);
|
|
mpArrowModel[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
for(int i = 0; i < 16; i++) {
|
|
mpScoreboardModel[i]->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(0.0f, -((i % 8) + 1) * 28.62f + 10.0f, (i / 8 - 2) * 28.62f);
|
|
mpScoreboardModel[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
}
|
|
|
|
cPhs_State daObjApzl_c::_create(){
|
|
fopAcM_ct(this, daObjApzl_c);
|
|
cPhs_State phase_state = dComIfG_resLoad(&mPhs, "Apzl");
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x1460)) {
|
|
return cPhs_ERROR_e;
|
|
} else {
|
|
CreateInit();
|
|
}
|
|
}
|
|
return phase_state;
|
|
}
|
|
|
|
/* 000016B8-00001780 .text daObjApzl_Create__FPv */
|
|
static cPhs_State daObjApzl_Create(void* i_this) {
|
|
return static_cast<daObjApzl_c*>(i_this)->_create();
|
|
}
|
|
|
|
bool daObjApzl_c::_delete() {
|
|
delete stick;
|
|
dComIfG_resDelete(&mPhs, "Apzl");
|
|
return true;
|
|
}
|
|
|
|
/* 0000184C-00001894 .text daObjApzl_Delete__FPv */
|
|
static BOOL daObjApzl_Delete(void* i_this) {
|
|
return static_cast<daObjApzl_c*>(i_this)->_delete();
|
|
}
|
|
|
|
/* 00001894-000018B8 .text daObjApzl_Draw__FPv */
|
|
static BOOL daObjApzl_Draw(void* i_this) {
|
|
return ((daObjApzl_c*)i_this)->_draw();
|
|
}
|
|
|
|
/* 000018B8-00001B00 .text _draw__11daObjApzl_cFv */
|
|
bool daObjApzl_c::_draw() {
|
|
if (mType == 0) {
|
|
dComIfGd_setListBG();
|
|
for(int i = 0; i < 16; i++) {
|
|
if (i != mBlankIdx || mShowBlankPiece) {
|
|
mpPieceModel[i]->getModelData()->setMaterialTable(((J3DMaterialTable*)dComIfG_getObjectRes("Apzl", daObjApzl_bmt_table[mPuzzleNo][i])), J3DMatCopyFlag_All);
|
|
mDoExt_modelUpdateDL(mpPieceModel[i]);
|
|
}
|
|
}
|
|
|
|
dComIfGd_setList();
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
if (mDrawArrow[i]) {
|
|
mDoExt_modelUpdateDL(mpArrowModel[i]);
|
|
}
|
|
}
|
|
|
|
for(int i = 0; i < 16; i++) {
|
|
mScoreboardBtpAnm[i].entry(mpScoreboardModel[i]->getModelData());
|
|
mDoExt_modelUpdateDL(mpScoreboardModel[i]);
|
|
mScoreboardBtpAnm[i].remove(mpScoreboardModel[i]->getModelData());
|
|
}
|
|
|
|
} else {
|
|
|
|
dComIfGd_setListBG();
|
|
for(int i = 0; i < 16; i++) {
|
|
mpPieceModel[i]->getModelData()->setMaterialTable(((J3DMaterialTable*)dComIfG_getObjectRes("Apzl", daObjApzl_bmt_table[mPuzzleNo][i])), J3DMatCopyFlag_All);
|
|
mDoExt_modelUpdateDL(mpPieceModel[i]);
|
|
}
|
|
dComIfGd_setList();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 00001B00-00001B24 .text daObjApzl_Execute__FPv */
|
|
static BOOL daObjApzl_Execute(void* i_this) {
|
|
return ((daObjApzl_c*)i_this)->_execute();
|
|
}
|
|
|
|
/* 00001B24-00001E8C .text _execute__11daObjApzl_cFv */
|
|
bool daObjApzl_c::_execute() {
|
|
if(mType == 0) {
|
|
switch(mState) {
|
|
case STATE_IDLE:
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
if (eventInfo.checkCommandTalk()) {
|
|
mState = STATE_TALK;
|
|
}
|
|
break;
|
|
|
|
case STATE_TALK:
|
|
privateCut();
|
|
if(dComIfGp_evmng_endCheck(mEventIdx[EVENT_TALK])) {
|
|
if(mQuitGame == true) {
|
|
dComIfGp_event_reset();
|
|
mState = STATE_IDLE;
|
|
mQuitGame = false;
|
|
mGameStarted = false;
|
|
save_piece();
|
|
} else {
|
|
mState = STATE_START;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case STATE_START:
|
|
if (!mPlayedStartSound) {
|
|
mDoAud_seStart(JA_SE_15PUZZLE_START);
|
|
mPlayedStartSound = true;
|
|
}
|
|
fopAcM_orderChangeEventId(this, mEventIdx[EVENT_GAME], 0, 0xFFFF);
|
|
mState = STATE_PLAYING;
|
|
break;
|
|
|
|
case STATE_PLAYING:
|
|
privateCut();
|
|
if (move_piece()) {
|
|
mDoAud_seStart(JA_SE_TALK_CURSOR);
|
|
}
|
|
dComIfGp_setDoStatusForce(dActStts_BLANK_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
|
|
if (check_clear() && mMoveTimer == 0) {
|
|
mShowBlankPiece = 1;
|
|
mGameCleared = true;
|
|
dComIfGp_getVibration().StartShock(4, 1, cXyz(0.0f, 1.0f, 0.0f));
|
|
mState = STATE_END;
|
|
|
|
} else {
|
|
if (CPad_CHECK_HOLD_B(0)) {
|
|
mDoAud_seStart(JA_SE_15PUZZLE_EXIT);
|
|
mState = STATE_END;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case STATE_END:
|
|
mQuitGame = false;
|
|
if (mGameCleared == true) {
|
|
u8 clearCount = dComIfGs_getPuzzleInfo();
|
|
clearCount++;
|
|
if(clearCount >= 16) {
|
|
clearCount = 0;
|
|
}
|
|
mScoreboardBtpAnm[mPuzzleNo].setFrame(1.0f);
|
|
dComIfGs_setPuzzleInfo(clearCount);
|
|
|
|
fopAcM_orderChangeEventId(this, mEventIdx[EVENT_RUPEE], 0, 0xFFFF);
|
|
|
|
mState = STATE_RUPEE;
|
|
} else {
|
|
fopAcM_orderChangeEventId(this, mEventIdx[EVENT_TALK], 0, 0xFFFF);
|
|
mState = STATE_TALK;
|
|
} // fallthrough
|
|
|
|
case STATE_RUPEE:
|
|
privateCut();
|
|
if(dComIfGp_evmng_endCheck(mEventIdx[EVENT_RUPEE])) {
|
|
dComIfGp_event_reset();
|
|
mState = STATE_IDLE;
|
|
mQuitGame = false;
|
|
mGameStarted = false;
|
|
}
|
|
break;
|
|
}
|
|
check_arrow_draw();
|
|
|
|
}
|
|
set_mtx();
|
|
return true;
|
|
}
|
|
|
|
/* 00001E8C-00001E94 .text daObjApzl_IsDelete__FPv */
|
|
static BOOL daObjApzl_IsDelete(void*) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class daObj_ApzlMethodTable = {
|
|
(process_method_func)daObjApzl_Create,
|
|
(process_method_func)daObjApzl_Delete,
|
|
(process_method_func)daObjApzl_Execute,
|
|
(process_method_func)daObjApzl_IsDelete,
|
|
(process_method_func)daObjApzl_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_Obj_Apzl = {
|
|
/* Layer ID */ fpcLy_CURRENT_e,
|
|
/* List ID */ 0x0007,
|
|
/* List Prio */ fpcPi_CURRENT_e,
|
|
/* Proc Name */ fpcNm_Obj_Apzl_e,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daObjApzl_c),
|
|
/* Size Other */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Draw Prio */ fpcDwPi_Obj_Apzl_e,
|
|
/* Actor SubMtd */ &daObj_ApzlMethodTable,
|
|
/* Status */ fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* Cull Type */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|