shithub: cstory

Download patch

ref: 54ee8d13478cc71fbc1f84aca71b391928fd8201
parent: d131737d2ec5d2b15d97ff18051d4b9407c3285d
parent: 4680607e593c9cb5e9b724fedb09e525ecb7c499
author: Gabriel Ravier <[email protected]>
date: Tue May 7 15:43:38 EDT 2019

Merge branch 'master' into addBetterMakefileDebugFlags

--- a/msvc2003/devilution/comparer-config.toml
+++ b/msvc2003/devilution/comparer-config.toml
@@ -12,6 +12,14 @@
 size = 0x100
 
 [[func]]
+name = "ActBack"
+addr = 0x402370
+
+[[func]]
+name = "PutBack"
+addr = 0x4023D0
+
+[[func]]
 name = "PutFront"
 addr = 0x402830
 
@@ -272,6 +280,14 @@
 addr = 0x40AC90
 
 [[func]]
+name = "LoadConfigData"
+addr = 0x40AD60
+
+[[func]]
+name = "DefaultConfigData"
+addr = 0x40AE30
+
+[[func]]
 name = "Call_Escape"
 addr = 0x40DD70
 
@@ -605,6 +621,18 @@
 [[func]]
 name = "PlaySoundObject"
 addr = 0x420640
+
+[[func]]
+name = "TransferStage"
+addr = 0x420BE0
+
+[[func]]
+name = "ChangeMusic"
+addr = 0x420EE0
+
+[[func]]
+name = "ReCallMusic"
+addr = 0x420F50
 
 [[func]]
 name = "InitStar"
--- a/src/ArmsItem.cpp
+++ b/src/ArmsItem.cpp
@@ -158,9 +158,9 @@
 {
 	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 @@
 			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 @@
 		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);
--- a/src/Back.cpp
+++ b/src/Back.cpp
@@ -21,7 +21,7 @@
 	// 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 @@
 	// 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 @@
 	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 @@
 
 		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 @@
 			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 @@
 			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 @@
 			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 @@
 			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,18 +248,18 @@
 
 	}
 
-	//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;
 
@@ -266,10 +266,10 @@
 		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;
@@ -276,7 +276,7 @@
 		barRect.bottom = WINDOW_HEIGHT;
 		CortBox(&barRect, 0x000000);
 
-		//Top
+		// Top
 		barRect.left = 0;
 		barRect.top = 0;
 		barRect.right = WINDOW_WIDTH;
@@ -283,7 +283,7 @@
 		barRect.bottom = (barTop - gFrame.y) >> 9;
 		CortBox(&barRect, 0x000000);
 
-		//Right
+		// Right
 		barRect.left = (barRight - gFrame.x) >> 9;
 		barRect.top = 0;
 		barRect.right = WINDOW_WIDTH;
@@ -290,7 +290,7 @@
 		barRect.bottom = WINDOW_HEIGHT;
 		CortBox(&barRect, 0x000000);
 
-		//Bottom
+		// Bottom
 		barRect.left = 0;
 		barRect.top = (barBottom - gFrame.y) >> 9;
 		barRect.right = WINDOW_WIDTH;
--- a/src/Boss.cpp
+++ b/src/Boss.cpp
@@ -97,7 +97,7 @@
 			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 @@
 
 			if (bHit)
 			{
-				//Damage boss
+				// Damage boss
 				if (gBoss[bos].bits & npc_shootable)
 				{
 					if (gBoss[bos].cond & 0x10)
--- a/src/BossAlmo1.cpp
+++ b/src/BossAlmo1.cpp
@@ -459,7 +459,7 @@
 				PlaySoundObject(101, 1);
 			}
 
-			if ( npc->act_wait > 400 )
+			if (npc->act_wait > 400)
 			{
 				npc->act_no = 200;
 				gBoss[4].ani_no = 2;
--- a/src/BossBallos.cpp
+++ b/src/BossBallos.cpp
@@ -230,7 +230,7 @@
 				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)
--- a/src/BossOhm.cpp
+++ b/src/BossOhm.cpp
@@ -183,7 +183,7 @@
 			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 @@
 			}
 			break;
 
-		case 50: //Open mouth
+		case 50: // Open mouth
 			if (++gBoss[0].count1 > 2)
 			{
 				gBoss[0].count1 = 0;
@@ -244,7 +244,7 @@
 			}
 			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 @@
 			}
 			break;
 
-		case 70: //Close mouth
+		case 70: // Close mouth
 			if (++gBoss[0].count1 > 2)
 			{
 				gBoss[0].count1 = 0;
@@ -299,7 +299,7 @@
 			}
 			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 @@
 			}
 			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;
--- a/src/BossTwinD.cpp
+++ b/src/BossTwinD.cpp
@@ -490,7 +490,7 @@
 				}
 			}
 
-			if ( npc->count1 > 0x3FF )
+			if (npc->count1 > 0x3FF)
 				npc->count1 -= 0x400;
 
 			break;
--- a/src/BossX.cpp
+++ b/src/BossX.cpp
@@ -55,7 +55,7 @@
 				++npc->ani_no;
 			}
 
-			if ( npc->ani_no > 3 )
+			if (npc->ani_no > 3)
 				npc->ani_no = 2;
 
 			npc->xm -= 0x20;
@@ -100,7 +100,7 @@
 				++npc->ani_no;
 			}
 
-			if ( npc->ani_no > 5 )
+			if (npc->ani_no > 5)
 				npc->ani_no = 4;
 
 			npc->xm += 0x20;
--- a/src/Caret.cpp
+++ b/src/Caret.cpp
@@ -186,7 +186,7 @@
 		++crt->ani_no;
 	}
 
-	if ( crt->ani_no > 6 )
+	if (crt->ani_no > 6)
 		crt->cond = 0;
 
 	crt->x += 0x80;
@@ -345,7 +345,7 @@
 	{
 		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 @@
 		crt->rect = rcLeft[1];
 }
 
-//Tables
-CARET_TABLE gCaretTable[18] =
-{
+// Tables
+CARET_TABLE gCaretTable[18] = {
 	{0, 0},
 	{0x800, 0x800},
 	{0x1000, 0x1000},
--- a/src/CommonDefines.h
+++ b/src/CommonDefines.h
@@ -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
--- a/src/Config.cpp
+++ b/src/Config.cpp
@@ -11,7 +11,10 @@
 #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));
@@ -18,14 +21,17 @@
 
 	//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,22 +48,32 @@
 	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;
--- a/src/Config.h
+++ b/src/Config.h
@@ -2,6 +2,8 @@
 
 #include <stdint.h>
 
+#include "WindowsWrapper.h"
+
 struct CONFIG
 {
 	char proof[0x20];
@@ -14,5 +16,5 @@
 	int32_t joystick_button[8];
 };
 
-bool LoadConfigData(CONFIG *conf);
+BOOL LoadConfigData(CONFIG *conf);
 void DefaultConfigData(CONFIG *conf);
--- a/src/Draw.cpp
+++ b/src/Draw.cpp
@@ -56,7 +56,7 @@
 		if (!SystemTask())
 			return FALSE;
 
-		//Framerate limiter
+		// Framerate limiter
 		static uint32_t timePrev;
 		const uint32_t timeNow = SDL_GetTicks();
 
@@ -81,15 +81,15 @@
 {
 	(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 @@
 
 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 @@
 
 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 @@
 		}
 		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 @@
 	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 @@
 		}
 	}
 
-	//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 @@
 
 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,33 +439,32 @@
 		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);
 }
@@ -472,7 +471,7 @@
 
 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 @@
 
 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 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 @@
 
 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,11 +567,14 @@
 		fontHeight = 12;
 	}
 	else
-	{*/
+	{
 		fontWidth = 5 * magnification;
 		fontHeight = 10 * magnification;
-//	}
+	}*/
 
+	fontWidth = 5 * magnification;
+	fontHeight = 10 * magnification;
+
 	size_t data_size;
 #ifdef WINDOWS
 	// Actually use the font Config.dat specifies
@@ -632,7 +634,7 @@
 
 void EndTextObject()
 {
-	//Destroy font
+	// Destroy font
 	UnloadFont(gFont);
 	gFont = NULL;
 }
--- a/src/Ending.cpp
+++ b/src/Ending.cpp
@@ -23,21 +23,21 @@
 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++)
@@ -44,11 +44,11 @@
 	{
 		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,7 +58,7 @@
 	}
 }
 
-//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++)
@@ -65,7 +65,7 @@
 	{
 		if (!(Strip[s].flag & 0x80))
 		{
-			//Initialize cast property
+			// Initialize cast property
 			Strip[s].flag = 0x80;
 			Strip[s].x = x;
 			Strip[s].y = y;
@@ -72,7 +72,7 @@
 			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 @@
 	}
 }
 
-//Regenerate cast text
+// Regenerate cast text
 void RestoreStripper()
 {
 	for (int s = 0; s < MAX_STRIP; s++)
@@ -95,22 +95,22 @@
 	}
 }
 
-//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 @@
 	}
 }
 
-//Draw illustration
+// Draw illustration
 void PutIllust()
 {
 	RECT rcIllust = {0, 0, 160, 240};
@@ -126,7 +126,7 @@
 	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 @@
 	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,16 +146,16 @@
 {
 	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);
@@ -162,7 +162,7 @@
 		Credit.pData = NULL;
 	}
 
-	//Open file
+	// Open file
 	char path[PATH_LENGTH];
 	sprintf(path, "%s/%s", gDataPath, "Credit.tsc");
 
@@ -170,7 +170,7 @@
 	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 @@
 		return false;
 	}
 
-	//Read data
+	// Read data
 	fread(Credit.pData, 1, Credit.size, fp);
 	EncryptionBinaryData2((uint8_t*)Credit.pData, Credit.size);
 
@@ -191,7 +191,7 @@
 	fclose(fp);
 #endif
 
-	//Reset credits
+	// Reset credits
 	Credit.offset = 0;
 	Credit.wait = 0;
 	Credit.mode = 1;
@@ -198,7 +198,7 @@
 	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;
@@ -205,16 +205,16 @@
 	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 @@
 			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 @@
 
 				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 @@
 
 				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,22 +331,22 @@
 				}
 				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);
@@ -353,17 +353,17 @@
 				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,7 +375,7 @@
 	}
 }
 
-//Change illustration
+// Change illustration
 void SetCreditIllust(int a)
 {
 	ReloadIllust(a);
@@ -382,21 +382,21 @@
 	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 @@
 
 	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 @@
 		switch (mode)
 		{
 			case 0:
-				//Move down
+				// Move down
 				sprite.y += 0x33;
 				break;
 
@@ -432,31 +432,31 @@
 					{
 						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);
@@ -463,7 +463,7 @@
 		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;
--- a/src/Ending.h
+++ b/src/Ending.h
@@ -33,7 +33,7 @@
 	int y;
 };
 
-#define MAX_STRIP (WINDOW_HEIGHT / 16) + 1
+#define MAX_STRIP ((WINDOW_HEIGHT / 16) + 1)
 
 void ActionStripper();
 void PutStripper();
--- a/src/Escape.cpp
+++ b/src/Escape.cpp
@@ -13,26 +13,26 @@
 
 	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();
@@ -39,7 +39,7 @@
 
 		if (!Flip_SystemTask())
 		{
-			//Quit if window is closed
+			// Quit if window is closed
 			gKeyTrg = 0;
 			return 0;
 		}
--- a/src/Map.cpp
+++ b/src/Map.cpp
@@ -81,7 +81,7 @@
 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");
--- a/src/NpChar.cpp
+++ b/src/NpChar.cpp
@@ -53,7 +53,7 @@
 	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);
@@ -60,7 +60,7 @@
 
 	FILE *fp = fopen(path, "rb");
 	if (fp == NULL)
-		return false;
+		return FALSE;
 
 	//Read "PXE" check
 	char code[4];
@@ -71,7 +71,7 @@
 		// The original game forgot to close the file here
 		fclose(fp);
 #endif
-		return false;
+		return FALSE;
 	}
 
 	//Get amount of NPCs
@@ -128,7 +128,7 @@
 	}
 
 	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 @@
 	}
 }
 
-bool SetBulletObject(int x, int y, int val)
+BOOL SetBulletObject(int x, int y, int val)
 {
 	int tamakazu_ari[10];
 
@@ -254,7 +254,7 @@
 	}
 
 	if (!t)
-		return false;
+		return FALSE;
 
 	n = Random(1, 10 * t);
 	int bullet_no = tamakazu_ari[n % t];
@@ -272,14 +272,14 @@
 			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 @@
 			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)
--- a/src/NpChar.h
+++ b/src/NpChar.h
@@ -83,13 +83,13 @@
 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();
--- a/src/Stage.cpp
+++ b/src/Stage.cpp
@@ -132,7 +132,7 @@
 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 @@
 		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 @@
 		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 @@
 
 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()
--- a/src/TextScr.cpp
+++ b/src/TextScr.cpp
@@ -112,7 +112,7 @@
 }
 
 //Load generic .tsc
-bool LoadTextScript2(const char *name)
+BOOL LoadTextScript2(const char *name)
 {
 	//Get path
 	char path[260];
@@ -120,12 +120,12 @@
 
 	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 @@
 
 	//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 @@
 
 	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 @@
 
 	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 @@
 	//Set parameters
 	gTS.size = head_size + body_size;
 	strcpy(gTS.path, name);
-	return true;
+	return TRUE;
 }
 
 //Get current path
--- a/src/TextScr.h
+++ b/src/TextScr.h
@@ -60,8 +60,8 @@
 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();