diff --git a/config/rel_slices.yml b/config/rel_slices.yml index 8e3c4236..1a81a260 100644 --- a/config/rel_slices.yml +++ b/config/rel_slices.yml @@ -390,6 +390,31 @@ ac_train_window.c: .text: [0x804AC510, 0x804AD428] .rodata: [0x80645FA8, 0x80645FF8] .data: [0x8068F600, 0x8068F830] +ef_lamp_light.c: + .text: [0x804CEC5C, 0x804CEF2C] + .rodata: [0x806463C8, 0x806463D8] + .data: [0x8069BFD0, 0x8069C028] +ef_room_sunshine.c: + .text: [0x804CEF2C, 0x804CF784] + .rodata: [0x806463D8, 0x80646420] + .data: [0x8069C028, 0x8069C050] +ef_room_sunshine_police.c: + .text: [0x804CF784, 0x804CFF8C] + .rodata: [0x80646420, 0x80646470] + .data: [0x8069C050, 0x8069C078] +ef_room_sunshine_posthouse.c: + .text: [0x804CFF8C, 0x804D0704] + .rodata: [0x80646470, 0x806464B8] + .data: [0x8069C078, 0x8069C0A0] +ef_room_sunshine_museum.c: + .text: [0x804D0704, 0x804D0F3C] + .rodata: [0x806464B8, 0x80646508] + .data: [0x8069C0A0, 0x8069C0C8] +ef_room_sunshine_minsect.c: + .text: [0x804D0F3C,0x804D1BBC] + .rodata: [0x80646508,0x80646558] + .data: [0x8069C0C8, 0x8069C0F0] + .bss: [0x81300BD0, 0x81300BD8] m_huusui_room_ovl.c: .text: [0x804D1BBC, 0x804D2164] .rodata: [0x80646558, 0x806465C8] diff --git a/include/ef_lamp_light.h b/include/ef_lamp_light.h index e1c49a18..680f496f 100644 --- a/include/ef_lamp_light.h +++ b/include/ef_lamp_light.h @@ -10,6 +10,13 @@ extern "C" { extern ACTOR_PROFILE Lamp_Light_Profile; +typedef struct ef_lamp_light_s{ + ACTOR actor_class; + int switch_type; + Lights lights; + LightNode* node_p; +}LAMPLIGHT_ACTOR; + #ifdef __cplusplus } #endif diff --git a/include/ef_room_sunshine.h b/include/ef_room_sunshine.h index d28c0841..21d5ea54 100644 --- a/include/ef_room_sunshine.h +++ b/include/ef_room_sunshine.h @@ -10,6 +10,11 @@ extern "C" { extern ACTOR_PROFILE Room_Sunshine_Profile; +typedef struct effect_room_sunshine_s{ + ACTOR actor_class; + u8 unk_174; +} ROOMSUNSHINE_ACTOR; + #ifdef __cplusplus } #endif diff --git a/include/ef_room_sunshine_minsect.h b/include/ef_room_sunshine_minsect.h index 9c97e877..7c27ad42 100644 --- a/include/ef_room_sunshine_minsect.h +++ b/include/ef_room_sunshine_minsect.h @@ -3,6 +3,7 @@ #include "types.h" #include "m_actor.h" +#include "ef_room_sunshine.h" #ifdef __cplusplus extern "C" { @@ -10,6 +11,12 @@ extern "C" { extern ACTOR_PROFILE Room_Sunshine_Minsect_Profile; +typedef struct effect_room_sunshine_minsect_s{ + ROOMSUNSHINE_ACTOR ef_sunshine_class; +}ROOMSUNSHINEMINSECT_ACTOR; + +extern u8 draw_status; + #ifdef __cplusplus } #endif diff --git a/include/ef_room_sunshine_museum.h b/include/ef_room_sunshine_museum.h index 21e0f3fe..b0a3afa2 100644 --- a/include/ef_room_sunshine_museum.h +++ b/include/ef_room_sunshine_museum.h @@ -3,6 +3,7 @@ #include "types.h" #include "m_actor.h" +#include "ef_room_sunshine.h" #ifdef __cplusplus extern "C" { @@ -10,6 +11,10 @@ extern "C" { extern ACTOR_PROFILE Room_Sunshine_Museum_Profile; +typedef struct effect_room_sunshine_museum_s{ + ROOMSUNSHINE_ACTOR ef_sunshine_class; +}ROOMSUNSHINEMUSEUM_ACTOR; + #ifdef __cplusplus } #endif diff --git a/include/ef_room_sunshine_police.h b/include/ef_room_sunshine_police.h index bf8639e2..008d4f28 100644 --- a/include/ef_room_sunshine_police.h +++ b/include/ef_room_sunshine_police.h @@ -3,6 +3,7 @@ #include "types.h" #include "m_actor.h" +#include "ef_room_sunshine.h" #ifdef __cplusplus extern "C" { @@ -10,6 +11,10 @@ extern "C" { extern ACTOR_PROFILE Room_Sunshine_Police_Profile; +typedef struct efffect_room_sunshine_police_s{ + ROOMSUNSHINE_ACTOR ef_sunshine_class; +}ROOMSUNSHINEPOLICE_ACTOR; + #ifdef __cplusplus } #endif diff --git a/include/ef_room_sunshine_posthouse.h b/include/ef_room_sunshine_posthouse.h index e8a4080f..a27e2698 100644 --- a/include/ef_room_sunshine_posthouse.h +++ b/include/ef_room_sunshine_posthouse.h @@ -3,6 +3,7 @@ #include "types.h" #include "m_actor.h" +#include "ef_room_sunshine.h" #ifdef __cplusplus extern "C" { @@ -10,6 +11,10 @@ extern "C" { extern ACTOR_PROFILE Room_Sunshine_Posthouse_Profile; +typedef struct effect_room_sunshine_posthouse_s{ + ROOMSUNSHINE_ACTOR ef_sunshine_class; +}ROOMSUNSHINEPOSTHOUSE_ACTOR; + #ifdef __cplusplus } #endif diff --git a/include/m_actor.h b/include/m_actor.h index 10f81920..29b62fd8 100644 --- a/include/m_actor.h +++ b/include/m_actor.h @@ -31,16 +31,743 @@ typedef void (*mActor_proc)(ACTOR*, GAME*); #define ACTOR_STATE_25 (1 << 25) #define ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES (1 << 29) -#define ACTOR_OBJ_BANK_NONE 0 -#define ACTOR_OBJ_BANK_3 3 /* TODO: rename, also likely an enum */ -#define ACTOR_OBJ_BANK_6 6 -#define ACTOR_OBJ_BANK_7 7 -#define ACTOR_OBJ_BANK_10 10 -#define ACTOR_OBJ_BANK_11 11 -#define ACTOR_OBJ_BANK_12 12 -#define ACTOR_OBJ_BANK_16 16 -#define ACTOR_OBJ_BANK_41 41 -#define ACTOR_OBJ_BANK_53 53 + +//TODO: Name the unique ones for their correspondant actor + +typedef enum bank_id { + ACTOR_OBJ_BANK_NONE, + ACTOR_OBJ_BANK_1, + ACTOR_OBJ_BANK_2, + ACTOR_OBJ_BANK_KEEP, + ACTOR_OBJ_BANK_4, + ACTOR_OBJ_BANK_ROOM_SUNSHINE, + ACTOR_OBJ_BANK_6, + ACTOR_OBJ_BANK_AIRPLANE, + ACTOR_OBJ_BANK_8, + ACTOR_OBJ_BANK_9, + ACTOR_OBJ_BANK_10, + ACTOR_OBJ_BANK_TRAINDOOR, + ACTOR_OBJ_BANK_12, + ACTOR_OBJ_BANK_13, + ACTOR_OBJ_BANK_14, + ACTOR_OBJ_BANK_15, + ACTOR_OBJ_BANK_TOOLS, + ACTOR_OBJ_BANK_17, + ACTOR_OBJ_BANK_18, + ACTOR_OBJ_BANK_19, + ACTOR_OBJ_BANK_20, + ACTOR_OBJ_BANK_21, + ACTOR_OBJ_BANK_22, + ACTOR_OBJ_BANK_23, + ACTOR_OBJ_BANK_24, + ACTOR_OBJ_BANK_25, + ACTOR_OBJ_BANK_26, + ACTOR_OBJ_BANK_27, + ACTOR_OBJ_BANK_28, + ACTOR_OBJ_BANK_29, + ACTOR_OBJ_BANK_30, + ACTOR_OBJ_BANK_31, + ACTOR_OBJ_BANK_32, + ACTOR_OBJ_BANK_33, + ACTOR_OBJ_BANK_34, + ACTOR_OBJ_BANK_35, + ACTOR_OBJ_BANK_36, + ACTOR_OBJ_BANK_37, + ACTOR_OBJ_BANK_38, + ACTOR_OBJ_BANK_39, + ACTOR_OBJ_BANK_40, + ACTOR_OBJ_BANK_TRAINWINDOW, + ACTOR_OBJ_BANK_42, + ACTOR_OBJ_BANK_POSTHOUSE, + ACTOR_OBJ_BANK_EF_POLICE, + ACTOR_OBJ_BANK_45, + ACTOR_OBJ_BANK_46, + ACTOR_OBJ_BANK_47, + ACTOR_OBJ_BANK_48, + ACTOR_OBJ_BANK_49, + ACTOR_OBJ_BANK_50, + ACTOR_OBJ_BANK_51, + ACTOR_OBJ_BANK_52, + ACTOR_OBJ_BANK_HANABI, + ACTOR_OBJ_BANK_54, + ACTOR_OBJ_BANK_55, + ACTOR_OBJ_BANK_56, + ACTOR_OBJ_BANK_57, + ACTOR_OBJ_BANK_58, + ACTOR_OBJ_BANK_59, + ACTOR_OBJ_BANK_60, + ACTOR_OBJ_BANK_61, + ACTOR_OBJ_BANK_62, + ACTOR_OBJ_BANK_63, + ACTOR_OBJ_BANK_64, + ACTOR_OBJ_BANK_65, + ACTOR_OBJ_BANK_66, + ACTOR_OBJ_BANK_67, + ACTOR_OBJ_BANK_68, + ACTOR_OBJ_BANK_69, + ACTOR_OBJ_BANK_70, + ACTOR_OBJ_BANK_71, + ACTOR_OBJ_BANK_72, + ACTOR_OBJ_BANK_73, + ACTOR_OBJ_BANK_74, + ACTOR_OBJ_BANK_75, + ACTOR_OBJ_BANK_76, + ACTOR_OBJ_BANK_77, + ACTOR_OBJ_BANK_78, + ACTOR_OBJ_BANK_79, + ACTOR_OBJ_BANK_80, + ACTOR_OBJ_BANK_81, + ACTOR_OBJ_BANK_82, + ACTOR_OBJ_BANK_83, + ACTOR_OBJ_BANK_84, + ACTOR_OBJ_BANK_85, + ACTOR_OBJ_BANK_86, + ACTOR_OBJ_BANK_87, + ACTOR_OBJ_BANK_88, + ACTOR_OBJ_BANK_89, + ACTOR_OBJ_BANK_90, + ACTOR_OBJ_BANK_91, + ACTOR_OBJ_BANK_92, + ACTOR_OBJ_BANK_93, + ACTOR_OBJ_BANK_94, + ACTOR_OBJ_BANK_95, + ACTOR_OBJ_BANK_96, + ACTOR_OBJ_BANK_97, + ACTOR_OBJ_BANK_98, + ACTOR_OBJ_BANK_99, + ACTOR_OBJ_BANK_100, + ACTOR_OBJ_BANK_101, + ACTOR_OBJ_BANK_102, + ACTOR_OBJ_BANK_103, + ACTOR_OBJ_BANK_104, + ACTOR_OBJ_BANK_105, + ACTOR_OBJ_BANK_106, + ACTOR_OBJ_BANK_107, + ACTOR_OBJ_BANK_108, + ACTOR_OBJ_BANK_109, + ACTOR_OBJ_BANK_110, + ACTOR_OBJ_BANK_111, + ACTOR_OBJ_BANK_112, + ACTOR_OBJ_BANK_113, + ACTOR_OBJ_BANK_114, + ACTOR_OBJ_BANK_115, + ACTOR_OBJ_BANK_116, + ACTOR_OBJ_BANK_117, + ACTOR_OBJ_BANK_118, + ACTOR_OBJ_BANK_119, + ACTOR_OBJ_BANK_120, + ACTOR_OBJ_BANK_121, + ACTOR_OBJ_BANK_122, + ACTOR_OBJ_BANK_123, + ACTOR_OBJ_BANK_124, + ACTOR_OBJ_BANK_125, + ACTOR_OBJ_BANK_126, + ACTOR_OBJ_BANK_127, + ACTOR_OBJ_BANK_128, + ACTOR_OBJ_BANK_129, + ACTOR_OBJ_BANK_130, + ACTOR_OBJ_BANK_131, + ACTOR_OBJ_BANK_132, + ACTOR_OBJ_BANK_133, + ACTOR_OBJ_BANK_134, + ACTOR_OBJ_BANK_135, + ACTOR_OBJ_BANK_136, + ACTOR_OBJ_BANK_137, + ACTOR_OBJ_BANK_138, + ACTOR_OBJ_BANK_139, + ACTOR_OBJ_BANK_140, + ACTOR_OBJ_BANK_141, + ACTOR_OBJ_BANK_142, + ACTOR_OBJ_BANK_143, + ACTOR_OBJ_BANK_144, + ACTOR_OBJ_BANK_145, + ACTOR_OBJ_BANK_146, + ACTOR_OBJ_BANK_147, + ACTOR_OBJ_BANK_148, + ACTOR_OBJ_BANK_149, + ACTOR_OBJ_BANK_150, + ACTOR_OBJ_BANK_151, + ACTOR_OBJ_BANK_152, + ACTOR_OBJ_BANK_153, + ACTOR_OBJ_BANK_154, + ACTOR_OBJ_BANK_155, + ACTOR_OBJ_BANK_156, + ACTOR_OBJ_BANK_157, + ACTOR_OBJ_BANK_158, + ACTOR_OBJ_BANK_159, + ACTOR_OBJ_BANK_160, + ACTOR_OBJ_BANK_161, + ACTOR_OBJ_BANK_162, + ACTOR_OBJ_BANK_163, + ACTOR_OBJ_BANK_164, + ACTOR_OBJ_BANK_165, + ACTOR_OBJ_BANK_166, + ACTOR_OBJ_BANK_167, + ACTOR_OBJ_BANK_168, + ACTOR_OBJ_BANK_169, + ACTOR_OBJ_BANK_170, + ACTOR_OBJ_BANK_171, + ACTOR_OBJ_BANK_172, + ACTOR_OBJ_BANK_173, + ACTOR_OBJ_BANK_174, + ACTOR_OBJ_BANK_175, + ACTOR_OBJ_BANK_176, + ACTOR_OBJ_BANK_177, + ACTOR_OBJ_BANK_178, + ACTOR_OBJ_BANK_179, + ACTOR_OBJ_BANK_180, + ACTOR_OBJ_BANK_181, + ACTOR_OBJ_BANK_182, + ACTOR_OBJ_BANK_183, + ACTOR_OBJ_BANK_184, + ACTOR_OBJ_BANK_185, + ACTOR_OBJ_BANK_186, + ACTOR_OBJ_BANK_187, + ACTOR_OBJ_BANK_188, + ACTOR_OBJ_BANK_189, + ACTOR_OBJ_BANK_190, + ACTOR_OBJ_BANK_191, + ACTOR_OBJ_BANK_192, + ACTOR_OBJ_BANK_193, + ACTOR_OBJ_BANK_194, + ACTOR_OBJ_BANK_195, + ACTOR_OBJ_BANK_196, + ACTOR_OBJ_BANK_197, + ACTOR_OBJ_BANK_198, + ACTOR_OBJ_BANK_199, + ACTOR_OBJ_BANK_200, + ACTOR_OBJ_BANK_201, + ACTOR_OBJ_BANK_202, + ACTOR_OBJ_BANK_203, + ACTOR_OBJ_BANK_204, + ACTOR_OBJ_BANK_205, + ACTOR_OBJ_BANK_206, + ACTOR_OBJ_BANK_207, + ACTOR_OBJ_BANK_208, + ACTOR_OBJ_BANK_209, + ACTOR_OBJ_BANK_210, + ACTOR_OBJ_BANK_211, + ACTOR_OBJ_BANK_212, + ACTOR_OBJ_BANK_213, + ACTOR_OBJ_BANK_214, + ACTOR_OBJ_BANK_215, + ACTOR_OBJ_BANK_216, + ACTOR_OBJ_BANK_217, + ACTOR_OBJ_BANK_218, + ACTOR_OBJ_BANK_219, + ACTOR_OBJ_BANK_220, + ACTOR_OBJ_BANK_221, + ACTOR_OBJ_BANK_222, + ACTOR_OBJ_BANK_223, + ACTOR_OBJ_BANK_224, + ACTOR_OBJ_BANK_225, + ACTOR_OBJ_BANK_226, + ACTOR_OBJ_BANK_227, + ACTOR_OBJ_BANK_228, + ACTOR_OBJ_BANK_229, + ACTOR_OBJ_BANK_230, + ACTOR_OBJ_BANK_231, + ACTOR_OBJ_BANK_232, + ACTOR_OBJ_BANK_233, + ACTOR_OBJ_BANK_234, + ACTOR_OBJ_BANK_235, + ACTOR_OBJ_BANK_236, + ACTOR_OBJ_BANK_237, + ACTOR_OBJ_BANK_238, + ACTOR_OBJ_BANK_239, + ACTOR_OBJ_BANK_240, + ACTOR_OBJ_BANK_241, + ACTOR_OBJ_BANK_242, + ACTOR_OBJ_BANK_243, + ACTOR_OBJ_BANK_244, + ACTOR_OBJ_BANK_245, + ACTOR_OBJ_BANK_246, + ACTOR_OBJ_BANK_247, + ACTOR_OBJ_BANK_248, + ACTOR_OBJ_BANK_249, + ACTOR_OBJ_BANK_250, + ACTOR_OBJ_BANK_251, + ACTOR_OBJ_BANK_252, + ACTOR_OBJ_BANK_253, + ACTOR_OBJ_BANK_254, + ACTOR_OBJ_BANK_255, + ACTOR_OBJ_BANK_256, + ACTOR_OBJ_BANK_257, + ACTOR_OBJ_BANK_258, + ACTOR_OBJ_BANK_259, + ACTOR_OBJ_BANK_260, + ACTOR_OBJ_BANK_261, + ACTOR_OBJ_BANK_262, + ACTOR_OBJ_BANK_263, + ACTOR_OBJ_BANK_264, + ACTOR_OBJ_BANK_265, + ACTOR_OBJ_BANK_266, + ACTOR_OBJ_BANK_267, + ACTOR_OBJ_BANK_268, + ACTOR_OBJ_BANK_269, + ACTOR_OBJ_BANK_270, + ACTOR_OBJ_BANK_271, + ACTOR_OBJ_BANK_272, + ACTOR_OBJ_BANK_273, + ACTOR_OBJ_BANK_274, + ACTOR_OBJ_BANK_275, + ACTOR_OBJ_BANK_276, + ACTOR_OBJ_BANK_277, + ACTOR_OBJ_BANK_278, + ACTOR_OBJ_BANK_279, + ACTOR_OBJ_BANK_280, + ACTOR_OBJ_BANK_281, + ACTOR_OBJ_BANK_282, + ACTOR_OBJ_BANK_283, + ACTOR_OBJ_BANK_284, + ACTOR_OBJ_BANK_285, + ACTOR_OBJ_BANK_286, + ACTOR_OBJ_BANK_287, + ACTOR_OBJ_BANK_288, + ACTOR_OBJ_BANK_289, + ACTOR_OBJ_BANK_290, + ACTOR_OBJ_BANK_291, + ACTOR_OBJ_BANK_292, + ACTOR_OBJ_BANK_293, + ACTOR_OBJ_BANK_294, + ACTOR_OBJ_BANK_295, + ACTOR_OBJ_BANK_296, + ACTOR_OBJ_BANK_297, + ACTOR_OBJ_BANK_298, + ACTOR_OBJ_BANK_299, + ACTOR_OBJ_BANK_300, + ACTOR_OBJ_BANK_301, + ACTOR_OBJ_BANK_302, + ACTOR_OBJ_BANK_303, + ACTOR_OBJ_BANK_304, + ACTOR_OBJ_BANK_305, + ACTOR_OBJ_BANK_306, + ACTOR_OBJ_BANK_307, + ACTOR_OBJ_BANK_308, + ACTOR_OBJ_BANK_309, + ACTOR_OBJ_BANK_310, + ACTOR_OBJ_BANK_311, + ACTOR_OBJ_BANK_312, + ACTOR_OBJ_BANK_313, + ACTOR_OBJ_BANK_314, + ACTOR_OBJ_BANK_315, + ACTOR_OBJ_BANK_316, + ACTOR_OBJ_BANK_317, + ACTOR_OBJ_BANK_318, + ACTOR_OBJ_BANK_319, + ACTOR_OBJ_BANK_320, + ACTOR_OBJ_BANK_321, + ACTOR_OBJ_BANK_322, + ACTOR_OBJ_BANK_323, + ACTOR_OBJ_BANK_324, + ACTOR_OBJ_BANK_325, + ACTOR_OBJ_BANK_326, + ACTOR_OBJ_BANK_327, + ACTOR_OBJ_BANK_328, + ACTOR_OBJ_BANK_329, + ACTOR_OBJ_BANK_330, + ACTOR_OBJ_BANK_331, + ACTOR_OBJ_BANK_332, + ACTOR_OBJ_BANK_333, + ACTOR_OBJ_BANK_334, + ACTOR_OBJ_BANK_335, + ACTOR_OBJ_BANK_336, + ACTOR_OBJ_BANK_337, + ACTOR_OBJ_BANK_338, + ACTOR_OBJ_BANK_339, + ACTOR_OBJ_BANK_340, + ACTOR_OBJ_BANK_341, + ACTOR_OBJ_BANK_342, + ACTOR_OBJ_BANK_343, + ACTOR_OBJ_BANK_344, + ACTOR_OBJ_BANK_345, + ACTOR_OBJ_BANK_346, + ACTOR_OBJ_BANK_347, + ACTOR_OBJ_BANK_348, + ACTOR_OBJ_BANK_349, + ACTOR_OBJ_BANK_350, + ACTOR_OBJ_BANK_351, + ACTOR_OBJ_BANK_352, + ACTOR_OBJ_BANK_353, + ACTOR_OBJ_BANK_354, + ACTOR_OBJ_BANK_355, + ACTOR_OBJ_BANK_356, + ACTOR_OBJ_BANK_357, + ACTOR_OBJ_BANK_358, + ACTOR_OBJ_BANK_359, + ACTOR_OBJ_BANK_360, + ACTOR_OBJ_BANK_361, + ACTOR_OBJ_BANK_362, + ACTOR_OBJ_BANK_363, + ACTOR_OBJ_BANK_364, + ACTOR_OBJ_BANK_365, + ACTOR_OBJ_BANK_366, + ACTOR_OBJ_BANK_367, + ACTOR_OBJ_BANK_368, + ACTOR_OBJ_BANK_369, + ACTOR_OBJ_BANK_370, + ACTOR_OBJ_BANK_371, + ACTOR_OBJ_BANK_372, + ACTOR_OBJ_BANK_373, + ACTOR_OBJ_BANK_374, + ACTOR_OBJ_BANK_375, + ACTOR_OBJ_BANK_376, + ACTOR_OBJ_BANK_377, + ACTOR_OBJ_BANK_378, + ACTOR_OBJ_BANK_379, + ACTOR_OBJ_BANK_380, + ACTOR_OBJ_BANK_381, + ACTOR_OBJ_BANK_382, + ACTOR_OBJ_BANK_383, + ACTOR_OBJ_BANK_384, + ACTOR_OBJ_BANK_385, + ACTOR_OBJ_BANK_386, + ACTOR_OBJ_BANK_387, + ACTOR_OBJ_BANK_388, + ACTOR_OBJ_BANK_389, + ACTOR_OBJ_BANK_390, + ACTOR_OBJ_BANK_391, + ACTOR_OBJ_BANK_392, + ACTOR_OBJ_BANK_393, + ACTOR_OBJ_BANK_394, + ACTOR_OBJ_BANK_CRACKER, + ACTOR_OBJ_BANK_396, + ACTOR_OBJ_BANK_397, + ACTOR_OBJ_BANK_398, + ACTOR_OBJ_BANK_399, + ACTOR_OBJ_BANK_400, + ACTOR_OBJ_BANK_401, + ACTOR_OBJ_BANK_402, + ACTOR_OBJ_BANK_403, + ACTOR_OBJ_BANK_404, + ACTOR_OBJ_BANK_405, + ACTOR_OBJ_BANK_406, + ACTOR_OBJ_BANK_407, + ACTOR_OBJ_BANK_408, + ACTOR_OBJ_BANK_EF_MUSEUM, + ACTOR_OBJ_BANK_EF_MINSECT, + ACTOR_OBJ_BANK_411, + ACTOR_OBJ_BANK_412, + ACTOR_OBJ_BANK_413, + ACTOR_OBJ_BANK_414, + ACTOR_OBJ_BANK_415, + ACTOR_OBJ_BANK_416, + ACTOR_OBJ_BANK_417, + ACTOR_OBJ_BANK_418, + ACTOR_OBJ_BANK_419, + ACTOR_OBJ_BANK_420, + ACTOR_OBJ_BANK_421, + ACTOR_OBJ_BANK_422, + ACTOR_OBJ_BANK_423, + ACTOR_OBJ_BANK_424, + ACTOR_OBJ_BANK_425, + ACTOR_OBJ_BANK_426, + ACTOR_OBJ_BANK_427, + ACTOR_OBJ_BANK_428, + ACTOR_OBJ_BANK_429, + ACTOR_OBJ_BANK_430, + ACTOR_OBJ_BANK_431, + ACTOR_OBJ_BANK_432, + ACTOR_OBJ_BANK_433, + ACTOR_OBJ_BANK_434, + ACTOR_OBJ_BANK_435, + ACTOR_OBJ_BANK_436, + ACTOR_OBJ_BANK_437, + ACTOR_OBJ_BANK_438, + ACTOR_OBJ_BANK_439, + ACTOR_OBJ_BANK_440, + ACTOR_OBJ_BANK_441, + ACTOR_OBJ_BANK_442, + ACTOR_OBJ_BANK_443, + ACTOR_OBJ_BANK_444, + ACTOR_OBJ_BANK_445, + ACTOR_OBJ_BANK_446, + ACTOR_OBJ_BANK_447, + ACTOR_OBJ_BANK_448, + ACTOR_OBJ_BANK_449, + ACTOR_OBJ_BANK_450, + ACTOR_OBJ_BANK_451, + ACTOR_OBJ_BANK_452, + ACTOR_OBJ_BANK_453, + ACTOR_OBJ_BANK_454, + ACTOR_OBJ_BANK_455, + ACTOR_OBJ_BANK_456, + ACTOR_OBJ_BANK_457, + ACTOR_OBJ_BANK_458, + ACTOR_OBJ_BANK_459, + ACTOR_OBJ_BANK_460, + ACTOR_OBJ_BANK_461, + ACTOR_OBJ_BANK_462, + ACTOR_OBJ_BANK_463, + ACTOR_OBJ_BANK_464, + ACTOR_OBJ_BANK_465, + ACTOR_OBJ_BANK_466, + ACTOR_OBJ_BANK_467, + ACTOR_OBJ_BANK_468, + ACTOR_OBJ_BANK_469, + ACTOR_OBJ_BANK_470, + ACTOR_OBJ_BANK_471, + ACTOR_OBJ_BANK_472, + ACTOR_OBJ_BANK_473, + ACTOR_OBJ_BANK_474, + ACTOR_OBJ_BANK_475, + ACTOR_OBJ_BANK_476, + ACTOR_OBJ_BANK_477, + ACTOR_OBJ_BANK_478, + ACTOR_OBJ_BANK_479, + ACTOR_OBJ_BANK_480, + ACTOR_OBJ_BANK_481, + ACTOR_OBJ_BANK_482, + ACTOR_OBJ_BANK_483, + ACTOR_OBJ_BANK_484, + ACTOR_OBJ_BANK_485, + ACTOR_OBJ_BANK_486, + ACTOR_OBJ_BANK_487, + ACTOR_OBJ_BANK_488, + ACTOR_OBJ_BANK_489, + ACTOR_OBJ_BANK_490, + ACTOR_OBJ_BANK_491, + ACTOR_OBJ_BANK_492, + ACTOR_OBJ_BANK_493, + ACTOR_OBJ_BANK_494, + ACTOR_OBJ_BANK_495, + ACTOR_OBJ_BANK_496, + ACTOR_OBJ_BANK_497, + ACTOR_OBJ_BANK_498, + ACTOR_OBJ_BANK_499, + ACTOR_OBJ_BANK_500, + ACTOR_OBJ_BANK_501, + ACTOR_OBJ_BANK_502, + ACTOR_OBJ_BANK_503, + ACTOR_OBJ_BANK_504, + ACTOR_OBJ_BANK_505, + ACTOR_OBJ_BANK_506, + ACTOR_OBJ_BANK_507, + ACTOR_OBJ_BANK_508, + ACTOR_OBJ_BANK_509, + ACTOR_OBJ_BANK_510, + ACTOR_OBJ_BANK_511, + ACTOR_OBJ_BANK_512, + ACTOR_OBJ_BANK_513, + ACTOR_OBJ_BANK_514, + ACTOR_OBJ_BANK_515, + ACTOR_OBJ_BANK_516, + ACTOR_OBJ_BANK_517, + ACTOR_OBJ_BANK_518, + ACTOR_OBJ_BANK_519, + ACTOR_OBJ_BANK_520, + ACTOR_OBJ_BANK_521, + ACTOR_OBJ_BANK_522, + ACTOR_OBJ_BANK_523, + ACTOR_OBJ_BANK_524, + ACTOR_OBJ_BANK_525, + ACTOR_OBJ_BANK_526, + ACTOR_OBJ_BANK_527, + ACTOR_OBJ_BANK_528, + ACTOR_OBJ_BANK_529, + ACTOR_OBJ_BANK_530, + ACTOR_OBJ_BANK_531, + ACTOR_OBJ_BANK_532, + ACTOR_OBJ_BANK_533, + ACTOR_OBJ_BANK_534, + ACTOR_OBJ_BANK_535, + ACTOR_OBJ_BANK_536, + ACTOR_OBJ_BANK_537, + ACTOR_OBJ_BANK_538, + ACTOR_OBJ_BANK_539, + ACTOR_OBJ_BANK_540, + ACTOR_OBJ_BANK_541, + ACTOR_OBJ_BANK_542, + ACTOR_OBJ_BANK_543, + ACTOR_OBJ_BANK_544, + ACTOR_OBJ_BANK_545, + ACTOR_OBJ_BANK_546, + ACTOR_OBJ_BANK_547, + ACTOR_OBJ_BANK_548, + ACTOR_OBJ_BANK_549, + ACTOR_OBJ_BANK_550, + ACTOR_OBJ_BANK_551, + ACTOR_OBJ_BANK_552, + ACTOR_OBJ_BANK_553, + ACTOR_OBJ_BANK_554, + ACTOR_OBJ_BANK_555, + ACTOR_OBJ_BANK_556, + ACTOR_OBJ_BANK_557, + ACTOR_OBJ_BANK_558, + ACTOR_OBJ_BANK_559, + ACTOR_OBJ_BANK_560, + ACTOR_OBJ_BANK_561, + ACTOR_OBJ_BANK_562, + ACTOR_OBJ_BANK_563, + ACTOR_OBJ_BANK_564, + ACTOR_OBJ_BANK_565, + ACTOR_OBJ_BANK_566, + ACTOR_OBJ_BANK_567, + ACTOR_OBJ_BANK_568, + ACTOR_OBJ_BANK_569, + ACTOR_OBJ_BANK_570, + ACTOR_OBJ_BANK_571, + ACTOR_OBJ_BANK_572, + ACTOR_OBJ_BANK_573, + ACTOR_OBJ_BANK_574, + ACTOR_OBJ_BANK_575, + ACTOR_OBJ_BANK_576, + ACTOR_OBJ_BANK_577, + ACTOR_OBJ_BANK_578, + ACTOR_OBJ_BANK_579, + ACTOR_OBJ_BANK_580, + ACTOR_OBJ_BANK_581, + ACTOR_OBJ_BANK_582, + ACTOR_OBJ_BANK_583, + ACTOR_OBJ_BANK_584, + ACTOR_OBJ_BANK_585, + ACTOR_OBJ_BANK_586, + ACTOR_OBJ_BANK_587, + ACTOR_OBJ_BANK_588, + ACTOR_OBJ_BANK_589, + ACTOR_OBJ_BANK_590, + ACTOR_OBJ_BANK_591, + ACTOR_OBJ_BANK_592, + ACTOR_OBJ_BANK_593, + ACTOR_OBJ_BANK_594, + ACTOR_OBJ_BANK_595, + ACTOR_OBJ_BANK_596, + ACTOR_OBJ_BANK_597, + ACTOR_OBJ_BANK_598, + ACTOR_OBJ_BANK_599, + ACTOR_OBJ_BANK_600, + ACTOR_OBJ_BANK_601, + ACTOR_OBJ_BANK_602, + ACTOR_OBJ_BANK_603, + ACTOR_OBJ_BANK_604, + ACTOR_OBJ_BANK_605, + ACTOR_OBJ_BANK_606, + ACTOR_OBJ_BANK_607, + ACTOR_OBJ_BANK_608, + ACTOR_OBJ_BANK_609, + ACTOR_OBJ_BANK_610, + ACTOR_OBJ_BANK_611, + ACTOR_OBJ_BANK_612, + ACTOR_OBJ_BANK_613, + ACTOR_OBJ_BANK_614, + ACTOR_OBJ_BANK_615, + ACTOR_OBJ_BANK_616, + ACTOR_OBJ_BANK_617, + ACTOR_OBJ_BANK_618, + ACTOR_OBJ_BANK_619, + ACTOR_OBJ_BANK_620, + ACTOR_OBJ_BANK_621, + ACTOR_OBJ_BANK_622, + ACTOR_OBJ_BANK_623, + ACTOR_OBJ_BANK_624, + ACTOR_OBJ_BANK_625, + ACTOR_OBJ_BANK_626, + ACTOR_OBJ_BANK_627, + ACTOR_OBJ_BANK_628, + ACTOR_OBJ_BANK_629, + ACTOR_OBJ_BANK_630, + ACTOR_OBJ_BANK_631, + ACTOR_OBJ_BANK_632, + ACTOR_OBJ_BANK_633, + ACTOR_OBJ_BANK_634, + ACTOR_OBJ_BANK_635, + ACTOR_OBJ_BANK_636, + ACTOR_OBJ_BANK_637, + ACTOR_OBJ_BANK_638, + ACTOR_OBJ_BANK_639, + ACTOR_OBJ_BANK_640, + ACTOR_OBJ_BANK_641, + ACTOR_OBJ_BANK_642, + ACTOR_OBJ_BANK_643, + ACTOR_OBJ_BANK_644, + ACTOR_OBJ_BANK_645, + ACTOR_OBJ_BANK_646, + ACTOR_OBJ_BANK_647, + ACTOR_OBJ_BANK_648, + ACTOR_OBJ_BANK_649, + ACTOR_OBJ_BANK_650, + ACTOR_OBJ_BANK_651, + ACTOR_OBJ_BANK_652, + ACTOR_OBJ_BANK_653, + ACTOR_OBJ_BANK_654, + ACTOR_OBJ_BANK_655, + ACTOR_OBJ_BANK_656, + ACTOR_OBJ_BANK_657, + ACTOR_OBJ_BANK_658, + ACTOR_OBJ_BANK_659, + ACTOR_OBJ_BANK_660, + ACTOR_OBJ_BANK_661, + ACTOR_OBJ_BANK_662, + ACTOR_OBJ_BANK_663, + ACTOR_OBJ_BANK_664, + ACTOR_OBJ_BANK_665, + ACTOR_OBJ_BANK_666, + ACTOR_OBJ_BANK_667, + ACTOR_OBJ_BANK_668, + ACTOR_OBJ_BANK_669, + ACTOR_OBJ_BANK_670, + ACTOR_OBJ_BANK_671, + ACTOR_OBJ_BANK_672, + ACTOR_OBJ_BANK_673, + ACTOR_OBJ_BANK_674, + ACTOR_OBJ_BANK_675, + ACTOR_OBJ_BANK_676, + ACTOR_OBJ_BANK_677, + ACTOR_OBJ_BANK_678, + ACTOR_OBJ_BANK_679, + ACTOR_OBJ_BANK_680, + ACTOR_OBJ_BANK_681, + ACTOR_OBJ_BANK_682, + ACTOR_OBJ_BANK_683, + ACTOR_OBJ_BANK_684, + ACTOR_OBJ_BANK_685, + ACTOR_OBJ_BANK_686, + ACTOR_OBJ_BANK_687, + ACTOR_OBJ_BANK_688, + ACTOR_OBJ_BANK_689, + ACTOR_OBJ_BANK_690, + ACTOR_OBJ_BANK_691, + ACTOR_OBJ_BANK_692, + ACTOR_OBJ_BANK_693, + ACTOR_OBJ_BANK_694, + ACTOR_OBJ_BANK_695, + ACTOR_OBJ_BANK_696, + ACTOR_OBJ_BANK_697, + ACTOR_OBJ_BANK_698, + ACTOR_OBJ_BANK_699, + ACTOR_OBJ_BANK_700, + ACTOR_OBJ_BANK_701, + ACTOR_OBJ_BANK_702, + ACTOR_OBJ_BANK_703, + ACTOR_OBJ_BANK_704, + ACTOR_OBJ_BANK_705, + ACTOR_OBJ_BANK_706, + ACTOR_OBJ_BANK_707, + ACTOR_OBJ_BANK_708, + ACTOR_OBJ_BANK_709, + ACTOR_OBJ_BANK_710, + ACTOR_OBJ_BANK_711, + ACTOR_OBJ_BANK_712, + ACTOR_OBJ_BANK_713, + ACTOR_OBJ_BANK_714, + ACTOR_OBJ_BANK_715, + ACTOR_OBJ_BANK_716, + ACTOR_OBJ_BANK_717, + ACTOR_OBJ_BANK_718, + ACTOR_OBJ_BANK_719, + ACTOR_OBJ_BANK_720, + ACTOR_OBJ_BANK_721, + ACTOR_OBJ_BANK_722, + ACTOR_OBJ_BANK_723, + ACTOR_OBJ_BANK_724, + ACTOR_OBJ_BANK_725, + ACTOR_OBJ_BANK_726, + ACTOR_OBJ_BANK_727, + ACTOR_OBJ_BANK_728, + ACTOR_OBJ_BANK_729, + ACTOR_OBJ_BANK_730, + ACTOR_OBJ_BANK_731, +}; enum actor_part { diff --git a/include/m_collision_bg.h b/include/m_collision_bg.h index 5aef2ba8..c89a8982 100644 --- a/include/m_collision_bg.h +++ b/include/m_collision_bg.h @@ -154,6 +154,7 @@ extern f32 mCoBG_GetBgY_AngleS_FromWpos(s_xyz* angle_to_ground, xyz_t wpos, f32 extern f32 mCoBG_GetShadowBgY_AngleS_FromWpos(f32, s_xyz*, xyz_t); extern int mCoBG_CheckWaterAttribute_OutOfSea(u32 attribute); extern int mCoBG_CheckHole_OrgAttr(u32 attribute); +extern f32 mCoBG_GetBgY_OnlyCenter_FromWpos(f32 dist, xyz_t* wpos); extern f32 mCoBG_GetBgY_OnlyCenter_FromWpos2(xyz_t wpos, f32 foot_dist); extern int mCoBG_Attribute2CheckPlant(u32 attribute, const xyz_t* wpos); extern void mCoBG_BgCheckControll(xyz_t* reverse_pos, ACTOR* actor, f32 check_range, f32 offset_y, s16 wall_attr_check, s16 no_reverse, s16 check_type); diff --git a/rel/ac_airplane.c b/rel/ac_airplane.c index 62d10e4d..dc0c2190 100644 --- a/rel/ac_airplane.c +++ b/rel/ac_airplane.c @@ -24,9 +24,8 @@ ACTOR_PROFILE Airplane_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, ETC_AIRPLANE, - ACTOR_OBJ_BANK_7, + ACTOR_OBJ_BANK_AIRPLANE, sizeof(AIRPLANE_ACTOR), - &Airplane_Actor_ct, &Airplane_Actor_dt, &Airplane_Actor_move, diff --git a/rel/ac_animal_logo.c b/rel/ac_animal_logo.c index 8a50f9b3..bfdad44b 100644 --- a/rel/ac_animal_logo.c +++ b/rel/ac_animal_logo.c @@ -58,7 +58,7 @@ ACTOR_PROFILE Animal_Logo_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(ANIMAL_LOGO_ACTOR), &aAL_actor_ct, &aAL_actor_dt, diff --git a/rel/ac_aprilfool_control.c b/rel/ac_aprilfool_control.c index e9f25665..86609f7a 100644 --- a/rel/ac_aprilfool_control.c +++ b/rel/ac_aprilfool_control.c @@ -12,7 +12,7 @@ ACTOR_PROFILE Aprilfool_Control_Profile = { ACTOR_PART_CONTROL, ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(APRILFOOL_CONTROL_ACTOR), &aAPC_actor_ct, &aAPC_actor_dt, diff --git a/rel/ac_boxManager.c b/rel/ac_boxManager.c index 81372fc4..c88908ca 100644 --- a/rel/ac_boxManager.c +++ b/rel/ac_boxManager.c @@ -13,7 +13,7 @@ ACTOR_PROFILE BoxManager_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, ETC_BOXMANAGER, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(BOXMANAGER_ACTOR), &BoxManager_Actor_ct, &BoxManager_Actor_dt, diff --git a/rel/ac_boxMove.c b/rel/ac_boxMove.c index bf60aae0..3fdb0f48 100644 --- a/rel/ac_boxMove.c +++ b/rel/ac_boxMove.c @@ -13,7 +13,7 @@ ACTOR_PROFILE BoxMove_Profile = { ACTOR_PART_BG, ACTOR_STATE_NONE, EMPTY_NO, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(BOXMOVE_ACTOR), &BoxMove_Actor_ct, &BoxMove_Actor_dt, diff --git a/rel/ac_boxTrick01.c b/rel/ac_boxTrick01.c index 6e3ca00e..0e824caf 100644 --- a/rel/ac_boxTrick01.c +++ b/rel/ac_boxTrick01.c @@ -11,7 +11,7 @@ ACTOR_PROFILE BoxTrick01_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, ETC_BOXTRICK, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(BOXTRICK01_ACTOR), &BoxTrick01_Actor_ct, &BoxTrick01_Actor_dt, diff --git a/rel/ac_douzou.c b/rel/ac_douzou.c index bd7e25e2..2b7d7395 100644 --- a/rel/ac_douzou.c +++ b/rel/ac_douzou.c @@ -15,7 +15,7 @@ ACTOR_PROFILE Douzou_Profile = { ACTOR_PART_ITEM, ACTOR_STATE_TA_SET, DOUZOU, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(STRUCTURE_ACTOR), &aDOU_actor_ct, diff --git a/rel/ac_groundhog_control.c b/rel/ac_groundhog_control.c index 0d0f9f1f..2f2e0647 100644 --- a/rel/ac_groundhog_control.c +++ b/rel/ac_groundhog_control.c @@ -13,7 +13,7 @@ ACTOR_PROFILE Groundhog_Control_Profile = { ACTOR_PART_CONTROL, ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(GROUNDHOG_CONTROL_ACTOR), &aGHC_actor_ct, &aGHC_actor_dt, diff --git a/rel/ac_set_manager.c b/rel/ac_set_manager.c index fb78378c..b2876ea0 100644 --- a/rel/ac_set_manager.c +++ b/rel/ac_set_manager.c @@ -271,7 +271,7 @@ ACTOR_PROFILE Set_Manager_Profile = { ACTOR_PART_CONTROL, /* control actor type */ ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES, EMPTY_NO, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(SET_MANAGER), aSetMgr_ct, aSetMgr_dt, diff --git a/rel/ac_structure.c b/rel/ac_structure.c index 92bb269b..66218b6f 100644 --- a/rel/ac_structure.c +++ b/rel/ac_structure.c @@ -14,7 +14,7 @@ ACTOR_PROFILE Structure_Profile = { ACTOR_PART_CONTROL, ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(STRUCTURE_CONTROL_ACTOR), &aSTR_actor_ct, diff --git a/rel/ac_t_anrium1.c b/rel/ac_t_anrium1.c index ebe710e4..eea48f70 100644 --- a/rel/ac_t_anrium1.c +++ b/rel/ac_t_anrium1.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Anrium1_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(ANRIUM1_ACTOR), &aTA1_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_bag1.c b/rel/ac_t_bag1.c index b4a10ee3..9b650b70 100644 --- a/rel/ac_t_bag1.c +++ b/rel/ac_t_bag1.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Bag1_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(BAG1_ACTOR), &aTBG1_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_bag2.c b/rel/ac_t_bag2.c index b32841e6..357a5382 100644 --- a/rel/ac_t_bag2.c +++ b/rel/ac_t_bag2.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Bag2_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(BAG2_ACTOR), &aTBG2_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_biscus1.c b/rel/ac_t_biscus1.c index 454733e6..a07ce983 100644 --- a/rel/ac_t_biscus1.c +++ b/rel/ac_t_biscus1.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Biscus1_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(BISCUS1_ACTOR), &aTB1_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_biscus2.c b/rel/ac_t_biscus2.c index 9f0e0572..afdafa83 100644 --- a/rel/ac_t_biscus2.c +++ b/rel/ac_t_biscus2.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Biscus2_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(BISCUS2_ACTOR), &aTB2_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_biscus3.c b/rel/ac_t_biscus3.c index ed28c0ae..d9d87daa 100644 --- a/rel/ac_t_biscus3.c +++ b/rel/ac_t_biscus3.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Biscus3_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(BISCUS3_ACTOR), &aTB3_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_biscus4.c b/rel/ac_t_biscus4.c index 26829a6c..373a8a3d 100644 --- a/rel/ac_t_biscus4.c +++ b/rel/ac_t_biscus4.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Biscus4_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(BISCUS4_ACTOR), &aTB4_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_cobra1.c b/rel/ac_t_cobra1.c index 57d7dd45..6872859f 100644 --- a/rel/ac_t_cobra1.c +++ b/rel/ac_t_cobra1.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Cobra1_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(COBRA1_ACTOR), &aTCB1_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_cracker.c b/rel/ac_t_cracker.c index f1e85dfd..bef3ae4d 100644 --- a/rel/ac_t_cracker.c +++ b/rel/ac_t_cracker.c @@ -14,7 +14,7 @@ ACTOR_PROFILE T_Cracker_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - 395, //Leftover from the object table, so this actor doesn't have an object bank + ACTOR_OBJ_BANK_CRACKER, sizeof(CRACKER_ACTOR), &aTCR_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_hanabi.c b/rel/ac_t_hanabi.c index 49de40e1..b05306ff 100644 --- a/rel/ac_t_hanabi.c +++ b/rel/ac_t_hanabi.c @@ -14,7 +14,7 @@ ACTOR_PROFILE T_Hanabi_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_53, + ACTOR_OBJ_BANK_HANABI, sizeof(HANABI_ACTOR), &aTHB_actor_ct, &aTHB_actor_dt, diff --git a/rel/ac_t_hasu1.c b/rel/ac_t_hasu1.c index 25997833..64ba45ae 100644 --- a/rel/ac_t_hasu1.c +++ b/rel/ac_t_hasu1.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Hasu1_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(HASU1_ACTOR), &aTHS1_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_hat1.c b/rel/ac_t_hat1.c index 23fe380a..dad77995 100644 --- a/rel/ac_t_hat1.c +++ b/rel/ac_t_hat1.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Hat1_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(HAT1_ACTOR), &aTHT1_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_hat2.c b/rel/ac_t_hat2.c index 901eb47f..a894d9f4 100644 --- a/rel/ac_t_hat2.c +++ b/rel/ac_t_hat2.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Hat2_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(HAT2_ACTOR), &aTHT2_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_hat3.c b/rel/ac_t_hat3.c index 6eb20444..a831535d 100644 --- a/rel/ac_t_hat3.c +++ b/rel/ac_t_hat3.c @@ -16,7 +16,7 @@ ACTOR_PROFILE T_Hat3_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(HAT3_ACTOR), &aTHT3_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_t_pistol.c b/rel/ac_t_pistol.c index 2b31d29f..23da5485 100644 --- a/rel/ac_t_pistol.c +++ b/rel/ac_t_pistol.c @@ -14,7 +14,7 @@ ACTOR_PROFILE T_Pistol_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_16, + ACTOR_OBJ_BANK_TOOLS, sizeof(PISTOL_ACTOR), &aTPT_actor_ct, NONE_ACTOR_PROC, diff --git a/rel/ac_tools.c b/rel/ac_tools.c index fcd38ae2..2eb63739 100644 --- a/rel/ac_tools.c +++ b/rel/ac_tools.c @@ -16,7 +16,7 @@ ACTOR_PROFILE Tools_Profile = { ACTOR_PART_CONTROL, ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, EMPTY_NO, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(ACTOR), aTOL_actor_ct, aTOL_actor_dt, diff --git a/rel/ac_train0.c b/rel/ac_train0.c index d9dd98b5..1c571ed9 100644 --- a/rel/ac_train0.c +++ b/rel/ac_train0.c @@ -17,7 +17,7 @@ ACTOR_PROFILE Train0_Profile = { ACTOR_PART_ITEM, ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_TA_SET | ACTOR_STATE_NO_MOVE_WHILE_CULLED, TRAIN0, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(TRAIN0_ACTOR), &aTR0_actor_ct, &aTR0_actor_dt, diff --git a/rel/ac_train1.c b/rel/ac_train1.c index 6a62b4e2..bcb481da 100644 --- a/rel/ac_train1.c +++ b/rel/ac_train1.c @@ -22,7 +22,7 @@ ACTOR_PROFILE Train1_Profile = { ACTOR_PART_ITEM, ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | 1 << 11 | ACTOR_STATE_NO_MOVE_WHILE_CULLED, //figure out flag 0x800 TRAIN1, - ACTOR_OBJ_BANK_3, + ACTOR_OBJ_BANK_KEEP, sizeof(TRAIN1_ACTOR), &aTR1_actor_ct, &aTR1_actor_dt, diff --git a/rel/ac_train_door.c b/rel/ac_train_door.c index a95ff034..8fe35bf7 100644 --- a/rel/ac_train_door.c +++ b/rel/ac_train_door.c @@ -14,7 +14,7 @@ ACTOR_PROFILE TrainDoor_Profile = { ACTOR_PART_BG, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, TRAIN_DOOR, - ACTOR_OBJ_BANK_11, + ACTOR_OBJ_BANK_TRAINDOOR, sizeof(TRAINDOOR_ACTOR), &aTRD_actor_ct, &aTRD_actor_dt, diff --git a/rel/ac_train_window.c b/rel/ac_train_window.c index 15891415..0a8413eb 100644 --- a/rel/ac_train_window.c +++ b/rel/ac_train_window.c @@ -181,7 +181,7 @@ ACTOR_PROFILE Train_Window_Profile = { ACTOR_PART_ITEM, ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, ETC_TRAIN_WINDOW, - ACTOR_OBJ_BANK_41, + ACTOR_OBJ_BANK_TRAINWINDOW, sizeof(TRAIN_WINDOW_ACTOR), &Train_Window_Actor_ct, &Train_Window_Actor_dt, diff --git a/rel/ef_lamp_light.c b/rel/ef_lamp_light.c new file mode 100644 index 00000000..ef0545cf --- /dev/null +++ b/rel/ef_lamp_light.c @@ -0,0 +1,131 @@ +#include "ef_lamp_light.h" +#include "m_field_info.h" +#include "m_lights.h" +#include "m_common_data.h" +#include "m_name_table.h" + +static void Ef_Lamp_Light_actor_ct(ACTOR* actor, GAME_PLAY* game); +static void Ef_Lamp_Light_actor_dt(ACTOR* actor, GAME_PLAY* game); +static void Ef_Lamp_Light_actor_move(ACTOR* actor, GAME_PLAY* game); + + +ACTOR_PROFILE Lamp_Light_Profile = { + mAc_PROFILE_LAMP_LIGHT, + ACTOR_PART_EFFECT, + ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_KEEP, + sizeof(LAMPLIGHT_ACTOR), + (mActor_proc)Ef_Lamp_Light_actor_ct, + (mActor_proc)Ef_Lamp_Light_actor_dt, + (mActor_proc)Ef_Lamp_Light_actor_move, + NONE_ACTOR_PROC, + NULL, +}; + +static void Ef_Lamp_Light_actor_ct(ACTOR* actor, GAME_PLAY* play) { + LAMPLIGHT_ACTOR* lamp = (LAMPLIGHT_ACTOR*)actor; + + play->kankyo.lamp_light = &lamp->lights; + Light_diffuse_ct(&lamp->lights, 0, 0x50, 0, 0, 0, 0); + lamp->node_p = Global_light_list_new(play, &play->global_light, &lamp->lights); +} + +static void Ef_Lamp_Light_actor_dt(ACTOR* actor, GAME_PLAY* play) { + LAMPLIGHT_ACTOR* lamp = (LAMPLIGHT_ACTOR*)actor; + + play->kankyo.lamp_light = NULL; + Global_light_list_delete(&play->global_light, lamp->node_p); +} + +static int eLL_get_light_sw_other_room(){ + int ret = 0; + //Not before 6 p.m or past 6 a.m + if((Common_Get(time.now_sec) < 21600) || (Common_Get(time.now_sec) >= 64800)){ + ret = 1; + } + + return ret; +} + +static int eLL_get_light_sw_player_room(){ + //6 p.m to 11 p.m + if((Common_Get(time.now_sec) >= 64800 ) && (Common_Get(time.now_sec) < 82800)){ + return 1; + } + + return 0; +} + +static int eLL_get_light_sw_start_demo(){ + int ret = 1; + + if(Common_Get(sunlight_flag) == 1){ + ret = 0; + } + + return ret; +} + +static void eLL_ctrl_light_sw(LAMPLIGHT_ACTOR* lamp) { + int ret = 0; + + switch (Common_Get(field_type)) { + case 2: + case 3: + switch (mFI_GetFieldId()) { + case mFI_FIELD_PLAYER0_ROOM: + case mFI_FIELD_PLAYER1_ROOM: + case mFI_FIELD_PLAYER2_ROOM: + case mFI_FIELD_PLAYER3_ROOM: + ret = eLL_get_light_sw_player_room(lamp); + break; + + case mFI_FIELD_DEMO_STARTDEMO: + case mFI_FIELD_DEMO_STARTDEMO2: + ret = eLL_get_light_sw_start_demo(); + break; + + default: + ret = eLL_get_light_sw_other_room(); + break; + } + break; + + case 1: + ret = eLL_get_light_sw_player_room(lamp); + break; + } + + lamp->switch_type = ret; +} + +static void Ef_Lamp_Light_actor_move(ACTOR* actor, GAME_PLAY* play) { + static s16 add_data_off[] = {2, 2, 1, 0}; + static s16 add_data_on[] = {16, 16, 8, 0}; + static s16* add_data[] = { add_data_off, add_data_on}; + static s16 cmp_data_off[] = { 0, 0, 0, 0 }; + static s16 cmp_data_on[] = { 0xC8, 0xC8, 0x96, 0 }; + static s16* cmp_data[] = { cmp_data_off, cmp_data_on}; + + LAMPLIGHT_ACTOR* lamp = (LAMPLIGHT_ACTOR*)actor; + + s16 val; + u8* color; + s16* add; + int type; + s16* cmp; + int i; + + eLL_ctrl_light_sw(lamp); + color = lamp->lights.lights.diffuse.color; + type = lamp->switch_type; + add = add_data[type]; + cmp = cmp_data[type]; + + for (i = 0; i < 3; i++, add++, cmp++, color++) { + val = *color; + chase_s(&val, *cmp, (0.5f * *add)); + *color = val; + } +} \ No newline at end of file diff --git a/rel/ef_room_sunshine.c b/rel/ef_room_sunshine.c new file mode 100644 index 00000000..80084ceb --- /dev/null +++ b/rel/ef_room_sunshine.c @@ -0,0 +1,216 @@ +#include "ef_room_sunshine.h" + +#include "m_common_data.h" +#include "m_name_table.h" +#include "m_debug.h" +#include "m_collision_bg.h" +#include "sys_matrix.h" + +void Ef_Room_Sunshine_actor_ct(ACTOR* actor, GAME* play); +void Ef_Room_SunshineL_actor_move(ACTOR* actor, GAME* play); +void Ef_Room_SunshineL_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_SunshineR_actor_move(ACTOR* actor, GAME* play); +void Ef_Room_SunshineR_actor_draw(ACTOR* actor, GAME* play); + +extern Gfx light_floor01_mode[]; +extern Vtx light_floorL01_vtx[]; +extern Vtx light_floorR01_vtx[]; +extern Gfx light_shine01_mode[]; +extern Vtx light_shineL01_vtx[]; +extern Vtx light_shineR01_vtx[]; + +ACTOR_PROFILE Room_Sunshine_Profile = { + mAc_PROFILE_ROOM_SUNSHINE, + ACTOR_PART_EFFECT, + ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_ROOM_SUNSHINE, + sizeof(ROOMSUNSHINE_ACTOR), + Ef_Room_Sunshine_actor_ct, + NONE_ACTOR_PROC, + Ef_Room_SunshineR_actor_move, + Ef_Room_SunshineR_actor_draw, + NULL, +}; + +void Ef_Room_Sunshine_actor_ct(ACTOR* actor, GAME* game){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + xyz_t pos; + xyz_t pos2; + xyz_t pos3; + + sunshine->unk_174 = 0; + + if(sunshine->actor_class.actor_specific == 0){ + sunshine->actor_class.mv_proc = Ef_Room_SunshineL_actor_move; + sunshine->actor_class.dw_proc = Ef_Room_SunshineL_actor_draw; + } + else{ + sunshine->actor_class.world.position.x -= 1.0f; + } + + pos = sunshine->actor_class.world.position; + + sunshine->actor_class.world.position.y = mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos); + + sunshine->actor_class.scale.x = 1.0f; + sunshine->actor_class.scale.y = 1.0f; + sunshine->actor_class.scale.z = 1.0f; + + switch(sunshine->actor_class.actor_specific){ + + case 2: + + sunshine->actor_class.mv_proc = Ef_Room_SunshineL_actor_move; + sunshine->actor_class.dw_proc = Ef_Room_SunshineL_actor_draw; + sunshine->actor_class.world.position.x += 5.0f; + pos2 = sunshine->actor_class.world.position; + sunshine->actor_class.world.position.y = 1.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos2); + sunshine->actor_class.world.position.x -= 6.0f; + break; + + case 3: + sunshine->actor_class.world.position.x -= 5.0f; + pos3 = sunshine->actor_class.world.position; + sunshine->actor_class.world.position.y = 1.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos3); + sunshine->actor_class.world.position.x += 6.0f; + break; + } +} + + +f32 calc_scale_Ef_Room_Sunshine(int flag, int sec){ + + if(flag == 0){ + return 1.5f * sin_s((sec << 14) / 28800.0f); + } + else{ + return 1.5f * sin_s((sec << 14) / 14400.0f); + } +} + +int calc_alpha_Ef_Room_Sunshine(){ + f32 ret; + int sec; + + if(Common_Get(time.now_sec) < 14400){ + ret = (120.0f + GETREG(TAKREG,30)) * ((14400 - Common_Get(time.now_sec)) / 14400.0f); + } + else if(Common_Get(time.now_sec) < 72000){ + sec = (Common_Get(time.now_sec) - 43200) >= 0 ? + (Common_Get(time.now_sec) - 43200U) : -(Common_Get(time.now_sec) - 43200U); + + ret = 255.0f * ((28800 - sec) / 28800.0f); + } + else{ + ret = (120.0f + GETREG(TAKREG,30)) * ((14400 - (86400 - Common_Get(time.now_sec))) / 14400.0f); + } + + if((Common_Get(weather) == 1) || (Common_Get(weather) == 2)){ + ret *= 0.6f; + } + + return (u8)ret; +} + +void Ef_Room_SunshineL_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + + if(Common_Get(time.now_sec) < 14400){ + sunshine->actor_class.scale.x = calc_scale_Ef_Room_Sunshine(1, Common_Get(time.now_sec)); + } + else if ((Common_Get(time.now_sec) >= 43200) && (Common_Get(time.now_sec) < 72000)){ + sunshine->actor_class.scale.x = calc_scale_Ef_Room_Sunshine(0, Common_Get(time.now_sec) - 43200); + } + else{ + sunshine->actor_class.scale.x = 0.0f; + } +} + +void Ef_Room_SunshineR_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 43200)){ + sunshine->actor_class.scale.x = calc_scale_Ef_Room_Sunshine(0, 43200 - Common_Get(time.now_sec)); + } + else if (Common_Get(time.now_sec) >= 72000){ + sunshine->actor_class.scale.x = calc_scale_Ef_Room_Sunshine(1, 86400 -Common_Get(time.now_sec)); + } + else{ + sunshine->actor_class.scale.x = 0.0f; + } +} + +void setup_mode_Ef_Room_Sunshine(ACTOR* actor, GAME_PLAY* play){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + u8* color; + f32 alpha; + + GRAPH* graph = play->game.graph; + + OPEN_DISP(graph); + + Matrix_translate(sunshine->actor_class.world.position.x, 0.1f +sunshine->actor_class.world.position.y, + sunshine->actor_class.world.position.z, 0); + Matrix_scale(sunshine->actor_class.scale.x, sunshine->actor_class.scale.y, sunshine->actor_class.scale.z,1); + + gDPPipeSync(NEXT_POLY_XLU_DISP); + + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 72000)){ + color =play->kankyo.base_light.sun_color_window; + } + else{ + color =play->kankyo.base_light.moon_color_window; + } + + alpha = (u8)calc_alpha_Ef_Room_Sunshine() * mKK_windowlight_alpha_get(); + + gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0,0, color[0], color[1], color[2], (int)(alpha)); + CLOSE_DISP(graph); + +} + +void Ef_Room_SunshineL_actor_draw(ACTOR* actor, GAME* game){ + GAME_PLAY* play = (GAME_PLAY*)game; + + GRAPH* graph; + + if((mKK_windowlight_alpha_get() < 9.99999974738e-05f) || (actor->scale.x == 0.0f)){ + return; + } + graph = play->game.graph; + setup_mode_Ef_Room_Sunshine(actor, play); + + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, light_floor01_mode); + gSPDisplayList(NEXT_POLY_XLU_DISP, light_floorL01_vtx); + gSPDisplayList(NEXT_POLY_XLU_DISP, light_shine01_mode); + gSPDisplayList(NEXT_POLY_XLU_DISP, light_shineL01_vtx); + + CLOSE_DISP(graph); +} + + +void Ef_Room_SunshineR_actor_draw(ACTOR* actor, GAME* game){ + GAME_PLAY* play = (GAME_PLAY*)game; + + GRAPH* graph; + + if((mKK_windowlight_alpha_get() < 9.99999974738e-05f) || (actor->scale.x == 0.0f)){ + return; + } + graph = play->game.graph; + setup_mode_Ef_Room_Sunshine(actor, play); + + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, light_floor01_mode); + gSPDisplayList(NEXT_POLY_XLU_DISP, light_floorR01_vtx); + gSPDisplayList(NEXT_POLY_XLU_DISP, light_shine01_mode); + gSPDisplayList(NEXT_POLY_XLU_DISP, light_shineR01_vtx); + + CLOSE_DISP(graph); +} \ No newline at end of file diff --git a/rel/ef_room_sunshine_minsect.c b/rel/ef_room_sunshine_minsect.c new file mode 100644 index 00000000..f7b0c0cd --- /dev/null +++ b/rel/ef_room_sunshine_minsect.c @@ -0,0 +1,323 @@ +#include "ef_room_sunshine_minsect.h" + +#include "m_common_data.h" +#include "m_name_table.h" +#include "m_debug.h" +#include "m_collision_bg.h" +#include "sys_matrix.h" + +void Ef_Room_Sunshine_Minsect_actor_ct(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_Minsect_actor_dt(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_MinsectL_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_MinsectL_actor_move(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_MinsectR_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_MinsectR_actor_move(ACTOR* actor, GAME* play); + +extern Gfx rom_museum4_ue_model[]; +extern Gfx rom_museum4_model[]; +extern Gfx obj_museum4_shine_1T_model[]; +extern Gfx obj_museum4_shine_2T_model[]; + +u8 draw_status; + +ACTOR_PROFILE Room_Sunshine_Minsect_Profile = { + mAc_PROFILE_ROOM_SUNSHINE_MINSECT, + ACTOR_PART_ITEM, + ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_EF_MINSECT, + sizeof(ROOMSUNSHINEMINSECT_ACTOR), + Ef_Room_Sunshine_Minsect_actor_ct, + NONE_ACTOR_PROC, + Ef_Room_Sunshine_MinsectR_actor_move, + Ef_Room_Sunshine_MinsectR_actor_draw, + NULL, +}; + +void Ef_Room_Sunshine_Minsect_actor_ct(ACTOR* actor, GAME* game){ + ROOMSUNSHINEMINSECT_ACTOR* minsect = (ROOMSUNSHINEMINSECT_ACTOR*)actor; + xyz_t pos; + + minsect->ef_sunshine_class.unk_174 = 0; + draw_status = 0; + if(minsect->ef_sunshine_class.actor_class.actor_specific == 0){ + minsect->ef_sunshine_class.actor_class.mv_proc = Ef_Room_Sunshine_MinsectL_actor_move; + minsect->ef_sunshine_class.actor_class.dw_proc = Ef_Room_Sunshine_MinsectL_actor_draw; + } + else{ + minsect->ef_sunshine_class.actor_class.world.position.x -= 1.0f; + } + + pos = minsect->ef_sunshine_class.actor_class.world.position; + + minsect->ef_sunshine_class.actor_class.world.position.y = mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos); + + minsect->ef_sunshine_class.actor_class.scale.x = 0.01f; + minsect->ef_sunshine_class.actor_class.scale.y = 0.01f; + minsect->ef_sunshine_class.actor_class.scale.z = 0.01f; + minsect->ef_sunshine_class.actor_class.cull_radius = 10000.0f; + + switch(minsect->ef_sunshine_class.actor_class.actor_specific){ + + case 2: + + minsect->ef_sunshine_class.actor_class.mv_proc = Ef_Room_Sunshine_MinsectL_actor_move; + minsect->ef_sunshine_class.actor_class.dw_proc = Ef_Room_Sunshine_MinsectL_actor_draw; + minsect->ef_sunshine_class.actor_class.world.position.x += 5.0f; + minsect->ef_sunshine_class.actor_class.world.position.x -= 6.0f; + break; + + case 3: + minsect->ef_sunshine_class.actor_class.world.position.x -= 5.0f; + minsect->ef_sunshine_class.actor_class.world.position.x += 6.0f; + break; + } +} + +f32 calc_scale_Ef_Room_Sunshine_Minsect(int flag, int sec){ + + if(flag == 0){ + return 0.01f * (1.5f * sin_s((sec << 14) / 28800.0f)); + } + else{ + return 0.01f * (1.5f * sin_s((sec << 14) / 14400.0f)); + } +} + +int calc_alpha_Ef_Room_SunshineMinsect(){ + f32 ret; + int sec; + + if(Common_Get(time.now_sec) < 14400){ + ret = 120.0f * ((14400 - Common_Get(time.now_sec)) / 14400.0f); + } + else if(Common_Get(time.now_sec) < 72000){ + //any other number matches codegen, but 43200 breaks + sec = (Common_Get(time.now_sec) - 43200) >= 0 ? + (Common_Get(time.now_sec) - 43200U) : -(Common_Get(time.now_sec) - 43200U); + + ret = 255.0f * ((28800 - sec) / 28800.0f); + } + else{ + ret = 120.0f * ((14400 - (86400 - Common_Get(time.now_sec))) / 14400.0f); + } + + if((Common_Get(weather) == 1) || (Common_Get(weather) == 2)){ + ret *= 0.6f; + } + + return (u8)ret; +} + +void Ef_Room_Sunshine_MinsectL_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINEMINSECT_ACTOR* minsect = (ROOMSUNSHINEMINSECT_ACTOR*)actor; + + if(Common_Get(time.now_sec) < 14400){ + minsect->ef_sunshine_class.actor_class.scale.x = calc_scale_Ef_Room_Sunshine_Minsect(1, Common_Get(time.now_sec)); + } + else if ((Common_Get(time.now_sec) >= 43200) && (Common_Get(time.now_sec) < 72000)){ + minsect->ef_sunshine_class.actor_class.scale.x = calc_scale_Ef_Room_Sunshine_Minsect(0, Common_Get(time.now_sec) - 43200); + } + else{ + minsect->ef_sunshine_class.actor_class.scale.x = 0.0f; + } + + minsect->ef_sunshine_class.actor_class.world.position.y = minsect->ef_sunshine_class.actor_class.home.position.y; + minsect->ef_sunshine_class.actor_class.world.position.y += 0.01f * GETREG(TAKREG,64); +} + +void Ef_Room_Sunshine_MinsectR_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINEMINSECT_ACTOR* minsect = (ROOMSUNSHINEMINSECT_ACTOR*)actor; + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 43200)){ + minsect->ef_sunshine_class.actor_class.scale.x = -calc_scale_Ef_Room_Sunshine_Minsect(0, 43200 - Common_Get(time.now_sec)); + } + else if (Common_Get(time.now_sec) >= 72000){ + minsect->ef_sunshine_class.actor_class.scale.x = -calc_scale_Ef_Room_Sunshine_Minsect(1, 86400 -Common_Get(time.now_sec)); + } + else{ + minsect->ef_sunshine_class.actor_class.scale.x = 0.0f; + } + minsect->ef_sunshine_class.actor_class.world.position.y = minsect->ef_sunshine_class.actor_class.home.position.y; + minsect->ef_sunshine_class.actor_class.world.position.y += 0.01f * GETREG(TAKREG,64); +} + + +void setup_mode_Ef_Room_Sunshine_Minsect(ACTOR* actor, GAME_PLAY* play){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + u8* color; + int calc; + + GRAPH* graph = play->game.graph; + + OPEN_DISP(graph); + + Matrix_translate(sunshine->actor_class.world.position.x, sunshine->actor_class.world.position.y, + sunshine->actor_class.world.position.z, 0); + Matrix_scale(sunshine->actor_class.scale.x, sunshine->actor_class.scale.y, sunshine->actor_class.scale.z,1); + + gDPPipeSync(NEXT_POLY_XLU_DISP); + + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 72000)){ + color =play->kankyo.base_light.sun_color_window; + } + else{ + color =play->kankyo.base_light.moon_color_window; + } + + calc = ((u8)calc_alpha_Ef_Room_SunshineMinsect() * mKK_windowlight_alpha_get()); + + gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0, calc, color[0], color[1], color[2], 75); + CLOSE_DISP(graph); + +} + +void setup_mode_Ef_Room_Sunshine_Minsect_decal(ACTOR* actor, GAME_PLAY* play){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + u8* color; + int calc; + + GRAPH* graph = play->game.graph; + + OPEN_DISP(graph); + + Matrix_translate(sunshine->actor_class.world.position.x, sunshine->actor_class.world.position.y, + sunshine->actor_class.world.position.z, 0); + Matrix_scale(sunshine->actor_class.scale.x, sunshine->actor_class.scale.y, sunshine->actor_class.scale.z,1); + + gDPPipeSync(NEXT_POLY_OPA_DISP); + + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 72000)){ + color =play->kankyo.base_light.sun_color_window; + } + else{ + color =play->kankyo.base_light.moon_color_window; + } + + calc = ((u8)calc_alpha_Ef_Room_SunshineMinsect() * mKK_windowlight_alpha_get()); + + gDPSetPrimColor(NEXT_POLY_OPA_DISP, 0, calc, color[0], color[1], color[2], 75); + CLOSE_DISP(graph); + +} + + +void BG_draw_Minsect(ACTOR* actor, GAME_PLAY* play){ + GRAPH* graph; + + if(!(draw_status & 4)){ + draw_status |= 4; + } + + if((draw_status & 1) && (draw_status & 2)){ + draw_status = 0; + } + + graph = play->game.graph; + Matrix_scale(0.0625f, 0.0625f, 0.0625f, 0); + Global_kankyo_set_room_prim(play); + OPEN_DISP(graph); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_OPA_DISP, rom_museum4_ue_model); + + CLOSE_DISP(graph); +} + +void BG_draw_Minsect_niwa(ACTOR* actor, GAME_PLAY* play){ + GRAPH* graph; + + graph = play->game.graph; + Matrix_scale(0.0625f, 0.0625f, 0.0625f, 0); + Global_kankyo_set_room_prim(play); + OPEN_DISP(graph); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_OPA_DISP, rom_museum4_model); + + CLOSE_DISP(graph); +} + +void Ef_Room_Sunshine_MinsectL_actor_draw(ACTOR* actor, GAME* game){ + GRAPH* graph; + + _texture_z_light_fog_prim(game->graph); + _texture_z_light_fog_prim_shadow(game->graph); + _texture_z_light_fog_prim_xlu(game->graph); + + draw_status |= 1; + + if(mKK_windowlight_alpha_get() < 9.99999974738e-05f){ + if ((draw_status & 1) && (draw_status & 2) && !(draw_status & 4)){ + BG_draw_Minsect_niwa(actor,(GAME_PLAY*)game); + BG_draw_Minsect(actor,(GAME_PLAY*)game); + } + } + else if(0.0f == actor->scale.x){ + if ((draw_status & 1) && (draw_status & 2) && !(draw_status & 4)){ + BG_draw_Minsect_niwa(actor,(GAME_PLAY*)game); + BG_draw_Minsect(actor,(GAME_PLAY*)game); + } + } + else{ + s16 reg; + graph = game->graph; + + BG_draw_Minsect_niwa(actor,(GAME_PLAY*)game); + setup_mode_Ef_Room_Sunshine_Minsect(actor,(GAME_PLAY*)game); + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum4_shine_1T_model); + setup_mode_Ef_Room_Sunshine_Minsect_decal(actor,(GAME_PLAY*)game); + + if(REGADDR(TAKREG, 0) == 0){ + gSPDisplayList(NEXT_POLY_OPA_DISP, obj_museum4_shine_2T_model); + } + BG_draw_Minsect(actor,(GAME_PLAY*)game); + + CLOSE_DISP(graph); + } +} + +void Ef_Room_Sunshine_MinsectR_actor_draw(ACTOR* actor, GAME* game){ + GRAPH* graph; + + + _texture_z_light_fog_prim(game->graph); + _texture_z_light_fog_prim_shadow(game->graph); + _texture_z_light_fog_prim_xlu(game->graph); + + draw_status |= 2; + + if(mKK_windowlight_alpha_get() < 9.99999974738e-05f){ + if ((draw_status & 1) && (draw_status & 2) && !(draw_status & 4)){ + BG_draw_Minsect_niwa(actor,(GAME_PLAY*)game); + BG_draw_Minsect(actor,(GAME_PLAY*)game); + } + } + else if(0.0f == actor->scale.x){ + if ((draw_status & 1) && (draw_status & 2) && !(draw_status & 4)){ + BG_draw_Minsect_niwa(actor,(GAME_PLAY*)game); + BG_draw_Minsect(actor,(GAME_PLAY*)game); + } + } + else{ + graph = game->graph; + + BG_draw_Minsect_niwa(actor,(GAME_PLAY*)game); + setup_mode_Ef_Room_Sunshine_Minsect(actor,(GAME_PLAY*)game); + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum4_shine_1T_model); + setup_mode_Ef_Room_Sunshine_Minsect_decal(actor,(GAME_PLAY*)game); + + if(REGADDR(TAKREG, 0) == 0){ + gSPDisplayList(NEXT_POLY_OPA_DISP, obj_museum4_shine_2T_model); + } + BG_draw_Minsect(actor,(GAME_PLAY*)game); + + CLOSE_DISP(graph); + } +} \ No newline at end of file diff --git a/rel/ef_room_sunshine_museum.c b/rel/ef_room_sunshine_museum.c new file mode 100644 index 00000000..9d4715ed --- /dev/null +++ b/rel/ef_room_sunshine_museum.c @@ -0,0 +1,209 @@ +#include "ef_room_sunshine_museum.h" + +#include "m_common_data.h" +#include "m_name_table.h" +#include "m_debug.h" +#include "m_collision_bg.h" +#include "sys_matrix.h" + +void Ef_Room_Sunshine_Museum_actor_ct(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_Museum_actor_dt(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_MuseumL_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_MuseumL_actor_move(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_MuseumR_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_MuseumR_actor_move(ACTOR* actor, GAME* play); + +extern Gfx obj_museum1_shine_model[]; +extern Gfx obj_museum1_shine_modelT[]; + +ACTOR_PROFILE Room_Sunshine_Museum_Profile = { + mAc_PROFILE_ROOM_SUNSHINE_MUSEUM, + ACTOR_PART_EFFECT, + ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_EF_MUSEUM, + sizeof(ROOMSUNSHINEMUSEUM_ACTOR), + Ef_Room_Sunshine_Museum_actor_ct, + NONE_ACTOR_PROC, + Ef_Room_Sunshine_MuseumR_actor_move, + Ef_Room_Sunshine_MuseumR_actor_draw, + NULL, +}; + +void Ef_Room_Sunshine_Museum_actor_ct(ACTOR* actor, GAME* game){ + ROOMSUNSHINEMUSEUM_ACTOR* museum = (ROOMSUNSHINEMUSEUM_ACTOR*)actor; + xyz_t pos; + xyz_t pos2; + xyz_t pos3; + + museum->ef_sunshine_class.unk_174 = 0; + + if(museum->ef_sunshine_class.actor_class.actor_specific == 0){ + museum->ef_sunshine_class.actor_class.mv_proc = Ef_Room_Sunshine_MuseumL_actor_move; + museum->ef_sunshine_class.actor_class.dw_proc = Ef_Room_Sunshine_MuseumL_actor_draw; + } + else{ + museum->ef_sunshine_class.actor_class.world.position.x -= 1.0f; + } + + pos = museum->ef_sunshine_class.actor_class.world.position; + + museum->ef_sunshine_class.actor_class.world.position.y = mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos); + + museum->ef_sunshine_class.actor_class.scale.x = 0.01f; + museum->ef_sunshine_class.actor_class.scale.y = 0.01f; + museum->ef_sunshine_class.actor_class.scale.z = 0.01f; + + switch(museum->ef_sunshine_class.actor_class.actor_specific){ + + case 2: + + museum->ef_sunshine_class.actor_class.mv_proc = Ef_Room_Sunshine_MuseumL_actor_move; + museum->ef_sunshine_class.actor_class.dw_proc = Ef_Room_Sunshine_MuseumL_actor_draw; + museum->ef_sunshine_class.actor_class.world.position.x += 5.0f; + pos2 = museum->ef_sunshine_class.actor_class.world.position; + museum->ef_sunshine_class.actor_class.world.position.y = 1.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos2) - 40.0f; + museum->ef_sunshine_class.actor_class.world.position.x -= 6.0f; + break; + + case 3: + museum->ef_sunshine_class.actor_class.world.position.x -= 5.0f; + pos3 = museum->ef_sunshine_class.actor_class.world.position; + museum->ef_sunshine_class.actor_class.world.position.y = 1.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos3) - 40.0f; + museum->ef_sunshine_class.actor_class.world.position.x += 6.0f; + break; + } +} + +f32 calc_scale_Ef_Room_Sunshine_Museum(int flag, int sec){ + + if(flag == 0){ + return 0.01f * (1.5f * sin_s((sec << 14) / 28800.0f)); + } + else{ + return 0.01f * (1.5f * sin_s((sec << 14) / 14400.0f)); + } +} + +int calc_alpha_Ef_Room_SunshineMuseum(){ + f32 ret; + int sec; + + if(Common_Get(time.now_sec) < 14400){ + ret = 120.0f * ((14400 - Common_Get(time.now_sec)) / 14400.0f); + } + else if(Common_Get(time.now_sec) < 72000){ + //any other number matches codegen, but 43200 breaks + sec = (Common_Get(time.now_sec) - 43200) >= 0 ? + (Common_Get(time.now_sec) - 43200U) : -(Common_Get(time.now_sec) - 43200U); + + ret = 255.0f * ((28800 - sec) / 28800.0f); + } + else{ + ret = 120.0f * ((14400 - (86400 - Common_Get(time.now_sec))) / 14400.0f); + } + + if((Common_Get(weather) == 1) || (Common_Get(weather) == 2)){ + ret *= 0.6f; + } + + return (u8)ret; +} + +void Ef_Room_Sunshine_MuseumL_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINEMUSEUM_ACTOR* museum = (ROOMSUNSHINEMUSEUM_ACTOR*)actor; + + if(Common_Get(time.now_sec) < 14400){ + museum->ef_sunshine_class.actor_class.scale.x = calc_scale_Ef_Room_Sunshine_Museum(1, Common_Get(time.now_sec)); + } + else if ((Common_Get(time.now_sec) >= 43200) && (Common_Get(time.now_sec) < 72000)){ + museum->ef_sunshine_class.actor_class.scale.x = calc_scale_Ef_Room_Sunshine_Museum(0, Common_Get(time.now_sec) - 43200); + } + else{ + museum->ef_sunshine_class.actor_class.scale.x = 0.0f; + } +} + +void Ef_Room_Sunshine_MuseumR_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINEMUSEUM_ACTOR* museum = (ROOMSUNSHINEMUSEUM_ACTOR*)actor; + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 43200)){ + museum->ef_sunshine_class.actor_class.scale.x = -calc_scale_Ef_Room_Sunshine_Museum(0, 43200 - Common_Get(time.now_sec)); + } + else if (Common_Get(time.now_sec) >= 72000){ + museum->ef_sunshine_class.actor_class.scale.x = -calc_scale_Ef_Room_Sunshine_Museum(1, 86400 -Common_Get(time.now_sec)); + } + else{ + museum->ef_sunshine_class.actor_class.scale.x = 0.0f; + } +} + + +void setup_mode_Ef_Room_Sunshine_Museum(ACTOR* actor, GAME_PLAY* play){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + u8* color; + int calc; + + GRAPH* graph = play->game.graph; + + OPEN_DISP(graph); + + Matrix_translate(sunshine->actor_class.world.position.x + GETREG(TAKREG,20), sunshine->actor_class.world.position.y + GETREG(TAKREG,21), + sunshine->actor_class.world.position.z + GETREG(TAKREG,22), 0); + Matrix_scale(sunshine->actor_class.scale.x, sunshine->actor_class.scale.y, sunshine->actor_class.scale.z,1); + + gDPPipeSync(NEXT_POLY_XLU_DISP); + + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 72000)){ + color =play->kankyo.base_light.sun_color_window; + } + else{ + color =play->kankyo.base_light.moon_color_window; + } + + calc = ((u8)calc_alpha_Ef_Room_SunshineMuseum() * mKK_windowlight_alpha_get()); + + gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0, calc, color[0], color[1], color[2], 75); + CLOSE_DISP(graph); + +} + +void Ef_Room_Sunshine_MuseumL_actor_draw(ACTOR* actor, GAME* game){ + GRAPH* graph; + GAME_PLAY* play = (GAME_PLAY*)game; + + if(!(mKK_windowlight_alpha_get() < 9.99999974738e-05f) && (actor->scale.x != 0.0f)){ + + graph = play->game.graph; + setup_mode_Ef_Room_Sunshine_Museum(actor, play); + + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum1_shine_model); + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum1_shine_modelT); + + + CLOSE_DISP(graph); + } +} + +void Ef_Room_Sunshine_MuseumR_actor_draw(ACTOR* actor, GAME* game){ + GRAPH* graph; + GAME_PLAY* play = (GAME_PLAY*)game; + + if(!(mKK_windowlight_alpha_get() < 9.99999974738e-05f) && (actor->scale.x != 0.0f)){ + + graph = play->game.graph; + setup_mode_Ef_Room_Sunshine_Museum(actor, play); + + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum1_shine_model); + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum1_shine_modelT); + + + CLOSE_DISP(graph); + } +} \ No newline at end of file diff --git a/rel/ef_room_sunshine_police.c b/rel/ef_room_sunshine_police.c new file mode 100644 index 00000000..c4c3d002 --- /dev/null +++ b/rel/ef_room_sunshine_police.c @@ -0,0 +1,220 @@ +#include "ef_room_sunshine_police.h" + +#include "m_common_data.h" +#include "m_name_table.h" +#include "m_debug.h" +#include "m_collision_bg.h" +#include "sys_matrix.h" + +void Ef_Room_Sunshine_Police_actor_ct(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_Police_actor_dt(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_PoliceL_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_PoliceL_actor_move(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_PoliceR_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_PoliceR_actor_move(ACTOR* actor, GAME* play); + +extern Gfx obj_koban_shine_modelT[]; + +ACTOR_PROFILE Room_Sunshine_Police_Profile = { + mAc_PROFILE_ROOM_SUNSHINE_POLICE, + ACTOR_PART_EFFECT, + ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_EF_POLICE, + sizeof(ROOMSUNSHINEPOLICE_ACTOR), + Ef_Room_Sunshine_Police_actor_ct, + NONE_ACTOR_PROC, + Ef_Room_Sunshine_PoliceR_actor_move, + Ef_Room_Sunshine_PoliceR_actor_draw, + NULL, +}; + +void Ef_Room_Sunshine_Police_actor_ct(ACTOR* actor, GAME* game){ + ROOMSUNSHINEPOLICE_ACTOR* police = (ROOMSUNSHINEPOLICE_ACTOR*)actor; + xyz_t pos; + xyz_t pos2; + xyz_t pos3; + + police->ef_sunshine_class.unk_174 = 0; + + if(police->ef_sunshine_class.actor_class.actor_specific == 0){ + police->ef_sunshine_class.actor_class.mv_proc = Ef_Room_Sunshine_PoliceL_actor_move; + police->ef_sunshine_class.actor_class.dw_proc = Ef_Room_Sunshine_PoliceL_actor_draw; + } + else{ + police->ef_sunshine_class.actor_class.world.position.x -= 1.0f; + } + + pos = police->ef_sunshine_class.actor_class.world.position; + + police->ef_sunshine_class.actor_class.world.position.y = mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos); + + police->ef_sunshine_class.actor_class.scale.x = 0.01f; + police->ef_sunshine_class.actor_class.scale.y = 0.01f; + police->ef_sunshine_class.actor_class.scale.z = 0.01f; + + switch(police->ef_sunshine_class.actor_class.actor_specific){ + + case 2: + + police->ef_sunshine_class.actor_class.mv_proc = Ef_Room_Sunshine_PoliceL_actor_move; + police->ef_sunshine_class.actor_class.dw_proc = Ef_Room_Sunshine_PoliceL_actor_draw; + police->ef_sunshine_class.actor_class.world.position.x += 5.0f; + pos2 = police->ef_sunshine_class.actor_class.world.position; + police->ef_sunshine_class.actor_class.world.position.y = 1.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos2) - 40.0f; + police->ef_sunshine_class.actor_class.world.position.x -= 6.0f; + break; + + case 3: + police->ef_sunshine_class.actor_class.world.position.x -= 5.0f; + pos3 = police->ef_sunshine_class.actor_class.world.position; + police->ef_sunshine_class.actor_class.world.position.y = 1.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos3) - 40.0f; + police->ef_sunshine_class.actor_class.world.position.x += 6.0f; + break; + } +} + +f32 calc_scale_Ef_Room_Sunshine_Police(int flag, int sec){ + + if(flag == 0){ + return 0.01f * (1.5f * sin_s((sec << 14) / 28800.0f)); + } + else{ + return 0.01f * (1.5f * sin_s((sec << 14) / 14400.0f)); + } +} + +int calc_alpha_Ef_Room_SunshinePolice(){ + f32 ret; + int sec; + + if(Common_Get(time.now_sec) < 14400){ + ret = 120.0f * ((14400 - Common_Get(time.now_sec)) / 14400.0f); + } + else if(Common_Get(time.now_sec) < 72000){ + sec = (Common_Get(time.now_sec) - 43200) >= 0 ? + (Common_Get(time.now_sec) - 43200U) : -(Common_Get(time.now_sec) - 43200U); + + ret = 255.0f * ((28800 - sec) / 28800.0f); + } + else{ + ret = 120.0f * ((14400 - (86400 - Common_Get(time.now_sec))) / 14400.0f); + } + + if((Common_Get(weather) == 1) || (Common_Get(weather) == 2)){ + ret *= 0.6f; + } + + return (u8)ret; +} + +void Ef_Room_Sunshine_PoliceL_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINEPOLICE_ACTOR* police = (ROOMSUNSHINEPOLICE_ACTOR*)actor; + + if(Common_Get(time.now_sec) < 14400){ + police->ef_sunshine_class.actor_class.scale.x = calc_scale_Ef_Room_Sunshine_Police(1, Common_Get(time.now_sec)); + } + else if ((Common_Get(time.now_sec) >= 43200) && (Common_Get(time.now_sec) < 72000)){ + police->ef_sunshine_class.actor_class.scale.x = calc_scale_Ef_Room_Sunshine_Police(0, Common_Get(time.now_sec) - 43200); + } + else{ + police->ef_sunshine_class.actor_class.scale.x = 0.0f; + } +} + +void Ef_Room_Sunshine_PoliceR_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINEPOLICE_ACTOR* police = (ROOMSUNSHINEPOLICE_ACTOR*)actor; + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 43200)){ + police->ef_sunshine_class.actor_class.scale.x = -calc_scale_Ef_Room_Sunshine_Police(0, 43200 - Common_Get(time.now_sec)); + } + else if (Common_Get(time.now_sec) >= 72000){ + police->ef_sunshine_class.actor_class.scale.x = -calc_scale_Ef_Room_Sunshine_Police(1, 86400 -Common_Get(time.now_sec)); + } + else{ + police->ef_sunshine_class.actor_class.scale.x = 0.0f; + } +} + +int cull_check_from_camera(ACTOR* actor, GAME_PLAY* play, int flag){ + + if(((play->camera.lookat.eye.x >= actor->world.position.x) && (flag == 1)) || + (play->camera.lookat.eye.x <= actor->world.position.x) && (flag == 0)){ + return 1; + } + return 0; +} + +void setup_mode_Ef_Room_Sunshine_Police(ACTOR* actor, GAME_PLAY* play){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + u8* color; + int calc; + + GRAPH* graph = play->game.graph; + + OPEN_DISP(graph); + + Matrix_translate(sunshine->actor_class.world.position.x, sunshine->actor_class.world.position.y, + sunshine->actor_class.world.position.z, 0); + Matrix_scale(sunshine->actor_class.scale.x, sunshine->actor_class.scale.y, sunshine->actor_class.scale.z,1); + + gDPPipeSync(NEXT_POLY_XLU_DISP); + + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 72000)){ + color =play->kankyo.base_light.sun_color_window; + } + else{ + color =play->kankyo.base_light.moon_color_window; + } + + calc = ((u8)calc_alpha_Ef_Room_SunshinePolice() * mKK_windowlight_alpha_get()); + + gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0, calc, color[0], color[1], color[2], 255); + CLOSE_DISP(graph); + +} + +void Ef_Room_Sunshine_PoliceL_actor_draw(ACTOR* actor, GAME* game){ + GRAPH* graph; + GAME_PLAY* play = (GAME_PLAY*)game; + + if((mKK_windowlight_alpha_get() < 9.99999974738e-05f) || (actor->scale.x == 0.0f)){ + return; + } + + if(cull_check_from_camera(actor,play,0) == 0){ + graph = play->game.graph; + setup_mode_Ef_Room_Sunshine_Police(actor, play); + + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_koban_shine_modelT); + + CLOSE_DISP(graph); + + } + +} + +void Ef_Room_Sunshine_PoliceR_actor_draw(ACTOR* actor, GAME* game){ + GRAPH* graph; + GAME_PLAY* play = (GAME_PLAY*)game; + + if((mKK_windowlight_alpha_get() < 9.99999974738e-05f) || (actor->scale.x == 0.0f)){ + return; + } + + if(cull_check_from_camera(actor,play,1) == 0){ + graph = play->game.graph; + setup_mode_Ef_Room_Sunshine_Police(actor, play); + + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_koban_shine_modelT); + + CLOSE_DISP(graph); + + } +} \ No newline at end of file diff --git a/rel/ef_room_sunshine_posthouse.c b/rel/ef_room_sunshine_posthouse.c new file mode 100644 index 00000000..b31e1e26 --- /dev/null +++ b/rel/ef_room_sunshine_posthouse.c @@ -0,0 +1,208 @@ +#include "ef_room_sunshine_posthouse.h" + +#include "m_common_data.h" +#include "m_name_table.h" +#include "m_debug.h" +#include "m_collision_bg.h" +#include "sys_matrix.h" + + +void Ef_Room_Sunshine_Posthouse_actor_ct(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_Posthouse_actor_dt(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_PosthouseL_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_PosthouseL_actor_move(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_PosthouseR_actor_draw(ACTOR* actor, GAME* play); +void Ef_Room_Sunshine_PosthouseR_actor_move(ACTOR* actor, GAME* play); + + +extern Gfx obj_yubinkyoku_shine_modelT[]; + +ACTOR_PROFILE Room_Sunshine_Posthouse_Profile = { + mAc_PROFILE_ROOM_SUNSHINE_POSTHOUSE, + ACTOR_PART_EFFECT, + ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_POSTHOUSE, + sizeof(ROOMSUNSHINEPOSTHOUSE_ACTOR), + Ef_Room_Sunshine_Posthouse_actor_ct, + NONE_ACTOR_PROC, + Ef_Room_Sunshine_PosthouseR_actor_move, + Ef_Room_Sunshine_PosthouseR_actor_draw, + NULL, +}; + +void Ef_Room_Sunshine_Posthouse_actor_ct(ACTOR* actor, GAME* game){ + ROOMSUNSHINEPOSTHOUSE_ACTOR* posthouse = (ROOMSUNSHINEPOSTHOUSE_ACTOR*)actor; + xyz_t pos; + xyz_t pos2; + xyz_t pos3; + + posthouse->ef_sunshine_class.unk_174 = 0; + + if(posthouse->ef_sunshine_class.actor_class.actor_specific == 0){ + posthouse->ef_sunshine_class.actor_class.mv_proc = Ef_Room_Sunshine_PosthouseL_actor_move; + posthouse->ef_sunshine_class.actor_class.dw_proc = Ef_Room_Sunshine_PosthouseL_actor_draw; + } + else{ + posthouse->ef_sunshine_class.actor_class.world.position.x -= 1.0f; + } + + pos = posthouse->ef_sunshine_class.actor_class.world.position; + + posthouse->ef_sunshine_class.actor_class.world.position.y = mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos); + + posthouse->ef_sunshine_class.actor_class.scale.x = 0.05f; + posthouse->ef_sunshine_class.actor_class.scale.y = 0.05f; + posthouse->ef_sunshine_class.actor_class.scale.z = 0.05f; + + switch(posthouse->ef_sunshine_class.actor_class.actor_specific){ + + case 2: + + posthouse->ef_sunshine_class.actor_class.mv_proc = Ef_Room_Sunshine_PosthouseL_actor_move; + posthouse->ef_sunshine_class.actor_class.dw_proc = Ef_Room_Sunshine_PosthouseL_actor_draw; + posthouse->ef_sunshine_class.actor_class.world.position.x += 5.0f; + pos2 = posthouse->ef_sunshine_class.actor_class.world.position; + posthouse->ef_sunshine_class.actor_class.world.position.y = 1.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos2); + posthouse->ef_sunshine_class.actor_class.world.position.x -= 6.0f; + break; + + case 3: + posthouse->ef_sunshine_class.actor_class.world.position.x -= 5.0f; + pos3 = posthouse->ef_sunshine_class.actor_class.world.position; + posthouse->ef_sunshine_class.actor_class.world.position.y = 1.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(0.0f, &pos3); + posthouse->ef_sunshine_class.actor_class.world.position.x += 6.0f; + break; + } +} + +f32 calc_scale_Ef_Room_Sunshine_Posthouse(int flag, int sec){ + + if(flag == 0){ + return 0.05f * (1.5f * sin_s((sec << 14) / 28800.0f)); + } + else{ + return 0.05f * (1.5f * sin_s((sec << 14) / 14400.0f)); + } +} + +int calc_alpha_Ef_Room_SunshinePosthouse(){ + f32 ret; + int sec; + + if(Common_Get(time.now_sec) < 14400){ + ret = 120.0f * ((14400 - Common_Get(time.now_sec)) / 14400.0f); + } + else if(Common_Get(time.now_sec) < 72000){ + //any other number matches codegen, but 43200 breaks + sec = (Common_Get(time.now_sec) - 43200) >= 0 ? + (Common_Get(time.now_sec) - 43200U) : -(Common_Get(time.now_sec) - 43200U); + + ret = 255.0f * ((28800 - sec) / 28800.0f); + } + else{ + ret = 120.0f * ((14400 - (86400 - Common_Get(time.now_sec))) / 14400.0f); + } + + if((Common_Get(weather) == 1) || (Common_Get(weather) == 2)){ + ret *= 0.6f; + } + + return (u8)ret; +} + +void Ef_Room_Sunshine_PosthouseL_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINEPOSTHOUSE_ACTOR* posthouse = (ROOMSUNSHINEPOSTHOUSE_ACTOR*)actor; + + if(Common_Get(time.now_sec) < 14400){ + posthouse->ef_sunshine_class.actor_class.scale.x = calc_scale_Ef_Room_Sunshine_Posthouse(1, Common_Get(time.now_sec)); + } + else if ((Common_Get(time.now_sec) >= 43200) && (Common_Get(time.now_sec) < 72000)){ + posthouse->ef_sunshine_class.actor_class.scale.x = calc_scale_Ef_Room_Sunshine_Posthouse(0, Common_Get(time.now_sec) - 43200); + } + else{ + posthouse->ef_sunshine_class.actor_class.scale.x = 0.0f; + } +} + +void Ef_Room_Sunshine_PosthouseR_actor_move(ACTOR* actor, GAME* game){ + ROOMSUNSHINEPOSTHOUSE_ACTOR* posthouse = (ROOMSUNSHINEPOSTHOUSE_ACTOR*)actor; + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 43200)){ + posthouse->ef_sunshine_class.actor_class.scale.x = -calc_scale_Ef_Room_Sunshine_Posthouse(0, 43200 - Common_Get(time.now_sec)); + } + else if (Common_Get(time.now_sec) >= 72000){ + posthouse->ef_sunshine_class.actor_class.scale.x = -calc_scale_Ef_Room_Sunshine_Posthouse(1, 86400 -Common_Get(time.now_sec)); + } + else{ + posthouse->ef_sunshine_class.actor_class.scale.x = 0.0f; + } +} + +void setup_mode_Ef_Room_Sunshine_Posthouse(ACTOR* actor, GAME_PLAY* play){ + ROOMSUNSHINE_ACTOR* sunshine = (ROOMSUNSHINE_ACTOR*)actor; + u8* color; + int calc; + + GRAPH* graph = play->game.graph; + + OPEN_DISP(graph); + + Matrix_translate(sunshine->actor_class.world.position.x, sunshine->actor_class.world.position.y, + sunshine->actor_class.world.position.z, 0); + Matrix_scale(sunshine->actor_class.scale.x, sunshine->actor_class.scale.y, sunshine->actor_class.scale.z,1); + + gDPPipeSync(NEXT_POLY_XLU_DISP); + + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 72000)){ + color =play->kankyo.base_light.sun_color_window; + } + else{ + color =play->kankyo.base_light.moon_color_window; + } + + calc = ((u8)calc_alpha_Ef_Room_SunshinePosthouse() * mKK_windowlight_alpha_get()); + + gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0, calc, color[0], color[1], color[2], 255); + CLOSE_DISP(graph); + +} + +void Ef_Room_Sunshine_PosthouseL_actor_draw(ACTOR* actor, GAME* game){ + GRAPH* graph; + GAME_PLAY* play = (GAME_PLAY*)game; + + if((mKK_windowlight_alpha_get() < 9.99999974738e-05f) || (actor->scale.x == 0.0f)){ + return; + } + graph = play->game.graph; + setup_mode_Ef_Room_Sunshine_Posthouse(actor, play); + + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_yubinkyoku_shine_modelT); + + CLOSE_DISP(graph); + +} + +void Ef_Room_Sunshine_PosthouseR_actor_draw(ACTOR* actor, GAME* game){ + GRAPH* graph; + GAME_PLAY* play = (GAME_PLAY*)game; + + if((mKK_windowlight_alpha_get() < 9.99999974738e-05f) || (actor->scale.x == 0.0f)){ + return; + } + + graph = play->game.graph; + setup_mode_Ef_Room_Sunshine_Posthouse(actor, play); + + OPEN_DISP(graph); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_yubinkyoku_shine_modelT); + + CLOSE_DISP(graph); + +} \ No newline at end of file