Merge pull request #12 from Clownacy/master

Merge Clownacy/master into master
This commit is contained in:
Gabriel Ravier 2019-05-07 19:34:12 +02:00 committed by GitHub
commit 4680607e59
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 263 additions and 223 deletions

View file

@ -11,6 +11,14 @@ name = "InitBack"
addr = 0x402270
size = 0x100
[[func]]
name = "ActBack"
addr = 0x402370
[[func]]
name = "PutBack"
addr = 0x4023D0
[[func]]
name = "PutFront"
addr = 0x402830
@ -271,6 +279,14 @@ addr = 0x40ABC0
name = "SetCaret"
addr = 0x40AC90
[[func]]
name = "LoadConfigData"
addr = 0x40AD60
[[func]]
name = "DefaultConfigData"
addr = 0x40AE30
[[func]]
name = "Call_Escape"
addr = 0x40DD70
@ -606,6 +622,18 @@ addr = 0x41FE70
name = "PlaySoundObject"
addr = 0x420640
[[func]]
name = "TransferStage"
addr = 0x420BE0
[[func]]
name = "ChangeMusic"
addr = 0x420EE0
[[func]]
name = "ReCallMusic"
addr = 0x420F50
[[func]]
name = "InitStar"
addr = 0x420FA0

View file

@ -158,9 +158,9 @@ void MoveCampCursor()
{
int arms_num = 0;
int item_num = 0;
while ( gArmsData[arms_num].code != 0 )
while (gArmsData[arms_num].code != 0)
++arms_num;
while ( gItemData[item_num].code != 0 )
while (gItemData[item_num].code != 0)
++item_num;
if (arms_num == 0 && item_num == 0)
@ -228,9 +228,9 @@ void MoveCampCursor()
bChange = TRUE;
}
if ( gKeyTrg & gKeyDown )
if (gKeyTrg & gKeyDown)
{
if ( gSelectedItem / 6 == (item_num - 1) / 6 )
if (gSelectedItem / 6 == (item_num - 1) / 6)
gCampActive = FALSE;
else
gSelectedItem += 6;
@ -325,7 +325,7 @@ void PutCampObject()
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 160) / 2, gArmsData[i].level, 0);
// Draw ammo
if ( gArmsData[i].max_num )
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);

View file

@ -21,7 +21,7 @@ BOOL InitBack(const char *fName, int type)
// Unused, hilariously
color_black = GetCortBoxColor(RGB(0, 0, 0x10));
//Get width and height
// Get width and height
char path[PATH_LENGTH];
sprintf(path, "%s/%s.pbm", gDataPath, fName);
@ -38,8 +38,8 @@ BOOL InitBack(const char *fName, int type)
// This is ridiculously platform-dependant:
// It should break on big-endian CPUs, and platforms
// where short isn't 16-bit and long isn't 32-bit.
short bmp_header_buffer[7];
long bmp_header_buffer2[10];
unsigned short bmp_header_buffer[7]; // These names aren't the original. This ruins the stack frame layout.
unsigned long bmp_header_buffer2[10];
fread(bmp_header_buffer, 14, 1, fp);
@ -72,7 +72,7 @@ BOOL InitBack(const char *fName, int type)
fclose(fp);
#endif
//Set background stuff and load texture
// Set background stuff and load texture
gBack.flag = 1;
if (!ReloadBitmap_File(fName, SURFACE_ID_LEVEL_BACKGROUND))
return FALSE;
@ -138,7 +138,7 @@ void PutBack(int fx, int fy)
case 6:
case 7:
//Sky
// Sky
static unsigned int fillNext;
fillNext = 0;
for (int y = 0; y < WINDOW_HEIGHT - 240 + 88; y += 88)
@ -156,7 +156,7 @@ void PutBack(int fx, int fy)
rect.right = 320;
PutBitmap4(&grcGame, (WINDOW_WIDTH - 320) / 2, WINDOW_HEIGHT - 240, &rect, SURFACE_ID_LEVEL_BACKGROUND);
//Cloud layer 1
// Cloud layer 1
rect.top = 88;
rect.bottom = 123;
rect.left = gBack.fx / 2;
@ -167,7 +167,7 @@ void PutBack(int fx, int fy)
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
PutBitmap4(&grcGame, (320 * (i + 1)) - gBack.fx / 2 % 320, 88 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
//Cloud layer 2
// Cloud layer 2
rect.top = 123;
rect.bottom = 146;
rect.left = gBack.fx % 320;
@ -178,7 +178,7 @@ void PutBack(int fx, int fy)
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
PutBitmap4(&grcGame, (320 * (i + 1)) - gBack.fx % 320, 123 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
//Cloud layer 3
// Cloud layer 3
rect.top = 146;
rect.bottom = 176;
rect.left = 2 * gBack.fx % 320;
@ -189,7 +189,7 @@ void PutBack(int fx, int fy)
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
PutBitmap4(&grcGame, (320 * (i + 1)) - 2 * gBack.fx % 320, 146 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
//Cloud layer 4
// Cloud layer 4
rect.top = 176;
rect.bottom = 240;
rect.left = 4 * gBack.fx % 320;
@ -248,49 +248,49 @@ void PutFront(int fx, int fy)
}
//Draw black bars
if (!(g_GameFlags & 8)) //Detect if credits are running
// Draw black bars
if (!(g_GameFlags & 8)) // Detect if credits are running
{
const bool fromFocus = (gStageNo == 31); //Get if we should only draw around a 320x240 area of the focus point
const bool fromFocus = (gStageNo == 31); // Get if we should only draw around a 320x240 area of the focus point
//Get focus rect
// Get focus rect
int focusX = gFrame.x + (WINDOW_WIDTH << 8) - (320 << 8);
int focusY = gFrame.y + (WINDOW_HEIGHT << 8) - (240 << 8);
int focusR = focusX + (320 << 9);
int focusB = focusY + (240 << 9);
//Get borders
// Get borders
const int barLeft = fromFocus ? focusX : -0x1000;
const int barTop = fromFocus ? focusY : -0x1000;
const int barRight = fromFocus ? focusR : (gMap.width << 13) - 0x1000;
const int barBottom = fromFocus ? focusB : (gMap.length << 13) - 0x1000;
//Draw bars
// Draw bars
RECT barRect;
//Left
// Left
barRect.left = 0;
barRect.top = 0;
barRect.right = (barLeft - gFrame.x) >> 9;
barRect.bottom = WINDOW_HEIGHT;
CortBox(&barRect, 0x000000);
//Top
// Top
barRect.left = 0;
barRect.top = 0;
barRect.right = WINDOW_WIDTH;
barRect.bottom = (barTop - gFrame.y) >> 9;
CortBox(&barRect, 0x000000);
//Right
// Right
barRect.left = (barRight - gFrame.x) >> 9;
barRect.top = 0;
barRect.right = WINDOW_WIDTH;
barRect.bottom = WINDOW_HEIGHT;
CortBox(&barRect, 0x000000);
//Bottom
// Bottom
barRect.left = 0;
barRect.top = (barBottom - gFrame.y) >> 9;
barRect.right = WINDOW_WIDTH;

View file

@ -97,7 +97,7 @@ void HitBossBullet()
if (gBul[bul].damage == -1)
continue;
//Check if bullet touches boss
// Check if bullet touches boss
bHit = FALSE;
if (gBoss[bos].bits & npc_shootable
&& gBoss[bos].x - gBoss[bos].hit.back < gBul[bul].x + gBul[bul].enemyXL
@ -114,7 +114,7 @@ void HitBossBullet()
if (bHit)
{
//Damage boss
// Damage boss
if (gBoss[bos].bits & npc_shootable)
{
if (gBoss[bos].cond & 0x10)

View file

@ -459,7 +459,7 @@ void ActBossChar_Core(void)
PlaySoundObject(101, 1);
}
if ( npc->act_wait > 400 )
if (npc->act_wait > 400)
{
npc->act_no = 200;
gBoss[4].ani_no = 2;

View file

@ -230,7 +230,7 @@ void ActBossChar_Ballos(void)
SetQuake2(30);
PlaySoundObject(44, 1);
if ( gMC.y > npc->y + 0x6000 && gMC.x < npc->x + 0x3000 && gMC.x > npc->x - 0x3000 )
if (gMC.y > npc->y + 0x6000 && gMC.x < npc->x + 0x3000 && gMC.x > npc->x - 0x3000)
DamageMyChar(16);
for (i = 0; i < 0x10; ++i)

View file

@ -183,7 +183,7 @@ void ActBossChar_Omega()
gBoss[5].cond = 0x80;
break;
case 20: //Rising out of the ground
case 20: // Rising out of the ground
gBoss[0].act_no = 30;
gBoss[0].act_wait = 0;
gBoss[0].ani_no = 0;
@ -227,7 +227,7 @@ void ActBossChar_Omega()
}
break;
case 50: //Open mouth
case 50: // Open mouth
if (++gBoss[0].count1 > 2)
{
gBoss[0].count1 = 0;
@ -244,7 +244,7 @@ void ActBossChar_Omega()
}
break;
case 60: //Shoot out of mouth
case 60: // Shoot out of mouth
if (++gBoss[0].act_wait > 20 && gBoss[0].act_wait < 80 && !(gBoss[0].act_wait % 3))
{
if (Random(0, 9) < 8)
@ -263,7 +263,7 @@ void ActBossChar_Omega()
}
break;
case 70: //Close mouth
case 70: // Close mouth
if (++gBoss[0].count1 > 2)
{
gBoss[0].count1 = 0;
@ -299,7 +299,7 @@ void ActBossChar_Omega()
}
break;
case 90: //Go back into the ground
case 90: // Go back into the ground
SetQuake(2);
gBoss[0].y += 0x200;
@ -313,7 +313,7 @@ void ActBossChar_Omega()
}
break;
case 100: //Move to proper position for coming out of the ground
case 100: // Move to proper position for coming out of the ground
if (++gBoss[0].act_wait == 120)
{
gBoss[0].act_wait = 0;

View file

@ -490,7 +490,7 @@ void ActBossChar_Twin(void)
}
}
if ( npc->count1 > 0x3FF )
if (npc->count1 > 0x3FF)
npc->count1 -= 0x400;
break;

View file

@ -55,7 +55,7 @@ static void ActBossChar03_01(NPCHAR *npc)
++npc->ani_no;
}
if ( npc->ani_no > 3 )
if (npc->ani_no > 3)
npc->ani_no = 2;
npc->xm -= 0x20;
@ -100,7 +100,7 @@ static void ActBossChar03_01(NPCHAR *npc)
++npc->ani_no;
}
if ( npc->ani_no > 5 )
if (npc->ani_no > 5)
npc->ani_no = 4;
npc->xm += 0x20;

View file

@ -186,7 +186,7 @@ void ActCaret05(CARET *crt)
++crt->ani_no;
}
if ( crt->ani_no > 6 )
if (crt->ani_no > 6)
crt->cond = 0;
crt->x += 0x80;
@ -345,7 +345,7 @@ void ActCaret12(CARET *crt)
{
crt->ani_wait = 0;
if (++crt->ani_no > 1)
crt->cond = 0;
crt->cond = 0;
}
crt->rect = rcLeft[crt->ani_no];
@ -468,9 +468,8 @@ void ActCaret17(CARET *crt)
crt->rect = rcLeft[1];
}
//Tables
CARET_TABLE gCaretTable[18] =
{
// Tables
CARET_TABLE gCaretTable[18] = {
{0, 0},
{0x800, 0x800},
{0x1000, 0x1000},

View file

@ -1,6 +1,6 @@
#pragma once
#define PATH_LENGTH 260 //Pixel had the path size locked to 260 (dangerously low), if you tried to open the executable in a path with more than around 220 characters, it'd crash.
#define PATH_LENGTH 260 // Pixel had the path size locked to 260 (dangerously low), if you tried to open the executable in a path with more than around 220 characters, it'd crash.
#define WINDOW_WIDTH 320
#define WINDOW_HEIGHT 240

View file

@ -11,21 +11,27 @@
#include "Tags.h"
#include "Types.h"
bool LoadConfigData(CONFIG *conf)
static const char* const config_filename = "Config.dat"; // Not the original name
static const char* const config_magic = "DOUKUTSU20041206"; // Not the original name
BOOL LoadConfigData(CONFIG *conf)
{
//Clear old config data
memset(conf, 0, sizeof(CONFIG));
//Get path
char path[PATH_LENGTH];
sprintf(path, "%s/%s", gModulePath, "Config.dat");
sprintf(path, "%s/%s", gModulePath, config_filename);
//Open file
FILE *fp = fopen(path, "rb");
if (fp == NULL)
return false;
return FALSE;
//Read data
#ifdef NONPORTABLE
size_t fread_result = fread(conf, sizeof(CONFIG), 1, fp); // Not the original name
#else
//Read the version id and font name
fread(conf->proof, sizeof(conf->proof), 1, fp);
fread(conf->font_name, sizeof(conf->font_name), 1, fp);
@ -42,23 +48,33 @@ bool LoadConfigData(CONFIG *conf)
conf->bJoystick = File_ReadLE32(fp);
for (int button = 0; button < 8; button++)
conf->joystick_button[button] = File_ReadLE32(fp);
#endif
//Close file
fclose(fp);
//Check if version is correct, return that it succeeded
if (!strcmp(conf->proof, "DOUKUTSU20041206"))
return true;
//Check if version is not correct, and return if it failed
#ifdef NONPORTABLE
if (fread_result != 1 || strcmp(conf->proof, config_magic))
#else
if (strcmp(conf->proof, config_magic))
#endif
{
memset(conf, 0, sizeof(CONFIG));
return FALSE;
}
//If not, return that it failed
return false;
return TRUE;
}
void DefaultConfigData(CONFIG *conf)
{
//Claer old config data
//Clear old config data
memset(conf, 0, sizeof(CONFIG));
//Fun fact: The Linux port added this line:
//conf->display_mode = 1;
//Reset joystick settings (as these can't simply be set to 0)
conf->bJoystick = 1;
conf->joystick_button[0] = 2;

View file

@ -2,6 +2,8 @@
#include <stdint.h>
#include "WindowsWrapper.h"
struct CONFIG
{
char proof[0x20];
@ -14,5 +16,5 @@ struct CONFIG
int32_t joystick_button[8];
};
bool LoadConfigData(CONFIG *conf);
BOOL LoadConfigData(CONFIG *conf);
void DefaultConfigData(CONFIG *conf);

View file

@ -56,7 +56,7 @@ BOOL Flip_SystemTask()
if (!SystemTask())
return FALSE;
//Framerate limiter
// Framerate limiter
static uint32_t timePrev;
const uint32_t timeNow = SDL_GetTicks();
@ -81,15 +81,15 @@ BOOL StartDirectDraw(int lMagnification, int lColourDepth)
{
(void)lColourDepth;
//Initialize rendering
// Initialize rendering
SDL_InitSubSystem(SDL_INIT_VIDEO);
//Create renderer
// Create renderer
gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
if (gRenderer != NULL)
{
//Print the name of the renderer SDL2 is using
// Print the name of the renderer SDL2 is using
SDL_RendererInfo info;
SDL_GetRendererInfo(gRenderer, &info);
printf("Renderer: %s\n", info.name);
@ -120,10 +120,10 @@ BOOL StartDirectDraw(int lMagnification, int lColourDepth)
void EndDirectDraw()
{
//Quit sub-system
// Quit sub-system
SDL_QuitSubSystem(SDL_INIT_VIDEO);
//Release all surfaces
// Release all surfaces
for (int i = 0; i < SURFACE_ID_MAX; i++)
ReleaseSurface(i);
}
@ -143,7 +143,7 @@ static bool IsEnableBitmap(SDL_RWops *fp)
void ReleaseSurface(int s)
{
//Release the surface we want to release
// Release the surface we want to release
if (surf[s].in_use)
{
SDL_DestroyTexture(surf[s].texture);
@ -172,7 +172,7 @@ BOOL MakeSurface_Generic(int bxsize, int bysize, Surface_Ids surf_no)
}
else
{
//Create surface
// Create surface
surf[surf_no].surface = SDL_CreateRGBSurfaceWithFormat(0, bxsize * magnification, bysize * magnification, 0, SDL_PIXELFORMAT_RGB24);
SDL_SetSurfaceBlendMode(surf[surf_no].surface, SDL_BLENDMODE_NONE);
@ -320,7 +320,7 @@ static BOOL LoadBitmap_File(const char *name, Surface_Ids surf_no, bool create_s
char path[PATH_LENGTH];
SDL_RWops *fp;
//Attempt to load PBM
// Attempt to load PBM
sprintf(path, "%s/%s.pbm", gDataPath, name);
fp = SDL_RWFromFile(path, "rb");
if (fp)
@ -338,7 +338,7 @@ static BOOL LoadBitmap_File(const char *name, Surface_Ids surf_no, bool create_s
}
}
//Attempt to load BMP
// Attempt to load BMP
sprintf(path, "%s/%s.bmp", gDataPath, name);
fp = SDL_RWFromFile(path, "rb");
if (fp)
@ -412,22 +412,22 @@ static SDL_Rect RectToSDLRectScaled(RECT *rect)
void BackupSurface(Surface_Ids surf_no, RECT *rect)
{
//Get renderer size
// Get renderer size
int w, h;
SDL_GetRendererOutputSize(gRenderer, &w, &h);
//Get texture of what's currently rendered on screen
// Get texture of what's currently rendered on screen
SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormat(0, w, h, 0, SDL_PIXELFORMAT_RGB24);
SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE);
SDL_RenderReadPixels(gRenderer, NULL, SDL_PIXELFORMAT_RGB24, surface->pixels, surface->pitch);
//Get rects
// Get rects
SDL_Rect frameRect = RectToSDLRectScaled(rect);
SDL_BlitSurface(surface, &frameRect, surf[surf_no].surface, &frameRect);
surf[surf_no].needs_updating = true;
//Free surface
// Free surface
SDL_FreeSurface(surface);
}
@ -439,40 +439,39 @@ static void DrawBitmap(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_
surf[surf_no].needs_updating = false;
}
//Get SDL_Rects
// Get SDL_Rects
SDL_Rect clipRect = RectToSDLRectScaled(rcView);
SDL_Rect frameRect = RectToSDLRectScaled(rect);
//Get dest rect
// Get dest rect
SDL_Rect destRect = {x * magnification, y * magnification, frameRect.w, frameRect.h};
//Set cliprect
// Set cliprect
SDL_RenderSetClipRect(gRenderer, &clipRect);
SDL_SetTextureBlendMode(surf[surf_no].texture, transparent ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE);
//Draw to screen
// Draw to screen
if (SDL_RenderCopy(gRenderer, surf[surf_no].texture, &frameRect, &destRect) < 0)
printf("Failed to draw texture %d\nSDL Error: %s\n", surf_no, SDL_GetError());
//Undo cliprect
// Undo cliprect
SDL_RenderSetClipRect(gRenderer, NULL);
}
void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no) //Transparency
void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no) // Transparency
{
DrawBitmap(rcView, x, y, rect, surf_no, true);
}
void PutBitmap4(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no) //No Transparency
void PutBitmap4(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no) // No Transparency
{
DrawBitmap(rcView, x, y, rect, surf_no, false);
}
void Surface2Surface(int x, int y, RECT *rect, int to, int from)
{
//Get rects
// Get rects
SDL_Rect rcSet = {x * magnification, y * magnification, (rect->right - rect->left) * magnification, (rect->bottom - rect->top) * magnification};
SDL_Rect frameRect = RectToSDLRectScaled(rect);
@ -488,10 +487,10 @@ unsigned long GetCortBoxColor(unsigned long col)
void CortBox(RECT *rect, uint32_t col)
{
//Get rect
// Get rect
SDL_Rect destRect = RectToSDLRectScaled(rect);
//Set colour and draw
// Set colour and draw
const unsigned char col_red = col & 0x0000FF;
const unsigned char col_green = (col & 0x00FF00) >> 8;
const unsigned char col_blue = (col & 0xFF0000) >> 16;
@ -501,10 +500,10 @@ void CortBox(RECT *rect, uint32_t col)
void CortBox2(RECT *rect, uint32_t col, Surface_Ids surf_no)
{
//Get rect
// Get rect
SDL_Rect destRect = RectToSDLRectScaled(rect);
//Set colour and draw
// Set colour and draw
const unsigned char col_red = col & 0x0000FF;
const unsigned char col_green = (col & 0x00FF00) >> 8;
const unsigned char col_blue = (col & 0xFF0000) >> 16;
@ -558,7 +557,7 @@ static unsigned char* GetFontFromWindows(size_t *data_size, const char *font_nam
void InitTextObject(const char *font_name)
{
//Get font size
// Get font size
unsigned int fontWidth, fontHeight;
// The original did this, but Windows would downscale it to 5/10 anyway.
@ -568,10 +567,13 @@ void InitTextObject(const char *font_name)
fontHeight = 12;
}
else
{*/
{
fontWidth = 5 * magnification;
fontHeight = 10 * magnification;
// }
}*/
fontWidth = 5 * magnification;
fontHeight = 10 * magnification;
size_t data_size;
#ifdef WINDOWS
@ -632,7 +634,7 @@ void PutText2(int x, int y, const char *text, uint32_t color, Surface_Ids surf_n
void EndTextObject()
{
//Destroy font
// Destroy font
UnloadFont(gFont);
gFont = NULL;
}

View file

@ -23,32 +23,32 @@ CREDIT Credit;
STRIP Strip[MAX_STRIP];
ILLUSTRATION Illust;
//Update casts
// Update casts
void ActionStripper()
{
for (int s = 0; s < MAX_STRIP; s++)
{
//Move up
// Move up
if (Strip[s].flag & 0x80 && Credit.mode)
Strip[s].y -= 0x100;
//Get removed when off-screen
// Get removed when off-screen
if (Strip[s].y <= -0x2000)
Strip[s].flag = 0;
}
}
//Draw casts
// Draw casts
void PutStripper()
{
for (int s = 0; s < MAX_STRIP; s++)
{
if (Strip[s].flag & 0x80)
{
//Draw text
// Draw text
RECT rc = {0, 16 * s, 320, 16 * s + 16};
PutBitmap3(&grcFull, (Strip[s].x + ((WINDOW_WIDTH - 320) << 8)) / 0x200, Strip[s].y / 0x200, &rc, SURFACE_ID_CREDIT_CAST);
//Draw character
// Draw character
rc.left = 24 * (Strip[s].cast % 13);
rc.right = rc.left + 24;
rc.top = 24 * (Strip[s].cast / 13);
@ -58,21 +58,21 @@ void PutStripper()
}
}
//Create a cast object
// Create a cast object
void SetStripper(int x, int y, const char *text, int cast)
{
for (int s = 0; s < MAX_STRIP; s++)
{
if (!(Strip[s].flag & 0x80))
{
//Initialize cast property
// Initialize cast property
Strip[s].flag = 0x80;
Strip[s].x = x;
Strip[s].y = y;
Strip[s].cast = cast;
strcpy(Strip[s].str, text);
//Draw text
// Draw text
RECT rc = {0, 16 * s, 320, 16 * s + 16};
CortBox2(&rc, 0, SURFACE_ID_CREDIT_CAST);
PutText2(0, 16 * s, text, RGB(0xFF, 0xFF, 0xFE), SURFACE_ID_CREDIT_CAST);
@ -81,7 +81,7 @@ void SetStripper(int x, int y, const char *text, int cast)
}
}
//Regenerate cast text
// Regenerate cast text
void RestoreStripper()
{
for (int s = 0; s < MAX_STRIP; s++)
@ -95,22 +95,22 @@ void RestoreStripper()
}
}
//Handle the illustration
// Handle the illustration
void ActionIllust()
{
switch (Illust.act_no)
{
case 0: //Off-screen to the left
case 0: // Off-screen to the left
Illust.x = -0x14000;
break;
case 1: //Move in from the left
case 1: // Move in from the left
Illust.x += 0x5000;
if (Illust.x > 0)
Illust.x = 0;
break;
case 2: //Move out from the right
case 2: // Move out from the right
Illust.x -= 0x5000;
if (Illust.x < -0x14000)
Illust.x = -0x14000;
@ -118,7 +118,7 @@ void ActionIllust()
}
}
//Draw illustration
// Draw illustration
void PutIllust()
{
RECT rcIllust = {0, 0, 160, 240};
@ -126,7 +126,7 @@ void PutIllust()
PutBitmap3(&rcClip, (Illust.x + ((WINDOW_WIDTH - 320) << 8)) / 0x200, (WINDOW_HEIGHT - 240) / 2, &rcIllust, SURFACE_ID_CREDITS_IMAGE);
}
//Load illustration
// Load illustration
void ReloadIllust(int a)
{
char name[16];
@ -134,10 +134,10 @@ void ReloadIllust(int a)
ReloadBitmap_Resource(name, SURFACE_ID_CREDITS_IMAGE);
}
//Initialize and release credits
// Initialize and release credits
void InitCreditScript()
{
//Clear script state and casts
// Clear script state and casts
memset(&Credit, 0, sizeof(CREDIT));
memset(Strip, 0, sizeof(Strip));
}
@ -146,23 +146,23 @@ void ReleaseCreditScript()
{
if (Credit.pData)
{
//Free script data
// Free script data
free(Credit.pData);
Credit.pData = NULL;
}
}
//Start playing credits
// Start playing credits
bool StartCreditScript()
{
//Clear previously existing credits data
// Clear previously existing credits data
if (Credit.pData)
{
free(Credit.pData);
Credit.pData = NULL;
}
//Open file
// Open file
char path[PATH_LENGTH];
sprintf(path, "%s/%s", gDataPath, "Credit.tsc");
@ -170,7 +170,7 @@ bool StartCreditScript()
if (Credit.size == -1)
return false;
//Allcoate buffer data
// Allocate buffer data
Credit.pData = (char*)malloc(Credit.size);
if (Credit.pData == NULL)
return false;
@ -182,7 +182,7 @@ bool StartCreditScript()
return false;
}
//Read data
// Read data
fread(Credit.pData, 1, Credit.size, fp);
EncryptionBinaryData2((uint8_t*)Credit.pData, Credit.size);
@ -191,30 +191,30 @@ bool StartCreditScript()
fclose(fp);
#endif
//Reset credits
// Reset credits
Credit.offset = 0;
Credit.wait = 0;
Credit.mode = 1;
Illust.x = -0x14000;
Illust.act_no = 0;
//Modify cliprect
// Modify cliprect
grcGame.left = WINDOW_WIDTH / 2;
// These three are non-vanilla: for wide/tallscreen support
grcGame.right = ((WINDOW_WIDTH - 320) / 2) + 320;
grcGame.top = (WINDOW_HEIGHT - 240) / 2;
grcGame.bottom = ((WINDOW_HEIGHT - 240) / 2) + 240;
//Reload casts
// Reload casts
if (!ReloadBitmap_File("casts", SURFACE_ID_CASTS))
return false;
//Clear casts
// Clear casts
memset(Strip, 0, sizeof(Strip));
return true;
}
//Get number from text (4 digit)
// Get number from text (4 digit)
int GetScriptNumber(const char *text)
{
return 1000 * text[0] - 48000 +
@ -223,19 +223,19 @@ int GetScriptNumber(const char *text)
text[3] - 48;
}
//Parse credits
// Parse credits
void ActionCredit_Read()
{
while (Credit.offset < Credit.size)
{
//Get character
// Get character
uint8_t character = Credit.pData[Credit.offset];
int a, b, len;
switch (character)
{
case '[': //Create cast
//Get the range for the cast text
case '[': // Create cast
// Get the range for the cast text
a = ++Credit.offset;
while (Credit.pData[a] != ']')
@ -248,35 +248,35 @@ void ActionCredit_Read()
len = a - Credit.offset;
//Copy the text to the cast text
// Copy the text to the cast text
char text[40];
memcpy(text, &Credit.pData[Credit.offset], a - Credit.offset);
text[len] = 0;
//Get cast id
// Get cast id
Credit.offset = a + 1;
len = GetScriptNumber(&Credit.pData[a + 1]);
//Create cast object
// Create cast object
SetStripper(Credit.start_x, (WINDOW_HEIGHT << 9) + 0x1000, text, len);
//Change offset
// Change offset
Credit.offset += 4;
return;
case 'j': //Jump to label
//Get number
case 'j': // Jump to label
// Get number
b = GetScriptNumber(&Credit.pData[++Credit.offset]);
//Change offset
// Change offset
Credit.offset += 4;
//Jump to specific label
// Jump to specific label
while (Credit.offset < Credit.size)
{
if (Credit.pData[Credit.offset] == 'l')
{
//what is this
// What is this
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
Credit.offset += 4;
if (b == a)
@ -294,29 +294,29 @@ void ActionCredit_Read()
return;
case '~': //Start fading out music
case '~': // Start fading out music
++Credit.offset;
SetOrganyaFadeout();
return;
case 'f': //Flag jump
//Read numbers XXXX:YYYY
case 'f': // Flag jump
// Read numbers XXXX:YYYY
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
Credit.offset += 5;
b = GetScriptNumber(&Credit.pData[Credit.offset]);
Credit.offset += 4;
//If flag is set
// If flag is set
if (GetNPCFlag(a))
{
//Jump to label
while ( Credit.offset < Credit.size )
// Jump to label
while (Credit.offset < Credit.size)
{
if (Credit.pData[Credit.offset] == 'l')
{
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
Credit.offset += 4;
if ( b == a )
if (b == a)
return;
}
else if (IsShiftJIS(Credit.pData[Credit.offset]))
@ -331,39 +331,39 @@ void ActionCredit_Read()
}
return;
case '+': //Change casts x-position
case '+': // Change casts x-position
Credit.start_x = GetScriptNumber(&Credit.pData[++Credit.offset]) << 9;
Credit.offset += 4;
return;
case '-': //Wait for X amount of frames
case '-': // Wait for X amount of frames
Credit.wait = GetScriptNumber(&Credit.pData[++Credit.offset]);
Credit.offset += 4;
Credit.mode = 2;
return;
case '/': //Stop credits
case '/': // Stop credits
Credit.mode = 0;
return;
case '!': //Change music
case '!': // Change music
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
Credit.offset += 4;
ChangeMusic(a);
return;
}
//Progress through file
// Progress through file
++Credit.offset;
}
}
//Update credits
// Update credits
void ActionCredit()
{
if (Credit.offset < Credit.size)
{
//Update script, or if waiting, decrement the wait value
// Update script, or if waiting, decrement the wait value
if (Credit.mode == 1)
{
ActionCredit_Read();
@ -375,28 +375,28 @@ void ActionCredit()
}
}
//Change illustration
// Change illustration
void SetCreditIllust(int a)
{
ReloadIllust(a);
Illust.act_no = 1;
}
//Slide illustration off-screen
// Slide illustration off-screen
void CutCreditIllust()
{
Illust.act_no = 2;
}
//Scene of the island falling
// Scene of the island falling
int Scene_DownIsland(int mode)
{
//Setup background
// Setup background
RECT rc_frame = {(WINDOW_WIDTH - 160) / 2, (WINDOW_HEIGHT - 80) / 2, (WINDOW_WIDTH + 160) / 2, (WINDOW_HEIGHT + 80) / 2};
RECT rc_sky = {0, 0, 160, 80};
RECT rc_ground = {160, 48, 320, 80};
//Setup island
// Setup island
RECT rc_sprite = {160, 0, 200, 24};
ISLAND_SPRITE sprite;
@ -405,10 +405,10 @@ int Scene_DownIsland(int mode)
for (int wait = 0; wait < 900; wait++)
{
//Get pressed keys
// Get pressed keys
GetTrg();
//Escape menu
// Escape menu
if (gKey & 0x8000)
{
int escRet = Call_Escape();
@ -421,7 +421,7 @@ int Scene_DownIsland(int mode)
switch (mode)
{
case 0:
//Move down
// Move down
sprite.y += 0x33;
break;
@ -432,38 +432,38 @@ int Scene_DownIsland(int mode)
{
if (wait >= 600)
{
//End scene
// End scene
if (wait == 750)
wait = 900;
}
else
{
//Move down slow
// Move down slow
sprite.y += 0xC;
}
}
else
{
//Move down slower
// Move down slower
sprite.y += 0x19;
}
}
else
{
//Move down at normal speed
// Move down at normal speed
sprite.y += 0x33;
}
break;
}
//Draw scene
// Draw scene
CortBox(&grcFull, 0);
PutBitmap3(&rc_frame, 80 + (WINDOW_WIDTH - 320) / 2, 80 + (WINDOW_HEIGHT - 240) / 2, &rc_sky, SURFACE_ID_LEVEL_SPRITESET_1);
PutBitmap3(&rc_frame, sprite.x / 0x200 - 20 + (WINDOW_WIDTH - 320) / 2, sprite.y / 512 - 12 + (WINDOW_HEIGHT - 240) / 2, &rc_sprite, SURFACE_ID_LEVEL_SPRITESET_1);
PutBitmap3(&rc_frame, 80 + (WINDOW_WIDTH - 320) / 2, 128 + (WINDOW_HEIGHT - 240) / 2, &rc_ground, SURFACE_ID_LEVEL_SPRITESET_1);
PutTimeCounter(16, 8);
//Draw window
// Draw window
PutFramePerSecound();
if (!Flip_SystemTask())
return 0;

View file

@ -33,7 +33,7 @@ struct ISLAND_SPRITE
int y;
};
#define MAX_STRIP (WINDOW_HEIGHT / 16) + 1
#define MAX_STRIP ((WINDOW_HEIGHT / 16) + 1)
void ActionStripper();
void PutStripper();

View file

@ -13,33 +13,33 @@ int Call_Escape()
while (1)
{
//Get pressed keys
// Get pressed keys
GetTrg();
if (gKeyTrg & KEY_ESCAPE) //Escape is pressed, quit game
if (gKeyTrg & KEY_ESCAPE) // Escape is pressed, quit game
{
gKeyTrg = 0;
return 0;
}
if (gKeyTrg & KEY_F1) //F1 is pressed, continue
if (gKeyTrg & KEY_F1) // F1 is pressed, continue
{
gKeyTrg = 0;
return 1;
}
if (gKeyTrg & KEY_F2) //F2 is pressed, reset
if (gKeyTrg & KEY_F2) // F2 is pressed, reset
{
gKeyTrg = 0;
return 2;
}
//Draw screen
// Draw screen
CortBox(&grcFull, 0x000000);
PutBitmap3(&grcFull, (WINDOW_WIDTH - 208) / 2, (WINDOW_HEIGHT - 16) / 2, &rc, SURFACE_ID_TEXT_BOX);
PutFramePerSecound();
if (!Flip_SystemTask())
{
//Quit if window is closed
// Quit if window is closed
gKeyTrg = 0;
return 0;
}

View file

@ -81,7 +81,7 @@ BOOL LoadMapData2(const char *path_map)
BOOL LoadAttributeData(const char *path_atrb)
{
//Open file
char path[260];
char path[PATH_LENGTH];
sprintf(path, "%s/%s", gDataPath, path_atrb);
FILE *fp = fopen(path, "rb");

View file

@ -53,14 +53,14 @@ void SetUniqueParameter(NPCHAR *npc)
npc->view.bottom = gNpcTable[code].view.bottom << 9;
}
bool LoadEvent(const char *path_event)
BOOL LoadEvent(const char *path_event)
{
char path[PATH_LENGTH];
sprintf(path, "%s/%s", gDataPath, path_event);
FILE *fp = fopen(path, "rb");
if (fp == NULL)
return false;
return FALSE;
//Read "PXE" check
char code[4];
@ -71,7 +71,7 @@ bool LoadEvent(const char *path_event)
// The original game forgot to close the file here
fclose(fp);
#endif
return false;
return FALSE;
}
//Get amount of NPCs
@ -128,7 +128,7 @@ bool LoadEvent(const char *path_event)
}
fclose(fp);
return true;
return TRUE;
}
void SetNpChar(int code_char, int x, int y, int xm, int ym, int dir, NPCHAR *npc, int start_index)
@ -235,7 +235,7 @@ void SetExpObjects(int x, int y, int exp)
}
}
bool SetBulletObject(int x, int y, int val)
BOOL SetBulletObject(int x, int y, int val)
{
int tamakazu_ari[10];
@ -254,7 +254,7 @@ bool SetBulletObject(int x, int y, int val)
}
if (!t)
return false;
return FALSE;
n = Random(1, 10 * t);
int bullet_no = tamakazu_ari[n % t];
@ -272,14 +272,14 @@ bool SetBulletObject(int x, int y, int val)
gNPC[n].bits = gNpcTable[gNPC[n].code_char].bits;
gNPC[n].exp = val;
SetUniqueParameter(&gNPC[n]);
return true;
return TRUE;
}
}
return false;
return FALSE;
}
bool SetLifeObject(int x, int y, int val)
BOOL SetLifeObject(int x, int y, int val)
{
for (int n = 0x100; n < NPC_MAX; n++)
{
@ -294,11 +294,11 @@ bool SetLifeObject(int x, int y, int val)
gNPC[n].bits = gNpcTable[gNPC[n].code_char].bits;
gNPC[n].exp = val;
SetUniqueParameter(&gNPC[n]);
return true;
return TRUE;
}
}
return false;
return FALSE;
}
void VanishNpChar(NPCHAR *npc)

View file

@ -83,13 +83,13 @@ extern int gSuperXpos;
extern int gSuperYpos;
void InitNpChar();
bool LoadEvent(const char *path_event);
BOOL LoadEvent(const char *path_event);
void SetNpChar(int code_char, int x, int y, int xm, int ym, int dir, NPCHAR *npc, int start_index);
void SetDestroyNpChar(int x, int y, int w, int num);
void SetDestroyNpCharUp(int x, int y, int w, int num);
void SetExpObjects(int x, int y, int exp);
bool SetBulletObject(int x, int y, int val);
bool SetLifeObject(int x, int y, int val);
BOOL SetBulletObject(int x, int y, int val);
BOOL SetLifeObject(int x, int y, int val);
void VanishNpChar(NPCHAR *npc);
void PutNpChar(int fx, int fy);
void ActNpChar();

View file

@ -132,7 +132,7 @@ const STAGE_TABLE gTMT[95] = {
BOOL TransferStage(int no, int w, int x, int y)
{
//Move character
SetMyCharPosition(x << 13, y << 13);
SetMyCharPosition(x * 0x10 * 0x200, y * 0x10 * 0x200);
BOOL bError = FALSE;
@ -166,7 +166,7 @@ BOOL TransferStage(int no, int w, int x, int y)
bError = TRUE;
//Load background
strcpy(path, gTMT[no].back);
sprintf(path, "%s", gTMT[no].back);
if (!InitBack(path, gTMT[no].bkType))
bError = TRUE;
@ -183,28 +183,21 @@ BOOL TransferStage(int no, int w, int x, int y)
bError = TRUE;
if (bError)
{
printf("Failed to load stage %d\n", no);
return FALSE;
}
else
{
//Load map name
ReadyMapName(gTMT[no].name);
StartTextScript(w);
SetFrameMyChar();
ClearBullet();
InitCaret();
ClearValueView();
ResetQuake();
InitBossChar(gTMT[no].boss_no);
ResetFlash();
gStageNo = no;
return TRUE;
}
//Load map name
ReadyMapName(gTMT[no].name);
return FALSE;
StartTextScript(w);
SetFrameMyChar();
ClearBullet();
InitCaret();
ClearValueView();
ResetQuake();
InitBossChar(gTMT[no].boss_no);
ResetFlash();
gStageNo = no;
return TRUE;
}
//Music
@ -264,22 +257,22 @@ int gMusicNo;
void ChangeMusic(int no)
{
if (!no || no != gMusicNo)
{
//Stop and keep track of old song
gOldPos = GetOrganyaPosition();
gOldNo = gMusicNo;
StopOrganyaMusic();
if (no && no == gMusicNo)
return;
//Load .org
LoadOrganya(gMusicTable[no]);
//Stop and keep track of old song
gOldPos = GetOrganyaPosition();
gOldNo = gMusicNo;
StopOrganyaMusic();
//Reset position, volume, and then play the song
ChangeOrganyaVolume(100);
SetOrganyaPosition(0);
PlayOrganyaMusic();
gMusicNo = no;
}
//Load .org
LoadOrganya(gMusicTable[no]);
//Reset position, volume, and then play the song
ChangeOrganyaVolume(100);
SetOrganyaPosition(0);
PlayOrganyaMusic();
gMusicNo = no;
}
void ReCallMusic()

View file

@ -112,7 +112,7 @@ void EncryptionBinaryData2(uint8_t *pData, int size)
}
//Load generic .tsc
bool LoadTextScript2(const char *name)
BOOL LoadTextScript2(const char *name)
{
//Get path
char path[260];
@ -120,12 +120,12 @@ bool LoadTextScript2(const char *name)
gTS.size = GetFileSizeLong(path);
if (gTS.size == -1)
return false;
return FALSE;
//Open file
FILE *fp = fopen(path, "rb");
if (fp == NULL)
return false;
return FALSE;
//Read data
fread(gTS.data, 1, gTS.size, fp);
@ -137,11 +137,11 @@ bool LoadTextScript2(const char *name)
//Decrypt data
EncryptionBinaryData2((uint8_t*)gTS.data, gTS.size);
return true;
return TRUE;
}
//Load stage .tsc
bool LoadTextScript_Stage(const char *name)
BOOL LoadTextScript_Stage(const char *name)
{
//Open Head.tsc
char path[PATH_LENGTH];
@ -149,11 +149,11 @@ bool LoadTextScript_Stage(const char *name)
long head_size = GetFileSizeLong(path);
if (head_size == -1)
return false;
return FALSE;
FILE *fp = fopen(path, "rb");
if (fp == NULL)
return false;
return FALSE;
//Read Head.tsc
fread(gTS.data, 1, head_size, fp);
@ -166,11 +166,11 @@ bool LoadTextScript_Stage(const char *name)
long body_size = GetFileSizeLong(path);
if (body_size == -1)
return false;
return FALSE;
fp = fopen(path, "rb");
if (fp == NULL)
return false;
return FALSE;
//Read stage's tsc
fread(&gTS.data[head_size], 1, body_size, fp);
@ -181,7 +181,7 @@ bool LoadTextScript_Stage(const char *name)
//Set parameters
gTS.size = head_size + body_size;
strcpy(gTS.path, name);
return true;
return TRUE;
}
//Get current path

View file

@ -60,8 +60,8 @@ struct TEXT_SCRIPT
BOOL InitTextScript2();
void EndTextScript();
void EncryptionBinaryData2(uint8_t *pData, int size);
bool LoadTextScript2(const char *name);
bool LoadTextScript_Stage(const char *name);
BOOL LoadTextScript2(const char *name);
BOOL LoadTextScript_Stage(const char *name);
void GetTextScriptPath(char *path);
BOOL StartTextScript(int no);
void StopTextScript();