mirror of https://github.com/yaz0r/FITD.git
429 lines
9.2 KiB
C++
429 lines
9.2 KiB
C++
#include "common.h"
|
|
|
|
// DEMO mapping
|
|
/*
|
|
#define PALETTE_JEU 0
|
|
#define ITDFONT 1
|
|
*/
|
|
|
|
int AITD1KnownCVars[] =
|
|
{
|
|
SAMPLE_PAGE,
|
|
BODY_FLAMME,
|
|
MAX_WEIGHT_LOADABLE,
|
|
TEXTE_CREDITS,
|
|
SAMPLE_TONNERRE,
|
|
INTRO_DETECTIVE,
|
|
INTRO_HERITIERE,
|
|
WORLD_NUM_PERSO,
|
|
CHOOSE_PERSO,
|
|
SAMPLE_CHOC,
|
|
SAMPLE_PLOUF,
|
|
REVERSE_OBJECT,
|
|
KILLED_SORCERER,
|
|
LIGHT_OBJECT,
|
|
FOG_FLAG,
|
|
DEAD_PERSO,
|
|
-1
|
|
};
|
|
|
|
enumLifeMacro AITD1LifeMacroTable[] =
|
|
{
|
|
LM_DO_MOVE,
|
|
LM_ANIM_ONCE,
|
|
LM_ANIM_ALL_ONCE,
|
|
LM_BODY,
|
|
LM_IF_EGAL,
|
|
LM_IF_DIFFERENT,
|
|
LM_IF_SUP_EGAL,
|
|
LM_IF_SUP,
|
|
LM_IF_INF_EGAL,
|
|
LM_IF_INF,
|
|
LM_GOTO,
|
|
LM_RETURN,
|
|
LM_END,
|
|
LM_ANIM_REPEAT,
|
|
LM_ANIM_MOVE,
|
|
LM_MOVE,
|
|
LM_HIT,
|
|
LM_MESSAGE,
|
|
LM_MESSAGE_VALUE,
|
|
LM_VAR,
|
|
LM_INC,
|
|
LM_DEC,
|
|
LM_ADD,
|
|
LM_SUB,
|
|
LM_LIFE_MODE,
|
|
LM_SWITCH,
|
|
LM_CASE,
|
|
LM_CAMERA,
|
|
LM_START_CHRONO,
|
|
LM_MULTI_CASE,
|
|
LM_FOUND,
|
|
LM_LIFE,
|
|
LM_DELETE,
|
|
LM_TAKE,
|
|
LM_IN_HAND,
|
|
LM_READ,
|
|
LM_ANIM_SAMPLE,
|
|
LM_SPECIAL,
|
|
LM_DO_REAL_ZV,
|
|
LM_SAMPLE,
|
|
LM_TYPE,
|
|
LM_GAME_OVER,
|
|
LM_MANUAL_ROT,
|
|
LM_RND_FREQ,
|
|
LM_MUSIC,
|
|
LM_SET_BETA,
|
|
LM_DO_ROT_ZV,
|
|
LM_STAGE,
|
|
LM_FOUND_NAME,
|
|
LM_FOUND_FLAG,
|
|
LM_FOUND_LIFE,
|
|
LM_CAMERA_TARGET,
|
|
LM_DROP,
|
|
LM_FIRE,
|
|
LM_TEST_COL,
|
|
LM_FOUND_BODY,
|
|
LM_SET_ALPHA,
|
|
LM_STOP_BETA,
|
|
LM_DO_MAX_ZV,
|
|
LM_PUT,
|
|
LM_C_VAR,
|
|
LM_DO_NORMAL_ZV,
|
|
LM_DO_CARRE_ZV,
|
|
LM_SAMPLE_THEN,
|
|
LM_LIGHT,
|
|
LM_SHAKING,
|
|
LM_INVENTORY,
|
|
LM_FOUND_WEIGHT,
|
|
LM_UP_COOR_Y,
|
|
LM_SPEED,
|
|
LM_PUT_AT,
|
|
LM_DEF_ZV,
|
|
LM_HIT_OBJECT,
|
|
LM_GET_HARD_CLIP,
|
|
LM_ANGLE,
|
|
LM_REP_SAMPLE,
|
|
LM_THROW,
|
|
LM_WATER,
|
|
LM_PICTURE,
|
|
LM_STOP_SAMPLE,
|
|
LM_NEXT_MUSIC,
|
|
LM_FADE_MUSIC,
|
|
LM_STOP_HIT_OBJECT,
|
|
LM_COPY_ANGLE,
|
|
LM_END_SEQUENCE,
|
|
LM_SAMPLE_THEN_REPEAT,
|
|
LM_WAIT_GAME_OVER,
|
|
};
|
|
|
|
int makeIntroScreens(void)
|
|
{
|
|
char* data;
|
|
unsigned int chrono;
|
|
|
|
data = loadPak("ITD_RESS", AITD1_TITRE);
|
|
FastCopyScreen(data + 770, frontBuffer);
|
|
osystem_CopyBlockPhys(frontBuffer, 0, 0, 320, 200);
|
|
FadeInPhys(8, 0);
|
|
memcpy(logicalScreen, frontBuffer, 320 * 200);
|
|
osystem_flip(NULL);
|
|
free(data);
|
|
LoadPak("ITD_RESS", AITD1_LIVRE, aux);
|
|
startChrono(&chrono);
|
|
|
|
osystem_drawBackground();
|
|
|
|
do
|
|
{
|
|
int time;
|
|
|
|
process_events();
|
|
|
|
time = evalChrono(&chrono);
|
|
|
|
if (time >= 0x30)
|
|
break;
|
|
|
|
} while (key == 0 && Click == 0);
|
|
|
|
playSound(CVars[getCVarsIdx(SAMPLE_PAGE)]);
|
|
/* LastSample = -1;
|
|
LastPriority = -1;
|
|
LastSample = -1;
|
|
LastPriority = 0; */
|
|
turnPageFlag = 1;
|
|
Lire(CVars[getCVarsIdx(TEXTE_CREDITS)] + 1, 48, 2, 260, 197, 1, 26, 0);
|
|
|
|
return(0);
|
|
}
|
|
|
|
void CopyBox_Aux_Log(int x1, int y1, int x2, int y2)
|
|
{
|
|
int i;
|
|
int j;
|
|
|
|
for (i = y1; i < y2; i++)
|
|
{
|
|
for (j = x1; j < x2; j++)
|
|
{
|
|
*(screenSm3 + i * 320 + j) = *(screenSm1 + i * 320 + j);
|
|
}
|
|
}
|
|
}
|
|
|
|
int ChoosePerso(void)
|
|
{
|
|
int choice = 0;
|
|
int firsttime = 1;
|
|
int choiceMade = 0;
|
|
|
|
uiLayer.fill(0);
|
|
InitCopyBox(aux, logicalScreen);
|
|
|
|
while (choiceMade == 0)
|
|
{
|
|
process_events();
|
|
osystem_drawBackground();
|
|
|
|
// TODO: missing code for music stop
|
|
|
|
LoadPak("ITD_RESS", 10, aux);
|
|
FastCopyScreen(aux, logicalScreen);
|
|
FastCopyScreen(logicalScreen, aux2);
|
|
|
|
if (choice == 0)
|
|
{
|
|
AffBigCadre(80, 100, 160, 200);
|
|
CopyBox_Aux_Log(10, 10, 149, 190);
|
|
}
|
|
else
|
|
{
|
|
AffBigCadre(240, 100, 160, 200);
|
|
CopyBox_Aux_Log(170, 10, 309, 190);
|
|
}
|
|
|
|
FastCopyScreen(logicalScreen, frontBuffer);
|
|
osystem_CopyBlockPhys(frontBuffer, 0, 0, 320, 200);
|
|
|
|
if (firsttime != 0)
|
|
{
|
|
FadeInPhys(0x40, 0);
|
|
|
|
do
|
|
{
|
|
process_events();
|
|
} while (Click || key);
|
|
|
|
firsttime = 0;
|
|
}
|
|
|
|
while ((localKey = key) != 28 && Click == 0) // process input
|
|
{
|
|
process_events();
|
|
osystem_drawBackground();
|
|
|
|
if (JoyD & 4) // left
|
|
{
|
|
choice = 0;
|
|
FastCopyScreen(aux2, logicalScreen);
|
|
AffBigCadre(80, 100, 160, 200);
|
|
CopyBox_Aux_Log(10, 10, 149, 190);
|
|
osystem_CopyBlockPhys((unsigned char*)logicalScreen, 0, 0, 320, 200);
|
|
|
|
while (JoyD != 0)
|
|
{
|
|
process_events();
|
|
}
|
|
}
|
|
|
|
if (JoyD & 8) // right
|
|
{
|
|
choice = 1;
|
|
FastCopyScreen(aux2, logicalScreen);
|
|
AffBigCadre(240, 100, 160, 200);
|
|
CopyBox_Aux_Log(170, 10, 309, 190);
|
|
osystem_CopyBlockPhys((unsigned char*)logicalScreen, 0, 0, 320, 200);
|
|
|
|
while (JoyD != 0)
|
|
{
|
|
process_events();
|
|
}
|
|
}
|
|
|
|
if (localKey == 1)
|
|
{
|
|
InitCopyBox(aux2, logicalScreen);
|
|
FadeOutPhys(0x40, 0);
|
|
return(-1);
|
|
}
|
|
}
|
|
|
|
FadeOutPhys(0x40, 0);
|
|
turnPageFlag = 0;
|
|
|
|
switch (choice)
|
|
{
|
|
case 0:
|
|
{
|
|
FastCopyScreen(frontBuffer, logicalScreen);
|
|
SetClip(0, 0, 319, 199);
|
|
LoadPak("ITD_RESS", AITD1_FOND_INTRO, aux);
|
|
CopyBox_Aux_Log(160, 0, 319, 199);
|
|
FastCopyScreen(logicalScreen, aux);
|
|
Lire(CVars[getCVarsIdx(INTRO_HERITIERE)] + 1, 165, 5, 314, 194, 2, 15, 0);
|
|
CVars[getCVarsIdx(CHOOSE_PERSO)] = 1;
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
FastCopyScreen(frontBuffer, logicalScreen);
|
|
SetClip(0, 0, 319, 199);
|
|
LoadPak("ITD_RESS", AITD1_FOND_INTRO, aux);
|
|
CopyBox_Aux_Log(0, 0, 159, 199);
|
|
FastCopyScreen(logicalScreen, aux);
|
|
Lire(CVars[getCVarsIdx(INTRO_DETECTIVE)] + 1, 5, 5, 154, 194, 2, 15, 0);
|
|
CVars[getCVarsIdx(CHOOSE_PERSO)] = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (localKey && 0x1C)
|
|
{
|
|
choiceMade = 1;
|
|
}
|
|
|
|
}
|
|
|
|
FadeOutPhys(64, 0);
|
|
InitCopyBox(aux2, logicalScreen);
|
|
return(choice);
|
|
}
|
|
|
|
void startAITD1()
|
|
{
|
|
fontHeight = 16;
|
|
g_gameUseCDA = true;
|
|
setPalette(currentGamePalette);
|
|
|
|
#ifndef AITD_UE4
|
|
if (!make3dTatou())
|
|
{
|
|
makeIntroScreens();
|
|
}
|
|
#endif
|
|
|
|
while (1)
|
|
{
|
|
#ifndef AITD_UE4
|
|
int startupMenuResult = MainMenu();
|
|
#else
|
|
int startupMenuResult = 0;
|
|
#endif
|
|
switch (startupMenuResult)
|
|
{
|
|
case -1: // timeout
|
|
{
|
|
CVars[getCVarsIdx(CHOOSE_PERSO)] = rand() & 1;
|
|
startGame(7, 1, 0);
|
|
|
|
if (!make3dTatou())
|
|
{
|
|
if (!makeIntroScreens())
|
|
{
|
|
//makeSlideshow();
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 0: // new game
|
|
{
|
|
// here, original would ask for protection
|
|
|
|
#if !TARGET_OS_IOS && !AITD_UE4
|
|
if(ChoosePerso()!=-1)
|
|
#endif
|
|
{
|
|
process_events();
|
|
while (key)
|
|
{
|
|
process_events();
|
|
}
|
|
|
|
#if !TARGET_OS_IOS
|
|
startGame(7, 1, 0);
|
|
#endif
|
|
|
|
// here, original would quit if protection flag was false
|
|
|
|
startGame(0, 0, 1);
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 1: // continue
|
|
{
|
|
// here, original would ask for protection
|
|
|
|
if (restoreSave(12, 0))
|
|
{
|
|
// here, original would quit if protection flag was false
|
|
|
|
// updateShaking();
|
|
|
|
FlagInitView = 2;
|
|
|
|
InitView();
|
|
|
|
PlayWorld(1, 1);
|
|
|
|
// freeScene();
|
|
|
|
FadeOutPhys(8, 0);
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 2: // exit
|
|
{
|
|
freeAll();
|
|
exit(-1);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void AITD1_ReadBook(int index, int type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case 0: // READ_MESSAGE
|
|
{
|
|
LoadPak("ITD_RESS", AITD1_LETTRE, aux);
|
|
turnPageFlag = 0;
|
|
Lire(index, 60, 10, 245, 190, 0, 26, 0);
|
|
break;
|
|
}
|
|
case 1: // READ_BOOK
|
|
{
|
|
LoadPak("ITD_RESS", AITD1_LIVRE, aux);
|
|
turnPageFlag = 1;
|
|
Lire(index, 48, 2, 260, 197, 0, 26, 0);
|
|
break;
|
|
}
|
|
case 2: // READ_CARNET
|
|
{
|
|
LoadPak("ITD_RESS", AITD1_CARNET, aux);
|
|
turnPageFlag = 0;
|
|
Lire(index, 50, 20, 250, 199, 0, 26, 0);
|
|
break;
|
|
}
|
|
default:
|
|
assert(0);
|
|
}
|
|
}
|