1
0
mirror of git://projects.qi-hardware.com/openwrt-packages.git synced 2024-11-28 19:19:42 +02:00
openwrt-packages/supertux/patches/001-gp2x.patch
kyak 8be517484d supertux: initial port
Credits go to OE recipy!
2011-02-13 22:08:08 +03:00

2615 lines
72 KiB
Diff
Raw Blame History

Only in supertux-0.1.3: aclocal.m4
diff -ur supertux-0.1.3/AUTHORS supertux-0.1.3-gp2x/AUTHORS
--- supertux-0.1.3/AUTHORS 2005-07-02 14:37:30.000000000 +0300
+++ supertux-0.1.3-gp2x/AUTHORS 2006-04-13 06:11:02.000000000 +0300
@@ -91,6 +91,12 @@
Royalty free CDROMs and FTP sites sounds
+Port to GP2X
+-----------
+ Ingo Arndt
+ scachi@gmx.de
+ http://www.bitmage.de
+
More information and contacts
=============================
Only in supertux-0.1.3: autom4te.cache
Only in supertux-0.1.3-gp2x: autoscan.log
Only in supertux-0.1.3-gp2x: COMPILE4GP2X
Only in supertux-0.1.3: config.guess
Only in supertux-0.1.3: config.log
Only in supertux-0.1.3: config.status
Only in supertux-0.1.3: config.sub
Only in supertux-0.1.3: configure
diff -ur supertux-0.1.3/configure.ac supertux-0.1.3-gp2x/configure.ac
--- supertux-0.1.3/configure.ac 2005-07-06 12:26:15.000000000 +0300
+++ supertux-0.1.3-gp2x/configure.ac 2006-04-19 22:29:05.000000000 +0300
@@ -76,13 +76,33 @@
CFLAGS="$CFLAGS $SDL_CFLAGS"
LIBS="$LIBS $SDL_LIBS"
+AM_PATH_LIBMIKMOD(,
+ :,
+ AC_MSG_ERROR([*** mikmod not found!]))
+CXXFLAGS="$CXXFLAGS $LIBMIKMOD_CFLAGS"
+CFLAGS="$CFLAGS $LIBMIKMOD_CFLAGS"
+LIBS="$LIBS $LIBMIKMOD_LIBS"
+
dnl Checks for additional libraries.
+AC_CHECK_LIB(smpeg, SMPEG_status)
+
+AC_CHECK_LIB(mikmod, MikMod_Init)
+
AC_CHECK_LIB(SDL_mixer, Mix_OpenAudio,,
AC_MSG_ERROR([SDL_mixer library required]))
+AC_CHECK_LIB(jpeg,jpeg_abort)
+
+AC_CHECK_LIB(z,compress)
+
+AC_CHECK_LIB(png,png_free)
+
AC_CHECK_LIB(SDL_image, IMG_Load,,
AC_MSG_ERROR([SDL_image library required]))
+AC_CHECK_LIB(SDL_gfx, rotozoomSurface,,
+ AC_MSG_ERROR([SDL_gfx library required]))
+
if test "x${enable_opengl}" != "xno"; then
AX_CHECK_GL
fi
@@ -95,7 +115,30 @@
LIBS="$LIBS $GL_LIBS"
fi
-AC_CHECK_LIB(z, gzopen,, AC_MSG_ERROR([*** zlib is missing]))
+# compile for the testing the 320x240 resolution
+# compile for the gp2x
+AC_ARG_ENABLE(gp2x,
+[ --enable-gp2x Build the gp2x version [default=no]],
+ , enable_gp2x=no)
+if test x$enable_gp2x = xyes; then
+ CXXFLAGS="$CXXFLAGS -DGP2X"
+fi
+
+AC_ARG_ENABLE(320x240,
+[ --enable-320x240 Test the 320x240 resolution [default=no]],
+ , enable_320x240=no)
+if test x$enable_320x240 = xyes; then
+ CXXFLAGS="$CXXFLAGS -DRES320X240"
+fi
+
+# compile static
+AC_ARG_ENABLE(static,
+[ --enable-static Build the static version [default=no]],
+ , enable_static=no)
+if test x$enable_static = xyes; then
+ CXXFLAGS="$CXXFLAGS -static"
+fi
+
CXXFLAGS="$CXXFLAGS -DDATA_PREFIX='\"$datadir/supertux\"'"
@@ -110,6 +153,9 @@
echo " Profile Mode: $enable_gprof"
echo " Debug Mode: $enable_debug"
echo " OpenGL Support: $enable_opengl"
+echo " 320x240 Resolution: $enable_320x240"
+echo " GP2X Build (+320x240): $enable_gp2x"
+echo " Static Build: $enable_static"
echo ""
# EOF #
Only in supertux-0.1.3/data: CREDITS
Only in supertux-0.1.3/data: extro-bonus2.txt
Only in supertux-0.1.3/data: extro-bonus.txt
Only in supertux-0.1.3/data: extro.txt
Only in supertux-0.1.3/data: images
Only in supertux-0.1.3/data: intro.txt
Only in supertux-0.1.3/data: levels
Only in supertux-0.1.3/data: Makefile
Only in supertux-0.1.3/data: Makefile.in
Only in supertux-0.1.3/data: music
Only in supertux-0.1.3/data: sounds
Only in supertux-0.1.3/data: supertux.strf
Only in supertux-0.1.3: depcomp
Only in supertux-0.1.3: install-sh
Only in supertux-0.1.3: m4
Only in supertux-0.1.3: Makefile
Only in supertux-0.1.3: Makefile.in
Only in supertux-0.1.3: missing
Only in supertux-0.1.3: mkinstalldirs
Only in supertux-0.1.3: patches
diff -ur supertux-0.1.3/src/badguy.cpp supertux-0.1.3-gp2x/src/badguy.cpp
--- supertux-0.1.3/src/badguy.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/badguy.cpp 2006-04-20 21:32:23.000000000 +0300
@@ -250,7 +250,11 @@
tux.kick_timer.start(KICKING_TIME);
set_sprite(img_mriceblock_flat_left, img_mriceblock_flat_right);
physic.set_velocity_x((dir == LEFT) ? -3.5 : 3.5);
+#ifndef GP2X
play_sound(sounds[SND_KICK],SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_KICK);
+#endif
}
}
@@ -260,6 +264,7 @@
check_horizontal_bump();
if(mode == KICK && changed != dir)
{
+#ifndef GP2X
/* handle stereo sound (number 10 should be tweaked...)*/
if (base.x < scroll_x + screen->w/2 - 10)
play_sound(sounds[SND_RICOCHET], SOUND_LEFT_SPEAKER);
@@ -267,6 +272,9 @@
play_sound(sounds[SND_RICOCHET], SOUND_RIGHT_SPEAKER);
else
play_sound(sounds[SND_RICOCHET], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_RICOCHET);
+#endif
}
}
@@ -455,11 +463,15 @@
/* play explosion sound */ // FIXME: is the stereo all right? maybe we should use player cordinates...
if (base.x < scroll_x + screen->w/2 - 10)
+#ifndef GP2X
play_sound(sounds[SND_EXPLODE], SOUND_LEFT_SPEAKER);
else if (base.x > scroll_x + screen->w/2 + 10)
play_sound(sounds[SND_EXPLODE], SOUND_RIGHT_SPEAKER);
else
play_sound(sounds[SND_EXPLODE], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_EXPLODE);
+#endif
} else if(mode == BOMB_EXPLODE) {
remove_me();
@@ -677,13 +689,21 @@
}
// BadGuy fall below the ground
+#ifndef RES320X240
if (base.y > screen->h) {
+#else
+ if (base.y > 640) {
+#endif
remove_me();
return;
}
// Once it's on screen, it's activated!
+#ifndef RES320X240
if (base.x <= scroll_x + screen->w + OFFSCREEN_DISTANCE)
+#else
+ if (base.x <= scroll_x + 640 + OFFSCREEN_DISTANCE)
+#endif
seen = true;
if(!seen)
@@ -743,7 +763,11 @@
BadGuy::draw()
{
// Don't try to draw stuff that is outside of the screen
+#ifndef RES320X240
if(base.x <= scroll_x - base.width || base.x >= scroll_x + screen->w)
+#else
+ if(base.x <= scroll_x - base.width || base.x >= scroll_x + 640)
+#endif
return;
if(sprite_left == 0 || sprite_right == 0)
@@ -811,7 +835,11 @@
World::current()->add_score(base.x - scroll_x,
base.y, 50 * player_status.score_multiplier);
+#ifndef GP2X
play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_SQUISH);
+#endif
player_status.score_multiplier++;
dying = DYING_SQUISHED;
@@ -830,7 +858,11 @@
player->jump_of_badguy(this);
World::current()->add_score(base.x - scroll_x, base.y, 50 * player_status.score_multiplier);
+#ifndef GP2X
play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_SQUISH);
+#endif
player_status.score_multiplier++;
remove_me();
return;
@@ -839,7 +871,11 @@
if (mode == NORMAL || mode == KICK)
{
/* Flatten! */
+#ifndef GP2X
play_sound(sounds[SND_STOMP], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_STOMP);
+#endif
mode = FLAT;
set_sprite(img_mriceblock_flat_left, img_mriceblock_flat_right);
physic.set_velocity_x(0);
@@ -847,7 +883,11 @@
timer.start(4000);
} else if (mode == FLAT) {
/* Kick! */
+#ifndef GP2X
play_sound(sounds[SND_KICK], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_KICK);
+#endif
if (player->base.x < base.x + (base.width/2)) {
physic.set_velocity_x(5);
@@ -925,7 +965,11 @@
score * player_status.score_multiplier);
/* Play death sound: */
+#ifndef GP2X
play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_FALL);
+#endif
}
void BadGuy::explode(BadGuy *badguy)
@@ -1053,7 +1097,11 @@
/* Get kicked if were flat */
if (mode == FLAT && !dying)
{
+#ifndef GP2X
play_sound(sounds[SND_KICK], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_KICK);
+#endif
// Hit from left side
if (player->base.x < base.x) {
diff -ur supertux-0.1.3/src/configfile.cpp supertux-0.1.3-gp2x/src/configfile.cpp
--- supertux-0.1.3/src/configfile.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/configfile.cpp 2006-04-10 13:32:19.000000000 +0300
@@ -92,12 +92,22 @@
else
use_joystick = true;
+#ifndef GP2X
reader.read_int ("joystick-x", &joystick_keymap.x_axis);
reader.read_int ("joystick-y", &joystick_keymap.y_axis);
reader.read_int ("joystick-a", &joystick_keymap.a_button);
reader.read_int ("joystick-b", &joystick_keymap.b_button);
reader.read_int ("joystick-start", &joystick_keymap.start_button);
reader.read_int ("joystick-deadzone", &joystick_keymap.dead_zone);
+#else
+ reader.read_int ("joystick-up", &joystick_keymap.up_button);
+ reader.read_int ("joystick-down", &joystick_keymap.down_button);
+ reader.read_int ("joystick-right", &joystick_keymap.right_button);
+ reader.read_int ("joystick-left", &joystick_keymap.left_button);
+ reader.read_int ("joystick-a", &joystick_keymap.a_button);
+ reader.read_int ("joystick-b", &joystick_keymap.b_button);
+ reader.read_int ("joystick-start", &joystick_keymap.start_button);
+#endif
reader.read_int ("keyboard-jump", &keymap.jump);
reader.read_int ("keyboard-duck", &keymap.duck);
@@ -130,12 +140,22 @@
fprintf(config, "\n\t;; joystick number (-1 means no joystick):\n");
fprintf(config, "\t(joystick %d)\n", use_joystick ? joystick_num : -1);
+#ifndef GP2X
fprintf(config, "\t(joystick-x %d)\n", joystick_keymap.x_axis);
fprintf(config, "\t(joystick-y %d)\n", joystick_keymap.y_axis);
fprintf(config, "\t(joystick-a %d)\n", joystick_keymap.a_button);
fprintf(config, "\t(joystick-b %d)\n", joystick_keymap.b_button);
fprintf(config, "\t(joystick-start %d)\n", joystick_keymap.start_button);
fprintf(config, "\t(joystick-deadzone %d)\n", joystick_keymap.dead_zone);
+#else
+ fprintf(config, "\t(joystick-up %d)\n", joystick_keymap.up_button);
+ fprintf(config, "\t(joystick-down %d)\n", joystick_keymap.down_button);
+ fprintf(config, "\t(joystick-right %d)\n", joystick_keymap.right_button);
+ fprintf(config, "\t(joystick-left %d)\n", joystick_keymap.left_button);
+ fprintf(config, "\t(joystick-a %d)\n", joystick_keymap.a_button);
+ fprintf(config, "\t(joystick-b %d)\n", joystick_keymap.b_button);
+ fprintf(config, "\t(joystick-start %d)\n", joystick_keymap.start_button);
+#endif
fprintf(config, "\t(keyboard-jump %d)\n", keymap.jump);
fprintf(config, "\t(keyboard-duck %d)\n", keymap.duck);
diff -ur supertux-0.1.3/src/defines.h supertux-0.1.3-gp2x/src/defines.h
--- supertux-0.1.3/src/defines.h 2005-07-07 02:05:03.000000000 +0300
+++ supertux-0.1.3-gp2x/src/defines.h 2006-04-11 22:02:05.000000000 +0300
@@ -91,7 +91,11 @@
/* Scrolling text speed */
+#ifndef RES320X240
#define SCROLL_SPEED_CREDITS 1.2
+#else
+#define SCROLL_SPEED_CREDITS 2.4
+#endif
#define SCROLL_SPEED_MESSAGE 1.0
/* Debugging */
Only in supertux-0.1.3/src: .deps
diff -ur supertux-0.1.3/src/gameloop.cpp supertux-0.1.3-gp2x/src/gameloop.cpp
--- supertux-0.1.3/src/gameloop.cpp 2005-07-02 15:16:08.000000000 +0300
+++ supertux-0.1.3-gp2x/src/gameloop.cpp 2006-05-05 23:22:58.000000000 +0300
@@ -288,6 +288,7 @@
switch(event.type)
{
+#ifndef GP2X
case SDL_QUIT: /* Quit event - quit: */
st_abort("Received window close", "");
break;
@@ -434,22 +435,60 @@
tux.input.down = UP;
}
break;
-
+#endif
case SDL_JOYBUTTONDOWN:
+#ifndef GP2X
+ if (event.jbutton.button == joystick_keymap.a_button)
+ tux.input.up = DOWN;
+ else if (event.jbutton.button == joystick_keymap.b_button)
+ tux.input.fire = DOWN;
+ else if (event.jbutton.button == joystick_keymap.start_button)
+ on_escape_press();
+ break;
+#else
if (event.jbutton.button == joystick_keymap.a_button)
tux.input.up = DOWN;
else if (event.jbutton.button == joystick_keymap.b_button)
tux.input.fire = DOWN;
else if (event.jbutton.button == joystick_keymap.start_button)
on_escape_press();
+ else if (event.jbutton.button == joystick_keymap.up_button)
+ tux.input.up = DOWN;
+ else if (event.jbutton.button == joystick_keymap.down_button)
+ tux.input.down = DOWN;
+ else if (event.jbutton.button == joystick_keymap.right_button)
+ tux.input.right = DOWN;
+ else if (event.jbutton.button == joystick_keymap.left_button)
+ tux.input.left = DOWN;
+ else if (event.jbutton.button == joystick_keymap.voldown_button)
+ decreaseSoundVolume();
+ else if (event.jbutton.button == joystick_keymap.volup_button)
+ increaseSoundVolume();
break;
+#endif
+
case SDL_JOYBUTTONUP:
+#ifndef GP2X
if (event.jbutton.button == joystick_keymap.a_button)
tux.input.up = UP;
else if (event.jbutton.button == joystick_keymap.b_button)
tux.input.fire = UP;
break;
-
+#else
+ if (event.jbutton.button == joystick_keymap.a_button)
+ tux.input.up = UP;
+ else if (event.jbutton.button == joystick_keymap.b_button)
+ tux.input.fire = UP;
+ else if (event.jbutton.button == joystick_keymap.up_button)
+ tux.input.up = UP;
+ else if (event.jbutton.button == joystick_keymap.down_button)
+ tux.input.down = UP;
+ else if (event.jbutton.button == joystick_keymap.right_button)
+ tux.input.right = UP;
+ else if (event.jbutton.button == joystick_keymap.left_button)
+ tux.input.left = UP;
+ break;
+#endif
default:
break;
} /* switch */
@@ -464,7 +503,7 @@
Player* tux = world->get_tux();
/* End of level? */
- int endpos = (World::current()->get_level()->width-5) * 32;
+ int endpos = (World::current()->get_level()->width-5) * (32);
Tile* endtile = collision_goal(tux->base);
// fallback in case the other endpositions don't trigger
@@ -545,7 +584,7 @@
Menu::current()->draw();
mouse_cursor->draw();
}
-
+ //updateSound();
updatescreen();
}
@@ -599,6 +638,7 @@
while (exit_status == ES_NONE)
{
+ SDL_Delay(10);
/* Calculate the movement-factor */
double frame_ratio = ((double)(update_time-last_update_time))/((double)FRAME_RATE);
@@ -686,6 +726,7 @@
fps_cnt = 0;
}
}
+ //updateSound();
}
return exit_status;
@@ -694,21 +735,32 @@
/* Bounce a brick: */
void bumpbrick(float x, float y)
{
- World::current()->add_bouncy_brick(((int)(x + 1) / 32) * 32,
- (int)(y / 32) * 32);
+ World::current()->add_bouncy_brick(((int)(x + 1) / (32)) * (32),
+ (int)(y / (32)) * (32));
+#ifndef GP2X
play_sound(sounds[SND_BRICK], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_BRICK);
+#endif
}
/* (Status): */
void
GameSession::drawstatus()
{
+ int xdiv;
+#ifdef RES320X240
+ xdiv=2;
+#else
+ xdiv=1;
+#endif
+
char str[60];
sprintf(str, "%d", player_status.score);
white_text->draw("SCORE", 0, 0, 1);
- gold_text->draw(str, 96, 0, 1);
+ gold_text->draw(str, 96/xdiv, 0, 1);
if(st_gl_mode == ST_GL_TEST)
{
@@ -716,28 +768,33 @@
}
if(!time_left.check()) {
- white_text->draw("TIME'S UP", 224, 0, 1);
+ white_text->draw("TIME'S UP", 224/xdiv, 0, 1);
} else if (time_left.get_left() > TIME_WARNING || (global_frame_counter % 10) < 5) {
sprintf(str, "%d", time_left.get_left() / 1000 );
- white_text->draw("TIME", 224, 0, 1);
- gold_text->draw(str, 304, 0, 1);
+ white_text->draw("TIME", 224/xdiv, 0, 1);
+ gold_text->draw(str, 304/xdiv, 0, 1);
}
sprintf(str, "%d", player_status.distros);
white_text->draw("COINS", screen->h, 0, 1);
- gold_text->draw(str, 608, 0, 1);
+ gold_text->draw(str, 608/xdiv, 0, 1);
- white_text->draw("LIVES", 480, 20);
+ white_text->draw("LIVES", 480/xdiv, 20);
if (player_status.lives >= 5)
{
sprintf(str, "%dx", player_status.lives);
+#ifdef RES320X240
+ gold_text->draw_align(str, 617/xdiv-5, 20, A_RIGHT, A_TOP);
+ tux_life->draw(565+(18*3)/xdiv+10, 20);
+#else
gold_text->draw_align(str, 617, 20, A_RIGHT, A_TOP);
tux_life->draw(565+(18*3), 20);
+#endif
}
else
{
for(int i= 0; i < player_status.lives; ++i)
- tux_life->draw(565+(18*i),20);
+ tux_life->draw(565+(18*i)/xdiv,20);
}
if(show_fps)
@@ -746,6 +803,7 @@
white_text->draw("FPS", screen->h, 40, 1);
gold_text->draw(str, screen->h + 60, 40, 1);
}
+// updateSound();
}
void
@@ -824,4 +882,3 @@
return tmp;
}
-
diff -ur supertux-0.1.3/src/gameobjs.cpp supertux-0.1.3-gp2x/src/gameobjs.cpp
--- supertux-0.1.3/src/gameobjs.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/gameobjs.cpp 2006-04-11 21:52:52.000000000 +0300
@@ -98,6 +98,9 @@
src.h = 16;
dest.x = (int)(base.x - scroll_x);
+#ifdef RES320X240
+ dest.x=dest.x/2;
+#endif
dest.y = (int)base.y;
dest.w = 16;
dest.h = 16;
@@ -143,8 +146,13 @@
{
SDL_Rect dest;
+#ifndef RES320X240
if (base.x >= scroll_x - 32 &&
base.x <= scroll_x + screen->w)
+#else
+ if (base.x >= scroll_x - 32 &&
+ base.x <= scroll_x + 640)
+#endif
{
dest.x = (int)(base.x - scroll_x);
dest.y = (int)base.y;
@@ -165,8 +173,14 @@
else
{
int s = ((int)scroll_x / 2)%640;
+
+#ifdef RES320X240
+ plevel->img_bkgd->draw_part(dest.x/2 + s/2, dest.y/2,
+ dest.x/2, dest.y,dest.w/2,dest.h/2);
+#else
plevel->img_bkgd->draw_part(dest.x + s, dest.y,
dest.x, dest.y,dest.w,dest.h);
+#endif
}
Tile::draw(base.x - scroll_x,
diff -ur supertux-0.1.3/src/globals.cpp supertux-0.1.3-gp2x/src/globals.cpp
--- supertux-0.1.3/src/globals.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/globals.cpp 2006-04-11 22:39:03.000000000 +0300
@@ -25,6 +25,7 @@
JoystickKeymap::JoystickKeymap()
{
+#ifndef GP2X
a_button = 0;
b_button = 1;
start_button = 2;
@@ -33,6 +34,17 @@
y_axis = 1;
dead_zone = 4096;
+#else
+ a_button = GP2X_BUTTON_A;
+ b_button = GP2X_BUTTON_X;
+ start_button = GP2X_BUTTON_START;
+ up_button = GP2X_BUTTON_UP;
+ down_button = GP2X_BUTTON_DOWN;
+ left_button = GP2X_BUTTON_LEFT;
+ right_button = GP2X_BUTTON_RIGHT;
+ volup_button = GP2X_BUTTON_VOLUP;
+ voldown_button = GP2X_BUTTON_VOLDOWN;
+#endif
}
JoystickKeymap joystick_keymap;
diff -ur supertux-0.1.3/src/globals.h supertux-0.1.3-gp2x/src/globals.h
--- supertux-0.1.3/src/globals.h 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/globals.h 2006-04-11 23:45:27.000000000 +0300
@@ -28,10 +28,33 @@
#include "menu.h"
#include "mousecursor.h"
+#ifdef GP2X
+#define GP2X_BUTTON_UP (0)
+#define GP2X_BUTTON_DOWN (4)
+#define GP2X_BUTTON_LEFT (2)
+#define GP2X_BUTTON_RIGHT (6)
+#define GP2X_BUTTON_UPLEFT (1)
+#define GP2X_BUTTON_UPRIGHT (7)
+#define GP2X_BUTTON_DOWNLEFT (3)
+#define GP2X_BUTTON_DOWNRIGHT (5)
+#define GP2X_BUTTON_CLICK (18)
+#define GP2X_BUTTON_A (12)
+#define GP2X_BUTTON_B (13)
+#define GP2X_BUTTON_X (15)
+#define GP2X_BUTTON_Y (14)
+#define GP2X_BUTTON_L (10)
+#define GP2X_BUTTON_R (11)
+#define GP2X_BUTTON_START (8)
+#define GP2X_BUTTON_SELECT (9)
+#define GP2X_BUTTON_VOLUP (16)
+#define GP2X_BUTTON_VOLDOWN (17)
+#endif
+
extern std::string datadir;
struct JoystickKeymap
{
+#ifndef GP2X
int a_button;
int b_button;
int start_button;
@@ -42,6 +65,19 @@
int dead_zone;
JoystickKeymap();
+#else
+ int a_button;
+ int b_button;
+ int start_button;
+ int up_button;
+ int down_button;
+ int left_button;
+ int right_button;
+ int volup_button;
+ int voldown_button;
+
+ JoystickKeymap();
+#endif
};
extern JoystickKeymap joystick_keymap;
diff -ur supertux-0.1.3/src/lispreader.h supertux-0.1.3-gp2x/src/lispreader.h
Only in supertux-0.1.3/src: Makefile
diff -ur supertux-0.1.3/src/Makefile.am supertux-0.1.3-gp2x/src/Makefile.am
--- supertux-0.1.3/src/Makefile.am 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/Makefile.am 2006-04-19 21:55:54.000000000 +0300
@@ -77,3 +77,5 @@
musicref.h
# EOF #
+
+#supertux_LDADD = libmikmod
Only in supertux-0.1.3/src: Makefile.in
diff -ur supertux-0.1.3/src/menu.cpp supertux-0.1.3-gp2x/src/menu.cpp
--- supertux-0.1.3/src/menu.cpp 2005-06-29 15:44:13.000000000 +0300
+++ supertux-0.1.3-gp2x/src/menu.cpp 2006-05-04 23:59:29.000000000 +0300
@@ -53,6 +53,8 @@
Menu* options_menu = 0;
Menu* options_keys_menu = 0;
Menu* options_joystick_menu = 0;
+Menu* options_joystick_axis_menu = 0;
+Menu* options_joystick_button_menu = 0;
Menu* highscore_menu = 0;
Menu* load_game_menu = 0;
Menu* save_game_menu = 0;
@@ -240,8 +242,10 @@
}
/* Set ControlField a key */
+//TODO: get joystick in here somehow
void Menu::get_controlfield_key_into_input(MenuItem *item)
{
+#ifndef GP2X
switch(*item->int_p)
{
case SDLK_UP:
@@ -288,6 +292,11 @@
}
break;
}
+#else
+ char tmp[64];
+ snprintf(tmp, 64, "%d", *item->int_p);
+ item->change_input(tmp);
+#endif
}
/* Free a menu and all its items */
@@ -497,8 +506,13 @@
int menu_height)
{
MenuItem& pitem = item[index];
-
+
+#ifndef RES320X240
int font_width = 16;
+#else
+ int font_width = 16/2;
+#endif
+
int effect_offset = 0;
{
int effect_time = 0;
@@ -510,7 +524,7 @@
}
int x_pos = pos_x;
- int y_pos = pos_y + 24*index - menu_height/2 + 12 + effect_offset;
+ int y_pos = pos_y + (int)(24)*index - menu_height/2 + 12 + effect_offset;
int shadow_size = 2;
int text_width = strlen(pitem.text) * font_width;
int input_width = (strlen(pitem.input)+ 1) * font_width;
@@ -518,7 +532,7 @@
Text* text_font = white_text;
if (arrange_left)
- x_pos += 24 - menu_width/2 + (text_width + input_width + list_width)/2;
+ x_pos += (int)(24) - menu_width/2 + (text_width + input_width + list_width)/2;
if(index == active_item)
{
@@ -538,7 +552,11 @@
case MN_HL:
{
+#ifndef RES320X240
int x = pos_x - menu_width/2;
+#else
+ int x = pos_x - menu_width/4;
+#endif
int y = y_pos - 12 - effect_offset;
/* Draw a horizontal line with a little 3d effect */
fillrect(x, y + 6,
@@ -551,9 +569,15 @@
}
case MN_LABEL:
{
+#ifndef RES320X240
white_big_text->draw_align(pitem.text,
x_pos, y_pos,
A_HMIDDLE, A_VMIDDLE, 2);
+#else
+ white_text->draw_align(pitem.text,
+ x_pos, y_pos,
+ A_HMIDDLE, A_VMIDDLE, 2);
+#endif
break;
}
case MN_TEXTFIELD:
@@ -570,8 +594,9 @@
input_width + font_width, 18,
0,0,0,128);
- if(pitem.kind == MN_CONTROLFIELD)
+ if(pitem.kind == MN_CONTROLFIELD) {
get_controlfield_key_into_input(&pitem);
+ }
if(pitem.kind == MN_TEXTFIELD || pitem.kind == MN_NUMFIELD)
{
@@ -663,7 +688,7 @@
menu_width += 2;
}
}
-
+
return (menu_width * 16 + 24);
}
@@ -680,10 +705,17 @@
int menu_width = get_width();
/* Draw a transparent background */
+#ifndef RES320X240
fillrect(pos_x - menu_width/2,
pos_y - 24*item.size()/2 - 10,
menu_width,menu_height + 20,
150,180,200,125);
+#else
+ fillrect(pos_x - menu_width/4,
+ pos_y - 24*item.size()/2 - 10,
+ menu_width,menu_height + 20,
+ 150,180,200,125);
+#endif
for(unsigned int i = 0; i < item.size(); ++i)
{
@@ -723,6 +755,8 @@
SDLKey key;
switch(event.type)
{
+
+#ifndef GP2X
case SDL_KEYDOWN:
key = event.key.keysym.sym;
SDLMod keymod;
@@ -754,7 +788,6 @@
return;
}
-
switch(key)
{
case SDLK_UP: /* Menu Up */
@@ -800,12 +833,14 @@
break;
}
break;
+
case SDL_JOYHATMOTION:
if(event.jhat.value == SDL_HAT_UP)
menuaction = MENU_ACTION_UP;
if(event.jhat.value == SDL_HAT_DOWN)
menuaction = MENU_ACTION_DOWN;
break;
+
case SDL_JOYAXISMOTION:
if(event.jaxis.axis == joystick_keymap.y_axis)
{
@@ -815,9 +850,88 @@
menuaction = MENU_ACTION_UP;
}
break;
+#endif
+
case SDL_JOYBUTTONDOWN:
+#ifndef GP2X
menuaction = MENU_ACTION_HIT;
break;
+#else
+
+ if(item[active_item].kind == MN_CONTROLFIELD)
+ {
+ if( event.jbutton.button == joystick_keymap.start_button )
+ {
+ Menu::pop_current();
+ return;
+ }
+
+ static int save[8]={-1,-1,-1,-1,-1,-1,-1,-1};
+ int itemid=get_active_item_id();
+ int inputkey;
+ switch ( itemid ) {
+ case 11 : inputkey=joystick_keymap.up_button;
+ break;
+ case 12 : inputkey=joystick_keymap.down_button;
+ break;
+ case 13 : inputkey=joystick_keymap.left_button;
+ break;
+ case 14 : inputkey=joystick_keymap.right_button;
+ break;
+ case 15 : inputkey=joystick_keymap.a_button;
+ break;
+ case 16 : inputkey=joystick_keymap.b_button;
+ break;
+ default : break;
+ }
+
+ *item[active_item].int_p = event.jbutton.button;
+
+ bool okay=true;
+
+ save[itemid-11]=event.jbutton.button;
+
+ int i;
+ for ( i=0;i<itemid-11;i++ ) {
+ if ( save[i] == event.jbutton.button ) okay=false;
+ }
+ if ( okay == true ) menuaction = MENU_ACTION_DOWN;
+ else menuaction = MENU_ACTION_NONE;
+
+ return;
+ }
+
+ if (event.jbutton.button == joystick_keymap.a_button)
+ menuaction = MENU_ACTION_HIT;
+ else if (event.jbutton.button == joystick_keymap.b_button)
+ menuaction = MENU_ACTION_HIT;
+ else if (event.jbutton.button == joystick_keymap.start_button)
+ menuaction = MENU_ACTION_HIT;
+ else if (event.jbutton.button == joystick_keymap.up_button)
+ menuaction = MENU_ACTION_UP;
+ else if (event.jbutton.button == joystick_keymap.down_button)
+ menuaction = MENU_ACTION_DOWN;
+ else if (event.jbutton.button == joystick_keymap.right_button)
+ menuaction = MENU_ACTION_RIGHT;
+ else if (event.jbutton.button == joystick_keymap.left_button)
+ menuaction = MENU_ACTION_LEFT;
+ else if (event.jbutton.button == joystick_keymap.volup_button)
+#ifdef GP2X
+ increaseSoundVolume();
+#else
+ sound_volume(2);
+#endif
+ else if (event.jbutton.button == joystick_keymap.voldown_button)
+#ifdef GP2X
+ decreaseSoundVolume();
+#else
+ sound_volume(1);
+#endif
+ break;
+
+#endif
+
+#ifndef GP2X
case SDL_MOUSEBUTTONDOWN:
x = event.motion.x;
y = event.motion.y;
@@ -847,6 +961,7 @@
break;
default:
break;
+#endif
}
}
diff -ur supertux-0.1.3/src/menu.h supertux-0.1.3-gp2x/src/menu.h
--- supertux-0.1.3/src/menu.h 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/menu.h 2006-05-04 23:48:30.000000000 +0300
@@ -236,6 +236,8 @@
extern Menu* options_menu;
extern Menu* options_keys_menu;
extern Menu* options_joystick_menu;
+extern Menu* options_joystick_axis_menu;
+extern Menu* options_joystick_button_menu;
extern Menu* highscore_menu;
extern Menu* load_game_menu;
extern Menu* save_game_menu;
diff -ur supertux-0.1.3/src/music_manager.cpp supertux-0.1.3-gp2x/src/music_manager.cpp
--- supertux-0.1.3/src/music_manager.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/music_manager.cpp 2006-04-22 13:16:32.000000000 +0300
@@ -59,7 +59,14 @@
return true;
}
+#ifndef GP2X
Mix_Music* song = Mix_LoadMUS(file.c_str());
+#else
+ char mfile[100];
+ snprintf(mfile,sizeof(mfile),"%s",file.c_str());
+ MODULE *song=Player_Load(mfile, 64, 0);
+#endif
+
if(song == 0)
return false;
@@ -84,6 +91,8 @@
void
MusicManager::play_music(const MusicRef& musicref, int loops)
{
+// printf("loop: %d, musicref: %d\n",loops,musicref.music);
+
if(!audio_device)
return;
@@ -97,7 +106,16 @@
current_music->refcount++;
if(music_enabled)
+#ifndef GP2X
Mix_PlayMusic(current_music->music, loops);
+#else
+ {
+ if ( loops == -1 ) current_music->music->wrap=1;
+ Player_Stop();
+ Player_Start(current_music->music);
+ Player_SetPosition(0);
+ }
+#endif
}
void
@@ -106,13 +124,17 @@
if(!audio_device)
return;
+#ifndef GP2X
Mix_HaltMusic();
+#else
+ Player_Stop();
+#endif
if(current_music) {
current_music->refcount--;
if(current_music->refcount == 0)
free_music(current_music);
- current_music = 0;
+ current_music = 0;
}
}
@@ -127,9 +149,17 @@
music_enabled = enable;
if(music_enabled == false) {
+#ifndef GP2X
Mix_HaltMusic();
+#else
+ Player_Stop();
+#endif
} else {
+#ifndef GP2X
Mix_PlayMusic(current_music->music, -1);
+#else
+ Player_Start(current_music->music);
+#endif
}
}
diff -ur supertux-0.1.3/src/music_manager.h supertux-0.1.3-gp2x/src/music_manager.h
--- supertux-0.1.3/src/music_manager.h 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/music_manager.h 2006-04-22 04:51:32.000000000 +0300
@@ -20,6 +20,10 @@
#ifndef HEADER_MUSIC_MANAGER_H
#define HEADER_MUSIC_MANAGER_H
+#ifdef GP2X
+#include "mikmod.h"
+#endif
+
#include <SDL_mixer.h>
#include <string>
#include <map>
@@ -51,7 +55,12 @@
~MusicResource();
MusicManager* manager;
+#ifndef GP2X
Mix_Music* music;
+#else
+ MODULE *music;
+#endif
+
int refcount;
};
diff -ur supertux-0.1.3/src/particlesystem.cpp supertux-0.1.3-gp2x/src/particlesystem.cpp
--- supertux-0.1.3/src/particlesystem.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/particlesystem.cpp 2006-04-12 22:20:41.000000000 +0300
@@ -28,8 +28,13 @@
ParticleSystem::ParticleSystem()
{
+#ifndef RES320X240
virtual_width = screen->w;
virtual_height = screen->h;
+#else
+ virtual_width = 640;
+ virtual_height = 480;
+#endif
}
ParticleSystem::~ParticleSystem()
@@ -57,13 +62,24 @@
float ymax = fmodf(y + particle->texture->h, virtual_height);
// particle on screen
+#ifndef RES320X240
if(x >= screen->w && xmax >= screen->w)
continue;
if(y >= screen->h && ymax >= screen->h)
continue;
-
+
if(x > screen->w) x -= virtual_width;
if(y > screen->h) y -= virtual_height;
+#else
+ if(x >= 640 && xmax >= 640)
+ continue;
+ if(y >= 480 && ymax >= 480)
+ continue;
+
+ if(x > 640) x -= virtual_width;
+ if(y > 480) y -= virtual_height;
+#endif
+
particle->texture->draw(x, y);
}
}
@@ -74,14 +90,21 @@
snowimages[1] = new Surface(datadir+"/images/shared/snow1.png", USE_ALPHA);
snowimages[2] = new Surface(datadir+"/images/shared/snow2.png", USE_ALPHA);
+#ifndef RES320X240
virtual_width = screen->w * 2;
-
+#else
+ virtual_width = 640 * 2;
+#endif
// create some random snowflakes
size_t snowflakecount = size_t(virtual_width/10.0);
for(size_t i=0; i<snowflakecount; ++i) {
SnowParticle* particle = new SnowParticle;
particle->x = rand() % int(virtual_width);
+#ifndef RES320X240
particle->y = rand() % screen->h;
+#else
+ particle->y = rand() % 480;
+#endif
particle->layer = i % 2;
int snowsize = rand() % 3;
particle->texture = snowimages[snowsize];
@@ -106,7 +129,11 @@
for(i = particles.begin(); i != particles.end(); ++i) {
SnowParticle* particle = (SnowParticle*) *i;
particle->y += particle->speed * elapsed_time;
+#ifndef RES320X240
if(particle->y > screen->h) {
+#else
+ if(particle->y > 480) {
+#endif
particle->y = fmodf(particle->y , virtual_height);
particle->x = rand() % int(virtual_width);
}
diff -ur supertux-0.1.3/src/player.cpp supertux-0.1.3-gp2x/src/player.cpp
--- supertux-0.1.3/src/player.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/player.cpp 2006-05-05 22:59:52.000000000 +0300
@@ -261,6 +261,7 @@
}
}
}
+// updateSound();
/* ---- DONE HANDLING TUX! --- */
@@ -337,7 +338,11 @@
if(on_ground() && ((vx < 0 && dirsign >0) || (vx>0 && dirsign<0))) {
if(fabs(vx)>SKID_XM && !skidding_timer.check()) {
skidding_timer.start(SKID_TIME);
+#ifndef GP2X
play_sound(sounds[SND_SKID], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_SKID);
+#endif
ax *= 2.5;
} else {
ax *= 2;
@@ -391,9 +396,17 @@
jumping = true;
can_jump = false;
if (size == SMALL)
+#ifndef GP2X
play_sound(sounds[SND_JUMP], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_JUMP);
+#endif
else
+#ifndef GP2X
play_sound(sounds[SND_BIGJUMP], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_BIGJUMP);
+#endif
}
}
// Let go of jump key
@@ -533,7 +546,11 @@
if(player_status.lives < MAX_LIVES)
++player_status.lives;
/*We want to hear the sound even, if MAX_LIVES is reached*/
+#ifndef GP2X
play_sound(sounds[SND_LIFEUP], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_LIFEUP);
+#endif
}
}
@@ -665,7 +682,11 @@
else
{
pbad_c->dying = DYING_FALLING;
+#ifndef GP2X
play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_FALL);
+#endif
World::current()->add_score(pbad_c->base.x - scroll_x,
pbad_c->base.y,
25 * player_status.score_multiplier);
@@ -696,7 +717,12 @@
void
Player::kill(HurtMode mode)
{
+#ifndef GP2X
play_sound(sounds[SND_HURT], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_HURT);
+ updateSound();
+#endif
physic.set_velocity_x(0);
@@ -734,7 +760,11 @@
bool Player::is_dead()
{
+#ifndef RES320X240
if(base.y > screen->h || base.x < scroll_x - AUTOSCROLL_DEAD_INTERVAL) // last condition can happen in auto-scrolling
+#else
+ if(base.y > 640 || base.x < scroll_x - AUTOSCROLL_DEAD_INTERVAL) // last condition can happen in auto-scrolling
+#endif
return true;
else
return false;
@@ -760,9 +790,20 @@
}
/* Keep in-bounds, vertically: */
+#ifndef RES320X240
if (base.y > screen->h)
+#else
+ if (base.y > 640)
+#endif
{
kill(KILL);
+#ifdef GP2X
+ float wait=SDL_GetTicks()+800;
+ while ( wait > SDL_GetTicks()) {
+ updateSound();
+ }
+#endif
+
}
if(base.x < scroll_x && (!back_scrolling || hor_autoscroll)) // can happen if back scrolling is disabled
@@ -777,7 +818,6 @@
if(base.x + base.width > scroll_x + screen->w)
base.x = scroll_x + screen->w - base.width;
}
-
}
// EOF //
diff -ur supertux-0.1.3/src/resources.cpp supertux-0.1.3-gp2x/src/resources.cpp
--- supertux-0.1.3/src/resources.cpp 2005-07-02 15:20:14.000000000 +0300
+++ supertux-0.1.3-gp2x/src/resources.cpp 2006-04-22 13:14:01.000000000 +0300
@@ -18,6 +18,7 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "globals.h"
+#include "sound.h"
#include "scene.h"
#include "player.h"
#include "badguy.h"
@@ -187,11 +188,13 @@
// This is also true with if (use_music)
Send a mail to me: neoneurone@users.sf.net, if you have another opinion. :)
*/
+#ifndef GP2X
for (i = 0; i < NUM_SOUNDS; i++)
sounds[i] = load_sound(datadir + soundfilenames[i]);
+#endif
/* Herring song */
- herring_song = music_manager->load_music(datadir + "/music/SALCON.MOD");
+ herring_song = music_manager->load_music(datadir + "/music/SALCON.MOD");
level_end_song = music_manager->load_music(datadir + "/music/leveldone.mod");
}
@@ -223,8 +226,10 @@
delete tux_life;
+#ifndef GP2X
for (i = 0; i < NUM_SOUNDS; i++)
free_chunk(sounds[i]);
+#endif
delete sprite_manager;
sprite_manager = 0;
diff -ur supertux-0.1.3/src/screen.cpp supertux-0.1.3-gp2x/src/screen.cpp
--- supertux-0.1.3/src/screen.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/screen.cpp 2006-04-14 18:18:47.000000000 +0300
@@ -81,7 +81,6 @@
else
{
#endif
-
for(float y = 0; y < 480; y += 2)
fillrect(0, (int)y, 640, 2,
(int)(((float)(top_clr.red-bot_clr.red)/(0-480)) * y + top_clr.red),
@@ -199,11 +198,23 @@
SDL_UnlockSurface(screen);
}
/* Update just the part of the display that we've changed */
+#ifndef RES320X240
SDL_UpdateRect(screen, x, y, 1, 1);
+#else
+ SDL_UpdateRect(screen, x/2, y/2, 1, 1);
+#endif
}
void drawline(int x1, int y1, int x2, int y2, int r, int g, int b, int a)
{
+
+#ifdef RES320X240
+ x1=x1/2;
+ x2=x2/2;
+ y1=y1/2;
+ y2=y2/2;
+#endif
+
#ifndef NOOPENGL
if(use_gl)
{
@@ -280,6 +291,13 @@
y += h;
h = -h;
}
+
+#ifdef RES320X240
+ x=x;
+ y=y/2;
+ w=w/2;
+ h=h/2;
+#endif
#ifndef NOOPENGL
if(use_gl)
@@ -367,6 +385,9 @@
void update_rect(SDL_Surface *scr, Sint32 x, Sint32 y, Sint32 w, Sint32 h)
{
if(!use_gl)
+#ifndef RES320X240
+ SDL_UpdateRect(scr, x, y, w, h);
+#else
SDL_UpdateRect(scr, x, y, w, h);
+#endif
}
-
diff -ur supertux-0.1.3/src/setup.cpp supertux-0.1.3-gp2x/src/setup.cpp
--- supertux-0.1.3/src/setup.cpp 2005-07-08 15:19:17.000000000 +0300
+++ supertux-0.1.3-gp2x/src/setup.cpp 2006-05-03 23:32:49.000000000 +0300
@@ -62,10 +62,19 @@
#define DATA_PREFIX "./data/"
#endif
-/* Screen proprities: */
+/* Screen properties: */
/* Don't use this to test for the actual screen sizes. Use screen->w/h instead! */
+#ifndef RES320X240
#define SCREEN_W 640
#define SCREEN_H 480
+#else
+#define SCREEN_W 320
+#define SCREEN_H 240
+#endif
+
+#ifdef GP2X
+#define DATA_PREFIX "data/"
+#endif
/* Local function prototypes: */
@@ -308,10 +317,14 @@
char str[1024];
/* Get home directory (from $HOME variable)... if we can't determine it,
use the current directory ("."): */
+#ifndef GP2X
if (getenv("HOME") != NULL)
home = getenv("HOME");
else
home = ".";
+#else
+ home = ".";
+#endif
st_dir = (char *) malloc(sizeof(char) * (strlen(home) +
strlen("/.supertux") + 1));
@@ -340,9 +353,10 @@
// User has not that a datadir, so we try some magic
if (datadir.empty())
{
-#ifndef WIN32
// Detect datadir
char exe_file[PATH_MAX];
+
+#ifndef WIN32
if (readlink("/proc/self/exe", exe_file, PATH_MAX) < 0)
{
puts("Couldn't read /proc/self/exe, using default path: " DATA_PREFIX);
@@ -358,7 +372,12 @@
datadir = exedir + "../share/supertux"; // SuperTux run from PATH
if (access(datadir.c_str(), F_OK) != 0)
{ // If all fails, fall back to compiled path
- datadir = DATA_PREFIX;
+ datadir = exedir + "./data"; // SuperTux run with data in same path as executable
+ if (access(datadir.c_str(), F_OK) != 0)
+ {
+ // If all fails, fall back to compiled path
+ datadir = DATA_PREFIX;
+ }
}
}
}
@@ -375,7 +394,8 @@
main_menu = new Menu();
options_menu = new Menu();
options_keys_menu = new Menu();
- options_joystick_menu = new Menu();
+ options_joystick_axis_menu = new Menu();
+ options_joystick_button_menu = new Menu();
load_game_menu = new Menu();
save_game_menu = new Menu();
game_menu = new Menu();
@@ -384,22 +404,27 @@
contrib_subset_menu = new Menu();
worldmap_menu = new Menu();
- main_menu->set_pos(screen->w/2, 335);
+ main_menu->set_pos(screen->w/2, (int)(335)+20);
main_menu->additem(MN_GOTO, "Start Game",0,load_game_menu, MNID_STARTGAME);
main_menu->additem(MN_GOTO, "Bonus Levels",0,contrib_menu, MNID_CONTRIB);
main_menu->additem(MN_GOTO, "Options",0,options_menu, MNID_OPTIONMENU);
+
+#ifndef GP2X
main_menu->additem(MN_ACTION,"Level Editor",0,0, MNID_LEVELEDITOR);
+#endif
main_menu->additem(MN_ACTION,"Credits",0,0, MNID_CREDITS);
main_menu->additem(MN_ACTION,"Quit",0,0, MNID_QUITMAINMENU);
options_menu->additem(MN_LABEL,"Options",0,0);
options_menu->additem(MN_HL,"",0,0);
+#ifndef GP2X
#ifndef NOOPENGL
options_menu->additem(MN_TOGGLE,"OpenGL",use_gl,0, MNID_OPENGL);
#else
options_menu->additem(MN_DEACTIVE,"OpenGL (not supported)",use_gl, 0, MNID_OPENGL);
#endif
options_menu->additem(MN_TOGGLE,"Fullscreen",use_fullscreen,0, MNID_FULLSCREEN);
+#endif
if(audio_device)
{
options_menu->additem(MN_TOGGLE,"Sound ", use_sound,0, MNID_SOUND);
@@ -411,10 +436,15 @@
options_menu->additem(MN_DEACTIVE,"Music ", false,0, MNID_MUSIC);
}
options_menu->additem(MN_TOGGLE,"Show FPS ",show_fps,0, MNID_SHOWFPS);
+#ifndef GP2X
options_menu->additem(MN_GOTO,"Keyboard Setup",0,options_keys_menu);
+#endif
//if(use_joystick)
- // options_menu->additem(MN_GOTO,"Joystick Setup",0,options_joystick_menu);
+#ifdef GP2X
+ options_menu->additem(MN_GOTO,"Joystick Move Setup",0,options_joystick_axis_menu);
+ options_menu->additem(MN_GOTO,"Joystick Action Setup",0,options_joystick_button_menu);
+#endif
options_menu->additem(MN_HL,"",0,0);
options_menu->additem(MN_BACK,"Back",0,0);
@@ -429,6 +459,7 @@
options_keys_menu->additem(MN_HL,"",0,0);
options_keys_menu->additem(MN_BACK,"Back",0,0);
+#ifndef GP2X
if(use_joystick)
{
options_joystick_menu->additem(MN_LABEL,"Joystick Setup",0,0);
@@ -442,6 +473,20 @@
options_joystick_menu->additem(MN_HL,"",0,0);
options_joystick_menu->additem(MN_BACK,"Back",0,0);
}
+#else
+ options_joystick_axis_menu->additem(MN_LABEL,"Joystick Move Setup",0,0);
+ options_joystick_axis_menu->additem(MN_CONTROLFIELD,"Up", 0,0, 11,&joystick_keymap.up_button);
+ options_joystick_axis_menu->additem(MN_CONTROLFIELD,"Down", 0,0, 12,&joystick_keymap.down_button);
+ options_joystick_axis_menu->additem(MN_CONTROLFIELD,"Left", 0,0, 13,&joystick_keymap.left_button);
+ options_joystick_axis_menu->additem(MN_CONTROLFIELD,"Right", 0,0, 14,&joystick_keymap.right_button);
+ options_joystick_axis_menu->additem(MN_BACK,"Back",0,0);
+
+ options_joystick_button_menu->additem(MN_LABEL,"Joystick Action Setup",0,0);
+ options_joystick_button_menu->additem(MN_CONTROLFIELD,"Jump", 0,0, 15,&joystick_keymap.a_button);
+ options_joystick_button_menu->additem(MN_CONTROLFIELD,"Shoot/Run", 0,0, 16,&joystick_keymap.b_button);
+ options_joystick_button_menu->additem(MN_BACK,"Back",0,0);
+#endif
+
load_game_menu->additem(MN_LABEL,"Start Game",0,0);
load_game_menu->additem(MN_HL,"",0,0);
@@ -576,9 +621,10 @@
srand(SDL_GetTicks());
+#ifndef GP2X
/* Set icon image: */
-
seticon();
+#endif
/* Unicode needed for input handling: */
@@ -586,13 +632,32 @@
/* Load global images: */
+#ifndef RES320X240
+ white_text = new Text(datadir + "/images/status/letters-white.png", TEXT_TEXT, 16,18);
+#else
+ white_text = new Text(datadir + "/images/status/letters-white-small.png", TEXT_TEXT, 8,9);
+ fadeout();
+#endif
+
+
+#ifndef RES320X240
black_text = new Text(datadir + "/images/status/letters-black.png", TEXT_TEXT, 16,18);
+#else
+ black_text = new Text(datadir + "/images/status/letters-black.png", TEXT_TEXT, 8,9);
+#endif
+#ifndef RES320X240
gold_text = new Text(datadir + "/images/status/letters-gold.png", TEXT_TEXT, 16,18);
+#else
+ gold_text = new Text(datadir + "/images/status/letters-gold.png", TEXT_TEXT, 8,9);
+#endif
silver_text = new Text(datadir + "/images/status/letters-silver.png", TEXT_TEXT, 16,18);
+#ifndef RES320X240
blue_text = new Text(datadir + "/images/status/letters-blue.png", TEXT_TEXT, 16,18);
+#else
+ blue_text = new Text(datadir + "/images/status/letters-blue.png", TEXT_TEXT, 8,9);
+#endif
red_text = new Text(datadir + "/images/status/letters-red.png", TEXT_TEXT, 16,18);
green_text = new Text(datadir + "/images/status/letters-green.png", TEXT_TEXT, 16,18);
- white_text = new Text(datadir + "/images/status/letters-white.png", TEXT_TEXT, 16,18);
white_small_text = new Text(datadir + "/images/status/letters-white-small.png", TEXT_TEXT, 8,9);
white_big_text = new Text(datadir + "/images/status/letters-white-big.png", TEXT_TEXT, 20,22);
yellow_nums = new Text(datadir + "/images/status/numbers.png", TEXT_NUM, 32,32);
@@ -665,14 +736,22 @@
Surface::reload_all();
/* Set window manager stuff: */
+#ifndef GP2X_VERSION
SDL_WM_SetCaption("SuperTux " VERSION, "SuperTux");
+#endif
}
void st_video_setup_sdl(void)
{
if (use_fullscreen)
{
+#ifndef GP2X
screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 0, SDL_FULLSCREEN ) ; /* | SDL_HWSURFACE); */
+#else
+// screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_HWSURFACE | SDL_DOUBLEBUF ) ; /* GP2X */
+ printf("screen width: %d, height: %d\n",SCREEN_W, SCREEN_H);
+ screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_SWSURFACE ) ; /* GP2X */
+#endif
if (screen == NULL)
{
fprintf(stderr,
@@ -685,14 +764,22 @@
}
else
{
+#ifndef GP2X
screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 0, SDL_HWSURFACE | SDL_DOUBLEBUF );
-
+#else
+// screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_HWSURFACE | SDL_DOUBLEBUF ) ; /* GP2X */
+ screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_SWSURFACE ) ; /* GP2X */
+#endif
if (screen == NULL)
{
fprintf(stderr,
"\nError: I could not set up video for 640x480 mode.\n"
"The Simple DirectMedia error that occured was:\n"
"%s\n\n", SDL_GetError());
+#ifdef GP2X_VERSION
+ chdir("/usr/gp2x");
+ execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
+#endif
exit(1);
}
}
@@ -790,6 +877,7 @@
use_joystick = false;
}
+#ifndef GP2X
else
{
if (SDL_JoystickNumAxes(js) < 2)
@@ -811,6 +899,7 @@
}
}
}
+#endif
}
}
}
@@ -844,12 +933,17 @@
}
}
-
+ audio_device = true;
+
/* Open sound silently regarless the value of "use_sound": */
if (audio_device)
{
+#ifndef GP2X
if (open_audio(44100, AUDIO_S16, 2, 2048) < 0)
+#else
+ if (open_audio(44100, AUDIO_S16, 1, 1024) < 0)
+#endif
{
/* only print out message if sound or music
was not disabled at command-line
@@ -878,6 +972,12 @@
close_audio();
SDL_Quit();
saveconfig();
+
+#ifdef GP2X
+ chdir("/usr/gp2x");
+ execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
+#endif
+
}
/* --- ABORT! --- */
@@ -893,6 +993,7 @@
void seticon(void)
{
+#ifndef GP2X
// int masklen;
// Uint8 * mask;
SDL_Surface * icon;
@@ -927,6 +1028,7 @@
// free(mask);
SDL_FreeSurface(icon);
+#endif
}
@@ -956,6 +1058,7 @@
}
else if (strcmp(argv[i], "--joymap") == 0)
{
+#ifndef GP2X
assert(i+1 < argc);
if (sscanf(argv[++i],
"%d:%d:%d:%d:%d",
@@ -976,6 +1079,7 @@
<< " B-Button: " << joystick_keymap.b_button << "\n"
<< " Start-Button: " << joystick_keymap.start_button << std::endl;
}
+#endif
}
else if (strcmp(argv[i], "--leveleditor") == 0)
{
diff -ur supertux-0.1.3/src/sound.cpp supertux-0.1.3-gp2x/src/sound.cpp
--- supertux-0.1.3/src/sound.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/sound.cpp 2006-04-22 02:07:57.000000000 +0300
@@ -22,6 +22,9 @@
#include "globals.h"
#include "sound.h"
#include "setup.h"
+#ifdef GP2X
+#include <string.h>
+#endif
/*global variable*/
bool use_sound = true; /* handle sound on/off menu and command-line option */
@@ -54,12 +57,21 @@
#include <SDL_mixer.h>
+#ifndef GP2X
Mix_Chunk * sounds[NUM_SOUNDS];
+#else
-/* --- OPEN THE AUDIO DEVICE --- */
+#include <mikmod.h>
+static MODULE *music=NULL;
+static SAMPLE *chunk[NUM_SOUNDS];
+static int chunkFlag[NUM_SOUNDS];
+#endif
+/* --- OPEN THE AUDIO DEVICE --- */
int open_audio (int frequency, Uint16 format, int channels, int chunksize)
{
+// close_audio();
+#ifndef GP2X
if (Mix_OpenAudio( frequency, format, channels, chunksize ) < 0)
return -1;
@@ -74,20 +86,93 @@
/* prepare the spanning effects */
Mix_SetPanning( SOUND_LEFT_SPEAKER, 230, 24 );
Mix_SetPanning( SOUND_RIGHT_SPEAKER, 24, 230 );
+#else
+ if (drv_oss.Name) // Valid OSS driver
+ {
+ if (drv_oss.CommandLine) // Valid Commandline
+ {
+ drv_oss.CommandLine("buffer=14,count=2");
+ }
+ MikMod_RegisterDriver(&drv_oss);
+ }
+ if (drv_alsa.Name) // Valid ALSA driver
+ {
+ if (drv_alsa.CommandLine) // Valid Commandline
+ {
+ drv_alsa.CommandLine("buffer=14");
+ }
+ MikMod_RegisterDriver(&drv_alsa);
+ }
+ MikMod_RegisterDriver(&drv_nos);
+
+ // register standard tracker
+ MikMod_RegisterAllLoaders();
+
+ // Note, the md_mode flags are already set by default
+ md_mode |= DMODE_SOFT_SNDFX | DMODE_SOFT_MUSIC;
+
+ if (MikMod_Init("")) // Command paramenters are ignored as all drivers are registered
+ {
+ printf("mikmod init war f<>rn arsch\n");
+ return 1;
+ }
+
+ load_sounds();
+
+ // get ready to play
+ MikMod_EnableOutput();
+ md_volume =64;
+ md_sndfxvolume = 64;
+ //md_musicvolume = md_sndfxvolume = 64;
+
+ use_sound = true;
+ audio_device=true;
+
+#endif
return 0;
-}
+}
/* --- CLOSE THE AUDIO DEVICE --- */
void close_audio( void )
{
+#ifndef GP2X
if (audio_device) {
Mix_UnregisterAllEffects( SOUND_LEFT_SPEAKER );
Mix_UnregisterAllEffects( SOUND_RIGHT_SPEAKER );
Mix_CloseAudio();
}
+#else
+ int i;
+ if (! audio_device) return;
+
+ MikMod_DisableOutput();
+ Player_Stop();
+ MikMod_Update();
+
+ if (music) {
+ Player_Free(music);
+ music = NULL;
+ }
+
+ for ( i=0 ; i<NUM_SOUNDS ; i++ ) {
+ if ( chunk[i] ) {
+ Sample_Free(chunk[i]);
+ }
+ }
+
+ MikMod_Update();
+ MikMod_Exit();
+#endif
+}
+
+#ifdef GP2X
+void updateSound ( void ) {
+ if (! audio_device) return;
+ MikMod_Update();
}
+#endif
/* --- LOAD A SOUND --- */
@@ -105,6 +190,30 @@
return(snd);
}
+#ifdef GP2X
+static void load_sounds() {
+ int i;
+ std::string name;
+ char file[100];
+
+ for ( i=0 ; i<NUM_SOUNDS ; i++ ) {
+ name = datadir + soundfilenames[i];
+ printf("loading: %s\n",name.c_str());
+ snprintf(file,sizeof(file),"%s",name.c_str());
+ if ( NULL == (chunk[i] = Sample_Load(file)) ) {
+ fprintf(stderr, "Couldn't load: %s\n", file);
+ use_sound = 0;
+ return;
+ }
+ chunkFlag[i] = 0;
+ }
+
+ // reserve voices for sound effects
+ MikMod_SetNumVoices(-1, 4);
+}
+#endif
+
+
/* --- PLAY A SOUND ON LEFT OR RIGHT OR CENTER SPEAKER --- */
void play_sound(Mix_Chunk * snd, enum Sound_Speaker whichSpeaker)
@@ -130,8 +239,45 @@
}
}
+
+#ifdef GP2X
+void play_chunk(int idx)
+{
+ int cid;
+// if (use_sound) return;
+ cid = Sample_Play (chunk[idx], 0, 0);
+ Voice_SetPanning(cid, PAN_CENTER);
+ Voice_SetVolume(cid, 1000);
+}
+#endif
+
+
void free_chunk(Mix_Chunk *chunk)
{
Mix_FreeChunk( chunk );
}
+void sound_volume ( int vol )
+{
+#ifndef GP2X
+ static int volume = 10;
+
+ if ( vol == 1 ) volume-=5;
+ else if ( vol == 2 ) volume+=5;
+ Mix_Volume(-1,volume);
+#endif
+}
+
+#ifdef GP2X
+void increaseSoundVolume(void)
+{
+ if (md_volume > (256 - 13)) md_volume = 256;
+ else md_volume += 13;
+}
+
+void decreaseSoundVolume(void)
+{
+ if (md_volume < 13) md_volume = 0;
+ else md_volume -= 13;
+}
+#endif
diff -ur supertux-0.1.3/src/sound.h supertux-0.1.3-gp2x/src/sound.h
--- supertux-0.1.3/src/sound.h 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/sound.h 2006-04-21 00:17:09.000000000 +0300
@@ -75,14 +75,27 @@
#include <SDL_mixer.h>
/* variables for stocking the sound and music */
+#ifndef GP2X
extern Mix_Chunk* sounds[NUM_SOUNDS];
+#endif
/* functions handling the sound and music */
int open_audio(int frequency, Uint16 format, int channels, int chunksize);
void close_audio( void );
+#ifndef GP2X
Mix_Chunk * load_sound(const std::string& file);
+#endif
void free_chunk(Mix_Chunk*chunk);
void play_sound(Mix_Chunk * snd, enum Sound_Speaker whichSpeaker);
+void sound_volume ( int vol );
#endif /*SUPERTUX_SOUND_H*/
+
+#ifdef GP2X
+void play_chunk(int idx);
+static void load_sounds();
+void updateSound ( void );
+void increaseSoundVolume(void);
+void decreaseSoundVolume(void);
+#endif
diff -ur supertux-0.1.3/src/special.cpp supertux-0.1.3-gp2x/src/special.cpp
--- supertux-0.1.3/src/special.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/special.cpp 2006-04-20 21:39:41.000000000 +0300
@@ -105,12 +105,21 @@
base.ym = base.ym + 0.5 * frame_ratio;
+#ifndef RES320X240
if (base.x < scroll_x ||
base.x > scroll_x + screen->w ||
base.y > screen->h ||
issolid(base.x + 4, base.y + 2) ||
issolid(base.x, base.y + 2) ||
life_count <= 0)
+#else
+ if (base.x < scroll_x ||
+ base.x > scroll_x + 640 ||
+ base.y > 480 ||
+ issolid(base.x + 4, base.y + 2) ||
+ issolid(base.x, base.y + 2) ||
+ life_count <= 0)
+#endif
{
remove_me();
}
@@ -120,8 +129,13 @@
void
Bullet::draw()
{
+#ifndef RES320X240
if (base.x >= scroll_x - base.width &&
base.x <= scroll_x + screen->w)
+#else
+ if (base.x >= scroll_x - base.width &&
+ base.x <= scroll_x + 640)
+#endif
{
img_bullet->draw(base.x - scroll_x, base.y);
}
@@ -140,7 +154,7 @@
{
kind = kind_;
dir = dir_;
-
+
base.width = 32;
base.height = 0;
base.x = x_;
@@ -197,7 +211,11 @@
remove_me();
return;
}
+#ifndef RES320X240
if(base.y > screen->h) {
+#else
+ if(base.y > 640) {
+#endif
remove_me();
return;
}
@@ -252,7 +270,12 @@
{
/* Rising up... */
+
+#ifndef RES320X240
dest.x = (int)(base.x - scroll_x);
+#else
+ dest.x = (int)(base.x - scroll_x)/2;
+#endif
dest.y = (int)(base.y + 32 - base.height);
dest.w = 32;
dest.h = (int)base.height;
@@ -297,7 +320,11 @@
if(kind != UPGRADE_GROWUP)
return;
+#ifndef GP2X
play_sound(sounds[SND_BUMP_UPGRADE], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_BUMP_UPGRADE);
+#endif
// do a little jump and change direction
physic.set_velocity(-physic.get_velocity_x(), 3);
@@ -329,18 +356,30 @@
if (kind == UPGRADE_GROWUP)
{
+#ifndef GP2X
play_sound(sounds[SND_EXCELLENT], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_EXCELLENT);
+#endif
pplayer->grow();
}
else if (kind == UPGRADE_ICEFLOWER)
{
+#ifndef GP2X
play_sound(sounds[SND_COFFEE], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_COFFEE);
+#endif
pplayer->grow();
pplayer->got_coffee = true;
}
else if (kind == UPGRADE_HERRING)
{
+#ifndef GP2X
play_sound(sounds[SND_HERRING], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_HERRING);
+#endif
pplayer->invincible_timer.start(TUX_INVINCIBLE_TIME);
World::current()->play_music(HERRING_MUSIC);
}
@@ -348,7 +387,11 @@
{
if(player_status.lives < MAX_LIVES) {
player_status.lives++;
+#ifndef GP2X
play_sound(sounds[SND_LIFEUP], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_LIFEUP);
+#endif
}
}
diff -ur supertux-0.1.3/src/text.cpp supertux-0.1.3-gp2x/src/text.cpp
--- supertux-0.1.3/src/text.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/text.cpp 2006-04-22 01:59:36.000000000 +0300
@@ -24,6 +24,7 @@
#include "defines.h"
#include "screen.h"
#include "text.h"
+#include "sound.h"
Text::Text(const std::string& file, int kind_, int w_, int h_)
{
@@ -79,6 +80,7 @@
void
Text::draw(const char* text, int x, int y, int shadowsize, int update)
{
+
if(text != NULL)
{
if(shadowsize != 0)
@@ -116,6 +118,9 @@
else if ( text[i] == '\n')
{
y += h + 2;
+#ifdef RES320X240
+ y+=6;
+#endif
j = 0;
}
}
@@ -129,6 +134,9 @@
else if ( text[i] == '\n')
{
y += h + 2;
+#ifdef RES320X240
+ y+=6;
+#endif
j = 0;
}
}
@@ -306,6 +314,24 @@
break;
}
break;
+
+#ifdef GP2X
+ case SDL_JOYBUTTONDOWN:
+ if ( event.jbutton.button == joystick_keymap.down_button ) {
+ speed += SPEED_INC;
+ }
+ if ( event.jbutton.button == joystick_keymap.up_button ) {
+ speed -= SPEED_INC;
+ }
+ if ( event.jbutton.button == joystick_keymap.b_button ) {
+ done = 1;
+ }
+ if ( event.jbutton.button == joystick_keymap.a_button ) {
+ scroll += SCROLL;
+ }
+ break;
+#endif
+
case SDL_QUIT:
done = 1;
break;
@@ -330,21 +356,36 @@
white_small_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
A_HMIDDLE, A_TOP, 1);
y += white_small_text->h+ITEMS_SPACE;
+#ifdef RES320X240
+ y += 6;
+#endif
break;
case ' ':
white_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
A_HMIDDLE, A_TOP, 1);
y += white_text->h+ITEMS_SPACE;
+#ifdef RES320X240
+ y += 6;
+#endif
break;
case '-':
- white_big_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
- A_HMIDDLE, A_TOP, 3);
+#ifdef RES320X240
+ white_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll), A_HMIDDLE, A_TOP, 3);
+#else
+ white_big_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll), A_HMIDDLE, A_TOP, 3);
+#endif
y += white_big_text->h+ITEMS_SPACE;
+#ifdef RES320X240
+ y += 6;
+#endif
break;
default:
blue_text->drawf(names.item[i], 0, screen->h+y-int(scroll),
A_HMIDDLE, A_TOP, 1);
y += blue_text->h+ITEMS_SPACE;
+#ifdef RES320X240
+ y += 6;
+#endif
break;
}
}
@@ -360,7 +401,13 @@
if(scroll < 0)
scroll = 0;
- SDL_Delay(10);
+#ifndef GP2X
+ SDL_Delay(10);
+#else
+ SDL_Delay(2);
+ updateSound();
+#endif
+
}
string_list_free(&names);
diff -ur supertux-0.1.3/src/texture.cpp supertux-0.1.3-gp2x/src/texture.cpp
--- supertux-0.1.3/src/texture.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/texture.cpp 2006-04-10 14:29:03.000000000 +0300
@@ -211,7 +211,8 @@
{
if (impl)
{
- if (impl->draw(x, y, alpha, update) == -2)
+// if (impl->draw(x, y, alpha, update) == -2)
+ if (impl->draw(x/2, y/2, alpha, update) == -2)
reload();
}
}
@@ -231,7 +232,8 @@
{
if (impl)
{
- if (impl->draw_part(sx, sy, x, y, w, h, alpha, update) == -2)
+// if (impl->draw_part(sx, sy, x, y, w, h, alpha, update) == -2)
+ if (impl->draw_part(sx, sy, x, y/2, w, h, alpha, update) == -2)
reload();
}
}
@@ -241,7 +243,8 @@
{
if (impl)
{
- if (impl->draw_stretched(x, y, w, h, alpha, update) == -2)
+// if (impl->draw_stretched(x, y, w, h, alpha, update) == -2)
+ if (impl->draw_stretched(x/2, y/2, w, h, alpha, update) == -2)
reload();
}
}
diff -ur supertux-0.1.3/src/title.cpp supertux-0.1.3-gp2x/src/title.cpp
--- supertux-0.1.3/src/title.cpp 2005-07-08 15:19:17.000000000 +0300
+++ supertux-0.1.3-gp2x/src/title.cpp 2006-04-22 01:29:08.000000000 +0300
@@ -51,6 +51,7 @@
#include "tile.h"
#include "resources.h"
#include "worldmap.h"
+#include "sound.h"
static Surface* bkg_title;
static Surface* logo;
@@ -80,6 +81,10 @@
void generate_contrib_menu()
{
+#ifdef RES320X240
+ fadeout();
+#endif
+
string_list_type level_subsets = dsubdirs("/levels", "info");
free_contrib_menu();
@@ -208,7 +213,7 @@
}
// Wrap around at the end of the level back to the beginnig
- if(plevel->width * 32 - 320 < tux->base.x)
+ if((plevel->width * 32) - 320 < tux->base.x)
{
tux->level_begin();
scroll_x = 0;
@@ -226,7 +231,6 @@
{
walking = false;
}
-
world->draw();
}
@@ -301,13 +305,26 @@
if (Menu::current() == main_menu)
logo->draw( 160, 30);
-
+
+#ifndef RES320X240
white_small_text->draw(" SuperTux " VERSION "\n"
"Copyright (c) 2003 SuperTux Devel Team\n"
"This game comes with ABSOLUTELY NO WARRANTY. This is free software, and you\n"
"are welcome to redistribute it under certain conditions; see the file COPYING\n"
"for details.\n",
0, 420, 0);
+#else
+ white_small_text->draw(" SuperTux " VERSION "\n"
+ "Copyright (c) 2003 SuperTux Devel Team\n"
+ "This game comes with ABSOLUTELY NO \n"
+ "WARRANTY. This is free software, and\n"
+ "you are welcome to redistribute it\n"
+ "under certain conditions; see the file\n"
+ "COPYING for details.\n",
+ 0, 360, 0);
+#endif
+
+ //updateSound();
/* Don't draw menu, if quit is true */
Menu* menu = Menu::current();
@@ -337,10 +354,10 @@
break;
case MNID_CREDITS:
music_manager = new MusicManager();
- menu_song = music_manager->load_music(datadir + "/music/credits.ogg");
+ menu_song = music_manager->load_music(datadir + "/music/credits.mod");
music_manager->halt_music();
music_manager->play_music(menu_song,0);
- display_text_file("CREDITS", bkg_title, SCROLL_SPEED_CREDITS);
+ display_text_file("CREDITS", bkg_title, SCROLL_SPEED_CREDITS);
music_manager->halt_music();
menu_song = music_manager->load_music(datadir + "/music/theme.mod");
music_manager->play_music(menu_song);
diff -ur supertux-0.1.3/src/world.cpp supertux-0.1.3-gp2x/src/world.cpp
--- supertux-0.1.3/src/world.cpp 2005-06-22 00:16:07.000000000 +0300
+++ supertux-0.1.3-gp2x/src/world.cpp 2006-05-05 23:16:47.000000000 +0300
@@ -206,6 +206,7 @@
}
}
+
/* Draw interactive tiles: */
for (y = 0; y < 15; ++y)
{
@@ -255,6 +256,8 @@
{
(*p)->draw(scroll_x, 0, 1);
}
+
+ //updateSound();
}
void
@@ -312,7 +315,12 @@
// the space that it takes for the screen to start scrolling, regarding
// screen bounds (in pixels)
+#ifndef RES320X240
#define X_SPACE (400-16)
+#else
+#define X_SPACE (80-16)
+#endif
+
// the time it takes to move the camera (in ms)
#define CHANGE_DIR_SCROLL_SPEED 2000
@@ -388,8 +396,13 @@
// this code prevent the screen to scroll before the start or after the level's end
if(scroll_x < 0)
scroll_x = 0;
+#ifndef RES320X240
if(scroll_x > level->width * 32 - screen->w)
scroll_x = level->width * 32 - screen->w;
+#else
+ if(scroll_x > level->width * 32 - 640)
+ scroll_x = level->width * 32 - 640;
+#endif
}
void
@@ -481,6 +494,10 @@
void
World::add_score(float x, float y, int s)
{
+#ifdef RES320X240
+ x=x/2;
+#endif
+
player_status.score += s;
FloatingScore* new_floating_score = new FloatingScore();
@@ -547,8 +564,11 @@
Bullet new_bullet;
new_bullet.init(x,y,xm,dir);
bullets.push_back(new_bullet);
-
+#ifndef GP2X
play_sound(sounds[SND_SHOOT], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_SHOOT);
+#endif
}
void
@@ -608,8 +628,11 @@
counting_distros = false;
plevel->change(x, y, TM_IA, tile->next_tile);
}
-
+#ifndef GP2X
play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_DISTRO);
+#endif
player_status.score = player_status.score + SCORE_DISTRO;
player_status.distros++;
}
@@ -622,9 +645,13 @@
add_broken_brick(tile,
((int)(x + 1) / 32) * 32,
(int)(y / 32) * 32);
-
+
/* Get some score: */
+#ifndef GP2X
play_sound(sounds[SND_BRICK], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_BRICK);
+#endif
player_status.score = player_status.score + SCORE_BRICK;
}
}
@@ -652,7 +679,11 @@
{
case 1: // Box with a distro!
add_bouncy_distro(posx, posy);
+#ifndef GP2X
play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_DISTRO);
+#endif
player_status.score = player_status.score + SCORE_DISTRO;
player_status.distros++;
break;
@@ -662,7 +693,11 @@
add_upgrade(posx, posy, col_side, UPGRADE_GROWUP);
else /* Tux is big, add an iceflower: */
add_upgrade(posx, posy, col_side, UPGRADE_ICEFLOWER);
+#ifndef GP2X
play_sound(sounds[SND_UPGRADE], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_UPGRADE);
+#endif
break;
case 3: // Add a golden herring
@@ -688,7 +723,11 @@
if (tile && tile->distro)
{
level->change(x, y, TM_IA, tile->next_tile);
+#ifndef GP2X
play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_DISTRO);
+#endif
if (bounciness == BOUNCE)
{
diff -ur supertux-0.1.3/src/worldmap.cpp supertux-0.1.3-gp2x/src/worldmap.cpp
--- supertux-0.1.3/src/worldmap.cpp 2005-07-08 15:19:17.000000000 +0300
+++ supertux-0.1.3-gp2x/src/worldmap.cpp 2006-05-05 22:54:04.000000000 +0300
@@ -376,11 +376,11 @@
{
tile_manager = new TileManager();
- width = 20;
- height = 15;
+ width = (int)(20);
+ height = (int)(15);
- start_x = 4;
- start_y = 5;
+ start_x = int(4);
+ start_y = int(5);
passive_message_timer.init(true);
@@ -395,7 +395,7 @@
enter_level = false;
name = "<no file>";
- music = "SALCON.MOD";
+ music = "salcon.mod";
}
WorldMap::~WorldMap()
@@ -589,7 +589,8 @@
break;
}
break;
-
+
+#ifndef GP2X
case SDL_JOYAXISMOTION:
if (event.jaxis.axis == joystick_keymap.x_axis)
{
@@ -617,13 +618,29 @@
if (event.jhat.value == SDL_HAT_RIGHT)
input_direction = D_EAST;
break;
-
+#endif
case SDL_JOYBUTTONDOWN:
+#ifndef GP2X
if (event.jbutton.button == joystick_keymap.b_button)
enter_level = true;
else if (event.jbutton.button == joystick_keymap.start_button)
on_escape_press();
break;
+#else
+ if (event.jbutton.button == joystick_keymap.a_button)
+ enter_level = true;
+ else if (event.jbutton.button == joystick_keymap.start_button)
+ on_escape_press();
+ else if (event.jbutton.button == joystick_keymap.up_button)
+ input_direction = D_NORTH;
+ else if (event.jbutton.button == joystick_keymap.down_button)
+ input_direction = D_SOUTH;
+ else if (event.jbutton.button == joystick_keymap.right_button)
+ input_direction = D_EAST;
+ else if (event.jbutton.button == joystick_keymap.left_button)
+ input_direction = D_WEST;
+ break;
+#endif
default:
break;
@@ -769,13 +786,13 @@
{
MusicRef theme =
music_manager->load_music(datadir + "/music/theme.mod");
- MusicRef credits = music_manager->load_music(datadir + "/music/credits.ogg");
+ MusicRef credits = music_manager->load_music(datadir + "/music/credits.xm");
music_manager->play_music(theme);
// Display final credits and go back to the main menu
display_text_file(level->extro_filename,
"/images/background/extro.jpg", SCROLL_SPEED_MESSAGE);
music_manager->play_music(credits,0);
- display_text_file("CREDITS",
+ display_text_file("CREDITS",
"/images/background/oiltux.jpg", SCROLL_SPEED_CREDITS);
music_manager->play_music(theme);
quit = true;
@@ -812,7 +829,12 @@
if (level->x == tux->get_tile_pos().x &&
level->y == tux->get_tile_pos().y)
{
+#ifndef GP2X
play_sound(sounds[SND_TELEPORT], SOUND_CENTER_SPEAKER);
+#else
+ play_chunk(SND_TELEPORT);
+ updateSound();
+#endif
tux->back_direction = D_NONE;
tux->set_tile_pos(Point(level->teleport_dest_x, level->teleport_dest_y));
SDL_Delay(1000);
@@ -914,26 +936,39 @@
void
WorldMap::draw_status()
{
+ int xdiv;
+
+#ifdef RES320X240
+ xdiv=2;
+#else
+ xdiv=1;
+#endif
+
char str[80];
sprintf(str, "%d", player_status.score);
white_text->draw("SCORE", 0, 0);
- gold_text->draw(str, 96, 0);
+ gold_text->draw(str, (int)(96)/xdiv, 0);
sprintf(str, "%d", player_status.distros);
- white_text->draw_align("COINS", 320-64, 0, A_LEFT, A_TOP);
- gold_text->draw_align(str, 320+64, 0, A_RIGHT, A_TOP);
+ white_text->draw_align("COINS", (int)(320-64)/xdiv, 0, A_LEFT, A_TOP);
+ gold_text->draw_align(str, (int)(320+64)/xdiv, 0, A_RIGHT, A_TOP);
- white_text->draw("LIVES", 480, 0);
+ white_text->draw("LIVES", (int)(480)/xdiv, 0);
if (player_status.lives >= 5)
{
sprintf(str, "%dx", player_status.lives);
- gold_text->draw_align(str, 617, 0, A_RIGHT, A_TOP);
- tux_life->draw(565+(18*3), 0);
+#ifdef RES320X240
+ gold_text->draw_align(str, (int)(617)/xdiv-5, 0, A_RIGHT, A_TOP);
+ tux_life->draw((int)((565-12+(18*3))), 0);
+#else
+ gold_text->draw_align(str, (int)(617), 0, A_RIGHT, A_TOP);
+ tux_life->draw((int)((565+(18*3))), 0);
+#endif
}
else
{
for(int i= 0; i < player_status.lives; ++i)
- tux_life->draw(565+(18*i),0);
+ tux_life->draw((565+(18/xdiv*i)),0);
}
if (!tux->is_moving())
@@ -945,7 +980,11 @@
{
if(!i->name.empty())
{
+#ifndef RES320X240
white_text->draw_align(i->title.c_str(), screen->w/2, screen->h, A_HMIDDLE, A_BOTTOM);
+#else
+ white_text->draw_align(i->title.c_str(), screen->w/2, 470, A_HMIDDLE, A_BOTTOM);
+#endif
}
else if (i->teleport_dest_x != -1) {
if(!i->teleport_message.empty())
@@ -955,7 +994,7 @@
/* Display a message in the map, if any as been selected */
if(!i->display_map_message.empty() && !i->passive_message)
gold_text->draw_align(i->display_map_message.c_str(),
- screen->w/2, screen->h - 30,A_HMIDDLE, A_BOTTOM);
+ screen->w/2, screen->h - (int)(30),A_HMIDDLE, A_BOTTOM);
break;
}
}
@@ -964,7 +1003,7 @@
/* Display a passive message in the map, if needed */
if(passive_message_timer.check())
gold_text->draw_align(passive_message.c_str(),
- screen->w/2, screen->h - 30,A_HMIDDLE, A_BOTTOM);
+ screen->w/2, screen->h - (int)(30),A_HMIDDLE, A_BOTTOM);
}
void
@@ -997,6 +1036,7 @@
Point tux_pos = tux->get_pos();
if (1)
{
+#ifndef GP2X
offset.x = -tux_pos.x + screen->w/2;
offset.y = -tux_pos.y + screen->h/2;
@@ -1005,6 +1045,16 @@
if (offset.x < screen->w - width*32) offset.x = screen->w - width*32;
if (offset.y < screen->h - height*32) offset.y = screen->h - height*32;
+#else
+ offset.x = -tux_pos.x + 640/2;
+ offset.y = -tux_pos.y + 480/2;
+
+ if (offset.x > 0) offset.x = 0;
+ if (offset.y > 0) offset.y = 0;
+
+ if (offset.x < 640 - width*32) offset.x = 640 - width*32;
+ if (offset.y < 480 - height*32) offset.y = 480 - height*32;
+#endif
}
draw(offset);