map system doesn't work
This commit is contained in:
parent
a042b627f8
commit
10d946aca2
17 changed files with 717 additions and 27 deletions
1
Makefile
1
Makefile
|
@ -53,6 +53,7 @@ SOURCES = \
|
||||||
Main \
|
Main \
|
||||||
Map \
|
Map \
|
||||||
MapName \
|
MapName \
|
||||||
|
MiniMap \
|
||||||
MyChar \
|
MyChar \
|
||||||
MycHit \
|
MycHit \
|
||||||
MycParam \
|
MycParam \
|
||||||
|
|
212
src/ArmsItem.cpp
212
src/ArmsItem.cpp
|
@ -17,7 +17,7 @@ ITEM gItemData[ITEM_MAX];
|
||||||
int gSelectedArms;
|
int gSelectedArms;
|
||||||
int gSelectedItem;
|
int gSelectedItem;
|
||||||
int gCampTitleY;
|
int gCampTitleY;
|
||||||
int gCampActive;
|
bool gCampActive;
|
||||||
|
|
||||||
void ClearArmsData()
|
void ClearArmsData()
|
||||||
{
|
{
|
||||||
|
@ -132,6 +132,205 @@ bool SubItemData(int code)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MoveCampCursor()
|
||||||
|
{
|
||||||
|
int arms_num = 0;
|
||||||
|
int item_num = 0;
|
||||||
|
while ( gArmsData[arms_num].code != 0 )
|
||||||
|
++arms_num;
|
||||||
|
while ( gItemData[item_num].code != 0 )
|
||||||
|
++item_num;
|
||||||
|
|
||||||
|
if (arms_num || item_num)
|
||||||
|
{
|
||||||
|
bool bChange = false;
|
||||||
|
if (gCampActive)
|
||||||
|
{
|
||||||
|
if (gKeyTrg & gKeyLeft)
|
||||||
|
{
|
||||||
|
if (gSelectedItem % 6)
|
||||||
|
--gSelectedItem;
|
||||||
|
else
|
||||||
|
gSelectedItem += 5;
|
||||||
|
|
||||||
|
bChange = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gKeyTrg & gKeyRight)
|
||||||
|
{
|
||||||
|
if (item_num - 1 == gSelectedItem)
|
||||||
|
gSelectedItem = 6 * (gSelectedItem / 6);
|
||||||
|
else if (gSelectedItem % 6 == 5)
|
||||||
|
gSelectedItem -= 5;
|
||||||
|
else
|
||||||
|
++gSelectedItem;
|
||||||
|
|
||||||
|
bChange = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gKeyTrg & gKeyUp)
|
||||||
|
{
|
||||||
|
if (gSelectedItem + 5 > 10)
|
||||||
|
gSelectedItem -= 6;
|
||||||
|
else
|
||||||
|
gCampActive = false;
|
||||||
|
|
||||||
|
bChange = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( gKeyTrg & gKeyDown )
|
||||||
|
{
|
||||||
|
if ( gSelectedItem / 6 == (item_num - 1) / 6 )
|
||||||
|
gCampActive = false;
|
||||||
|
else
|
||||||
|
gSelectedItem += 6;
|
||||||
|
|
||||||
|
bChange = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gSelectedItem >= item_num)
|
||||||
|
gSelectedItem = item_num - 1;
|
||||||
|
|
||||||
|
if (gCampActive && gKeyTrg & gKeyOk)
|
||||||
|
StartTextScript(gItemData[gSelectedItem].code + 6000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gKeyTrg & gKeyLeft)
|
||||||
|
{
|
||||||
|
--gSelectedArms;
|
||||||
|
bChange = true;
|
||||||
|
}
|
||||||
|
if (gKeyTrg & gKeyRight)
|
||||||
|
{
|
||||||
|
++gSelectedArms;
|
||||||
|
bChange = true;
|
||||||
|
}
|
||||||
|
if ((gKeyDown | gKeyUp) & gKeyTrg)
|
||||||
|
{
|
||||||
|
if (item_num)
|
||||||
|
gCampActive = true;
|
||||||
|
bChange = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gSelectedArms < 0)
|
||||||
|
gSelectedArms = arms_num - 1;
|
||||||
|
if (arms_num - 1 < gSelectedArms)
|
||||||
|
gSelectedArms = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bChange)
|
||||||
|
{
|
||||||
|
if (gCampActive)
|
||||||
|
{
|
||||||
|
PlaySoundObject(1, 1);
|
||||||
|
|
||||||
|
if (item_num)
|
||||||
|
StartTextScript(gItemData[gSelectedItem].code + 5000);
|
||||||
|
else
|
||||||
|
StartTextScript(5000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlaySoundObject(4, 1);
|
||||||
|
|
||||||
|
if (arms_num)
|
||||||
|
StartTextScript(gArmsData[gSelectedArms].code + 1000);
|
||||||
|
else
|
||||||
|
StartTextScript(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PutCampObject()
|
||||||
|
{
|
||||||
|
//Get rects
|
||||||
|
RECT rcPer = {72, 48, 80, 56};
|
||||||
|
RECT rcNone = {80, 48, 96, 56};
|
||||||
|
RECT rcLv = {80, 80, 96, 88};
|
||||||
|
RECT rcView = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||||
|
RECT rcCur1[2];
|
||||||
|
RECT rcCur2[2];
|
||||||
|
rcCur1[0] = {0, 88, 40, 128};
|
||||||
|
rcCur1[1] = {40, 88, 80, 128};
|
||||||
|
rcCur2[0] = {80, 88, 112, 104};
|
||||||
|
rcCur2[1] = {80, 104, 112, 120};
|
||||||
|
RECT rcTitle1 = {80, 48, 144, 56};
|
||||||
|
RECT rcTitle2 = {80, 56, 144, 64};
|
||||||
|
RECT rcBoxTop = {0, 0, 244, 8};
|
||||||
|
RECT rcBoxBody = {0, 8, 244, 16};
|
||||||
|
RECT rcBoxBottom = {0, 16, 244, 24};
|
||||||
|
|
||||||
|
//Draw box
|
||||||
|
int y;
|
||||||
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, (WINDOW_HEIGHT - 224) / 2, &rcBoxTop, 26);
|
||||||
|
for (y = 1; y < 18; y++)
|
||||||
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, (WINDOW_HEIGHT - 224) / 2 * (y + 1), &rcBoxBody, 26);
|
||||||
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, (WINDOW_HEIGHT - 224) / 2 * (y + 1), &rcBoxBottom, 26);
|
||||||
|
|
||||||
|
//Move titles
|
||||||
|
if (gCampTitleY > (WINDOW_HEIGHT - 208) / 2)
|
||||||
|
--gCampTitleY;
|
||||||
|
|
||||||
|
//Draw titles
|
||||||
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 224) / 2, gCampTitleY, &rcTitle1, 26);
|
||||||
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 224) / 2, gCampTitleY + 52, &rcTitle2, 26);
|
||||||
|
|
||||||
|
//Draw arms cursor
|
||||||
|
static int flash;
|
||||||
|
++flash;
|
||||||
|
|
||||||
|
if (gCampActive)
|
||||||
|
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, 24, &rcCur1[1], 26);
|
||||||
|
else
|
||||||
|
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, 24, &rcCur1[(flash >> 1) & 1], 26);
|
||||||
|
|
||||||
|
//Draw arms
|
||||||
|
for (int i = 0; i < ARMS_MAX && gArmsData[i].code; i++)
|
||||||
|
{
|
||||||
|
RECT rcArms;
|
||||||
|
rcArms.left = 16 * (gArmsData[i].code % 16);
|
||||||
|
rcArms.right = rcArms.left + 16;
|
||||||
|
rcArms.top = 16 * (gArmsData[i].code / 16);
|
||||||
|
rcArms.bottom = rcArms.top + 16;
|
||||||
|
|
||||||
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 192) / 2, &rcArms, 12);
|
||||||
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 128) / 2, &rcPer, 26);
|
||||||
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 160) / 2, &rcLv, 26);
|
||||||
|
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 160) / 2, gArmsData[i].level, 0);
|
||||||
|
|
||||||
|
//Draw ammo
|
||||||
|
if ( gArmsData[i].max_num )
|
||||||
|
{
|
||||||
|
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 144) / 2, gArmsData[i].num, 0);
|
||||||
|
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 128) / 2, gArmsData[i].max_num, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 192) / 2, (WINDOW_HEIGHT - 144) / 2, &rcNone, 26);
|
||||||
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 192) / 2, (WINDOW_HEIGHT - 128) / 2, &rcNone, 26);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Draw items cursor
|
||||||
|
if (gCampActive)
|
||||||
|
PutBitmap3(&rcView, 32 * (gSelectedItem % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (gSelectedItem / 6) + (WINDOW_HEIGHT - 88) / 2, &rcCur2[(flash >> 1) & 1], 26);
|
||||||
|
else
|
||||||
|
PutBitmap3(&rcView, 32 * (gSelectedItem % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (gSelectedItem / 6) + (WINDOW_HEIGHT - 88) / 2, &rcCur2[1], 26);
|
||||||
|
|
||||||
|
for (int i = 0; i < ITEM_MAX && gItemData[i].code; i++)
|
||||||
|
{
|
||||||
|
RECT rcItem;
|
||||||
|
rcItem.left = 32 * (gItemData[i].code % 8);
|
||||||
|
rcItem.right = rcItem.left + 32;
|
||||||
|
rcItem.top = 16 * (gItemData[i].code / 8);
|
||||||
|
rcItem.bottom = rcItem.top + 16;
|
||||||
|
|
||||||
|
PutBitmap3(&rcView, 32 * (i % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (i / 6) + (WINDOW_HEIGHT - 88) / 2, &rcItem, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int CampLoop()
|
int CampLoop()
|
||||||
{
|
{
|
||||||
RECT rcView = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
RECT rcView = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||||
|
@ -144,7 +343,7 @@ int CampLoop()
|
||||||
strcpy(name, "ArmsItem.tsc");
|
strcpy(name, "ArmsItem.tsc");
|
||||||
LoadTextScript2(name);
|
LoadTextScript2(name);
|
||||||
|
|
||||||
gCampTitleY = 24;
|
gCampTitleY = (WINDOW_HEIGHT - 192) / 2;
|
||||||
gCampActive = 0;
|
gCampActive = 0;
|
||||||
gSelectedItem = 0;
|
gSelectedItem = 0;
|
||||||
|
|
||||||
|
@ -170,8 +369,8 @@ int CampLoop()
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (g_GameFlags & 2)
|
if (g_GameFlags & 2)
|
||||||
// MoveCampCursor();
|
MoveCampCursor();
|
||||||
|
|
||||||
int tscRet = TextScriptProc();
|
int tscRet = TextScriptProc();
|
||||||
if (tscRet == 0)
|
if (tscRet == 0)
|
||||||
|
@ -180,14 +379,13 @@ int CampLoop()
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
PutBitmap4(&rcView, 0, 0, &rcView, 10);
|
PutBitmap4(&rcView, 0, 0, &rcView, 10);
|
||||||
//PutCampObject();
|
PutCampObject();
|
||||||
PutTextScript();
|
PutTextScript();
|
||||||
PutFramePerSecound();
|
PutFramePerSecound();
|
||||||
|
|
||||||
if (!gCampActive && (gKeyItem | gKeyCancel | gKeyOk) & gKeyTrg)
|
if (!gCampActive && (gKeyItem | gKeyCancel | gKeyOk) & gKeyTrg)
|
||||||
break;
|
break;
|
||||||
|
else if (g_GameFlags & 2 && (gKeyItem | gKeyCancel) & gKeyTrg)
|
||||||
if (g_GameFlags & 2 && (gKeyItem | gKeyCancel) & gKeyTrg)
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!Flip_SystemTask())
|
if (!Flip_SystemTask())
|
||||||
|
|
|
@ -26,7 +26,7 @@ extern ITEM gItemData[ITEM_MAX];
|
||||||
extern int gSelectedArms;
|
extern int gSelectedArms;
|
||||||
extern int gSelectedItem;
|
extern int gSelectedItem;
|
||||||
extern int gCampTitleY;
|
extern int gCampTitleY;
|
||||||
extern int gCampActive;
|
extern bool gCampActive;
|
||||||
|
|
||||||
void ClearArmsData();
|
void ClearArmsData();
|
||||||
void ClearItemData();
|
void ClearItemData();
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <stdint.h>
|
||||||
|
extern uint8_t gFlagNPC[1000];
|
||||||
|
extern uint8_t gSkipFlag[0x40];
|
||||||
|
|
||||||
void InitFlags();
|
void InitFlags();
|
||||||
void InitSkipFlags();
|
void InitSkipFlags();
|
||||||
void SetNPCFlag(int a);
|
void SetNPCFlag(int a);
|
||||||
|
|
23
src/Game.cpp
23
src/Game.cpp
|
@ -8,6 +8,7 @@
|
||||||
#include "NpcTbl.h"
|
#include "NpcTbl.h"
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
#include "NpcHit.h"
|
#include "NpcHit.h"
|
||||||
|
#include "MiniMap.h"
|
||||||
#include "Generic.h"
|
#include "Generic.h"
|
||||||
#include "GenericLoad.h"
|
#include "GenericLoad.h"
|
||||||
#include "ArmsItem.h"
|
#include "ArmsItem.h"
|
||||||
|
@ -108,7 +109,7 @@ int ModeOpening()
|
||||||
grcGame.left = 0;
|
grcGame.left = 0;
|
||||||
g_GameFlags = 3;
|
g_GameFlags = 3;
|
||||||
|
|
||||||
//CutNoise();
|
CutNoise();
|
||||||
|
|
||||||
int wait = 0;
|
int wait = 0;
|
||||||
while (wait < 500)
|
while (wait < 500)
|
||||||
|
@ -238,7 +239,7 @@ int ModeTitle()
|
||||||
//Reset everything
|
//Reset everything
|
||||||
InitCaret();
|
InitCaret();
|
||||||
//InitStar();
|
//InitStar();
|
||||||
//CutNoise();
|
CutNoise();
|
||||||
|
|
||||||
//Create variables
|
//Create variables
|
||||||
int anime = 0;
|
int anime = 0;
|
||||||
|
@ -527,19 +528,19 @@ int ModeAction()
|
||||||
return 0;
|
return 0;
|
||||||
if (campRet == 2)
|
if (campRet == 2)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
gMC.cond &= ~1;
|
gMC.cond &= ~1;
|
||||||
}
|
}
|
||||||
/*
|
else if (gMC.equip & 2 && gKeyTrg & gKeyMap)
|
||||||
else if ( unk_81C8598 & 2 && gKeyTrg & gKeyMap )
|
|
||||||
{
|
{
|
||||||
BackupSurface(10, &grcGame);
|
BackupSurface(10, &grcGame);
|
||||||
v3 = MiniMapLoop();
|
|
||||||
if ( !v3 )
|
int miniRet = MiniMapLoop();
|
||||||
return 0;
|
if (miniRet == 0)
|
||||||
if ( v3 == 2 )
|
return 0;
|
||||||
return 1;
|
if (miniRet == 2)
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_GameFlags & 2)
|
if (g_GameFlags & 2)
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Generic.h"
|
#include "Generic.h"
|
||||||
|
#include "MyChar.h"
|
||||||
#include "Main.h"
|
#include "Main.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "KeyControl.h"
|
#include "KeyControl.h"
|
||||||
|
@ -312,7 +313,7 @@ void InactiveWindow()
|
||||||
{
|
{
|
||||||
bActive = false;
|
bActive = false;
|
||||||
StopOrganyaMusic();
|
StopOrganyaMusic();
|
||||||
//SleepNoise();
|
SleepNoise();
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaySoundObject(7, 0);
|
PlaySoundObject(7, 0);
|
||||||
|
@ -325,7 +326,7 @@ void ActiveWindow()
|
||||||
bActive = true;
|
bActive = true;
|
||||||
StopOrganyaMusic();
|
StopOrganyaMusic();
|
||||||
PlayOrganyaMusic();
|
PlayOrganyaMusic();
|
||||||
//ResetNoise();
|
ResetNoise();
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaySoundObject(7, -1);
|
PlaySoundObject(7, -1);
|
||||||
|
|
176
src/MiniMap.cpp
Normal file
176
src/MiniMap.cpp
Normal file
|
@ -0,0 +1,176 @@
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
|
#include "CommonDefines.h"
|
||||||
|
#include "MapName.h"
|
||||||
|
#include "Draw.h"
|
||||||
|
#include "Escape.h"
|
||||||
|
#include "Game.h"
|
||||||
|
#include "KeyControl.h"
|
||||||
|
#include "Map.h"
|
||||||
|
#include "MyChar.h"
|
||||||
|
#include "Main.h"
|
||||||
|
|
||||||
|
void WriteMiniMapLine(int line)
|
||||||
|
{
|
||||||
|
RECT rcLevel[4];
|
||||||
|
rcLevel[0] = {240, 24, 241, 25};
|
||||||
|
rcLevel[1] = {241, 24, 242, 25};
|
||||||
|
rcLevel[2] = {242, 24, 243, 25};
|
||||||
|
rcLevel[3] = {243, 24, 244, 25};
|
||||||
|
|
||||||
|
for (int x = 0; x < gMap.width; x++)
|
||||||
|
{
|
||||||
|
uint8_t a = GetAttribute(x, line);
|
||||||
|
|
||||||
|
printf("x: %d y: %d a: %d\n", x, line, a);
|
||||||
|
|
||||||
|
switch (a)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
Surface2Surface(x, line, &rcLevel[0], 9, 26);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 68:
|
||||||
|
case 1:
|
||||||
|
case 64:
|
||||||
|
case 128:
|
||||||
|
case 129:
|
||||||
|
case 130:
|
||||||
|
case 131:
|
||||||
|
case 81:
|
||||||
|
case 82:
|
||||||
|
case 85:
|
||||||
|
case 86:
|
||||||
|
case 2:
|
||||||
|
case 96:
|
||||||
|
case 113:
|
||||||
|
case 114:
|
||||||
|
case 117:
|
||||||
|
case 118:
|
||||||
|
case 160:
|
||||||
|
case 161:
|
||||||
|
case 162:
|
||||||
|
case 163:
|
||||||
|
Surface2Surface(x, line, &rcLevel[1], 9, 26);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 67:
|
||||||
|
case 99:
|
||||||
|
case 80:
|
||||||
|
case 83:
|
||||||
|
case 84:
|
||||||
|
case 87:
|
||||||
|
case 112:
|
||||||
|
case 115:
|
||||||
|
case 116:
|
||||||
|
case 119:
|
||||||
|
Surface2Surface(x, line, &rcLevel[2], 9, 26);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Surface2Surface(x, line, &rcLevel[3], 9, 26);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MiniMapLoop()
|
||||||
|
{
|
||||||
|
RECT my_rect = {0, 57, 1, 58};
|
||||||
|
int my_x = (gMC.x / 0x200 + 8) / 16;
|
||||||
|
int my_y = (gMC.y / 0x200 + 8) / 16;
|
||||||
|
|
||||||
|
RECT rcView;
|
||||||
|
for (int f = 0; f <= 8; f++)
|
||||||
|
{
|
||||||
|
GetTrg();
|
||||||
|
|
||||||
|
if (gKey & KEY_ESCAPE)
|
||||||
|
{
|
||||||
|
int escRet = Call_Escape();
|
||||||
|
if (escRet == 0)
|
||||||
|
return 0;
|
||||||
|
if (escRet == 2)
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
PutBitmap4(&grcGame, 0, 0, &grcGame, 10);
|
||||||
|
|
||||||
|
rcView = {(WINDOW_WIDTH / 2) - f * gMap.width / 16, (WINDOW_HEIGHT / 2) - f * gMap.length / 16, (WINDOW_WIDTH / 2) + f * gMap.width / 16, (WINDOW_HEIGHT / 2) + f * gMap.length / 16};
|
||||||
|
PutMapName(true);
|
||||||
|
CortBox(&rcView, 0);
|
||||||
|
|
||||||
|
PutFramePerSecound();
|
||||||
|
if (!Flip_SystemTask())
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RECT rcMiniMap = {0, gMap.width, 0, gMap.length};
|
||||||
|
rcView.right = --rcView.left + gMap.width + 2;
|
||||||
|
rcView.bottom = --rcView.top + gMap.length + 2;
|
||||||
|
CortBox2(&rcMiniMap, 0, 9);
|
||||||
|
|
||||||
|
int line = 0;
|
||||||
|
uint8_t my_wait = 0;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
GetTrg();
|
||||||
|
|
||||||
|
if ((gKeyCancel | gKeyOk) & gKeyTrg)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (gKey & KEY_ESCAPE)
|
||||||
|
{
|
||||||
|
int escRet = Call_Escape();
|
||||||
|
if (escRet == 0)
|
||||||
|
return 0;
|
||||||
|
if (escRet == 2)
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
PutBitmap4(&grcGame, 0, 0, &grcGame, 10);
|
||||||
|
CortBox(&rcView, 0);
|
||||||
|
|
||||||
|
if (gMap.length > line)
|
||||||
|
WriteMiniMapLine(line++);
|
||||||
|
if (gMap.length > line)
|
||||||
|
WriteMiniMapLine(line++);
|
||||||
|
PutBitmap3(&grcGame, rcView.left + 1, rcView.top + 1, &rcMiniMap, 9);
|
||||||
|
|
||||||
|
PutMapName(true);
|
||||||
|
|
||||||
|
if ((++my_wait >> 3) & 1)
|
||||||
|
PutBitmap3(&grcGame, my_x + rcView.left + 1, my_y + rcView.top + 1, &my_rect, 26);
|
||||||
|
|
||||||
|
PutFramePerSecound();
|
||||||
|
if (!Flip_SystemTask())
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
for ( f = 8; f >= -1; --f )
|
||||||
|
{
|
||||||
|
GetTrg();
|
||||||
|
if ( gKey & 0x8000 )
|
||||||
|
{
|
||||||
|
v3 = Call_Escape(gscreen);
|
||||||
|
if ( !v3 )
|
||||||
|
return 0;
|
||||||
|
if ( v3 == 2 )
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
PutBitmap4(&grcGame, 0, 0, &grcGame, 10);
|
||||||
|
rcView.left = 160 - f * gMap.width / 16;
|
||||||
|
rcView.right = f * gMap.width / 16 + 160;
|
||||||
|
rcView.top = 120 - f * gMap.length / 16;
|
||||||
|
rcView.bottom = f * gMap.length / 16 + 120;
|
||||||
|
PutMapName(1);
|
||||||
|
CortBox(&rcView, 0);
|
||||||
|
PutFramePerSecound();
|
||||||
|
if ( !Flip_SystemTask(gscreen) )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
2
src/MiniMap.h
Normal file
2
src/MiniMap.h
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#pragma once
|
||||||
|
int MiniMapLoop();
|
121
src/MyChar.cpp
121
src/MyChar.cpp
|
@ -18,6 +18,9 @@
|
||||||
|
|
||||||
MYCHAR gMC;
|
MYCHAR gMC;
|
||||||
|
|
||||||
|
int noise_no;
|
||||||
|
unsigned int noise_freq;
|
||||||
|
|
||||||
void InitMyChar()
|
void InitMyChar()
|
||||||
{
|
{
|
||||||
memset(&gMC, 0, sizeof(MYCHAR));
|
memset(&gMC, 0, sizeof(MYCHAR));
|
||||||
|
@ -569,7 +572,7 @@ void ActMyChar_Normal(bool bKey)
|
||||||
if (gMC.xm > 0x200 || gMC.xm < -0x200)
|
if (gMC.xm > 0x200 || gMC.xm < -0x200)
|
||||||
{
|
{
|
||||||
for (int a = 0; a < 8; a++)
|
for (int a = 0; a < 8; a++)
|
||||||
SetNpChar(73, gMC.x + (Random(-8, 8) << 9), gMC.y, gMC.xm + Random(-0x200, 0x200), gMC.ym + Random(-0x200, 0x80), dir, 0, 0);
|
SetNpChar(73, gMC.x + (Random(-8, 8) << 9), gMC.y, gMC.xm + Random(-0x200, 0x200), Random(-0x200, 0x80), dir, 0, 0);
|
||||||
|
|
||||||
PlaySoundObject(56, 1);
|
PlaySoundObject(56, 1);
|
||||||
}
|
}
|
||||||
|
@ -745,3 +748,119 @@ void MoveMyChar(int x, int y)
|
||||||
gMC.x = x;
|
gMC.x = x;
|
||||||
gMC.y = y;
|
gMC.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ZeroMyCharXMove()
|
||||||
|
{
|
||||||
|
gMC.xm = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetUnitMyChar()
|
||||||
|
{
|
||||||
|
return gMC.unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetMyCharDirect(uint8_t dir)
|
||||||
|
{
|
||||||
|
switch (dir)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
gMC.cond |= 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
gMC.cond &= ~1;
|
||||||
|
|
||||||
|
if (dir < 10)
|
||||||
|
{
|
||||||
|
gMC.direct = dir;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < NPC_MAX; i++)
|
||||||
|
{
|
||||||
|
if (gNPC[i].code_event == dir)
|
||||||
|
{
|
||||||
|
if (gMC.x <= gNPC[i].x)
|
||||||
|
gMC.direct = 2;
|
||||||
|
else
|
||||||
|
gMC.direct = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gMC.xm = 0;
|
||||||
|
AnimationMyChar(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChangeMyUnit(uint8_t a)
|
||||||
|
{
|
||||||
|
gMC.unit = a;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PitMyChar()
|
||||||
|
{
|
||||||
|
gMC.y += 0x4000;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EquipItem(int flag, bool b)
|
||||||
|
{
|
||||||
|
if (b)
|
||||||
|
gMC.equip |= flag;
|
||||||
|
else
|
||||||
|
gMC.equip &= ~flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetCheck()
|
||||||
|
{
|
||||||
|
gMC.cond &= ~1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetNoise(int no, int freq)
|
||||||
|
{
|
||||||
|
noise_freq = freq;
|
||||||
|
noise_no = no;
|
||||||
|
|
||||||
|
if (no == 1)
|
||||||
|
{
|
||||||
|
ChangeSoundFrequency(40, noise_freq);
|
||||||
|
ChangeSoundFrequency(41, noise_freq + 100);
|
||||||
|
PlaySoundObject(40, -1);
|
||||||
|
PlaySoundObject(41, -1);
|
||||||
|
}
|
||||||
|
else if (no == 2)
|
||||||
|
{
|
||||||
|
PlaySoundObject(58, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutNoise()
|
||||||
|
{
|
||||||
|
noise_no = 0;
|
||||||
|
PlaySoundObject(40, 0);
|
||||||
|
PlaySoundObject(41, 0);
|
||||||
|
PlaySoundObject(58, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetNoise()
|
||||||
|
{
|
||||||
|
if (noise_no == 1)
|
||||||
|
{
|
||||||
|
ChangeSoundFrequency(40, noise_freq);
|
||||||
|
ChangeSoundFrequency(41, noise_freq + 100);
|
||||||
|
PlaySoundObject(40, -1);
|
||||||
|
PlaySoundObject(41, -1);
|
||||||
|
}
|
||||||
|
else if (noise_no == 2)
|
||||||
|
{
|
||||||
|
PlaySoundObject(58, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SleepNoise()
|
||||||
|
{
|
||||||
|
PlaySoundObject(40, 0);
|
||||||
|
PlaySoundObject(41, 0);
|
||||||
|
PlaySoundObject(58, 0);
|
||||||
|
}
|
11
src/MyChar.h
11
src/MyChar.h
|
@ -57,3 +57,14 @@ void ActMyChar(bool bKey);
|
||||||
void GetMyCharPosition(int *x, int *y);
|
void GetMyCharPosition(int *x, int *y);
|
||||||
void SetMyCharPosition(int x, int y);
|
void SetMyCharPosition(int x, int y);
|
||||||
void MoveMyChar(int x, int y);
|
void MoveMyChar(int x, int y);
|
||||||
|
void ZeroMyCharXMove();
|
||||||
|
int GetUnitMyChar();
|
||||||
|
void SetMyCharDirect(uint8_t dir);
|
||||||
|
void ChangeMyUnit(uint8_t a);
|
||||||
|
void PitMyChar();
|
||||||
|
void EquipItem(int flag, bool b);
|
||||||
|
void ResetCheck();
|
||||||
|
void SetNoise(int no, int freq);
|
||||||
|
void CutNoise();
|
||||||
|
void ResetNoise();
|
||||||
|
void SleepNoise();
|
||||||
|
|
|
@ -770,7 +770,7 @@ void HitMyCharNpChar()
|
||||||
if (hit && gNPC[i].code_char == 1)
|
if (hit && gNPC[i].code_char == 1)
|
||||||
{
|
{
|
||||||
PlaySoundObject(14, 1);
|
PlaySoundObject(14, 1);
|
||||||
//AddExpMyChar(gNPC[i].exp);
|
AddExpMyChar(gNPC[i].exp);
|
||||||
gNPC[i].cond = 0;
|
gNPC[i].cond = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -141,6 +141,42 @@ void DamageMyChar(int damage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ZeroArmsEnergy_All()
|
||||||
|
{
|
||||||
|
for (int a = 0; a < ARMS_MAX; a++)
|
||||||
|
{
|
||||||
|
gArmsData[a].level = 1;
|
||||||
|
gArmsData[a].exp = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddBulletMyChar(int no, int val)
|
||||||
|
{
|
||||||
|
//Missile Launcher
|
||||||
|
for (int a = 0; a < ARMS_MAX; a++)
|
||||||
|
{
|
||||||
|
if (gArmsData[a].code == 5)
|
||||||
|
{
|
||||||
|
gArmsData[a].num += val;
|
||||||
|
if (gArmsData[a].num > gArmsData[a].max_num)
|
||||||
|
gArmsData[a].num = gArmsData[a].max_num;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Super Missile Launcher
|
||||||
|
for (int a = 0; a < ARMS_MAX; a++)
|
||||||
|
{
|
||||||
|
if (gArmsData[a].code == 10)
|
||||||
|
{
|
||||||
|
gArmsData[a].num += val;
|
||||||
|
if (gArmsData[a].num > gArmsData[a].max_num)
|
||||||
|
gArmsData[a].num = gArmsData[a].max_num;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AddLifeMyChar(int x)
|
void AddLifeMyChar(int x)
|
||||||
{
|
{
|
||||||
gMC.life += x;
|
gMC.life += x;
|
||||||
|
|
|
@ -6,7 +6,12 @@ struct ARMS_LEVEL
|
||||||
|
|
||||||
extern ARMS_LEVEL gArmsLevelTable[14];
|
extern ARMS_LEVEL gArmsLevelTable[14];
|
||||||
|
|
||||||
|
void AddExpMyChar(int x);
|
||||||
|
void ZeroExpMyChar();
|
||||||
|
bool IsMaxExpMyChar();
|
||||||
void DamageMyChar(int damage);
|
void DamageMyChar(int damage);
|
||||||
|
void ZeroArmsEnergy_All();
|
||||||
|
void AddBulletMyChar(int no, int val);
|
||||||
void AddLifeMyChar(int x);
|
void AddLifeMyChar(int x);
|
||||||
void AddMaxLifeMyChar(int val);
|
void AddMaxLifeMyChar(int val);
|
||||||
void PutArmsEnergy(bool flash);
|
void PutArmsEnergy(bool flash);
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
#include "Tags.h"
|
#include "Tags.h"
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
|
#include "Caret.h"
|
||||||
#include "MyChar.h"
|
#include "MyChar.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Flags.h"
|
#include "Flags.h"
|
||||||
|
@ -148,7 +149,7 @@ void SetDestroyNpChar(int x, int y, int w, int num)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Flash effect
|
//Flash effect
|
||||||
//SetCaret(x, y, 12, 0);
|
SetCaret(x, y, 12, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetDestroyNpCharUp(int x, int y, int w, int num)
|
void SetDestroyNpCharUp(int x, int y, int w, int num)
|
||||||
|
@ -163,7 +164,7 @@ void SetDestroyNpCharUp(int x, int y, int w, int num)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Flash effect
|
//Flash effect
|
||||||
//SetCaret(x, y, 12, 0);
|
SetCaret(x, y, 12, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetExpObjects(int x, int y, int exp)
|
void SetExpObjects(int x, int y, int exp)
|
||||||
|
|
101
src/Profile.cpp
101
src/Profile.cpp
|
@ -38,7 +38,104 @@ bool SaveProfile(char *name)
|
||||||
|
|
||||||
bool LoadProfile(char *name)
|
bool LoadProfile(char *name)
|
||||||
{
|
{
|
||||||
return false;
|
char path[PATH_LENGTH];
|
||||||
|
|
||||||
|
//Get path
|
||||||
|
if (name)
|
||||||
|
strcpy(path, name);
|
||||||
|
else
|
||||||
|
sprintf(path, "%s/%s", gModulePath, gDefaultName);
|
||||||
|
|
||||||
|
//Open file
|
||||||
|
PROFILE profile;
|
||||||
|
|
||||||
|
SDL_RWops *fp = SDL_RWFromFile(path, "rb");
|
||||||
|
if (!fp)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//Check header code
|
||||||
|
SDL_RWread(fp, profile.code, 8, 1);
|
||||||
|
if (memcmp(profile.code, gProfileCode, 8))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//Read data
|
||||||
|
SDL_RWseek(fp, 0, RW_SEEK_SET); //Pixel epic redundant code 😎😎😎
|
||||||
|
SDL_RWread(fp, profile.code, 8, 1);
|
||||||
|
profile.stage = SDL_ReadLE32(fp);
|
||||||
|
profile.music = SDL_ReadLE32(fp);
|
||||||
|
profile.x = SDL_ReadLE32(fp);
|
||||||
|
profile.y = SDL_ReadLE32(fp);
|
||||||
|
profile.direct = SDL_ReadLE32(fp);
|
||||||
|
profile.max_life = SDL_ReadLE16(fp);
|
||||||
|
profile.star = SDL_ReadLE16(fp);
|
||||||
|
profile.life = SDL_ReadLE16(fp);
|
||||||
|
profile.a = SDL_ReadLE16(fp);
|
||||||
|
profile.select_arms = SDL_ReadLE32(fp);
|
||||||
|
profile.select_item = SDL_ReadLE32(fp);
|
||||||
|
profile.equip = SDL_ReadLE32(fp);
|
||||||
|
profile.unit = SDL_ReadLE32(fp);
|
||||||
|
profile.counter = SDL_ReadLE32(fp);
|
||||||
|
for (int arm = 0; arm < 8; arm++)
|
||||||
|
{
|
||||||
|
profile.arms[arm].code = SDL_ReadLE32(fp);
|
||||||
|
profile.arms[arm].level = SDL_ReadLE32(fp);
|
||||||
|
profile.arms[arm].exp = SDL_ReadLE32(fp);
|
||||||
|
profile.arms[arm].max_num = SDL_ReadLE32(fp);
|
||||||
|
profile.arms[arm].num = SDL_ReadLE32(fp);
|
||||||
|
}
|
||||||
|
for (int item = 0; item < 32; item++)
|
||||||
|
profile.items[item].code = SDL_ReadLE32(fp);
|
||||||
|
SDL_RWread(fp, profile.permitstage, 8, 8);
|
||||||
|
SDL_RWread(fp, profile.permit_mapping, 0x80, 1);
|
||||||
|
SDL_RWread(fp, profile.FLAG, 4, 1);
|
||||||
|
SDL_RWread(fp, profile.flags, 1000, 1);
|
||||||
|
SDL_RWclose(fp);
|
||||||
|
|
||||||
|
//Set things
|
||||||
|
gSelectedArms = profile.select_arms;
|
||||||
|
gSelectedItem = profile.select_item;
|
||||||
|
gCounter = profile.counter;
|
||||||
|
|
||||||
|
memcpy(gArmsData, profile.arms, sizeof(gArmsData));
|
||||||
|
memcpy(gItemData, profile.items, sizeof(gItemData));
|
||||||
|
//memcpy(gPermitStage, profile.permitstage, 0x40u);
|
||||||
|
//memcpy(gMapping, profile.permit_mapping, 0x80u);
|
||||||
|
memcpy(gFlagNPC, profile.flags, 1000);
|
||||||
|
|
||||||
|
//Load stage
|
||||||
|
ChangeMusic(profile.music);
|
||||||
|
InitMyChar();
|
||||||
|
if (!TransferStage(profile.stage, 0, 0, 1))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//Set character properties
|
||||||
|
gMC.equip = profile.equip;
|
||||||
|
gMC.unit = profile.unit;
|
||||||
|
gMC.direct = profile.direct;
|
||||||
|
gMC.max_life = profile.max_life;
|
||||||
|
gMC.life = profile.life;
|
||||||
|
gMC.star = profile.star;
|
||||||
|
gMC.cond = 0x80;
|
||||||
|
gMC.air = 1000;
|
||||||
|
gMC.lifeBr = profile.life;
|
||||||
|
gMC.x = profile.x;
|
||||||
|
gMC.y = profile.y;
|
||||||
|
|
||||||
|
gMC.rect_arms.left = 24 * (gArmsData[gSelectedArms].code % 10);
|
||||||
|
gMC.rect_arms.right = gMC.rect_arms.left + 24;
|
||||||
|
gMC.rect_arms.top = 32 * (gArmsData[gSelectedArms].code / 10);
|
||||||
|
gMC.rect_arms.bottom = gMC.rect_arms.top + 16;
|
||||||
|
|
||||||
|
//Reset stuff
|
||||||
|
ClearFade();
|
||||||
|
SetFrameMyChar();
|
||||||
|
SetFrameTargetMyChar(16);
|
||||||
|
//InitBossLife();
|
||||||
|
CutNoise();
|
||||||
|
//InitStar();
|
||||||
|
ClearValueView();
|
||||||
|
//gCurlyShoot_wait = 0;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InitializeGame()
|
bool InitializeGame()
|
||||||
|
@ -58,7 +155,7 @@ bool InitializeGame()
|
||||||
SetFrameMyChar();
|
SetFrameMyChar();
|
||||||
SetFrameTargetMyChar(16);
|
SetFrameTargetMyChar(16);
|
||||||
//InitBossLife();
|
//InitBossLife();
|
||||||
//CutNoise();
|
CutNoise();
|
||||||
ClearValueView();
|
ClearValueView();
|
||||||
//gCurlyShoot_wait = 0;
|
//gCurlyShoot_wait = 0;
|
||||||
SetFadeMask();
|
SetFadeMask();
|
||||||
|
|
|
@ -1,5 +1,31 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "ArmsItem.h"
|
||||||
|
|
||||||
|
struct PROFILE
|
||||||
|
{
|
||||||
|
char code[8];
|
||||||
|
int stage;
|
||||||
|
int music;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int direct;
|
||||||
|
int16_t max_life;
|
||||||
|
int16_t star;
|
||||||
|
int16_t life;
|
||||||
|
int16_t a;
|
||||||
|
int select_arms;
|
||||||
|
int select_item;
|
||||||
|
int equip;
|
||||||
|
int unit;
|
||||||
|
int counter;
|
||||||
|
ARMS arms[8];
|
||||||
|
ITEM items[32];
|
||||||
|
char permitstage[8][8];
|
||||||
|
char permit_mapping[0x80];
|
||||||
|
char FLAG[4];
|
||||||
|
uint8_t flags[1000];
|
||||||
|
};
|
||||||
|
|
||||||
bool IsProfile();
|
bool IsProfile();
|
||||||
bool SaveProfile(char *name);
|
bool SaveProfile(char *name);
|
||||||
|
|
|
@ -638,6 +638,18 @@ int TextScriptProc()
|
||||||
SubItemData(z);
|
SubItemData(z);
|
||||||
gTS.p_read += 8;
|
gTS.p_read += 8;
|
||||||
}
|
}
|
||||||
|
else if (IS_COMMAND('E','Q','+'))
|
||||||
|
{
|
||||||
|
z = GetTextScriptNo(gTS.p_read + 4);
|
||||||
|
EquipItem(z, true);
|
||||||
|
gTS.p_read += 8;
|
||||||
|
}
|
||||||
|
else if (IS_COMMAND('E','Q','-'))
|
||||||
|
{
|
||||||
|
z = GetTextScriptNo(gTS.p_read + 4);
|
||||||
|
EquipItem(z, false);
|
||||||
|
gTS.p_read += 8;
|
||||||
|
}
|
||||||
else if (IS_COMMAND('A','M','+'))
|
else if (IS_COMMAND('A','M','+'))
|
||||||
{
|
{
|
||||||
w = GetTextScriptNo(gTS.p_read + 4);
|
w = GetTextScriptNo(gTS.p_read + 4);
|
||||||
|
|
Loading…
Add table
Reference in a new issue