├── requirements.txt ├── tools └── permuter_settings.toml ├── src ├── data │ ├── cheats_AA7C8.c │ ├── obj │ │ ├── bb1_AA8A0.c │ │ ├── moskito_AA8BC.c │ │ ├── graine_AAC08.c │ │ ├── medaillon_toon_AA65C.c │ │ ├── dark_AA8C0.c │ │ ├── scorpion_A3BA4.c │ │ ├── scorpion_9CA5C.c │ │ ├── mama_pirate.c │ │ ├── dark_A3C88.c │ │ ├── eyes_9E69C.c │ │ └── moskito_A3BC4.c │ ├── input_AA6FC.c │ ├── text_AA7A4.c │ ├── bonus_AAE20.c │ ├── draw │ │ ├── draw_AAE00.c │ │ ├── fond_A29C0.c │ │ ├── fade_AAC10.c │ │ ├── text_AA610.c │ │ ├── draw_A36AC.c │ │ ├── draw_AA774.c │ │ ├── draw_AAC18.c │ │ ├── rollup_trans_AA5E4.c │ │ ├── fond_AA744.c │ │ ├── text_9ED80.c │ │ ├── fade_A3568.c │ │ ├── draw_hud_AA77C.c │ │ ├── fade_AA7E0.c │ │ ├── draw_AA864.c │ │ └── text_A29CC.c │ ├── unknown │ │ ├── AA8F0.c │ │ ├── AA608.c │ │ ├── AA860.c │ │ ├── 9E8F8.c │ │ └── 9EDDC.c │ ├── world_map_AA5F4.c │ ├── depart_dead_AA8DC.c │ ├── save.c │ ├── common │ │ ├── display_AA67C.c │ │ └── mapdata_9CA74.c │ ├── video_AADE0.c │ ├── world_map_AA8A4.c │ ├── loading_tex_9FC68.c │ ├── cheats_AA8D8.c │ ├── sound_AA7C0.c │ ├── bonus_AABF8.c │ ├── password_AA904.c │ ├── loading_AA6EC.c │ ├── first_init_AAC38.c │ ├── menu │ │ ├── menu_card_AA8F4.c │ │ ├── menu_AA8AC.c │ │ ├── menu_9EDBC.c │ │ ├── menu_AA614.c │ │ ├── menu_AA918.c │ │ └── menu_card_9ED48.c │ ├── obj_util.c │ ├── first_init_AA8E0.c │ ├── main_moteur_9FC58.c │ ├── main_moteur_AA670.c │ ├── video_AA6DC.c │ ├── sound_AA7CC.c │ ├── loading_AA8C8.c │ ├── cam_scroll_AA5FC.c │ ├── collision │ │ ├── collision_9E79C.c │ │ ├── block_9E49C.c │ │ └── bit_util.c │ ├── card_AA81C.c │ ├── ray │ │ └── angle_rayman_9EB18.c │ ├── music_AA6A4.c │ ├── main_moteur_AA680.c │ ├── cam_scroll_9E814.c │ ├── password_A3CD8.c │ └── loading_9FB74.c ├── obj │ ├── vitrail.c │ ├── tire_bouchon_command.c │ ├── reducteur.c │ ├── petit_couteau_command.c │ ├── bb1_plat_command.c │ ├── photographe_command.c │ ├── dark_phase2_str.c │ ├── blacktoon_eyes_command.c │ ├── mus_wait.c │ ├── bag1.c │ ├── cymbal2.c │ ├── cage.c │ ├── balle.c │ ├── nova2_command.c │ ├── bouee_joe_command.c │ ├── moving_platform_command.c │ ├── ens_command.c │ ├── drop_command.c │ ├── big_clown.c │ ├── caisse_claire_command.c │ ├── superhelico_init.c │ ├── cage_init.c │ ├── flash_command.c │ ├── rayon.c │ ├── stoneman_command.c │ ├── walk_note_command.c │ ├── joe_command.c │ ├── explosion.c │ ├── maracas.c │ ├── platform.c │ ├── badguy.c │ ├── hybride_mosams_command.c │ ├── herse.c │ ├── corde.c │ ├── trompette.c │ ├── spider_395B0.c │ ├── wat_clown.c │ ├── falling_obj_command.c │ └── spider_command.c ├── num_level_3D738.c ├── demo_B3F8.c ├── unknown │ ├── 5C2BC.c │ ├── 3F0B8.c │ ├── 3ED10.c │ ├── 29A18.c │ ├── 29F3C.c │ ├── AACC.c │ ├── 4BFCC.c │ └── A3B0.c ├── continue.c ├── ray │ └── angle_rayman.c ├── demo_7F2BC.c ├── collision │ └── proj.c ├── bonus_35FB4.c └── vignet.c ├── slus-000.05.sha1 ├── include ├── psyq_3_0_missing │ ├── LIBGPU.H │ ├── STDLIB.H │ ├── LIBCD.H │ ├── LIBPRESS.H │ ├── LIBETC.H │ ├── RAND.H │ ├── STRINGS.H │ └── LIBAPI.H ├── common │ ├── rayconst.h │ ├── fin_du_jeu.h │ ├── ray.h │ ├── world_map.h │ ├── level.h │ ├── fileinfo.h │ ├── mapdata.h │ ├── record.h │ ├── text_to_display.h │ ├── rayevts.h │ ├── display.h │ └── macro.h ├── obj │ ├── balle.h │ ├── reducteur.h │ ├── vitrail.h │ ├── nova2_command.h │ ├── platform.h │ ├── rayon.h │ ├── big_clown.h │ ├── drop_command.h │ ├── clown_tnt.h │ ├── ens_command.h │ ├── bag1.h │ ├── bb1_plat_command.h │ ├── flash_command.h │ ├── poelle_command.h │ ├── eclair_command.h │ ├── photographe_command.h │ ├── spider_command.h │ ├── trompette_command.h │ ├── bouee_joe_command.h │ ├── walk_note_command.h │ ├── stonedog_command.h │ ├── stoneman_command.h │ ├── badguy.h │ ├── genebadguy_command.h │ ├── blacktoon_eyes_command.h │ ├── petit_couteau_command.h │ ├── tire_bouchon_command.h │ ├── eyes_4BC40.h │ ├── herse.h │ ├── moving_platform_command.h │ ├── mus_wait.h │ ├── trompette.h │ ├── explosion.h │ ├── spider_395B0.h │ ├── wat_clown.h │ ├── maracas.h │ ├── cage.h │ ├── cage_init.h │ ├── cymbal2.h │ ├── pi_boum.h │ ├── maracas_command.h │ ├── eyes_3C3A8.h │ ├── hybride_mosams_command.h │ ├── caisse_claire_command.h │ ├── eau.h │ ├── stonebomb_command.h │ ├── poi_command.h │ ├── superhelico_init.h │ ├── mst_scroll.h │ ├── stonewoman.h │ ├── graine.h │ ├── pirate_poelle.h │ ├── clown_tnt_command.h │ ├── joe_command.h │ ├── fire.h │ ├── hybride_stosko.h │ ├── corde.h │ ├── mite_badguy.h │ ├── bateau_command.h │ ├── falling_obj_command.h │ ├── fee_3D76C.h │ ├── blacktoon1.h │ ├── corde_command.h │ ├── cymbal.h │ ├── ufo_idc.h │ ├── dark2_pink_fly.h │ ├── mite.h │ ├── medaillon_toon.h │ ├── spider_plafond.h │ ├── fish.h │ ├── dark_74FEC.h │ ├── pirate_ngawe.h │ ├── fee_4DFD0.h │ ├── hyb_bbf2.h │ ├── batteur_fou.h │ ├── pirate_guetteur.h │ ├── black_ray_command.h │ ├── stonebomb.h │ ├── poing.h │ ├── dark_phase2.h │ ├── moskito.h │ ├── scorpion.h │ └── saxo.h ├── unknown │ ├── 3F0B8.h │ ├── 29F3C.h │ ├── 29A18.h │ ├── 5C2BC.h │ ├── 4BFCC.h │ ├── AACC.h │ ├── 3ED10.h │ ├── A3B0.h │ ├── 48528.h │ ├── 7BB28.h │ └── 2539C.h ├── num_level_3D738.h ├── demo_B3F8.h ├── ray │ ├── angle_rayman.h │ ├── ray_32398.h │ └── ray_30A64.h ├── continue.h ├── synchro_loop.h ├── special_platform.h ├── nova.h ├── demo_7F2BC.h ├── vram.h ├── vignet.h ├── bonus_372E0.h ├── depart_dead.h ├── main.h ├── command_494FC.h ├── menu │ ├── menu_7EEE4.h │ ├── menu_82008.h │ ├── menu_6A3BC.h │ └── menu_card_7C028.h ├── cam_scroll_340A4.h ├── luciole.h ├── timers.h ├── fond_5BD8C.h ├── cheats.h ├── text_24E10.h ├── collision │ ├── etat.h │ ├── proj.h │ ├── block_6E5E0.h │ ├── bit_util.h │ └── block_22C84.h ├── bonus_343EC.h ├── gendoor.h ├── pix_gerbe.h ├── bonus_35FB4.h ├── demo_9FD4.h ├── include_asm.h ├── world_map_95CC.h ├── loading_E99C.h ├── victoire.h ├── first_init.h ├── obj_util.h ├── moteur_init_end.h ├── cam_scroll_29B5C.h ├── macro.inc ├── draw │ ├── rollup_trans.h │ ├── draw_hud.h │ ├── fade.h │ ├── draw_548CC.h │ └── text_18118.h ├── num_level_36260.h ├── moteur_update.h ├── snow.h ├── main_moteur.h ├── loading_DA64.h ├── loading_tex.h ├── boss.h ├── gte.inc ├── common.h ├── video.h ├── save.h └── password.h ├── .gitignore ├── diff_settings.py ├── .gitmodules ├── mk-nugget.mk ├── .clang-format ├── .github └── workflows │ └── build.yml └── README.md /requirements.txt: -------------------------------------------------------------------------------- 1 | splat64[mips]==0.32.0 -------------------------------------------------------------------------------- /tools/permuter_settings.toml: -------------------------------------------------------------------------------- 1 | compiler_type = "gcc" -------------------------------------------------------------------------------- /src/data/cheats_AA7C8.c: -------------------------------------------------------------------------------- 1 | #include "cheats.h" 2 | 3 | s16 D_801CEFC8 = 0; -------------------------------------------------------------------------------- /src/data/obj/bb1_AA8A0.c: -------------------------------------------------------------------------------- 1 | #include "obj/bb1.h" 2 | 3 | s16 niveau = 0; -------------------------------------------------------------------------------- /slus-000.05.sha1: -------------------------------------------------------------------------------- 1 | 4ac1789e118933762cd0ebcb9a970f63dfe2c72f build/slus-000.05 -------------------------------------------------------------------------------- /src/data/input_AA6FC.c: -------------------------------------------------------------------------------- 1 | #include "input_ED20.h" 2 | 3 | s32 PS1_ButtonStates[] = {}; -------------------------------------------------------------------------------- /src/data/text_AA7A4.c: -------------------------------------------------------------------------------- 1 | #include "text_24E10.h" 2 | 3 | u8 D_801CEFA4 = '\0'; 4 | -------------------------------------------------------------------------------- /src/data/bonus_AAE20.c: -------------------------------------------------------------------------------- 1 | #include "bonus_343EC.h" 2 | 3 | u8 PS1_TimeString[] = ""; 4 | -------------------------------------------------------------------------------- /src/data/draw/draw_AAE00.c: -------------------------------------------------------------------------------- 1 | #include "draw/draw_14FF4.h" 2 | 3 | s16 D_801CF600[16] = {}; -------------------------------------------------------------------------------- /src/data/draw/fond_A29C0.c: -------------------------------------------------------------------------------- 1 | #include "draw/fond_10B3C.h" 2 | 3 | u16 D_801C71C0[5] = {}; -------------------------------------------------------------------------------- /src/data/obj/moskito_AA8BC.c: -------------------------------------------------------------------------------- 1 | #include "obj/moskito.h" 2 | 3 | s16 PS1_MsAnimIndex = 0; -------------------------------------------------------------------------------- /src/data/unknown/AA8F0.c: -------------------------------------------------------------------------------- 1 | #include "unknown/7BB28.h" 2 | 3 | u8 s_d_801cf0f0[] = "%d"; -------------------------------------------------------------------------------- /src/data/unknown/AA608.c: -------------------------------------------------------------------------------- 1 | #include "unknown/3ED10.h" 2 | 3 | s16 DecEau[] = { 9, 0, 7, 5 }; 4 | -------------------------------------------------------------------------------- /src/data/world_map_AA5F4.c: -------------------------------------------------------------------------------- 1 | #include "world_map_95CC.h" 2 | 3 | u8 s_level_801cedf4[] = "level "; -------------------------------------------------------------------------------- /src/data/depart_dead_AA8DC.c: -------------------------------------------------------------------------------- 1 | #include "depart_dead.h" 2 | 3 | u8 PS1_ShouldFadeOutWorldIntro = false; -------------------------------------------------------------------------------- /src/data/save.c: -------------------------------------------------------------------------------- 1 | #include "save.h" 2 | 3 | u8 nb_levels_in_world[] = { 0, 21, 18, 13, 13, 12, 4, 0 }; -------------------------------------------------------------------------------- /src/data/draw/fade_AAC10.c: -------------------------------------------------------------------------------- 1 | #include "draw/fade.h" 2 | 3 | s16 D_801CF410 = 0; 4 | u8 data_fade_801CF410[4] = {}; -------------------------------------------------------------------------------- /src/data/draw/text_AA610.c: -------------------------------------------------------------------------------- 1 | #include "draw/text_18118.h" 2 | 3 | u8 D_801CEE10 = 0; 4 | u8 let_shadow = false; -------------------------------------------------------------------------------- /src/data/obj/graine_AAC08.c: -------------------------------------------------------------------------------- 1 | #include "obj/graine.h" 2 | 3 | s32 D_801CF408 = false; 4 | u8 data_801cf40c[4] = {}; -------------------------------------------------------------------------------- /src/data/common/display_AA67C.c: -------------------------------------------------------------------------------- 1 | #include "common/display.h" 2 | 3 | Display *PS1_CurrentDisplay = &PS1_Displays[0]; -------------------------------------------------------------------------------- /src/data/video_AADE0.c: -------------------------------------------------------------------------------- 1 | #include "video.h" 2 | 3 | VideoState PS1_CurrentVideoState = {}; 4 | u8 data_801cf5fc[4] = {}; -------------------------------------------------------------------------------- /src/data/world_map_AA8A4.c: -------------------------------------------------------------------------------- 1 | #include "world_map_677C0.h" 2 | 3 | u8 s___801cf0a4[] = "/ /"; 4 | u8 s__801cf0a8[] = "/"; 5 | -------------------------------------------------------------------------------- /src/data/loading_tex_9FC68.c: -------------------------------------------------------------------------------- 1 | #include "loading_tex.h" 2 | 3 | s16 D_801C4468[] = { 474, 433, 397, 463, 462, 509, 1281, 1024 }; -------------------------------------------------------------------------------- /src/data/unknown/AA860.c: -------------------------------------------------------------------------------- 1 | #include "unknown/48528.h" 2 | 3 | s16 PS1_VRAMDisplayXPos = 384; 4 | s16 PS1_VRAMDisplayYPos = 0; 5 | -------------------------------------------------------------------------------- /src/data/cheats_AA8D8.c: -------------------------------------------------------------------------------- 1 | #include "cheats.h" 2 | 3 | u8 D_801CF0D8 = 0; 4 | u8 PS1_PictureInPicture = false; 5 | u8 PS1_15fps = false; -------------------------------------------------------------------------------- /src/data/sound_AA7C0.c: -------------------------------------------------------------------------------- 1 | #include "sound.h" 2 | 3 | s16 Volume_Snd = 127; 4 | u8 D_801CEFC4[] = { 0, 0, 1, 0 }; /* unknown raw bytes */ -------------------------------------------------------------------------------- /src/data/unknown/9E8F8.c: -------------------------------------------------------------------------------- 1 | #include "unknown/3ED10.h" 2 | 3 | s16 EauDy[] = { 0, -3, -6, -8, -9, -10, -9, -7, -5, -2, 2, 6, 7, 4 }; -------------------------------------------------------------------------------- /include/psyq_3_0_missing/LIBGPU.H: -------------------------------------------------------------------------------- 1 | #ifndef _MISSING_LIBGPU_H_ 2 | #define _MISSING_LIBGPU_H_ 3 | 4 | extern int FntPrint(); 5 | 6 | #endif -------------------------------------------------------------------------------- /include/psyq_3_0_missing/STDLIB.H: -------------------------------------------------------------------------------- 1 | #ifndef _MISSING_STDLIB_H_ 2 | #define _MISSING_STDLIB_H_ 3 | 4 | extern void exit(); 5 | 6 | #endif -------------------------------------------------------------------------------- /src/data/obj/medaillon_toon_AA65C.c: -------------------------------------------------------------------------------- 1 | #include "obj/medaillon_toon.h" 2 | 3 | s16 snd_flag_medaillon = 0; 4 | u8 data_801cee5e[16] = {}; -------------------------------------------------------------------------------- /src/data/bonus_AABF8.c: -------------------------------------------------------------------------------- 1 | #include "bonus_343EC.h" 2 | 3 | Obj *PS1_BonusNovas[] = { null, null }; 4 | Obj *PS1_BonusOneUps[] = { null, null }; -------------------------------------------------------------------------------- /include/common/rayconst.h: -------------------------------------------------------------------------------- 1 | #ifndef RAYCONST_H 2 | #define RAYCONST_H 3 | 4 | #define SCREEN_WIDTH 320 5 | #define SCREEN_HEIGHT 240 6 | 7 | #endif -------------------------------------------------------------------------------- /src/data/obj/dark_AA8C0.c: -------------------------------------------------------------------------------- 1 | #include "obj/dark_729F0.h" 2 | 3 | u8 dark_sequence[] = { 0, 1, 2 }; 4 | u8 dark_attaque = 0; 5 | u8 type_dark_attaque = 0; -------------------------------------------------------------------------------- /src/data/password_AA904.c: -------------------------------------------------------------------------------- 1 | #include "password.h" 2 | 3 | u8 PS1_IsPasswordValid = true; 4 | u8 s_ok_801cf108[] = "/ok/"; 5 | u8 s_s_801cf110[] = "/%s/"; -------------------------------------------------------------------------------- /include/common/fin_du_jeu.h: -------------------------------------------------------------------------------- 1 | #ifndef FIN_DU_JEU_H 2 | #define FIN_DU_JEU_H 3 | 4 | #include "common.h" 5 | 6 | /**/ 7 | extern u8 fin_du_jeu; 8 | 9 | #endif -------------------------------------------------------------------------------- /src/data/loading_AA6EC.c: -------------------------------------------------------------------------------- 1 | #include "loading_E99C.h" 2 | 3 | u8 *D_801CEEEC = (u8 *) 0x80700000; 4 | u8 *D_801CEEF0 = null; 5 | u8 s__801ceef4[] = "};\r\n\r\n"; -------------------------------------------------------------------------------- /include/obj/balle.h: -------------------------------------------------------------------------------- 1 | #ifndef BALLE_H 2 | #define BALLE_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | 7 | void DO_BALLE(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /src/data/first_init_AAC38.c: -------------------------------------------------------------------------------- 1 | #include "first_init.h" 2 | 3 | u8 D_801CF438 = 0; 4 | u8 data_801cf43c[4] = {}; 5 | u8 D_801CF440 = 0; 6 | u8 data_801cf444[4] = {}; -------------------------------------------------------------------------------- /src/data/menu/menu_card_AA8F4.c: -------------------------------------------------------------------------------- 1 | #include "menu/menu_card_7C028.h" 2 | 3 | u8 s_yes_801cf0f4[] = "/yes/"; 4 | u8 s_no_801cf0fc[] = "/no/"; 5 | u8 D_801CF101 = 0; -------------------------------------------------------------------------------- /src/data/obj/scorpion_A3BA4.c: -------------------------------------------------------------------------------- 1 | #include "obj/scorpion.h" 2 | 3 | s16 D_801C83A4[] = { 4, 2, 0, -2, -4, 2, 0, -2 }; 4 | s16 D_801C83B4[] = { 0, 2, 4, 2, 0, -2, -4, -2 }; -------------------------------------------------------------------------------- /src/data/obj_util.c: -------------------------------------------------------------------------------- 1 | #include "obj_util.h" 2 | 3 | s16 PS1_Toon_Speeds_x[] = { -3, -2, -1, 0, 1, 1, 3, 0 }; 4 | s16 PS1_Toon_Speeds_y[] = { -3, -5, -4, -6, -5, -3, -3, 0 }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | .vscode/ 3 | asm/ 4 | build/ 5 | expected/ 6 | nonmatchings/ 7 | SLUS-000.05 8 | slus-000.05.ld 9 | *_auto.txt 10 | tools/gcc-2.5.7/* 11 | -------------------------------------------------------------------------------- /include/obj/reducteur.h: -------------------------------------------------------------------------------- 1 | #ifndef REDUCTEUR_H 2 | #define REDUCTEUR_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | 7 | void DO_REDUCTEUR(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/vitrail.h: -------------------------------------------------------------------------------- 1 | #ifndef VITRAIL_H 2 | #define VITRAIL_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | 7 | void DO_VITRAIL_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/psyq_3_0_missing/LIBCD.H: -------------------------------------------------------------------------------- 1 | #ifndef _MISSING_LIBCD_H_ 2 | #define _MISSING_LIBCD_H_ 3 | 4 | void (*CdDataCallback(void (*func)())); 5 | void CdInit(void); 6 | 7 | #endif -------------------------------------------------------------------------------- /include/unknown/3F0B8.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_3F0B8_H 2 | #define UNK_3F0B8_H 3 | 4 | #include "common.h" 5 | #include "obj_update.h" 6 | 7 | void test_fin_cling(void); 8 | 9 | #endif -------------------------------------------------------------------------------- /src/data/first_init_AA8E0.c: -------------------------------------------------------------------------------- 1 | #include "first_init.h" 2 | 3 | RECT D_801CF0E0 = { 0, 0, 1024 - 1, 512 - 1 }; 4 | RECT D_801CF0E8 = { 704, 0, SCREEN_WIDTH, SCREEN_HEIGHT }; 5 | -------------------------------------------------------------------------------- /src/obj/vitrail.c: -------------------------------------------------------------------------------- 1 | #include "obj/vitrail.h" 2 | 3 | /* 7494C 8019914C -O2 -msoft-float */ 4 | void DO_VITRAIL_COMMAND(Obj *obj) 5 | { 6 | obj->display_prio = 0; 7 | } 8 | -------------------------------------------------------------------------------- /include/obj/nova2_command.h: -------------------------------------------------------------------------------- 1 | #ifndef JOE_COMMAND_H 2 | #define JOE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "timers.h" 6 | 7 | void DO_NOVA2_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/platform.h: -------------------------------------------------------------------------------- 1 | #ifndef PLATFORM_H 2 | #define PLATFORM_H 3 | 4 | #include "common.h" 5 | #include "moteur_init_end.h" 6 | 7 | void DO_INTERACT_PLAT(Obj *unk_obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/rayon.h: -------------------------------------------------------------------------------- 1 | #ifndef RAYON_H 2 | #define RAYON_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void allocatePaillette(Obj *ray_obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /src/data/draw/draw_A36AC.c: -------------------------------------------------------------------------------- 1 | #include "draw/draw_548CC.h" 2 | 3 | RGB D_801C7EAC[4] = 4 | { 5 | {0, 0, 255}, 6 | {255, 20, 255}, 7 | {255, 20, 255}, 8 | {0, 0, 255} 9 | }; -------------------------------------------------------------------------------- /include/common/ray.h: -------------------------------------------------------------------------------- 1 | #ifndef RAY_H 2 | #define RAY_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | 7 | /**/ 8 | extern Obj ray; 9 | extern Obj raytmp; 10 | 11 | #endif -------------------------------------------------------------------------------- /include/num_level_3D738.h: -------------------------------------------------------------------------------- 1 | #ifndef NUM_LEVEL_3D738_H 2 | #define NUM_LEVEL_3D738_H 3 | 4 | #include "common.h" 5 | #include "num_level_36260.h" 6 | 7 | void ChangeLevel(void); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/big_clown.h: -------------------------------------------------------------------------------- 1 | #ifndef BIG_CLOWN_H 2 | #define BIG_CLOWN_H 3 | 4 | #include "common.h" 5 | #include "cam_scroll_29B5C.h" 6 | 7 | void DO_BIG_CLOWN_ATTAK(Obj *bc_obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/drop_command.h: -------------------------------------------------------------------------------- 1 | #ifndef DROP_COMMAND_H 2 | #define DROP_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "collision/etat.h" 6 | 7 | void DO_DROP_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /src/data/draw/draw_AA774.c: -------------------------------------------------------------------------------- 1 | #include "draw/draw_14FF4.h" 2 | 3 | s16 PS1_PolygonIndexTableCount = 0; 4 | u8 PS1_DrawSpriteSemiTrans = false; 5 | s16 D_801CEF78 = -1; 6 | s16 D_801CEF7A = -1; -------------------------------------------------------------------------------- /src/data/main_moteur_9FC58.c: -------------------------------------------------------------------------------- 1 | #include "main_moteur.h" 2 | 3 | RECT PS1_MemoryUsageRects[] = 4 | { 5 | { 0, 0, 16, SCREEN_HEIGHT }, 6 | { 0, SCREEN_HEIGHT, 16, SCREEN_HEIGHT } 7 | }; -------------------------------------------------------------------------------- /include/obj/clown_tnt.h: -------------------------------------------------------------------------------- 1 | #ifndef CLOWN_TNT_H 2 | #define CLOWN_TNT_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void DO_CLOWN_TNT_ATTACK(Obj *ct_obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/ens_command.h: -------------------------------------------------------------------------------- 1 | #ifndef ENS_COMMAND_H 2 | #define ENS_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "obj/joe_command.h" 6 | 7 | void DO_ENSEIGNE_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /src/data/main_moteur_AA670.c: -------------------------------------------------------------------------------- 1 | #include "main_moteur.h" 2 | 3 | RECT *PTR_PS1_MemoryUsageRect_801cee70 = &PS1_MemoryUsageRects[0]; 4 | u8 PS1_MemoryUsageDisplayMode = 0; 5 | u8 data_801cee78[4] = {}; -------------------------------------------------------------------------------- /src/num_level_3D738.c: -------------------------------------------------------------------------------- 1 | #include "num_level_3D738.h" 2 | 3 | /* 3D738 80161F38 -O2 -msoft-float */ 4 | void ChangeLevel(void) 5 | { 6 | fix_numlevel(&ray); 7 | new_level = true; 8 | } 9 | -------------------------------------------------------------------------------- /include/obj/bag1.h: -------------------------------------------------------------------------------- 1 | #ifndef BAG1_H 2 | #define BAG1_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "timers.h" 7 | 8 | void DO_BAG1_COMMAND(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/bb1_plat_command.h: -------------------------------------------------------------------------------- 1 | #ifndef BB1_PLAT_COMMAND_H 2 | #define BB1_PLAT_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | 7 | void DO_BB1_PLAT_CMD(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/flash_command.h: -------------------------------------------------------------------------------- 1 | #ifndef JOE_COMMAND_H 2 | #define JOE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void DO_FLASH_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/poelle_command.h: -------------------------------------------------------------------------------- 1 | #ifndef POELLE_COMMAND_H 2 | #define POELLE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "unknown/2539C.h" 6 | 7 | void DO_POELLE_COMMAND(Obj *po_obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/unknown/29F3C.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_29F3C_H 2 | #define UNK_29F3C_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void allocateLandingSmoke(Obj *in_obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/eclair_command.h: -------------------------------------------------------------------------------- 1 | #ifndef ECLAIR_COMMAND_H 2 | #define ECLAIR_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "obj_init_kill.h" 6 | 7 | void DO_ECLAIR_COMMAND(Obj *ecl_obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/photographe_command.h: -------------------------------------------------------------------------------- 1 | #ifndef PHOTOGRAPHE_COMMAND_H 2 | #define PHOTOGRAPHE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "sound.h" 6 | 7 | void DO_PHOTOGRAPHE_CMD(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/spider_command.h: -------------------------------------------------------------------------------- 1 | #ifndef PIRATE_POELLE_H 2 | #define PIRATE_POELLE_H 3 | 4 | #include "common.h" 5 | #include "collision/block_6E5E0.h" 6 | 7 | void DO_SPIDER_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/trompette_command.h: -------------------------------------------------------------------------------- 1 | #ifndef TROMPETTE_COMMAND_H 2 | #define TROMPETTE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "obj/trompette.h" 6 | 7 | void DO_TRP_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/unknown/29A18.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_29A18_H 2 | #define UNK_29A18_H 3 | 4 | #include "common.h" 5 | #include "draw/fade.h" 6 | 7 | void fades(void); 8 | void FUN_8014e27c(void); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/bouee_joe_command.h: -------------------------------------------------------------------------------- 1 | #ifndef BOUEE_JOE_COMMAND_H 2 | #define BOUEE_JOE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "unknown/3ED10.h" 6 | 7 | void DO_BOUEE_JOE_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/walk_note_command.h: -------------------------------------------------------------------------------- 1 | #ifndef WALK_NOTE_COMMAND_H 2 | #define WALK_NOTE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "unknown/48528.h" 6 | 7 | void DO_WLKNOT_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /src/data/video_AA6DC.c: -------------------------------------------------------------------------------- 1 | #include "video.h" 2 | 3 | u32 *D_801CEEDC = (u32 *)0x800c0000; 4 | u32 *D_801CEEE0 = (u32 *)0x800cea60; 5 | u32 *D_801CEEE4 = (u32 *)0x800dd4c0; 6 | u32 *D_801CEEE8 = (u32 *)0x800ed4c0; -------------------------------------------------------------------------------- /include/obj/stonedog_command.h: -------------------------------------------------------------------------------- 1 | #ifndef STONEDOG_COMMAND_H 2 | #define STONEDOG_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "collision/block_6E5E0.h" 6 | 7 | void DO_STONEDOG_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/stoneman_command.h: -------------------------------------------------------------------------------- 1 | #ifndef STONEMAN_COMMAND_H 2 | #define STONEMAN_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "collision/block_6E5E0.h" 6 | 7 | void DO_STONEMAN_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/psyq_3_0_missing/LIBPRESS.H: -------------------------------------------------------------------------------- 1 | #ifndef _MISSING_LIBPRESS_H_ 2 | #define _MISSING_LIBPRESS_H_ 3 | 4 | extern int DecDCTinCallback(void (*func)()); 5 | extern int DecDCToutCallback(void (*func)()); 6 | 7 | #endif -------------------------------------------------------------------------------- /include/unknown/5C2BC.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_5C2BC_H 2 | #define UNK_5C2BC_H 3 | 4 | #include "common.h" 5 | #include "common/display.h" 6 | #include "LIBGPU.H" 7 | 8 | void PS1_ClearScreen(void); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/demo_B3F8.h: -------------------------------------------------------------------------------- 1 | #ifndef DEMO_B3F8_H 2 | #define DEMO_B3F8_H 3 | 4 | #include "common.h" 5 | #include "common/record.h" 6 | #include "input_ED20.h" 7 | 8 | void PS1_FinishRecordingDemo(void); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/badguy.h: -------------------------------------------------------------------------------- 1 | #ifndef BADGUY_H 2 | #define BADGUY_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void allocate_badguy(Obj *genbg_obj, s16 param_2, s16 spd_x, s16 spd_y); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/genebadguy_command.h: -------------------------------------------------------------------------------- 1 | #ifndef GENEBADGUY_COMMAND__H 2 | #define GENEBADGUY_COMMAND__H 3 | 4 | #include "common.h" 5 | #include "collision/block_6E5E0.h" 6 | 7 | void DO_TEN_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /src/data/menu/menu_AA8AC.c: -------------------------------------------------------------------------------- 1 | #include "menu/menu_6A3BC.h" 2 | 3 | s32 PS1_Button_Text_Square = 0x23; 4 | s32 PS1_Button_Text_Cross = 0x2A; 5 | s32 PS1_Button_Text_Triangle = 0x5E; 6 | s32 PS1_Button_Text_Circle = 0xF8; 7 | -------------------------------------------------------------------------------- /include/obj/blacktoon_eyes_command.h: -------------------------------------------------------------------------------- 1 | #ifndef BLACKTOON_EYES_COMMAND_H 2 | #define BLACKTOON_EYES_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "obj_init_kill.h" 6 | 7 | void DO_BLKTOON_EYES_CMD(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/petit_couteau_command.h: -------------------------------------------------------------------------------- 1 | #ifndef PETIT_COUTEAU_COMMAND_H 2 | #define PETIT_COUTEAU_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | 7 | void DO_PETIT_COUTEAU_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/tire_bouchon_command.h: -------------------------------------------------------------------------------- 1 | #ifndef TIRE_BOUCHON_COMMAND_H 2 | #define TIRE_BOUCHON_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "command_494FC.h" 6 | 7 | void DO_TIRE_BOUCHON_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/eyes_4BC40.h: -------------------------------------------------------------------------------- 1 | #ifndef EYES_4BC40_H 2 | #define EYES_4BC40_H 3 | 4 | #include "common.h" 5 | #include "collision/bit_util.h" 6 | #include "obj/eyes_3C3A8.h" 7 | 8 | void DO_ROLL_EYES(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/unknown/4BFCC.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_4BFCC_H 2 | #define UNK_4BFCC_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/mapdata.h" 7 | 8 | u8 FUN_801707cc(Obj *obj, s16 param_2); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/common/world_map.h: -------------------------------------------------------------------------------- 1 | #ifndef WORLD_MAP_H 2 | #define WORLD_MAP_H 3 | 4 | #include "common.h" 5 | 6 | /**/ 7 | extern s16 num_world; 8 | extern s16 num_level; 9 | extern s16 xmap; 10 | extern s16 ymap; 11 | 12 | #endif -------------------------------------------------------------------------------- /include/obj/herse.h: -------------------------------------------------------------------------------- 1 | #ifndef HERSE_H 2 | #define HERSE_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void allocateOtherPosts(Obj *her_bh_obj); 8 | void doHerseCommand(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/moving_platform_command.h: -------------------------------------------------------------------------------- 1 | #ifndef MOVING_PLATFORM_COMMAND_H 2 | #define MOVING_PLATFORM_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "unknown/48528.h" 6 | 7 | void DO_MOVING_PLATFORM_COMMAND(Obj *obj); 8 | 9 | #endif -------------------------------------------------------------------------------- /include/obj/mus_wait.h: -------------------------------------------------------------------------------- 1 | #ifndef MUS_WAIT_H 2 | #define MUS_WAIT_H 3 | 4 | #include "common.h" 5 | #include "obj/superhelico_init.h" 6 | 7 | /**/ 8 | extern s16 Mus_obj_id; 9 | 10 | void DO_MUSICIEN(Obj *obj); 11 | 12 | #endif -------------------------------------------------------------------------------- /include/obj/trompette.h: -------------------------------------------------------------------------------- 1 | #ifndef TROMPETTE_H 2 | #define TROMPETTE_H 3 | 4 | #include "common.h" 5 | #include "collision/etat.h" 6 | 7 | void trompetteWind(Obj *obj, u8 param_2); 8 | void DO_TRP_ATTAK(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /src/data/sound_AA7CC.c: -------------------------------------------------------------------------------- 1 | #include "sound.h" 2 | 3 | s16 D_801CEFCC = false; 4 | s16 D_801CEFCE = -2; 5 | u8 D_801CEFD0[] = { 50, 52, 54, 55, 57, 59, 61, 62 }; 6 | s16 D_801CEFD8 = 0; 7 | s16 PS1_CurrentAudio = 25; 8 | s16 D_801CEFDC = 0; -------------------------------------------------------------------------------- /src/data/unknown/9EDDC.c: -------------------------------------------------------------------------------- 1 | #include "common.h" 2 | 3 | u8 *D_801C35DC[] = 4 | { 5 | "VAC_CLOR.PCX", 6 | "VAC_SKOR.PCX", 7 | "VAC_MOSR.PCX", 8 | "VAC_MAR.PCX", 9 | "VAC_TOOR.PCX", 10 | "VAC_RAYR.PCX" 11 | }; -------------------------------------------------------------------------------- /include/obj/explosion.h: -------------------------------------------------------------------------------- 1 | #ifndef EXPLOSION_H 2 | #define EXPLOSION_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | Obj *allocateExplosion(Obj *unk_obj); 8 | void BombExplosion(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/spider_395B0.h: -------------------------------------------------------------------------------- 1 | #ifndef SPIDER_395B0_H 2 | #define SPIDER_395B0_H 3 | 4 | #include "common.h" 5 | #include "obj/spider_command.h" 6 | 7 | void allocateDard(Obj *spi_obj); 8 | void DO_SPIDER_TIR(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/wat_clown.h: -------------------------------------------------------------------------------- 1 | #ifndef WAT_CLOWN_H 2 | #define WAT_CLOWN_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void allocatedrop(Obj *watc_obj); 8 | void DO_WAT_CLOWN_ATTAK(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /src/data/obj/scorpion_9CA5C.c: -------------------------------------------------------------------------------- 1 | #include "obj/scorpion.h" 2 | 3 | u8 ecroule_rubis_order[] = 4 | { 5 | 2, 1, 3, 0, 4, 7, 6, 5, 1, 3, 6 | 2, 0, 4, 7, 6, 5, 4, 1, 3, 2, 7 | 0, 7, 6, 5 8 | }; -------------------------------------------------------------------------------- /include/obj/maracas.h: -------------------------------------------------------------------------------- 1 | #ifndef MARACAS_H 2 | #define MARACAS_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "command_56AF0.h" 8 | 9 | void MARACAS_GO(Obj *in_obj); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/ray/angle_rayman.h: -------------------------------------------------------------------------------- 1 | #ifndef ANGLE_RAYMAN_H 2 | #define ANGLE_RAYMAN_H 3 | 4 | #include "common.h" 5 | #include "common/ray.h" 6 | 7 | /* .data */ 8 | extern u8 angletab[66]; 9 | 10 | s16 ANGLE_RAYMAN(Obj *obj); 11 | 12 | #endif -------------------------------------------------------------------------------- /include/continue.h: -------------------------------------------------------------------------------- 1 | #ifndef CONTINUE_H 2 | #define CONTINUE_H 3 | 4 | #include "common.h" 5 | #include "fond_5BD8C.h" 6 | 7 | /**/ 8 | extern u8 fin_dark; 9 | 10 | s16 continue_fonction(void); 11 | void DO_CONTINUE(void); 12 | 13 | #endif -------------------------------------------------------------------------------- /include/obj/cage.h: -------------------------------------------------------------------------------- 1 | #ifndef CAGE_H 2 | #define CAGE_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "timers.h" 7 | #include "obj/cage_init.h" 8 | 9 | void DO_CAGE2(Obj *obj); 10 | void DO_CAGE(Obj *obj); 11 | 12 | #endif -------------------------------------------------------------------------------- /include/obj/cage_init.h: -------------------------------------------------------------------------------- 1 | #ifndef CAGE_INIT_H 2 | #define CAGE_INIT_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "world_map_677C0.h" 8 | 9 | void allocateGrille(Obj *obj); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/obj/cymbal2.h: -------------------------------------------------------------------------------- 1 | #ifndef CYMBAL2_H 2 | #define CYMBAL2_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "gendoor.h" 8 | 9 | void START_2_PARTS_CYMBAL_ACTION(Obj *obj); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/obj/pi_boum.h: -------------------------------------------------------------------------------- 1 | #ifndef PI_BOUM_H 2 | #define PI_BOUM_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void allocateEclatPS(Obj *in_obj, s16 param_2); 8 | void DO_PI_EXPLOSION(Obj *pi_obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/synchro_loop.h: -------------------------------------------------------------------------------- 1 | #ifndef SYNCHRO_LOOP_H 2 | #define SYNCHRO_LOOP_H 3 | 4 | #include "common.h" 5 | #include "LIBGPU.H" 6 | #include "main_moteur.h" 7 | 8 | void FUN_801802d8(void); 9 | void SYNCHRO_LOOP(s16 (*func)()); 10 | 11 | #endif -------------------------------------------------------------------------------- /src/demo_B3F8.c: -------------------------------------------------------------------------------- 1 | #include "demo_B3F8.h" 2 | 3 | /* B3F8 8012FBF8 */ 4 | void PS1_FinishRecordingDemo(void) 5 | { 6 | if (record.is_recording) 7 | { 8 | record.is_finished = true; 9 | PS1_DoDemo(&record); 10 | } 11 | } -------------------------------------------------------------------------------- /include/obj/maracas_command.h: -------------------------------------------------------------------------------- 1 | #ifndef MARACAS_COMMAND_H 2 | #define MARACAS_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "unknown/48528.h" 6 | 7 | s16 MarCoince(Obj *obj, s16 dir); 8 | void DO_MOVE_MARACAS_COMMAND(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/special_platform.h: -------------------------------------------------------------------------------- 1 | #ifndef SPECIAL_PLATFORM_H 2 | #define SPECIAL_PLATFORM_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "collision/block_22C84.h" 7 | 8 | void DO_SPECIAL_PLATFORM(Obj *plat_obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/eyes_3C3A8.h: -------------------------------------------------------------------------------- 1 | #ifndef EYES_3C3A8_H 2 | #define EYES_3C3A8_H 3 | 4 | #include "common.h" 5 | #include "sound.h" 6 | 7 | /* .data */ 8 | extern u8 N_anim[256]; 9 | 10 | void DO_REDEYE_FIRE(s16 x_pos, s16 y_pos, s16 param_3); 11 | 12 | #endif -------------------------------------------------------------------------------- /include/obj/hybride_mosams_command.h: -------------------------------------------------------------------------------- 1 | #ifndef HYBRIDE_MOSAMS_COMMAND_H 2 | #define HYBRIDE_MOSAMS_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "boss.h" 6 | #include "collision/block_22C84.h" 7 | 8 | void doMOSAMScommand(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /src/data/obj/mama_pirate.c: -------------------------------------------------------------------------------- 1 | #include "obj/mama_pirate.h" 2 | 3 | u8 pma_couteaux[] = {3, 5, 5, 3, 3, 4}; 4 | u8 pma_sequence[4][2] = 5 | { 6 | {0, 3}, 7 | {5, 0}, 8 | {5, 1}, 9 | {4, 2} 10 | }; 11 | u8 place_sequence[] = {3, 4, 2, 3, 2}; -------------------------------------------------------------------------------- /src/obj/tire_bouchon_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/tire_bouchon_command.h" 2 | 3 | /* 50C00 80175400 -O2 -msoft-float */ 4 | void DO_TIRE_BOUCHON_COMMAND(Obj *obj) 5 | { 6 | DO_ONE_CMD(obj); 7 | obj->speed_x = 0; 8 | obj->speed_y = 0; 9 | } 10 | -------------------------------------------------------------------------------- /include/nova.h: -------------------------------------------------------------------------------- 1 | #ifndef NOVA_H 2 | #define NOVA_H 3 | 4 | #include "common.h" 5 | #include "collision/etat.h" 6 | 7 | Obj *allocateNOVA(void); 8 | void DO_NOVA(Obj *in_obj); 9 | void DO_NOVA2(Obj *in_obj); 10 | s32 NOVA_STATUS_BAR(void); 11 | 12 | #endif -------------------------------------------------------------------------------- /include/obj/caisse_claire_command.h: -------------------------------------------------------------------------------- 1 | #ifndef CAISSE_CLAIRE_COMMAND_H 2 | #define CAISSE_CLAIRE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "collision/block_6E5E0.h" 7 | 8 | void DO_CCL_COMMAND(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/eau.h: -------------------------------------------------------------------------------- 1 | #ifndef EAU_H 2 | #define EAU_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | /**/ 8 | extern s16 eau_obj_id; 9 | 10 | void ACTIVE_L_EAU(Obj *eau_obj); 11 | void DO_EAU_QUI_MONTE(Obj *obj); 12 | 13 | #endif -------------------------------------------------------------------------------- /include/obj/stonebomb_command.h: -------------------------------------------------------------------------------- 1 | #ifndef STONEBOMB_COMMAND_H 2 | #define STONEBOMB_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "obj_init_kill.h" 6 | 7 | void DO_ONE_STONECHIP_COMMAND(Obj *obj); 8 | void DO_STONEBOMB_COMMAND(Obj *obj); 9 | 10 | #endif -------------------------------------------------------------------------------- /include/obj/poi_command.h: -------------------------------------------------------------------------------- 1 | #ifndef POI_COMMAND_H 2 | #define POI_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "timers.h" 7 | 8 | void DO_POISSON_VERT_CMD(Obj *obj); 9 | void DO_POISSON_BLEU_CMD(Obj *param_1); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/unknown/AACC.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_AACC_H 2 | #define UNK_AACC_H 3 | 4 | #include "common.h" 5 | #include "save.h" 6 | 7 | void FUN_8012f2cc(void); 8 | void PouvoirsParMap(void); 9 | void PS1_ResetSaveZone(void); 10 | void FUN_8012f570(void); 11 | 12 | #endif -------------------------------------------------------------------------------- /include/obj/superhelico_init.h: -------------------------------------------------------------------------------- 1 | #ifndef SUPERHELICO_INIT_H 2 | #define SUPERHELICO_INIT_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "world_map_677C0.h" 8 | 9 | void allocateSupHelico(Obj *mus_obj); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/demo_7F2BC.h: -------------------------------------------------------------------------------- 1 | #ifndef DEMO_7F2BC_H 2 | #define DEMO_7F2BC_H 3 | 4 | #include "common.h" 5 | #include "demo_9FD4.h" 6 | 7 | /**/ 8 | extern s32 TempsDemo; 9 | 10 | void PS1_ShowDemoText(void); 11 | s16 PS1_DemoLoop(void); 12 | void PS1_PlayDemo(void); 13 | 14 | #endif -------------------------------------------------------------------------------- /src/unknown/5C2BC.c: -------------------------------------------------------------------------------- 1 | #include "unknown/5C2BC.h" 2 | 3 | /* 5C2BC 80180ABC -O2 -msoft-float */ 4 | void PS1_ClearScreen(void) 5 | { 6 | ClearImage(&PS1_Displays[0].drawing_environment.clip, 0, 0, 0); 7 | ClearImage(&PS1_Displays[1].drawing_environment.clip, 0, 0, 0); 8 | } 9 | -------------------------------------------------------------------------------- /include/common/level.h: -------------------------------------------------------------------------------- 1 | #ifndef LEVEL_H 2 | #define LEVEL_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | 7 | typedef struct LevelData 8 | { 9 | Obj *objects; 10 | u8 nb_objects; 11 | } LevelData; 12 | 13 | /**/ 14 | extern LevelData level; 15 | 16 | #endif -------------------------------------------------------------------------------- /include/obj/mst_scroll.h: -------------------------------------------------------------------------------- 1 | #ifndef MST_SCROLL_H 2 | #define MST_SCROLL_H 3 | 4 | #include "common.h" 5 | #include "cam_scroll_29B5C.h" 6 | 7 | /**/ 8 | extern s16 mst_scroll_obj_id; 9 | 10 | void DO_MST_SCROLL_COMMAND(Obj *obj); 11 | void DO_MST_CHANGE_COMMAND(s16 hp); 12 | 13 | #endif -------------------------------------------------------------------------------- /include/obj/stonewoman.h: -------------------------------------------------------------------------------- 1 | #ifndef STONEWOMAN_H 2 | #define STONEWOMAN_H 3 | 4 | #include "common.h" 5 | #include "collision/block_6E5E0.h" 6 | 7 | u8 IS_STONEWOMAN_WAIT(Obj *obj); 8 | void DO_STONEWOMAN_COMMAND(Obj *obj); 9 | void DO_NOMOVE_STONEWOMAN_COMMAND(Obj *obj); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/psyq_3_0_missing/LIBETC.H: -------------------------------------------------------------------------------- 1 | #ifndef _MISSING_LIBETC_H_ 2 | #define _MISSING_LIBETC_H_ 3 | 4 | void PadInit(int mode); 5 | int ResetCallback(void) ; 6 | int StopCallback(void) ; 7 | int VSync(int mode); 8 | int VSyncCallback(void (*f)(void)) ; 9 | void PadStop(void); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/unknown/3ED10.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_3ED10_H 2 | #define UNK_3ED10_H 3 | 4 | #include "common.h" 5 | #include "common/level.h" 6 | #include "obj/eau.h" 7 | 8 | /* .data */ 9 | extern s16 EauDy[14]; 10 | 11 | /* .data */ 12 | extern s16 DecEau[4]; 13 | 14 | s16 GetY(s16 x); 15 | 16 | #endif -------------------------------------------------------------------------------- /include/obj/graine.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAINE_H 2 | #define GRAINE_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | /* .data */ 8 | extern s32 D_801CF408; 9 | 10 | void DO_TARZAN(Obj *tz_obj); 11 | Obj *oldest_planted(void); 12 | void DO_GROWING_PLATFORM(void); 13 | 14 | #endif -------------------------------------------------------------------------------- /src/data/draw/draw_AAC18.c: -------------------------------------------------------------------------------- 1 | #include "draw/draw_548CC.h" 2 | 3 | s16 D_801CF418 = 0; 4 | u8 data_draw_801CF41A[4] = {}; 5 | s16 D_801CF420 = 0; 6 | u8 data_draw_801CF422[4] = {}; 7 | s16 D_801CF428 = 0; 8 | u8 data_draw_801CF42A[4] = {}; 9 | s16 D_801CF430 = 0; 10 | u8 data_draw_801CF432[4] = {}; -------------------------------------------------------------------------------- /src/data/loading_AA8C8.c: -------------------------------------------------------------------------------- 1 | #include "loading_794DC.h" 2 | 3 | u8 D_801CF0C8[2] = {}; 4 | 5 | /* both of these are missing from linker map??? */ 6 | u8 D_801CF0CA = 0; 7 | u8 PS1_HasLoadedFont = false; 8 | 9 | u8 D_801CF0CC = 0; 10 | u8 D_801CF0CD = false; 11 | u8 s_filefxs_801cf0d0[] = "filefxs"; -------------------------------------------------------------------------------- /include/obj/pirate_poelle.h: -------------------------------------------------------------------------------- 1 | #ifndef PIRATE_POELLE_H 2 | #define PIRATE_POELLE_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void DO_PIRATE_POELLE(Obj *pirp_obj); 8 | void DO_PIRATE_POELLE_POING_COLLISION(Obj *obj); 9 | void PIRATE_POELLE_REACT(Obj *obj); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/vram.h: -------------------------------------------------------------------------------- 1 | #ifndef VRAM_H 2 | #define VRAM_H 3 | 4 | #include "common.h" 5 | #include "LIBGPU.H" 6 | 7 | s32 PS1_LoadToVRAM(s16 width, s16 height, s16 x, s16 y, u8 *data); 8 | void PS1_LoadVRAMBlock(s16 start_page, s16 start_pos, s16 end_page, s16 end_pos, s16 unused, u8 *data); 9 | 10 | #endif -------------------------------------------------------------------------------- /src/data/cam_scroll_AA5FC.c: -------------------------------------------------------------------------------- 1 | #include "cam_scroll_29B5C.h" 2 | 3 | /* this might work correctly once every function that uses them is added? */ 4 | u8 D_801CEDFC = 0; 5 | u8 data_cam_scroll_AA5FC[2] = {}; /* TODO: name this by 80... address instead */ 6 | s16 dhspeed = 0; 7 | s16 dvspeed = 0; 8 | u8 joy_done = 0; -------------------------------------------------------------------------------- /include/obj/clown_tnt_command.h: -------------------------------------------------------------------------------- 1 | #ifndef CLOWN_TNT_COMMAND_H 2 | #define CLOWN_TNT_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void DO_CLOWN_TNT_COMMAND(Obj *obj); 8 | void DO_CLOWN_TNT2_COMMAND(Obj *obj); 9 | void DO_CLOWN_TNT3_COMMAND(Obj *obj); 10 | 11 | #endif -------------------------------------------------------------------------------- /include/obj/joe_command.h: -------------------------------------------------------------------------------- 1 | #ifndef JOE_COMMAND_H 2 | #define JOE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "num_level_3D738.h" 6 | 7 | /**/ 8 | extern s16 joe_exp_probleme; 9 | extern s16 prise_branchee; 10 | extern s16 vignet_joe_affichee; 11 | 12 | void DO_JOE_COMMAND(Obj *obj); 13 | 14 | #endif -------------------------------------------------------------------------------- /src/data/menu/menu_9EDBC.c: -------------------------------------------------------------------------------- 1 | #include "menu/menu_7F4B4.h" 2 | 3 | u8 *PS1_SettingStrings[] = 4 | { 5 | s_jump_801cee44, 6 | s_fist_801cee3c, 7 | s_action_801cee34, 8 | s_music_801cee2c, 9 | "sound fx", 10 | s_stereo_801cee24, 11 | s_mono_801cee1c, 12 | s_exit_801cee14 13 | }; -------------------------------------------------------------------------------- /src/obj/reducteur.c: -------------------------------------------------------------------------------- 1 | #include "obj/reducteur.h" 2 | 3 | /* 4DF88 80172788 -O2 -msoft-float */ 4 | void DO_REDUCTEUR(Obj *obj) 5 | { 6 | if ( 7 | obj->hit_points < obj->init_hit_points && 8 | --obj->hit_points == 0 9 | ) 10 | obj->hit_points = obj->init_hit_points; 11 | } 12 | -------------------------------------------------------------------------------- /include/obj/fire.h: -------------------------------------------------------------------------------- 1 | #ifndef FIRE_H 2 | #define FIRE_H 3 | 4 | #include "common.h" 5 | #include "boss.h" 6 | 7 | /**/ 8 | extern s16 flamme_droite_id; 9 | extern s16 flamme_gauche_id; 10 | extern u8 flammes_actives; 11 | 12 | void DoFlammeCommand(Obj *obj); 13 | void AllocateFlammes(s16 param_1); 14 | 15 | #endif -------------------------------------------------------------------------------- /include/obj/hybride_stosko.h: -------------------------------------------------------------------------------- 1 | #ifndef HYBRIDE_STOSKO_H 2 | #define HYBRIDE_STOSKO_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "collision/block_22C84.h" 8 | 9 | void allocateStoskoClaw(Obj *stsk_obj); 10 | void doSTOSKOcommand(Obj *stsk_obj); 11 | 12 | #endif -------------------------------------------------------------------------------- /src/data/draw/rollup_trans_AA5E4.c: -------------------------------------------------------------------------------- 1 | #include "draw/rollup_trans.h" 2 | 3 | DVECTOR D_801CEDE4 = { .vx = 704, .vy = 0 }; 4 | DVECTOR D_801CEDE8 = { .vx = SCREEN_WIDTH, .vy = SCREEN_HEIGHT }; 5 | DVECTOR D_801CEDEC[2] = 6 | { 7 | { .vx = 704, .vy = 0 }, 8 | { .vx = SCREEN_WIDTH, .vy = SCREEN_HEIGHT } 9 | }; 10 | -------------------------------------------------------------------------------- /include/common/fileinfo.h: -------------------------------------------------------------------------------- 1 | #ifndef FILEINFO_H 2 | #define FILEINFO_H 3 | 4 | #include "common.h" 5 | #include "LIBCD.H" 6 | 7 | typedef struct FileInfo 8 | { 9 | u8 *path; 10 | u8 *dest; /* u32 * based on PS1_LoadFiles/CdRead? */ 11 | u8 *dest_debug; 12 | CdlFILE file; 13 | } FileInfo; 14 | 15 | #endif -------------------------------------------------------------------------------- /include/obj/corde.h: -------------------------------------------------------------------------------- 1 | #ifndef CORDE_H 2 | #define CORDE_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "world_map_677C0.h" 8 | 9 | /**/ 10 | extern s16 pierreAcorde_obj_id; 11 | 12 | void DO_CORDE_CASSE(Obj *obj); 13 | void DO_FUMEE_CORDE(s16 x, s16 y); 14 | 15 | #endif -------------------------------------------------------------------------------- /include/obj/mite_badguy.h: -------------------------------------------------------------------------------- 1 | #ifndef MITE_BADGUY_H 2 | #define MITE_BADGUY_H 3 | 4 | #include "common.h" 5 | #include "collision/etat.h" 6 | 7 | void calc_esquive_poing(Obj *mit_obj, s16 *out_diff_x, s16 *out_diff_y, s16 *out_unk); 8 | void DO_PTI_ESQUIVE(Obj *bg3_obj); 9 | void DO_MITE2_ESQUIVE(Obj *mit2_obj); 10 | 11 | #endif -------------------------------------------------------------------------------- /src/obj/petit_couteau_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/petit_couteau_command.h" 2 | 3 | /* 50C2C 8017542C -O2 -msoft-float */ 4 | void DO_PETIT_COUTEAU_COMMAND(Obj *obj) 5 | { 6 | if (obj->hit_points < 3) 7 | obj->anim_frame = obj->hit_points - 1; 8 | else 9 | obj->anim_frame = obj->hit_points - 3; 10 | } 11 | -------------------------------------------------------------------------------- /include/obj/bateau_command.h: -------------------------------------------------------------------------------- 1 | #ifndef BATEAU_COMMAND_H 2 | #define BATEAU_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "obj_update.h" 6 | #include "obj/mama_pirate.h" /* TODO: circular? */ 7 | #include "obj/pirate_ngawe.h" 8 | 9 | /**/ 10 | extern s16 bateau_obj_id; 11 | 12 | void doShipCommand(Obj *obj); 13 | 14 | #endif -------------------------------------------------------------------------------- /src/data/collision/collision_9E79C.c: -------------------------------------------------------------------------------- 1 | #include "collision/collision.h" 2 | 3 | s16 bagD[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -60, -26, 8, 32, 75, 32, 8, -26, -60, -1 }; 4 | s16 bagW[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 48, 48, 48, 48, 48, 32, 32, 0 }; 5 | s16 bagH[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 48, 48, 60, 48, 48, 32, 32, 0 }; -------------------------------------------------------------------------------- /include/obj/falling_obj_command.h: -------------------------------------------------------------------------------- 1 | #ifndef FALLING_OBJ_COMMAND_H 2 | #define FALLING_OBJ_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/ray.h" 7 | #include "common/mapdata.h" 8 | #include "collision/collision.h" 9 | 10 | void move_fruit_in_water(Obj *obj); 11 | void DO_FALLING_OBJ_CMD(Obj *obj); 12 | 13 | #endif -------------------------------------------------------------------------------- /include/obj/fee_3D76C.h: -------------------------------------------------------------------------------- 1 | #ifndef FEE_3D76C_H 2 | #define FEE_3D76C_H 3 | 4 | #include "common.h" 5 | #include "common/text_to_display.h" 6 | #include "obj/fee_4DFD0.h" 7 | 8 | /**/ 9 | extern u8 is_fee; 10 | 11 | void INIT_TXT_FEE(void); 12 | void allocate_poing_or_fee(void); 13 | void init_moustique(void); 14 | void init_fee(void); 15 | 16 | #endif -------------------------------------------------------------------------------- /include/unknown/A3B0.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_A3B0_H 2 | #define UNK_A3B0_H 3 | 4 | #include "common.h" 5 | #include "draw/draw_hud.h" 6 | 7 | s16 loader_anim_prg(void); 8 | void DO_GROS_RAYMAN(void); 9 | void FUN_8012ece8(void); 10 | void FUN_8012ecf0(void); 11 | void DO_AFFICHE_PAUSE(void); 12 | s32 FUN_8012eda4(s16 param_1, s16 param_2); 13 | 14 | #endif -------------------------------------------------------------------------------- /src/data/draw/fond_AA744.c: -------------------------------------------------------------------------------- 1 | #include "draw/fond_10B3C.h" 2 | 3 | u8 PS1_Glass_brightness[5] = {}; 4 | u8 PS1_Glass_brightness_diff[] = { 5, 5, 5, 5, 5 }; 5 | u8 D_801CEF51 = 60; 6 | u8 D_801CEF54[] = { 100, 100, 100, 100, 100, 100, 100, 100 }; 7 | u8 D_801CEF5C[] = { 100, 100, 100, 100, 100, 100, 100, 100 }; 8 | u8 D_801CEF64[8] = {}; 9 | u8 D_801CEF6C[8] = {}; -------------------------------------------------------------------------------- /src/obj/bb1_plat_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/bb1_plat_command.h" 2 | 3 | /* 4D1C8 801719C8 -O2 -msoft-float */ 4 | void DO_BB1_PLAT_CMD(Obj *obj) 5 | { 6 | switch (obj->cmd) 7 | { 8 | case GO_UP: 9 | obj->speed_y = -1; 10 | break; 11 | case GO_WAIT: 12 | obj->speed_y = 0; 13 | break; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /include/vignet.h: -------------------------------------------------------------------------------- 1 | #ifndef VIGNET_H 2 | #define VIGNET_H 3 | 4 | #include "common.h" 5 | #include "draw/text_18118.h" 6 | 7 | /**/ 8 | extern s16 loop_nb_trames; 9 | extern u8 Vignet_To_Display; /* sir, are you a boolean? */ 10 | 11 | void DISPLAY_TXT_VIGNET(void); 12 | s16 display_vignet_prg(void); 13 | void DISPLAY_GAME_VIGNET(void); 14 | 15 | #endif -------------------------------------------------------------------------------- /include/bonus_372E0.h: -------------------------------------------------------------------------------- 1 | #ifndef BONUS_372E0_H 2 | #define BONUS_372E0_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/ray.h" 7 | #include "world_map_95CC.h" 8 | #include "ray/ray_30A64.h" 9 | #include "timers.h" 10 | 11 | void DO_WIZARD(Obj *obj); 12 | s16 get_next_bonus_level(u8 lvl); 13 | void TEST_WIZARD(Obj *obj); 14 | 15 | #endif -------------------------------------------------------------------------------- /include/obj/blacktoon1.h: -------------------------------------------------------------------------------- 1 | #ifndef BLACKTOON1_H 2 | #define BLACKTOON1_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | void allocateBlacktoonEyes(Obj *bt1_obj); 8 | void DO_BLK_SPEED_COMMAND(Obj *obj); 9 | void DO_BLK_LR_COMMAND(Obj *obj); 10 | void DO_BLK_NOP_COMMAND(Obj *obj); 11 | void DO_BLKTOON_COMMAND(Obj *obj); 12 | 13 | #endif -------------------------------------------------------------------------------- /include/depart_dead.h: -------------------------------------------------------------------------------- 1 | #ifndef DEPART_DEAD_H 2 | #define DEPART_DEAD_H 3 | 4 | #include "common.h" 5 | #include "world_map_95CC.h" 6 | #include "first_init.h" 7 | 8 | /* .data */ 9 | extern u8 PS1_ShouldFadeOutWorldIntro; 10 | 11 | void DEPART_WORLD(void); 12 | void DEPART_LEVEL(void); 13 | void DEPART_DEAD_LOOP(void); 14 | void FIN_DEAD_LOOP(void); 15 | 16 | #endif -------------------------------------------------------------------------------- /src/data/draw/text_9ED80.c: -------------------------------------------------------------------------------- 1 | #include "draw/text_18118.h" 2 | 3 | u8 D_801C3580[] = { 10, 11, 12, 13, 12, 11 }; 4 | u8 D_801C3588[] = { 6, 7, 8, 9, 8, 7 }; 5 | u8 D_801C3590[] = { 0, 1, 2, 3, 2, 1 }; 6 | u8 D_801C3598[] = { 13, 14, 15, 1, 15, 14 }; 7 | u8 D_801C35A0[] = { 6, 7, 8, 9, 10, 11, 10, 9, 8, 7 }; 8 | u8 D_801C35AC[] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1, 2, 4, 5 }; -------------------------------------------------------------------------------- /include/common/mapdata.h: -------------------------------------------------------------------------------- 1 | #ifndef MAPDATA_H 2 | #define MAPDATA_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | 7 | typedef struct MapData 8 | { 9 | s16 width; 10 | s16 height; 11 | s32 length; 12 | u16 *map; 13 | } MapData; 14 | 15 | /* .data */ 16 | extern BlockFlags block_flags[32]; 17 | 18 | /**/ 19 | extern MapData mp; 20 | 21 | #endif -------------------------------------------------------------------------------- /include/obj/corde_command.h: -------------------------------------------------------------------------------- 1 | #ifndef CORDE_COMMAND_H 2 | #define CORDE_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/ray.h" 7 | #include "common/level.h" 8 | #include "timers.h" 9 | #include "obj/corde.h" 10 | 11 | void DO_CORDE_COMMAND(Obj *obj); 12 | void DO_PAC_COMMAND(Obj *obj); 13 | void DO_CFUMEE_COMMAND(Obj *obj); 14 | 15 | #endif -------------------------------------------------------------------------------- /include/psyq_3_0_missing/RAND.H: -------------------------------------------------------------------------------- 1 | #ifndef _MISSING_RAND_H 2 | #define _MISSING_RAND_H 3 | 4 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 5 | extern "C" { 6 | #endif 7 | extern int rand(void); 8 | extern void srand(unsigned int); 9 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 10 | } 11 | #endif 12 | 13 | #endif -------------------------------------------------------------------------------- /include/main.h: -------------------------------------------------------------------------------- 1 | #ifndef MAIN_H 2 | #define MAIN_H 3 | 4 | #include "common.h" 5 | #include "common/rayevts.h" 6 | #include "common/record.h" 7 | #include "common/fin_du_jeu.h" 8 | #include "psyq_3_0_missing/LIBETC.H" 9 | #include "psyq_3_0_missing/LIBAPI.H" 10 | #include "sound.h" 11 | #include "depart_dead.h" 12 | #include "unknown/2539C.h" 13 | 14 | void main(void); 15 | 16 | #endif -------------------------------------------------------------------------------- /src/data/card_AA81C.c: -------------------------------------------------------------------------------- 1 | #include "card.h" 2 | 3 | s32 D_801CF01C = 34; 4 | s32 D_801CF020 = 34; 5 | u8 s_Error_801cf024[] = "Error\n"; 6 | u8 s__801cf02c[] = "*"; 7 | u8 s_no_card_801cf030[] = "no card"; 8 | u8 s_error_801cf038[] = "error"; 9 | u8 s_bu02x_801cf040[] = "bu%02x:"; 10 | u8 s__Done_801cf048[] = "\nDone\n"; 11 | u8 s_Maga_801cf050[] = "Maga"; 12 | u8 s_ss_801cf058[] = "%s%s"; -------------------------------------------------------------------------------- /include/obj/cymbal.h: -------------------------------------------------------------------------------- 1 | #ifndef CYMBAL_H 2 | #define CYMBAL_H 3 | 4 | #include "common.h" 5 | #include "unknown/48528.h" 6 | 7 | /* 8 | code for: 9 | TYPE_CYMBALE 10 | TYPE_CYMBAL1 11 | TYPE_CYMBAL2 12 | */ 13 | 14 | /**/ 15 | extern s16 cymbal_obj_id[12]; 16 | extern u8 nb_cymbal_in_map; 17 | 18 | void DO_CYMBAL_COMMAND(Obj *obj); 19 | void DO_2_PARTS_CYMBAL(Obj *arg0); 20 | 21 | #endif -------------------------------------------------------------------------------- /src/data/menu/menu_AA614.c: -------------------------------------------------------------------------------- 1 | #include "menu/menu_7F4B4.h" 2 | 3 | u8 s_exit_801cee14[] = "/exit/"; 4 | u8 s_mono_801cee1c[] = "mono"; 5 | u8 s_stereo_801cee24[] = "stereo"; 6 | u8 s_music_801cee2c[] = "music"; 7 | u8 s_action_801cee34[] = "action"; 8 | u8 s_fist_801cee3c[] = "fist"; 9 | u8 s_jump_801cee44[] = "jump"; 10 | u8 s_rayman_801cee4c[] = "rayman"; 11 | u8 s_with_801cee54[] = "/with/"; -------------------------------------------------------------------------------- /include/common/record.h: -------------------------------------------------------------------------------- 1 | #ifndef RECORD_H 2 | #define RECORD_H 3 | 4 | #include "common.h" 5 | 6 | typedef struct Record 7 | { 8 | u32 current_offset; 9 | s32 repeat_length; 10 | s32 repeat_index; 11 | u32 length; 12 | u8 *data; 13 | u8 is_recording; 14 | u8 is_playing; 15 | u8 is_finished; 16 | } Record; 17 | 18 | /**/ 19 | extern Record record; 20 | 21 | #endif -------------------------------------------------------------------------------- /include/obj/ufo_idc.h: -------------------------------------------------------------------------------- 1 | #ifndef UFO_IDC_H 2 | #define UFO_IDC_H 3 | 4 | #include "common.h" 5 | #include "obj_init_kill.h" 6 | 7 | s16 test_block_chdir(Obj *obj, s16 *out_unk, s16 off_x, s16 off_y); 8 | void DO_MOVING_WITH_INDICATOR_COMMAND(Obj *ufo_idc_obj); 9 | void DO_IDC_COMMAND(Obj *idc_obj); 10 | void DO_LEV_POING_COLLISION(Obj *lev_obj); 11 | void START_UFO(Obj *ufo_idc_obj); 12 | 13 | #endif -------------------------------------------------------------------------------- /diff_settings.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | def apply(config, args): 4 | basename = "slus-000.05" 5 | 6 | config["arch"] = "mipsel" 7 | config["baseimg"] = f"SLUS-000.05" 8 | config["myimg"] = f"build/{basename}" 9 | config["mapfile"] = f"build/{basename}.map" 10 | config["source_directories"] = ["src", "src/obj", "include"] 11 | config["make_command"] = ["make", "-f", "mk-splat.mk"] 12 | -------------------------------------------------------------------------------- /src/data/obj/dark_A3C88.c: -------------------------------------------------------------------------------- 1 | #include "obj/dark_729F0.h" 2 | 3 | s16 oscille[] = 4 | { 5 | 0, 4, 7, 9, 10, 9, 7, 4, 0, 6 | -2, -4, -5, -6, -5, -4, -2, 7 | 0, 1, 2, 3, 2, 1, 0, 8 | -1, -2, -1, 9 | 0, 1, 0, 10 | 0 11 | }; 12 | 13 | u8 vitrail_clignotement[4][5] = 14 | { 15 | { 0, 0, 2, 0, 2 }, 16 | { 2, 0, 0, 2, 0 }, 17 | { 2, 2, 0, 0, 0 }, 18 | { 0, 0, 0, 0, 0 } 19 | }; -------------------------------------------------------------------------------- /src/obj/photographe_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/photographe_command.h" 2 | 3 | /* 4DF04 80172704 -O2 -msoft-float */ 4 | void DO_PHOTOGRAPHE_CMD(Obj *obj) 5 | { 6 | u8 anim_spd; 7 | 8 | DO_ONE_CMD(obj); 9 | anim_spd = (obj->eta[obj->main_etat][obj->sub_etat].anim_speed & 0xf); 10 | 11 | if (obj->anim_index == 4 && obj->anim_frame == 10 && horloge[anim_spd] == 0) 12 | PlaySnd(40, obj->id); 13 | } 14 | -------------------------------------------------------------------------------- /include/command_494FC.h: -------------------------------------------------------------------------------- 1 | #ifndef COMMAND_494FC_H 2 | #define COMMAND_494FC_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "obj/stonebomb.h" 7 | #include "obj/big_clown.h" 8 | #include "obj/wat_clown.h" 9 | 10 | void DO_ONE_CMD_WAIT(Obj *obj); 11 | void DO_ONE_CMD_LR_ATTENTE(Obj *obj); 12 | void DO_ONE_CMD_UPDOWN(Obj *obj); 13 | void special_pour_liv(Obj *obj); 14 | void DO_ONE_CMD(Obj *obj); 15 | 16 | #endif -------------------------------------------------------------------------------- /include/menu/menu_7EEE4.h: -------------------------------------------------------------------------------- 1 | #ifndef MENU_7EEE4_H 2 | #define MENU_7EEE4_H 3 | 4 | #include "common.h" 5 | #include "menu/menu_7F4B4.h" 6 | 7 | /**/ 8 | extern u8 menuEtape; /* TODO: add enum/defines */ 9 | extern u8 MENU_RETURN; 10 | extern u8 PS1_MENU_RETURN2; 11 | extern u8 PROC_EXIT; 12 | extern u8 D_801E5920; 13 | extern u8 PS1_CardShouldCheckFirstBoot; /* near card stuff instead? */ 14 | 15 | void DO_MENU(void); 16 | 17 | #endif -------------------------------------------------------------------------------- /include/cam_scroll_340A4.h: -------------------------------------------------------------------------------- 1 | #ifndef CAM_SCROLL_340A4_H 2 | #define CAM_SCROLL_340A4_H 3 | 4 | #include "common.h" 5 | #include "common/ray.h" 6 | #include "common/level.h" 7 | #include "cam_scroll_29B5C.h" 8 | #include "obj/eau.h" 9 | #include "timers.h" 10 | 11 | /**/ 12 | extern s16 NumScrollObj; 13 | extern s16 scroll_obj_id[100]; 14 | extern s16 scroll_x; 15 | extern s16 scroll_y; 16 | 17 | void DO_AUTO_SCROLL(void); 18 | 19 | #endif -------------------------------------------------------------------------------- /include/luciole.h: -------------------------------------------------------------------------------- 1 | #ifndef LUCIOLE_H 2 | #define LUCIOLE_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | /**/ 8 | extern s16 x_luc; 9 | extern s16 y_luc; 10 | extern s16 n_ray; 11 | extern s16 vx_luc; 12 | extern s16 vy_luc; 13 | extern s16 x_main_luc; 14 | extern s16 y_main_luc; 15 | extern s16 x_ray[4]; 16 | extern s16 y_ray[4]; 17 | 18 | void INIT_LUCIOLE(void); 19 | void DO_LUCIOLE(void); 20 | 21 | #endif -------------------------------------------------------------------------------- /src/obj/dark_phase2_str.c: -------------------------------------------------------------------------------- 1 | #include "obj/dark_phase2.h" 2 | 3 | /* 4 | "/you're doomed rayman ." jtbl starts at 8012c1fc 5 | jtbl SHOULD start at 8012c200 6 | "/you're doomed rayman .." jtbl starts at 8012c204 7 | 8 | tried different versions of: 9 | __attribute__ ((aligned ())) 10 | __attribute__ ((packed)) 11 | 12 | tried using it in place instead of as var 13 | */ 14 | const u8 s_youre_doomed_rayman__8012c1e4[] = "/you're doomed rayman .../"; -------------------------------------------------------------------------------- /include/obj/dark2_pink_fly.h: -------------------------------------------------------------------------------- 1 | #ifndef DARK2_PINK_FLY_H 2 | #define DARK2_PINK_FLY_H 3 | 4 | #include "common.h" 5 | #include "collision/bit_util.h" 6 | 7 | /**/ 8 | extern s16 PosArXToon1; 9 | extern s16 PosArXToon2; 10 | extern s16 PosArYToon1; 11 | extern s16 PosArYToon2; 12 | extern u8 ToonJustGivePoing; 13 | 14 | void AllocateToons(void); 15 | void DO_DARK2_TOONS_COMMAND(Obj *d2fly_obj); 16 | void ToonDonnePoing(Obj *d2fly_obj); 17 | 18 | #endif -------------------------------------------------------------------------------- /include/obj/mite.h: -------------------------------------------------------------------------------- 1 | #ifndef MITE_H 2 | #define MITE_H 3 | 4 | #include "common.h" 5 | #include "obj/mite_badguy.h" 6 | 7 | void mite_esquive_poing(Obj *mit_obj, s16 *out_diff_x); 8 | u8 HAS_MIT_JUMP(Obj *obj); 9 | u8 ray_over_mit(Obj *obj, s16 param_2); 10 | void fix_mit_Xspeed(Obj *obj, s16 param_2); 11 | void DO_MIT_ATTAK(Obj *obj); 12 | u8 IS_MIT_PAF(Obj *obj); 13 | void DO_MIT_COMMAND(Obj *obj); 14 | void DO_MITE2_COMMAND(Obj *obj); 15 | 16 | #endif -------------------------------------------------------------------------------- /include/unknown/48528.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_48528_H 2 | #define UNK_48528_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "input_ED20.h" 7 | 8 | /* .data */ 9 | extern s16 PS1_VRAMDisplayXPos; 10 | extern s16 PS1_VRAMDisplayYPos; 11 | 12 | void PS1_DisplayVRAM(void); 13 | s16 test_allowed(Obj *obj, s16 unk_x, s16 unk_y); 14 | void obj_jump(Obj *obj); 15 | void DO_ONE_PINK_CMD(Obj *obj); 16 | void FUN_8016d418(Obj *obj); 17 | 18 | #endif -------------------------------------------------------------------------------- /include/unknown/7BB28.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_7BB28_H 2 | #define UNK_7BB28_H 3 | 4 | #include "common.h" 5 | #include "common/display.h" 6 | #include "sound.h" 7 | 8 | /* .data */ 9 | extern u8 s_d_801cf0f0[3]; 10 | 11 | void PS1_StopLevelMusic(void); 12 | void PS1_InitDisplay(Display *display); 13 | void FUN_801a0750(void); 14 | void PS1_itoa(s16 param_1, u8 *param_2, u8 param_3); 15 | void FUN_801a07b0(void); 16 | void PS1_PlayMapIntro(void); 17 | 18 | #endif -------------------------------------------------------------------------------- /include/timers.h: -------------------------------------------------------------------------------- 1 | #ifndef TIMERS_H 2 | #define TIMERS_H 3 | 4 | #include "common.h" 5 | #include "common/world_map.h" 6 | #include "num_level_36260.h" 7 | 8 | /**/ 9 | extern u8 horloge[25]; 10 | extern s32 map_time; 11 | extern s32 left_time; 12 | extern s16 allowed_time[192]; 13 | 14 | void INIT_HORLOGES(void); 15 | void horloges(void); 16 | void PS1_InitAllowedTime(void); 17 | s32 get_allowed_time(void); 18 | void calc_left_time(void); 19 | 20 | #endif -------------------------------------------------------------------------------- /include/fond_5BD8C.h: -------------------------------------------------------------------------------- 1 | #ifndef FOND_5BD8C_H 2 | #define FOND_5BD8C_H 3 | 4 | #include "common.h" 5 | #include "loading_794DC.h" 6 | 7 | void FUN_8018058c(u32 *param_1, s32 param_2, s32 param_3, s16 x, s16 y, s16 h, s16 w); 8 | void DISPLAY_FOND3(void); 9 | void FUN_80180804(u32 *param_1, s32 param_2, s32 param_3, s16 x, s16 y, s16 h, s16 w); 10 | void FUN_801809fc(void); 11 | void DISPLAY_FOND_CONTINUE(void); 12 | void DISPLAY_FOND_SELECT(void); 13 | 14 | #endif -------------------------------------------------------------------------------- /include/obj/medaillon_toon.h: -------------------------------------------------------------------------------- 1 | #ifndef MEDAILLON_TOON_H 2 | #define MEDAILLON_TOON_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "obj_update.h" 8 | #include "obj_init_kill.h" 9 | #include "main_moteur.h" 10 | #include "sound.h" 11 | 12 | /* .data */ 13 | extern s16 snd_flag_medaillon; 14 | 15 | void DO_MEDAILLON_TOON(Obj *obj); 16 | void DO_MEDAILLON_TOON_GELE(void); 17 | void ALLOCATE_MEDAILLON_TOON(void); 18 | 19 | #endif -------------------------------------------------------------------------------- /include/obj/spider_plafond.h: -------------------------------------------------------------------------------- 1 | #ifndef SPIDER_PLAFOND_H 2 | #define SPIDER_PLAFOND_H 3 | 4 | #include "common.h" 5 | #include "unknown/48528.h" 6 | 7 | /**/ 8 | extern u8 D_801F55D0; 9 | 10 | void get_spi_zdc(Obj *param_1, s16 *param_2, s16 *param_3, s16 *param_4, s16 *param_5); 11 | void DO_SPIDER_PLAFOND(Obj *spipl_obj); 12 | void DO_SPIDER_PLAFOND_POING_COLLISION(Obj *obj); 13 | void SPIDER_PLAFOND_REACT(Obj *obj); 14 | void DO_DARD_PLAFOND_ALWAYS(Obj *obj); 15 | 16 | #endif -------------------------------------------------------------------------------- /include/obj/fish.h: -------------------------------------------------------------------------------- 1 | #ifndef FISH_H 2 | #define FISH_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "world_map_677C0.h" 8 | #include "gendoor.h" 9 | 10 | /**/ 11 | extern s16 PS1_SplashAlwaysObjects[12]; 12 | extern u8 PS1_SplashAlwaysObjectsCount; 13 | 14 | void allocate_splash(Obj *base_obj); 15 | u8 can_free_fish(Obj *fish_obj); 16 | void DESACTIVE_FISH_COLLIS(Obj *fish_obj); 17 | void DO_PYRANHA(Obj *in_obj); 18 | 19 | #endif -------------------------------------------------------------------------------- /include/psyq_3_0_missing/STRINGS.H: -------------------------------------------------------------------------------- 1 | #ifndef _MISSING_STRINGS_H 2 | #define _MISSING_STRINGS_H 3 | 4 | extern char *strcat (char *, const char *); 5 | extern int strcmp (/* char *, char * */); /* To avoid conflicting */ 6 | extern int strncmp(const char *,const char *, int); 7 | extern char *strcpy (/* char *, char * */); /* To avoid conflicting */ 8 | extern char *strncpy(char *, const char *, int); 9 | extern int strlen (/* char * */); /* To avoid conflicting */ 10 | 11 | #endif -------------------------------------------------------------------------------- /src/data/draw/fade_A3568.c: -------------------------------------------------------------------------------- 1 | #include "draw/fade.h" 2 | 3 | void (*D_801C7D68[])(RGBAArray *, s16) = 4 | { 5 | FUN_80169a3c, 6 | FUN_80169ac8, 7 | FUN_80169b54, 8 | FUN_80169b5c 9 | }; 10 | 11 | RGBAArray *D_801C7D78[] = 12 | { 13 | &D_801CEFE0[0], 14 | &D_801CEFE0[1], 15 | &D_801CEFE0[2], 16 | &D_801CEFE0[3], 17 | &D_801CEFE0[4], 18 | null, 19 | null, 20 | null, 21 | &D_801CEFFC[0], 22 | &D_801CEFFC[1], 23 | &D_801CEFFC[2] 24 | }; -------------------------------------------------------------------------------- /src/data/ray/angle_rayman_9EB18.c: -------------------------------------------------------------------------------- 1 | #include "ray/angle_rayman.h" 2 | 3 | u8 angletab[] = 4 | { 5 | 128, 126, 125, 124, 122, 121, 120, 119, 117, 116, 6 | 115, 114, 112, 111, 110, 109, 108, 106, 105, 104, 7 | 103, 102, 101, 99, 98, 97, 96, 95, 94, 93, 8 | 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 9 | 82, 81, 80, 79, 78, 78, 77, 76, 75, 74, 10 | 73, 73, 72, 71, 70, 70, 69, 68, 68, 67, 11 | 66, 65, 65, 64, 64, 0 12 | }; -------------------------------------------------------------------------------- /src/obj/blacktoon_eyes_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/blacktoon_eyes_command.h" 2 | 3 | /* 50C60 80175460 -O2 -msoft-float */ 4 | void DO_BLKTOON_EYES_CMD(Obj *obj) 5 | { 6 | s16 prev_spd_x = obj->speed_x; 7 | 8 | SET_X_SPEED(obj); 9 | if (prev_spd_x * obj->speed_x < 0) 10 | { 11 | obj->speed_x = prev_spd_x; 12 | obj->flags = 13 | (obj->flags & ~FLG(OBJ_FLIP_X)) | 14 | (((obj->flags >> OBJ_FLIP_X ^ 1) & 1) << OBJ_FLIP_X); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /include/obj/dark_74FEC.h: -------------------------------------------------------------------------------- 1 | #ifndef DARK_74FEC_H 2 | #define DARK_74FEC_H 3 | 4 | #include "common.h" 5 | #include "common/rayevts.h" 6 | #include "common/world_map.h" 7 | /* TODO: circular? requires 8 | moskitomama_droite_obj_id 9 | moskitomama_gauche_obj_id 10 | moskitosaxo_obj_id 11 | stosko_obj_id 12 | */ 13 | #include "obj/dark_729F0.h" 14 | #include "obj/hyb_bbf2.h" 15 | 16 | void allocateSTOSKO(void); 17 | void allocateMOSKITOMAMA(void); 18 | void allocateMOSKITOSAXO(void); 19 | 20 | #endif -------------------------------------------------------------------------------- /src/obj/mus_wait.c: -------------------------------------------------------------------------------- 1 | #include "obj/mus_wait.h" 2 | 3 | #ifdef BSS_DEFS 4 | s16 Mus_obj_id; 5 | #endif 6 | 7 | /* 50AC4 801752C4 -O2 -msoft-float */ 8 | void DO_MUSICIEN(Obj *obj) 9 | { 10 | if ( 11 | obj->main_etat == 0 && obj->sub_etat == 4 && 12 | EOA(obj) && !(finBosslevel.helped_musician) 13 | ) 14 | { 15 | finBosslevel.helped_musician = true; 16 | allocateSupHelico(&level.objects[Mus_obj_id]); 17 | Vignet_To_Display = 1; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/data/menu/menu_AA918.c: -------------------------------------------------------------------------------- 1 | #include "menu/menu_7F4B4.h" 2 | 3 | u8 s_start_801cf118[] = "/start/"; 4 | u8 s__801cf120[] = ""; 5 | u8 s_copy_801cf124[] = "copy"; 6 | u8 s_erase_801cf12c[] = "erase"; 7 | u8 s_start_801cf134[] = "start"; 8 | u8 s__801cf13c[] = "~"; 9 | u8 s_801cf141[] = "z"; /* don't get this one, the "z" is supposed to be at 801cf140??? */ 10 | u8 s_empty_801cf144[] = "empty"; 11 | u8 s_options_801cf14c[] = "options"; 12 | u8 s__801cf154[] = "|"; 13 | u8 s_aaa_801cf158[] = "aaa"; 14 | -------------------------------------------------------------------------------- /include/common/text_to_display.h: -------------------------------------------------------------------------------- 1 | #ifndef TEXT_TO_DISPLAY_H 2 | #define TEXT_TO_DISPLAY_H 3 | 4 | #include "common.h" 5 | 6 | typedef struct TextToDisplay 7 | { 8 | u8 text[48]; 9 | s16 centered_x_pos; 10 | s16 centered_y_pos; 11 | s16 width; 12 | s16 height; 13 | s16 x_pos; 14 | s16 y_pos; 15 | u8 font_size; 16 | u8 field8_0x3d; 17 | u8 is_fond; 18 | u8 color; 19 | } TextToDisplay; 20 | 21 | /**/ 22 | extern TextToDisplay text_to_display[10]; 23 | 24 | #endif -------------------------------------------------------------------------------- /include/cheats.h: -------------------------------------------------------------------------------- 1 | #ifndef CHEATS_H 2 | #define CHEATS_H 3 | 4 | #include "common.h" 5 | #include "common/rayevts.h" 6 | #include "common/fin_du_jeu.h" 7 | #include "main_moteur.h" 8 | #include "ray/ray_30A64.h" 9 | #include "ray/ray_5D190.h" 10 | 11 | /* .data */ 12 | extern s16 D_801CEFC8; 13 | 14 | /* .data */ 15 | extern u8 D_801CF0D8; 16 | extern u8 PS1_PictureInPicture; 17 | extern u8 PS1_15fps; 18 | 19 | /**/ 20 | extern u8 PS1_DebugMode; 21 | 22 | void PS1_CheckPauseAndCheatInputs(void); 23 | 24 | #endif -------------------------------------------------------------------------------- /include/obj/pirate_ngawe.h: -------------------------------------------------------------------------------- 1 | #ifndef PIRATE_NGAWE_H 2 | #define PIRATE_NGAWE_H 3 | 4 | #include "common.h" 5 | #include "collision/bit_util.h" 6 | 7 | void ngaweFollowsShip(Obj *obj); 8 | void ngaweTriesToGrabShip(Obj *obj); 9 | void allocatePirateNgaweRing(Obj *ngw_obj, s16 spd_y, u8 param_3); 10 | void DO_NGW_TIR(Obj *obj); 11 | void NGW_REACT_TO_RAY_IN_ZONE(Obj *obj); 12 | void DO_ONE_NGW_COMMAND(Obj *obj); 13 | void DO_NGW_POING_COLLISION(Obj *ngw_obj); 14 | void DO_ONE_NGW_RING_COMMAND(Obj *ring_obj); 15 | 16 | #endif -------------------------------------------------------------------------------- /include/text_24E10.h: -------------------------------------------------------------------------------- 1 | #ifndef TEXT_24E10_H 2 | #define TEXT_24E10_H 3 | 4 | #include "common.h" 5 | #include "common/text_to_display.h" 6 | #include "draw/text_18118.h" /* TODO: circular? */ 7 | 8 | /* .data */ 9 | extern u8 D_801CEFA4; 10 | 11 | void INIT_TEXT_TO_DISPLAY(void); 12 | u8 deter_num_let(u8 param_1); 13 | void calc_num_let_spr(u8 param_1, u8 *param_2); 14 | s16 calc_largmax_text(u8 *param_1, s32 param_2, s16 space_width, s16 param_4, u8 param_5); 15 | void INIT_TXT_BOX(TextToDisplay *out_txt); 16 | 17 | #endif -------------------------------------------------------------------------------- /src/obj/bag1.c: -------------------------------------------------------------------------------- 1 | #include "obj/bag1.h" 2 | 3 | /* 4C2C8 80170AC8 -O2 */ 4 | void DO_BAG1_COMMAND(Obj *obj) 5 | { 6 | DO_ONE_CMD(obj); 7 | if ( 8 | obj->sub_etat == 4 && 9 | obj->anim_frame == 14 && 10 | horloge[obj->eta[obj->main_etat][obj->sub_etat].anim_speed & 0xf] == 0 && 11 | (u16) (obj->screen_x_pos + 0x9f) < 409 && 12 | obj->screen_y_pos < 140 13 | ) 14 | { 15 | obj->y_pos += 86; 16 | allocateLandingSmoke(obj); 17 | obj->y_pos -= 86; 18 | } 19 | } -------------------------------------------------------------------------------- /src/unknown/3F0B8.c: -------------------------------------------------------------------------------- 1 | #include "unknown/3F0B8.h" 2 | 3 | /* 3F0B8 801638B8 -O2 -msoft-float */ 4 | void test_fin_cling(void) 5 | { 6 | if (id_Cling_1up != -1) 7 | { 8 | id_Cling_1up = -1; 9 | Add_One_RAY_lives(); 10 | level.objects[id_Cling_1up].flags &= ~FLG(OBJ_ALIVE); 11 | } 12 | 13 | if (id_Cling_Pow != -1) 14 | { 15 | ray.hit_points = 4; 16 | status_bar.max_hp = 4; 17 | id_Cling_Pow = -1; 18 | level.objects[-1].flags &= ~FLG(OBJ_ALIVE); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/obj/cymbal2.c: -------------------------------------------------------------------------------- 1 | #include "obj/cymbal2.h" 2 | 3 | /* 3CE78 80161678 -O2 */ 4 | void START_2_PARTS_CYMBAL_ACTION(Obj *obj) 5 | { 6 | Obj *linkedCymbal; 7 | 8 | skipToLabel(obj, 4, true); 9 | obj->field24_0x3e = 1; 10 | if (link_init[obj->id] != obj->id) 11 | { 12 | linkedCymbal = &level.objects[link_init[obj->id]]; 13 | if (linkedCymbal->type == TYPE_CYMBAL1) 14 | { 15 | skipToLabel(linkedCymbal, 4, true); 16 | linkedCymbal->field24_0x3e = 1; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/obj/cage.c: -------------------------------------------------------------------------------- 1 | #include "obj/cage.h" 2 | 3 | /* 3CF08 80161708 -O2 -msoft-float */ 4 | void DO_CAGE2(Obj *obj) 5 | { 6 | obj->speed_x = 0; 7 | obj->speed_y = -8; 8 | } 9 | 10 | /* 3CF18 80161718 -O2 */ 11 | void DO_CAGE(Obj *obj) 12 | { 13 | if ( 14 | obj->main_etat == 0 && 15 | obj->sub_etat == 7 && 16 | obj->anim_frame == 0 && 17 | horloge[obj->eta[obj->main_etat][obj->sub_etat].anim_speed & 0x0f] == 0 18 | ) 19 | { 20 | obj->display_prio = 5; 21 | allocateGrille(obj); 22 | } 23 | } -------------------------------------------------------------------------------- /include/collision/etat.h: -------------------------------------------------------------------------------- 1 | #ifndef ETAT_H 2 | #define ETAT_H 3 | 4 | #include "common.h" 5 | #include "obj_update.h" 6 | 7 | s32 vblToEOA(Obj *obj, u8 factor); 8 | void GET_ANIM_POS(Obj *obj, s16 *x, s16 *y, s16 *w, s16 *h); 9 | u8 FUN_801473d4(Obj *obj); 10 | u8 FUN_801473dc(Obj *obj); 11 | void add_actobj(s16 obj_id); 12 | s16 PS1_BTYPAbsPos(s32 x, s32 y); /* see on_block_chdir() */ 13 | void set_sub_etat(Obj *obj, u8 sub_etat); 14 | void set_main_etat(Obj *obj, u8 main_etat); 15 | void set_main_and_sub_etat(Obj *obj, u8 main_etat, u8 sub_etat); 16 | 17 | #endif -------------------------------------------------------------------------------- /include/bonus_343EC.h: -------------------------------------------------------------------------------- 1 | #ifndef BONUS_343EC_H 2 | #define BONUS_343EC_H 3 | 4 | #include "common.h" 5 | #include "common/ray.h" 6 | #include "common/world_map.h" 7 | #include "LIBGPU.H" 8 | #include "STDIO.H" 9 | #include "world_map_95CC.h" 10 | #include "timers.h" 11 | #include "draw/fade.h" 12 | #include "nova.h" 13 | 14 | /* .data */ 15 | extern Obj *PS1_BonusNovas[2]; 16 | extern Obj *PS1_BonusOneUps[2]; 17 | 18 | /* .data */ 19 | extern u8 PS1_TimeString[24]; 20 | 21 | s16 do_perfect_bonus(void); /* TODO: return type? PS1_DemoLoop is u8 still */ 22 | 23 | #endif -------------------------------------------------------------------------------- /include/collision/proj.h: -------------------------------------------------------------------------------- 1 | #ifndef PROJ_H 2 | #define PROJ_H 3 | 4 | #include "common.h" 5 | 6 | /**/ 7 | extern s16 PROJ_CENTER_X; 8 | extern s16 PROJ_CENTER_Y; 9 | extern u8 zoom_mode; 10 | 11 | void set_proj_center(s16 x, s16 y); 12 | s32 get_proj_dist(s16 param_1, s16 param_2); 13 | s32 get_proj_dist2(s16 param_1, s16 param_2); 14 | s32 get_proj_x(s16 param_1, s16 param_2); 15 | s32 get_proj_y(s16 param_1, s16 param_2); 16 | void set_zoom_mode(u8 mode); 17 | s32 inverse_proj_x(s16 param_1, s16 param_2); 18 | s32 inverse_proj_y(s16 param_1, s16 param_2); 19 | 20 | #endif -------------------------------------------------------------------------------- /include/common/rayevts.h: -------------------------------------------------------------------------------- 1 | #ifndef RAYEVTS_H 2 | #define RAYEVTS_H 3 | 4 | #include "common.h" 5 | 6 | typedef struct RaymanEvents 7 | { 8 | u8 poing : 1; 9 | u8 hang : 1; 10 | u8 helico : 1; 11 | u8 super_helico : 1; 12 | u8 handstand_dash : 1; 13 | u8 handstand : 1; 14 | u8 grain : 1; 15 | u8 grap : 1; 16 | 17 | u8 run : 1; 18 | u8 demi : 1; 19 | u8 luciole : 1; 20 | u8 force_run : 2; 21 | u8 reverse : 2; 22 | u8 unused_death : 1; 23 | } RaymanEvents; 24 | 25 | /**/ 26 | extern RaymanEvents RayEvts; 27 | 28 | #endif -------------------------------------------------------------------------------- /include/obj/fee_4DFD0.h: -------------------------------------------------------------------------------- 1 | #ifndef FEE_4DFD0_H 2 | #define FEE_4DFD0_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/rayevts.h" 7 | #include "common/text_to_display.h" 8 | #include "timers.h" 9 | #include "world_map_95CC.h" 10 | 11 | /**/ 12 | extern u8 display_txt_fee; 13 | extern u8 old_txt_fee; 14 | extern u8 new_txt_fee; 15 | extern s16 png_or_fee_id; 16 | extern s16 fee_obj_id; 17 | 18 | void wait_for_dialogue_fee(Obj *obj, s16 time); 19 | void DO_FEE_ETAPE(Obj *obj); 20 | void fee_gives_super_evts(void); 21 | void DO_FEE(Obj *obj); 22 | 23 | #endif -------------------------------------------------------------------------------- /include/menu/menu_82008.h: -------------------------------------------------------------------------------- 1 | #ifndef MENU_82008_H 2 | #define MENU_82008_H 3 | 4 | #include "common.h" 5 | #include "psyq_3_0_missing/STRINGS.H" 6 | #include "menu/menu_7EEE4.h" 7 | #include "menu/menu_7F4B4.h" 8 | 9 | extern s16 D_801D7AA0; 10 | extern s16 D_801F5498; /* used as loop bound */ 11 | extern s16 PS1_Music_Max; 12 | extern s16 PS1_Soundfx_Max; 13 | extern s16 delai_barre; 14 | extern s16 delai_stereo; 15 | 16 | void FUN_801a6808(void); 17 | void FUN_801a6984(void); 18 | void FUN_801a6a04(u8 param_1); 19 | void DO_COMMANDE_PAD(void); 20 | void FUN_801a76e4(void); 21 | 22 | #endif -------------------------------------------------------------------------------- /src/data/music_AA6A4.c: -------------------------------------------------------------------------------- 1 | #include "music.h" 2 | 3 | s16 D_801CEEA4 = 0; 4 | s16 D_801CEEA6 = 0; 5 | s16 D_801CEEA8 = 0; 6 | s16 PS1_Mark_counter = 0; 7 | s16 data_music_801CEEAC = -1; 8 | s16 data_music_801CEEAE = -1; 9 | s16 PS1_Music_access_num = -1; 10 | s16 data_music_801CEEB2 = -1; 11 | s16 data_music_801CEEB4 = 1; 12 | u8 PS1_Music_pcom = 0; 13 | s16 D_801CEEB8 = 0; 14 | s16 D_801CEEBA = 0; 15 | s16 D_801CEEBC = true; 16 | u8 s_s_801ceec0[] = "%s\n"; 17 | u8 s_idle_801ceec4[] = "idle"; 18 | u8 s_busy_801ceecc[] = "busy"; 19 | u8 s_yes_801ceed4[] = "yes"; 20 | u8 s_no_801ceed8[] = "no"; -------------------------------------------------------------------------------- /include/gendoor.h: -------------------------------------------------------------------------------- 1 | #ifndef GENDOOR_H 2 | #define GENDOOR_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "obj/bateau_command.h" 8 | #include "obj_init_kill.h" 9 | 10 | /**/ 11 | extern u8 *link_init; /* not sure if this should be here? since non-gendoor things use links? */ 12 | 13 | void deactivate_ship_links(void); 14 | s16 linkListHoldsAGendoor(Obj *obj); 15 | s16 FUN_8015666c(Obj *obj); 16 | s16 FUN_80156710(Obj *obj); 17 | void correct_gendoor_link(void); 18 | void suppressFromLinkList(Obj *obj); 19 | void correct_link(void); 20 | 21 | #endif -------------------------------------------------------------------------------- /include/pix_gerbe.h: -------------------------------------------------------------------------------- 1 | #ifndef PIX_GERBE_H 2 | #define PIX_GERBE_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | typedef struct PixGerbeItem 8 | { 9 | s16 x_pos; 10 | s16 y_pos; 11 | s16 speed_x; 12 | s16 speed_y; 13 | u8 y_accel; 14 | u8 unk_1; 15 | } PixGerbeItem; 16 | 17 | typedef struct PixGerbe 18 | { 19 | PixGerbeItem items[64]; 20 | s16 is_active; 21 | } PixGerbe; 22 | 23 | /**/ 24 | extern PixGerbe pix_gerbe[8]; 25 | 26 | s32 allocate_gerbe(void); 27 | void start_pix_gerbe(s32 x_pos, s32 y_pos); 28 | void do_pix_gerbes(void); 29 | 30 | #endif -------------------------------------------------------------------------------- /include/bonus_35FB4.h: -------------------------------------------------------------------------------- 1 | #ifndef BONUS_35FB4_H 2 | #define BONUS_35FB4_H 3 | 4 | #include "common.h" 5 | #include "common/world_map.h" 6 | #include "ray/ray_30A64.h" 7 | #include "num_level_36260.h" 8 | #include "bonus_343EC.h" 9 | #include "moteur_init_end.h" 10 | #include "obj_update.h" 11 | 12 | extern u8 bonus_perfect[24]; 13 | extern s16 loop_time; 14 | extern s32 nb_wiz_save; 15 | 16 | u8 get_bonus_map_complete(s16 world, s16 lvl); 17 | void set_bonus_map_complete(s16 world, s16 lvl); 18 | void DO_PERFECT_BONUS_MAP(void); 19 | void DO_WIZ_AFTER_BONUS_MAP(void); 20 | void init_bonus_perfect(void); 21 | 22 | #endif -------------------------------------------------------------------------------- /src/obj/balle.c: -------------------------------------------------------------------------------- 1 | #include "obj/balle.h" 2 | 3 | /* 380A0 8015C8A0 -O2 -msoft-float */ 4 | void DO_BALLE(Obj *obj) 5 | { 6 | ObjState *obj_eta = &obj->eta[obj->main_etat][obj->sub_etat]; 7 | 8 | if (obj->type == TYPE_BALLE2) 9 | { 10 | obj_eta->speed_x_left = -1; 11 | obj_eta->speed_x_right = 1; 12 | obj_eta->anim_speed = obj_eta->anim_speed & 0xF | 0xA0; 13 | } 14 | else if (obj->type == TYPE_BALLE1) 15 | { 16 | obj_eta->speed_x_left = -2; 17 | obj_eta->speed_x_right = 2; 18 | obj_eta->anim_speed = obj_eta->anim_speed & 0xF; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/unknown/3ED10.c: -------------------------------------------------------------------------------- 1 | #include "unknown/3ED10.h" 2 | 3 | /* 3ED10 80163510 -O2 -msoft-float */ 4 | s16 GetY(s16 x) 5 | { 6 | s16 unk_1; 7 | s32 unk_2; 8 | s16 unk_obj_id; 9 | s16 unk_3; 10 | Obj *unk_obj; 11 | 12 | if (eau_obj_id == -1) 13 | return 0; 14 | 15 | unk_1 = (x + 50) / 101; 16 | unk_2 = unk_1 * 101; 17 | unk_obj_id = eau_obj_id + unk_1 % 5; 18 | unk_3 = 51 - ABS(x - unk_2); 19 | unk_obj = &level.objects[unk_obj_id]; 20 | 21 | return unk_obj->y_pos - 22 | unk_3 * EauDy[(unk_obj->anim_frame + DecEau[unk_obj->anim_index]) % 14] / 50; 23 | } 24 | -------------------------------------------------------------------------------- /include/obj/hyb_bbf2.h: -------------------------------------------------------------------------------- 1 | #ifndef HYB_BBF2_H 2 | #define HYB_BBF2_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "collision/block_22C84.h" 7 | #include "collision/etat.h" 8 | 9 | /**/ 10 | extern u8 BBF2DEsk; 11 | extern u8 BBF2GEsk; 12 | extern s16 NiveauSol; 13 | extern s16 YPosBBF2D; 14 | extern s16 YPosBBF2G; 15 | extern Obj *TirBBF2D; 16 | extern Obj *TirBBF2G; 17 | 18 | void doBBF2command(Obj *bbf2_obj); 19 | void DO_HYB_BBF2_POING_COLLISION(Obj *obj); 20 | void AllocateTirBBF2(Obj *bbf2_obj); 21 | void DO_HYB_BBF2_LAS(Obj *las_obj); 22 | s32 OBJ_IN_COL_ZDC(Obj *obj1, Obj *obj2); 23 | 24 | #endif -------------------------------------------------------------------------------- /include/demo_9FD4.h: -------------------------------------------------------------------------------- 1 | #ifndef DEMO_9FD4_H 2 | #define DEMO_9FD4_H 3 | 4 | #include "common.h" 5 | #include "common/rayevts.h" 6 | #include "common/record.h" 7 | #include "video.h" 8 | #include "num_level_36260.h" 9 | #include "menu/menu_7F4B4.h" 10 | #include "ray/ray_5D190.h" 11 | 12 | /* .data */ 13 | extern u8 DemoRecord[6][300]; 14 | extern s16 DemoRecordSize[6]; 15 | extern s16 DemoRecordWolrd[6]; 16 | extern s16 DemoRecordMap[6]; 17 | 18 | /**/ 19 | extern u8 ModeDemo; /* TODO: enum also? */ 20 | extern u16 RunTimeDemo; 21 | extern s16 NumDemo; 22 | 23 | void InitDemoJeu(void); 24 | void FinDemoJeu(void); 25 | 26 | #endif -------------------------------------------------------------------------------- /include/include_asm.h: -------------------------------------------------------------------------------- 1 | #ifndef INCLUDE_ASM_H 2 | #define INCLUDE_ASM_H 3 | 4 | #ifdef IGNORE_ASM 5 | #define INCLUDE_ASM(FOLDER, NAME) 6 | #define INCLUDE_RODATA(FOLDER, NAME) 7 | #else 8 | #define INCLUDE_ASM(FOLDER, NAME) \ 9 | __asm__( \ 10 | ".text\n" \ 11 | "\t.align\t2\n" \ 12 | "\t.set noreorder\n" \ 13 | "\t.set noat\n" \ 14 | ".include \""FOLDER"/"#NAME".s\"\n" \ 15 | "\t.set reorder\n" \ 16 | "\t.set at\n" \ 17 | ) 18 | #define INCLUDE_RODATA(FOLDER, NAME) \ 19 | __asm__( \ 20 | ".section .rodata\n" \ 21 | "\t.include \""FOLDER"/"#NAME".s\"\n" \ 22 | ".section .text" \ 23 | ) 24 | #endif 25 | 26 | #endif -------------------------------------------------------------------------------- /include/obj/batteur_fou.h: -------------------------------------------------------------------------------- 1 | #ifndef BATTEUR_FOU_H 2 | #define BATTEUR_FOU_H 3 | 4 | #include "common.h" 5 | #include "collision/bit_util.h" 6 | #include "obj/eyes_3C3A8.h" 7 | 8 | /**/ 9 | extern s16 bat_nb_frap; 10 | 11 | void DO_BAT_FLASH(s32 in_x, s32 in_y); 12 | void DO_BAT_LEFT_FLASH(Obj *obj); 13 | void DO_BAT_RIGHT_FLASH(Obj *obj); 14 | void DO_BAT_LEFT_RIGHT_FLASH(Obj *obj); 15 | s16 bat_dir(Obj *obj); 16 | void bat_init_scroll(Obj *obj); 17 | void bat_done_scroll(void); 18 | void DO_BAT_COMMAND(Obj *obj); 19 | void BAT_ray_in_zone(Obj *obj); 20 | void DO_BAT_POING_COLLISION(Obj *bat_obj); 21 | s32 bat_get_eject_sens(Obj *obj); 22 | 23 | #endif -------------------------------------------------------------------------------- /include/obj/pirate_guetteur.h: -------------------------------------------------------------------------------- 1 | #ifndef PIRATE_GUETTEUR_H 2 | #define PIRATE_GUETTEUR_H 3 | 4 | #include "common.h" 5 | #include "collision/collision.h" 6 | #include "obj/explosion.h" 7 | 8 | void swapGuetteurCollZones(Obj *obj, u8 param_2); 9 | void guetteurFollowsShip(Obj *obj); 10 | void DO_ONE_PAR_COMMAND(Obj *obj); 11 | s32 hasGuetteurABomb(Obj *obj, s32 param_2); 12 | void allocatePirateGuetteurBomb(Obj *gue_obj, s32 param_2, u8 param_3, u8 param_4); /* param_2??? */ 13 | void DO_PAR_TIR(Obj *obj); 14 | void DO_PAR_POING_COLLISION(Obj *obj, s16 param_2); 15 | void PAR_REACT_TO_RAY_IN_ZONE(Obj *obj); 16 | void DO_PAR_BOMB_COMMAND(Obj *obj); 17 | 18 | #endif -------------------------------------------------------------------------------- /include/unknown/2539C.h: -------------------------------------------------------------------------------- 1 | #ifndef UNK_2539C_H 2 | #define UNK_2539C_H 3 | 4 | #include "common.h" 5 | #include "menu/menu_7F4B4.h" 6 | 7 | /**/ 8 | extern u8 D_801E4D48; 9 | extern u8 first_boss_meet; 10 | extern RaymanEvents SauveRayEvts; 11 | 12 | void Deter_Option_Caract(u8 *str, s16 param_2, u32 param_3); 13 | void SwapAB(s16 *param_1, s16 *param_2); 14 | void Bresenham(void (*param_1)(s32, s32), s16 param_2, s16 param_3, s16 param_4, s16 param_5, s16 param_6, s16 param_7); 15 | void LOAD_CONFIG(void); 16 | void init_finBossLevel(void); 17 | void Change_Wait_Anim(void); 18 | void PS1_SetSauveRayEvts(void); 19 | void PS1_RestoreSauveRayEvts(void); 20 | 21 | #endif -------------------------------------------------------------------------------- /src/data/main_moteur_AA680.c: -------------------------------------------------------------------------------- 1 | #include "main_moteur.h" 2 | 3 | u8 in_pause = false; 4 | u8 PS1_Ingame = false; 5 | RaymanEvents D_801CEE84 = {}; 6 | RaymanEvents D_801CEE88 = { .poing = true }; 7 | RaymanEvents D_801CEE8C = { .poing = true, .hang = true }; 8 | RaymanEvents D_801CEE90 = { .poing = true, .hang = true, .grap = true }; 9 | RaymanEvents D_801CEE94 = { .poing = true, .hang = true, .grap = true, .helico = true }; 10 | RaymanEvents PS1_DefaultRayEvts = { .poing = true, .hang = true, .grap = true, .helico = true, .run = true }; 11 | s16 D_801CEE9A = 0; 12 | s16 D_801CEE9C = 0; 13 | s16 PS1_CanPlayDeathMusic = true; 14 | s16 D_801CEEA0 = 0; 15 | u8 D_801CEEA2 = 0; -------------------------------------------------------------------------------- /src/data/draw/draw_hud_AA77C.c: -------------------------------------------------------------------------------- 1 | #include "draw/draw_hud.h" 2 | 3 | /* 4 | presumably need to finish display_time first? 5 | 6 | mips-linux-gnu-ld: build/src/display_ui.c.o: in function `display_time': 7 | src/display_ui.c:(.text+0x11d0): undefined reference to `D_801CEF98' 8 | mips-linux-gnu-ld: src/display_ui.c:(.text+0x11d4): undefined reference to `D_801CEF98' 9 | */ 10 | u8 PS1_star_spr[] = {0x15, 0x16, 0x17, 0x18, 0x15, 0x19, 0x16, 0x15}; 11 | u8 s__801cef84[] = "%"; 12 | u8 PS1_TingsToGet_Col = 1; 13 | u8 PS1_TingsToGet_ColAdd = 1; 14 | u8 s_time_801cef88[] = "time"; 15 | u8 s__801cef90[] = "/"; 16 | u8 s_go__801cef94[] = "/go !/"; 17 | u8 s_the_end_801cef9c[] = "the end"; -------------------------------------------------------------------------------- /src/data/draw/fade_AA7E0.c: -------------------------------------------------------------------------------- 1 | #include "draw/fade.h" 2 | 3 | RGBAArray D_801CEFE0[] = 4 | { 5 | { 0, 0, 0, 0 }, 6 | { 150, 50, 30, 0 }, 7 | { 100, 100, 100, 0 }, 8 | { 252, 0, 2, 0 }, 9 | { 0, 0, 0, 0 } 10 | }; 11 | s16 D_801CEFF4 = 0; 12 | s16 D_801CEFF6 = 0; 13 | u8 data_fade_801CEFF8[4] = {}; 14 | RGBAArray D_801CEFFC[] = 15 | { 16 | { 150, 150, 150, 0 }, 17 | { 100, 100, 150, 0 }, 18 | { 150, 100, 100, 0 } 19 | }; 20 | RGBAArray D_801CF008 = {}; 21 | s16 D_801CF00C = 50; 22 | u16 D_801CF00E = 10; 23 | s16 D_801CF010 = 0; 24 | s16 D_801CF012 = 0; 25 | s16 D_801CF014 = 0; 26 | s16 D_801CF016 = -8; 27 | s16 D_801CF018 = 0; 28 | u8 PS1_DisableInputs = false; -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "tools/asm-differ"] 2 | path = tools/asm-differ 3 | url = https://github.com/simonlindholm/asm-differ 4 | [submodule "tools/maspsx"] 5 | path = tools/maspsx 6 | url = https://github.com/mkst/maspsx 7 | [submodule "tools/m2c"] 8 | path = tools/m2c 9 | url = https://github.com/matt-kempster/m2c 10 | [submodule "tools/decomp-permuter"] 11 | path = tools/decomp-permuter 12 | url = https://github.com/simonlindholm/decomp-permuter 13 | [submodule "tools/nugget"] 14 | path = tools/nugget 15 | url = https://github.com/pcsx-redux/nugget/ 16 | [submodule "tools/psyq-3.0-converted"] 17 | path = tools/psyq-3.0-converted 18 | url = https://github.com/fuerchter/psyq-3.0-converted 19 | -------------------------------------------------------------------------------- /src/obj/nova2_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/nova2_command.h" 2 | 3 | /* 4FFD0 801747D0 -O2 -msoft-float */ 4 | void DO_NOVA2_COMMAND(Obj *obj) 5 | { 6 | s16 unk_1 = obj->field23_0x3c; 7 | 8 | if (unk_1 != 0x00FF) 9 | { 10 | if (unk_1 == -1) 11 | { 12 | if (EOA(obj)) 13 | { 14 | obj->flags &= ~FLG(OBJ_ALIVE); 15 | obj->flags &= ~FLG(OBJ_ACTIVE); 16 | } 17 | } 18 | else if (unk_1 == 0) 19 | { 20 | obj->anim_frame = 0; 21 | obj->field23_0x3c = -1; 22 | obj->display_prio = 2; 23 | } 24 | else 25 | obj->field23_0x3c = unk_1 - 1; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/data/cam_scroll_9E814.c: -------------------------------------------------------------------------------- 1 | #include "cam_scroll_29B5C.h" 2 | 3 | s16 expsin[] = 4 | { 5 | 0, 855, 825, 0, -769, -742, -1, 690, 6 | 666, 0, -621, -599, -1, 557, 537, 0, 7 | -501, -484, -1, 449, 434, 0, -405, -391, 8 | -1, 363, 350, 0, -327, -315, -1, 292, 9 | 282, 0, -264, -255, -1, 236, 228, 0, 10 | -213, -206, -1, 190, 184, 0, -172, -166, 11 | -1, 153, 148, 0, -139, -134, -1, 124, 12 | 120, 0, -112, -108, -1, 80, 32640, 0 13 | }; 14 | 15 | s16 expsin2[] = 16 | { 17 | 3, 0, -3, 0, 3, 0, -3, 0, 18 | 3, 0, -3, 0, 3, 0, -3, 0, 19 | 3, 0, -3, 0, 3, 0, -3, 0, 20 | 3, 0, -3, 0, 3, 0, -3, 0, 21 | 3, 0, -3, 0, 3, 0, -3, 0, 22 | 3, 0, -3, 0, 3, 0, -3, 0, 23 | 255, 0 24 | }; -------------------------------------------------------------------------------- /include/world_map_95CC.h: -------------------------------------------------------------------------------- 1 | #ifndef WORLD_MAP_95CC_H 2 | #define WORLD_MAP_95CC_H 3 | 4 | #include "common.h" 5 | #include "common/text_to_display.h" 6 | #include "draw/text_18118.h" 7 | #include "world_map_677C0.h" 8 | #include "unknown/7BB28.h" 9 | 10 | /* .data */ 11 | extern u8 s_level_801cedf4[7]; 12 | 13 | /**/ 14 | extern s16 new_world; 15 | extern s16 new_level; 16 | extern s16 num_world_choice; 17 | extern s16 num_level_choice; 18 | extern u8 old_num_world; 19 | extern u8 world_index; 20 | 21 | extern s16 inter_select; 22 | extern s16 level_select; 23 | 24 | s16 select_level_prg(void); 25 | s16 SELECT_LEVEL(s16 sel); 26 | s16 WORLD_CHOICE(void); 27 | void DISPLAY_STAGE_NAMES(void); 28 | void DO_WORLD_MAP(void); 29 | 30 | #endif -------------------------------------------------------------------------------- /include/ray/ray_32398.h: -------------------------------------------------------------------------------- 1 | #ifndef RAY_32398_H 2 | #define RAY_32398_H 3 | 4 | #include "common.h" 5 | #include "common/rayevts.h" 6 | #include "collision/block_22C84.h" 7 | #include "ray/ray_30A64.h" 8 | #include "moteur_init_end.h" 9 | #include "continue.h" 10 | #include "collision/collision.h" 11 | #include "save.h" 12 | #include "obj/eau.h" 13 | #include "obj/graine.h" 14 | 15 | /**/ 16 | extern u8 PS1_ShoulderL; 17 | extern u8 PS1_ShoulderR; 18 | extern u8 RAY_MODE_SPEED; 19 | 20 | void INIT_RAY_BEGIN(void); 21 | void INIT_RAY(u8 new_lvl); 22 | s16 is_icy_pente(u8 block); 23 | void STOPPE_RAY_EN_XY(void); 24 | void RAY_RESPOND_TO_ALL_DIRS(void); 25 | void DO_RAYMAN(void); 26 | void DO_RAY_ON_MS(void); 27 | void DO_PLACE_RAY(void); 28 | 29 | #endif -------------------------------------------------------------------------------- /include/obj/black_ray_command.h: -------------------------------------------------------------------------------- 1 | #ifndef BLACK_RAY_COMMAND_H 2 | #define BLACK_RAY_COMMAND_H 3 | 4 | #include "common.h" 5 | #include "obj_update.h" 6 | 7 | typedef struct RayStack 8 | { 9 | s16 x_pos; 10 | s16 y_pos; 11 | s16 poing_x_pos; 12 | s16 poing_y_pos; 13 | u8 main_etat; 14 | u8 sub_etat; 15 | u8 anim_index; 16 | u8 anim_frame; 17 | u8 flip_x; 18 | u8 poing_anim_index; 19 | u8 poing_anim_frame; 20 | u8 poing_flip_x; 21 | u8 poing_is_active; 22 | u8 scale; 23 | } RayStack; 24 | 25 | /**/ 26 | extern RayStack rayStack[101]; 27 | extern u8 black_pos_in_stack; 28 | extern s16 black_ray_obj_id; 29 | extern s16 black_fist_obj_id; 30 | 31 | void doBlackRaymanCommand(Obj *br_obj); 32 | 33 | #endif -------------------------------------------------------------------------------- /include/loading_E99C.h: -------------------------------------------------------------------------------- 1 | #ifndef LOADING_E99C_H 2 | #define LOADING_E99C_H 3 | 4 | #include "common.h" 5 | #include "common/fileinfo.h" 6 | #include "common/world_map.h" 7 | #include "LIBSND.H" 8 | #include "STDIO.H" 9 | #include "psyq_3_0_missing/LIBETC.H" 10 | 11 | /* .data */ 12 | extern u8 *D_801CEEEC; 13 | extern u8 *D_801CEEF0; 14 | extern u8 s__801ceef4[7]; 15 | 16 | void PS1_Disable_all_Callbacks(void); 17 | void FUN_80133048(s32 param_1, FileInfo *files, u8 count); 18 | s32 PS1_InitFiles(FileInfo *files, s32 count, u8 *name); 19 | s32 FUN_801331a4(FileInfo *files, s32 count, s32 param_3); 20 | s32 PS1_LoadFiles(FileInfo *files, s32 file_index, s32 count, s16 param_4); 21 | s32 PS1_LoadVabBody(FileInfo file, s16 in_vabid, s16 param_3); 22 | 23 | #endif -------------------------------------------------------------------------------- /include/victoire.h: -------------------------------------------------------------------------------- 1 | #ifndef VICTOIRE_H 2 | #define VICTOIRE_H 3 | 4 | #include "common.h" 5 | #include "draw/text_18118.h" 6 | 7 | typedef struct Credit 8 | { 9 | u8 *text; 10 | s16 x_pos; 11 | s16 y_pos; 12 | u8 font; 13 | u8 cmd; 14 | u8 color; 15 | } Credit; 16 | 17 | /* .data */ 18 | extern Credit credits[135]; /* only hint for this being 135 instead of 109 is empty space after it */ 19 | 20 | /**/ 21 | extern u8 You_Win; 22 | extern u8 display_Vignet; 23 | extern u8 first_credit; 24 | extern u8 last_credit; 25 | extern s16 nb_credits_lines; 26 | 27 | void DISPLAY_TXT_CREDITS(void); 28 | s16 display_credits_prg(void); 29 | void DISPLAY_CREDITS(void); 30 | void DISPLAY_PROTOON_BACK(void); 31 | void DO_VICTOIRE(void); 32 | 33 | #endif -------------------------------------------------------------------------------- /include/obj/stonebomb.h: -------------------------------------------------------------------------------- 1 | #ifndef STONEBOMB_H 2 | #define STONEBOMB_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | #include "obj/stoneman_command.h" 7 | 8 | /**/ 9 | extern s16 saveRMjumpX; 10 | extern s16 saveRMjumpY; 11 | 12 | void setStoneChipPos(Obj *param_1, Obj *param_2, u8 *param_3); 13 | void allocateStoneChips(Obj *in_obj); /* type? */ 14 | void DO_STONE_EXPLOSION(Obj *obj); 15 | void DO_TIR(Obj *param_1); /* TYPE_CHASSEUR1, TYPE_CHASSEUR2 see DO_ONE_CMD_LR_ATTENTE() */ 16 | void allocateStonemanStone(Obj *stmn_obj, s16 param_2, u8 param_3); 17 | void DO_STONEMAN1_TIR(Obj *obj); 18 | void DO_STONEMAN2_TIR(Obj *obj); 19 | void allocateStonewomanStone(Obj *stwmn_obj, s16 param_2); 20 | void DO_STONEWOMAN_TIR(Obj *obj); 21 | 22 | #endif -------------------------------------------------------------------------------- /src/data/draw/draw_AA864.c: -------------------------------------------------------------------------------- 1 | #include "draw/draw_548CC.h" 2 | 3 | s16 D_801CF064 = 0; 4 | s16 D_801CF066 = 1; 5 | s16 D_801CF068 = 1; 6 | s32 D_801CF06C = 1; 7 | CVECTOR D_801CF070 = {0, 0, 255, 0}; 8 | CVECTOR D_801CF074 = {255, 0, 0, 0}; 9 | CVECTOR D_801CF078 = {0, 255, 0, 0}; 10 | CVECTOR D_801CF07C = {255, 0, 255, 1}; 11 | CVECTOR D_801CF080 = {0, 255, 255, 0}; 12 | s16 data_draw_801CF084 = 1; 13 | u16 D_801CF086 = 0; 14 | s16 D_801CF088 = 0; 15 | s16 D_801CF08A = 200; 16 | s16 data_draw_801CF08C = 5; /* both unused */ 17 | s16 data_draw_801CF08E = -1; 18 | u16 D_801CF090 = 0; 19 | u16 D_801CF092 = 0; 20 | u16 D_801CF094 = 0; 21 | s16 D_801CF096 = 200; 22 | s16 D_801CF098 = 200; 23 | s16 data_draw_801CF09A = 5; /* both unused */ 24 | s16 data_draw_801CF09C = -1; -------------------------------------------------------------------------------- /src/obj/bouee_joe_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/bouee_joe_command.h" 2 | 3 | /* 504E8 80174CE8 -O2 -msoft-float */ 4 | #ifndef MATCHES_BUT 5 | INCLUDE_ASM("asm/nonmatchings/obj/bouee_joe_command", DO_BOUEE_JOE_COMMAND); 6 | #else 7 | /* unk_1? */ 8 | void DO_BOUEE_JOE_COMMAND(Obj *obj) 9 | { 10 | s16 unk_1 = 43; 11 | 12 | obj->y_pos = 13 | obj->iframes_timer - unk_1 + 14 | GetY(obj->x_pos + obj->offset_bx - 12); 15 | 16 | if (ray.field20_0x36 == obj->id) 17 | obj->field23_0x3c = 13; 18 | else 19 | obj->field23_0x3c = 0; 20 | 21 | if (obj->iframes_timer < obj->field23_0x3c) 22 | obj->iframes_timer++; 23 | else if (obj->iframes_timer > obj->field23_0x3c) 24 | obj->iframes_timer--; 25 | } 26 | #endif 27 | -------------------------------------------------------------------------------- /src/unknown/29A18.c: -------------------------------------------------------------------------------- 1 | #include "unknown/29A18.h" 2 | 3 | /* 29A18 8014E218 -O2 -msoft-float */ 4 | void fades(void) 5 | { 6 | if (map_time == 0) 7 | INIT_FADE_IN(); 8 | 9 | if (dead_time == 32) 10 | INIT_FADE_OUT(); 11 | 12 | if (fade != 0) 13 | DO_FADE(); 14 | } 15 | 16 | /* 29A7C 8014E27C -O2 -msoft-float */ 17 | void FUN_8014e27c(void) 18 | { 19 | if (ray_old_main_etat != 2 && ray.main_etat == 2) 20 | ray.field24_0x3e = 0; 21 | 22 | if ( 23 | ABS(PS1_StartMoteurRayX - ray.x_pos) > 48 || 24 | ABS(PS1_StartMoteurRayY - ray.y_pos) > 48 25 | ) 26 | { 27 | ray.x_pos = PS1_StartMoteurRayX; 28 | ray.y_pos = PS1_StartMoteurRayY; 29 | calc_obj_pos(&ray); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/obj/moving_platform_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/moving_platform_command.h" 2 | 3 | /* 49320 8016DB20 -O2 */ 4 | s16 test_allowed(Obj *obj, s16 param_2, s16 param_3); 5 | 6 | void DO_MOVING_PLATFORM_COMMAND(Obj *obj) 7 | { 8 | s16 x_cen; 9 | s16 y_cen; 10 | s16 chdir; 11 | 12 | x_cen = get_center_x(obj); 13 | y_cen = get_center_y(obj); 14 | chdir = on_block_chdir(obj, x_cen, y_cen); 15 | /* TODO: remove cast once sure of test_allowed() return */ 16 | if (chdir && (s16) test_allowed(obj, x_cen, y_cen)) 17 | skipToLabel(obj, 99, true); 18 | 19 | obj->flags &= ~FLG(OBJ_FLIP_X); 20 | if (obj->cmd == GO_SPEED) 21 | { 22 | obj->speed_x = obj->iframes_timer; 23 | obj->speed_y = obj->field20_0x36; 24 | } 25 | } -------------------------------------------------------------------------------- /mk-nugget.mk: -------------------------------------------------------------------------------- 1 | TARGET := slus-000.05 2 | TYPE := ps-exe 3 | 4 | NUG_DIR := tools/nugget 5 | PSYQ_DIR := tools/psyq-3.0-converted 6 | SRC_DIR := src 7 | 8 | CFLAGS := -Iinclude -I$(PSYQ_DIR)/include -DNUGGET -G0 -fno-builtin -fno-toplevel-reorder 9 | LDFLAGS += -Xlinker --defsym=TLOAD_ADDR=0x80125000 10 | LDFLAGS += -L$(PSYQ_DIR)/lib -Wl,--start-group $(PSYQ_DIR)/lib/card.o $(PSYQ_DIR)/lib/pad.o -lapi -lc -lcd -lcard -lsnd -lspu -letc -lgte -lgpu -lpress -Wl,--end-group 11 | 12 | SRCS += $(wildcard $(SRC_DIR)/**.c) $(wildcard $(SRC_DIR)/**/**.c) $(wildcard $(SRC_DIR)/**/**/**.c) 13 | SRCS += $(NUG_DIR)/common/crt0/crt0.s 14 | 15 | default: all 16 | 17 | include $(NUG_DIR)/common.mk -------------------------------------------------------------------------------- /src/obj/ens_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/ens_command.h" 2 | 3 | /* 500FC 801748FC -O2 -msoft-float */ 4 | void DO_ENSEIGNE_COMMAND(Obj *obj) 5 | { 6 | DO_ONE_CMD(obj); 7 | if (prise_branchee) 8 | { 9 | if (obj->main_etat == 0 && obj->sub_etat == 0) 10 | skipToLabel(obj, 1, true); 11 | 12 | if ( 13 | obj->main_etat == 0 && obj->sub_etat == 1 && 14 | obj->anim_frame >= obj->animations[1].frames_count - 1 15 | ) 16 | skipToLabel(obj, 2, true); 17 | 18 | if ( 19 | obj->main_etat == 0 && obj->sub_etat == 2 && 20 | obj->anim_frame >= obj->animations[2].frames_count - 1 21 | ) 22 | skipToLabel(obj, 1, true); 23 | } 24 | else 25 | skipToLabel(obj, 0, true); 26 | } 27 | -------------------------------------------------------------------------------- /src/obj/drop_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/drop_command.h" 2 | 3 | /* 506E8 80174EE8 -O2 -msoft-float */ 4 | void DO_DROP_COMMAND(Obj *obj) 5 | { 6 | if (obj->speed_y > 2) 7 | set_main_and_sub_etat(obj, 2, 2); 8 | else if (obj->speed_y > 1) 9 | set_main_and_sub_etat(obj, 2, 1); 10 | 11 | if ( 12 | __builtin_abs(obj->speed_x) > 1 && 13 | !(obj->main_etat == 2 && obj->sub_etat == 0) 14 | ) 15 | { 16 | if (!(obj->flags & FLG(OBJ_FLIP_X))) 17 | obj->speed_x++; 18 | else 19 | obj->speed_x--; 20 | } 21 | 22 | if (obj->main_etat == 2 && obj->sub_etat == 3) 23 | { 24 | if (EOA(obj)) 25 | { 26 | obj->flags &= ~FLG(OBJ_ACTIVE); 27 | obj->flags &= ~FLG(OBJ_ALIVE); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /include/first_init.h: -------------------------------------------------------------------------------- 1 | #ifndef FIRST_INIT_H 2 | #define FIRST_INIT_H 3 | 4 | #include "common.h" 5 | #include "LIBGPU.H" 6 | #include "psyq_3_0_missing/LIBCD.H" 7 | #include "draw/fade.h" 8 | #include "draw/rollup_trans.h" 9 | #include "unknown/7BB28.h" 10 | #include "unknown/5C2BC.h" 11 | #include "unknown/A3B0.h" 12 | 13 | /* .data */ 14 | extern RECT D_801CF0E0; 15 | extern RECT D_801CF0E8; 16 | 17 | /* .data */ 18 | extern u8 D_801CF438; 19 | extern u8 D_801CF440; 20 | 21 | s16 FUN_8019f848(void); 22 | s16 FUN_8019f88c(void); 23 | void FUN_8019f8d0(void); 24 | u8 PS1_OldLoadingScreen(void); 25 | void FUN_8019fa94(u8 param_1); 26 | void FUN_8019fb84(void); 27 | void FUN_8019fd40(void); 28 | u8 FUN_8019fda0(void); 29 | void FUN_8019fdd0(void); 30 | void FUN_8019fe8c(void); 31 | void PS1_SetLevelto_4_1(void); 32 | void FIRST_INIT(void); 33 | 34 | #endif -------------------------------------------------------------------------------- /include/collision/block_6E5E0.h: -------------------------------------------------------------------------------- 1 | #ifndef BLOCK_6E5E0_H 2 | #define BLOCK_6E5E0_H 3 | 4 | #include "common.h" 5 | #include "common/ray.h" 6 | #include "obj_update.h" 7 | #include "obj_init_kill.h" 8 | #include "collision/etat.h" 9 | #include "collision/bit_util.h" 10 | #include "ray/ray_5D190.h" 11 | #include "command_56AF0.h" 12 | #include "obj/rayon.h" 13 | 14 | s16 MURDUR(s16 x, s16 y); /* s16 or RayTestBlocSH needs casts */ 15 | s16 dist_to_bloc_floor(s16 btyp, s16 x, s16 y); 16 | s16 bloc_floor(s16 btyp, s16 x, s16 y); 17 | s32 calc_typ_trav(Obj *obj, u8 param_2); /* TODO: return? u8? */ 18 | u8 calc_typ_travd(Obj *obj, u8 param_2); /* param_2 is bool */ 19 | void TEST_FIN_BLOC(Obj *obj); 20 | s32 TEST_IS_ON_RESSORT_BLOC(Obj *obj); 21 | s32 IS_ON_RESSORT_BLOC(Obj *obj); 22 | void CALC_MOV_ON_BLOC(Obj *obj); 23 | void recale_position(Obj *obj); 24 | 25 | #endif -------------------------------------------------------------------------------- /include/obj_util.h: -------------------------------------------------------------------------------- 1 | #ifndef OBJ_UTIL_H 2 | #define OBJ_UTIL_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/ray.h" 7 | #include "common/world_map.h" 8 | #include "timers.h" 9 | #include "obj/poing.h" 10 | #include "obj_init_kill.h" 11 | 12 | /* .data */ 13 | extern s16 PS1_Toon_Speeds_x[8]; /* not sure if 7 or 8 in size */ 14 | extern s16 PS1_Toon_Speeds_y[8]; 15 | 16 | /**/ 17 | extern u8 lidol_to_allocate; 18 | extern Obj *lidol_source_obj; 19 | 20 | void init_obj_in_the_air(Obj *obj); 21 | void make_my_fruit_go_down(Obj *obj, s16 x_accel); 22 | void allocate_toons(Obj *src_obj, u8 count); 23 | void special_flags_init(void); 24 | void switchOff(Obj *obj); 25 | void obj_hurt(Obj *obj); 26 | void Projectil_to_RM(Obj *obj, s16 *out_spd_x, s16 *out_spd_y, s16 new_spd_x, s16 new_spd_y); 27 | void del_actobj(Obj *in_obj); 28 | 29 | #endif -------------------------------------------------------------------------------- /src/data/password_A3CD8.c: -------------------------------------------------------------------------------- 1 | #include "password.h" 2 | 3 | PasswordTables PS1_PasswordTables = 4 | { 5 | .xor_table = { 0x18, 0x08, 0x12, 0x0A, 0x06, 0x16, 0x04, 0x1C, 0x0C, 0x14 }, 6 | .verification_table = { 0x02, 0x03, 0x05, 0x07, 0x11, 0x02, 0x03, 0x05, 0x07, 0x11 }, 7 | .display_table = { 8 | 0x21, 0x33, 0x63, 0x35, 0x66, 0x37, 0x68, 0x39, 9 | 0x32, 0x6C, 0x77, 0x6E, 0x36, 0x71, 0x30, 0x73, 10 | 0x6B, 0x76, 0x6D, 0x78, 0x70, 0x7A, 0x72, 0x31, 11 | 0x74, 0x62, 0x34, 0x64, 0x3F, 0x67, 0x38, 0x6A 12 | }, 13 | .translate_table = { 14 | 0x19, 0x02, 0x1B, 0x04, 0x1D, 0x06, 0x1F, 0x10, 15 | 0x09, 0x12, 0x0B, 0x14, 0x0D, 0x16, 0x0F, 0x18, 16 | 0x11, 0x0A, 0x13, 0x15, 0x0E, 0x17, 0x08, 0x01, 17 | 0x1A, 0x03, 0x0C, 0x05, 0x1E, 0x07, 0x00, 0x1C 18 | }, 19 | .temp_cage_counts = {} 20 | }; 21 | -------------------------------------------------------------------------------- /src/obj/big_clown.c: -------------------------------------------------------------------------------- 1 | #include "obj/big_clown.h" 2 | 3 | /* 39CD8 8015E4D8 -O2 -msoft-float */ 4 | void DO_BIG_CLOWN_ATTAK(Obj *bc_obj) 5 | { 6 | if ( 7 | bc_obj->main_etat == 0 && bc_obj->sub_etat == 2 && 8 | bc_obj->field24_0x3e == 0 && bc_obj->anim_frame > 15 9 | ) 10 | { 11 | bc_obj->field24_0x3e = 1; 12 | screen_trembling = 1; 13 | 14 | if (ray.main_etat == 0 || ray.main_etat == 1) 15 | ray.field56_0x69 = 1; 16 | else if (ray.main_etat == 4 || ray.main_etat == 5) 17 | { 18 | ray.main_etat = 2; 19 | ray.sub_etat = 1; 20 | } 21 | } 22 | else if (bc_obj->main_etat == 0 && bc_obj->sub_etat == 11) 23 | bc_obj->field24_0x3e = 0; 24 | else if (bc_obj->main_etat == 0 && bc_obj->sub_etat == 22) 25 | skipToLabel(bc_obj, 6, true); 26 | } 27 | -------------------------------------------------------------------------------- /include/moteur_init_end.h: -------------------------------------------------------------------------------- 1 | #ifndef MOTEUR_INIT_END 2 | #define MOTEUR_INIT_END 3 | 4 | #include "common.h" 5 | #include "common/rayconst.h" 6 | #include "common/obj.h" 7 | #include "obj_update.h" 8 | #include "obj/scorpion.h" 9 | #include "bonus_372E0.h" 10 | #include "unknown/2539C.h" 11 | 12 | /**/ 13 | extern s16 bonus_map; 14 | extern s16 xmapmax; 15 | extern s16 ymapmax; 16 | extern Obj rms; 17 | extern s16 ray_X_main_pos_init; 18 | extern s16 ray_Y_main_pos_init; 19 | extern s16 xmapsave; 20 | extern s16 ymapsave; 21 | extern u8 D_801F75C0; 22 | extern u8 NewMs; 23 | 24 | void INIT_MOTEUR(u8 new_lvl); 25 | void INIT_MOTEUR_BEGIN(void); 26 | void INIT_MOTEUR_WORLD(void); 27 | void INIT_MOTEUR_LEVEL(s16 new_lvl); 28 | void restore_gendoor_link(void); 29 | void DONE_MOTEUR_LEVEL(void); 30 | void INIT_MOTEUR_DEAD(void); 31 | void INIT_RAY_ON_MS(u8 *new_ms); 32 | 33 | #endif -------------------------------------------------------------------------------- /include/cam_scroll_29B5C.h: -------------------------------------------------------------------------------- 1 | #ifndef CAM_SCROLL_29B5C_H 2 | #define CAM_SCROLL_29B5C_H 3 | 4 | #include "common.h" 5 | #include "collision/bit_util.h" 6 | 7 | /* .data */ 8 | extern s16 expsin[64]; 9 | extern s16 expsin2[50]; 10 | 11 | /* .data */ 12 | extern u8 D_801CEDFC; 13 | extern s16 dhspeed; 14 | extern s16 dvspeed; 15 | extern u8 joy_done; 16 | 17 | /**/ 18 | extern s16 h_scroll_speed; 19 | extern s16 v_scroll_speed; 20 | extern s16 scroll_start_x; 21 | extern s16 scroll_start_y; 22 | extern s16 scroll_end_x; 23 | extern s16 scroll_end_y; 24 | extern u8 scrollLocked; 25 | extern s16 screen_trembling; 26 | extern s16 screen_trembling2; 27 | extern s16 screen_trembling3; 28 | 29 | s16 frapsol(s16 param_1); 30 | void DO_SCREEN_TREMBLE(void); 31 | void DO_SCREEN_TREMBLE3(void); 32 | void DO_SCREEN_TREMBLE2(void); 33 | void DO_SCROLL(s16 *h_speed, s16 *v_speed); 34 | 35 | #endif -------------------------------------------------------------------------------- /include/macro.inc: -------------------------------------------------------------------------------- 1 | # This file is used by modern gas. 2 | # Defines the expected assembly macros 3 | 4 | # Evaluate this file only once in case it's included more than once 5 | .ifndef _MACRO_INC_GUARD 6 | .internal _MACRO_INC_GUARD 7 | .set _MACRO_INC_GUARD, 1 8 | 9 | .macro glabel label 10 | .global \label 11 | .balign 2 12 | \label: 13 | .endm 14 | 15 | .macro jlabel label 16 | \label: 17 | .endm 18 | 19 | .macro dlabel label 20 | .global \label 21 | \label: 22 | .endm 23 | 24 | .macro nonmatching label, size=1 25 | .global \label\().NON_MATCHING 26 | .type \label\().NON_MATCHING, @object 27 | .size \label\().NON_MATCHING, \size 28 | \label\().NON_MATCHING: 29 | .endm 30 | 31 | # End of a data symbol. 32 | .macro enddlabel label 33 | .size \label, . - \label 34 | .endm 35 | 36 | .include "gte.inc" 37 | 38 | .endif 39 | -------------------------------------------------------------------------------- /src/obj/caisse_claire_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/caisse_claire_command.h" 2 | 3 | /* 4D6EC 80171EEC -O2 */ 4 | void DO_CCL_COMMAND(Obj *obj) 5 | { 6 | u8 hp; 7 | 8 | switch (obj->cmd) 9 | { 10 | case GO_WAIT: 11 | case GO_NOP: 12 | SET_X_SPEED(obj); 13 | CALC_MOV_ON_BLOC(obj); 14 | if (obj->main_etat == 0 && obj->sub_etat == 2) 15 | { 16 | hp = obj->hit_points; 17 | if (hp != (obj->flags >> OBJ_FLIP_X & 1)) 18 | obj->flags = obj->flags & ~FLG(OBJ_FLIP_X) | (hp & 1) << OBJ_FLIP_X; 19 | } 20 | break; 21 | case GO_LEFT: 22 | case GO_RIGHT: 23 | if (obj->cmd == GO_LEFT) 24 | obj->flags &= ~FLG(OBJ_FLIP_X); 25 | else 26 | obj->flags |= FLG(OBJ_FLIP_X); 27 | SET_X_SPEED(obj); 28 | CALC_MOV_ON_BLOC(obj); 29 | break; 30 | } 31 | } -------------------------------------------------------------------------------- /include/obj/poing.h: -------------------------------------------------------------------------------- 1 | #ifndef POING_H 2 | #define POING_H 3 | 4 | #include "common.h" 5 | #include "collision/etat.h" 6 | 7 | typedef struct Poing 8 | { 9 | s32 field0_0x0; 10 | s16 field1_0x4; 11 | s16 speed_x; 12 | s16 charge; 13 | s16 field4_0xa; 14 | u8 sub_etat; 15 | u8 is_returning; 16 | u8 is_active; 17 | u8 damage; 18 | u8 is_charging; 19 | u8 is_boum; 20 | } Poing; 21 | 22 | /**/ 23 | extern s16 poing_obj_id; 24 | extern Poing poing; 25 | extern s16 id_obj_grapped; 26 | 27 | void fist_U_turn(Obj *obj, u8 param_2); 28 | void CALC_FIST_POS(void); 29 | void RAY_THROW_FIST(void); 30 | void RAY_PREPARE_FIST(void); 31 | void RAY_GROW_FIST(void); 32 | void fin_poing_follow(Obj *poing_obj, u8 param_2); 33 | void POING_FOLLOW(Obj *poing_obj); 34 | void alter_fist_speed(Obj *obj); 35 | void switch_off_fist(Obj *obj); 36 | void DO_POING(Obj *obj); 37 | void allocatePoingBoum(void); 38 | 39 | #endif -------------------------------------------------------------------------------- /src/data/menu/menu_card_9ED48.c: -------------------------------------------------------------------------------- 1 | #include "menu/menu_card_7C028.h" 2 | 3 | u8 *PS1_CardStrings[] = 4 | { 5 | "/do you have a memory card?/", 6 | "/insert card now/and press x button to save/", 7 | "/no saves will be possible/", 8 | "/your memory card is not formatted/do you want to format it?/", 9 | "/your memory card is not formatted/no saves will be possible/", 10 | "/only ? slots are available/in your memory card/you will have only ? saved games/", 11 | "/your memory card is full/no saves will be possible/", 12 | "/memory card ok/", 13 | "/the memory card has changed/replace the initial memory card/and press x button/", 14 | "/do you really want to erase/this game?/", 15 | "/do you really want to erase/the previously saved game?/", 16 | "/do you really want/to quit the game?/", 17 | "/please insert/a standard sony playstation controller/into port 1/" 18 | }; 19 | u8 data_801c357c[4] = {}; -------------------------------------------------------------------------------- /src/obj/superhelico_init.c: -------------------------------------------------------------------------------- 1 | #include "obj/superhelico_init.h" 2 | 3 | /* 3EECC 801636CC -O2 */ 4 | void allocateSupHelico(Obj *mus_obj) 5 | { 6 | s16 i = 0; 7 | Obj *cur_obj = &level.objects[i]; 8 | s16 nb_objs = level.nb_objects; 9 | 10 | while (i < nb_objs) 11 | { 12 | if (cur_obj->type == TYPE_SUPERHELICO && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 13 | { 14 | cur_obj->flags |= FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE); 15 | cur_obj->x_pos = mus_obj->x_pos; 16 | cur_obj->y_pos = mus_obj->y_pos; 17 | set_main_and_sub_etat(cur_obj, 2, 18); 18 | cur_obj->screen_x_pos = cur_obj->x_pos - xmap; 19 | cur_obj->screen_y_pos = cur_obj->y_pos - ymap; 20 | cur_obj->speed_y = -2; 21 | cur_obj->speed_x = 1; 22 | calc_obj_pos(cur_obj); 23 | break; 24 | } 25 | cur_obj++; 26 | i++; 27 | } 28 | } -------------------------------------------------------------------------------- /include/draw/rollup_trans.h: -------------------------------------------------------------------------------- 1 | #ifndef ROLLUP_TRANS_H 2 | #define ROLLUP_TRANS_H 3 | 4 | #include "common.h" 5 | #include "common/display.h" 6 | #include "LIBGPU.H" 7 | #include "draw/draw_548CC.h" 8 | 9 | /* .data */ 10 | extern DVECTOR D_801CEDE4; 11 | extern DVECTOR D_801CEDE8; 12 | extern DVECTOR D_801CEDEC[2]; 13 | 14 | /**/ 15 | extern s16 PS1_RollUpPosition; 16 | extern SVECTOR D_801F3EC0[82]; 17 | extern SVECTOR D_801F56B8; 18 | extern VECTOR D_801F57D0; 19 | extern s16 D_801F84D8; 20 | extern s16 D_801F98F8; 21 | extern s16 D_801F9930; 22 | extern s16 D_801F9938; 23 | extern s32 D_801F6390; 24 | 25 | void FUN_8012d030(DVECTOR tpage_pos, DVECTOR param_2, s16 step_width, s16 step_height, s16 poly_count); 26 | void FUN_8012d27c(void); 27 | void FUN_8012d2b0(s16 start_pos); 28 | void PS1_RollUpTransition(s16 rollup_pos, s16 left_to_right); 29 | s16 PS1_RollUpRToL(void); 30 | s16 PS1_RollUpLToR(void); 31 | void FUN_8012da14(void); 32 | 33 | #endif -------------------------------------------------------------------------------- /src/data/draw/text_A29CC.c: -------------------------------------------------------------------------------- 1 | #include "draw/text_18118.h" 2 | 3 | u8 D_801C71CC[] = 4 | { 5 | 12, 24, 16, 16, 24, 24, 24, 24, 24, 24, 6 | 24, 24, 16, 24, 24, 24, 32, 24, 24, 24, 7 | 32, 24, 24, 24, 24, 24, 32, 32, 24, 32, 8 | 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 9 | 16, 24, 0, 0 10 | }; 11 | u8 D_801C71F8[] = 12 | { 13 | 10, 16, 16, 16, 16, 16, 16, 16, 16, 16, 14 | 16, 16, 8, 16, 16, 16, 24, 16, 16, 16, 15 | 16, 16, 16, 16, 16, 16, 24, 16, 16, 24, 16 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17 | 16, 24, 16, 24, 32, 0, 0, 0 18 | }; 19 | u8 D_801C7228[] = 20 | { 21 | 8, 10, 5, 6, 9, 9, 8, 8, 9, 8, 22 | 10, 9, 5, 9, 8, 7, 13, 9, 9, 9, 23 | 10, 9, 9, 8, 8, 8, 11, 11, 9, 11, 24 | 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 25 | 4, 5, 10, 11, 10, 11, 5, 0 26 | }; -------------------------------------------------------------------------------- /include/num_level_36260.h: -------------------------------------------------------------------------------- 1 | #ifndef NUM_LEVEL_36260_H 2 | #define NUM_LEVEL_36260_H 3 | 4 | #include "common.h" 5 | #include "common/ray.h" 6 | #include "common/world_map.h" 7 | #include "moteur_init_end.h" 8 | #include "world_map_677C0.h" 9 | #include "cam_scroll_340A4.h" 10 | #include "ray/ray_5D190.h" 11 | #include "main_moteur.h" 12 | #include "unknown/3F0B8.h" 13 | 14 | typedef struct FinBosslevel 15 | { 16 | u8 bzzit : 1; 17 | u8 moskito : 1; 18 | u8 mr_sax : 1; 19 | u8 mr_stone : 1; 20 | u8 viking_mama : 1; 21 | u8 space_mama : 1; 22 | u8 mr_skops : 1; 23 | u8 mr_dark : 1; 24 | 25 | u8 crazy_drummer : 1; 26 | u8 helped_joe_1 : 1; 27 | u8 helped_joe_2 : 1; 28 | u8 helped_musician : 1; 29 | } FinBosslevel; 30 | 31 | /**/ 32 | extern s16 departlevel; 33 | extern FinBosslevel finBosslevel; 34 | extern u8 fin_boss; 35 | 36 | void new_level_init(void); 37 | void fix_numlevel(Obj *obj); 38 | void TEST_SIGNPOST(void); 39 | 40 | #endif -------------------------------------------------------------------------------- /include/ray/ray_30A64.h: -------------------------------------------------------------------------------- 1 | #ifndef RAY_30A64_H 2 | #define RAY_30A64_H 3 | 4 | #include "common.h" 5 | #include "common/mapdata.h" 6 | #include "common/ray.h" 7 | #include "collision/collision.h" 8 | 9 | typedef struct StatusBar 10 | { 11 | s16 num_lives; 12 | u8 lives_digits[2]; 13 | u8 hp_sprites[2]; 14 | u8 num_wiz; 15 | u8 wiz_digits[2]; 16 | u8 max_hp; 17 | } StatusBar; 18 | 19 | /**/ 20 | extern StatusBar status_bar; 21 | extern s16 sbar_obj_id; 22 | extern u8 nb_wiz; 23 | extern u8 nb_wiz_collected; 24 | extern s16 special_ray_mov_win_x_left; /* TODO: goes in this file? */ 25 | extern s16 special_ray_mov_win_x_right; 26 | 27 | s16 RayCoince(s16 dir); 28 | void move_up_ray(void); 29 | void move_down_ray(void); 30 | void RecaleRayPosInJumelle(void); 31 | void RAY_TO_THE_RIGHT(void); 32 | void RAY_TO_THE_LEFT(void); 33 | void PS1_Ray_Cave_Vines_Slide(void); 34 | void TEST_FIN_FOLLOW(void); 35 | void RAY_FOLLOW(void); 36 | void DO_FIXE(void); 37 | 38 | #endif -------------------------------------------------------------------------------- /src/obj/cage_init.c: -------------------------------------------------------------------------------- 1 | #include "obj/cage_init.h" 2 | 3 | /* 361A0 8015A9A0 -O2 */ 4 | void allocateGrille(Obj *obj) 5 | { 6 | u8 nb_objs; 7 | s16 i; 8 | Obj *cur_obj; 9 | 10 | nb_objs = level.nb_objects; 11 | i = 0; 12 | cur_obj = level.objects; 13 | if (nb_objs != 0) 14 | { 15 | /* TODO: how to make this a matching for-loop? */ 16 | do 17 | { 18 | if (cur_obj->type == TYPE_CAGE2 && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 19 | { 20 | cur_obj->flags = cur_obj->flags | (FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE)); 21 | cur_obj->x_pos = obj->x_pos; 22 | cur_obj->y_pos = obj->y_pos; 23 | cur_obj->screen_x_pos = cur_obj->x_pos - xmap; 24 | cur_obj->screen_y_pos = cur_obj->y_pos - ymap; 25 | cur_obj->speed_y = -4; 26 | break; 27 | } 28 | i++; 29 | cur_obj++; 30 | } while (i < nb_objs); 31 | } 32 | } -------------------------------------------------------------------------------- /src/obj/flash_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/flash_command.h" 2 | 3 | /* 4D1F4 801719F4 -O2 -msoft-float */ 4 | void DO_FLASH_COMMAND(Obj *obj) 5 | { 6 | obj->init_x_pos += obj->iframes_timer; 7 | while (__builtin_abs(obj->init_x_pos) >= 128) 8 | { 9 | if (obj->iframes_timer > 0) 10 | { 11 | obj->x_pos++; 12 | obj->init_x_pos -= 128; 13 | } 14 | else 15 | { 16 | obj->x_pos--; 17 | obj->init_x_pos += 128; 18 | } 19 | } 20 | 21 | obj->init_y_pos = obj->init_y_pos + obj->field20_0x36; 22 | while (__builtin_abs(obj->init_y_pos) >= 128) 23 | { 24 | if (obj->field20_0x36 > 0) 25 | { 26 | obj->y_pos++; 27 | obj->init_y_pos -= 128; 28 | } 29 | else 30 | { 31 | obj->y_pos--; 32 | obj->init_y_pos += 128; 33 | } 34 | } 35 | 36 | calc_obj_pos(obj); 37 | obj->anim_frame = obj->hit_points - 1; 38 | } 39 | -------------------------------------------------------------------------------- /include/moteur_update.h: -------------------------------------------------------------------------------- 1 | #ifndef MOTEUR_UPDATE_H 2 | #define MOTEUR_UPDATE_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "common/ray.h" 8 | #include "common/rayevts.h" 9 | #include "common/world_map.h" 10 | #include "world_map_95CC.h" 11 | #include "ray/ray_5D190.h" 12 | #include "cam_scroll_340A4.h" 13 | #include "main_moteur.h" 14 | #include "unknown/29A18.h" 15 | 16 | /**/ 17 | extern Obj *star_ray_der; 18 | extern Obj *star_ray_dev; 19 | extern s16 ray_wind_force; 20 | extern s16 weather_wind; 21 | extern s16 PS1_StartMoteurRayX; 22 | extern s16 PS1_StartMoteurRayY; 23 | extern u8 PS1_MoteurTime; 24 | extern u8 oldPrio; 25 | extern s16 ray_old_main_etat; 26 | extern s16 ray_old_sub_etat; 27 | extern s16 xmap_old; 28 | extern s16 ymap_old; 29 | extern s16 reduced_rayman_id; 30 | extern u8 D_801F57F0; 31 | 32 | void PS1_SetWindForce(void); 33 | void DO_MOTEUR(void); 34 | void DO_MOTEUR2(void); 35 | void RAY_REVERSE_COMMANDS(void); 36 | void RAY_DEMIRAY(void); 37 | void DO_MOTEUR_GELE(void); 38 | void FUN_8015a764(void); 39 | 40 | #endif -------------------------------------------------------------------------------- /src/obj/rayon.c: -------------------------------------------------------------------------------- 1 | #include "obj/rayon.h" 2 | 3 | /* 3EFC4 801637C4 -O2 -msoft-float */ 4 | void allocatePaillette(Obj *ray_obj) 5 | { 6 | Obj *found_obj = null; 7 | s16 i = 0; 8 | Obj *cur_obj = &level.objects[i]; 9 | s16 nb_objs = level.nb_objects; 10 | 11 | while (i < nb_objs) 12 | { 13 | if (cur_obj->type == TYPE_RAYON && !(cur_obj->flags & 0x800)) 14 | { 15 | found_obj = cur_obj; 16 | break; 17 | } 18 | i++; 19 | cur_obj++; 20 | } 21 | 22 | if (!found_obj) 23 | found_obj = findfirstObject(TYPE_RAYON); 24 | 25 | found_obj->flags |= FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE); 26 | found_obj->flags &= ~FLG(OBJ_FLAG_9); 27 | found_obj->active_timer = 0; 28 | found_obj->x_pos = ray_obj->x_pos - 40; 29 | found_obj->y_pos = ray_obj->y_pos - 20; 30 | found_obj->anim_index = 0; 31 | found_obj->anim_frame = 1; 32 | found_obj->main_etat = 0; 33 | found_obj->init_main_etat = 0; 34 | found_obj->init_sub_etat = 0; 35 | found_obj->sub_etat = 0; 36 | calc_obj_pos(found_obj); 37 | } 38 | -------------------------------------------------------------------------------- /include/snow.h: -------------------------------------------------------------------------------- 1 | #ifndef SNOW_H 2 | #define SNOW_H 3 | 4 | #include "common.h" 5 | #include "collision/block_22C84.h" 6 | 7 | typedef struct FloconTableEntry 8 | { 9 | s16 field0_0x0; 10 | s16 field1_0x2; 11 | s16 field2_0x4; 12 | u8 field3_0x6; 13 | u8 field4_0x7; 14 | } FloconTableEntry; 15 | 16 | /**/ 17 | extern s16 floc_ind[8]; 18 | extern FloconTableEntry flocon_tab[512]; 19 | extern s16 nb_floc[8]; 20 | extern s16 VENT_X; 21 | extern s16 VENT_Y; 22 | extern s16 tot_nb_flocs[8]; 23 | extern s16 invpx0[8]; 24 | extern s16 invpx320[8]; 25 | extern s16 invpy0[8]; 26 | extern s16 invpy200[8]; 27 | extern s16 SNSEQ_len[64]; 28 | extern s16 SNSEQ_no; 29 | extern s16 SNSEQ_ptr; 30 | extern s16 SNSEQ_list[256]; 31 | extern s16 SNSEQ_list_ptr; 32 | 33 | void add_one_floc(void); 34 | void add_256_flocs(void); 35 | void sub_one_floc(void); 36 | void init_flocons(void); 37 | void do_flocons(s16 in_x_map, s16 in_y_map, s16 in_x_map_old, s16 in_y_map_old); 38 | void set_snow_sequence(u16 param_1, s16 param_2); /* param_1 likely s16, therefore SNSEQ_list also s16? */ 39 | void set_SNSEQ_list(s16 param_1); 40 | void DO_SNOW_SEQUENCE(void); 41 | 42 | #endif -------------------------------------------------------------------------------- /include/main_moteur.h: -------------------------------------------------------------------------------- 1 | #ifndef MAIN_MOTEUR_H 2 | #define MAIN_MOTEUR_H 3 | 4 | #include "common.h" 5 | #include "common/display.h" 6 | #include "common/record.h" 7 | #include "cheats.h" 8 | #include "draw/draw_14FF4.h" 9 | #include "input_ED20.h" 10 | #include "obj/fee_3D76C.h" 11 | #include "music.h" 12 | #include "vignet.h" 13 | #include "moteur_init_end.h" 14 | #include "unknown/A3B0.h" 15 | 16 | /* .data */ 17 | extern RECT PS1_MemoryUsageRects[2]; 18 | 19 | /* .data */ 20 | extern RECT *PTR_PS1_MemoryUsageRect_801cee70; 21 | extern u8 PS1_MemoryUsageDisplayMode; 22 | 23 | /* .data */ 24 | extern u8 in_pause; 25 | extern u8 PS1_Ingame; 26 | extern RaymanEvents D_801CEE84; 27 | extern RaymanEvents D_801CEE88; 28 | extern RaymanEvents D_801CEE8C; 29 | extern RaymanEvents D_801CEE90; 30 | extern RaymanEvents D_801CEE94; 31 | extern RaymanEvents PS1_DefaultRayEvts; /* originally in include/main.h */ 32 | extern s16 D_801CEE9A; 33 | extern s16 D_801CEE9C; 34 | extern s16 PS1_CanPlayDeathMusic; 35 | extern s16 D_801CEEA0; 36 | extern u8 D_801CEEA2; 37 | 38 | /**/ 39 | extern u8 gele; 40 | 41 | void DO_GROS_MOTEUR_NORMAL(void); 42 | void DO_MAIN_LOOP(void); 43 | 44 | #endif -------------------------------------------------------------------------------- /include/obj/dark_phase2.h: -------------------------------------------------------------------------------- 1 | #ifndef DARK_PHASE2_H 2 | #define DARK_PHASE2_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "collision/etat.h" 7 | #include "obj/fire.h" 8 | #include "obj/dark2_pink_fly.h" 9 | 10 | /* .rodata */ 11 | extern const u8 s_youre_doomed_rayman__8012c1e4[27]; 12 | 13 | /**/ 14 | extern Obj *dark_obj; 15 | extern s16 phase_dark2; 16 | extern u8 TextDark2_Affiche; 17 | extern s16 XText; 18 | extern s16 YText; 19 | extern s16 temps_text; 20 | extern u8 txt_dark2[104]; 21 | extern s16 dark2_rayon_dx_1; 22 | extern s16 dark2_rayon_dx_2; 23 | extern s16 dark2_rayon_dy_1; 24 | extern s16 dark2_rayon_dy_2; 25 | extern s16 PosXSin1; 26 | extern s16 PosYSin1; 27 | extern s16 PosXSin2; 28 | extern s16 PosYSin2; 29 | extern s16 VitesseYText; 30 | extern u8 num_dark2_phrase; 31 | extern u8 sens_sinus_1; 32 | extern u8 sens_sinus_2; 33 | extern u8 sinus_actif; 34 | 35 | void AllocateDarkPhase2(Obj *mr_drk_obj); 36 | void DO_DARK2_AFFICHE_TEXT(void); 37 | void DO_DARK_PHASE2_COMMAND(Obj *dp2_obj); 38 | void DO_DARK2_SORT_COMMAND(Obj *ds2_obj); 39 | void allocate_DARK2_SORT(s32 param_1, s16 param_2, s16 param_3, s16 param_4); 40 | 41 | #endif -------------------------------------------------------------------------------- /src/obj/stoneman_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/stoneman_command.h" 2 | 3 | /* 48F74 8016D774 -O2 -msoft-float */ 4 | void DO_STONEMAN_COMMAND(Obj *obj) 5 | { 6 | switch (obj->cmd) 7 | { 8 | case GO_LEFT: 9 | case GO_RIGHT: 10 | if (obj->cmd == GO_LEFT) 11 | obj->flags &= ~FLG(OBJ_FLIP_X); 12 | else 13 | obj->flags |= FLG(OBJ_FLIP_X); 14 | 15 | SET_X_SPEED(obj); 16 | if (obj->main_etat == 0) 17 | set_main_and_sub_etat(obj, 1, 0); 18 | 19 | if (block_flags[calc_typ_travd(obj, false)] >> BLOCK_FULLY_SOLID & 1) 20 | { 21 | if (obj->cmd == GO_LEFT) 22 | { 23 | obj->flags = obj->flags | FLG(OBJ_FLIP_X); 24 | skipToLabel(obj, 5, true); 25 | } 26 | else 27 | { 28 | obj->flags = obj->flags & ~FLG(OBJ_FLIP_X); 29 | skipToLabel(obj, 4, true); 30 | } 31 | 32 | obj->x_pos -= obj->speed_x; 33 | } 34 | SET_X_SPEED(obj); 35 | CALC_MOV_ON_BLOC(obj); 36 | break; 37 | default: 38 | break; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /include/menu/menu_6A3BC.h: -------------------------------------------------------------------------------- 1 | #ifndef MENU_6A3BC_H 2 | #define MENU_6A3BC_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/ray.h" 7 | #include "menu/menu_7EEE4.h" 8 | #include "menu/menu_7F4B4.h" 9 | #include "obj/dark_729F0.h" 10 | #include "ray/ray_32398.h" 11 | 12 | /* .data */ 13 | extern s32 PS1_Button_Text_Square; 14 | extern s32 PS1_Button_Text_Cross; 15 | extern s32 PS1_Button_Text_Triangle; 16 | extern s32 PS1_Button_Text_Circle; 17 | 18 | /**/ 19 | extern Obj clock_obj; 20 | extern s16 loop_timing; 21 | extern u8 nb_continue; 22 | extern u8 Etape_History; 23 | extern u8 fin_continue; 24 | extern Obj bigray; 25 | 26 | void INIT_NEW_GAME(void); 27 | void POINTEUR_BOUTONS_OPTIONS_BIS(void); 28 | void PS1_DisplayPadButton(s16 button, s16 x, s16 y, u8 font_size, u8 param_5); 29 | void INIT_CONTINUE(void); 30 | void CHEAT_MODE_CONTINUE(void); 31 | void MAIN_CONTINUE_PRG(void); 32 | void FIN_CONTINUE_PRG(void); 33 | void MAIN_NO_MORE_CONTINUE_PRG(void); 34 | void INIT_VIGNET(void); 35 | void INIT_CREDITS(void); 36 | void DO_CREDITS(void); 37 | void INIT_LOADER_ANIM(void); 38 | void DO_LOADER_ANIM(void); 39 | void SPECIAL_INIT(void); 40 | 41 | #endif -------------------------------------------------------------------------------- /include/menu/menu_card_7C028.h: -------------------------------------------------------------------------------- 1 | #ifndef MENU_CARD_7C028_H 2 | #define MENU_CARD_7C028_H 3 | 4 | #include "common.h" 5 | #include "sound.h" 6 | #include "synchro_loop.h" 7 | #include "unknown/5C2BC.h" 8 | 9 | /* .data */ 10 | extern u8 *PS1_CardStrings[13]; 11 | 12 | /* .data */ 13 | extern u8 s_yes_801cf0f4[6]; 14 | extern u8 s_no_801cf0fc[5]; 15 | extern u8 D_801CF101; 16 | 17 | /**/ 18 | extern u8 NBRE_SAVE; 19 | extern u8 PS1_positiony_mc; 20 | extern u8 PS1_CardStringDisplayed; 21 | extern s16 PS1_compteur_mc; 22 | extern u8 PS1_DisplayCardContinueText; 23 | extern u8 PS1_NoCard; 24 | extern u8 D_801E5238; 25 | 26 | void PS1_PromptCardInput(void); 27 | s16 PS1_PromptCardYesNo(void); 28 | s16 PS1_PromptCardContinue(void); 29 | s16 PS1_PleaseInsertPad(void); 30 | void PS1_CheckCardChanged(void); 31 | void FUN_801a0c68(void); 32 | void PS1_SetNoCard(void); 33 | void PS1_DoYouHaveCard(void); 34 | void PS1_PromptCardFormat(void); 35 | void PS1_GetNbreSave1(void); 36 | void FUN_801a10a4(void); 37 | s16 PS1_ReadingMemoryCard(void); 38 | void FUN_801a1110(void); 39 | void PS1_PromptPad(void); 40 | void PS1_PromptCardErase(void); 41 | u8 PS1_PromptSaveWldMap(void); 42 | u8 PS1_PromptQuit(void); 43 | 44 | #endif -------------------------------------------------------------------------------- /src/continue.c: -------------------------------------------------------------------------------- 1 | #include "continue.h" 2 | 3 | #ifdef BSS_DEFS 4 | u8 fin_dark; 5 | #endif 6 | 7 | /* 9424 8012DC24 -O2 -msoft-float */ 8 | s16 continue_fonction(void) 9 | { 10 | s16 done = false; 11 | 12 | DO_FADE(); 13 | CLRSCR(); 14 | DISPLAY_FOND_CONTINUE(); 15 | DISPLAY_CONTINUE_SPR(); 16 | MAIN_CONTINUE_PRG(); 17 | readinput(); 18 | 19 | if (loop_timing == -1 || fin_continue) 20 | done = true; 21 | return done; 22 | } 23 | 24 | /* 949C 8012DC9C -O2 -msoft-float */ 25 | void DO_CONTINUE(void) 26 | { 27 | if (status_bar.num_lives == 0 && fin_du_jeu == true && !fin_dark) 28 | { 29 | if (ray_mode == MODE_MORT_DE_RAYMAN_ON_MS || RayEvts.demi) 30 | { 31 | NewMs = true; 32 | __builtin_memcpy(&ray, &rms, sizeof(Obj)); 33 | ray_mode = MODE_RAYMAN; 34 | RayEvts.demi = false; 35 | } 36 | LOAD_CONTINUE_SCREEN(); 37 | start_cd_gameover(); 38 | INIT_FADE_IN(); 39 | INIT_CONTINUE(); 40 | SYNCHRO_LOOP(continue_fonction); 41 | DO_FADE_OUT(); 42 | FIN_CONTINUE_PRG(); 43 | stop_cd(); 44 | stop_all_snd(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/obj/walk_note_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/walk_note_command.h" 2 | 3 | /* 4D7DC 80171FDC -O2 */ 4 | void DO_WLKNOT_COMMAND(Obj *obj) 5 | { 6 | s16 bx; s16 by; 7 | 8 | switch (obj->cmd) 9 | { 10 | case GO_WAIT: 11 | SET_X_SPEED(obj); 12 | CALC_MOV_ON_BLOC(obj); 13 | break; 14 | case GO_LEFT: 15 | case GO_RIGHT: 16 | if (obj->cmd == GO_LEFT) 17 | obj->flags &= ~FLG(OBJ_FLIP_X); 18 | else 19 | obj->flags |= FLG(OBJ_FLIP_X); 20 | SET_X_SPEED(obj); 21 | CALC_MOV_ON_BLOC(obj); 22 | break; 23 | } 24 | 25 | if (obj->speed_x != 0) 26 | { 27 | bx = obj->offset_bx; 28 | by = obj->offset_by - 8; 29 | if ((s16) test_allowed(obj, bx, by) && (s16) on_block_chdir(obj, bx, by)) 30 | { 31 | if (!(obj->flags & FLG(OBJ_FLIP_X))) 32 | { 33 | obj->flags |= FLG(OBJ_FLIP_X); 34 | skipToLabel(obj, 2, true); 35 | } 36 | else 37 | { 38 | obj->flags &= ~FLG(OBJ_FLIP_X); 39 | skipToLabel(obj, 1, true); 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /include/psyq_3_0_missing/LIBAPI.H: -------------------------------------------------------------------------------- 1 | #ifndef _MISSING_LIBAPI_H_ 2 | #define _MISSING_LIBAPI_H_ 3 | 4 | extern long OpenEvent(unsigned long,long,long,long (*func)()); 5 | extern long TestEvent(long); 6 | extern long EnableEvent(long); 7 | 8 | extern long open(char *, unsigned long); 9 | extern long close(long); 10 | extern long read(long, void *, long); 11 | extern long write(long, void *, long); 12 | extern struct DIRENTRY * firstfile(char *, struct DIRENTRY *); 13 | extern struct DIRENTRY * nextfile(struct DIRENTRY *); 14 | extern long delete(char *); /* named "erase" in later psyq? */ 15 | 16 | extern long format(char *); 17 | 18 | extern long InitPAD(char *,long ,char *,long); 19 | extern long StartPAD(void); 20 | extern void StopPAD(void); 21 | 22 | extern int EnterCriticalSection(void); 23 | extern void ExitCriticalSection(void); 24 | 25 | extern void _96_remove(void); 26 | 27 | extern void ChangeClearPAD( long ); 28 | 29 | extern void InitCARD(long val); 30 | extern long StartCARD(void); 31 | extern void _bu_init(void); 32 | extern long _card_info(long chan); 33 | extern long _card_clear(long chan); 34 | extern long _card_load(long chan); 35 | extern long _card_auto(long val); 36 | 37 | #endif -------------------------------------------------------------------------------- /src/obj/joe_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/joe_command.h" 2 | 3 | #ifdef BSS_DEFS 4 | s16 joe_exp_probleme; 5 | s16 prise_branchee; 6 | s16 vignet_joe_affichee; 7 | #endif 8 | 9 | /* 50588 80174D88 -O2 -msoft-float */ 10 | void DO_JOE_COMMAND(Obj *obj) 11 | { 12 | if (joe_exp_probleme && obj->main_etat == 0) 13 | { 14 | if (obj->sub_etat == 10) 15 | vignet_joe_affichee = true; 16 | 17 | if (obj->main_etat == 0 && obj->sub_etat == 1) 18 | { 19 | if (vignet_joe_affichee) 20 | { 21 | Vignet_To_Display = 1; 22 | vignet_joe_affichee = false; 23 | finBosslevel.helped_joe_1 = true; 24 | obj->timer = 0; 25 | } 26 | 27 | obj->timer++; 28 | if (obj->timer > 100) 29 | { 30 | ChangeLevel(); 31 | RayEvts.luciole = true; 32 | } 33 | } 34 | } 35 | 36 | if (num_level == 8) 37 | { 38 | if (prise_branchee) 39 | { 40 | if (obj->main_etat == 0 && obj->sub_etat == 1) 41 | skipToLabel(obj, 3, true); 42 | } 43 | else 44 | obj->flags &= ~FLG(OBJ_ALIVE); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /include/collision/bit_util.h: -------------------------------------------------------------------------------- 1 | #ifndef BIT_UTIL_H 2 | #define BIT_UTIL_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "collision/block_22C84.h" 8 | 9 | /* TODO: is this related with collision at all? */ 10 | 11 | /* .data */ 12 | extern s16 costab[258]; /* size correct? */ 13 | 14 | /**/ 15 | extern s32 saveobj[16]; 16 | 17 | void set2bits(s32 *param_1, u8 pos, s32 param_3); 18 | void read2bits(s32 *value, u8 pos, s32 *b1, s32 *b0); 19 | void save_objects_flags(void); 20 | void restore_objects_flags(void); 21 | void snapToSprite(Obj *obj_1, Obj *obj_2, u8 obj_2_spr, s32 x_offs, u16 y_offs); 22 | Obj *findfirstObject(ObjType obj_type); 23 | Obj *findfirstInactiveObject(ObjType param_1); 24 | void setbit(u8 *buffer, u16 index); 25 | void clearbit(u8 *buffer, u16 index); 26 | u8 getbit(u8 *buffer, u16 index); 27 | s16 cosinus(s16 param_1); 28 | s16 sinus(s16 param_1); 29 | s16 sinYspeed(Obj *obj, s32 param_2, s16 param_3, s16 *param_4); 30 | s32 ashl16(s16 value, u8 shift); /* s32? says itself, MOVE_OBJECT*/ 31 | s16 ashr16(s16 value, u8 shift); /* get_offset_in_save_zone and calc_btyp_square made me check return type */ 32 | s32 ashl32(s32 value, u8 shift); 33 | s32 ashr32(s32 value, u8 shift); 34 | 35 | #endif -------------------------------------------------------------------------------- /src/unknown/29F3C.c: -------------------------------------------------------------------------------- 1 | #include "unknown/29F3C.h" 2 | 3 | /* 29F3C 8014E73C -O2 -msoft-float */ 4 | void allocateLandingSmoke(Obj *in_obj) 5 | { 6 | s16 i; 7 | s16 j; 8 | Obj *cur_obj; 9 | s16 nb_objs; 10 | 11 | for (i = 0; i <= 2; i += 2) 12 | { 13 | cur_obj = &level.objects[0]; 14 | nb_objs = level.nb_objects; 15 | j = 0; 16 | while (j < nb_objs) 17 | { 18 | if (cur_obj->type == TYPE_LANDING_SMOKE && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 19 | { 20 | cur_obj->flags |= FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE); 21 | cur_obj->active_timer = 0; 22 | cur_obj->active_flag = ACTIVE_ALIVE; 23 | set_main_and_sub_etat(cur_obj, 0, i != 0); 24 | cur_obj->x_pos = in_obj->x_pos + in_obj->offset_bx - cur_obj->offset_bx; 25 | cur_obj->y_pos = in_obj->y_pos + in_obj->offset_by - cur_obj->offset_by; 26 | if (i != 0) 27 | cur_obj->display_prio = 2; 28 | else 29 | cur_obj->display_prio = 7; 30 | calc_obj_pos(cur_obj); 31 | break; 32 | } 33 | cur_obj++; 34 | j++; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/obj/explosion.c: -------------------------------------------------------------------------------- 1 | #include "obj/explosion.h" 2 | 3 | /* 3A9EC 8015F1EC -O2 -msoft-float */ 4 | Obj *allocateExplosion(Obj *unk_obj) 5 | { 6 | Obj *res = null; 7 | s16 i = 0; 8 | Obj *cur_obj = &level.objects[i]; 9 | s16 nb_objs = level.nb_objects; 10 | 11 | while (i < nb_objs) 12 | { 13 | if (cur_obj->type == TYPE_EXPLOSION && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 14 | { 15 | set_main_and_sub_etat(cur_obj, 0, 0); 16 | cur_obj->flags |= FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE); 17 | cur_obj->x_pos = unk_obj->x_pos + unk_obj->offset_bx - cur_obj->offset_bx; 18 | cur_obj->y_pos = unk_obj->y_pos + unk_obj->offset_by - cur_obj->offset_by + 10; 19 | calc_obj_pos(cur_obj); 20 | cur_obj->anim_index = cur_obj->eta[cur_obj->main_etat][cur_obj->sub_etat].anim_index; 21 | cur_obj->anim_frame = 0; 22 | cur_obj->change_anim_mode = ANIMMODE_RESET; 23 | res = cur_obj; 24 | break; 25 | } 26 | cur_obj++; 27 | i++; 28 | } 29 | return res; 30 | } 31 | 32 | /* 3AB20 8015F320 -O2 -msoft-float */ 33 | void BombExplosion(Obj *obj) 34 | { 35 | allocateExplosion(obj); 36 | obj->flags &= ~FLG(OBJ_ACTIVE); 37 | obj->flags &= ~FLG(OBJ_ALIVE); 38 | } 39 | -------------------------------------------------------------------------------- /include/loading_DA64.h: -------------------------------------------------------------------------------- 1 | #ifndef LOADING_DA64_H 2 | #define LOADING_DA64_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "common/ray.h" 8 | #include "common/mapdata.h" 9 | #include "draw/draw_14FF4.h" 10 | #include "obj_update.h" 11 | #include "loading_794DC.h" 12 | #include "draw/draw_hud.h" 13 | #include "gendoor.h" 14 | #include "draw/fond_10B3C.h" 15 | 16 | typedef struct Font 17 | { 18 | Sprite *sprites; 19 | u8 *img_buffer; 20 | s32 nb_sprites; 21 | } Font; 22 | 23 | typedef struct AllFixData 24 | { 25 | Font alpha; 26 | Font alpha2; 27 | Obj objects[29]; 28 | } AllFixData; 29 | 30 | /**/ 31 | extern AllFixData *PS1_AllFixData; 32 | extern Font alpha; 33 | extern Font alpha2; 34 | extern s16 D_801D7A60; 35 | extern s16 D_801F8188; 36 | extern s16 D_801F84A8; 37 | extern void *D_801F7E90; /* see loading_794DC, type? Obj * based on FUN_80132424? */ 38 | extern s32 D_801D7868[2]; /* TODO: type? should be struct? first 4 bytes are pointer, next 4 bytes??? */ 39 | 40 | void PS1_LoadLevelMapBlock(MapData *data); 41 | void FUN_80132304(u32 *data, u8 height); 42 | void FUN_8013234c(u8 *param_1); 43 | void FUN_80132424(void); 44 | void PS1_LoadAllFixData(void); 45 | void PS1_LoadLevelObjBlock(void); 46 | void FUN_80132864(s16 param_1); 47 | 48 | #endif -------------------------------------------------------------------------------- /include/loading_tex.h: -------------------------------------------------------------------------------- 1 | #ifndef LOADING_TEX_H 2 | #define LOADING_TEX_H 3 | 4 | #include "common.h" 5 | #include "common/world_map.h" 6 | #include "vram.h" 7 | 8 | /* .data */ 9 | extern s16 D_801C4468[8]; 10 | 11 | /**/ 12 | extern s32 D_801E4D30; 13 | extern s16 D_801E5930; 14 | extern s16 D_801E63D0; 15 | extern s32 D_801E4D28; 16 | extern s16 D_801E5928; 17 | extern s16 D_801E63C8; 18 | extern s32 D_801E4D78; 19 | extern s16 D_801E5A08; 20 | extern s16 D_801E6410; 21 | extern s16 D_801E5558; 22 | extern s16 D_801E59B8; 23 | /* used as FileInfo::dest 24 | in blocks of 0x15800 (LOAD_CREDITS_VIGNET)? 25 | in blocks of 0x19000 ((unused) FUN_8019ebc0)? */ 26 | /* 801f4380 is passed at 801807ec as LoadImage param_2, also used as some FileInfo.dest's see 8019df64, frequently points to &DAT_8005866c*/ 27 | extern u8 *D_801F4380; 28 | extern void *D_801F8190; 29 | /* see fond_10B3C */ 30 | extern u16 D_801F5440; 31 | extern u16 D_801F55D8; 32 | 33 | void FUN_801392d8(s32 param_1, s16 *param_2, s16 *param_3); 34 | void FUN_80139330(u32 param_1, s16 *param_2, s16 *param_3); 35 | void FUN_801393c8(s32 param_1); 36 | void PS1_LoadAllFixTextures(s32 length); 37 | void FUN_8013948c(s32 param_1); 38 | void FUN_80139514(s32 param_1); 39 | void FUN_801395a8(s32 param_1); 40 | void FUN_80139624(s32 param_1); 41 | void FUN_80139688(s32 tile_set_size); 42 | 43 | #endif -------------------------------------------------------------------------------- /src/ray/angle_rayman.c: -------------------------------------------------------------------------------- 1 | #include "ray/angle_rayman.h" 2 | 3 | /* 3AC88 8015F488 -O2 -msoft-float */ 4 | s16 ANGLE_RAYMAN(Obj *obj) 5 | { 6 | s16 x; 7 | s16 y; 8 | u8 x_gt_0; 9 | u8 y_gt_0; 10 | u8 tab_val; 11 | s16 res; 12 | 13 | x = ray.offset_bx + (ray.x_pos - obj->x_pos - obj->offset_bx); 14 | y = ray.offset_by + (ray.y_pos - obj->y_pos - obj->offset_by); 15 | x_gt_0 = x > 0; 16 | y_gt_0 = y > 0; 17 | if (!x_gt_0) 18 | x = -x; 19 | if (!y_gt_0) 20 | y = -y; 21 | 22 | if (x > 200) 23 | { 24 | x = x >> 1; 25 | y = y >> 1; 26 | } 27 | 28 | if (y == 0) 29 | { 30 | if (x_gt_0) 31 | res = 384; 32 | else 33 | res = 128; 34 | } 35 | else 36 | { 37 | if (x < y) 38 | tab_val = angletab[(s16) ((x * 64) / y)]; 39 | else 40 | tab_val = 128 - angletab[(s16) ((y * 64) / x)]; 41 | if (x_gt_0) 42 | { 43 | if (y_gt_0) 44 | res = 384 - tab_val; 45 | else 46 | res = 384 + tab_val; 47 | } 48 | else 49 | { 50 | if (y_gt_0) 51 | res = 128 + tab_val; 52 | else 53 | res = 128 - tab_val; 54 | } 55 | } 56 | return res; 57 | } -------------------------------------------------------------------------------- /include/boss.h: -------------------------------------------------------------------------------- 1 | #ifndef BOSS_H 2 | #define BOSS_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/mapdata.h" 7 | #include "timers.h" 8 | #include "moteur_init_end.h" 9 | 10 | /**/ 11 | extern Obj *PS1_BossObj; 12 | 13 | extern s16 bossScrollStartX; 14 | extern s16 bossScrollStartY; 15 | extern s16 bossScrollEndX; 16 | extern s16 bossScrollEndY; 17 | extern s16 floorLine; 18 | extern s32 bossSpeedFactor; 19 | extern s32 alternateBossSpeedFactor; 20 | 21 | extern u8 bossEncounter; 22 | extern u8 saveBossEncounter; 23 | extern u8 bossReachingAccuracyX; 24 | extern u8 bossReachingAccuracyY; 25 | extern u8 bossReachingTimer; 26 | extern u8 bossSafeTimer; 27 | extern s16 bossXToReach; 28 | extern s16 bossYToReach; 29 | 30 | extern u8 curAct; 31 | extern u8 currentBossAction; 32 | extern u8 saveCurrentBossAction; 33 | extern u8 currentBossActionIsOver; 34 | 35 | extern u8 Phase; 36 | extern u8 WaitForFinAtan; 37 | extern u8 FinAnim; 38 | extern u8 WaitForAnim; 39 | 40 | void setBossReachingSpeeds(Obj *obj, u8 param_2, u8 param_3, u8 param_4); /* TODO: should this always be called with param_2 etc: bossReachingTimer, bossReachingAccuracyX, bossReachingAccuracyY??? */ 41 | s16 testActionEnd(Obj *obj); 42 | void FUN_8018b78c(s16 *param_1, s16 *param_2, s16 *param_3, s16 *param_4, u8 param_5); 43 | s16 firstFloorBelow(Obj *obj); 44 | 45 | #endif -------------------------------------------------------------------------------- /include/collision/block_22C84.h: -------------------------------------------------------------------------------- 1 | #ifndef BLOCK_22C84_H 2 | #define BLOCK_22C84_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/world_map.h" 7 | #include "common/ray.h" 8 | #include "common/rayevts.h" 9 | #include "common/mapdata.h" 10 | #include "collision/bit_util.h" 11 | #include "collision/etat.h" 12 | 13 | /* .data */ 14 | extern s16 RandArray[256]; 15 | 16 | /**/ 17 | extern u8 ray_last_ground_btyp; /* bool or enum with only 0 and 1, not sure*/ 18 | extern u16 PS1_RandSum; 19 | extern s16 RandomIndex; 20 | 21 | s16 get_center_x(Obj *obj); 22 | s16 get_center_y(Obj *obj); 23 | s16 on_block_chdir(Obj *obj, s16 offs_bx, s16 offs_by); 24 | void CALC_FOLLOW_SPRITE_SPEED(Obj *obj, Animation *anim_1, Animation *anim_2, s16 anim_frame_2); 25 | s16 GET_SPRITE_POS(Obj *obj, s16 index, s16 *x, s16 *y, s16 *w, s16 *h); 26 | void GET_RAY_ZDC(Obj *ray, s16 *x, s16 *y, s16 *w, s16 *h); 27 | void GET_BB1_ZDCs(Obj *obj, s16 *x_1, s16 *y_1, s16 *w_1, s16 *h_1, s16 *x_2, s16 *y_2, s16 *w_2, s16 *h_2); 28 | s32 myRand(s16 max_incl); /* ret: s32 (based on DO_MAIN_LOOP?) */ 29 | void calc_obj_dir(Obj *obj); 30 | s16 OBJ_IN_ZONE(Obj *obj); 31 | void calc_obj_pos(Obj *obj); 32 | void makeUturn(Obj *obj); 33 | u16 BTYP(s16 x, s16 y); 34 | void calc_btyp_square(Obj *obj); 35 | void DO_OBJ_REBOND_EN_X(Obj *obj); 36 | u32 calc_btyp(Obj *obj); 37 | 38 | #endif -------------------------------------------------------------------------------- /src/demo_7F2BC.c: -------------------------------------------------------------------------------- 1 | #include "demo_7F2BC.h" 2 | 3 | const u8 s_press_start_or_x_button_8012c468[] = "/press start or x button/"; 4 | 5 | #ifdef BSS_DEFS 6 | s32 TempsDemo; 7 | #endif 8 | 9 | /* 7F2BC 801A3ABC -O1, -O2 */ 10 | void PS1_ShowDemoText(void) 11 | { 12 | display_text(s_start_801cf118, 160, 180, 1, 144); 13 | display_text(s_press_start_or_x_button_8012c468, 160, 203, 2, 10); 14 | } 15 | 16 | /* 7F314 801A3B14 -O1 -O2 */ 17 | s16 PS1_DemoLoop(void) 18 | { 19 | u8 done; 20 | 21 | done = false; 22 | DISPLAY_FOND3(); 23 | DO_FADE(); 24 | PS1_ShowDemoText(); 25 | 26 | readinput(); 27 | if (!fade && (ValidButPressed() || StartButPressed())) 28 | PS1_MENU_RETURN2 = true; 29 | 30 | TempsDemo++; 31 | if (TempsDemo >= RunTimeDemo && !fin_du_jeu && !PS1_MENU_RETURN2) 32 | InitDemoJeu(); 33 | 34 | if (PS1_VideoPlayState != VIDEOST_NOT_PLAYING) 35 | done = true; 36 | if (fin_du_jeu || ModeDemo || PS1_MENU_RETURN2 || MENU_RETURN) 37 | done = true; 38 | return done; 39 | } 40 | 41 | /* 7F450 801A3C50 -O1, -O2 */ 42 | void PS1_PlayDemo(void) 43 | { 44 | PS1_LoadImgSplash(); 45 | start_cd_rap(); 46 | INIT_FADE_IN(); 47 | PS1_MENU_RETURN2 = false; 48 | MENU_RETURN = false; 49 | let_shadow = true; 50 | SYNCHRO_LOOP(PS1_DemoLoop); 51 | DO_FADE_OUT(); 52 | } -------------------------------------------------------------------------------- /src/obj/maracas.c: -------------------------------------------------------------------------------- 1 | #include "obj/maracas.h" 2 | 3 | /* 3AB5C 8015F35C -O2 */ 4 | void MARACAS_GO(Obj *in_obj) 5 | { 6 | ObjFlags cur_obj_not_flip; 7 | ObjFlags in_obj_get_flip; 8 | s16 i = 0; 9 | Obj *cur_obj = &level.objects[i]; 10 | s16 nb_objs = level.nb_objects; 11 | 12 | while (i < nb_objs) 13 | { 14 | if ((cur_obj->type == TYPE_MARACAS_BAS) && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 15 | { 16 | cur_obj_not_flip = ~FLG(OBJ_FLIP_X); 17 | cur_obj_not_flip &= cur_obj->flags; 18 | in_obj_get_flip = in_obj->flags & FLG(OBJ_FLIP_X); 19 | cur_obj->flags = cur_obj_not_flip | in_obj_get_flip; 20 | 21 | cur_obj->speed_y = 0; 22 | cur_obj->speed_x = 0; 23 | cur_obj->x_pos = in_obj->x_pos; 24 | cur_obj->y_pos = in_obj->y_pos; 25 | calc_obj_pos(cur_obj); 26 | cur_obj->flags |= (FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE)); 27 | cur_obj->gravity_value_1 = 0; 28 | cur_obj->gravity_value_2 = 7; 29 | break; 30 | } 31 | cur_obj++; 32 | i++; 33 | } 34 | 35 | skipToLabel(in_obj, 99, true); 36 | if (in_obj->cmd == GO_SPEED) 37 | { 38 | in_obj->speed_x = cur_obj->iframes_timer; 39 | in_obj->speed_y = cur_obj->field20_0x36; 40 | } 41 | set_main_and_sub_etat(in_obj, 0, 12); 42 | } -------------------------------------------------------------------------------- /src/obj/platform.c: -------------------------------------------------------------------------------- 1 | #include "obj/platform.h" 2 | 3 | /* 3979C 8015DF9C -O2 -msoft-float */ 4 | void DO_INTERACT_PLAT(Obj *unk_obj) 5 | { 6 | ObjType obj_type; 7 | s16 diff_x; 8 | Obj *found_obj; 9 | s16 diff_y; 10 | s16 unk_x = xmapmax; 11 | s16 i = 0; 12 | Obj *cur_obj = &level.objects[i]; 13 | s16 nb_objs = level.nb_objects; 14 | 15 | while (i < nb_objs) 16 | { 17 | obj_type = cur_obj->type; 18 | if ( 19 | obj_type == TYPE_LIFTPLAT || obj_type == TYPE_PLATFORM || 20 | obj_type == TYPE_FALLPLAT || obj_type == TYPE_INTERACTPLT 21 | ) 22 | { 23 | diff_x = (cur_obj->x_pos + cur_obj->offset_bx) - unk_obj->x_pos - unk_obj->offset_bx; 24 | if (diff_x > 0 && diff_x < unk_x) 25 | { 26 | found_obj = cur_obj; 27 | unk_x = diff_x; 28 | } 29 | } 30 | i++; 31 | cur_obj++; 32 | } 33 | 34 | if (unk_x != xmapmax) 35 | { 36 | found_obj->type = TYPE_INTERACTPLT; 37 | found_obj->flags &= ~FLG(OBJ_READ_CMDS); 38 | 39 | diff_y = (found_obj->y_pos + found_obj->offset_by) - unk_obj->y_pos - unk_obj->offset_by; 40 | if (diff_y < 1) 41 | found_obj->cmd = GO_DOWN; 42 | else 43 | found_obj->cmd = GO_UP; 44 | found_obj->nb_cmd = __builtin_abs(diff_y); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /include/gte.inc: -------------------------------------------------------------------------------- 1 | .ifndef .L_GTE_INC 2 | .L_GTE_INC: 3 | # GTE macros 4 | 5 | .macro RTPS 6 | .word 0x4A180001 7 | .endm 8 | 9 | .macro RTPT 10 | .word 0x4A280030 11 | .endm 12 | 13 | .macro DPCL 14 | .word 0x4A680029 15 | .endm 16 | 17 | .macro DPCS 18 | .word 0x4A780010 19 | .endm 20 | 21 | .macro DPCT 22 | .word 0x4AF8002A 23 | .endm 24 | 25 | .macro INTPL 26 | .word 0x4A980011 27 | .endm 28 | 29 | .macro NCS 30 | .word 0x4AC8041E 31 | .endm 32 | 33 | .macro NCT 34 | .word 0x4AD80420 35 | .endm 36 | 37 | .macro NCDS 38 | .word 0x4AE80413 39 | .endm 40 | 41 | .macro NCDT 42 | .word 0x4AF80416 43 | .endm 44 | 45 | .macro NCCS 46 | .word 0x4B08041B 47 | .endm 48 | 49 | .macro NCCT 50 | .word 0x4B18043F 51 | .endm 52 | 53 | .macro CDP 54 | .word 0x4B280414 55 | .endm 56 | 57 | .macro CC 58 | .word 0x4B38041C 59 | .endm 60 | 61 | .macro NCLIP 62 | .word 0x4B400006 63 | .endm 64 | 65 | .macro AVSZ3 66 | .word 0x4B58002D 67 | .endm 68 | 69 | .macro AVSZ4 70 | .word 0x4B68002E 71 | .endm 72 | 73 | .macro MVMVA sf, mx, v, cv, lm 74 | .word 0x4A400012|\sf<<19|\mx<<17|\v<<15|\cv<<13|\lm<<10 75 | .endm 76 | 77 | .macro SQR sf 78 | .word 0x4AA00428|\sf<<19 79 | .endm 80 | 81 | .macro OP sf 82 | .word 0x4B70000C|\sf<<19 83 | .endm 84 | 85 | .macro GPF sf 86 | .word 0x4B90003D|\sf<<19 87 | .endm 88 | 89 | .macro GPL sf 90 | .word 0x4BA0003E|\sf<<19 91 | .endm 92 | 93 | .endif 94 | -------------------------------------------------------------------------------- /src/data/common/mapdata_9CA74.c: -------------------------------------------------------------------------------- 1 | #include "common/mapdata.h" 2 | 3 | BlockFlags block_flags[] = 4 | { 5 | FLG_BLOCK_NONE, 6 | FLG(BLOCK_CH_DIR), 7 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLOPE), 8 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLOPE), 9 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLOPE), 10 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLOPE), 11 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLOPE), 12 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLOPE), 13 | FLG(BLOCK_HURT), 14 | FLG(BLOCK_FULLY_SOLID) | FLG(BLOCK_SOLID) | FLG(BLOCK_SLIPPERY), 15 | FLG_BLOCK_NONE, 16 | FLG_BLOCK_NONE, 17 | FLG_BLOCK_NONE, 18 | FLG_BLOCK_NONE, 19 | FLG(BLOCK_FULLY_SOLID) | FLG(BLOCK_SOLID), 20 | FLG(BLOCK_FULLY_SOLID) | FLG(BLOCK_SOLID) | FLG(BLOCK_FLAG_4), 21 | FLG_BLOCK_NONE, 22 | FLG_BLOCK_NONE, 23 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLIPPERY) | FLG(BLOCK_SLOPE), 24 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLIPPERY) | FLG(BLOCK_SLOPE), 25 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLIPPERY) | FLG(BLOCK_SLOPE), 26 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLIPPERY) | FLG(BLOCK_SLOPE), 27 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLIPPERY) | FLG(BLOCK_SLOPE), 28 | FLG(BLOCK_SOLID) | FLG(BLOCK_SLIPPERY) | FLG(BLOCK_SLOPE), 29 | FLG_BLOCK_NONE, 30 | FLG_BLOCK_NONE, 31 | FLG_BLOCK_NONE, 32 | FLG_BLOCK_NONE, 33 | FLG_BLOCK_NONE, 34 | FLG_BLOCK_NONE, 35 | FLG(BLOCK_FULLY_SOLID) | FLG(BLOCK_SOLID) | FLG(BLOCK_SLIPPERY), 36 | FLG_BLOCK_NONE 37 | }; -------------------------------------------------------------------------------- /include/draw/draw_hud.h: -------------------------------------------------------------------------------- 1 | #ifndef DRAW_HUD_H 2 | #define DRAW_HUD_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "common/ray.h" 8 | #include "common/display.h" 9 | #include "world_map_677C0.h" 10 | #include "card.h" 11 | #include "menu/menu_6A3BC.h" 12 | 13 | typedef struct GrpStar 14 | { 15 | u8 timer; 16 | u8 length; 17 | u8 dist; 18 | u8 sprite_table_index; 19 | } GrpStar; 20 | 21 | /* .data */ 22 | extern u8 PS1_star_spr[8] __attribute__((aligned(2))); 23 | extern u8 s__801cef84[2]; 24 | extern u8 PS1_TingsToGet_Col; 25 | extern u8 PS1_TingsToGet_ColAdd; 26 | extern u8 s_time_801cef88[5]; 27 | extern u8 s__801cef90[2] __attribute__((aligned(4))); 28 | extern u8 s_go__801cef94[7] __attribute__((aligned(4))); 29 | extern u8 s_the_end_801cef9c[8]; 30 | 31 | /**/ 32 | extern GrpStar grp_stars[30]; 33 | extern s16 current_star; 34 | extern Obj div_obj; 35 | 36 | void CLRSCR(void); 37 | void display_etoile(s32 in_x, s32 in_y); 38 | void display_grp_stars(void); 39 | void DISPLAY_TEXT_FEE(void); 40 | void DisplayJumellesNormal(void); 41 | void PS1_DisplayWorldMapBg1(s16 x1, s16 y1, s16 x2, s16 y2); 42 | void DISPLAY_SAVE_SPRITES(s16 x, s16 y); 43 | void DISPLAY_SAVE_POING(void); 44 | void display_time(s16 param_1); 45 | void PS1_LoadPts(void); 46 | void DISPLAY_CONTINUE_SPR(void); 47 | void PS1_PromptCardDisplayPoing(void); 48 | void DISPLAY_OPTIONS_POING(void); 49 | 50 | #endif -------------------------------------------------------------------------------- /include/common.h: -------------------------------------------------------------------------------- 1 | #ifndef COMMON_H 2 | #define COMMON_H 3 | 4 | #include "SYS/TYPES.H" 5 | #include "include_asm.h" 6 | 7 | /*#define NUGGET*/ 8 | #define MATCHES_BUT 9 | 10 | #ifdef NUGGET 11 | #define BSS_DEFS 12 | #define MATCHES_BUT 13 | #define NONMATCHINGS 14 | #endif 15 | 16 | #define FLG(x) (1 << x) 17 | #define LEN(x) (sizeof(x) / sizeof(x[0])) 18 | #define MAX_1(x, y) ((x) > (y) ? (x) : (y)) 19 | #define MAX_2(x, y) if (x < y) x = y; 20 | #define MAX_3(x, y) if (y > x) x = y; 21 | #define MIN_1(x, y) ((x) < (y) ? (x) : (y)) 22 | #define MIN_2(x, y) if (x > y) x = y; 23 | #define MIN_3(x, y) if (y < x) x = y; 24 | #define ABS(x) (x >= 0 ? (x) : -(x)) 25 | #define SGN(x) (x >= 0 ? (x > 0 ? 1 : 0) : -1) 26 | 27 | #define true 1 28 | #define false 0 29 | #define null 0 30 | 31 | typedef unsigned char u8; /* unsigned 8-bit */ 32 | typedef unsigned short u16; /* unsigned 16-bit */ 33 | typedef unsigned long u32; /* unsigned 32-bit */ 34 | 35 | typedef signed char s8; /* signed 8-bit */ 36 | typedef short s16; /* signed 16-bit */ 37 | typedef long s32; /* signed 32-bit */ 38 | 39 | typedef volatile unsigned char vu8; /* unsigned 8-bit */ 40 | typedef volatile unsigned short vu16; /* unsigned 16-bit */ 41 | typedef volatile unsigned long vu32; /* unsigned 32-bit */ 42 | 43 | typedef volatile signed char vs8; /* signed 8-bit */ 44 | typedef volatile short vs16; /* signed 16-bit */ 45 | typedef volatile long vs32; /* signed 32-bit */ 46 | 47 | #endif -------------------------------------------------------------------------------- /include/common/display.h: -------------------------------------------------------------------------------- 1 | #ifndef DISPLAY_H 2 | #define DISPLAY_H 3 | 4 | #include "common.h" 5 | #include "LIBGPU.H" 6 | 7 | typedef struct DRENVAndTile 8 | { 9 | DR_ENV drawing_environment; 10 | TILE tile; 11 | } DRENVAndTile; 12 | 13 | typedef struct Display 14 | { 15 | DISPENV field0_0x0; 16 | DRAWENV drawing_environment; 17 | DR_ENV map_drawing_environment_primitives[25]; 18 | u8 field_0x6b0_0x7d7[296]; /* unused? */ 19 | u32 map_ordering_tables[6]; /* TODO: size correct? */ 20 | u32 ordering_table[11]; /* TODO: not sure this is correct, see compiler warnings for synchro_loop.c and main_moteur.c */ 21 | SPRT_16 tiles[360]; 22 | SPRT_8 field_0x1e9c_0x321b[312]; 23 | TILE_1 tile1s[240]; 24 | SPRT sprites[50]; 25 | POLY_FT4 polygons[200]; 26 | TILE field_0x6084_0x6093; 27 | POLY_G4 field_0x6094_0x60b7; 28 | u8 field_0x60b8_0x60bb[4]; 29 | DRENVAndTile field_0x60bc_0x660b[17]; 30 | DR_ENV unk_dr_env; 31 | u8 field_0x664c_0x668b[64]; /* unused? */ 32 | TILE fond_box_tiles[4]; 33 | TILE fond_box_tile; 34 | TILE field_0x66dc_0x673b[6]; 35 | POLY_F4 unk_poly_f4s[16]; 36 | POLY_G4 unk_poly_g4s[16]; 37 | POLY_G3 unk_poly_g3s[16]; 38 | } Display; 39 | 40 | /* .data */ 41 | extern Display *PS1_CurrentDisplay; 42 | 43 | /**/ 44 | extern Display PS1_Displays[2]; 45 | extern s16 D_801E4BE0; /* used as index for map_drawing_environment_primitives (0x70) */ 46 | 47 | #endif -------------------------------------------------------------------------------- /include/obj/moskito.h: -------------------------------------------------------------------------------- 1 | #ifndef MOSKITO_H 2 | #define MOSKITO_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "num_level_36260.h" 8 | #include "boss.h" 9 | #include "collision/collision.h" 10 | 11 | /* 801c8050 - 801c84d8 might be general boss data? */ 12 | /* same with 801cf0bc - 801cf0ca though */ 13 | /* .data */ 14 | extern u8 dyingSequence[8]; 15 | extern u8 hitSequence[8]; 16 | extern u8 arrivalSequence[4]; 17 | extern u8 firstEncounterSequence[40]; 18 | extern u8 secondEncounterSequence1[16]; 19 | extern u8 secondEncounterSequenceSuite[12]; 20 | extern u8 secondEncounterSequence2[24]; 21 | extern u8 secondEncounterSequence3[20]; 22 | extern u8 secondEncounterSequence4[24]; 23 | extern u8 *moskitoActionSequences[10]; 24 | 25 | /* .data */ 26 | extern s16 PS1_MsAnimIndex; 27 | 28 | /**/ 29 | extern u8 fistAvoided; 30 | extern u8 mstMustLeaveScreenToProceed; 31 | 32 | void getIdealStingCoords(Obj *obj, s16 *out_x, s16 *out_y); 33 | u8 closeEnoughToSting(Obj *obj, u16 min_x, u16 min_y); 34 | void PS1_setBossScrollLimits_moskito(Obj *obj); 35 | u8 moskitoCanAttak(Obj *obj); 36 | s16 setMoskitoAtScrollBorder(Obj *obj, u8 param_2); 37 | void prepareNewMoskitoAttack(Obj *mst_obj); 38 | Obj *allocateMoskitoFruit(Obj *mst2_obj); 39 | void moskitoDropFruitOnRay(Obj *obj); 40 | void doMoskitoCommand(Obj *obj); 41 | u8 tellNextMoskitoAction(Obj *obj); 42 | void changeMoskitoPhase(Obj *obj); 43 | void doMoskitoHit(Obj *obj); 44 | 45 | #endif -------------------------------------------------------------------------------- /src/obj/badguy.c: -------------------------------------------------------------------------------- 1 | #include "obj/badguy.h" 2 | 3 | /* 3A868 8015F068 -O2 -msoft-float */ 4 | void allocate_badguy(Obj *genbg_obj, s16 param_2, s16 spd_x, s16 spd_y) 5 | { 6 | s16 i = 0; 7 | Obj *cur_obj = level.objects; 8 | s16 nb_objs = level.nb_objects; 9 | 10 | while (i < nb_objs) 11 | { 12 | if ( 13 | ( 14 | (cur_obj->type == TYPE_BADGUY1 && param_2 == 1) || 15 | (cur_obj->type == TYPE_BADGUY2 && param_2 == 2) 16 | ) && 17 | cur_obj->init_x_pos < 1 && !(cur_obj->flags & FLG(OBJ_ACTIVE)) 18 | ) 19 | { 20 | cur_obj->flags &= ~FLG(OBJ_FLAG_9); 21 | cur_obj->flags |= FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE); 22 | cur_obj->active_timer = 0; 23 | set_main_and_sub_etat(cur_obj, 2, 2); 24 | cur_obj->active_flag = ACTIVE_DEAD; 25 | cur_obj->x_pos = genbg_obj->x_pos + genbg_obj->offset_bx - cur_obj->offset_bx; 26 | cur_obj->y_pos = genbg_obj->y_pos - (cur_obj->offset_by >> 2); 27 | calc_obj_dir(cur_obj); 28 | cur_obj->speed_y = spd_y; 29 | if ((cur_obj->flags & FLG(OBJ_FLIP_X))) 30 | cur_obj->speed_x = spd_x; 31 | else 32 | cur_obj->speed_x = -spd_x; 33 | calc_obj_pos(cur_obj); 34 | cur_obj->flags &= ~FLG(OBJ_READ_CMDS); 35 | break; 36 | } 37 | cur_obj++; 38 | i++; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/unknown/AACC.c: -------------------------------------------------------------------------------- 1 | #include "unknown/AACC.h" 2 | 3 | void FUN_8012f2cc(void) {} 4 | 5 | /* AAD4 8012F2D4 -O2 -msoft-float */ 6 | void PouvoirsParMap(void) 7 | { 8 | RaymanEvents sp0 = D_801CEE84; 9 | RaymanEvents sp8 = D_801CEE88; 10 | RaymanEvents sp10 = D_801CEE8C; 11 | RaymanEvents sp18 = D_801CEE90; 12 | RaymanEvents sp20 = D_801CEE94; 13 | RaymanEvents sp28 = PS1_DefaultRayEvts; 14 | 15 | switch (num_world) 16 | { 17 | case 1: 18 | if (num_level <= 3) 19 | RayEvts = sp0; 20 | if (num_level >= 4 && num_level <= 8) 21 | RayEvts = sp8; 22 | if (num_level >= 9 && num_level <= 15) 23 | RayEvts = sp10; 24 | if (num_level >= 16) 25 | RayEvts = sp18; 26 | break; 27 | case 2: 28 | if (num_level <= 11) 29 | RayEvts = sp18; 30 | if (num_level >= 12) 31 | RayEvts = sp20; 32 | break; 33 | case 3: 34 | if (num_level <= 11) 35 | RayEvts = sp20; 36 | if (num_level >= 12) 37 | RayEvts = sp28; 38 | break; 39 | default: 40 | RayEvts = sp28; 41 | break; 42 | } 43 | } 44 | 45 | /* AD40 8012F540 -O2 -msoft-float */ 46 | void PS1_ResetSaveZone(void) 47 | { 48 | s32 i; 49 | s32 len = LEN(save_zone); 50 | 51 | for (i = 0; i < len; i++) 52 | save_zone[i] = 0; 53 | } 54 | 55 | /* AD70 8012F570 -O2 -msoft-float */ 56 | void FUN_8012f570(void) 57 | { 58 | D_801CEEA0++; 59 | } 60 | -------------------------------------------------------------------------------- /src/data/obj/eyes_9E69C.c: -------------------------------------------------------------------------------- 1 | #include "obj/eyes_3C3A8.h" 2 | 3 | u8 N_anim[] = 4 | { 5 | 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6 | 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 7 | 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 8 | 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 9 | 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 10 | 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 11 | 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12 | 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 13 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17 | 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 18 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 22 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 29 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30 | 1, 1, 1, 1, 1, 1 31 | }; -------------------------------------------------------------------------------- /include/draw/fade.h: -------------------------------------------------------------------------------- 1 | #ifndef FADE_H 2 | #define FADE_H 3 | 4 | #include "common.h" 5 | #include "common/display.h" 6 | #include "draw/draw_548CC.h" 7 | 8 | typedef struct RGBAArray 9 | { 10 | u8 data[4]; 11 | } RGBAArray; 12 | 13 | /* .data */ 14 | extern void (*D_801C7D68[4])(RGBAArray *, s16); 15 | extern RGBAArray *D_801C7D78[11]; 16 | 17 | /* .data */ 18 | extern RGBAArray D_801CEFE0[5]; 19 | extern s16 D_801CEFF4; 20 | extern s16 D_801CEFF6; /* lightning "phase" more or less? */ 21 | extern RGBAArray D_801CEFFC[3]; 22 | extern RGBAArray D_801CF008; 23 | extern s16 D_801CF00C; 24 | extern u16 D_801CF00E; 25 | extern s16 D_801CF010; 26 | extern s16 D_801CF012; 27 | extern s16 D_801CF014; 28 | extern s16 D_801CF016; 29 | extern s16 D_801CF018; 30 | extern u8 PS1_DisableInputs; /* might seem weird to have in this file, but DO_FADE is only place this is being set true */ 31 | 32 | /* .data */ 33 | extern s16 D_801CF410; 34 | 35 | /**/ 36 | extern s16 fade; 37 | extern u8 D_801F7FF0; 38 | extern u8 D_801F8480; 39 | 40 | void FUN_80169420(Display *disp); 41 | void PS1_LightningLoop(u32 param_1, s16 param_2); 42 | void PS1_LightningDraw(s16 param_1); 43 | void FUN_80169a3c(RGBAArray *param_1, s16 param_2); 44 | void FUN_80169ac8(RGBAArray *param_1, s16 param_2); 45 | void FUN_80169b54(RGBAArray *param_1, s16 param_2); 46 | void FUN_80169b5c(RGBAArray *param_1, s16 param_2); 47 | void INIT_FADE_OUT(void); 48 | void INIT_FADE_IN(void); 49 | void DO_FADE(void); 50 | s16 PS1_DO_FADE_OUT_PRG(void); 51 | void DO_FADE_OUT(void); 52 | void PS1_DO_PICTURE_IN_PICTURE(void); 53 | 54 | #endif -------------------------------------------------------------------------------- /src/data/obj/moskito_A3BC4.c: -------------------------------------------------------------------------------- 1 | #include "obj/moskito.h" 2 | 3 | u8 dyingSequence[] = { 16, 23, 24, 22, 25, 0, 0, 0 }; 4 | u8 hitSequence[] = { 16, 17, 15, 26, 11, 5, 0, 0 }; 5 | u8 arrivalSequence[] = { 13, 26, 14, 3 }; 6 | u8 firstEncounterSequence[] = 7 | { 8 | 13, 26, 14, 4, 19, 21, 4, 20, 18, 21, 9 | 4, 20, 19, 21, 4, 20, 18, 21, 4, 20, 10 | 10, 26, 14, 4, 18, 21, 4, 20, 10, 26, 11 | 14, 4, 19, 21, 4, 20, 10, 26, 14, 2 12 | }; 13 | u8 secondEncounterSequence1[] = 14 | { 15 | 13, 26, 14, 4, 7, 0, 7, 0, 10, 26, 16 | 14, 4, 3, 0, 0, 0 17 | }; 18 | u8 secondEncounterSequenceSuite[] = 19 | { 20 | 7, 4, 7, 8, 10, 26, 14, 13, 26, 14, 4, 2 21 | }; 22 | u8 secondEncounterSequence2[] = 23 | { 24 | 8, 0, 8, 0, 8, 0, 8, 4, 18, 21, 25 | 4, 20, 19, 21, 4, 20, 10, 26, 14, 4, 26 | 2, 0, 0, 0 27 | }; 28 | u8 secondEncounterSequence3[] = 29 | { 30 | 9, 0, 18, 21, 4, 20, 9, 4, 18, 21, 31 | 4, 20, 10, 26, 14, 13, 14, 4, 2, 0 32 | }; 33 | u8 secondEncounterSequence4[] = 34 | { 35 | 7, 8, 8, 8, 9, 0, 19, 21, 4, 20, 36 | 9, 8, 18, 21, 4, 20, 10, 26, 14, 4, 37 | 2, 0, 0, 0 38 | }; 39 | u8 *moskitoActionSequences[] = 40 | { 41 | arrivalSequence, 42 | firstEncounterSequence, 43 | arrivalSequence, 44 | secondEncounterSequence1, 45 | secondEncounterSequenceSuite, 46 | secondEncounterSequence2, 47 | secondEncounterSequence3, 48 | secondEncounterSequence4, 49 | hitSequence, 50 | dyingSequence 51 | }; -------------------------------------------------------------------------------- /src/obj/hybride_mosams_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/hybride_mosams_command.h" 2 | 3 | /* 753E8 80199BE8 -O2 -msoft-float */ 4 | void doMOSAMScommand(Obj *obj) 5 | { 6 | scrollLocked = true; 7 | switch (obj->cmd) 8 | { 9 | case GO_LEFT: 10 | case GO_RIGHT: 11 | obj->speed_x = 0; 12 | obj->speed_y = -8; 13 | scrollLocked = false; 14 | break; 15 | case GO_WAIT: 16 | if (!(obj->main_etat == 0 && obj->sub_etat == 2)) 17 | calc_obj_dir(obj); 18 | bossXToReach = -32000; 19 | bossYToReach = -32000; 20 | obj->speed_y = 0; 21 | obj->speed_x = 0; 22 | break; 23 | case GO_SPEED: 24 | calc_obj_dir(obj); 25 | bossXToReach = ray.x_pos + ray.offset_bx - obj->offset_bx; 26 | bossYToReach = firstFloorBelow(&ray) - obj->offset_by + 16; 27 | obj->speed_x = obj->iframes_timer; 28 | obj->speed_y = obj->field20_0x36; 29 | bossSpeedFactor = __builtin_abs( 30 | (((bossXToReach - obj->x_pos) << 18) / 55) / obj->eta[obj->main_etat][obj->sub_etat].speed_x_right 31 | ); /* ??? the shift is multiplication by 262144 ??? */ 32 | bossReachingAccuracyX = -1; /* not sure if best represented as -1 or 0xff */ 33 | bossReachingAccuracyY = 0; 34 | bossReachingTimer = 1; 35 | obj->gravity_value_1 = 0; 36 | obj->gravity_value_2 = 0; 37 | break; 38 | case GO_NOP: 39 | setBossReachingSpeeds(obj, bossReachingTimer, bossReachingAccuracyX, bossReachingAccuracyY); 40 | break; 41 | } 42 | } -------------------------------------------------------------------------------- /include/common/macro.h: -------------------------------------------------------------------------------- 1 | #ifndef MACRO_H 2 | #define MACRO_H 3 | 4 | #include "common/obj.h" 5 | 6 | /* 7 | game specific, general macros are in include/common.h 8 | TODO: should these have PS1_ prefix? see music.c 9 | */ 10 | 11 | #define EOA(obj) \ 12 | ( \ 13 | ( \ 14 | (obj)->eta[(obj)->main_etat][(obj)->sub_etat].flags & 0x10 ? \ 15 | (obj)->anim_frame == 0 : \ 16 | (obj)->anim_frame == (obj)->animations[(obj)->anim_index].frames_count - 1 \ 17 | ) && \ 18 | horloge[(obj)->eta[(obj)->main_etat][(obj)->sub_etat].anim_speed & 0xf] == 0 \ 19 | ) 20 | 21 | /* 22 | does not work in: 23 | DO_POING 24 | alter_fist_speed 25 | allocateDard 26 | */ 27 | #define FLIP_X_SGN(obj) ((obj)->flags & FLG(OBJ_FLIP_X) ? 1 : -1) 28 | #define BOOL_SGN(x) ((x) ? 1 : -1) /* more generalized version? lance_couteau_lineaire case 0*/ 29 | 30 | /* 31 | does not work in: 32 | DO_DARK2_TOONS_COMMAND 33 | calc_btyp_square 34 | */ 35 | static inline s32 test_x_pos_1(Obj *obj) 36 | { 37 | return (s16) (obj->offset_bx + obj->x_pos); 38 | } 39 | 40 | /* 41 | does not work in: 42 | DO_DARK2_TOONS_COMMAND 43 | calc_btyp_square (x_pos and offset_bx order is flipped) 44 | */ 45 | static inline s32 test_x_pos_2(Obj *obj) 46 | { 47 | return (obj->x_pos + obj->offset_bx); 48 | } 49 | 50 | /* 51 | works in: 52 | DO_DARK2_TOONS_COMMAND (explicitly without parens!) 53 | calc_btyp_square 54 | DO_SPIDER_PLAFOND 55 | 56 | does not work in: 57 | allocatePirateNgaweRing (cur_obj subtraction?) 58 | calc_esquive_poing (subtraction) 59 | */ 60 | #define test_x_pos_3(obj) (obj)->x_pos + (obj)->offset_bx 61 | 62 | #endif -------------------------------------------------------------------------------- /src/collision/proj.c: -------------------------------------------------------------------------------- 1 | #include "collision/proj.h" 2 | 3 | #ifdef BSS_DEFS 4 | s16 PROJ_CENTER_X; 5 | s16 PROJ_CENTER_Y; 6 | u8 zoom_mode; 7 | #endif 8 | 9 | /* 22754 80146F54 -O2 -msoft-float */ 10 | void set_proj_center(s16 x, s16 y) 11 | { 12 | PROJ_CENTER_X = x; 13 | PROJ_CENTER_Y = y; 14 | } 15 | 16 | /* 2276C 80146F6C -O2 -msoft-float */ 17 | s32 get_proj_dist(s16 param_1, s16 param_2) 18 | { 19 | if (zoom_mode == 0) 20 | return param_2; 21 | else 22 | return (s16) (0x10000 / (param_1 + 256) * param_2 / 256); 23 | } 24 | 25 | /* 227F0 80146FF0 -O2 -msoft-float */ 26 | s32 get_proj_dist2(s16 param_1, s16 param_2) 27 | { 28 | return (s16) (0x10000 / (param_1 + 256) * param_2 >> 8); 29 | } 30 | 31 | /* 22850 80147050 -O2 -msoft-float */ 32 | s32 get_proj_x(s16 param_1, s16 param_2) 33 | { 34 | return (s16) (0x10000 / (param_1 + 256) * (param_2 - PROJ_CENTER_X) / 256 + PROJ_CENTER_X); 35 | } 36 | 37 | /* 228D4 801470D4 -O2 -msoft-float */ 38 | s32 get_proj_y(s16 param_1, s16 param_2) 39 | { 40 | return (s16) (0x10000 / (param_1 + 256) * (param_2 - PROJ_CENTER_Y) / 256 + PROJ_CENTER_Y); 41 | } 42 | 43 | /* 22958 80147158 -O2 -msoft-float */ 44 | void set_zoom_mode(u8 mode) 45 | { 46 | zoom_mode = mode; 47 | } 48 | 49 | /* 22968 80147168 -O2 -msoft-float */ 50 | s32 inverse_proj_x(s16 param_1, s16 param_2) 51 | { 52 | return (s16) ((param_2 - PROJ_CENTER_X) * 256 / (0x10000 / (param_1 + 256)) + PROJ_CENTER_X); 53 | } 54 | 55 | /* 22A00 80147200 -O2 -msoft-float */ 56 | s32 inverse_proj_y(s16 param_1, s16 param_2) 57 | { 58 | return (s16) ((param_2 - PROJ_CENTER_Y) * 256 / (0x10000 / (param_1 + 256)) + PROJ_CENTER_Y); 59 | } 60 | -------------------------------------------------------------------------------- /include/video.h: -------------------------------------------------------------------------------- 1 | #ifndef VIDEO_H 2 | #define VIDEO_H 3 | 4 | #include "common.h" 5 | #include "LIBCD.H" 6 | #include "psyq_3_0_missing/LIBCD.H" 7 | #include "LIBPRESS.H" 8 | #include "psyq_3_0_missing/LIBPRESS.H" 9 | #include "draw/fade.h" 10 | 11 | typedef s16 Video; 12 | #define VIDEO_NONE 0 13 | #define VIDEO_PRES 1 14 | #define VIDEO_INTRO 2 15 | #define VIDEO_DEMO 3 16 | #define VIDEO_MAP_INTRO 4 /* Same as the normal intro, but only plays the end */ 17 | #define VIDEO_WIN 5 18 | 19 | typedef u8 VideoPlayState; 20 | #define VIDEOST_NOT_PLAYING 0 21 | #define VIDEOST_PLAYING 1 22 | #define VIDEOST_SKIPPED 2 23 | 24 | /* based on PS1_InitVideoState, RayCarrot found volatiles */ 25 | typedef struct VideoState 26 | { 27 | u32 *encoded_frame_buffers[2]; 28 | u32 *decoded_frame; 29 | RECT frame_rect; 30 | vu8 has_swapped_display; 31 | vu8 vsync_counter; 32 | u8 current_encode_buffer_index; 33 | /*u8 field7_0x17;*/ 34 | vs16 frame_count; 35 | } VideoState; 36 | 37 | /* .data */ 38 | extern u32 *D_801CEEDC; 39 | extern u32 *D_801CEEE0; 40 | extern u32 *D_801CEEE4; 41 | extern u32 *D_801CEEE8; 42 | 43 | /* .data */ 44 | extern VideoState PS1_CurrentVideoState; 45 | 46 | /**/ 47 | extern VideoPlayState PS1_VideoPlayState; 48 | extern s16 PS1_VideoLength; 49 | 50 | void PS1_PlayVideo(Video video); 51 | void FUN_80132980(void); 52 | void PS1_PlayVideoFile(Video video); 53 | void PS1_InitVideoState(VideoState *param_1); 54 | void PS1_LoadVideoFile(CdlLOC *lba, u32 param_2); 55 | void PS1_ReadVideoFile(u32 *param_1, Video video); /* param_1 name sugg. DecDCTvlc() runlevel? (LIBOVR section 7-8) */ 56 | void FUN_80132f8c(void); 57 | void FUN_80133010(void); 58 | 59 | #endif -------------------------------------------------------------------------------- /src/bonus_35FB4.c: -------------------------------------------------------------------------------- 1 | #include "bonus_35FB4.h" 2 | 3 | #ifdef BSS_DEFS 4 | u8 bonus_perfect[24]; 5 | s16 loop_time; 6 | s32 nb_wiz_save; 7 | #endif 8 | 9 | /* 35FB4 8015A7B4 -O2 */ 10 | u8 get_bonus_map_complete(s16 world, s16 lvl) 11 | { 12 | return getbit(bonus_perfect, (s16) (lvl - 1 + ((world - 1) << 5))); 13 | } 14 | 15 | /* 35FEC 8015A7EC -O2 */ 16 | void set_bonus_map_complete(s16 world, s16 lvl) 17 | { 18 | setbit(bonus_perfect, (s16) (lvl - 1 + ((world - 1) << 5))); 19 | } 20 | 21 | /* 36024 8015A824 -O2 */ 22 | void DO_PERFECT_BONUS_MAP(void) 23 | { 24 | if (loop_time < 0) 25 | loop_time++; 26 | 27 | if (loop_time == -1) 28 | { 29 | loop_time++; 30 | departlevel = false; 31 | start_cd_gagne(); 32 | SYNCHRO_LOOP(do_perfect_bonus); 33 | status_bar.num_wiz = nb_wiz_save; 34 | nb_wiz_save = 0; 35 | set_bonus_map_complete(num_world, num_level); 36 | } 37 | } 38 | 39 | /* 360C8 8015A8C8 -O2 */ 40 | void DO_WIZ_AFTER_BONUS_MAP(void) 41 | { 42 | if (!bonus_map && nb_wiz_collected != 0 && horloge[4] == 0) 43 | { 44 | status_bar.num_wiz++; 45 | nb_wiz_collected--; 46 | if (status_bar.num_wiz >= 100) 47 | { 48 | status_bar.num_wiz += 156; 49 | id_Cling_1up = NOVA_STATUS_BAR(); 50 | if (id_Cling_1up == -1) 51 | Add_One_RAY_lives(); 52 | } 53 | } 54 | } 55 | 56 | /* 3617C 8015A97C -O2 */ 57 | void init_bonus_perfect(void) 58 | { 59 | s32 i = LEN(bonus_perfect) - 1; 60 | u8 *cur = &bonus_perfect[i]; 61 | 62 | while (i >= 0) 63 | { 64 | *cur = 0; 65 | i--; 66 | cur--; 67 | } 68 | } -------------------------------------------------------------------------------- /src/obj/herse.c: -------------------------------------------------------------------------------- 1 | #include "obj/herse.h" 2 | 3 | /* 4ED80 80173580 -O2 -msoft-float */ 4 | void allocateOtherPosts(Obj *her_bh_obj) 5 | { 6 | Obj *cur_obj; 7 | s32 unk_1; 8 | s16 cur_id = link_init[her_bh_obj->id]; 9 | u8 her_bh_frames = her_bh_obj->animations[ 10 | her_bh_obj->eta[her_bh_obj->main_etat][her_bh_obj->sub_etat].anim_index 11 | ].frames_count; 12 | s16 i = 0; 13 | 14 | while (cur_id != her_bh_obj->id) 15 | { 16 | i++; 17 | cur_obj = &level.objects[cur_id]; 18 | cur_obj->flags |= FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE); 19 | cur_obj->anim_frame = (her_bh_obj->anim_frame + i) % her_bh_frames; 20 | cur_obj->init_x_pos = her_bh_obj->init_x_pos + i * ((her_bh_obj->hit_points - 2) << 5); 21 | cur_obj->init_y_pos = her_bh_obj->init_y_pos; 22 | unk_1 = i << 8; 23 | cur_obj->field23_0x3c = her_bh_obj->field23_0x3c - unk_1; 24 | cur_obj->x_pos = cur_obj->init_x_pos; 25 | cur_obj->y_pos = cur_obj->init_y_pos; 26 | calc_obj_pos(her_bh_obj); 27 | cur_id = link_init[cur_id]; 28 | } 29 | } 30 | 31 | /* 4EF0C 8017370C -O2 -msoft-float */ 32 | void doHerseCommand(Obj *obj) 33 | { 34 | if ( 35 | (obj->type == TYPE_HERSE_BAS || obj->type == TYPE_HERSE_HAUT) && 36 | obj->field24_0x3e == 0 37 | ) 38 | { 39 | obj->anim_frame = myRand(obj->animations[obj->anim_index].frames_count - 1); 40 | obj->field23_0x3c = 0x1000; 41 | allocateOtherPosts(obj); 42 | obj->field24_0x3e = 1; 43 | } 44 | else 45 | { 46 | obj->speed_y = sinYspeed(obj, 24, 40, &obj->field23_0x3c); 47 | obj->speed_x = 0; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/vignet.c: -------------------------------------------------------------------------------- 1 | #include "vignet.h" 2 | 3 | #ifdef BSS_DEFS 4 | s16 loop_nb_trames; 5 | u8 Vignet_To_Display; 6 | #endif 7 | 8 | /* 9A14 8012E214 -O2 -msoft-float */ 9 | void DISPLAY_TXT_VIGNET(void) 10 | { 11 | u32 i; 12 | 13 | for ( 14 | i = new_txt_fee; 15 | text_to_display[i].text[0] != '\0' && (i <= new_txt_fee + 1); 16 | i++ 17 | ) 18 | display_box_text(&text_to_display[i]); 19 | } 20 | 21 | /* 9AC4 8012E2C4 -O2 -msoft-float */ 22 | s16 display_vignet_prg(void) 23 | { 24 | s16 unk_1; 25 | s16 unk_2; 26 | 27 | readinput(); 28 | DO_FADE(); 29 | DISPLAY_FOND3(); 30 | DISPLAY_TXT_VIGNET(); 31 | if (++loop_nb_trames == 60) 32 | { 33 | loop_nb_trames = 0; 34 | loop_timing--; 35 | } 36 | 37 | unk_1 = false; 38 | if ( 39 | ( 40 | (ValidButPressed() || StartButPressed()) && 41 | loop_timing < 4 42 | ) || loop_timing < 1 43 | ) 44 | unk_1 = true; 45 | 46 | if (unk_1) 47 | { 48 | if (text_to_display[new_txt_fee + 2].text[0] == '\0') 49 | new_txt_fee = 10; 50 | else 51 | { 52 | unk_1 = false; 53 | loop_timing = 5; 54 | new_txt_fee += 2; 55 | } 56 | } 57 | 58 | unk_2 = unk_1 && new_txt_fee == 10; 59 | return unk_2; 60 | } 61 | 62 | /* 9C28 8012E428 -O2 -msoft-float */ 63 | void DISPLAY_GAME_VIGNET(void) 64 | { 65 | FUN_8016924c(); 66 | DO_FADE_OUT(); 67 | INIT_FADE_IN(); 68 | INIT_VIGNET(); 69 | SYNCHRO_LOOP(display_vignet_prg); 70 | DO_FADE_OUT(); 71 | Vignet_To_Display = 0; 72 | PROC_EXIT = false; 73 | INIT_FADE_IN(); 74 | } 75 | -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | #all comments refer to commit e038c4f 2 | #c89 comment style? 3 | #break after locals like in PS1_InitAllowedTime? strange breaks in gendoor.c 4 | #will leave multiple var decl. alone (https://stackoverflow.com/questions/56730663/is-it-possible-for-clang-format-to-split-multiple-variable-declarations-of-the-s) 5 | #TEST_WIZARD y_diff_1 ternary... 6 | #BreakBeforeTernaryOperators: True #no effect? 7 | #AlignArrayOfStructures ??? 8 | #card.c PS1_SaveIcon1??? 9 | #explicitly disable ghidra-style func arguments (comma without space?) 10 | #InsertBraces: False #fond_5BD8C FUN_8018058c e.g... seems to leave the ones that are like this alone, though 11 | #pointer cast (s32*) vs (s32 *) 12 | #prevent breaking assignments like in FUN_80132304 13 | #BreakBeforeBinaryOperators: All #PS1_Music_Apply_Fade e.g. 14 | #FLG(OBJ_ALIVE)|FLG(OBJ_ACTIVE) adds spaces 15 | #https://discourse.llvm.org/t/clang-format-leading-whitespace/46841 ? 16 | #src/data {704} vs { 704 } 17 | 18 | LineEnding: LF 19 | UseTab: Never 20 | IndentWidth: 4 21 | BreakBeforeBraces: Allman #puts do{}while(); braces on newline... 22 | 23 | ColumnLimit: 0 24 | AlignAfterOpenBracket: BlockIndent 25 | SpaceAfterCStyleCast: True 26 | SpaceBeforeAssignmentOperators: True 27 | SpaceBeforeParens: ControlStatements 28 | SpaceBeforeSquareBrackets: False 29 | AllowShortBlocksOnASingleLine: Always #FUN_8019f8d0 while (FUN_80131db8() == false) 30 | PointerAlignment: Right 31 | IndentCaseLabels: False 32 | IndentGotoLabels: False 33 | AlignOperands: AlignAfterOperator 34 | QualifierAlignment: Left 35 | AlignArrayOfStructures: Left #only kind of works with data 36 | SortIncludes: Never 37 | SkipMacroDefinitionBody: True 38 | AlignTrailingComments: 39 | Kind: Leave -------------------------------------------------------------------------------- /include/draw/draw_548CC.h: -------------------------------------------------------------------------------- 1 | #ifndef DRAW_548CC_H 2 | #define DRAW_548CC_H 3 | 4 | #include "common.h" 5 | #include "common/display.h" 6 | #include "LIBGTE.H" 7 | #include "psyq_3_0_missing/RAND.H" 8 | #include "main_moteur.h" 9 | #include "luciole.h" 10 | 11 | typedef struct RGB 12 | { 13 | u8 r; 14 | u8 g; 15 | u8 b; 16 | } RGB; 17 | 18 | /* .data */ 19 | extern RGB D_801C7EAC[4]; 20 | 21 | /* .data */ 22 | extern s16 D_801CF064; 23 | extern s16 D_801CF066; 24 | extern s16 D_801CF068; 25 | extern s32 D_801CF06C; 26 | extern CVECTOR D_801CF070; 27 | extern CVECTOR D_801CF074; 28 | extern CVECTOR D_801CF078; 29 | extern CVECTOR D_801CF07C; 30 | extern CVECTOR D_801CF080; /* something goes in between D_801CF080 and D_801CF086 */ 31 | extern u16 D_801CF086; 32 | extern s16 D_801CF088; 33 | extern s16 D_801CF08A; 34 | extern u16 D_801CF090; 35 | extern u16 D_801CF092; /* is this its own var? part of array or struct? see DISPLAY_FOND_MENU */ 36 | extern u16 D_801CF094; 37 | extern s16 D_801CF096; 38 | extern s16 D_801CF098; 39 | 40 | /* .data */ 41 | extern s16 D_801CF418; 42 | extern s16 D_801CF420; 43 | extern s16 D_801CF428; 44 | extern s16 D_801CF430; 45 | 46 | /**/ 47 | extern DVECTOR D_801E4E60[16]; 48 | extern DVECTOR D_801E4EA8[16]; 49 | extern DVECTOR D_801FAA48[2]; 50 | extern DVECTOR D_801FAA58[2]; 51 | extern s32 D_801F8168; 52 | extern s32 D_801F816C; 53 | extern s32 PS1_TPage_x; /* could also go in another file? */ 54 | extern s32 PS1_TPage_y; 55 | 56 | void FUN_801790cc(Display *display); 57 | void Display_and_free_luciole(void); 58 | void PS1_PerfectBonusDrawBg(void); 59 | void DISPLAY_FOND_MENU(void); 60 | void FUN_8017b260(u16 param_1); /* TODO: all callers cast param_1 to s16??? */ 61 | 62 | #endif -------------------------------------------------------------------------------- /src/data/loading_9FB74.c: -------------------------------------------------------------------------------- 1 | #include "loading_794DC.h" 2 | 3 | u32 *D_801C4374[] = 4 | { 5 | (u32 *)0x800ADCD8, 6 | (u32 *)0x800A4E94, 7 | (u32 *)0x800A4E94, 8 | (u32 *)0x800A4E94, 9 | (u32 *)0x800A4E94, 10 | (u32 *)0x800A4E94 11 | }; 12 | 13 | u32 *D_801C438C[] = 14 | { 15 | (u32 *)0x8006B4D8, 16 | (u32 *)0x80062694, 17 | (u32 *)0x80062694, 18 | (u32 *)0x80062694, 19 | (u32 *)0x80062694, 20 | (u32 *)0x80062694 21 | }; 22 | 23 | u8 PS1_BackgroundIndexTable[6][30] = 24 | { 25 | { 26 | 1, 0, 0, 5, 1, 1, 1, 1, 2, 4, 27 | 4, 0, 1, 0, 5, 3, 0, 0, 0, 0, 28 | 0, 3, 3, 3, 3, 3, 3, 3, 3, 3 29 | }, 30 | { 31 | 7, 7, 7, 10, 7, 7, 6, 6, 6, 6, 32 | 6, 9, 9, 10, 10, 8, 7, 6, 8, 8, 33 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 34 | }, 35 | { 36 | 11, 11, 12, 12, 12, 12, 15, 13, 13, 14, 37 | 13, 12, 13, 14, 14, 14, 14, 14, 14, 14, 38 | 14, 14, 14, 14, 14, 14, 14, 14, 14, 14 39 | }, 40 | { 41 | 17, 17, 17, 18, 19, 19, 17, 16, 21, 17, 42 | 20, 17, 21, 20, 20, 20, 20, 20, 20, 20, 43 | 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 44 | }, 45 | { 46 | 22, 24, 26, 24, 24, 24, 24, 23, 22, 27, 47 | 25, 22, 25, 25, 25, 25, 25, 25, 25, 25, 48 | 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 49 | }, 50 | { 51 | 28, 28, 29, 30, 30, 30, 30, 30, 30, 30, 52 | 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 53 | 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 54 | } 55 | }; -------------------------------------------------------------------------------- /src/obj/corde.c: -------------------------------------------------------------------------------- 1 | #include "obj/corde.h" 2 | 3 | #ifdef BSS_DEFS 4 | s16 pierreAcorde_obj_id; 5 | #endif 6 | 7 | /* 3EB50 80163350 -O2 -msoft-float */ 8 | void DO_CORDE_CASSE(Obj *obj) 9 | { 10 | s16 i; 11 | Obj *cur_obj; 12 | u8 nb_objs; 13 | 14 | set_sub_etat(obj, 21); 15 | if (level.objects[pierreAcorde_obj_id].hit_points == 10) 16 | level.objects[pierreAcorde_obj_id].hit_points = 5; 17 | else 18 | { 19 | level.objects[pierreAcorde_obj_id].hit_points = 1; 20 | set_main_and_sub_etat(level.objects + pierreAcorde_obj_id, 0, 23); 21 | } 22 | 23 | i = 0; 24 | cur_obj = &level.objects[i]; 25 | nb_objs = level.nb_objects; 26 | while (i < nb_objs) 27 | { 28 | if (cur_obj->type == TYPE_CORDEBAS && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 29 | { 30 | cur_obj->x_pos = obj->x_pos; 31 | cur_obj->y_pos = obj->y_pos; 32 | cur_obj->speed_y = 1; 33 | cur_obj->flags |= FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE); 34 | cur_obj->gravity_value_2 = 4; 35 | break; 36 | } 37 | cur_obj++; 38 | i++; 39 | } 40 | } 41 | 42 | /* 3EC84 80163484 -O2 -msoft-float */ 43 | void DO_FUMEE_CORDE(s16 x, s16 y) 44 | { 45 | s16 i = 0; 46 | Obj *cur_obj = &level.objects[i]; 47 | u8 nb_objs = level.nb_objects; 48 | 49 | while (i < nb_objs) 50 | { 51 | if (cur_obj->type == TYPE_CFUMEE && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 52 | { 53 | cur_obj->x_pos = x - 142; 54 | cur_obj->y_pos = y - 128; 55 | cur_obj->flags |= FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE); 56 | break; 57 | } 58 | cur_obj++; 59 | i++; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | on: 3 | push: 4 | branches: [ "main" ] 5 | workflow_dispatch: 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Clone 11 | uses: actions/checkout@v4 12 | with: 13 | submodules: 'recursive' 14 | - name: Install requirements 15 | run: sudo apt install binutils-mipsel-linux-gnu cpp-mipsel-linux-gnu 16 | - name: Cache pip dependencies 17 | uses: actions/setup-python@v5 18 | with: 19 | python-version: '3.13' 20 | cache: 'pip' 21 | - run: pip install -r requirements.txt 22 | - name: Cache other dependencies 23 | id: other-cache 24 | uses: actions/cache@v4 25 | with: 26 | path: | 27 | SLUS-000.05 28 | tools/gcc-2.5.7 29 | key: other-cache 30 | - if: steps.other-cache.outputs.cache-hit != 'true' 31 | name: Get exe 32 | uses: actions/checkout@v4 33 | with: 34 | repository: fuerchter/rayman-ps1-decomp 35 | token: ${{ secrets.EXE_PAT }} 36 | path: 'exe' 37 | - if: steps.other-cache.outputs.cache-hit != 'true' 38 | run: cp exe/SLUS-000.05 SLUS-000.05 39 | - if: steps.other-cache.outputs.cache-hit != 'true' 40 | name: Get gcc 41 | run: 42 | wget https://github.com/decompals/old-gcc/releases/download/0.13/gcc-2.5.7.tar.gz && 43 | mkdir tools/gcc-2.5.7 && 44 | tar -xzvf gcc-2.5.7.tar.gz -C tools/gcc-2.5.7 45 | - name: Extract 46 | run: make -f mk-splat.mk extract 47 | - name: Make 48 | id: make 49 | run: make -f mk-splat.mk 50 | - if: always() && steps.make.outcome != 'success' 51 | uses: actions/upload-artifact@v4 52 | with: 53 | path: build -------------------------------------------------------------------------------- /src/data/collision/block_9E49C.c: -------------------------------------------------------------------------------- 1 | #include "collision/block_22C84.h" 2 | 3 | s16 RandArray[] = 4 | { 5 | 4, 343, 34, 364, 222, 549, 200, 717, 6 | 972, 281, 454, 111, 714, 577, 42, 169, 7 | 835, 701, 782, 847, 982, 224, 437, 975, 8 | 859, 945, 830, 461, 619, 677, 614, 562, 9 | 737, 116, 415, 124, 687, 486, 502, 577, 10 | 352, 889, 270, 184, 433, 711, 167, 551, 11 | 660, 638, 3, 806, 275, 472, 395, 385, 12 | 595, 617, 286, 174, 824, 302, 341, 418, 13 | 246, 423, 55, 505, 1007, 1, 419, 71, 14 | 75, 260, 998, 363, 414, 201, 201, 216, 15 | 255, 776, 910, 927, 753, 472, 544, 36, 16 | 133, 469, 495, 611, 259, 117, 718, 664, 17 | 907, 896, 43, 566, 522, 635, 789, 259, 18 | 222, 241, 343, 579, 136, 628, 31, 971, 19 | 217, 827, 644, 732, 749, 565, 585, 172, 20 | 340, 890, 844, 629, 976, 1015, 1005, 755, 21 | 522, 302, 735, 292, 655, 504, 179, 572, 22 | 393, 793, 398, 666, 130, 148, 344, 941, 23 | 670, 664, 726, 671, 677, 738, 1021, 431, 24 | 575, 385, 1007, 15, 964, 463, 243, 559, 25 | 506, 641, 724, 597, 808, 442, 3, 855, 26 | 733, 1010, 468, 361, 961, 659, 578, 715, 27 | 228, 317, 919, 73, 980, 627, 83, 867, 28 | 744, 690, 947, 505, 292, 697, 317, 363, 29 | 773, 1000, 943, 250, 420, 935, 429, 346, 30 | 907, 149, 148, 330, 155, 639, 972, 275, 31 | 102, 1003, 251, 221, 87, 540, 898, 926, 32 | 271, 629, 915, 671, 85, 528, 842, 868, 33 | 756, 628, 560, 997, 1006, 65, 375, 747, 34 | 99, 697, 346, 118, 388, 258, 516, 20, 35 | 1020, 1, 84, 253, 555, 432, 225, 470, 36 | 149, 209, 425, 9, 475, 466, 186, 10 37 | }; -------------------------------------------------------------------------------- /include/draw/text_18118.h: -------------------------------------------------------------------------------- 1 | #ifndef TEXT_18118_H 2 | #define TEXT_18118_H 3 | 4 | #include "common.h" 5 | #include "common/text_to_display.h" 6 | #include "LIBGPU.H" 7 | #include "draw/draw_14FF4.h" 8 | #include "draw/draw_548CC.h" 9 | #include "text_24E10.h" /* TODO: circular? */ 10 | 11 | typedef struct MenuText 12 | { 13 | u8 *header; 14 | u8 *rows[6]; 15 | RECT vignette_rect; 16 | s32 vignette; 17 | s32 music; 18 | u8 rows_count; 19 | u8 selected_row; 20 | u8 color; 21 | /*u8 unk_1;*/ /* packed? */ 22 | } MenuText; 23 | 24 | /* .data */ 25 | extern u8 D_801C3580[6]; 26 | extern u8 D_801C3588[6]; 27 | extern u8 D_801C3590[6]; 28 | extern u8 D_801C3598[6]; 29 | extern u8 D_801C35A0[10]; 30 | extern u8 D_801C35AC[14]; 31 | 32 | /* .data */ 33 | extern u8 D_801C71CC[44]; 34 | extern u8 D_801C71F8[48]; 35 | extern u8 D_801C7228[48]; 36 | 37 | /* .data */ 38 | extern u8 D_801CEE10; 39 | extern u8 let_shadow; 40 | 41 | /**/ 42 | extern u8 colour; 43 | extern s16 D_801F81B0; 44 | 45 | u8 PS1_deter_num_let_old(s32 param_1); 46 | s16 PS1_calc_let_Width(s16 sprite, u8 font); 47 | s32 calc_let_Width(u8 font, s16 sprite); 48 | s16 PS1_CalcTextWidth(u8 *str, u8 font); 49 | void PS1_DisplayMenuText(u8 *str, u8 param_2, u8 color); 50 | void PS1_DisplayMenuTexts(u8 index, MenuText *in_menus); /* unused */ 51 | void DrawFondBoxNormal(s16 x, s16 y, s16 w, s16 h, u8 brightness); 52 | void DrawBlackBoxNormal(s16 x, s16 y, s16 w, s16 h, u8 brightness); 53 | void DISPLAY_BLACKBOX(u16 x, u16 y, u16 w, u16 h, u8 param_5, u8 is_fond); 54 | void display_text_sin(u8 *text, s16 in_x, s16 in_y, s16 temps, u8 font_size, u8 clut_x); 55 | void display_text(u8 *text, s16 in_x, s16 in_y, u8 font_size, u8 param_5); 56 | void display_box_text(TextToDisplay *txt); 57 | 58 | #endif -------------------------------------------------------------------------------- /src/obj/trompette.c: -------------------------------------------------------------------------------- 1 | #include "obj/trompette.h" 2 | 3 | /* 3A004 8015E804 -O2 -msoft-float */ 4 | void trompetteWind(Obj *obj, u8 param_2) 5 | { 6 | s16 trp_x; s16 trp_y; s16 trp_w; s16 trp_h; 7 | s16 unk_1; 8 | 9 | obj->timer = 100; 10 | GET_ANIM_POS(obj, &trp_x, &trp_y, &trp_w, &trp_h); 11 | if (obj->flags & FLG(OBJ_FLIP_X)) 12 | trp_x -= 16 - trp_w; 13 | else 14 | trp_x -= 76 + trp_w; 15 | 16 | trp_w += 92; 17 | trp_h = ashr16(trp_h, 1) + 2; 18 | trp_y += ashr16(trp_h, 2); 19 | if (inter_box(ray_zdc_x, ray_zdc_y, ray_zdc_w, ray_zdc_h, trp_x, trp_y, trp_w, trp_h)) 20 | { 21 | ashr16(ray_zdc_w, 1); 22 | ashr16(ray_zdc_h, 1); 23 | unk_1 = 7; 24 | if ( 25 | (!(obj->flags & FLG(OBJ_FLIP_X)) && param_2 == false) || 26 | (obj->flags & FLG(OBJ_FLIP_X) && param_2 == true) 27 | ) 28 | unk_1 = -unk_1; 29 | } 30 | else 31 | unk_1 = 0; 32 | 33 | if (unk_1 != 0) 34 | { 35 | ray_wind_force += unk_1; 36 | if (ray.main_etat != 5) 37 | decalage_en_cours = ashl16(ray_wind_force, 8); 38 | } 39 | } 40 | 41 | /* 3A1CC 8015E9CC -O2 -msoft-float */ 42 | void DO_TRP_ATTAK(Obj *obj) 43 | { 44 | u8 sub_etat; 45 | 46 | if (obj->timer != 0) 47 | obj->timer--; 48 | 49 | if (obj->main_etat == 0) 50 | { 51 | sub_etat = obj->sub_etat; 52 | if ( 53 | (sub_etat == 2 && obj->anim_frame >= 10) || 54 | sub_etat == 4 55 | ) 56 | trompetteWind(obj, false); 57 | else if ( 58 | (sub_etat == 6 && obj->anim_frame >= 10) || 59 | sub_etat == 7 60 | ) 61 | trompetteWind(obj, true); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/unknown/4BFCC.c: -------------------------------------------------------------------------------- 1 | #include "unknown/4BFCC.h" 2 | 3 | /* TODO: macro */ 4 | /* 4BFCC 801707CC -O2 -msoft-float */ 5 | u8 FUN_801707cc(Obj *obj, s16 param_2) 6 | { 7 | s16 unk_y; 8 | s16 i; 9 | u8 res = false; 10 | 11 | switch (param_2) 12 | { 13 | case 2: 14 | if (block_flags[(u16) mp.map[((obj->x_pos + obj->offset_bx - 8) >> 4) + mp.width * (obj->y_pos >> 4)] >> 10] >> BLOCK_FULLY_SOLID & 1) 15 | res = true; 16 | if (block_flags[(u16) mp.map[((obj->x_pos + obj->offset_bx + 7) >> 4) + mp.width * (obj->y_pos >> 4)] >> 10] >> BLOCK_FULLY_SOLID & 1) 17 | res = true; 18 | break; 19 | case 3: 20 | if (block_flags[(u16) mp.map[((obj->x_pos + obj->offset_bx - 8) >> 4) + mp.width * ((obj->y_pos + 154) >> 4)] >> 10] >> BLOCK_FULLY_SOLID & 1) 21 | res = true; 22 | if (block_flags[(u16) mp.map[((obj->x_pos + obj->offset_bx + 7) >> 4) + mp.width * (obj->y_pos >> 4)] >> 10] >> BLOCK_FULLY_SOLID & 1) 23 | res = true; 24 | break; 25 | case 0: 26 | unk_y = 6; 27 | i = 0; 28 | while (i < 10) 29 | { 30 | if (block_flags[(u16) mp.map[((obj->x_pos + obj->offset_bx - 16) >> 4) + mp.width * ((obj->y_pos + unk_y) >> 4)] >> 10] >> BLOCK_FULLY_SOLID & 1) 31 | res = true; 32 | unk_y += 16; 33 | i++; 34 | } 35 | break; 36 | case 1: 37 | unk_y = 6; 38 | i = 0; 39 | while (i < 10) 40 | { 41 | if (block_flags[(u16) mp.map[((obj->x_pos + obj->offset_bx + 16) >> 4) + mp.width * ((obj->y_pos + unk_y) >> 4)] >> 10] >> BLOCK_FULLY_SOLID & 1) 42 | res = true; 43 | unk_y += 16; 44 | i++; 45 | } 46 | break; 47 | } 48 | 49 | return res; 50 | } 51 | -------------------------------------------------------------------------------- /src/obj/spider_395B0.c: -------------------------------------------------------------------------------- 1 | #include "obj/spider_395B0.h" 2 | 3 | /* 395B0 8015DDB0 -O2 -msoft-float */ 4 | void allocateDard(Obj *spi_obj) 5 | { 6 | s16 spi_x; s16 spi_y; s16 spi_w; s16 spi_h; 7 | s16 i = 0; 8 | Obj *cur_obj = &level.objects[i]; 9 | u8 nb_objs = level.nb_objects; 10 | 11 | while (i < nb_objs) 12 | { 13 | if (cur_obj->type == TYPE_DARD && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 14 | { 15 | cur_obj->flags = cur_obj->flags & ~FLG(OBJ_FLIP_X) | spi_obj->flags & FLG(OBJ_FLIP_X); 16 | cur_obj->speed_y = 0; 17 | if (cur_obj->flags & FLG(OBJ_FLIP_X)) 18 | cur_obj->speed_x = -3; 19 | else 20 | cur_obj->speed_x = 3; 21 | 22 | GET_SPRITE_POS(spi_obj, 3, &spi_x, &spi_y, &spi_w, &spi_h); 23 | cur_obj->x_pos = spi_x + (spi_w >> 1) - cur_obj->offset_bx; 24 | cur_obj->y_pos = spi_y + (spi_h >> 1) - cur_obj->offset_by; 25 | cur_obj->init_x_pos = cur_obj->x_pos; 26 | cur_obj->init_y_pos = cur_obj->y_pos; 27 | cur_obj->display_prio = 4; 28 | cur_obj->main_etat = 0; 29 | cur_obj->sub_etat = 9; 30 | skipToLabel(cur_obj, cur_obj->flags >> OBJ_FLIP_X & 1, true); 31 | calc_obj_pos(cur_obj); 32 | cur_obj->flags |= (FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE)); 33 | cur_obj->flags &= ~FLG(OBJ_FLAG_9); 34 | cur_obj->anim_frame = 9; 35 | break; 36 | } 37 | cur_obj++; 38 | i++; 39 | } 40 | } 41 | 42 | /* 39738 8015DF38 -O2 -msoft-float */ 43 | void DO_SPIDER_TIR(Obj *obj) 44 | { 45 | DO_SPIDER_COMMAND(obj); 46 | if ((obj->main_etat == 0) && (obj->sub_etat == 3) && (obj->field24_0x3e == 0)) 47 | { 48 | allocateDard(obj); 49 | obj->field24_0x3e = 1; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/data/collision/bit_util.c: -------------------------------------------------------------------------------- 1 | #include "collision/bit_util.h" 2 | 3 | s16 costab[] = 4 | { 5 | 512, 512, 512, 512, 512, 512, 511, 511, 6 | 510, 509, 509, 508, 507, 506, 505, 504, 7 | 503, 501, 500, 499, 497, 496, 494, 492, 8 | 490, 489, 487, 485, 483, 480, 478, 476, 9 | 474, 471, 469, 466, 463, 461, 458, 455, 10 | 452, 449, 446, 443, 440, 436, 433, 430, 11 | 426, 423, 419, 415, 412, 408, 404, 400, 12 | 396, 392, 388, 384, 380, 376, 371, 367, 13 | 363, 358, 354, 349, 344, 340, 335, 330, 14 | 325, 320, 316, 311, 306, 300, 295, 290, 15 | 285, 280, 274, 269, 264, 258, 253, 247, 16 | 242, 236, 231, 225, 219, 214, 208, 202, 17 | 196, 191, 185, 179, 173, 167, 161, 155, 18 | 149, 143, 137, 131, 125, 119, 113, 107, 19 | 100, 94, 88, 82, 76, 69, 63, 57, 20 | 51, 44, 38, 32, 26, 19, 13, 7, 21 | 1, -6, -12, -18, -25, -31, -37, -43, 22 | -50, -56, -62, -68, -75, -81, -87, -93, 23 | -99, -106, -112, -118, -124, -130, -136, -142, 24 | -148, -154, -160, -166, -172, -178, -184, -190, 25 | -195, -201, -207, -213, -218, -224, -230, -235, 26 | -241, -246, -252, -257, -263, -268, -273, -279, 27 | -284, -289, -294, -299, -304, -309, -314, -319, 28 | -324, -329, -334, -339, -343, -348, -353, -357, 29 | -362, -366, -370, -375, -379, -383, -387, -391, 30 | -395, -399, -403, -407, -411, -414, -418, -422, 31 | -425, -429, -432, -435, -439, -442, -445, -448, 32 | -451, -454, -457, -460, -462, -465, -468, -470, 33 | -473, -475, -477, -479, -482, -484, -486, -488, 34 | -489, -491, -493, -495, -496, -498, -499, -500, 35 | -502, -503, -504, -505, -506, -507, -508, -508, 36 | -509, -510, -510, -511, -511, -511, -511, -511, 37 | -511, 0 38 | }; 39 | 40 | -------------------------------------------------------------------------------- /include/save.h: -------------------------------------------------------------------------------- 1 | #ifndef SAVE_H 2 | #define SAVE_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/rayevts.h" 7 | #include "common/level.h" 8 | #include "common/world_map.h" 9 | #include "MEMORY.H" 10 | #include "moteur_update.h" 11 | #include "ray/ray_5D190.h" 12 | #include "gendoor.h" 13 | #include "snow.h" 14 | 15 | typedef struct SaveState 16 | { 17 | u32 triggered_objects[8]; 18 | s16 nb_floc[8]; 19 | s16 vent_x; 20 | s16 vent_y; 21 | s16 x_map; 22 | s16 y_map; 23 | s16 time; 24 | s16 ray_x_pos; 25 | s16 ray_y_pos; 26 | s16 ray_screen_x; 27 | s16 ray_screen_y; 28 | s16 ray_flip_x; 29 | s16 save_obj_id; 30 | s16 save_obj_x_pos; 31 | s16 save_obj_y_pos; 32 | u8 link_init[256]; 33 | u8 save_obj_detect_zone_flag; 34 | u8 field18_0x14b; 35 | BlockType ray_btypes[5]; 36 | u8 ray_anim_index; 37 | u8 ray_anim_frame; 38 | u8 ray_main_etat; 39 | u8 ray_sub_etat; 40 | u8 poing_sub_etat; 41 | u8 rayevts_0; 42 | u8 rayevts_1; 43 | u8 rayevts_2; 44 | u8 dead_time; 45 | u8 has_saved; 46 | u8 num_wiz; 47 | } SaveState; 48 | 49 | typedef struct WorldInfoSave 50 | { 51 | u8 is_unlocked : 1; 52 | u8 is_unlocking : 1; 53 | u8 nb_cages : 3; 54 | } WorldInfoSave; 55 | 56 | /* .data */ 57 | extern u8 nb_levels_in_world[8]; 58 | 59 | /**/ 60 | extern SaveState save1; 61 | extern SaveState save2; 62 | extern u8 save_zone[2688]; 63 | extern WorldInfoSave wi_save_zone[24]; 64 | 65 | void initGameSave(void); 66 | void doneGameSave(void); 67 | void saveGameState(Obj *obj, SaveState *state); 68 | void restoreGameState(SaveState *save); 69 | void PS1_PhotographerCollision(void); 70 | s16 get_offset_in_save_zone(s16 event_index); 71 | void reset_save_zone_level(void); 72 | void take_bonus(s16 event_index); 73 | u8 bonus_taken(s16 event_index); 74 | void PS1_WriteWiSaveZone(void); 75 | void PS1_LoadWiSaveZone(void); 76 | 77 | #endif -------------------------------------------------------------------------------- /include/password.h: -------------------------------------------------------------------------------- 1 | #ifndef PASSWORD_H 2 | #define PASSWORD_H 3 | 4 | #include "common.h" 5 | #include "num_level_36260.h" 6 | 7 | typedef struct PasswordTables 8 | { 9 | u8 xor_table[10]; 10 | u8 verification_table[10]; 11 | u8 display_table[32]; 12 | u8 translate_table[32]; 13 | u8 temp_cage_counts[18]; 14 | } PasswordTables; 15 | 16 | typedef struct PasswordChar 17 | { 18 | u8 bit_0 : 1; 19 | u8 bit_1 : 1; 20 | u8 bit_2 : 1; 21 | u8 bit_3 : 1; 22 | u8 bit_4 : 1; 23 | u8 bit_5 : 1; 24 | u8 bit_6 : 1; 25 | u8 bit_7 : 1; 26 | } PasswordChar; 27 | 28 | /* .data */ 29 | extern PasswordTables PS1_PasswordTables; 30 | 31 | /* .data */ 32 | extern u8 PS1_IsPasswordValid; 33 | extern u8 s_ok_801cf108[5]; 34 | extern u8 s_s_801cf110[5]; 35 | 36 | /**/ 37 | extern u8 PS1_ShouldClearPassword; /* don't understand its use in FUN_8019ebc0 */ 38 | extern PasswordChar PS1_CurrentPassword[10]; 39 | extern u8 PS1_CurrentTypingPassword[10]; 40 | extern s16 D_801E4E40; 41 | extern s16 D_801E4E48; 42 | extern u8 D_801E57A8; 43 | extern u8 PS1_ValidPassword; 44 | 45 | void PS1_EncryptPassword(void); 46 | s32 PS1_VerifyDecryptPassword(void); 47 | void FUN_801a17c8(u8 param_1); 48 | u8 PS1_GetLevelFromPassword(void); 49 | void PS1_GeneratePassword_LivesCount(u8 lives_count); 50 | u8 PS1_GetLivesFromPassword(void); 51 | void PS1_GeneratePassword_nbContinue(u8 param_1); 52 | u8 PS1_GetContinuesFromPassword(void); 53 | u8 PS1_ValidatePassword(void); 54 | u8 PS1_GeneratePassword(void); 55 | void PS1_LoadSaveFromPassword(void); 56 | u8 PS1_AttemptLoadSaveFromPassword(void); 57 | void PS1_UnusedGenerateAndPrintPassword(s16 param_1, s16 param_2, u8 param_3, u8 param_4); 58 | void PS1_ClearPassword(void); 59 | void FUN_801a2c78(void); 60 | void FUN_801a2d40(void); 61 | void FUN_801a3064(void); 62 | s16 PS1_MenuPassword(void); 63 | void FUN_801a3550(void); 64 | void PS1_GenerateAndDisplayPassword(void); 65 | void DEPART_INIT_LOOP(void); 66 | 67 | #endif -------------------------------------------------------------------------------- /include/obj/scorpion.h: -------------------------------------------------------------------------------- 1 | #ifndef SCORPION_H 2 | #define SCORPION_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "common/mapdata.h" 8 | #include "common/record.h" 9 | #include "cam_scroll_29B5C.h" 10 | #include "moteur_init_end.h" 11 | #include "command_56AF0.h" 12 | #include "command_494FC.h" 13 | #include "collision/etat.h" 14 | 15 | /* .data */ 16 | extern u8 ecroule_rubis_order[24]; 17 | 18 | /* .data */ 19 | extern s16 D_801C83A4[8]; 20 | extern s16 D_801C83B4[8]; 21 | 22 | /**/ 23 | extern u8 ecroule_rubis_list[8]; 24 | extern u8 ecroule_plat_index; 25 | extern s16 rubis_list_calculated; 26 | extern s32 sko_ecran_tremble; 27 | extern s16 sko_ecroule_plat; 28 | extern u8 sko_enfonce_enable; 29 | extern u8 sko_lave_obj[20]; 30 | extern u8 sko_nb_lave; 31 | extern s16 sko_pince_obj_id; 32 | extern s16 D_801E4E10; 33 | extern s16 sko_rayon_on; 34 | extern s16 sko_rayon_x; 35 | extern s16 sko_rayon_y; 36 | extern s16 sko_rayon_dx; 37 | extern s16 sko_rayon_dy; 38 | extern s16 sko_final_x; 39 | extern s16 sko_final_y; 40 | extern s32 pixels_enfonce; 41 | extern s16 sko_last_action; 42 | extern s16 sko_nb_frap; 43 | extern s16 sko_nb_hit; 44 | extern s16 sko_phase; 45 | 46 | void swap(s32 ind_1, s32 ind_2); 47 | void set_rubis_list(void); 48 | void allocate_rayon(s16 x, s16 y); 49 | void allocate_8_petits_rayons(s16 x, s16 y); 50 | void do_sko_rayon(void); 51 | void do_sko_rayon2(void); 52 | void start_sko_rayon(s16 obj_x, s16 obj_y); 53 | void start_sko_rayon2(s16 obj_x, s16 obj_y); 54 | void lance_pince(Obj *sko_obj); 55 | s32 sko_get_eject_sens(void); 56 | void DO_SOL_ENFONCE(void); 57 | void DO_SKO_PHASE_0(Obj *sko_obj); 58 | void DO_SKO_PHASE_1(Obj *obj); 59 | void DO_SKO_PHASE_2(Obj *obj); 60 | void DO_SKO_PHASE_3(Obj *obj); 61 | void DO_SKO_PINCE(Obj *obj); 62 | void DO_SCORPION_COLLISION(Obj *obj); 63 | void DO_SCORPION_MORT(Obj *obj); 64 | void DO_SKO(Obj *obj); 65 | void SKO_ray_in_zone(Obj *obj); 66 | void DO_SKO_HIT(Obj *obj); 67 | 68 | #endif -------------------------------------------------------------------------------- /include/obj/saxo.h: -------------------------------------------------------------------------------- 1 | #ifndef SAXO_H 2 | #define SAXO_H 3 | 4 | #include "common.h" 5 | #include "common/obj.h" 6 | #include "common/level.h" 7 | #include "common/ray.h" 8 | #include "num_level_36260.h" 9 | #include "boss.h" 10 | 11 | typedef struct SaxAttackEntry 12 | { 13 | u8 next_note; 14 | u8 time; 15 | s16 end; 16 | } SaxAttackEntry; 17 | 18 | typedef struct SaxNoteEntry 19 | { 20 | u8 type; 21 | s16 speed_x; 22 | s16 speed_y; 23 | s16 initial_iframes; 24 | s16 field4_0x8; /* unused */ 25 | } SaxNoteEntry; 26 | 27 | typedef struct SaxData 28 | { 29 | s16 x_pos; 30 | s16 y_pos; 31 | s16 note_box_coll_x; 32 | s16 note_box_coll_y; 33 | s16 sprite2_x; 34 | s16 sprite2_y; 35 | u8 coup; 36 | u8 saved_hp; 37 | u8 field8_0xe; 38 | u8 field9_0xf; 39 | s16 field10_0x10; 40 | } SaxData; 41 | 42 | /* .data */ 43 | extern SaxNoteEntry atak[7]; 44 | extern SaxAttackEntry SerieDatak[4][11]; 45 | 46 | /**/ 47 | extern SaxData Sax; 48 | extern s16 IndexSerie; 49 | extern s16 SaxMarche; 50 | extern u8 NextNote; 51 | extern s16 IndexAtak; 52 | extern SaxAttackEntry attaque; 53 | extern u8 NiveauDansPhase; 54 | 55 | void INIT_SAXO(Obj *sax_obj); 56 | void allocateNote2(Obj *note_obj, s16 param_2); 57 | void DO_EXPLOSE_NOTE2(Obj *obj); 58 | void DO_NOTE_CMD(Obj *obj); 59 | void Cree_Eclat_Note(Obj *bnote, Obj *note1, s16 index); 60 | void DO_EXPLOSE_NOTE1(Obj *obj); 61 | void BonneNote(Obj *orig_obj); 62 | void DO_NOTE_TOUCHEE(Obj *obj); 63 | void DO_NOTE_REBOND(Obj *obj); 64 | void allocateNote(Obj *obj); 65 | u8 PrepareAtak(void); 66 | void SAXO_TIRE(Obj *obj); 67 | void DO_SAXO_COUP(Obj *obj); 68 | void DO_SAXO2_COUP(Obj *obj); 69 | void SetSaxoCollNoteBox(Obj *obj); 70 | void DO_SAXO_COMMAND(Obj *obj); 71 | void DO_SAXO_ATTER(Obj *obj); 72 | void DO_SAXO2_COMMAND(Obj *obj); 73 | void DO_SAXO2_ATTER(Obj *obj); 74 | void DO_SAXO_MARCHE(s16 hp); 75 | void DO_SAXO3_COMMAND(Obj *obj); 76 | void DO_SAXO3_DEBUT(Obj *obj); 77 | s32 saxo2_get_eject_sens(void); 78 | 79 | #endif -------------------------------------------------------------------------------- /src/obj/wat_clown.c: -------------------------------------------------------------------------------- 1 | #include "obj/wat_clown.h" 2 | 3 | /* 39DC8 8015E5C8 -O2 -msoft-float */ 4 | void allocatedrop(Obj *watc_obj) 5 | { 6 | s16 i = 0; 7 | Obj *cur_obj = &level.objects[i]; 8 | s16 nb_objs = level.nb_objects; 9 | 10 | while (i < nb_objs) 11 | { 12 | if (cur_obj->type == TYPE_DROP && !(cur_obj->flags & FLG(OBJ_ACTIVE))) 13 | { 14 | set_main_and_sub_etat(cur_obj, 2, 0); 15 | cur_obj->flags = cur_obj->flags & ~FLG(OBJ_FLIP_X) | watc_obj->flags & FLG(OBJ_FLIP_X); 16 | cur_obj->speed_y = -2; 17 | if (!(cur_obj->flags & FLG(OBJ_FLIP_X))) 18 | cur_obj->speed_x = cur_obj->eta[cur_obj->main_etat][cur_obj->sub_etat].speed_x_left; 19 | else 20 | cur_obj->speed_x = cur_obj->eta[cur_obj->main_etat][cur_obj->sub_etat].speed_x_right; 21 | 22 | cur_obj->x_pos = (watc_obj->x_pos + watc_obj->offset_bx) - cur_obj->offset_bx; 23 | cur_obj->y_pos = watc_obj->y_pos - 25; 24 | cur_obj->init_x_pos = cur_obj->x_pos; 25 | cur_obj->init_y_pos = cur_obj->y_pos; 26 | cur_obj->gravity_value_2 = 12; 27 | skipToLabel(cur_obj, cur_obj->flags >> OBJ_FLIP_X & 1, true); 28 | calc_obj_pos(cur_obj); 29 | cur_obj->flags &= ~FLG(OBJ_FLAG_9); 30 | cur_obj->flags |= (FLG(OBJ_ALIVE) | FLG(OBJ_ACTIVE)); 31 | break; 32 | } 33 | cur_obj++; 34 | i++; 35 | } 36 | } 37 | 38 | /* 39F74 8015E774 -O2 -msoft-float */ 39 | void DO_WAT_CLOWN_ATTAK(Obj *obj) 40 | { 41 | /* dunno how to only do obj->main_etat == 0 check once, if possible */ 42 | if (obj->main_etat == 0 && obj->sub_etat == 2) 43 | obj->field24_0x3e = 0; 44 | else if (obj->main_etat == 0 && obj->sub_etat == 11 && obj->field24_0x3e == 0) 45 | { 46 | obj->field24_0x3e = 1; 47 | allocatedrop(obj); 48 | } 49 | else if (obj->main_etat == 0 && obj->sub_etat == 22) 50 | skipToLabel(obj, 6, true); 51 | } 52 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # rayman-ps1-decomp 2 | Please help matching the remaining [~50 nonmatching non-psyq functions](https://docs.google.com/spreadsheets/d/1vJuS9sQnzeYvZqrR-QtGGEMYePni6XKZGVvfAUoAtjU)! 3 | 4 | WIP matching decompilation of [Rayman on the PS1](http://redump.org/disc/8326/). We had symbols from [Rayman Classic](https://raymanpc.com/wiki/en/Rayman_Classic). Unfortunately, I worked rather messy (code style, etc.). 5 | This repo does not come with any of the game's assets. 6 | 7 | ## Build instructions for ubuntu (24.04.1 LTS) and WSL with splat: 8 | ``` 9 | git clone --recursive https://github.com/fuerchter/rayman-ps1-decomp 10 | ``` 11 | Add SLUS-000.05 `sha1 4ac1789e118933762cd0ebcb9a970f63dfe2c72f` to project root 12 | Get [gcc-2.5.7.tar.gz](https://github.com/decompals/old-gcc/releases), extract and add it to the tools dir (extracted path of cc1 e.g.: tools/gcc-2.5.7/cc1) 13 | ``` 14 | sudo apt install python3 python3-pip binutils-mipsel-linux-gnu cpp-mipsel-linux-gnu 15 | pip install -r requirements.txt 16 | make -f mk-splat.mk extract 17 | make -f mk-splat.mk 18 | ``` 19 | sha1sum should print OK 20 | 21 | ## Thanks 22 | Tools (among others): Authors of [splat](https://github.com/ethteck/splat), [m2ctx](https://github.com/ethteck/m2ctx), [m2c](https://github.com/matt-kempster/m2c), [maspsx](https://github.com/mkst/maspsx), [asm-differ](https://github.com/simonlindholm/asm-differ), [decomp-permuter](https://github.com/simonlindholm/decomp-permuter), [decomp.me](https://github.com/decompme/decomp.me), [pcsx-redux](https://github.com/grumpycoders/pcsx-redux) 23 | [mkst:](https://github.com/mkst) For helping us when we had questions. 24 | [RayCarrot:](https://github.com/RayCarrot) A lot of labelling in ghidra, projects used as resources/game documentation. 25 | [Falcury:](https://github.com/Falcury) Also looking into technical stuff (PC version). 26 | [Mc-muffin:](https://github.com/Mc-muffin) Helping match a bunch of functions (see decomp.me links) 27 | [sotn-decomp:](https://github.com/xeeynamo/sotn-decomp) Big brother decomp to look up to. -------------------------------------------------------------------------------- /src/obj/falling_obj_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/falling_obj_command.h" 2 | 3 | /* 5088C 8017508C -O2 */ 4 | void move_fruit_in_water(Obj *obj) 5 | { 6 | s16 btyp; 7 | ObjFlags obj_flip_x; 8 | s16 x; 9 | s16 y; 10 | s16 w; 11 | s16 h; 12 | s32 x2; 13 | 14 | obj_flip_x = obj->flags >> OBJ_FLIP_X & 1; 15 | if (obj->main_etat == 0) 16 | { 17 | if (obj->sub_etat == 0xd && ray.field20_0x36 == obj->id) 18 | set_main_and_sub_etat(obj, 0, 0xf); 19 | 20 | if (obj->main_etat == 0 && obj->sub_etat == 0xf) 21 | { 22 | if (obj->type == TYPE_FALLING_OBJ2 && ray.field20_0x36 == -1) 23 | { 24 | set_sub_etat(obj, 0xd); 25 | obj->speed_x = 0; 26 | } 27 | else if (ray.field20_0x36 == obj->id) 28 | { 29 | obj->flags = obj->flags & ~FLG(OBJ_FLIP_X) | ray.flags & FLG(OBJ_FLIP_X); 30 | SET_X_SPEED(obj); 31 | obj->flags = obj->flags & ~FLG(OBJ_FLIP_X) | obj_flip_x << OBJ_FLIP_X; 32 | } 33 | 34 | if (obj->speed_x != 0) 35 | { 36 | GET_ANIM_POS(obj, &x, &y, &w, &h); 37 | x2 = x; 38 | if (obj->speed_x > -1) 39 | x2 += w; 40 | btyp = PS1_BTYPAbsPos(x2, y + 0x10); 41 | if (block_flags[btyp] >> BLOCK_SOLID & 1) 42 | { 43 | set_main_and_sub_etat(obj, 0, 0xd); 44 | obj->speed_x = 0; 45 | } 46 | } 47 | } 48 | } 49 | } 50 | 51 | /* 50A30 80175230 -O2 */ 52 | void DO_FALLING_OBJ_CMD(Obj *obj) 53 | { 54 | if (obj->main_etat == 2 && obj->btypes[0] == BTYP_WATER) 55 | { 56 | set_main_and_sub_etat(obj, 0, 0xe); 57 | obj->y_pos = (obj->offset_by + obj->y_pos & 0xfff0) - obj->offset_by + 7; 58 | } 59 | move_fruit_in_water(obj); 60 | DO_OBJ_COLLISIONS(obj, 10); 61 | if (obj->sub_etat == 9) 62 | REINIT_OBJECT(obj); 63 | } -------------------------------------------------------------------------------- /src/obj/spider_command.c: -------------------------------------------------------------------------------- 1 | #include "obj/spider_command.h" 2 | 3 | /* 48D74 8016D574 -O2 -msoft-float */ 4 | void DO_SPIDER_COMMAND(Obj *obj) 5 | { 6 | if (obj->sub_etat == 7) 7 | { 8 | obj->speed_y = -8; 9 | obj->speed_x = 0; 10 | obj->flags &= ~FLG(OBJ_READ_CMDS); 11 | return; 12 | } 13 | 14 | if ((obj->main_etat == 0) && (obj->sub_etat == 0)) 15 | obj->field24_0x3e = 0; 16 | 17 | switch (obj->cmd) 18 | { 19 | case GO_LEFT: 20 | case GO_RIGHT: 21 | if (obj->cmd == GO_LEFT) 22 | obj->flags &= ~FLG(OBJ_FLIP_X); 23 | else 24 | obj->flags |= FLG(OBJ_FLIP_X); 25 | 26 | SET_X_SPEED(obj); 27 | obj->field23_0x3c = 1; 28 | if (obj->main_etat == 0) 29 | set_main_and_sub_etat(obj, 1, 0); 30 | 31 | if (obj->main_etat == 1) 32 | { 33 | if (block_flags[calc_typ_travd(obj, false)] & 1) 34 | { 35 | if (obj->cmd == GO_LEFT) 36 | { 37 | obj->flags = obj->flags | FLG(OBJ_FLIP_X); 38 | skipToLabel(obj, 2, true); 39 | } 40 | else 41 | { 42 | obj->flags = obj->flags & ~FLG(OBJ_FLIP_X); 43 | skipToLabel(obj, 0, true); 44 | } 45 | } 46 | SET_X_SPEED(obj); 47 | CALC_MOV_ON_BLOC(obj); 48 | } 49 | break; 50 | case GO_WAIT: 51 | switch (obj->main_etat) 52 | { 53 | case 0: 54 | if (obj->sub_etat == 4) 55 | obj->field24_0x3e = 0; 56 | 57 | if (obj->sub_etat == 8) 58 | TEST_FIN_BLOC(obj); 59 | break; 60 | case 1: 61 | if (!(block_flags[calc_typ_travd(obj, false)] >> BLOCK_FULLY_SOLID & 1)) 62 | SET_X_SPEED(obj); 63 | else 64 | obj->speed_x = 0; 65 | 66 | CALC_MOV_ON_BLOC(obj); 67 | } 68 | break; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/unknown/A3B0.c: -------------------------------------------------------------------------------- 1 | #include "unknown/A3B0.h" 2 | 3 | const u8 s_game_pausedpress_start_to_p_80125000[] = "/game paused.../press start to play/"; 4 | 5 | /* A3B0 8012EBB0 -O2 -msoft-float */ 6 | s16 loader_anim_prg(void) 7 | { 8 | s16 done; 9 | 10 | readinput(); 11 | if (joy_done == 1 && fade == 0) 12 | joy_done = 0; 13 | 14 | if ((ValidButPressed() || StartButPressed()) && joy_done == 0) 15 | PROC_EXIT = true; 16 | 17 | horloges(); 18 | DO_FADE(); 19 | CLRSCR(); 20 | display2(&bigray); 21 | DO_LOADER_ANIM(); 22 | 23 | done = PROC_EXIT && fade == 0; 24 | return done; 25 | } 26 | 27 | /* A494 8012EC94 -O2 -msoft-float */ 28 | void DO_GROS_RAYMAN(void) 29 | { 30 | LOAD_BIG_RAYMAN(); 31 | joy_done = 1; 32 | start_cd_gros_rayman(); 33 | INIT_FADE_IN(); 34 | INIT_LOADER_ANIM(); 35 | SYNCHRO_LOOP(loader_anim_prg); 36 | } 37 | 38 | void FUN_8012ece8(void) {} 39 | 40 | /* A4F0 8012ECF0 -O2 -msoft-float */ 41 | void FUN_8012ecf0(void) 42 | { 43 | if (PS1_InitPAD()) 44 | readinput(); 45 | if (PS1_InitPAD() && PS1_IsInputtingCheatCode(0)) 46 | DO_GROS_RAYMAN(); 47 | PROC_EXIT = false; 48 | LOAD_ALL_FIX(); 49 | FUN_8012ece8(); 50 | } 51 | 52 | /* A560 8012ED60 -O2 -msoft-float */ 53 | void DO_AFFICHE_PAUSE(void) 54 | { 55 | if (!PS1_IsInputtingCheatCode(0)) 56 | { 57 | display_text(s_game_pausedpress_start_to_p_80125000, 160, 120, 2, 224); 58 | } 59 | } 60 | 61 | /* A5A4 8012EDA4 -O2 -msoft-float */ 62 | #ifndef MATCHES_BUT 63 | INCLUDE_ASM("asm/nonmatchings/unknown/A3B0", FUN_8012eda4); 64 | #else 65 | s32 FUN_8012eda4(s16 param_1, s16 param_2) 66 | { 67 | s32 temp_v0; 68 | s32 var_v0; 69 | s32 var_v1; 70 | s32 test_1 = param_2; /* TODO: remove? */ 71 | 72 | if (param_1 >> 1 > 0) 73 | { 74 | var_v1 = ((((param_1 >> 1) - 1) << 7) + 0x40) << 0xA; 75 | } 76 | else 77 | { 78 | var_v1 = 0; 79 | } 80 | 81 | return var_v1 + ((param_1 >> 0x1) ? test_1 << 9 : test_1 << 8); 82 | } 83 | #endif 84 | --------------------------------------------------------------------------------