mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-07-01 02:11:45 -04:00
Implement & link ac_house
This commit is contained in:
+1
-1
@@ -979,7 +979,7 @@ config.libs = [
|
||||
Object(Matching, "actor/ac_handOverItem.c"),
|
||||
Object(Matching, "actor/ac_haniwa.c"),
|
||||
Object(Matching, "actor/ac_hatumode_control.c"),
|
||||
Object(NonMatching, "actor/ac_house.c"),
|
||||
Object(Matching, "actor/ac_house.c"),
|
||||
Object(Matching, "actor/ac_house_clock.c"),
|
||||
Object(NonMatching, "actor/ac_house_goki.c"),
|
||||
Object(NonMatching, "actor/ac_htable.c"),
|
||||
|
||||
+5
-1
@@ -3,11 +3,16 @@
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "ac_structure.h"
|
||||
#include "m_snowman.h"
|
||||
#include "m_event_map_npc.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef STRUCTURE_ACTOR HOUSE_ACTOR;
|
||||
|
||||
extern ACTOR_PROFILE House_Profile;
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -15,4 +20,3 @@ extern ACTOR_PROFILE House_Profile;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -29,6 +29,11 @@ typedef enum audio_sound_effects {
|
||||
NA_SE_ZOOMUP = 4,
|
||||
NA_SE_ZOOMDOWN_SHORT,
|
||||
|
||||
NA_SE_6 = 0x6,
|
||||
NA_SE_7 = 0x7,
|
||||
NA_SE_8 = 0x8,
|
||||
NA_SE_9 = 0x9,
|
||||
|
||||
NA_SE_A = 0xA,
|
||||
NA_SE_PAGE_OKURI = 0xB,
|
||||
|
||||
|
||||
@@ -3014,6 +3014,244 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define NPC_END (NPC_START + 236)
|
||||
|
||||
#define DUMMY_START 0xF000
|
||||
#define DUMMY_NPC_HOUSE_000 (DUMMY_START + 5) // F005
|
||||
#define DUMMY_NPC_HOUSE_001 (DUMMY_START + 6) // F006
|
||||
#define DUMMY_NPC_HOUSE_002 (DUMMY_START + 7) // F007
|
||||
#define DUMMY_NPC_HOUSE_003 (DUMMY_START + 8) // F008
|
||||
#define DUMMY_NPC_HOUSE_004 (DUMMY_START + 9) // F009
|
||||
#define DUMMY_NPC_HOUSE_005 (DUMMY_START + 10) // F00A
|
||||
#define DUMMY_NPC_HOUSE_006 (DUMMY_START + 11) // F00B
|
||||
#define DUMMY_NPC_HOUSE_007 (DUMMY_START + 12) // F00C
|
||||
#define DUMMY_NPC_HOUSE_008 (DUMMY_START + 13) // F00D
|
||||
#define DUMMY_NPC_HOUSE_009 (DUMMY_START + 14) // F00E
|
||||
#define DUMMY_NPC_HOUSE_010 (DUMMY_START + 15) // F00F
|
||||
#define DUMMY_NPC_HOUSE_011 (DUMMY_START + 16) // F010
|
||||
#define DUMMY_NPC_HOUSE_012 (DUMMY_START + 17) // F011
|
||||
#define DUMMY_NPC_HOUSE_013 (DUMMY_START + 18) // F012
|
||||
#define DUMMY_NPC_HOUSE_014 (DUMMY_START + 19) // F013
|
||||
#define DUMMY_NPC_HOUSE_015 (DUMMY_START + 20) // F014
|
||||
#define DUMMY_NPC_HOUSE_016 (DUMMY_START + 21) // F015
|
||||
#define DUMMY_NPC_HOUSE_017 (DUMMY_START + 22) // F016
|
||||
#define DUMMY_NPC_HOUSE_018 (DUMMY_START + 23) // F017
|
||||
#define DUMMY_NPC_HOUSE_019 (DUMMY_START + 24) // F018
|
||||
#define DUMMY_NPC_HOUSE_020 (DUMMY_START + 25) // F019
|
||||
#define DUMMY_NPC_HOUSE_021 (DUMMY_START + 26) // F01A
|
||||
#define DUMMY_NPC_HOUSE_022 (DUMMY_START + 27) // F01B
|
||||
#define DUMMY_NPC_HOUSE_023 (DUMMY_START + 28) // F01C
|
||||
#define DUMMY_NPC_HOUSE_024 (DUMMY_START + 29) // F01D
|
||||
#define DUMMY_NPC_HOUSE_025 (DUMMY_START + 30) // F01E
|
||||
#define DUMMY_NPC_HOUSE_026 (DUMMY_START + 31) // F01F
|
||||
#define DUMMY_NPC_HOUSE_027 (DUMMY_START + 32) // F020
|
||||
#define DUMMY_NPC_HOUSE_028 (DUMMY_START + 33) // F021
|
||||
#define DUMMY_NPC_HOUSE_029 (DUMMY_START + 34) // F022
|
||||
#define DUMMY_NPC_HOUSE_030 (DUMMY_START + 35) // F023
|
||||
#define DUMMY_NPC_HOUSE_031 (DUMMY_START + 36) // F024
|
||||
#define DUMMY_NPC_HOUSE_032 (DUMMY_START + 37) // F025
|
||||
#define DUMMY_NPC_HOUSE_033 (DUMMY_START + 38) // F026
|
||||
#define DUMMY_NPC_HOUSE_034 (DUMMY_START + 39) // F027
|
||||
#define DUMMY_NPC_HOUSE_035 (DUMMY_START + 40) // F028
|
||||
#define DUMMY_NPC_HOUSE_036 (DUMMY_START + 41) // F029
|
||||
#define DUMMY_NPC_HOUSE_037 (DUMMY_START + 42) // F02A
|
||||
#define DUMMY_NPC_HOUSE_038 (DUMMY_START + 43) // F02B
|
||||
#define DUMMY_NPC_HOUSE_039 (DUMMY_START + 44) // F02C
|
||||
#define DUMMY_NPC_HOUSE_040 (DUMMY_START + 45) // F02D
|
||||
#define DUMMY_NPC_HOUSE_041 (DUMMY_START + 46) // F02E
|
||||
#define DUMMY_NPC_HOUSE_042 (DUMMY_START + 47) // F02F
|
||||
#define DUMMY_NPC_HOUSE_043 (DUMMY_START + 48) // F030
|
||||
#define DUMMY_NPC_HOUSE_044 (DUMMY_START + 49) // F031
|
||||
#define DUMMY_NPC_HOUSE_045 (DUMMY_START + 50) // F032
|
||||
#define DUMMY_NPC_HOUSE_046 (DUMMY_START + 51) // F033
|
||||
#define DUMMY_NPC_HOUSE_047 (DUMMY_START + 52) // F034
|
||||
#define DUMMY_NPC_HOUSE_048 (DUMMY_START + 53) // F035
|
||||
#define DUMMY_NPC_HOUSE_049 (DUMMY_START + 54) // F036
|
||||
#define DUMMY_NPC_HOUSE_050 (DUMMY_START + 55) // F037
|
||||
#define DUMMY_NPC_HOUSE_051 (DUMMY_START + 56) // F038
|
||||
#define DUMMY_NPC_HOUSE_052 (DUMMY_START + 57) // F039
|
||||
#define DUMMY_NPC_HOUSE_053 (DUMMY_START + 58) // F03A
|
||||
#define DUMMY_NPC_HOUSE_054 (DUMMY_START + 59) // F03B
|
||||
#define DUMMY_NPC_HOUSE_055 (DUMMY_START + 60) // F03C
|
||||
#define DUMMY_NPC_HOUSE_056 (DUMMY_START + 61) // F03D
|
||||
#define DUMMY_NPC_HOUSE_057 (DUMMY_START + 62) // F03E
|
||||
#define DUMMY_NPC_HOUSE_058 (DUMMY_START + 63) // F03F
|
||||
#define DUMMY_NPC_HOUSE_059 (DUMMY_START + 64) // F040
|
||||
#define DUMMY_NPC_HOUSE_060 (DUMMY_START + 65) // F041
|
||||
#define DUMMY_NPC_HOUSE_061 (DUMMY_START + 66) // F042
|
||||
#define DUMMY_NPC_HOUSE_062 (DUMMY_START + 67) // F043
|
||||
#define DUMMY_NPC_HOUSE_063 (DUMMY_START + 68) // F044
|
||||
#define DUMMY_NPC_HOUSE_064 (DUMMY_START + 69) // F045
|
||||
#define DUMMY_NPC_HOUSE_065 (DUMMY_START + 70) // F046
|
||||
#define DUMMY_NPC_HOUSE_066 (DUMMY_START + 71) // F047
|
||||
#define DUMMY_NPC_HOUSE_067 (DUMMY_START + 72) // F048
|
||||
#define DUMMY_NPC_HOUSE_068 (DUMMY_START + 73) // F049
|
||||
#define DUMMY_NPC_HOUSE_069 (DUMMY_START + 74) // F04A
|
||||
#define DUMMY_NPC_HOUSE_070 (DUMMY_START + 75) // F04B
|
||||
#define DUMMY_NPC_HOUSE_071 (DUMMY_START + 76) // F04C
|
||||
#define DUMMY_NPC_HOUSE_072 (DUMMY_START + 77) // F04D
|
||||
#define DUMMY_NPC_HOUSE_073 (DUMMY_START + 78) // F04E
|
||||
#define DUMMY_NPC_HOUSE_074 (DUMMY_START + 79) // F04F
|
||||
#define DUMMY_NPC_HOUSE_075 (DUMMY_START + 80) // F050
|
||||
#define DUMMY_NPC_HOUSE_076 (DUMMY_START + 81) // F051
|
||||
#define DUMMY_NPC_HOUSE_077 (DUMMY_START + 82) // F052
|
||||
#define DUMMY_NPC_HOUSE_078 (DUMMY_START + 83) // F053
|
||||
#define DUMMY_NPC_HOUSE_079 (DUMMY_START + 84) // F054
|
||||
#define DUMMY_NPC_HOUSE_080 (DUMMY_START + 85) // F055
|
||||
#define DUMMY_NPC_HOUSE_081 (DUMMY_START + 86) // F056
|
||||
#define DUMMY_NPC_HOUSE_082 (DUMMY_START + 87) // F057
|
||||
#define DUMMY_NPC_HOUSE_083 (DUMMY_START + 88) // F058
|
||||
#define DUMMY_NPC_HOUSE_084 (DUMMY_START + 89) // F059
|
||||
#define DUMMY_NPC_HOUSE_085 (DUMMY_START + 90) // F05A
|
||||
#define DUMMY_NPC_HOUSE_086 (DUMMY_START + 91) // F05B
|
||||
#define DUMMY_NPC_HOUSE_087 (DUMMY_START + 92) // F05C
|
||||
#define DUMMY_NPC_HOUSE_088 (DUMMY_START + 93) // F05D
|
||||
#define DUMMY_NPC_HOUSE_089 (DUMMY_START + 94) // F05E
|
||||
#define DUMMY_NPC_HOUSE_090 (DUMMY_START + 95) // F05F
|
||||
#define DUMMY_NPC_HOUSE_091 (DUMMY_START + 96) // F060
|
||||
#define DUMMY_NPC_HOUSE_092 (DUMMY_START + 97) // F061
|
||||
#define DUMMY_NPC_HOUSE_093 (DUMMY_START + 98) // F062
|
||||
#define DUMMY_NPC_HOUSE_094 (DUMMY_START + 99) // F063
|
||||
#define DUMMY_NPC_HOUSE_095 (DUMMY_START + 100) // F064
|
||||
#define DUMMY_NPC_HOUSE_096 (DUMMY_START + 101) // F065
|
||||
#define DUMMY_NPC_HOUSE_097 (DUMMY_START + 102) // F066
|
||||
#define DUMMY_NPC_HOUSE_098 (DUMMY_START + 103) // F067
|
||||
#define DUMMY_NPC_HOUSE_099 (DUMMY_START + 104) // F068
|
||||
#define DUMMY_NPC_HOUSE_100 (DUMMY_START + 105) // F069
|
||||
#define DUMMY_NPC_HOUSE_101 (DUMMY_START + 106) // F06A
|
||||
#define DUMMY_NPC_HOUSE_102 (DUMMY_START + 107) // F06B
|
||||
#define DUMMY_NPC_HOUSE_103 (DUMMY_START + 108) // F06C
|
||||
#define DUMMY_NPC_HOUSE_104 (DUMMY_START + 109) // F06D
|
||||
#define DUMMY_NPC_HOUSE_105 (DUMMY_START + 110) // F06E
|
||||
#define DUMMY_NPC_HOUSE_106 (DUMMY_START + 111) // F06F
|
||||
#define DUMMY_NPC_HOUSE_107 (DUMMY_START + 112) // F070
|
||||
#define DUMMY_NPC_HOUSE_108 (DUMMY_START + 113) // F071
|
||||
#define DUMMY_NPC_HOUSE_109 (DUMMY_START + 114) // F072
|
||||
#define DUMMY_NPC_HOUSE_110 (DUMMY_START + 115) // F073
|
||||
#define DUMMY_NPC_HOUSE_111 (DUMMY_START + 116) // F074
|
||||
#define DUMMY_NPC_HOUSE_112 (DUMMY_START + 117) // F075
|
||||
#define DUMMY_NPC_HOUSE_113 (DUMMY_START + 118) // F076
|
||||
#define DUMMY_NPC_HOUSE_114 (DUMMY_START + 119) // F077
|
||||
#define DUMMY_NPC_HOUSE_115 (DUMMY_START + 120) // F078
|
||||
#define DUMMY_NPC_HOUSE_116 (DUMMY_START + 121) // F079
|
||||
#define DUMMY_NPC_HOUSE_117 (DUMMY_START + 122) // F07A
|
||||
#define DUMMY_NPC_HOUSE_118 (DUMMY_START + 123) // F07B
|
||||
#define DUMMY_NPC_HOUSE_119 (DUMMY_START + 124) // F07C
|
||||
#define DUMMY_NPC_HOUSE_120 (DUMMY_START + 125) // F07D
|
||||
#define DUMMY_NPC_HOUSE_121 (DUMMY_START + 126) // F07E
|
||||
#define DUMMY_NPC_HOUSE_122 (DUMMY_START + 127) // F07F
|
||||
#define DUMMY_NPC_HOUSE_123 (DUMMY_START + 128) // F080
|
||||
#define DUMMY_NPC_HOUSE_124 (DUMMY_START + 129) // F081
|
||||
#define DUMMY_NPC_HOUSE_125 (DUMMY_START + 130) // F082
|
||||
#define DUMMY_NPC_HOUSE_126 (DUMMY_START + 131) // F083
|
||||
#define DUMMY_NPC_HOUSE_127 (DUMMY_START + 132) // F084
|
||||
#define DUMMY_NPC_HOUSE_128 (DUMMY_START + 133) // F085
|
||||
#define DUMMY_NPC_HOUSE_129 (DUMMY_START + 134) // F086
|
||||
#define DUMMY_NPC_HOUSE_130 (DUMMY_START + 135) // F087
|
||||
#define DUMMY_NPC_HOUSE_131 (DUMMY_START + 136) // F088
|
||||
#define DUMMY_NPC_HOUSE_132 (DUMMY_START + 137) // F089
|
||||
#define DUMMY_NPC_HOUSE_133 (DUMMY_START + 138) // F08A
|
||||
#define DUMMY_NPC_HOUSE_134 (DUMMY_START + 139) // F08B
|
||||
#define DUMMY_NPC_HOUSE_135 (DUMMY_START + 140) // F08C
|
||||
#define DUMMY_NPC_HOUSE_136 (DUMMY_START + 141) // F08D
|
||||
#define DUMMY_NPC_HOUSE_137 (DUMMY_START + 142) // F08E
|
||||
#define DUMMY_NPC_HOUSE_138 (DUMMY_START + 143) // F08F
|
||||
#define DUMMY_NPC_HOUSE_139 (DUMMY_START + 144) // F090
|
||||
#define DUMMY_NPC_HOUSE_140 (DUMMY_START + 145) // F091
|
||||
#define DUMMY_NPC_HOUSE_141 (DUMMY_START + 146) // F092
|
||||
#define DUMMY_NPC_HOUSE_142 (DUMMY_START + 147) // F093
|
||||
#define DUMMY_NPC_HOUSE_143 (DUMMY_START + 148) // F094
|
||||
#define DUMMY_NPC_HOUSE_144 (DUMMY_START + 149) // F095
|
||||
#define DUMMY_NPC_HOUSE_145 (DUMMY_START + 150) // F096
|
||||
#define DUMMY_NPC_HOUSE_146 (DUMMY_START + 151) // F097
|
||||
#define DUMMY_NPC_HOUSE_147 (DUMMY_START + 152) // F098
|
||||
#define DUMMY_NPC_HOUSE_148 (DUMMY_START + 153) // F099
|
||||
#define DUMMY_NPC_HOUSE_149 (DUMMY_START + 154) // F09A
|
||||
#define DUMMY_NPC_HOUSE_150 (DUMMY_START + 155) // F09B
|
||||
#define DUMMY_NPC_HOUSE_151 (DUMMY_START + 156) // F09C
|
||||
#define DUMMY_NPC_HOUSE_152 (DUMMY_START + 157) // F09D
|
||||
#define DUMMY_NPC_HOUSE_153 (DUMMY_START + 158) // F09E
|
||||
#define DUMMY_NPC_HOUSE_154 (DUMMY_START + 159) // F09F
|
||||
#define DUMMY_NPC_HOUSE_155 (DUMMY_START + 160) // F0A0
|
||||
#define DUMMY_NPC_HOUSE_156 (DUMMY_START + 161) // F0A1
|
||||
#define DUMMY_NPC_HOUSE_157 (DUMMY_START + 162) // F0A2
|
||||
#define DUMMY_NPC_HOUSE_158 (DUMMY_START + 163) // F0A3
|
||||
#define DUMMY_NPC_HOUSE_159 (DUMMY_START + 164) // F0A4
|
||||
#define DUMMY_NPC_HOUSE_160 (DUMMY_START + 165) // F0A5
|
||||
#define DUMMY_NPC_HOUSE_161 (DUMMY_START + 166) // F0A6
|
||||
#define DUMMY_NPC_HOUSE_162 (DUMMY_START + 167) // F0A7
|
||||
#define DUMMY_NPC_HOUSE_163 (DUMMY_START + 168) // F0A8
|
||||
#define DUMMY_NPC_HOUSE_164 (DUMMY_START + 169) // F0A9
|
||||
#define DUMMY_NPC_HOUSE_165 (DUMMY_START + 170) // F0AA
|
||||
#define DUMMY_NPC_HOUSE_166 (DUMMY_START + 171) // F0AB
|
||||
#define DUMMY_NPC_HOUSE_167 (DUMMY_START + 172) // F0AC
|
||||
#define DUMMY_NPC_HOUSE_168 (DUMMY_START + 173) // F0AD
|
||||
#define DUMMY_NPC_HOUSE_169 (DUMMY_START + 174) // F0AE
|
||||
#define DUMMY_NPC_HOUSE_170 (DUMMY_START + 175) // F0AF
|
||||
#define DUMMY_NPC_HOUSE_171 (DUMMY_START + 176) // F0B0
|
||||
#define DUMMY_NPC_HOUSE_172 (DUMMY_START + 177) // F0B1
|
||||
#define DUMMY_NPC_HOUSE_173 (DUMMY_START + 178) // F0B2
|
||||
#define DUMMY_NPC_HOUSE_174 (DUMMY_START + 179) // F0B3
|
||||
#define DUMMY_NPC_HOUSE_175 (DUMMY_START + 180) // F0B4
|
||||
#define DUMMY_NPC_HOUSE_176 (DUMMY_START + 181) // F0B5
|
||||
#define DUMMY_NPC_HOUSE_177 (DUMMY_START + 182) // F0B6
|
||||
#define DUMMY_NPC_HOUSE_178 (DUMMY_START + 183) // F0B7
|
||||
#define DUMMY_NPC_HOUSE_179 (DUMMY_START + 184) // F0B8
|
||||
#define DUMMY_NPC_HOUSE_180 (DUMMY_START + 185) // F0B9
|
||||
#define DUMMY_NPC_HOUSE_181 (DUMMY_START + 186) // F0BA
|
||||
#define DUMMY_NPC_HOUSE_182 (DUMMY_START + 187) // F0BB
|
||||
#define DUMMY_NPC_HOUSE_183 (DUMMY_START + 188) // F0BC
|
||||
#define DUMMY_NPC_HOUSE_184 (DUMMY_START + 189) // F0BD
|
||||
#define DUMMY_NPC_HOUSE_185 (DUMMY_START + 190) // F0BE
|
||||
#define DUMMY_NPC_HOUSE_186 (DUMMY_START + 191) // F0BF
|
||||
#define DUMMY_NPC_HOUSE_187 (DUMMY_START + 192) // F0C0
|
||||
#define DUMMY_NPC_HOUSE_188 (DUMMY_START + 193) // F0C1
|
||||
#define DUMMY_NPC_HOUSE_189 (DUMMY_START + 194) // F0C2
|
||||
#define DUMMY_NPC_HOUSE_190 (DUMMY_START + 195) // F0C3
|
||||
#define DUMMY_NPC_HOUSE_191 (DUMMY_START + 196) // F0C4
|
||||
#define DUMMY_NPC_HOUSE_192 (DUMMY_START + 197) // F0C5
|
||||
#define DUMMY_NPC_HOUSE_193 (DUMMY_START + 198) // F0C6
|
||||
#define DUMMY_NPC_HOUSE_194 (DUMMY_START + 199) // F0C7
|
||||
#define DUMMY_NPC_HOUSE_195 (DUMMY_START + 200) // F0C8
|
||||
#define DUMMY_NPC_HOUSE_196 (DUMMY_START + 201) // F0C9
|
||||
#define DUMMY_NPC_HOUSE_197 (DUMMY_START + 202) // F0CA
|
||||
#define DUMMY_NPC_HOUSE_198 (DUMMY_START + 203) // F0CB
|
||||
#define DUMMY_NPC_HOUSE_199 (DUMMY_START + 204) // F0CC
|
||||
#define DUMMY_NPC_HOUSE_200 (DUMMY_START + 205) // F0CD
|
||||
#define DUMMY_NPC_HOUSE_201 (DUMMY_START + 206) // F0CE
|
||||
#define DUMMY_NPC_HOUSE_202 (DUMMY_START + 207) // F0CF
|
||||
#define DUMMY_NPC_HOUSE_203 (DUMMY_START + 208) // F0D0
|
||||
#define DUMMY_NPC_HOUSE_204 (DUMMY_START + 209) // F0D1
|
||||
#define DUMMY_NPC_HOUSE_205 (DUMMY_START + 210) // F0D2
|
||||
#define DUMMY_NPC_HOUSE_206 (DUMMY_START + 211) // F0D3
|
||||
#define DUMMY_NPC_HOUSE_207 (DUMMY_START + 212) // F0D4
|
||||
#define DUMMY_NPC_HOUSE_208 (DUMMY_START + 213) // F0D5
|
||||
#define DUMMY_NPC_HOUSE_209 (DUMMY_START + 214) // F0D6
|
||||
#define DUMMY_NPC_HOUSE_210 (DUMMY_START + 215) // F0D7
|
||||
#define DUMMY_NPC_HOUSE_211 (DUMMY_START + 216) // F0D8
|
||||
#define DUMMY_NPC_HOUSE_212 (DUMMY_START + 217) // F0D9
|
||||
#define DUMMY_NPC_HOUSE_213 (DUMMY_START + 218) // F0DA
|
||||
#define DUMMY_NPC_HOUSE_214 (DUMMY_START + 219) // F0DB
|
||||
#define DUMMY_NPC_HOUSE_215 (DUMMY_START + 220) // F0DC
|
||||
#define DUMMY_NPC_HOUSE_216 (DUMMY_START + 221) // F0DD
|
||||
#define DUMMY_NPC_HOUSE_217 (DUMMY_START + 222) // F0DE
|
||||
#define DUMMY_NPC_HOUSE_218 (DUMMY_START + 223) // F0DF
|
||||
#define DUMMY_NPC_HOUSE_219 (DUMMY_START + 224) // F0E0
|
||||
#define DUMMY_NPC_HOUSE_220 (DUMMY_START + 225) // F0E1
|
||||
#define DUMMY_NPC_HOUSE_221 (DUMMY_START + 226) // F0E2
|
||||
#define DUMMY_NPC_HOUSE_222 (DUMMY_START + 227) // F0E3
|
||||
#define DUMMY_NPC_HOUSE_223 (DUMMY_START + 228) // F0E4
|
||||
#define DUMMY_NPC_HOUSE_224 (DUMMY_START + 229) // F0E5
|
||||
#define DUMMY_NPC_HOUSE_225 (DUMMY_START + 230) // F0E6
|
||||
#define DUMMY_NPC_HOUSE_226 (DUMMY_START + 231) // F0E7
|
||||
#define DUMMY_NPC_HOUSE_227 (DUMMY_START + 232) // F0E8
|
||||
#define DUMMY_NPC_HOUSE_228 (DUMMY_START + 233) // F0E9
|
||||
#define DUMMY_NPC_HOUSE_229 (DUMMY_START + 234) // F0EA
|
||||
#define DUMMY_NPC_HOUSE_230 (DUMMY_START + 235) // F0EB
|
||||
#define DUMMY_NPC_HOUSE_231 (DUMMY_START + 236) // F0EC
|
||||
#define DUMMY_NPC_HOUSE_232 (DUMMY_START + 237) // F0ED
|
||||
#define DUMMY_NPC_HOUSE_233 (DUMMY_START + 238) // F0EE
|
||||
#define DUMMY_NPC_HOUSE_234 (DUMMY_START + 239) // F0EF
|
||||
#define DUMMY_NPC_HOUSE_235 (DUMMY_START + 240) // F0F0
|
||||
#define DUMMY_NPC_HOUSE_236 (DUMMY_START + 241) // F0F1
|
||||
#define DUMMY_NPC_HOUSE_237 (DUMMY_START + 242) // F0F2
|
||||
#define DUMMY_HOUSE0 0xF0F3
|
||||
#define DUMMY_HOUSE1 0xF0F4
|
||||
#define DUMMY_HOUSE2 0xF0F5
|
||||
|
||||
@@ -0,0 +1,252 @@
|
||||
#include "ac_house.h"
|
||||
|
||||
#include "m_common_data.h"
|
||||
#include "m_player_lib.h"
|
||||
#include "m_bgm.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "m_rcp.h"
|
||||
#include "m_debug.h"
|
||||
|
||||
enum {
|
||||
aHUS_ACTION_WAIT,
|
||||
aHUS_ACTION_OPEN_DOOR_WAIT,
|
||||
aHUS_ACTION_OPEN_DOOR,
|
||||
aHUS_ACTION_NEXT_SCENE_WAIT,
|
||||
|
||||
aHUS_ACTION_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aHUS_MSG_NONE,
|
||||
aHUS_MSG_AWAY,
|
||||
aHUS_MSG_SLEEP,
|
||||
|
||||
aHUS_MSG_NUM
|
||||
};
|
||||
|
||||
enum {
|
||||
aHUS_REQUEST_NPC_CLOSE_DOOR,
|
||||
aHUS_REQUEST_NPC_OPEN_DOOR,
|
||||
aHUS_REQUEST_PLAYER_ENTER,
|
||||
aHUS_REQUEST_PLAYER_LEAVE,
|
||||
|
||||
aHUS_REQUEST_NUM
|
||||
};
|
||||
|
||||
#define aHUS_GET_LOOKS(h) ((h)->arg0)
|
||||
#define aHUS_GET_ANIMAL_P(h) ((Animal_c*)(h)->arg1)
|
||||
#define aHUS_GET_ANIMAL_IDX(h) ((h)->arg2)
|
||||
#define aHUS_GET_LIGHT_PERCENT(h) ((h)->arg1_f)
|
||||
|
||||
#define aHUS_SET_LOOKS(h, v) ((h)->arg0 = (v))
|
||||
#define aHUS_SET_ANIMAL_P(h, v) ((h)->arg1 = (int)(v))
|
||||
#define aHUS_SET_ANIMAL_IDX(h, v) ((h)->arg2 = (v))
|
||||
#define aHUS_SET_LIGHT_PERCENT(h, v) ((h)->arg1_f = (v))
|
||||
|
||||
static void aHUS_actor_ct(ACTOR* actorx, GAME* game);
|
||||
static void aHUS_actor_dt(ACTOR* actorx, GAME* game);
|
||||
static void aHUS_actor_init(ACTOR* actorx, GAME* game);
|
||||
static void aHUS_actor_move(ACTOR* actorx, GAME* game);
|
||||
static void aHUS_actor_draw(ACTOR* actorx, GAME* game);
|
||||
|
||||
// clang-format off
|
||||
ACTOR_PROFILE House_Profile = {
|
||||
mAc_PROFILE_HOUSE,
|
||||
ACTOR_PART_ITEM,
|
||||
ACTOR_STATE_NONE,
|
||||
NPC_HOUSE_START,
|
||||
ACTOR_OBJ_BANK_KEEP,
|
||||
sizeof(HOUSE_ACTOR),
|
||||
&aHUS_actor_ct,
|
||||
&aHUS_actor_dt,
|
||||
&aHUS_actor_init,
|
||||
&aHUS_actor_draw,
|
||||
NULL,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static void aHUS_setup_animation(HOUSE_ACTOR* house, f32 speed);
|
||||
static void aHUS_setup_action(HOUSE_ACTOR* house, int action);
|
||||
static void change_FGUnit(ACTOR* actorx, int keep_flag);
|
||||
static void aHUS_set_bgOffset(ACTOR* actorx, int idx);
|
||||
static f32 aHUS_ctrl_light(HOUSE_ACTOR* house);
|
||||
|
||||
extern Vtx obj_house1_shadow_v[];
|
||||
extern Gfx obj_house1_shadow_model[];
|
||||
|
||||
extern Vtx obj_s_house2_shadow_v[];
|
||||
extern Gfx obj_s_house2_shadow_model[];
|
||||
|
||||
extern Vtx obj_s_house3_shadow_v[];
|
||||
extern Gfx obj_s_house3_shadow_model[];
|
||||
|
||||
extern Vtx obj_s_house4_shadow_v[];
|
||||
extern Gfx obj_s_house4_shadow_model[];
|
||||
|
||||
extern Vtx obj_s_house5_shadow_v[];
|
||||
extern Gfx obj_s_house5_shadow_model[];
|
||||
|
||||
// clang-format off
|
||||
static u8 aHUS_shadow_vtx_fix_flg_table0[] = {
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
FALSE, TRUE, TRUE, FALSE,
|
||||
FALSE, TRUE, TRUE, FALSE,
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
FALSE, TRUE, FALSE, TRUE,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
static u8 aHUS_shadow_vtx_fix_flg_table1[] = {
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
FALSE, TRUE, FALSE, TRUE,
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
FALSE, TRUE, TRUE, FALSE,
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
static u8 aHUS_shadow_vtx_fix_flg_table2[] = {
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
FALSE, TRUE, FALSE, TRUE,
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
TRUE, FALSE, FALSE, TRUE,
|
||||
FALSE, TRUE, TRUE, FALSE,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static bIT_ShadowData_c aHUS_shadow_data0 = {
|
||||
ARRAY_COUNT(aHUS_shadow_vtx_fix_flg_table0),
|
||||
aHUS_shadow_vtx_fix_flg_table0,
|
||||
60.0f,
|
||||
obj_house1_shadow_v,
|
||||
obj_house1_shadow_model,
|
||||
};
|
||||
|
||||
static bIT_ShadowData_c aHUS_shadow_data1 = {
|
||||
ARRAY_COUNT(aHUS_shadow_vtx_fix_flg_table1),
|
||||
aHUS_shadow_vtx_fix_flg_table1,
|
||||
60.0f,
|
||||
obj_s_house2_shadow_v,
|
||||
obj_s_house2_shadow_model,
|
||||
};
|
||||
|
||||
static bIT_ShadowData_c aHUS_shadow_data2 = {
|
||||
ARRAY_COUNT(aHUS_shadow_vtx_fix_flg_table2),
|
||||
aHUS_shadow_vtx_fix_flg_table2,
|
||||
60.0f,
|
||||
obj_s_house3_shadow_v,
|
||||
obj_s_house3_shadow_model,
|
||||
};
|
||||
|
||||
static bIT_ShadowData_c aHUS_shadow_data3 = {
|
||||
ARRAY_COUNT(aHUS_shadow_vtx_fix_flg_table1),
|
||||
aHUS_shadow_vtx_fix_flg_table1,
|
||||
60.0f,
|
||||
obj_s_house4_shadow_v,
|
||||
obj_s_house4_shadow_model,
|
||||
};
|
||||
|
||||
static bIT_ShadowData_c aHUS_shadow_data4 = {
|
||||
ARRAY_COUNT(aHUS_shadow_vtx_fix_flg_table1),
|
||||
aHUS_shadow_vtx_fix_flg_table1,
|
||||
60.0f,
|
||||
obj_s_house5_shadow_v,
|
||||
obj_s_house5_shadow_model,
|
||||
};
|
||||
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_s_house1;
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_s_house2;
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_s_house3;
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_s_house4;
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_s_house5;
|
||||
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_w_house1;
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_w_house2;
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_w_house3;
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_w_house4;
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_w_house5;
|
||||
|
||||
// clang-format off
|
||||
static cKF_Skeleton_R_c* aHUS_house_model_normal[] = {
|
||||
&cKF_bs_r_obj_s_house1,
|
||||
&cKF_bs_r_obj_s_house2,
|
||||
&cKF_bs_r_obj_s_house3,
|
||||
&cKF_bs_r_obj_s_house4,
|
||||
&cKF_bs_r_obj_s_house5,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
static cKF_Skeleton_R_c* aHUS_house_model_winter[] = {
|
||||
&cKF_bs_r_obj_w_house1,
|
||||
&cKF_bs_r_obj_w_house2,
|
||||
&cKF_bs_r_obj_w_house3,
|
||||
&cKF_bs_r_obj_w_house4,
|
||||
&cKF_bs_r_obj_w_house5,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static cKF_Skeleton_R_c** aHUS_house_model[] = { aHUS_house_model_normal, aHUS_house_model_winter };
|
||||
|
||||
// clang-format off
|
||||
static bIT_ShadowData_c* aHUS_shadow_data[] = {
|
||||
&aHUS_shadow_data0,
|
||||
&aHUS_shadow_data1,
|
||||
&aHUS_shadow_data2,
|
||||
&aHUS_shadow_data3,
|
||||
&aHUS_shadow_data4,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static void aHUS_actor_ct(ACTOR* actorx, GAME* game) {
|
||||
HOUSE_ACTOR* house = (HOUSE_ACTOR*)actorx;
|
||||
int season;
|
||||
s16 shape;
|
||||
s16 pal;
|
||||
int idx = mNpc_SearchAnimalinfo(Save_Get(animals), NPC_START + (actorx->npc_id - NPC_HOUSE_START), ANIMAL_NUM_MAX);
|
||||
|
||||
if (idx >= 0) {
|
||||
aHUS_SET_LOOKS(house, mNpc_GetLooks(Common_Get(npclist[idx]).name));
|
||||
aHUS_SET_ANIMAL_P(house, Save_GetPointer(animals[idx]));
|
||||
aHUS_SET_ANIMAL_IDX(house, idx);
|
||||
house->season = Common_Get(time.season);
|
||||
season = house->season == mTM_SEASON_WINTER;
|
||||
shape = Common_Get(npclist[idx]).house_data.type;
|
||||
pal = Common_Get(npclist[idx]).house_data.palette;
|
||||
house->structure_type = aSTR_TYPE_HOUSE1 + shape;
|
||||
house->structure_pal = aSTR_PAL_HOUSE1_A + (s16)(pal + (shape * 5));
|
||||
} else {
|
||||
aHUS_SET_LOOKS(house, mNpc_LOOKS_GIRL);
|
||||
aHUS_SET_ANIMAL_P(house, Save_GetPointer(animals[0]));
|
||||
aHUS_SET_ANIMAL_IDX(house, 0);
|
||||
house->season = Common_Get(time.season);
|
||||
shape = 0;
|
||||
pal = 0;
|
||||
season = house->season == mTM_SEASON_WINTER;
|
||||
house->structure_type = aSTR_TYPE_HOUSE1;
|
||||
house->structure_pal = aSTR_PAL_HOUSE1_A;
|
||||
}
|
||||
|
||||
cKF_SkeletonInfo_R_ct(&house->keyframe, aHUS_house_model[season][shape], NULL, house->work_area, house->morph_area);
|
||||
aHUS_set_bgOffset(actorx, 1);
|
||||
change_FGUnit(actorx, TRUE);
|
||||
aHUS_setup_action(house, aHUS_ACTION_WAIT);
|
||||
aHUS_setup_animation(house, 0.0f);
|
||||
cKF_SkeletonInfo_R_play(&house->keyframe);
|
||||
aHUS_SET_LIGHT_PERCENT(house, aHUS_ctrl_light(house));
|
||||
}
|
||||
|
||||
static void aHUS_actor_dt(ACTOR* actorx, GAME* game) {
|
||||
HOUSE_ACTOR* house = (HOUSE_ACTOR*)actorx;
|
||||
|
||||
change_FGUnit(actorx, FALSE);
|
||||
cKF_SkeletonInfo_R_dt(&house->keyframe);
|
||||
}
|
||||
|
||||
#include "../src/actor/ac_house_move.c_inc"
|
||||
#include "../src/actor/ac_house_draw.c_inc"
|
||||
@@ -0,0 +1,281 @@
|
||||
extern Gfx obj_s_shop2_window_model[];
|
||||
extern Gfx obj_w_shop2_window_model[];
|
||||
|
||||
static int aHUS_actor_draw_before(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
HOUSE_ACTOR* house;
|
||||
GRAPH* graph;
|
||||
int b;
|
||||
int rg;
|
||||
|
||||
house = (HOUSE_ACTOR*)arg;
|
||||
graph = game->graph;
|
||||
|
||||
if (joint_idx == 1 || joint_idx == 3) {
|
||||
OPEN_POLY_OPA_DISP(graph);
|
||||
|
||||
b = 0.5f + (150 * aHUS_GET_LIGHT_PERCENT(house));
|
||||
rg = 0.5f + (255 * aHUS_GET_LIGHT_PERCENT(house));
|
||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, rg, rg, b, 255);
|
||||
|
||||
CLOSE_POLY_OPA_DISP(graph);
|
||||
}
|
||||
|
||||
if (joint_idx == 7) {
|
||||
*joint_shape = NULL;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
extern Gfx obj_s_house1_windowL_model[];
|
||||
extern Gfx obj_s_house1_windowR_model[];
|
||||
|
||||
extern Gfx obj_s_house2_window_model[];
|
||||
|
||||
extern Gfx obj_s_house3_windowL_model[];
|
||||
extern Gfx obj_s_house3_windowR_model[];
|
||||
|
||||
extern Gfx obj_s_house4_windowL_model[];
|
||||
extern Gfx obj_s_house4_windowR_model[];
|
||||
|
||||
extern Gfx obj_s_house5_windowL_model[];
|
||||
extern Gfx obj_s_house5_windowR_model[];
|
||||
|
||||
extern Gfx obj_w_house1_windowL_model[];
|
||||
extern Gfx obj_w_house1_windowR_model[];
|
||||
|
||||
extern Gfx obj_w_house2_window_model[];
|
||||
|
||||
extern Gfx obj_w_house3_windowL_model[];
|
||||
extern Gfx obj_w_house3_windowR_model[];
|
||||
|
||||
extern Gfx obj_w_house4_windowL_model[];
|
||||
extern Gfx obj_w_house4_windowR_model[];
|
||||
|
||||
extern Gfx obj_w_house5_windowL_model[];
|
||||
extern Gfx obj_w_house5_windowR_model[];
|
||||
|
||||
static int aHUS_actor_draw_after(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
static Gfx* window_model_table[][2][2] = {
|
||||
{
|
||||
{ obj_s_house1_windowL_model, obj_s_house1_windowR_model },
|
||||
{ obj_w_house1_windowL_model, obj_w_house1_windowR_model },
|
||||
},
|
||||
{
|
||||
{ obj_s_house2_window_model, NULL },
|
||||
{ obj_w_house2_window_model, NULL },
|
||||
},
|
||||
{
|
||||
{ obj_s_house3_windowL_model, obj_s_house3_windowR_model },
|
||||
{ obj_w_house3_windowL_model, obj_w_house3_windowR_model },
|
||||
},
|
||||
{
|
||||
{ obj_s_house4_windowL_model, obj_s_house4_windowR_model },
|
||||
{ obj_w_house4_windowL_model, obj_w_house4_windowR_model },
|
||||
},
|
||||
{
|
||||
{ obj_s_house5_windowL_model, obj_s_house5_windowR_model },
|
||||
{ obj_w_house5_windowL_model, obj_w_house5_windowR_model },
|
||||
},
|
||||
};
|
||||
|
||||
static xyz_t window_light_offset_table[] = { { -100.0f, 0.0f, 0.0f }, { 100.0f, 0.0f, 0.0f } };
|
||||
|
||||
GRAPH* graph;
|
||||
HOUSE_ACTOR* house;
|
||||
u16* pal_p;
|
||||
int season;
|
||||
int type;
|
||||
int l;
|
||||
int r;
|
||||
int g;
|
||||
int b;
|
||||
Mtx* mtx;
|
||||
xyz_t posR;
|
||||
xyz_t posL;
|
||||
int mod_l;
|
||||
|
||||
house = (HOUSE_ACTOR*)arg;
|
||||
graph = game->graph;
|
||||
|
||||
if (joint_idx == 7) {
|
||||
mtx = _Matrix_to_Mtx_new(graph);
|
||||
if (mtx != NULL) {
|
||||
if (aHUS_GET_LIGHT_PERCENT(house) > 0.0f) {
|
||||
l = aHUS_GET_LIGHT_PERCENT(house) * 120.0f + 0.5f;
|
||||
r = 255;
|
||||
g = 255;
|
||||
b = 150;
|
||||
} else {
|
||||
l = 0;
|
||||
r = 0;
|
||||
g = 0;
|
||||
b = 0;
|
||||
}
|
||||
|
||||
pal_p = CLIP(structure_clip)->get_pal_segment_proc(house->structure_pal);
|
||||
type = house->structure_type;
|
||||
season = house->season == mTM_SEASON_WINTER;
|
||||
|
||||
_texture_z_light_fog_prim_shadow(graph);
|
||||
|
||||
OPEN_SHADOW_DISP(graph);
|
||||
|
||||
gSPSegment(SHADOW_DISP++, ANIME_1_TXT_SEG, pal_p);
|
||||
gDPSetPrimColor(SHADOW_DISP++, 0, l, r, g, b, 0);
|
||||
gSPMatrix(SHADOW_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
// @cleanup - why check this so late? we already deferenced house multiple times
|
||||
if (house != NULL) {
|
||||
posL.x = house->actor_class.world.position.x + window_light_offset_table[0].x;
|
||||
posL.y = house->actor_class.world.position.y + window_light_offset_table[0].y;
|
||||
posL.z = house->actor_class.world.position.z + window_light_offset_table[0].z;
|
||||
mCoBG_GetBgY_AngleS_FromWpos(NULL, posL, 0.0f); // @cleanup - leftover call? completely unused, waste of cycles
|
||||
|
||||
posR.x = house->actor_class.world.position.x + window_light_offset_table[1].x;
|
||||
posR.y = house->actor_class.world.position.y + window_light_offset_table[1].y;
|
||||
posR.z = house->actor_class.world.position.z + window_light_offset_table[1].z;
|
||||
mCoBG_GetBgY_AngleS_FromWpos(NULL, posR, 0.0f); // @cleanup - leftover call? completely unused, waste of cycles
|
||||
|
||||
mod_l = REGADDR(mREG, 10) + l;
|
||||
gDPSetPrimColor(SHADOW_DISP++, 0, mod_l, r, g, b, 0);
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | 0x40 | 0x10);
|
||||
|
||||
if (REGADDR(mREG, 13) == 5) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH);
|
||||
} else if (REGADDR(mREG, 13) == 1) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | 0x10);
|
||||
} else if (REGADDR(mREG, 13) == 2) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH);
|
||||
} else if (REGADDR(mREG, 13) == 3) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | 0x40 | 0x10);
|
||||
} else if (REGADDR(mREG, 13) == 4) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | 0x40);
|
||||
}
|
||||
|
||||
if (REGADDR(mREG, 13) >= 0) {
|
||||
if (window_model_table[type][season][1] != NULL) {
|
||||
gSPDisplayList(SHADOW_DISP++, window_model_table[type][season][1]);
|
||||
}
|
||||
|
||||
gSPDisplayList(SHADOW_DISP++, window_model_table[type][season][0]);
|
||||
}
|
||||
|
||||
mod_l = REGADDR(mREG, 11) + l;
|
||||
gDPSetPrimColor(SHADOW_DISP++, 0, mod_l, r, g, b, 0);
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | 0x40);
|
||||
|
||||
if (REGADDR(mREG, 15) == 5) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH);
|
||||
} else if (REGADDR(mREG, 15) == 1) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | 0x10);
|
||||
} else if (REGADDR(mREG, 15) == 2) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH);
|
||||
} else if (REGADDR(mREG, 15) == 3) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | 0x40 | 0x10);
|
||||
} else if (REGADDR(mREG, 15) == 4) {
|
||||
gSPLoadGeometryMode(SHADOW_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH | 0x40);
|
||||
}
|
||||
|
||||
if (REGADDR(mREG, 15) >= 0) {
|
||||
if (window_model_table[type][season][1] != NULL) {
|
||||
gSPDisplayList(SHADOW_DISP++, window_model_table[type][season][1]);
|
||||
}
|
||||
|
||||
gSPDisplayList(SHADOW_DISP++, window_model_table[type][season][0]);
|
||||
}
|
||||
|
||||
gSPClearGeometryMode(SHADOW_DISP++, 0x40 | 0x10);
|
||||
}
|
||||
|
||||
CLOSE_SHADOW_DISP(graph);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void aHUS_actor_draw_ta_set(ACTOR* actorx, GAME* game) {
|
||||
// clang-format off
|
||||
static u8 edge_alpha[][2] = {
|
||||
{ 64, 64 },
|
||||
{ 91, 91 },
|
||||
{ 63, 3 },
|
||||
{ 92, 92 },
|
||||
{ 48, 48 },
|
||||
};
|
||||
// clang-format on
|
||||
// clang-format off
|
||||
static int adjust_mode[][2] = {
|
||||
{ G_TA_DOLPHIN, G_TA_DOLPHIN },
|
||||
{ G_TA_N64, G_TA_N64 },
|
||||
{ G_TA_DOLPHIN, G_TA_N64 },
|
||||
{ G_TA_DOLPHIN, G_TA_DOLPHIN },
|
||||
{ G_TA_DOLPHIN, G_TA_DOLPHIN },
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
GRAPH* graph = game->graph;
|
||||
HOUSE_ACTOR* house = (HOUSE_ACTOR*)actorx;
|
||||
int type = house->structure_type;
|
||||
int season = house->season == mTM_SEASON_WINTER;
|
||||
u8 a = GETREG(MYKREG, 1) + edge_alpha[type][season];
|
||||
int adjust = adjust_mode[type][season];
|
||||
|
||||
OPEN_DISP(graph);
|
||||
|
||||
gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, adjust);
|
||||
gDPSetTextureAdjustMode(NEXT_SHADOW_DISP, adjust);
|
||||
gDPSetTexEdgeAlpha(NEXT_POLY_OPA_DISP, a);
|
||||
gDPSetTexEdgeAlpha(NEXT_SHADOW_DISP, a);
|
||||
|
||||
CLOSE_DISP(graph);
|
||||
}
|
||||
|
||||
static void aHUS_actor_draw_ta_clr(ACTOR* actorx, GAME* game) {
|
||||
GRAPH* graph = game->graph;
|
||||
|
||||
OPEN_DISP(graph);
|
||||
|
||||
gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_N64);
|
||||
gDPSetTextureAdjustMode(NEXT_SHADOW_DISP, G_TA_N64);
|
||||
gDPSetTexEdgeAlpha(NEXT_POLY_OPA_DISP, 144);
|
||||
gDPSetTexEdgeAlpha(NEXT_SHADOW_DISP, 144);
|
||||
|
||||
CLOSE_DISP(graph);
|
||||
}
|
||||
|
||||
static void aHUS_actor_draw(ACTOR* actorx, GAME* game) {
|
||||
GRAPH* graph;
|
||||
cKF_SkeletonInfo_R_c* keyframe;
|
||||
Mtx* mtx;
|
||||
u16* pal;
|
||||
HOUSE_ACTOR* house;
|
||||
|
||||
graph = game->graph;
|
||||
house = (HOUSE_ACTOR*)actorx;
|
||||
keyframe = &house->keyframe;
|
||||
|
||||
mtx = GRAPH_ALLOC_TYPE(graph, Mtx, (u32)keyframe->skeleton->num_shown_joints);
|
||||
if (mtx == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
aHUS_actor_draw_ta_set(actorx, game);
|
||||
pal = Common_Get(clip).structure_clip->get_pal_segment_proc(house->structure_pal);
|
||||
|
||||
_texture_z_light_fog_prim_npc(graph);
|
||||
|
||||
OPEN_POLY_OPA_DISP(graph);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, ANIME_1_TXT_SEG, pal);
|
||||
|
||||
CLOSE_POLY_OPA_DISP(graph);
|
||||
|
||||
cKF_Si3_draw_R_SV(game, keyframe, mtx, &aHUS_actor_draw_before, &aHUS_actor_draw_after, actorx);
|
||||
|
||||
CLIP(bg_item_clip)->draw_shadow_proc(game, aHUS_shadow_data[house->structure_type], TRUE);
|
||||
aHUS_actor_draw_ta_clr(actorx, game);
|
||||
}
|
||||
@@ -0,0 +1,485 @@
|
||||
static void aHUS_set_door_SE_sub(ACTOR* actorx, u16 se_no) {
|
||||
sAdo_OngenTrgStart(se_no, &actorx->world.position);
|
||||
}
|
||||
|
||||
static void change_FGUnit(ACTOR* actorx, int keep_flag) {
|
||||
mActor_name_t* fg_p;
|
||||
mActor_name_t item;
|
||||
xyz_t pos;
|
||||
|
||||
xyz_t_move(&pos, &actorx->world.position);
|
||||
pos.z += 2 * mFI_UT_WORLDSIZE_Z_F;
|
||||
|
||||
if (keep_flag == FALSE) {
|
||||
mFI_SetFG_common(EMPTY_NO, pos, TRUE);
|
||||
} else {
|
||||
fg_p = mFI_GetUnitFG(pos);
|
||||
|
||||
if (fg_p != NULL) {
|
||||
if (!mSN_ClearSnowman(fg_p)) {
|
||||
item = *fg_p;
|
||||
|
||||
if ((ITEM_IS_BURIED_PITFALL_HOLE(item) || item == SHINE_SPOT) == TRUE) {
|
||||
item = bg_item_fg_sub_dig2take_conv(item);
|
||||
mPB_keep_item(item);
|
||||
mFI_SetFG_common(RSV_NO, pos, TRUE);
|
||||
mFI_Wpos2DepositOFF(pos);
|
||||
} else {
|
||||
mFI_Wpos2DepositOFF(pos);
|
||||
mPB_keep_item(*fg_p);
|
||||
mFI_SetFG_common(RSV_NO, pos, TRUE);
|
||||
}
|
||||
} else {
|
||||
mFI_SetFG_common(RSV_NO, pos, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void aHUS_set_doorSE(HOUSE_ACTOR* house) {
|
||||
static f32 chk_pat_in[] = { 10.0f, 14.0f, 35.0f, 50.0f };
|
||||
static f32 chk_pat_out[] = { 2.0f, 8.0f, 33.0f, 40.0f };
|
||||
static u16 se_no[] = { NA_SE_6, NA_SE_7, NA_SE_8, NA_SE_9 };
|
||||
|
||||
f32* chk_pat_p;
|
||||
int i;
|
||||
|
||||
switch (house->request_type) {
|
||||
case aHUS_REQUEST_NPC_OPEN_DOOR:
|
||||
case aHUS_REQUEST_PLAYER_LEAVE:
|
||||
chk_pat_p = chk_pat_in;
|
||||
break;
|
||||
// case aHUS_REQUEST_NPC_CLOSE_DOOR:
|
||||
case aHUS_REQUEST_PLAYER_ENTER:
|
||||
default:
|
||||
chk_pat_p = chk_pat_out;
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (cKF_FrameControl_passCheck_now(&house->keyframe.frame_control, *chk_pat_p)) {
|
||||
aHUS_set_door_SE_sub((ACTOR*)house, se_no[i]);
|
||||
break;
|
||||
}
|
||||
|
||||
chk_pat_p++;
|
||||
}
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
static Door_data_c aHUS_npc_house_door_data = {
|
||||
SCENE_NPC_HOUSE,
|
||||
mSc_DIRECT_NORTH,
|
||||
0,
|
||||
0,
|
||||
{ 160, 0, 300 },
|
||||
EMPTY_NO,
|
||||
1,
|
||||
{ 0, 0, 0 },
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static int aHUS_odekake_check(HOUSE_ACTOR* house, GAME_PLAY* play) {
|
||||
Animal_c* animal_p;
|
||||
int ret;
|
||||
int idx;
|
||||
ACTOR* npc_actor_p;
|
||||
int status;
|
||||
int goal;
|
||||
mActor_name_t name;
|
||||
|
||||
animal_p = aHUS_GET_ANIMAL_P(house);
|
||||
idx = aHUS_GET_ANIMAL_IDX(house);
|
||||
ret = FALSE;
|
||||
house->arg0_f = 0.0f;
|
||||
name = Common_Get(npclist[idx]).name;
|
||||
npc_actor_p = Actor_info_fgName_search(&play->actor_info, Common_Get(npclist[idx]).name, ACTOR_PART_NPC);
|
||||
|
||||
if (mEvNM_CheckJointEvent(name)) {
|
||||
house->arg0_f = 1.0f;
|
||||
ret = TRUE;
|
||||
} else if (mNpc_CheckNpcExistBlock(idx, play->block_table.block_x, play->block_table.block_z) && npc_actor_p != NULL) {
|
||||
if (animal_p->is_home == TRUE) {
|
||||
if (house->arg3 == 2) {
|
||||
house->arg0_f = 2.0f;
|
||||
ret = TRUE;
|
||||
}
|
||||
} else if (mNpcW_GetWalkInfoStatusGoalAnimalIdx(&status, &goal, idx) && status == mNpcW_INFO_STATUS_WALKING && goal == mNpcW_GOAL_MY_HOME && !animal_p->is_home) {
|
||||
house->arg0_f = 1.0f;
|
||||
ret = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (animal_p->is_home == TRUE) {
|
||||
if (house->arg3 == 2) {
|
||||
house->arg0_f = 2.0f;
|
||||
ret = TRUE;
|
||||
}
|
||||
} else {
|
||||
house->arg0_f = 1.0f;
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house1;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house1;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house2;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house2;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house3;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house3;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house4;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house4;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house5;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house5;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house1_out;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house1_out;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house2_out;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house2_out;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house3_out;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house3_out;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house4_out;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house4_out;
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_s_house5_out;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_w_house5_out;
|
||||
|
||||
static void aHUS_setup_animation(HOUSE_ACTOR* house, f32 speed) {
|
||||
static cKF_Animation_R_c* animation[][5][2] = {
|
||||
{
|
||||
{ &cKF_ba_r_obj_s_house1, &cKF_ba_r_obj_w_house1 },
|
||||
{ &cKF_ba_r_obj_s_house2, &cKF_ba_r_obj_w_house2 },
|
||||
{ &cKF_ba_r_obj_s_house3, &cKF_ba_r_obj_w_house3 },
|
||||
{ &cKF_ba_r_obj_s_house4, &cKF_ba_r_obj_w_house4 },
|
||||
{ &cKF_ba_r_obj_s_house5, &cKF_ba_r_obj_w_house5 },
|
||||
},
|
||||
{
|
||||
{ &cKF_ba_r_obj_s_house1_out, &cKF_ba_r_obj_w_house1_out },
|
||||
{ &cKF_ba_r_obj_s_house2_out, &cKF_ba_r_obj_w_house2_out },
|
||||
{ &cKF_ba_r_obj_s_house3_out, &cKF_ba_r_obj_w_house3_out },
|
||||
{ &cKF_ba_r_obj_s_house4_out, &cKF_ba_r_obj_w_house4_out },
|
||||
{ &cKF_ba_r_obj_s_house5_out, &cKF_ba_r_obj_w_house5_out },
|
||||
},
|
||||
};
|
||||
|
||||
static f32 start_idx[] = { 1.0f, 25.0f, 1.0f, 1.0f };
|
||||
static f32 end_idx[] = { 51.0f, 51.0f, 51.0f, 51.0f };
|
||||
int type;
|
||||
cKF_Animation_R_c* anim_p;
|
||||
int season;
|
||||
f32 start;
|
||||
f32 end;
|
||||
|
||||
season = house->season == mTM_SEASON_WINTER;
|
||||
switch (house->request_type) {
|
||||
case aHUS_REQUEST_PLAYER_ENTER:
|
||||
type = 2;
|
||||
break;
|
||||
case aHUS_REQUEST_NUM:
|
||||
type = 1;
|
||||
break; // what would trigger this??
|
||||
default:
|
||||
type = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
anim_p = animation[type != 0][house->structure_type - aSTR_TYPE_HOUSE1][season];
|
||||
start = start_idx[type];
|
||||
end = end_idx[type];
|
||||
|
||||
cKF_SkeletonInfo_R_init(&house->keyframe, house->keyframe.skeleton, anim_p, start, end, start, speed, 0.0f, cKF_FRAMECONTROL_STOP, NULL);
|
||||
}
|
||||
|
||||
static void aHUS_rewrite_out_data(HOUSE_ACTOR* house, GAME_PLAY* play) {
|
||||
Door_data_c* out_data_p = Common_GetPointer(structure_exit_door_data);
|
||||
mActor_name_t name;
|
||||
xyz_t pos;
|
||||
|
||||
if (play->fb_wipe_mode == 0) {
|
||||
name = NPC_START + (house->actor_class.npc_id - NPC_HOUSE_START);
|
||||
if (mNpc_SearchAnimalinfo(Save_Get(animals), name, ANIMAL_NUM_MAX) == -1) {
|
||||
name = RSV_NO;
|
||||
}
|
||||
Common_Set(house_owner_name, name);
|
||||
|
||||
out_data_p->next_scene_id = Save_Get(scene_no);
|
||||
out_data_p->exit_orientation = mSc_DIRECT_SOUTH;
|
||||
out_data_p->exit_type = 0;
|
||||
out_data_p->extra_data = 2;
|
||||
|
||||
pos.x = house->actor_class.home.position.x;
|
||||
pos.z = house->actor_class.home.position.z + 60.0f;
|
||||
pos.y = mCoBG_GetBgY_OnlyCenter_FromWpos2(pos, 0.0f);
|
||||
|
||||
out_data_p->exit_position.x = (s16)pos.x;
|
||||
out_data_p->exit_position.y = (s16)pos.y;
|
||||
out_data_p->exit_position.z = (s16)pos.z;
|
||||
out_data_p->door_actor_name = house->actor_class.npc_id;
|
||||
out_data_p->wipe_type = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void aHUS_set_talk_info_check_player(ACTOR* actorx) {
|
||||
HOUSE_ACTOR* house = (HOUSE_ACTOR*)actorx;
|
||||
rgba_t window_color;
|
||||
int msg_no;
|
||||
|
||||
if (house->arg0_f == 2.0f) {
|
||||
msg_no = 0x1363 + aHUS_GET_LOOKS(house); // Sleeping
|
||||
} else {
|
||||
msg_no = 0x2AFE; // I'm not in right now.
|
||||
}
|
||||
|
||||
mDemo_Set_msg_num(msg_no);
|
||||
mDemo_Set_talk_display_name(FALSE);
|
||||
mDemo_Set_camera(CAMERA2_PROCESS_NORMAL);
|
||||
mPlib_Set_able_hand_all_item_in_demo(mPlayer_ABLE_ITEM_CAN_USE_UMBRELLA);
|
||||
mDemo_Set_ListenAble();
|
||||
|
||||
window_color.r = 145;
|
||||
window_color.g = 60;
|
||||
window_color.b = 40;
|
||||
window_color.a = 255;
|
||||
mDemo_Set_talk_window_color(&window_color);
|
||||
}
|
||||
|
||||
static int aHUS_check_player(HOUSE_ACTOR* house, GAME_PLAY* play) {
|
||||
int ret = 0;
|
||||
PLAYER_ACTOR* player = GET_PLAYER_ACTOR(play);
|
||||
mNPS_schedule_c* sched_p;
|
||||
Animal_c* animal_p;
|
||||
mActor_name_t name;
|
||||
|
||||
if (player == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
name = house->actor_class.npc_id;
|
||||
name = name - NPC_HOUSE_START + DUMMY_NPC_HOUSE_000;
|
||||
if ((mActor_name_t)player->item_in_front == name && chkTrigger(BUTTON_A)) {
|
||||
if ((mEv_CheckFirstJob() == TRUE || mEv_check_status(mEv_EVENT_HALLOWEEN, mEv_STATUS_ACTIVE)) == TRUE) {
|
||||
house->arg3 = 0;
|
||||
} else {
|
||||
animal_p = aHUS_GET_ANIMAL_P(house);
|
||||
sched_p = mNPS_get_schedule_area(&animal_p->id);
|
||||
house->arg3 = sched_p->current_type;
|
||||
}
|
||||
|
||||
if (aHUS_odekake_check(house, play)) {
|
||||
mDemo_Request(mDemo_TYPE_SPEAK, (ACTOR*)house, &aHUS_set_talk_info_check_player);
|
||||
} else {
|
||||
ret = 2;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void aHUS_open_door_demo_ct(ACTOR* actorx) {
|
||||
mDemo_Set_house_info(mFI_UNIT_BASE_SIZE_F, mDemo_DIRECT_S);
|
||||
mDemo_Set_camera(CAMERA2_PROCESS_DOOR);
|
||||
}
|
||||
|
||||
static int aHUS_check_open(HOUSE_ACTOR* house, GAME_PLAY* play) {
|
||||
int ret = 0;
|
||||
int request;
|
||||
|
||||
if (mDemo_Check(mDemo_TYPE_DOOR, (ACTOR*)house)) {
|
||||
return 2;
|
||||
} else {
|
||||
request = house->request_type;
|
||||
|
||||
if (request == 0) {
|
||||
if (aHUS_check_player(house, play) == 2) {
|
||||
mDemo_Request(mDemo_TYPE_DOOR, (ACTOR*)house, &aHUS_open_door_demo_ct);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
} else if (request == 1 || request == 2) {
|
||||
ret = 1;
|
||||
} else if (request == 3) {
|
||||
ret = 2;
|
||||
} else if (request == 4) {
|
||||
ret = 3;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void aHUS_set_bgOffset(ACTOR* actorx, int idx) {
|
||||
// clang-format off
|
||||
static mCoBG_OffsetTable_c height_table_ct[] = {
|
||||
{ mCoBG_ATTRIBUTE_NONE, 7, 7, 7, 7, 7, 0 },
|
||||
{ mCoBG_ATTRIBUTE_NONE, 0, 0, 0, 0, 0, 0 },
|
||||
{ mCoBG_ATTRIBUTE_NONE, 7, 7, 7, 7, 7, 0 },
|
||||
{ mCoBG_ATTRIBUTE_NONE, 7, 7, 7, 7, 7, 0 },
|
||||
{ mCoBG_ATTRIBUTE_NONE, 7, 7, 7, 7, 7, 0 },
|
||||
{ mCoBG_ATTRIBUTE_NONE, 7, 7, 7, 7, 7, 0 },
|
||||
{ mCoBG_ATTRIBUTE_NONE, 7, 7, 7, 7, 7, 0 },
|
||||
{ mCoBG_ATTRIBUTE_NONE, 7, 7, 7, 7, 7, 0 },
|
||||
{ mCoBG_ATTRIBUTE_NONE, 7, 7, 7, 7, 7, 0 },
|
||||
};
|
||||
// clang-format on
|
||||
static mCoBG_OffsetTable_c* height_table[] = { height_table_ct, height_table_ct };
|
||||
static f32 addX[] = { -mFI_UT_WORLDSIZE_X_F, 0.0f, mFI_UT_WORLDSIZE_X_F };
|
||||
static f32 addZ[] = { mFI_UT_WORLDSIZE_Z_F, 0.0f, -mFI_UT_WORLDSIZE_Z_F };
|
||||
mCoBG_OffsetTable_c* ofs_p = height_table[idx];
|
||||
xyz_t pos;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
pos.z = actorx->home.position.z + addZ[i];
|
||||
|
||||
pos.x = actorx->home.position.x + addX[0];
|
||||
mCoBG_SetPluss5PointOffset_file(pos, ofs_p[0], __FILE__, 620);
|
||||
|
||||
pos.x = actorx->home.position.x + addX[1];
|
||||
mCoBG_SetPluss5PointOffset_file(pos, ofs_p[1], __FILE__, 624);
|
||||
|
||||
pos.x = actorx->home.position.x + addX[2];
|
||||
mCoBG_SetPluss5PointOffset_file(pos, ofs_p[2], __FILE__, 628);
|
||||
|
||||
ofs_p += 3;
|
||||
}
|
||||
}
|
||||
|
||||
static f32 aHUS_ctrl_light(HOUSE_ACTOR* house) {
|
||||
Animal_c* animal_p = aHUS_GET_ANIMAL_P(house);
|
||||
mNPS_schedule_c* sched_p = mNPS_get_schedule_area(&animal_p->id);
|
||||
int now_sec = Common_Get(time.now_sec);
|
||||
mActor_name_t name;
|
||||
|
||||
if (sched_p == NULL) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
name = Common_Get(npclist[aHUS_GET_ANIMAL_IDX(house)]).name;
|
||||
if (mEvNM_CheckJointEvent(name) && !mEv_CheckArbeit()) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
if (sched_p->current_type == mNPS_SCHED_IN_HOUSE && animal_p->is_home == TRUE &&
|
||||
(now_sec >= (18 * mTM_SECONDS_IN_HOUR) || now_sec <= (5 * mTM_SECONDS_IN_HOUR))) {
|
||||
if (house->request_type == 2) {
|
||||
return 0.0f;
|
||||
} else {
|
||||
return 1.0f;
|
||||
}
|
||||
} else {
|
||||
return 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
static void aHUS_wait(HOUSE_ACTOR* house, GAME_PLAY* play) {
|
||||
int next_act = -1;
|
||||
|
||||
switch (aHUS_check_open(house, play)) {
|
||||
case 1:
|
||||
next_act = aHUS_ACTION_OPEN_DOOR;
|
||||
break;
|
||||
case 3:
|
||||
if (mPlib_check_player_outdoor_start((GAME*)play)) {
|
||||
next_act = aHUS_ACTION_OPEN_DOOR;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
next_act = aHUS_ACTION_OPEN_DOOR_WAIT;
|
||||
break;
|
||||
}
|
||||
|
||||
if (next_act != -1) {
|
||||
aHUS_setup_action(house, next_act);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (house->request_type) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 4:
|
||||
aHUS_setup_animation(house, 0.5f);
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void aHUS_open_door_wait(HOUSE_ACTOR* house, GAME_PLAY* play) {
|
||||
ACTOR* actorx = (ACTOR*)house;
|
||||
|
||||
if (actorx == GET_PLAYER_ACTOR_NOW()->get_door_label_proc(gamePT)) {
|
||||
mBGMPsComp_make_ps_wipe(0x249);
|
||||
house->request_type = 3;
|
||||
aHUS_setup_animation(house, 0.5f);
|
||||
aHUS_setup_action(house, aHUS_ACTION_OPEN_DOOR);
|
||||
}
|
||||
}
|
||||
|
||||
static void aHUS_open_door(HOUSE_ACTOR* house, GAME_PLAY* play) {
|
||||
int next_act;
|
||||
|
||||
if (cKF_SkeletonInfo_R_play(&house->keyframe) == cKF_STATE_STOPPED) {
|
||||
switch (house->request_type) {
|
||||
case 3:
|
||||
aHUS_rewrite_out_data(house, play);
|
||||
goto_other_scene(play, &aHUS_npc_house_door_data, FALSE);
|
||||
play->fb_fade_type = 9;
|
||||
next_act = aHUS_ACTION_NEXT_SCENE_WAIT;
|
||||
mDemo_End((ACTOR*)house);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
house->actor_class.state_bitfield = House_Profile.initial_flags_state;
|
||||
next_act = aHUS_ACTION_WAIT;
|
||||
break;
|
||||
default:
|
||||
next_act = aHUS_ACTION_WAIT;
|
||||
break;
|
||||
}
|
||||
|
||||
house->request_type = 0;
|
||||
aHUS_setup_action(house, next_act);
|
||||
}
|
||||
}
|
||||
|
||||
static void aHUS_setup_action(HOUSE_ACTOR* house, int action) {
|
||||
// clang-format off
|
||||
static void* process[] = {
|
||||
&aHUS_wait,
|
||||
&aHUS_open_door_wait,
|
||||
&aHUS_open_door,
|
||||
&none_proc1,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
house->action_proc = process[action];
|
||||
}
|
||||
|
||||
static void aHUS_actor_move(ACTOR* actorx, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
HOUSE_ACTOR* house = (HOUSE_ACTOR*)actorx;
|
||||
|
||||
aHUS_set_doorSE(house);
|
||||
(*house->action_proc)((STRUCTURE_ACTOR*)house, play);
|
||||
chase_f(&aHUS_GET_LIGHT_PERCENT(house), aHUS_ctrl_light(house), 0.019532442f);
|
||||
}
|
||||
|
||||
static void aHUS_actor_init(ACTOR* actorx, GAME* game) {
|
||||
mActor_name_t name;
|
||||
|
||||
name =actorx->npc_id;
|
||||
name = name - NPC_HOUSE_START + DUMMY_NPC_HOUSE_000;
|
||||
mFI_SetFG_common(name, actorx->home.position, FALSE);
|
||||
aHUS_actor_move(actorx, game);
|
||||
actorx->mv_proc = &aHUS_actor_move;
|
||||
}
|
||||
Reference in New Issue
Block a user