This commit is contained in:
cuckydev 2019-02-12 21:27:14 -05:00
commit c387c31d04
8 changed files with 473 additions and 398 deletions

View file

@ -14,12 +14,15 @@ This project currently depends on SDL2 and Freetype2.
## Building ## Building
Just run 'make' in the base directory, preferably with some of the following optional settings: The project is currently built 'the Linux way':
Just run 'make' in the base directory, preferably with some of the following settings:
* RELEASE=1 to compile a release build (optimised, stripped, etc.) * RELEASE=1 to compile a release build (optimised, stripped, etc.)
* STATIC=1 to produce a statically-linked executable (good for Windows builds) * STATIC=1 to produce a statically-linked executable (good for Windows builds)
* JAPANESE=1 to enable the Japanese-language build (instead of the unofficial Aeon Genesis English translation) * JAPANESE=1 to enable the Japanese-language build (instead of the unofficial Aeon Genesis English translation)
* FIX_BUGS=1 to fix certain bugs (see [src/Bug Fixes.txt](https://github.com/cuckydev/Cave-Story-Engine-2/blob/master/src/Bug%20Fixes.txt)) * FIX_BUGS=1 to fix certain bugs (see [src/Bug Fixes.txt](https://github.com/cuckydev/Cave-Story-Engine-2/blob/master/src/Bug%20Fixes.txt))
* WINDOWS=1 to enable Windows-only features like a unique file/taskbar icon, and system font loading (needed for the font setting in Config.dat to do anything)
## Running ## Running

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

View file

@ -1,2 +1,5 @@
Main.cpp : void SystemTask() Main.cpp : void SystemTask()
Pixel intended for the second alternate up key to be the plus key, Japanese keyboards have the plus key where the semi-colon key is, causing errors on other keyboard layouts) Pixel intended for the second alternate up key to be the plus key, Japanese keyboards have the plus key where the semi-colon key is, causing errors on other keyboard layouts)
SelStage.cpp : int StageSelectLoop(int *p_event)
The screencap that serves as the menu's background was being drawn with transparency enabled. This can cause moving sprites (like the text) to leave a trail.

View file

@ -234,21 +234,52 @@ static bool LoadBitmap(SDL_RWops *fp, int surf_no, bool create_surface)
{ {
if (create_surface == false || MakeSurface_Generic(surface->w, surface->h, surf_no)) if (create_surface == false || MakeSurface_Generic(surface->w, surface->h, surf_no))
{ {
SDL_Surface *converted_surface = SDL_ConvertSurface(surface, surf[surf_no].surface->format, 0); if (gWindowScale == 1)
if (converted_surface == NULL)
{ {
printf("Couldn't convert bitmap to surface format (surface id %d)\nSDL Error: %s\n", surf_no, SDL_GetError()); SDL_Rect dst_rect = {0, 0, surface->w, surface->h};
} SDL_BlitSurface(surface, NULL, surf[surf_no].surface, &dst_rect);
else SDL_FreeSurface(surface);
{
SDL_Rect dst_rect = {0, 0, converted_surface->w * magnification, converted_surface->h * magnification};
SDL_BlitScaled(converted_surface, NULL, surf[surf_no].surface, &dst_rect);
SDL_FreeSurface(converted_surface);
surf[surf_no].needs_updating = true; surf[surf_no].needs_updating = true;
printf(" ^ Successfully loaded\n"); printf(" ^ Successfully loaded\n");
success = true; success = true;
} }
else
{
SDL_Surface *converted_surface = SDL_ConvertSurface(surface, surf[surf_no].surface->format, 0);
if (converted_surface == NULL)
{
printf("Couldn't convert bitmap to surface format (surface id %d)\nSDL Error: %s\n", surf_no, SDL_GetError());
}
else
{
// Upscale the bitmap to the game's native resolution (SDL_BlitScaled is buggy, so we have to do it on our own)
const unsigned char (*src_pixels)[converted_surface->pitch] = (unsigned char(*)[converted_surface->pitch])converted_surface->pixels;
unsigned char (*dst_pixels)[surf[surf_no].surface->pitch] = (unsigned char(*)[surf[surf_no].surface->pitch])surf[surf_no].surface->pixels;
for (int h = 0; h < converted_surface->h; ++h)
{
const unsigned long *src_row = (unsigned long*)src_pixels[h];
unsigned long *dst_row = (unsigned long*)dst_pixels[h * gWindowScale];
for (int w = 0; w < converted_surface->w; ++w)
{
const unsigned long src_pixel = *src_row++;
for (int i = 0; i < gWindowScale; ++i)
*dst_row++ = src_pixel;
}
for (int i = 1; i < gWindowScale; ++i)
memcpy(dst_pixels[(h * gWindowScale) + i], dst_pixels[h * gWindowScale], surf[surf_no].surface->w * sizeof(unsigned long));
}
SDL_FreeSurface(converted_surface);
surf[surf_no].needs_updating = true;
printf(" ^ Successfully loaded\n");
success = true;
}
}
} }
SDL_FreeSurface(surface); SDL_FreeSurface(surface);

View file

@ -165,7 +165,12 @@ int StageSelectLoop(int *p_event)
if (tscRet == 2) if (tscRet == 2)
return 2; return 2;
#ifdef FIX_BUGS
PutBitmap4(&rcView, 0, 0, &rcView, 10);
#else
// The original accidentally drew the screencap with transparency enabled
PutBitmap3(&rcView, 0, 0, &rcView, 10); PutBitmap3(&rcView, 0, 0, &rcView, 10);
#endif
PutStageSelectObject(); PutStageSelectObject();
PutTextScript(); PutTextScript();

File diff suppressed because it is too large Load diff

View file

@ -54,13 +54,13 @@ struct TEXT_SCRIPT
uint8_t wait_beam; uint8_t wait_beam;
}; };
bool InitTextScript2(); BOOL InitTextScript2();
void EndTextScript(); void EndTextScript();
void EncryptionBinaryData2(uint8_t *pData, int size); void EncryptionBinaryData2(uint8_t *pData, int size);
bool LoadTextScript2(const char *name); bool LoadTextScript2(const char *name);
bool LoadTextScript_Stage(char *name); bool LoadTextScript_Stage(char *name);
void GetTextScriptPath(char *path); void GetTextScriptPath(char *path);
bool StartTextScript(int no); BOOL StartTextScript(int no);
void StopTextScript(); void StopTextScript();
void PutTextScript(); void PutTextScript();
int TextScriptProc(); int TextScriptProc();