Coder Social home page Coder Social logo

nxengine / nxengine-evo Goto Github PK

View Code? Open in Web Editor NEW
480.0 33.0 81.0 8.75 MB

nxengine refactoring

Home Page: https://discord.gg/jnwmA7DhQh

License: GNU General Public License v3.0

C++ 38.97% C 59.74% CMake 0.68% Objective-C 0.28% Shell 0.27% PowerShell 0.04% XSLT 0.02%

nxengine-evo's Introduction

NXEngine-evo

A somewhat upgraded/refactored version of NXEngine by Caitlin Shaw.

Discord chat Matrix chat

Screenshot

Running the game

  • Check the wiki for Linux, macOS, and Windows-specific instructions if you'd like to build from source.
  • Check the Releases page and download the latest version if you'd rather not build it yourself.

Differences from the original version of NXEngine:

  • Port to SDL2 (thanks to PIlin)
  • More resolutions and proper widescreen support up to Full HD (thanks to EXL)
  • Animated character portraits
  • Modern main menu
  • Credits graphics specific to the Mimiga Mask ending
  • Localization support
  • Force feedback support
  • Custom soundtrack support
  • Initial mod support
  • Vita/Switch versions
  • Cleaner and partly-refactored code
  • Tons of gameplay-related bugfixes
  • Removed built-in data extractor
  • Removed replays, as they were buggy/not implemented anyway

Vita icon based on art by ClockWorkInc

nxengine-evo's People

Contributors

16bitwonder avatar alula avatar ayuusweetfish avatar bonicgamer avatar carstene1ns avatar chaoskagami avatar chloebangbang avatar clownacy avatar fridayortiz avatar gezawatt avatar gombosg avatar isage avatar jmfergeau avatar livvy94 avatar namtsui avatar ngsoftwaredev avatar ntninja avatar orbea avatar pizzadude avatar rotartsi82 avatar seonggino avatar subc2 avatar timsueberkrueb avatar treymerkley avatar xordspar0 avatar yukitty avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nxengine-evo's Issues

Fullscreen Mode Bugs

In the windows build of v2.3 certain graphics such as UI, the player, the message box, and cursors tend to disappear with a switch from fullscreen to windowed or from windowed to fullscreen. This can also break the title screen background, however that varies by resolution. Switching the resolution seems to fix the visuals, but selecting a resolution larger than what your graphics card supports (1600x1200 and 1920x1080 for me) while you are in fullscreen mode can lead to some very strange behaviour.

Tested on Windows 7 64-bit.

Freeze

The game freezes if I change resolution in full screen. In windowed mode all is good.

This is with v2.4

Win10 Pro x64 running.

Bluetooth gamepad support

I'm trying to set up my Bluetooth gamepad with the game, but no luck. Bluez and bluez-extra can use it for other systems, but I'm not sure how to go about implementing it here, or how to set it up if it already exists.

I'm running Manjaro x64, and the gamepad is a Sixaxis 3, if that helps. I build nx-evo from source, so if it's in a recent build I'd be happy to upgrade and set up from there.

Cutscene retrigger during first Balrog fight

I found a cutscene retrigger bug. During the fight with Balrog (or simply in the room if you say you don't want to fight), if you press down where Sue was before taken away by Misery, you'll talk to her again and retrigger the cutscene.





I originally posted this issue somewhat upstream (libretro/nxengine-libretro#41), but I have confirmed this issue exists in evo 2.5 as well.

Character jitters and shakes when paused in Fullscreen.

Downloaded the game from the AUR in Manjaro Linux. Everything seems to be working fine, but one minor thing I've noticed is that the character will basically vibrate if they were in motion before you pause. This, however, only happens when in fullscreen mode.

Cave Story+ assets

Is that possible to use Cave Story+ assets to enhance the game's graphical fidelity; if so, how? Thanks, regards.

Support Ogg "Remastered" music from Cave Story+ once SDL_mixer is used

I know that supporting Cave Story+ wholesale isn't a goal but, once you check off "rewrite soundlib to use SDL_mixer", might you be willing to support the "Remastered" music option from Cave Story+?

Despite the original NXEngine having been packaged for my OpenPandora (ARM+Xfce palmtop PC), I've never been able to feel comfortable playing Cave Story on the go because I could never get comfortable with the "early SNES-era graphics with NES-era music" feel I got from it. (Using Cave Story+ with original SNES-like graphics, the remastered SNES-like music, and Antimicro to map my USB controller adapter fixes that for play at home.)

Given that SDL_mixer has support for Ogg Vorbis on the music channel if it manages to dlopen the relevant libraries, I'm hoping you wouldn't find it too onerous to include a lookup table for the data/base/Ogg11/*_intro.ogg and data/base/Ogg11/*_loop.ogg files from Cave Story+ and some method of enabling their use. (Even just a hard-coded "If they're present, they're enabled" would satisfy me.)

Splicing them should be just a matter of calling Mix_LoadMUS for both pieces of the song before you start playing anything and then using Mix_HookMusicFinished to trigger looping playback of the *_loop.ogg file when non-looping playback of the *_intro.ogg file completes.

(Heck, if that proves to be problematic, I wouldn't mind producing spliced and/or transcoded files to feed to it if that's what it takes... or, for that matter, settling for an audible glitch at the transition point between the intro and loop parts.)

BK_FASTLEFT and BK_FASTLEFT_LAYERS don't respect pause screens.

BK_FASTLEFT still needs to check !game.paused (This check was removed in favor of checking GM_NORMAL, which the Esc pause menu does not affect but the inventory and map screens do.)

BK_FASTLEFT_LAYERS needs to check all three (plus an additional test in case of title screen, of course)

Support for accents and symbols

NX Engine not supporting accents always been an issue. But nobody really cared about it since there's no language selection menu or anything, making the problem just isolated for some few people :p

But since NX Enging Evo features the language choosing feature, it would be good to add support for accents such as รฉ รจ ร  รน รง and so on.

So far the french language sees its accents completely truncated (Franรงais being Franais for instance) and flooding the console with errors. :p

Send code to upstream?

I noticed that there are a lot of different repositories like this one that have updates to the NXEngine. Has anyone ever putting all those changes back together and contributing them back to the upstream? The current state of things is very fragmented...

I ask this because I just noticed that some of the bugs I found on NXEngine are already fixed here.

Most widescreen resolutions automatically disabled

Hey, I'm having a little trouble getting widescreen to work. When I run the nx-evo command and try to change the resolution, it only offers a few options, none of which are close to my actual resolution of 1360x768. However, when Iook at the output, something sticks out to me:

Setting pause: type 9 param 0
DW: 1360, DH: 768
Disabling 1280x1024
Disabling 1600x1200
Disabling 1366x768
Disabling 1440x900
Disabling 1920x1080
DW: 1360, DH: 768
Disabling 1280x1024
Disabling 1600x1200
Disabling 1366x768
Disabling 1440x900
Disabling 1920x1080
Setting pause: type 0 param 0
Writing settings...
Setting tick function to type 1 param 0

So it looks like nx-evo recognizes my resolution, but why are all of these display options taken off the table? Is it because they exceed my current resolution? Is there any way to get at least 1366x768, since it's only a few pixels off of my current resolution?

Thanks!

Game crashes when Booster v2.0 is equipped

When I equip the Booster v2.0 (given by Professor Booster after returning to Arthur's house), a text appears confirming that it has been equipped, and when I press the jump button to dismiss it, the game immediately crashes.

I have nxengine-evo 2.6 installed from the AUR under Manjaro Linux x86-64.

You can see the contents of debug.log below.

Opened Joystick 0
Name: Xbox 360 Wireless Receiver
Number of Axes: 6
Number of Buttons: 15
Number of Balls: 0
Loading settings...
Graphics::SetResolution(9)
DW: 1920, DH: 1080
Disabling 1600x1200
Setting scaling 4
DW: 1920, DH: 1080
Disabling 1600x1200
SDL_CreateWindow: 1920x1080 @ 16bpp
Graphics::InitVideo: using: opengl renderer
Graphics::FlushAll()
SIFLoader::LoadHeader: read index of 6 sections
Loading SIF section 1 from address 003b
Loading SIF section 2 from address 0437
SIFSpritesSect: loading 490 sprites
Graphics::FlushAll()
Loading font file font_4.fnt
Loading font file /usr/share/nxengine/data/font_4.fnt
Loading Sound FX...
LoadFXCache: restoring pxts from cache
Calculating pitch scale...
-- Drums loaded from cache
Reading npc.tbl...
InitList::CallFunctions(8f6543c0): executing 61 functions...
initslopetable: generating slopetables.
initmapfirsttime: loading data/tilekey.dat.
tsc_load: loading '/usr/share/nxengine/data/Head.tsc' to page 0
<> tsc_compile bufsize = 1461 pageno = 0
tsc_load: loading '/usr/share/nxengine/data/ArmsItem.tsc' to page 2
<> tsc_compile bufsize = 9305 pageno = 2
tsc_load: loading '/usr/share/nxengine/data/StageSelect.tsc' to page 3
<> tsc_compile bufsize = 275 pageno = 3
Setting tick function to type 1 param 0
Setting tick function to type 6 param 0
Entering main loop...
 >> Entering stage 72: 'u'.
load_map: level size 21x16
load_map: '/usr/share/nxengine/data/Stage/Kings.pxm' loaded OK! - 21x16
load_pxa: reading in /usr/share/nxengine/data/Stage/White.pxa
load_entities: reading in /usr/share/nxengine/data/Stage/Kings.pxe
tsc_load: loading '/usr/share/nxengine/data/Stage/Kings.tsc' to page 1
<> tsc_compile bufsize = 359 pageno = 1
StageBossManager::SetType(0)
-- Starting on-entry script 100
Looking for script #0100 in 1 (7)
  - Started script 0100
Game minimized or lost focus--pausing...
Focus regained, resuming play...
  - Stopped script 0100
Setting tick function to type 7 param 0
niku_load: couldn't open file '/home/xxx/.local/share/nxengine/nxengine-evo/290.rec'
 >> music(24)
ogg11_load: /home/xxx/.local/share/nxengine/data/Ogg11/curly_intro.ogg, /home/xxx/.local/share/nxengine/data/Ogg11/curly_loop.ogg

 >> Entering stage 0: 'Null'.
load_map: level size 21x20
load_map: '/usr/share/nxengine/data/Stage/0.pxm' loaded OK! - 21x20
load_pxa: reading in /usr/share/nxengine/data/Stage/0.pxa
load_entities: reading in /usr/share/nxengine/data/Stage/0.pxe
tsc_load: loading '/usr/share/nxengine/data/Stage/0.tsc' to page 1
<> tsc_compile bufsize = 2768 pageno = 1
StageBossManager::SetType(0)
Loading profile from /home/xxx/.local/share/nxengine/nxengine-evo/profile.dat...
Loading profile from /home/xxx/.local/share/nxengine/nxengine-evo/profile2.dat...
Loading profile from /home/xxx/.local/share/nxengine/nxengine-evo/profile3.dat...
Loading profile from /home/xxx/.local/share/nxengine/nxengine-evo/profile4.dat...
Loading profile from /home/xxx/.local/share/nxengine/nxengine-evo/profile5.dat...
Writing settings...
 >> music(0)
Setting tick function to type 1 param 0
= Loading game =
game_load: loading savefile 1
Loading profile from /home/xxx/.local/share/nxengine/nxengine-evo/profile2.dat...
 - Read Teleporter Slot 0: slotno=1 scriptno=6001
 - Read Teleporter Slot 1: slotno=2 scriptno=6002
 - Read Teleporter Slot 2: slotno=3 scriptno=6003
 - Read Teleporter Slot 3: slotno=4 scriptno=6004
 >> Entering stage 1: 'Arthur's House'.
load_map: level size 21x16
load_map: '/usr/share/nxengine/data/Stage/Pens1.pxm' loaded OK! - 21x16
load_pxa: reading in /usr/share/nxengine/data/Stage/Pens.pxa
load_entities: reading in /usr/share/nxengine/data/Stage/Pens1.pxe
 -- Disappearing object 00 (OBJ_KAZUMA_AT_COMPUTER(62)) because flag 0 is set
 -- Disappearing object 650 ([Type 0]) because flag 161 is set
 -- Appearing object 660 (OBJ_PROFESSOR_BOOSTER(113)) because flag 161 is set
tsc_load: loading '/usr/share/nxengine/data/Stage/Pens1.tsc' to page 1
<> tsc_compile bufsize = 8790 pageno = 1
 >> music(14)
ogg11_load: /home/xxx/.local/share/nxengine/data/Ogg11/kodou_intro.ogg, /home/xxx/.local/share/nxengine/data/Ogg11/kodou_loop.ogg

StageBossManager::SetType(0)
Setting tick function to type 2 param 0
Looking for script #1002 in 2 (106)
  - Started script 1002
Looking for script #5002 in 2 (106)
  - Started script 5002
Looking for script #5010 in 2 (106)
  - Started script 5010
Looking for script #5023 in 2 (106)
  - Started script 5023
Looking for script #6023 in 2 (106)
  - Started script 6023
JumpScript: moving to script #5023 page 1
Looking for script #5023 in 1 (45)
Looking for script #5023 in head
Looking for script #5023 in 0 (14)
 error << JumpScript: missing script #5023! Script terminated. >>
  - Stopped script 5023

Add music and sfx volume controls

Nicalis midi music is way too quiet, so I kind of need to be able to turn the sound effect volume down to half in order to really hear and enjoy it at all? It's so quiet...

Moving analog stick on Xbox One controller crashes the game.

I was trying to remap my controls but this engine instantly crashes the second I move either analog sticks on the Xbox One controller (and presumably Xbox 360 controller as well). This happened on both 32 and 64-bit versions of the Windows NX Engine-EVO.

Add translation installation instructions

I'm testing the engine so far and it seems to work just right ^^
But I haven't found how to install the additionnal languages on the wiki.

I found by myself. You just need to clone any of the lang_<language> repositories and puts its content in the game's folder as data/lang/<language name>. For instance, data/lang/russian

Would be good to add this on the wiki ^^

Player MUST prioritize bonking over repelling.

As noted in #26 and #69
The player has a lot of trouble fitting into 1 block high gaps, especially when moving left.

In the original game you would bonk your head against the ceiling before any sideways collision corrections are made, thus enabling the player to fit snugly into the gap. However, you would still be pushed sideways first while moving downwards.

The problem NXengine seems to have is that the player always vertically slides right past the gap as long as their momentum allows, the vertical collision not being detected regardless of which direction you're travelling. You are always pushed sideways out of the wall and thus never bonk your head on the gap ceiling.

Out of Bounds tiling for widescreen

Enhancement request:
Extended looping tile patterns rendered out of bounds in the many non-scrolling one-screen maps, for widescreen aspect ratios.

Proposed solution:
Add an optional, tiny new piece of map-specific metadata (a file sharing the map's name, in a different folder perhaps?) containing the tile ID(s) to draw out-of-bounds around the map, accepting either a single tile (for those "off-black" indoor rooms) or a 2x2 square of tiles (for the cave tilesets) to render outside of the map in place of the background.

Following that, it would be possible to consider allowing the camera to scroll a few tiles out of bounds in widescreen aspect ratios even in larger areas, so that the exit doors don't seem extrordinarily close to one side of the screen compared to the 4:3 view of the map. But, that's a discussion for another issue thread.

Replay support

Once upon a time there was replays support in NXEngine.
It was buggy, so i've stripped it from nxengine-evo.
However, i can probably put it back and improve to work reliably.
I can also, probably, add support for TAS Hourglass format (or a converter tool).

Is there any interest in replays?

bkMoon & bkFog have a bad parallax layer split

This is a Cave Story screenshot, using a modified bkMoon to demonstrate where all the parallax layers actually are:
bkmoon_control

This is the same exact scene replicated to the best of my ability in NXEngine:
bkmoon_nxengine

The topmost layer is split much further up, resulting in the bottommost pixel of bkFog's sun getting shifted around with the clouds. Also, I guess that screenshot kind of shows the camera is off by like 8 pixels vertically..? Needs more research.

Unhelpful random crash report!

Okay, so I just cleared the game with my music set to "New", watched the credits, and at the "The End" screen, re-loaded my save to go for the other ending. Spawned in the prefab house, switched my music back to "Old", and decided to take a quick detour into Last Cave for a bit just to listen to the music. When I returned to the Balcony a few moments later, the game crashed.

Luckily, I happened to be running a debug exe this time, so I have an almost-useful log maybe!

******* Executing <TRA to stage 67
  - Stopped script 0101
 >> Entering stage 67: 'Last Cave (Hidden)'.
load_map: level size 100x60
load_map: 'data/Stage/Priso2.pxm' loaded OK! - 100x60
load_pxa: reading in data/Stage/Jail.pxa
load_entities: reading in data/Stage/Priso2.pxe
 -- Disappearing object 250 (OBJ_RED_DEMON(276)) because flag 1320 is set
 -- Disappearing object 251 ([Type 0]) because flag 1320 is set
 -- Disappearing object 241 (OBJ_HVTRIGGER(46)) because flag 1320 is set
 -- Disappearing object 241 (OBJ_HVTRIGGER(46)) because flag 1320 is set
tsc_load: loading 'data/Stage/Priso2.tsc' to page 1
<> tsc_compile bufsize = 945 pageno = 1
StageBossManager::SetType(0)
-- Starting on-entry script 93
Looking for script #0093 in 1 (16)
  - Started script 0093
0093:0  0032 <MNA 
0093:1   0029
 >> music(29)
data/org/lastcave.org: Org-02 detected
startbeat: 0
0093:4   0003
0093:7  0014 <END 
  - Stopped script 0093
Looking for script #0110 in 1 (16)
  - Started script 0110
0110:0  002c <KEY 
0110:1   0011
0110:4   0110
DNP: 01dd41d0 (OBJ_DOOR(18)) deleted
0110:7   0001
0110:10   0074
******* Executing <TRA to stage 62
  - Stopped script 0110
 >> Entering stage 62: 'Balcony'.
load_map: level size 120x80
load_map: 'data/Stage/Blcny1.pxm' loaded OK! - 120x80
load_pxa: reading in data/Stage/White.pxa
load_entities: reading in data/Stage/Blcny1.pxe
 -- Appearing object 00 (OBJ_MISSILE(86)) because flag 200 is set
 -- Appearing object 00 (OBJ_MISSILE(86)) because flag 200 is set
 -- Appearing object 00 (OBJ_MISSILE(86)) because flag 200 is set
 -- Appearing object 00 (OBJ_MISSILE(86)) because flag 200 is set
 -- Appearing object 00 (OBJ_MISSILE(86)) because flag 200 is set
 -- Appearing object 00 (OBJ_MISSILE(86)) because flag 200 is set
 -- Appearing object 00 (OBJ_MISSILE(86)) because flag 200 is set
tsc_load: loading 'data/Stage/Blcny1.tsc' to page 1
<> tsc_compile bufsize = 1070 pageno = 1
StageBossManager::SetType(0)
-- Starting on-entry script 91
Looking for script #0091 in 1 (17)
  - Started script 0091
0091:0  002c <KEY 
0091:1   1190
0091:4   1191
0091:7   1192
0091:10  0032 <MNA 
0091:11   0030
 >> music(30)
data/org/balcony.org: Org-02 detected
startbeat: 0
0091:14   0001
Segmentation fault (core dumped)

So then, the music crashed it somehow?

widescreen question

hi
I'm backporting some of your patches to the nxengine-libretro port, I'll try to cherrypick the commits untouched so you preseve authorship were possible.

Just a question, are these commits all I need for fully functional widescreen?

bdf4e82
23cead8

I have most of the patches integrated but I was wondering if I was missing some other commits that might fix some of the glitches.

https://github.com/libretro/nxengine-libretro

Framerate locked at 50 FPS

Regardless of the resolution, the frame seems to hover between 50 to 52 on GNU/Linux. Can 60 FPS unlocked? Moreover, where is the config file? Thanks.

Plantation pipe tile

screenshot from 2018-07-04 00-40-04
I believe either this tile (which I am standing in) or the script attached to the connecting side of it, is supposed to shoot you out vertically, at least enough to catch the current and... not be standing in the pipe.

Maybe it doesn't teleport you to the correct position something..?

Failed to initialize sound

Arch x86_64

git clone https://github.com/isage/nxengine-evo
cd nxengine-evo
mkdir build
cd build
cmake ..
make -j4
rm -rf ../extract/
mv nx extract ../
cp -R ~/Downloads/CaveStory/data/* ../data
cd ..
./extract #runs fine no errors
./nx
Loading settings...
Couldn't open file settings.dat.
No saved settings; using defaults.
Graphics::SetResolution(2)
Setting scaling 2
SDL_CreateWindow: 640x480 @ 16bpp
Graphics::FlushAll()
SIFLoader::LoadHeader: read index of 6 sections
Loading SIF section 1 from address 003b
Loading SIF section 2 from address 0437
SIFSpritesSect: loading 490 sprites
fonts: using truetype at 17pt
NXSurface::LoadImage name = data/Loading.pbm, this = 0x7ffe4ad6c130
NXSurface::AllocNew this = 0x7ffe4ad6c130
NXSurface::LoadImage name = data/Loading.pbm, this = 0x7ffe4ad6c130 done
sslib: initilization was successful.
Loading Sound FX...
LoadFXCache: audio cache sndcache.pcm not exist
 error << pxt_load: file './pxt/fx01.pxt' not found. >> 
 error << pxt_load: file './pxt/fx02.pxt' not found. >> 
 error << pxt_load: file './pxt/fx03.pxt' not found. >> 
 error << pxt_load: file './pxt/fx04.pxt' not found. >> 
 error << pxt_load: file './pxt/fx05.pxt' not found. >> 
 error << pxt_load: file './pxt/fx06.pxt' not found. >> 
 error << pxt_load: file './pxt/fx07.pxt' not found. >> 
 error << pxt_load: file './pxt/fx08.pxt' not found. >> 
 error << pxt_load: file './pxt/fx09.pxt' not found. >> 
 error << pxt_load: file './pxt/fx0a.pxt' not found. >> 
 error << pxt_load: file './pxt/fx0b.pxt' not found. >> 
 error << pxt_load: file './pxt/fx0c.pxt' not found. >> 
 error << pxt_load: file './pxt/fx0d.pxt' not found. >> 
 error << pxt_load: file './pxt/fx0e.pxt' not found. >> 
 error << pxt_load: file './pxt/fx0f.pxt' not found. >> 
 error << pxt_load: file './pxt/fx10.pxt' not found. >> 
 error << pxt_load: file './pxt/fx11.pxt' not found. >> 
 error << pxt_load: file './pxt/fx12.pxt' not found. >> 
 error << pxt_load: file './pxt/fx13.pxt' not found. >> 
 error << pxt_load: file './pxt/fx14.pxt' not found. >> 
 error << pxt_load: file './pxt/fx15.pxt' not found. >> 
 error << pxt_load: file './pxt/fx16.pxt' not found. >> 
 error << pxt_load: file './pxt/fx17.pxt' not found. >> 
 error << pxt_load: file './pxt/fx18.pxt' not found. >> 
 error << pxt_load: file './pxt/fx19.pxt' not found. >> 
 error << pxt_load: file './pxt/fx1a.pxt' not found. >> 
 error << pxt_load: file './pxt/fx1b.pxt' not found. >> 
 error << pxt_load: file './pxt/fx1c.pxt' not found. >> 
 error << pxt_load: file './pxt/fx1d.pxt' not found. >> 
 error << pxt_load: file './pxt/fx1e.pxt' not found. >> 
 error << pxt_load: file './pxt/fx1f.pxt' not found. >> 
 error << pxt_load: file './pxt/fx20.pxt' not found. >> 
 error << pxt_load: file './pxt/fx21.pxt' not found. >> 
 error << pxt_load: file './pxt/fx22.pxt' not found. >> 
 error << pxt_load: file './pxt/fx23.pxt' not found. >> 
 error << pxt_load: file './pxt/fx24.pxt' not found. >> 
 error << pxt_load: file './pxt/fx25.pxt' not found. >> 
 error << pxt_load: file './pxt/fx26.pxt' not found. >> 
 error << pxt_load: file './pxt/fx27.pxt' not found. >> 
 error << pxt_load: file './pxt/fx28.pxt' not found. >> 
 error << pxt_load: file './pxt/fx29.pxt' not found. >> 
 error << pxt_load: file './pxt/fx2a.pxt' not found. >> 
 error << pxt_load: file './pxt/fx2b.pxt' not found. >> 
 error << pxt_load: file './pxt/fx2c.pxt' not found. >> 
 error << pxt_load: file './pxt/fx2d.pxt' not found. >> 
 error << pxt_load: file './pxt/fx2e.pxt' not found. >> 
 error << pxt_load: file './pxt/fx2f.pxt' not found. >> 
 error << pxt_load: file './pxt/fx30.pxt' not found. >> 
 error << pxt_load: file './pxt/fx31.pxt' not found. >> 
 error << pxt_load: file './pxt/fx32.pxt' not found. >> 
 error << pxt_load: file './pxt/fx33.pxt' not found. >> 
 error << pxt_load: file './pxt/fx34.pxt' not found. >> 
 error << pxt_load: file './pxt/fx35.pxt' not found. >> 
 error << pxt_load: file './pxt/fx36.pxt' not found. >> 
 error << pxt_load: file './pxt/fx37.pxt' not found. >> 
 error << pxt_load: file './pxt/fx38.pxt' not found. >> 
 error << pxt_load: file './pxt/fx39.pxt' not found. >> 
 error << pxt_load: file './pxt/fx3a.pxt' not found. >> 
 error << pxt_load: file './pxt/fx3b.pxt' not found. >> 
 error << pxt_load: file './pxt/fx3c.pxt' not found. >> 
 error << pxt_load: file './pxt/fx3d.pxt' not found. >> 
 error << pxt_load: file './pxt/fx3e.pxt' not found. >> 
 error << pxt_load: file './pxt/fx3f.pxt' not found. >> 
 error << pxt_load: file './pxt/fx40.pxt' not found. >> 
 error << pxt_load: file './pxt/fx41.pxt' not found. >> 
 error << pxt_load: file './pxt/fx42.pxt' not found. >> 
 error << pxt_load: file './pxt/fx43.pxt' not found. >> 
 error << pxt_load: file './pxt/fx44.pxt' not found. >> 
 error << pxt_load: file './pxt/fx45.pxt' not found. >> 
 error << pxt_load: file './pxt/fx46.pxt' not found. >> 
 error << pxt_load: file './pxt/fx47.pxt' not found. >> 
 error << pxt_load: file './pxt/fx48.pxt' not found. >> 
 error << pxt_load: file './pxt/fx49.pxt' not found. >> 
 error << pxt_load: file './pxt/fx4a.pxt' not found. >> 
 error << pxt_load: file './pxt/fx4b.pxt' not found. >> 
 error << pxt_load: file './pxt/fx4c.pxt' not found. >> 
 error << pxt_load: file './pxt/fx4d.pxt' not found. >> 
 error << pxt_load: file './pxt/fx4e.pxt' not found. >> 
 error << pxt_load: file './pxt/fx4f.pxt' not found. >> 
 error << pxt_load: file './pxt/fx50.pxt' not found. >> 
 error << pxt_load: file './pxt/fx51.pxt' not found. >> 
 error << pxt_load: file './pxt/fx52.pxt' not found. >> 
 error << pxt_load: file './pxt/fx53.pxt' not found. >> 
 error << pxt_load: file './pxt/fx54.pxt' not found. >> 
 error << pxt_load: file './pxt/fx55.pxt' not found. >> 
 error << pxt_load: file './pxt/fx56.pxt' not found. >> 
 error << pxt_load: file './pxt/fx57.pxt' not found. >> 
 error << pxt_load: file './pxt/fx58.pxt' not found. >> 
 error << pxt_load: file './pxt/fx59.pxt' not found. >> 
 error << pxt_load: file './pxt/fx5a.pxt' not found. >> 
 error << pxt_load: file './pxt/fx5b.pxt' not found. >> 
 error << pxt_load: file './pxt/fx5c.pxt' not found. >> 
 error << pxt_load: file './pxt/fx5d.pxt' not found. >> 
 error << pxt_load: file './pxt/fx5e.pxt' not found. >> 
 error << pxt_load: file './pxt/fx5f.pxt' not found. >> 
 error << pxt_load: file './pxt/fx60.pxt' not found. >> 
 error << pxt_load: file './pxt/fx61.pxt' not found. >> 
 error << pxt_load: file './pxt/fx62.pxt' not found. >> 
 error << pxt_load: file './pxt/fx63.pxt' not found. >> 
 error << pxt_load: file './pxt/fx64.pxt' not found. >> 
 error << pxt_load: file './pxt/fx65.pxt' not found. >> 
 error << pxt_load: file './pxt/fx66.pxt' not found. >> 
 error << pxt_load: file './pxt/fx67.pxt' not found. >> 
 error << pxt_load: file './pxt/fx68.pxt' not found. >> 
 error << pxt_load: file './pxt/fx69.pxt' not found. >> 
 error << pxt_load: file './pxt/fx6a.pxt' not found. >> 
 error << pxt_load: file './pxt/fx6b.pxt' not found. >> 
 error << pxt_load: file './pxt/fx6c.pxt' not found. >> 
 error << pxt_load: file './pxt/fx6d.pxt' not found. >> 
 error << pxt_load: file './pxt/fx6e.pxt' not found. >> 
 error << pxt_load: file './pxt/fx6f.pxt' not found. >> 
 error << pxt_load: file './pxt/fx70.pxt' not found. >> 
 error << pxt_load: file './pxt/fx71.pxt' not found. >> 
 error << pxt_load: file './pxt/fx72.pxt' not found. >> 
 error << pxt_load: file './pxt/fx73.pxt' not found. >> 
 error << pxt_load: file './pxt/fx74.pxt' not found. >> 
 error << pxt_load: file './pxt/fx75.pxt' not found. >> 
 - created sndcache.pcm; 6 bytes
Calculating pitch scale...
Unable to open wavetable.dat!!
 error << Music failed to initialize >> 
 error << fatal: 'Failed to initialize sound.' >> 
safemode print: 'Fatal Error'
safemode print: 'Failed to initialize sound.'
run_until_key()

Inconsistencies

I'm pretty sure there's ton of inconsistencies between nxengine and original.
Enemy behaviour, damage, physics, etc.
It would be nice if someone took upon a task of comparing original freeware version and nxengine.
Pull requests are welcome too, but with detailed description of inconsistency.

You cannot abort save/load menus.

I keep accidentally hidding load instead of new game and as far as I know there's no way back to the title screen without loading a save and then resetting. The Esc button does nothing here, and both Jump and Shoot load the selected save file.

I'll understand if the save file can't be aborted for the sake of TSC scripts, since the TSC script would say "Game saved." next regardless of whether or not it actually did, but the loading screen should definitely be able to go back to the menu.

Whimsical Star cutscene break

The Whimsical Star continues to fly around and damage things during cutscenes. Including tinking against the jail cell bars in plantation and damaging freshly spawned bosses while they're still talking to you.

When the Doctor transforms into his Uncontrolled form, your Whimsical Star starts damaging him as soon as he has health again. When the formless Doctor takes over the Core, Sue and Misery are already taking damage from your Whimsical Star.

Even if ending the cutscene and actually starting the fight for some reason resets their HP, it's still pretty bad looking to have them shaking around making damage numbers while they're supposed to be standing still.

It even damages random enemies during the neutral ending cutscenes where the island's falling apart. While the player is invisible.

Even when Balrog comes to save you from Hell, he's continuously taking damage from your Whimsical Star!

Seriously, does the KEY> TSC command secretly also kill the whimsical star temporarily or something...? This needs to be looked into.

Chako doesn't sleep.

While obtaining Chako's lipstick, I encountered some kind of bug where Chako's sound didn't play and Chako's animation or object didn't change. The only interesting line in the console is "error << FindObjectByID2: ID2 0300 found: type OBJ_CHACO(93); coords: (206, 96) >>" while running script 211.

Here's a screenshot of the final room state.
screenshot from 2018-07-03 15-42-58

When spoken to, Chako uses her usual 'awake' dialogue.

Steps to reproduce (if you're unsure):

  1. Enter Chako's house for the first time in a playthrough.
    (It should be okay to use a savegame that has started from here.)
  2. Speak to Chako.
  3. Check the fireplace.
  4. Use the bed.

"Out of Ammo" sprite doesn't have complete bounds.

The Japanese sprite gets cut off on both sides because the sprite bounds were based on the translation only.

empty-nxengine

The actual bounds on Caret.pbm look more like this.
empty-caret

I believe even the minor empty space on either side (rounded to the nearest 8px block) should also be included for the sake of translations.

Achievement support.

CS+ adds new tsc command: <ACHxxxx, thus making scripts from CS+ incompatible with nxengine.
Is it worth it to properly implement achievements, or just add a no-op support for <ACH?

Automatically detect invalid soundcache.

After building from source, I had an issue with sound effects not playing.

I spent about an hour trying to figure out what was wrong, and eventually solved the problem by deleting the file /home/neil/.local/share/nxengine/nxengine-evo/sndcache.pcm, forcing the game to regenerate it, and then sound effects played just fine.

After I realized I should probably submit a bug report for this, I rescued the invalid cache from my trash can, and included it here. I don't know how it occurred, but it would be nice if future releases could automatically detect and fix this problem.

sndcache.pcm.zip

sound not working and to slow

after compiling on debian 8 and copying in the data its finally working, but the gameplay is much to slow on my core 2 duo system and the sound is not working (music is running but no sound at all) and some related error messages:

$ cavestory 
Loading settings...
Graphics::SetResolution(7)
DW: 1280, DH: 800
Disabling 1280x1024
Disabling 1600x1200
Disabling 1366x768
Disabling 1440x900
Disabling 1920x1080
Setting scaling 3
DW: 1280, DH: 800
Disabling 1280x1024
Disabling 1600x1200
Disabling 1366x768
Disabling 1440x900
Disabling 1920x1080
SDL_CreateWindow: 1366x768 @ 16bpp
Graphics::InitVideo: using: opengl renderer
Graphics::FlushAll()
SIFLoader::LoadHeader: read index of 6 sections
Loading SIF section 1 from address 003b
Loading SIF section 2 from address 0437
SIFSpritesSect: loading 490 sprites
Graphics::FlushAll()
fonts: using truetype at 26pt
NXSurface::LoadImage name = data/Loading.pbm, this = 0x7ffc8272db90
NXSurface::AllocNew this = 0x7ffc8272db90
NXSurface::LoadImage name = data/Loading.pbm, this = 0x7ffc8272db90 done
sslib: initilization was successful.
Loading Sound FX...
LoadFXCache: restoring pxts from cache
Calculating pitch scale...
-- Drums loaded from cache
tsc_load: loading 'data/Head.tsc' to page 0
tsc_load: loading 'data/ArmsItem.tsc' to page 2
tsc_load: loading 'data/StageSelect.tsc' to page 3
Reading npc.tbl...
InitList::CallFunctions(0075bc40): executing 61 functions...
initslopetable: generating slopetables.
initmapfirsttime: loading data/tilekey.dat.
Setting tick function to type 1 param 0
Setting tick function to type 6 param 0
Entering main loop...
 >> Entering stage 72: 'u'.
NXSurface::LoadImage name = data/Stage/PrtWhite.pbm, this = 0x12232b0
NXSurface::AllocNew this = 0x12232b0
NXSurface::LoadImage name = data/Stage/PrtWhite.pbm, this = 0x12232b0 done
load_map: level size 21x16
load_map: 'data/Stage/Kings.pxm' loaded OK! - 21x16
load_pxa: reading in data/Stage/White.pxa
NXSurface::LoadImage name = data/Npc/NpcSym.pbm, this = 0x121c780
NXSurface::AllocNew this = 0x121c780
NXSurface::LoadImage name = data/Npc/NpcSym.pbm, this = 0x121c780 done
load_entities: reading in data/Stage/Kings.pxe
tsc_load: loading 'data/Stage/Kings.tsc' to page 1
NXSurface::LoadImage name = data/bk0.pbm, this = 0x1257f20
NXSurface::AllocNew this = 0x1257f20
NXSurface::LoadImage name = data/bk0.pbm, this = 0x1257f20 done
StageBossManager::SetType(0)
-- Starting on-entry script 100
  - Started script 0100
NXSurface::LoadImage name = data/Npc/NpcKings.pbm, this = 0x12a1650
NXSurface::AllocNew this = 0x12a1650
NXSurface::LoadImage name = data/Npc/NpcKings.pbm, this = 0x12a1650 done
NXSurface::LoadImage name = data/Npc/NpcRegu.pbm, this = 0x1242270
NXSurface::AllocNew this = 0x1242270
NXSurface::LoadImage name = data/Npc/NpcRegu.pbm, this = 0x1242270 done
NXSurface::LoadImage name = data/Caret.pbm, this = 0x12609d0
NXSurface::AllocNew this = 0x12609d0
NXSurface::LoadImage name = data/Caret.pbm, this = 0x12609d0 done
Game minimized or lost focus--pausing...
Focus regained, resuming play...
NXSurface::LoadImage name = data/Fade.pbm, this = 0x11f1cd0
NXSurface::AllocNew this = 0x11f1cd0
NXSurface::LoadImage name = data/Fade.pbm, this = 0x11f1cd0 done
Game minimized or lost focus--pausing...
Focus regained, resuming play...
  - Stopped script 0100
Setting tick function to type 7 param 0
niku_load: couldn't open file '/home/treaki/.local/share/nxengine/nxengine-evo/290.rec'
 >> music(24)
./data/org/theme.org: Org-02 detected
 >> Entering stage 0: 'Null'.
NXSurface::LoadImage name = data/Stage/Prt0.pbm, this = 0x12232b0
NXSurface::AllocNew this = 0x12232b0
NXSurface::LoadImage name = data/Stage/Prt0.pbm, this = 0x12232b0 done
load_map: level size 21x20
load_map: 'data/Stage/0.pxm' loaded OK! - 21x20
load_pxa: reading in data/Stage/0.pxa
load_entities: reading in data/Stage/0.pxe
tsc_load: loading 'data/Stage/0.tsc' to page 1
NXSurface::LoadImage name = data/bkMoon480fix.pbm, this = 0x1218700
NXSurface::AllocNew this = 0x1218700
NXSurface::LoadImage name = data/bkMoon480fix.pbm, this = 0x1218700 done
StageBossManager::SetType(0)
NXSurface::LoadImage name = data/Title.pbm, this = 0x12929e0
NXSurface::AllocNew this = 0x12929e0
NXSurface::LoadImage name = data/Title.pbm, this = 0x12929e0 done
NXSurface::LoadImage name = data/TextBox.pbm, this = 0x12d4fd0
NXSurface::AllocNew this = 0x12d4fd0
NXSurface::LoadImage name = data/TextBox.pbm, this = 0x12d4fd0 done
NXSurface::LoadImage name = data/MyChar.pbm, this = 0x1215bd0
NXSurface::AllocNew this = 0x1215bd0
NXSurface::LoadImage name = data/MyChar.pbm, this = 0x1215bd0 done
NXSurface::LoadImage name = data/endpic/pixel.bmp, this = 0x12463a0
NXSurface::AllocNew this = 0x12463a0
NXSurface::LoadImage name = data/endpic/pixel.bmp, this = 0x12463a0 done
 error << pxt_Play: sound slot 0x12 not rendered >> 
 >> music(0)
Setting tick function to type 1 param 0
= Loading game =
game_load: loading savefile 0
Loading profile from /home/treaki/.local/share/nxengine/nxengine-evo/profile.dat...
 >> Entering stage 13: 'Start Point'.
NXSurface::LoadImage name = data/Stage/PrtCave.pbm, this = 0x12232b0
NXSurface::AllocNew this = 0x12232b0
NXSurface::LoadImage name = data/Stage/PrtCave.pbm, this = 0x12232b0 done
load_map: level size 21x16
load_map: 'data/Stage/Start.pxm' loaded OK! - 21x16
load_pxa: reading in data/Stage/Cave.pxa
load_entities: reading in data/Stage/Start.pxe
 -- Disappearing object 200 ([Type 0]) because flag 430 is set
tsc_load: loading 'data/Stage/Start.tsc' to page 1
 >> music(8)
./data/org/gestation.org: Org-02 detected
StageBossManager::SetType(0)
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x03 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x38 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x03 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x38 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
  - Started script 0100
 error << pxt_Play: sound slot 0x0b not rendered >> 
******* Executing <TRA to stage 12
  - Stopped script 0100
 >> Entering stage 12: 'First Cave'.
load_map: level size 60x45
load_map: 'data/Stage/Cave.pxm' loaded OK! - 60x45
load_pxa: reading in data/Stage/Cave.pxa
load_entities: reading in data/Stage/Cave.pxe
onspawn_spike_small: spike 011df110 embedded in wall, deleting
onspawn_spike_small: spike 011df260 embedded in wall, deleting
tsc_load: loading 'data/Stage/Cave.tsc' to page 1
StageBossManager::SetType(0)
-- Starting on-entry script 91
  - Started script 0091
NXSurface::LoadImage name = data/Npc/NpcCemet.pbm, this = 0x11ecd50
NXSurface::AllocNew this = 0x11ecd50
NXSurface::LoadImage name = data/Npc/NpcCemet.pbm, this = 0x11ecd50 done
  - Stopped script 0091
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x03 not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
  - Started script 0400
 error << pxt_Play: sound slot 0x16 not rendered >> 
 >> music(16)
./data/org/fanfale3.org: Org-02 detected
NXSurface::LoadImage name = data/ItemImage.pbm, this = 0x11ecc80
NXSurface::AllocNew this = 0x11ecc80
NXSurface::LoadImage name = data/ItemImage.pbm, this = 0x11ecc80 done
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
Setting pause: type 8 param 0
NXSurface::LoadImage name = data/Npc/NpcGuest.pbm, this = 0x1345e30
NXSurface::AllocNew this = 0x1345e30
NXSurface::LoadImage name = data/Npc/NpcGuest.pbm, this = 0x1345e30 done
 error << pxt_Play: sound slot 0x01 not rendered >> 
Setting pause: type 9 param 0
DW: 1280, DH: 800
Disabling 1280x1024
Disabling 1600x1200
Disabling 1366x768
Disabling 1440x900
Disabling 1920x1080
DW: 1280, DH: 800
Disabling 1280x1024
Disabling 1600x1200
Disabling 1366x768
Disabling 1440x900
Disabling 1920x1080
 error << pxt_Play: sound slot 0x01 not rendered >> 
 error << pxt_Play: sound slot 0x01 not rendered >> 
 error << pxt_Play: sound slot 0x01 not rendered >> 
 error << pxt_Play: sound slot 0x01 not rendered >> 
 error << pxt_Play: sound slot 0x12 not rendered >> 
Graphics::FlushAll()
NXSurface::LoadImage name = data/Stage/PrtCave.pbm, this = 0x12232b0
NXSurface::AllocNew this = 0x12232b0
NXSurface::LoadImage name = data/Stage/PrtCave.pbm, this = 0x12232b0 done
NXSurface::LoadImage name = data/Npc/NpcSym.pbm, this = 0x1218700
NXSurface::AllocNew this = 0x1218700
NXSurface::LoadImage name = data/Npc/NpcSym.pbm, this = 0x1218700 done
fonts: using truetype at 26pt
NXSurface::LoadImage name = data/TextBox.pbm, this = 0x1191580
NXSurface::AllocNew this = 0x1191580
NXSurface::LoadImage name = data/TextBox.pbm, this = 0x1191580 done
NXSurface::LoadImage name = data/Npc/NpcGuest.pbm, this = 0x1087ed0
NXSurface::AllocNew this = 0x1087ed0
NXSurface::LoadImage name = data/Npc/NpcGuest.pbm, this = 0x1087ed0 done
 error << pxt_Play: sound slot 0x01 not rendered >> 
 error << pxt_Play: sound slot 0x01 not rendered >> 
 error << pxt_Play: sound slot 0x01 not rendered >> 
Setting pause: type 0 param 0
Writing settings...
NXSurface::LoadImage name = data/bk0.pbm, this = 0x12d7d70
NXSurface::AllocNew this = 0x12d7d70
NXSurface::LoadImage name = data/bk0.pbm, this = 0x12d7d70 done
NXSurface::LoadImage name = data/Npc/NpcCemet.pbm, this = 0x12956c0
NXSurface::AllocNew this = 0x12956c0
NXSurface::LoadImage name = data/Npc/NpcCemet.pbm, this = 0x12956c0 done
NXSurface::LoadImage name = data/MyChar.pbm, this = 0x11f1950
NXSurface::AllocNew this = 0x11f1950
NXSurface::LoadImage name = data/MyChar.pbm, this = 0x11f1950 done
NXSurface::LoadImage name = data/ItemImage.pbm, this = 0x11df190
NXSurface::AllocNew this = 0x11df190
NXSurface::LoadImage name = data/ItemImage.pbm, this = 0x11df190 done
Setting pause: type 8 param 0
 error << pxt_Play: sound slot 0x01 not rendered >> 
Setting pause: type 9 param 0
DW: 1280, DH: 800
Disabling 1280x1024
Disabling 1600x1200
Disabling 1366x768
Disabling 1440x900
Disabling 1920x1080
DW: 1280, DH: 800
Disabling 1280x1024
Disabling 1600x1200
Disabling 1366x768
Disabling 1440x900
Disabling 1920x1080
 error << pxt_Play: sound slot 0x01 not rendered >> 
 error << pxt_Play: sound slot 0x01 not rendered >> 
 error << pxt_Play: sound slot 0x12 not rendered >> 
Graphics::FlushAll()
NXSurface::LoadImage name = data/Stage/PrtCave.pbm, this = 0x12232b0
NXSurface::AllocNew this = 0x12232b0
NXSurface::LoadImage name = data/Stage/PrtCave.pbm, this = 0x12232b0 done
NXSurface::LoadImage name = data/Npc/NpcSym.pbm, this = 0x12d7d70
NXSurface::AllocNew this = 0x12d7d70
NXSurface::LoadImage name = data/Npc/NpcSym.pbm, this = 0x12d7d70 done
fonts: using truetype at 26pt
NXSurface::LoadImage name = data/TextBox.pbm, this = 0x104f9e0
NXSurface::AllocNew this = 0x104f9e0
NXSurface::LoadImage name = data/TextBox.pbm, this = 0x104f9e0 done
NXSurface::LoadImage name = data/Npc/NpcGuest.pbm, this = 0x1191480
NXSurface::AllocNew this = 0x1191480
NXSurface::LoadImage name = data/Npc/NpcGuest.pbm, this = 0x1191480 done
 error << pxt_Play: sound slot 0x01 not rendered >> 
Setting pause: type 0 param 0
Writing settings...
NXSurface::LoadImage name = data/bk0.pbm, this = 0x11df3d0
NXSurface::AllocNew this = 0x11df3d0
NXSurface::LoadImage name = data/bk0.pbm, this = 0x11df3d0 done
NXSurface::LoadImage name = data/Npc/NpcCemet.pbm, this = 0x1087cb0
NXSurface::AllocNew this = 0x1087cb0
NXSurface::LoadImage name = data/Npc/NpcCemet.pbm, this = 0x1087cb0 done
NXSurface::LoadImage name = data/MyChar.pbm, this = 0x11b59e0
NXSurface::AllocNew this = 0x11b59e0
NXSurface::LoadImage name = data/MyChar.pbm, this = 0x11b59e0 done
NXSurface::LoadImage name = data/ItemImage.pbm, this = 0x11b6bb0
NXSurface::AllocNew this = 0x11b6bb0
NXSurface::LoadImage name = data/ItemImage.pbm, this = 0x11b6bb0 done
 >> music(8)
./data/org/gestation.org: Org-02 detected
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
  - Stopped script 0400
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
NXSurface::LoadImage name = data/Caret.pbm, this = 0x8d8ac0
NXSurface::AllocNew this = 0x8d8ac0
NXSurface::LoadImage name = data/Caret.pbm, this = 0x8d8ac0 done
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x03 not rendered >> 
 error << pxt_Play: sound slot 0x10 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x1e not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x1e not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x03 not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x38 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x03 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x17 not rendered >> 
 error << pxt_Play: sound slot 0x0f not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
  - Started script 0110
NXSurface::LoadImage name = data/Fade.pbm, this = 0x11df240
NXSurface::AllocNew this = 0x11df240
NXSurface::LoadImage name = data/Fade.pbm, this = 0x11df240 done
******* Executing <TRA to stage 90
  - Stopped script 0110
 >> Entering stage 90: 'Hermit Gunsmith'.
load_map: level size 21x16
load_map: 'data/Stage/Pole.pxm' loaded OK! - 21x16
load_pxa: reading in data/Stage/Cave.pxa
load_entities: reading in data/Stage/Pole.pxe
tsc_load: loading 'data/Stage/Pole.tsc' to page 1
StageBossManager::SetType(0)
-- Starting on-entry script 92
  - Started script 0092
  - Stopped script 0092
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
 error << pxt_Play: sound slot 0x18 not rendered >> 
  - Started script 0200
 error << pxt_Play: sound slot 0x16 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x26 not rendered >> 
 >> music(10)
./data/org/fanfale1.org: Org-02 detected
NXSurface::LoadImage name = data/Arms.pbm, this = 0x1222400
NXSurface::AllocNew this = 0x1222400
NXSurface::LoadImage name = data/Arms.pbm, this = 0x1222400 done
 error << pxt_Play: sound slot 0x02 not rendered >> 
NXSurface::LoadImage name = data/ArmsImage.pbm, this = 0x12d8210
NXSurface::AllocNew this = 0x12d8210
NXSurface::LoadImage name = data/ArmsImage.pbm, this = 0x12d8210 done
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 >> music(8)
./data/org/gestation.org: Org-02 detected
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
 error << pxt_Play: sound slot 0x02 not rendered >> 
******* Executing <TRA to stage 18
  - Stopped script 0200
 >> Entering stage 18: 'Shelter'.
NXSurface::LoadImage name = data/Stage/PrtStore.pbm, this = 0x12232b0
NXSurface::AllocNew this = 0x12232b0
NXSurface::LoadImage name = data/Stage/PrtStore.pbm, this = 0x12232b0 done
load_map: level size 21x16
load_map: 'data/Stage/Shelt.pxm' loaded OK! - 21x16
load_pxa: reading in data/Stage/Store.pxa
load_entities: reading in data/Stage/Shelt.pxe
tsc_load: loading 'data/Stage/Shelt.tsc' to page 1
StageBossManager::SetType(0)
-- Starting on-entry script 501
  - Started script 0501
 >> music(21)
./data/org/access.org: Org-02 detected
NXSurface::LoadImage name = data/Npc/NpcRegu.pbm, this = 0x1293700
NXSurface::AllocNew this = 0x1293700
NXSurface::LoadImage name = data/Npc/NpcRegu.pbm, this = 0x1293700 done
Game minimized or lost focus--pausing...

any idea how to fix that? I want to play in real time and with sound ;)

thanks

Pooh Black death anim.

When I killed Pooh Black, they were midair, vanished immediately (emitting a console error error << FindObjectByID2: ID2 0300 found: type OBJ_POOH_BLACK(160); coords: (100, 64) >>), spewwed bubbles continuously upwards for an awkwardly long time (while invisible), and continued to do so long after the sound effects ended. I'm pretty sure they're missing a "disappearing" animation, since if I recall they normally "die" by vaporizing from the bottom-up.

Here's a handy savegame.
profile-pooh_black.zip

TextBoxes don't move when the window is resized.

If, for some reason, you hit the escape menu and change the game's resolution in the middle of a cutscene while a TextBox is up, the textbox doesn't get repositioned to fit the new aspect ratio. Thus, if you start a cutscene in widescreen mode, then switch to 4:3, the text will be way off screen and 80% unreadable.

I guess you'd just have to manually trigger a recalculation of the text box position as part of the resolution-changing process? Most games get around this by just not allowing you to access the pause menu during cutscenes, heh, but I like it.

Fails to initialize graphics

I pulled source, ran

mkdir build
cd build
cmake ..
make -j3

It compiled fine. then I copied the Doukutsu.exe and data folder to the build directory.

Ran extract and then tried running nx

[parker@localhost build]$ ./nx 
Loading settings...
Couldn't open file settings.dat.
No saved settings; using defaults.
Graphics::SetResolution(2)
Setting scaling 2
SDL_CreateWindow: 640x480 @ 16bpp
Graphics::FlushAll()
 error << SIFLoader::LoadHeader: failed to open file 'sprites.sif' >> 
 error << Failed to initialize graphics. >> 

Am I missing a step here? I got really excited at seeing a widescreen port but then ran into this issue. Any help is appreciated. Thanks.

Directional buttons go insane when playing with a joypad

I've tried playing Cavestory using nxengine-evo with a joypad. Unfortunately, when you press a directional button, it keeps staying pressed until you press another one. This happens with both the vertical and horizontal ones, the vertical ones are most noticeable in the menu, of course. I have tried with 2 USB joypads, both of them results in this unplayable state, and they both work just like they should on any other game.

Hell statues don't transform

screenshot from 2018-07-04 03-42-14
While doing a run through Hell, if you detour into the Statue Room (where statues of previous Kings are kept), you can destroy them for a big Exp triangle, and they'll turn into smaller statues of the heroes instead.

Unfortunately, only the Curly statue appears. The ones for King, Toroko, and Quote just vanish instead.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.