Turrican (hurricane clone) black screen
-
@daviddraper Please use this
hurrican.sh
: it uses SDL2 with KMS/DRM, so you don't need to boot into the LXDE desktop. The resolution is still 640x480 ...#!/usr/bin/env bash # This file is part of The RetroPie Project # # The RetroPie Project is the legal property of its developers, whose names are # too numerous to list here. Please refer to the COPYRIGHT.md file distributed with this source. # # See the LICENSE.md file at the top-level directory of this distribution and # at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md # rp_module_id="hurrican" rp_module_desc="Hurrican - Turrican Clone" rp_module_help="Hurrican can only be played in 640x480 so to avoid huge black borders everywhere, use runcommand to set Hurrican to run at 640x480 or 720x480 if aspect ratio matters to you. There are minor off-by-one errors in the graphics everywhere. Nothing I can do about that at the moment so please do not report it as a bug to me, but upstream instead." rp_module_section="exp" rp_module_flags="!mali" function depends_hurrican() { local depends=(subversion libsdl2-dev libsdl2-mixer-dev libsdl2-image-dev libmodplug-dev libgl-dev) getDepends "${depends[@]}" } function sources_hurrican() { svn checkout svn://svn.code.sf.net/p/hurrican/code/trunk "$md_build" if isPlatform "rpi"; then sed -i 's/USE_EGL := yes/USE_EGL := no/' "$md_build/Hurrican/src/Makefile" sed -i 's/-DRPI -DUSE_GLES2 -DUSE_EGL_RPI/-DLINUX -DUSE_HOME_DIR -DUSE_GLFULL/' "$md_build/Hurrican/src/Makefile" sed -i 's/-I\/usr\/include\/SDL/-I\/usr\/include\/SDL2/' "$md_build/Hurrican/src/Makefile" sed -i 's/-I\/opt\/vc\/include -I\/opt\/vc\/include\/interface\/vcos\/pthreads -I\/opt\/vc\/include\/GLES2 -I\/opt\/vc\/include\/EGL/-I\/usr\/include\/GL/' "$md_build/Hurrican/src/Makefile" sed -i 's/-L\/opt\/vc\/lib -g -lmodplug -lSDL_mixer -lSDL_image -lSDL -lGLESv2/-lSDL2 -lSDL2_mixer -lSDL2_image -lmodplug -lGL -lpthread/' "$md_build/Hurrican/src/Makefile" fi } function build_hurrican() { cd $md_build/Hurrican/src/ if isPlatform "rpi"; then make TARGET=rpi else make fi md_ret_require="$md_build" } function install_hurrican() { if isPlatform "rpi"; then md_ret_files=( 'Hurrican/hurrican' 'Hurrican/data' 'Hurrican/lang' 'Hurrican/splashscreen.bmp' 'Editor/maps' 'Editor/Gfx' ) else md_ret_files=( 'Hurrican/hurricanlinux' 'Hurrican/data' 'Hurrican/lang' 'Hurrican/splashscreen.bmp' 'Editor/maps' 'Editor/Gfx' ) fi } function configure_hurrican() { if isPlatform "rpi"; then addPort "$md_id" "hurrican" "Hurrican" "pushd $md_inst; $md_inst/hurrican; popd" else addPort "$md_id" "hurrican" "Hurrican" "pushd $md_inst; $md_inst/hurricanlinux; popd" fi mkRomDir "ports" moveConfigDir "$home/.hurrican" "$md_conf_root/hurrican" touch "$md_inst/Hurrican.cfg" touch "$md_inst/Hurrican.hsl" touch "$md_inst/Game_Log.txt" touch "$md_inst/Savegame0.sav" chown pi:pi "$md_inst/Hurrican.cfg" chown pi:pi "$md_inst/Hurrican.hsl" chown pi:pi "$md_inst/Game_Log.txt" chown pi:pi "$md_inst/Savegame0.sav" }
-
@jengun Ugg. Thanks for taking the time to get that written up. I have the same error message.
I used Atom to open up the error logs and I found the following message 184 times in the each log:
./cml/cml/mathlib/checking.h: In function ‘void cml::detail::CheckVecN(const VecT&, cml::fixed_size_tag)’: ./cml/cml/core/cml_assert.h:94:27: warning: typedef ‘__bogus_assert_type_64’ locally defined but not used [-Wunused-local-typedefs] ::result CML_JOIN(__bogus_assert_type_, __LINE__) ^~~~~~~~~~~~~~~~~~~~ ./cml/cml/core/cml_assert.h:27:27: note: in definition of macro ‘CML_DO_JOIN2’ #define CML_DO_JOIN2(X,Y) X##Y ^ ./cml/cml/core/cml_assert.h:25:23: note: in expansion of macro ‘CML_DO_JOIN’ #define CML_JOIN(X,Y) CML_DO_JOIN(X,Y) ^~~~~~~~~~~ ./cml/cml/core/cml_assert.h:94:18: note: in expansion of macro ‘CML_JOIN’ ::result CML_JOIN(__bogus_assert_type_, __LINE__) ^~~~~~~~ ./cml/cml/mathlib/checking.h:64:5: note: in expansion of macro ‘CML_STATIC_REQUIRE_M’ CML_STATIC_REQUIRE_M(((size_t)VecT::array_size == N), ErrorT);
This is the only time the string "error" shows up in the log.
Here is an example of the log that contains that passage:
g++ -c -O2 -Wall -fsingle-precision-constant -fno-rtti -I. -I./SDLPort -I./cml -I/usr/include -I/usr/include/SDL -I/usr/include/GLES2 -I/usr/include/libmodplug -DPLATFORM_SDL -DENABLE_CONSOLE_COMMANDS -DUSE_MODPLUG -DUSE_INDEXED_BATCH -DLINUX -DUSE_HOME_DIR -DUSE_GLES2 -DUSE_EGL_SDL -DUSE_GL2 -DUSE_FBO Boss_RiesenSpinne.cpp -o Boss_RiesenSpinne.o In file included from ./cml/cml/et/size_checking.h:20, from ./cml/cml/vector/vector_expr.h:17, from ./cml/cml/vector/vector_ops.h:17, from ./cml/cml/vector.h:50, from ./cml/cml/cml.h:66, from ./SDLPort/SDL_port.h:36, from DX8Joystick.h:28, from DX8Input.h:25, from Console.h:18, from stdafx.h:6, from Boss_RiesenQualle.cpp:7: ./cml/cml/mathlib/checking.h: In function ‘void cml::detail::CheckVec(const VecT&)’: ./cml/cml/core/cml_assert.h:94:27: warning: typedef ‘__bogus_assert_type_55’ locally defined but not used [-Wunused-local-typedefs] ::result CML_JOIN(__bogus_assert_type_, __LINE__) ^~~~~~~~~~~~~~~~~~~~ ./cml/cml/core/cml_assert.h:27:27: note: in definition of macro ‘CML_DO_JOIN2’ #define CML_DO_JOIN2(X,Y) X##Y ^ ./cml/cml/core/cml_assert.h:25:23: note: in expansion of macro ‘CML_DO_JOIN’ #define CML_JOIN(X,Y) CML_DO_JOIN(X,Y) ^~~~~~~~~~~ ./cml/cml/core/cml_assert.h:94:18: note: in expansion of macro ‘CML_JOIN’ ::result CML_JOIN(__bogus_assert_type_, __LINE__) ^~~~~~~~ ./cml/cml/mathlib/checking.h:53:5: note: in expansion of macro ‘CML_STATIC_REQUIRE_M’ CML_STATIC_REQUIRE_M( ^~~~~~~~~~~~~~~~~~~~ ./cml/cml/mathlib/checking.h: In function ‘void cml::detail::CheckVecN(const VecT&, cml::fixed_size_tag)’: ./cml/cml/core/cml_assert.h:94:27: warning: typedef ‘__bogus_assert_type_64’ locally defined but not used [-Wunused-local-typedefs] ::result CML_JOIN(__bogus_assert_type_, __LINE__) ^~~~~~~~~~~~~~~~~~~~ ./cml/cml/core/cml_assert.h:27:27: note: in definition of macro ‘CML_DO_JOIN2’ #define CML_DO_JOIN2(X,Y) X##Y ^ ./cml/cml/core/cml_assert.h:25:23: note: in expansion of macro ‘CML_DO_JOIN’ #define CML_JOIN(X,Y) CML_DO_JOIN(X,Y) ^~~~~~~~~~~ ./cml/cml/core/cml_assert.h:94:18: note: in expansion of macro ‘CML_JOIN’ ::result CML_JOIN(__bogus_assert_type_, __LINE__) ^~~~~~~~ ./cml/cml/mathlib/checking.h:64:5: note: in expansion of macro ‘CML_STATIC_REQUIRE_M’ CML_STATIC_REQUIRE_M(((size_t)VecT::array_size == N), ErrorT); ^~~~~~~~~~~~~~~~~~~~ ./cml/cml/mathlib/checking.h: In function ‘void cml::detail::CheckVec2Or3(const VecT&, cml::fixed_size_tag)’: ./cml/cml/core/cml_assert.h:94:27: warning: typedef ‘__bogus_assert_type_116’ locally defined but not used [-Wunused-local-typedefs] ::result CML_JOIN(__bogus_assert_type_, __LINE__) ^~~~~~~~~~~~~~~~~~~~
:-/
David
-
@daviddraper Yes, patching
Makefiles
is ugly and error prone ... of course it works here ... ;-) To rule out the usual copy and paste problems:$ sha1sum hurrican.sh
should show
2a27b0383b1b9be7251a6d189309d5036c14521b hurrican.sh
Some compiler macros like
-DUSE_GLES2 -DUSE_EGL_SDL -DUSE_GL2 -DUSE_FBO
(which causes to error above) should not be there, but-DUSE_GLFULL
is missing ... seems that the target is stilllinux_GL2
and notrpi
in theMakefile
... did you "Update (from source)" in RetroPie setup? -
@jengun ok- wierd. I ran
sha1sum hurrican.sh
and got
97fd14f14448a1035db77d3ee5e1d4701726dd63 hurrican.sh
So! Not the same file. I tried renaming the current file to hurricanold.sh and creating a new file, named it hurrican.sh, and copied and pasted the contents from your post (which I thought I had done yesterday) and when I ran the same command on the new file, I got:
7b7c52eadc1f1dbd54af707328d3f68402be3145 hurrican.sh
still not the same as your file. I am using WinSCP to SSH into the raspberry pi; yesterday I used Atom to edit the file and today I used SSH's built-in text editor. Does the editor make a difference? I could try nano if it does.
Thanks.
David
-
Next try: the new
TARGET sdl2
makes it possible to run Hurrican in full resolution on the Raspberry Pi 4 with "Buster" (KMS/DRM on console and LXDE desktop)Index: src/Makefile =================================================================== --- src/Makefile (revision 286) +++ src/Makefile (working copy) @@ -264,6 +264,25 @@ endif +ifeq ($(TARGET),sdl2) + +EXE := ../hurrican +CXX := g++ +CC := gcc +LD := g++ +RM := rm -f + +USE_EGL := no +USE_GL2 := yes +USE_FBO := yes + +DEFINES += -DLINUX -DUSE_HOME_DIR -DUSE_GLFULL + +INCLUDES_OS := -I/usr/include -I/usr/include/SDL2 -I/usr/include/GL -I/usr/include/libmodplug +LDFLAGS := -g -lSDL2 -lSDL2_mixer -lSDL2_image -lmodplug -lGL + +endif + INCLUDES := -I. -I./SDLPort -I./cml $(INCLUDES_OS) COMMON_CXXFLAGS := -Wall -fsingle-precision-constant -fno-rtti @@ -316,7 +335,7 @@ ## to avoid numerous spurious warnings compiling against CML libary: ## This will convert a version number like 4.8.1 to 4*100+8 and a version ## number like 4.10.2 to 4*100+10, allowing direct comparison through bc. -GCC_VER_GTE48 := $(shell echo `$(CXX) -dumpversion | cut -f1-2 -d.` \>= 4.8 | sed -e 's/\./*100+/g' | bc ) +GCC_VER_GTE48 := $(shell echo `${CXX} -dumpversion | cut -f1-2 -d.` \>= 4.8 | sed -e 's/\./*100+/g' | bc ) ifeq ($(GCC_VER_GTE48),1) COMMON_CXXFLAGS += -Wno-unused-local-typedefs endif Index: src/SDLPort/cfbo.cpp =================================================================== --- src/SDLPort/cfbo.cpp (revision 286) +++ src/SDLPort/cfbo.cpp (working copy) @@ -77,7 +77,11 @@ case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: Protokoll.WriteText( false, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: Not all framebuffer attachment points are framebuffer attachment complete.\n" ); break; +#ifdef PLATFORM_SDL + case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: +#else case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: +#endif Protokoll.WriteText( false, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: Not all attached images have the same width and height.\n" ); break; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
$ svn checkout svn://svn.code.sf.net/p/hurrican/code/trunk $ cd trunk/Hurrican/src $ svn patch /path/to/the/above/patch $ make TARGET=sdl2
should create a working binary ...
-
@jengun thanks for your patience and help. I need a little more expanation right now though. Is this is a little beyond me. Is the new file something be added to hurrican.sh? A new file? What should it be called and where should it be saved?
Also, if i don't have the same hash for the hurrican.sh doesnt that mean something in the hurrican.sh file is off?
Gratz in advance.
Dave
-
@jengun to answer your question about updating from source, the only option for hurrican when installing from reptropie setup is to install from source; I added retropie-extra to my install pie and it the way it is written there is no option to install from a pre-compiled binary, at least on my system. I think I did run an update script for RetroPie-Extra recently (two or three weeks ago?) As part of some generally updating i did on the RetroPie jnstall, b.ut I'm not sure it made a difference. I don't think RetroPie-Extra been updated at github in a while. I don't recall if I updated RetroPie-Extra from source or a pre-compiled binary.
D
-
Is the new file something be added to hurrican.sh? A new file?
Yes, the first part is a
subversion
patch file, there is no connection tohurrican.sh
at this moment: this is just a test of whether the binary works at all ...What should it be called and where should it be saved?
Save it in the home directory (
/home/pi
) on the Raspberry Pi under a name of your choice, e.g.hurrican-sdl2.patch
, so the above commands to execute should like this:$ svn checkout svn://svn.code.sf.net/p/hurrican/code/trunk $ cd trunk/Hurrican/src $ svn patch /home/pi/hurrican-sdl2.patch $ make TARGET=sdl2 $ cd .. $ ./hurrican
The binary should start in fullscreen mode, integration with
hurrican.sh
will follow, but needs some time ... -
Hey @jengun
For this newb, this is pretty cool stiff!
I created the file in Atom, named it
hurrican.sh
and put it in/home/pi
via SSH.I entered
svn checkout svn://svn.code.sf.net/p/hurrican/code/trunk
and a series of output lines, ending with:
.... (lots of lines like the ones below) A trunk/Editor/src/DX8Font.cpp A trunk/Editor/src/resource.h A trunk/Editor/src/Logdatei.h A trunk/Editor/Editor.dsp A trunk/Editor/Editor.suo A trunk/Editor/MainMenu.aps A trunk/Editor/MainMenu.rc A trunk/Editor/Editor v1.plg Checked out revision 286.
I entered the rest and here is what I got:
pi@RetroPi:~ $ cd trunk/Hurrican/src pi@RetroPi:~/trunk/Hurrican/src $ svn patch /home/pi/hurrican-sdl2.patch C src/Makefile > rejected hunk @@ -264,6 +264,25 @@ > rejected hunk @@ -316,7 +335,7 @@ C src/SDLPort/cfbo.cpp > rejected hunk @@ -77,7 +77,11 @@ Summary of conflicts: Text conflicts: 2 pi@RetroPi:~/trunk/Hurrican/src $ make TARGET=sdl2 rm -f *.o SDLPort/*.o unrarlib040/unrarlib/*.o pi@RetroPi:~/trunk/Hurrican/src $ cd .. pi@RetroPi:~/trunk/Hurrican $ ./hurrican -bash: ./hurrican: No such file or directory pi@RetroPi:~/trunk/Hurrican $ ./Hurrican -bash: ./Hurrican: No such file or directory
Dave
-
I created the file in Atom, named it
hurrican.sh
and put it in/home/pi
via SSH.OK, enough with Atom's copy and paste weirdness: please SSH to your Raspberry and execute this command to get the file:
curl -LJO "https://gitlab.com/jengun/Hurrican/-/raw/master/hurrican-sdl2.patch"
-
@jengun ok...
pi@RetroPi:~ $ curl -LJO "https://gitlab.com/jengun/Hurrican/-/raw/master/hurrican-sdl2.patch" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Warning: Failed to create the file hurrican-sdl2.patch: Permission denied 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 curl: (23) Failed writing header pi@RetroPi:~ $ sudo curl -LJO "https://gitlab.com/jengun/Hurrican/-/raw/master/hurrican-sdl2.patch" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1445 0 1445 0 0 13256 0 --:--:-- --:--:-- --:--:-- 13256 pi@RetroPi:~ $
Dave
-
@jengun FWIW,
I deleted the /home/pi/trunk directory, recreated the hurrican-sdl2.patch file in notepad and ran the commands again and got the following results:
pi@RetroPi:~ $ svn checkout svn://svn.code.sf.net/p/hurrican/code/trunk A trunk/Hurrican A trunk/Hurrican/data A trunk/Hurrican/data/shaders
...
(lots of files)
...A trunk/Editor/MainMenu.rc A trunk/Editor/Editor v1.plg Checked out revision 286. pi@RetroPi:~ $ cd trunk/Hurrican/src pi@RetroPi:~/trunk/Hurrican/src $ svn patch /home/pi/hurrican-sdl2.patch C src/Makefile > rejected hunk @@ -264,6 +264,25 @@ > rejected hunk @@ -316,7 +335,7 @@ C src/SDLPort/cfbo.cpp > rejected hunk @@ -77,7 +77,11 @@ Summary of conflicts: Text conflicts: 2 pi@RetroPi:~/trunk/Hurrican/src $ make TARGET=sdl2 rm -f *.o SDLPort/*.o unrarlib040/unrarlib/*.o pi@RetroPi:~/trunk/Hurrican/src $ cd .. pi@RetroPi:~/trunk/Hurrican $ ./hurrican -bash: ./hurrican: No such file or directory pi@RetroPi:~/trunk/Hurrican $
Do you think its something related to my system? I'm running RetroPie commit number ac8d87759f4cad763affbba624be4fb206790ceb, "bump to version 4.7.2.," Running on Raspbian GNU/Linux 10 (buster).
Dave
David
-
AWWWW MAN SOOOO COOL!!!
::ahem::I ran the script from
https://gitlab.com/jengun/Hurrican/-/raw/master/hurrican-sdl2.patch
and the rest of the commands$ svn checkout svn://svn.code.sf.net/p/hurrican/code/trunk $ cd trunk/Hurrican/src $ svn patch /home/pi/hurrican-sdl2.patch $ make TARGET=sdl2 $ cd .. $ ./hurrican
and the game ran from the command line! You did it!!!!!!! very awesome. And it even works with my controller I had plugged in to the system without any problems.
I hate to ask after everything you've done... but is there a way to create a link to the game from the Emulation Station details page?
Thanks!
Dave
-
and the game ran from the command line!
Glad that it works now! :-)
... but is there a way to create a link to the game from the Emulation Station details page?
Just copy the working binary:
sudo cp -i /home/pi/trunk/Hurrican/hurrican /opt/retropie/ports/hurrican
... provided that there is an old copy of Hurrican with data files in
/opt/retropie/ports/hurrican
...I'm doing a cleaned up hurrican.sh that will things more convenient ...
-
@jengun ok- I will need to try this when I get home. I think I removed the Hurrican files I installed from RetroPie-Extra. Should I reinstall it and then run the copy command?
Thx,
David
-
@jengun Worked like a charm. You are a person of high class and a scholar. Thanks.
David
-
@daviddraper You're welcome and thanks for your kind words! :-) You might have noticed some random pixels on the right window edge: this is also fixed (at least they'll be cut off) in my GitLab repository: https://gitlab.com/jengun/Hurrican ...
-
@jengun Very cool. How do I update hurrican with your update? do I download it and copy it into the directory in /ports?
Dave
-
@daviddraper Just clone the repository only once:
git clone https://gitlab.com/jengun/hurrican
and execute
make
in thehurrican/src
directory to build the binary. To update usegit pull
in the
hurrican
directory ... I'll try to fix at least a few small bugs, but I'm not an expert on C++ and OpenGL: so there won't be any major changes. Please use GitLab to report issues, not this forum ... -
@jengun said in Turrican (hurricane clone) black screen:
Hi,
I'm trying to get this version running on the RPi4 since it looks like it no longer needs X server to run.
The gitlab project is no longer available. Does anyone know the new location?
I compiled a version of Hurrican that runs under X (XINIT in emulators.cfg) and it works, but I can't find the code that I compiled and now when I try to pull code from other sites it fails linking.
I installed Hurrican from RetroPie-Extras and it fails to display a screen on the RPi4.
RussellB
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.