Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
openjazz
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
openjazz
Commits
58b2311d
Commit
58b2311d
authored
Jun 24, 2010
by
alistert
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Separated menu into three subclasses.
parent
fcd9bfa7
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
566 additions
and
525 deletions
+566
-525
Makefile
Makefile
+1
-1
Makefile.arm
Makefile.arm
+1
-1
Makefile.debian
Makefile.debian
+1
-1
bonus.cpp
src/bonus/bonus.cpp
+3
-2
clientgame.cpp
src/game/clientgame.cpp
+1
-1
level.cpp
src/level/level.cpp
+4
-3
levelload.cpp
src/level/levelload.cpp
+1
-1
main.cpp
src/main.cpp
+6
-6
gamemenu.cpp
src/menu/gamemenu.cpp
+131
-27
mainmenu.cpp
src/menu/mainmenu.cpp
+121
-44
menu.cpp
src/menu/menu.cpp
+217
-158
menu.h
src/menu/menu.h
+73
-36
menuutil.cpp
src/menu/menuutil.cpp
+0
-238
setupmenu.cpp
src/menu/setupmenu.cpp
+6
-6
No files found.
Makefile
View file @
58b2311d
...
...
@@ -11,7 +11,7 @@ objects = src/bonus/bonus.o \
src/level/bullet.o src/level/demolevel.o src/level/level.o
\
src/level/levelframe.o src/level/levelload.o
\
src/menu/gamemenu.o src/menu/mainmenu.o src/menu/menu.o
\
src/menu/
menuutil.o src/menu/
setupmenu.o
\
src/menu/setupmenu.o
\
src/planet/planet.o
\
src/player/bird.o src/player/player.o src/player/playerframe.o
\
src/scene/scene.o src/scene/sceneload.o
\
...
...
Makefile.arm
View file @
58b2311d
...
...
@@ -35,7 +35,7 @@ OBJS = src/bonus/bonus.o \
src/level/bullet.o src/level/demolevel.o src/level/level.o
\
src/level/levelframe.o src/level/levelload.o
\
src/menu/gamemenu.o src/menu/mainmenu.o src/menu/menu.o
\
src/menu/
menuutil.o src/menu/
setupmenu.o
\
src/menu/setupmenu.o
\
src/planet/planet.o
\
src/player/bird.o src/player/player.o src/player/playerframe.o
\
src/scene/scene.o src/scene/sceneload.o
\
...
...
Makefile.debian
View file @
58b2311d
...
...
@@ -11,7 +11,7 @@ objects = src/bonus/bonus.o \
src/level/bullet.o src/level/demolevel.o src/level/level.o
\
src/level/levelframe.o src/level/levelload.o
\
src/menu/gamemenu.o src/menu/mainmenu.o src/menu/menu.o
\
src/menu/
menuutil.o src/menu/
setupmenu.o
\
src/menu/setupmenu.o
\
src/planet/planet.o
\
src/player/bird.o src/player/player.o src/player/playerframe.o
\
src/scene/scene.o src/scene/sceneload.o
\
...
...
src/bonus/bonus.cpp
View file @
58b2311d
...
...
@@ -644,7 +644,8 @@ void Bonus::draw () {
int
Bonus
::
play
()
{
SetupMenu
setupMenu
;
const
char
*
options
[
3
]
=
{
"continue game"
,
"setup options"
,
"quit game"
};
bool
pmenu
,
pmessage
;
int
stats
,
option
;
...
...
@@ -706,7 +707,7 @@ int Bonus::play () {
if
(
!
gameMode
)
{
if
(
menu
->
setup
()
==
E_QUIT
)
return
E_QUIT
;
if
(
setupMenu
.
setup
()
==
E_QUIT
)
return
E_QUIT
;
// Restore level palette
video
.
setPalette
(
palette
);
...
...
src/game/clientgame.cpp
View file @
58b2311d
...
...
@@ -248,7 +248,7 @@ int ClientGame::setLevel (char* fileName) {
int
ret
;
video
.
setPalette
(
menu
->
palettes
[
1
]
);
video
.
setPalette
(
menu
Palette
);
// Wait for level data to start arriving
while
(
!
file
&&
levelFile
)
{
...
...
src/level/level.cpp
View file @
58b2311d
...
...
@@ -516,8 +516,9 @@ void Level::receive (unsigned char* buffer) {
int
Level
::
play
()
{
const
char
*
options
[
5
]
=
{
"continue game"
,
"save game"
,
"load game"
,
"setup options"
,
"quit game"
};
{
"continue game"
,
"save game"
,
"load game"
,
"setup options"
,
"quit game"
};
char
*
string
;
SetupMenu
setupMenu
;
bool
pmessage
,
pmenu
;
int
stats
,
option
;
unsigned
int
returnTime
;
...
...
@@ -591,8 +592,8 @@ int Level::play () {
case
3
:
// Setup
if
(
!
gameMode
)
{
if
(
menu
->
setup
()
==
E_QUIT
)
return
E_QUIT
;
if
(
setupMenu
.
setup
()
==
E_QUIT
)
return
E_QUIT
;
// Restore level palette
video
.
setPalette
(
palette
);
...
...
src/level/levelload.cpp
View file @
58b2311d
...
...
@@ -399,7 +399,7 @@ int Level::load (char *fileName, unsigned char diff, bool checkpoint) {
}
video
.
setPalette
(
menu
->
palettes
[
1
]);
video
.
setPalette
(
menu
Palette
);
clearScreen
(
0
);
...
...
src/main.cpp
View file @
58b2311d
...
...
@@ -675,10 +675,10 @@ int loop (LoopType type, PaletteEffect* paletteEffects) {
int
main
(
int
argc
,
char
*
argv
[])
{
MainMenu
*
mainMenu
=
NULL
;
Scene
*
scene
=
NULL
;
// Initialise SDL
if
(
SDL_Init
(
SDL_INIT_VIDEO
|
SDL_INIT_AUDIO
|
SDL_INIT_JOYSTICK
|
SDL_INIT_TIMER
)
<
0
)
{
...
...
@@ -730,7 +730,7 @@ int main(int argc, char *argv[]) {
// Load the menu
try
{
m
enu
=
new
Menu
();
m
ainMenu
=
new
Main
Menu
();
}
catch
(
int
e
)
{
...
...
@@ -741,7 +741,7 @@ int main(int argc, char *argv[]) {
}
// Run the main menu
if
(
menu
->
main
()
==
E_NONE
)
{
if
(
m
ainM
enu
->
main
()
==
E_NONE
)
{
// Show the ending cutscene
...
...
@@ -751,7 +751,7 @@ int main(int argc, char *argv[]) {
}
catch
(
int
e
)
{
delete
menu
;
delete
m
ainM
enu
;
freeMain
();
return
e
;
...
...
@@ -765,7 +765,7 @@ int main(int argc, char *argv[]) {
}
delete
menu
;
delete
m
ainM
enu
;
freeMain
();
...
...
src/menu/gamemenu.cpp
View file @
58b2311d
...
...
@@ -38,14 +38,84 @@
#include "util.h"
int
Menu
::
newGameDifficulty
(
GameModeType
mode
,
int
levelNum
,
int
worldNum
)
{
GameMenu
::
GameMenu
(
File
*
file
)
{
unsigned
char
pixel
;
int
count
,
col
;
// Load the difficulty graphics
file
->
loadPalette
(
menuPalette
);
difficultyScreen
=
file
->
loadSurface
(
SW
,
SH
);
SDL_SetColorKey
(
difficultyScreen
,
SDL_SRCCOLORKEY
,
0
);
// Default difficulty setting
difficulty
=
1
;
// Load the episode pictures (max. 10 episodes + bonus level)
// Load their palette
file
->
loadPalette
(
palette
);
// Generate a greyscale mapping
for
(
count
=
0
;
count
<
256
;
count
++
)
{
col
=
((
palette
[
count
].
r
>>
1
)
+
(
palette
[
count
].
g
<<
1
)
+
(
palette
[
count
].
b
>>
1
))
>>
3
;
if
(
col
>
79
)
col
=
79
;
greyPalette
[
count
].
r
=
greyPalette
[
count
].
g
=
greyPalette
[
count
].
b
=
col
;
}
episodes
=
11
;
for
(
count
=
0
;
count
<
11
;
count
++
)
{
episodeScreens
[
count
]
=
file
->
loadSurface
(
134
,
110
);
if
(
file
->
tell
()
>=
file
->
getSize
())
{
episodes
=
++
count
;
for
(;
count
<
11
;
count
++
)
{
pixel
=
0
;
episodeScreens
[
count
]
=
createSurface
(
&
pixel
,
1
,
1
);
}
}
}
return
;
}
GameMenu
::~
GameMenu
()
{
int
count
;
for
(
count
=
0
;
count
<
11
;
count
++
)
SDL_FreeSurface
(
episodeScreens
[
count
]);
SDL_FreeSurface
(
difficultyScreen
);
return
;
}
int
GameMenu
::
newGameDifficulty
(
GameModeType
mode
,
int
levelNum
,
int
worldNum
)
{
const
char
*
options
[
4
]
=
{
"easy"
,
"medium"
,
"hard"
,
"turbo"
};
char
*
firstLevel
;
SDL_Rect
src
,
dst
;
int
count
;
video
.
setPalette
(
palettes
[
1
]);
video
.
setPalette
(
menuPalette
);
while
(
true
)
{
...
...
@@ -74,7 +144,7 @@ int Menu::newGameDifficulty (GameModeType mode, int levelNum, int worldNum) {
src
.
h
=
100
;
dst
.
x
=
(
canvasW
>>
1
)
-
40
;
dst
.
y
=
(
canvasH
>>
1
)
-
50
;
SDL_BlitSurface
(
screens
[
2
]
,
&
src
,
canvas
,
&
dst
);
SDL_BlitSurface
(
difficultyScreen
,
&
src
,
canvas
,
&
dst
);
if
(
controls
.
release
(
C_UP
))
difficulty
=
(
difficulty
+
3
)
%
4
;
...
...
@@ -155,13 +225,13 @@ int Menu::newGameDifficulty (GameModeType mode, int levelNum, int worldNum) {
}
int
Menu
::
newGameLevel
(
GameModeType
mode
)
{
int
Game
Menu
::
newGameLevel
(
GameModeType
mode
)
{
int
option
,
worldNum
,
levelNum
;
worldNum
=
levelNum
=
option
=
0
;
video
.
setPalette
(
palettes
[
1
]);
video
.
setPalette
(
menuPalette
);
while
(
true
)
{
...
...
@@ -211,7 +281,7 @@ int Menu::newGameLevel (GameModeType mode) {
if
(
newGameDifficulty
(
mode
,
levelNum
,
worldNum
)
==
E_QUIT
)
return
E_QUIT
;
video
.
setPalette
(
palettes
[
1
]);
video
.
setPalette
(
menuPalette
);
}
...
...
@@ -222,7 +292,7 @@ int Menu::newGameLevel (GameModeType mode) {
}
int
Menu
::
newGameEpisode
(
GameModeType
mode
)
{
int
Game
Menu
::
newGameEpisode
(
GameModeType
mode
)
{
const
char
*
options
[
12
]
=
{
"episode 1"
,
"episode 2"
,
"episode 3"
,
"episode 4"
,
"episode 5"
,
"episode 6"
,
"episode a"
,
"episode b"
,
...
...
@@ -232,7 +302,7 @@ int Menu::newGameEpisode (GameModeType mode) {
SDL_Rect
dst
;
int
episode
,
count
,
worldNum
;
video
.
setPalette
(
palette
s
[
2
]
);
video
.
setPalette
(
palette
);
for
(
count
=
0
;
count
<
10
;
count
++
)
{
...
...
@@ -244,9 +314,8 @@ int Menu::newGameEpisode (GameModeType mode) {
exists
[
count
]
=
fileExists
(
check
);
delete
[]
check
;
if
(
exists
[
count
])
video
.
restoreSurfacePalette
(
screens
[
count
+
3
]);
else
SDL_SetPalette
(
screens
[
count
+
3
],
SDL_LOGPAL
,
palettes
[
3
],
0
,
256
);
if
(
exists
[
count
])
video
.
restoreSurfacePalette
(
episodeScreens
[
count
]);
else
SDL_SetPalette
(
episodeScreens
[
count
],
SDL_LOGPAL
,
greyPalette
,
0
,
256
);
}
...
...
@@ -272,17 +341,16 @@ int Menu::newGameEpisode (GameModeType mode) {
clearScreen
(
0
);
dst
.
x
=
canvasW
-
144
;
dst
.
y
=
(
canvasH
-
110
)
>>
1
;
if
((
episode
<
episodes
-
1
)
||
(
episode
<
6
))
{
dst
.
x
=
canvasW
-
150
;
dst
.
y
=
(
canvasH
-
110
)
>>
1
;
SDL_BlitSurface
(
screens
[
episode
+
3
],
NULL
,
canvas
,
&
dst
);
SDL_BlitSurface
(
episodeScreens
[
episode
],
NULL
,
canvas
,
&
dst
);
}
else
if
((
episode
==
10
)
&&
(
episodes
>
6
))
{
dst
.
x
=
canvasW
-
160
;
dst
.
y
=
(
canvasH
-
110
)
>>
1
;
SDL_BlitSurface
(
screens
[
episodes
+
2
],
NULL
,
canvas
,
&
dst
);
SDL_BlitSurface
(
episodeScreens
[
episodes
-
1
],
NULL
,
canvas
,
&
dst
);
}
...
...
@@ -333,7 +401,7 @@ int Menu::newGameEpisode (GameModeType mode) {
}
video
.
setPalette
(
palette
s
[
2
]
);
video
.
setPalette
(
palette
);
}
...
...
@@ -346,7 +414,7 @@ int Menu::newGameEpisode (GameModeType mode) {
}
int
Menu
::
joinGame
()
{
int
Game
Menu
::
joinGame
()
{
int
ret
;
...
...
@@ -441,12 +509,48 @@ int Menu::joinGame () {
}
int
Menu
::
loadGame
()
{
// TODO: Actual loading of saved games
return
newGameLevel
(
M_SINGLE
);
int
GameMenu
::
newGame
()
{
#if (defined USE_SOCKETS) || (defined USE_SDL_NET)
const
char
*
newGameOptions
[
6
]
=
{
"new single player game"
,
"new co-op game"
,
"new battle"
,
"new team battle"
,
"new race"
,
"join game"
};
int
ret
;
int
option
;
option
=
0
;
while
(
true
)
{
ret
=
generic
(
newGameOptions
,
6
,
option
);
if
(
ret
==
E_QUIT
)
return
E_QUIT
;
if
(
ret
<
0
)
return
E_NONE
;
if
(
option
==
5
)
{
if
(
joinGame
()
==
E_QUIT
)
return
E_QUIT
;
}
else
{
if
(
newGameEpisode
(
GameModeType
(
option
))
==
E_QUIT
)
return
E_QUIT
;
}
}
return
E_NONE
;
#else
return
newGameEpisode
(
M_SINGLE
);
#endif
}
int
GameMenu
::
loadGame
()
{
// TODO: Actual loading of saved games
return
newGameLevel
(
M_SINGLE
);
}
src/menu/mainmenu.cpp
View file @
58b2311d
...
...
@@ -38,26 +38,124 @@
#include "scene/scene.h"
#include "loop.h"
int
Menu
::
main
()
{
#if (defined USE_SOCKETS) || (defined USE_SDL_NET)
const
char
*
newGameOptions
[
6
]
=
{
"new single player game"
,
"new co-op game"
,
"new battle"
,
"new team battle"
,
"new race"
,
"join game"
};
int
ret
;
#endif
Scene
*
scene
;
#include <time.h>
MainMenu
::
MainMenu
()
{
File
*
file
;
time_t
currentTime
;
// Load the OpenJazz logo
try
{
file
=
new
File
(
LOGO_FILE
,
false
);
}
catch
(
int
e
)
{
throw
e
;
}
logo
=
file
->
loadSurface
(
64
,
40
);
delete
file
;
// Load the menu graphics
try
{
file
=
new
File
(
F_MENU
,
false
);
}
catch
(
int
e
)
{
SDL_FreeSurface
(
logo
);
throw
e
;
}
if
(
file
->
getSize
()
>
200000
)
{
time
(
&
currentTime
);
// In December, load the Christmas menu graphics
if
(
localtime
(
&
currentTime
)
->
tm_mon
==
11
)
{
file
->
skipRLE
();
file
->
skipRLE
();
file
->
skipRLE
();
file
->
loadPalette
(
palette
);
background
=
file
->
loadSurface
(
SW
,
SH
);
highlight
=
file
->
loadSurface
(
SW
,
SH
);
}
else
{
file
->
loadPalette
(
palette
);
background
=
file
->
loadSurface
(
SW
,
SH
);
highlight
=
file
->
loadSurface
(
SW
,
SH
);
file
->
skipRLE
();
file
->
skipRLE
();
file
->
skipRLE
();
}
}
else
{
file
->
loadPalette
(
palette
);
background
=
file
->
loadSurface
(
SW
,
SH
);
highlight
=
file
->
loadSurface
(
SW
,
SH
);
}
SDL_SetColorKey
(
background
,
SDL_SRCCOLORKEY
,
0
);
SDL_SetColorKey
(
highlight
,
SDL_SRCCOLORKEY
,
0
);
gameMenu
=
new
GameMenu
(
file
);
delete
file
;
return
;
}
MainMenu
::~
MainMenu
()
{
SDL_FreeSurface
(
background
);
SDL_FreeSurface
(
highlight
);
SDL_FreeSurface
(
logo
);
delete
gameMenu
;
return
;
}
int
MainMenu
::
main
()
{
Scene
*
scene
;
SetupMenu
setupMenu
;
SDL_Rect
src
,
dst
;
int
option
,
suboption
;
int
option
;
unsigned
int
idleTime
;
option
=
suboption
=
0
;
option
=
0
;
video
.
setPalette
(
palette
s
[
0
]
);
video
.
setPalette
(
palette
);
playMusic
(
"menusng.psm"
);
// Demo timeout
idleTime
=
globalTicks
+
T_DEMO
;
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
...
...
@@ -72,38 +170,17 @@ int Menu::main () {
playSound
(
S_ORB
);
switch
(
option
)
{
switch
(
option
)
{
case
0
:
// New game
#if (defined USE_SOCKETS) || (defined USE_SDL_NET)
while
(
true
)
{
ret
=
generic
(
newGameOptions
,
6
,
suboption
);
if
(
ret
==
E_QUIT
)
return
E_QUIT
;
if
(
ret
<
0
)
break
;
if
(
suboption
==
5
)
{
if
(
joinGame
()
==
E_QUIT
)
return
E_QUIT
;
}
else
{
if
(
newGameEpisode
(
GameModeType
(
suboption
))
==
E_QUIT
)
return
E_QUIT
;
}
}
#else
if
(
newGameEpisode
(
suboption
)
==
E_QUIT
)
return
E_QUIT
;
#endif
if
(
gameMenu
->
newGame
()
==
E_QUIT
)
return
E_QUIT
;
break
;
case
1
:
// Load game
if
(
loadGame
()
==
E_QUIT
)
return
E_QUIT
;
if
(
gameMenu
->
loadGame
()
==
E_QUIT
)
return
E_QUIT
;
break
;
...
...
@@ -135,8 +212,8 @@ int Menu::main () {
case
3
:
// Setup options
if
(
setup
()
==
E_QUIT
)
return
E_QUIT
;
if
(
setup
Menu
.
setup
()
==
E_QUIT
)
return
E_QUIT
;
break
;
case
4
:
// Order info
...
...
@@ -172,7 +249,7 @@ int Menu::main () {
}
// Restore the main menu palette
video
.
setPalette
(
palette
s
[
0
]
);
video
.
setPalette
(
palette
);
// New demo timeout
idleTime
=
globalTicks
+
T_DEMO
;
...
...
@@ -223,7 +300,7 @@ int Menu::main () {
playMusic
(
"menusng.psm"
);
// Restore the main menu palette
video
.
setPalette
(
palette
s
[
0
]
);
video
.
setPalette
(
palette
);
idleTime
=
globalTicks
+
T_DEMO
;
...
...
@@ -235,11 +312,11 @@ int Menu::main () {
dst
.
x
=
(
canvasW
>>
2
)
-
72
;
dst
.
y
=
canvasH
-
(
canvasH
>>
2
);
SDL_BlitSurface
(
screens
[
14
]
,
NULL
,
canvas
,
&
dst
);
SDL_BlitSurface
(
logo
,
NULL
,
canvas
,
&
dst
);
dst
.
x
=
(
canvasW
-
SW
)
>>
1
;
dst
.
y
=
(
canvasH
-
SH
)
>>
1
;
SDL_BlitSurface
(
screens
[
0
]
,
NULL
,
canvas
,
&
dst
);
SDL_BlitSurface
(
background
,
NULL
,
canvas
,
&
dst
);
switch
(
option
)
{
...
...
@@ -301,7 +378,7 @@ int Menu::main () {
dst
.
x
=
((
canvasW
-
SW
)
>>
1
)
+
src
.
x
;
dst
.
y
=
((
canvasH
-
SH
)
>>
1
)
+
src
.
y
;
SDL_BlitSurface
(
screens
[
1
]
,
&
src
,
canvas
,
&
dst
);
SDL_BlitSurface
(
highlight
,
&
src
,
canvas
,
&
dst
);
}
...
...
src/menu/menu.cpp
View file @
58b2311d
...
...
@@ -9,7 +9,8 @@
* 18th July 2009: Created menugame.cpp from parts of menu.cpp
* 18th July 2009: Created menuutil.cpp from parts of menu.cpp
* 18th July 2009: Created menusetup.cpp from parts of menu.cpp
* 19th July 2009: Created menumain.cpp from parts of menu.cpp
* 19th July 2009: Created menumain.cpp from parts of menu.cpp
* 23rd June 2010: Merged menuutil.cpp into menu.cpp
*
* Part of the OpenJazz project
*
...
...
@@ -26,160 +27,218 @@
*/
/*
* Deals with the loading and freeing of the menu data.
*
*/
#include "menu.h"
#include "game/game.h"
#include "io/file.h"
#include "io/gfx/video.h"
#include "io/sound.h"
#include <time.h>
Menu
::
Menu
()
{
File
*
file
;
unsigned
char
pixel
;
time_t
currentTime
;
int
count
,
col
;
// Load the OpenJazz logo
try
{
file
=
new
File
(
LOGO_FILE
,
false
);
}
catch
(
int
e
)
{
throw
e
;
}
screens
[
14
]
=
file
->
loadSurface
(
64
,
40
);
delete
file
;
// Load the menu graphics
try
{
file
=
new
File
(
F_MENU
,
false
);
}
catch
(
int
e
)
{
SDL_FreeSurface
(
screens
[
14
]);
throw
e
;
}
file
->
seek
(
0
,
true
);
// Load the main menu graphics
file
->
loadPalette
(
palettes
[
0
]);
screens
[
0
]
=
file
->
loadSurface
(
SW
,
SH
);
screens
[
1
]
=
file
->
loadSurface
(
SW
,
SH
);
if
(
file
->
getSize
()
>
200000
)
{
time
(
&
currentTime
);
// In December, load the Christmas menu graphics
if
(
localtime
(
&
currentTime
)
->
tm_mon
==
11
)
{
SDL_FreeSurface
(
screens
[
0
]);
SDL_FreeSurface
(
screens
[
1
]);
file
->
loadPalette
(
palettes
[
0
]);
screens
[
0
]
=
file
->
loadSurface
(
SW
,
SH
);
screens
[
1
]
=
file
->
loadSurface
(
SW
,
SH
);
}
else
{
file
->
skipRLE
();
file
->
skipRLE
();
file
->
skipRLE
();
}
}
SDL_SetColorKey
(
screens
[
0
],
SDL_SRCCOLORKEY
,
0
);
SDL_SetColorKey
(
screens
[
1
],
SDL_SRCCOLORKEY
,
0
);
// Load the difficulty graphics
file
->
loadPalette
(
palettes
[
1
]);
screens
[
2
]
=
file
->
loadSurface
(
SW
,
SH
);
SDL_SetColorKey
(
screens
[
2
],
SDL_SRCCOLORKEY
,
0
);
// Default difficulty setting
difficulty
=
1
;
// Load the episode pictures (max. 10 episodes + bonus level)
// Load their palette
file
->
loadPalette
(
palettes
[
2
]);
// Generate a greyscale mapping
for
(
count
=
0
;
count
<
256
;
count
++
)
{
col
=
((
palettes
[
2
][
count
].
r
>>
1
)
+
(
palettes
[
2
][
count
].
g
<<
1
)
+
(
palettes
[
2
][
count
].
b
>>
1
))
>>
3
;
if
(
col
>
79
)
col
=
79
;
palettes
[
3
][
count
].
r
=
palettes
[
3
][
count
].
g
=
palettes
[
3
][
count
].
b
=
col
;
}
episodes
=
11
;
for
(
count
=
0
;
count
<
11
;
count
++
)
{
screens
[
count
+
3
]
=
file
->
loadSurface
(
134
,
110
);
if
(
file
->
tell
()
>=
file
->
getSize
())
{
episodes
=
++
count
;
for
(;
count
<
11
;
count
++
)
{
pixel
=
0
;
screens
[
count
+
3
]
=
createSurface
(
&
pixel
,
1
,
1
);
}
}
}
delete
file
;
playMusic
(
"menusng.psm"
);
return
;
}
Menu
::~
Menu
()
{
int
count
;
for
(
count
=
0
;
count
<
15
;
count
++
)
SDL_FreeSurface
(
screens
[
count
]);
return
;
}
* Provides various generic menus.
*
*/
#include "menu.h"
#include "io/controls.h"
#include "io/gfx/font.h"
#include "io/gfx/video.h"
#include "io/sound.h"
#include "loop.h"
#include "util.h"
#include <string.h>
int
Menu
::
message
(
const
char
*
text
)
{
// Display a message to the user
video
.
setPalette
(
menuPalette
);
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
if
(
controls
.
release
(
C_ENTER
)
||
controls
.
release
(
C_ESCAPE
))
return
E_NONE
;
SDL_Delay
(
T_FRAME
);
clearScreen
(
15
);
// Draw the message
fontmn2
->
showString
(
text
,
canvasW
>>
2
,
(
canvasH
>>
1
)
-
16
);
}
return
E_NONE
;
}
int
Menu
::
generic
(
const
char
**
optionNames
,
int
options
,
int
&
chosen
)
{
// Let the user select from a menu of the given options
int
count
;
video
.
setPalette
(
menuPalette
);
if
(
chosen
>=
options
)
chosen
=
0
;
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
if
(
controls
.
release
(
C_ESCAPE
))
return
E_UNUSED
;
SDL_Delay
(
T_FRAME
);
clearScreen
(
0
);
for
(
count
=
0
;
count
<
options
;
count
++
)
{
if
(
count
==
chosen
)
fontmn2
->
mapPalette
(
240
,
8
,
114
,
16
);
fontmn2
->
showString
(
optionNames
[
count
],
canvasW
>>
2
,
(
canvasH
>>
1
)
+
(
count
<<
4
)
-
(
options
<<
3
));
if
(
count
==
chosen
)
fontmn2
->
restorePalette
();
}
if
(
controls
.
release
(
C_UP
))
chosen
=
(
chosen
+
options
-
1
)
%
options
;
if
(
controls
.
release
(
C_DOWN
))
chosen
=
(
chosen
+
1
)
%
options
;
if
(
controls
.
release
(
C_ENTER
))
{
playSound
(
S_ORB
);
return
E_NONE
;
}
}
return
E_NONE
;
}
int
Menu
::
textInput
(
const
char
*
request
,
char
*&
text
)
{
// Let the user to edit a text string
char
*
input
;
int
count
,
terminate
,
character
,
x
;
unsigned
int
cursor
;
// Create input string
input
=
createEditableString
(
text
);
cursor
=
strlen
(
input
);
while
(
true
)
{
character
=
loop
(
TYPING_LOOP
);
if
(
character
==
E_QUIT
)
{
delete
[]
input
;
return
E_QUIT
;
}
// Ensure there is space for another character
if
(
cursor
<
STRING_LENGTH
)
{
terminate
=
(
input
[
cursor
]
==
0
);
// If the character is valid, add it to the input string
if
((
character
==
' '
)
||
(
character
==
'.'
)
||
((
character
>=
'0'
)
&&
(
character
<=
'9'
))
||
((
character
>=
'a'
)
&&
(
character
<=
'z'
)))
{
input
[
cursor
]
=
character
;
cursor
++
;
if
(
terminate
)
input
[
cursor
]
=
0
;
}
else
if
((
character
>=
'A'
)
&&
(
character
<=
'Z'
))
{
input
[
cursor
]
=
character
|
32
;
cursor
++
;
if
(
terminate
)
input
[
cursor
]
=
0
;
}
}
if
((
character
==
SDLK_DELETE
)
&&
(
cursor
<
strlen
(
input
)))
{
for
(
count
=
cursor
;
count
<
STRING_LENGTH
;
count
++
)
input
[
count
]
=
input
[
count
+
1
];
}
if
((
character
==
SDLK_BACKSPACE
)
&&
(
cursor
>
0
))
{
for
(
count
=
cursor
-
1
;
count
<
STRING_LENGTH
;
count
++
)
input
[
count
]
=
input
[
count
+
1
];
cursor
--
;
}
if
(
controls
.
release
(
C_ESCAPE
))
{
delete
[]
input
;
return
E_UNUSED
;
}
SDL_Delay
(
T_FRAME
);
clearScreen
(
15
);
// Draw the prompt
fontmn2
->
showString
(
request
,
canvasW
>>
2
,
(
canvasH
>>
1
)
-
16
);
// Draw the section of the text before the cursor
fontmn2
->
mapPalette
(
240
,
8
,
114
,
16
);
terminate
=
input
[
cursor
];
input
[
cursor
]
=
0
;
x
=
fontmn2
->
showString
(
input
,
(
canvasW
>>
2
)
+
8
,
canvasH
>>
1
);
// Draw the cursor
drawRect
(
x
,
(
canvasH
>>
1
)
+
10
,
8
,
2
,
79
);
// Draw the section of text after the cursor
input
[
cursor
]
=
terminate
;
fontmn2
->
showString
(
input
+
cursor
,
x
,
canvasH
>>
1
);
fontmn2
->
restorePalette
();
if
(
controls
.
release
(
C_LEFT
)
&&
(
cursor
>
0
))
cursor
--
;
if
(
controls
.
release
(
C_RIGHT
)
&&
(
cursor
<
strlen
(
input
)))
cursor
++
;
if
(
controls
.
release
(
C_ENTER
))
{
playSound
(
S_ORB
);
// Replace the original string with the input string
delete
[]
text
;
text
=
input
;
return
E_NONE
;
}
}
delete
[]
input
;
return
E_UNUSED
;
}
src/menu/menu.h
View file @
58b2311d
...
...
@@ -25,7 +25,8 @@
#include "game/gamemode.h"
#include "io/file.h"
#include "OpenJazz.h"
#include <SDL/SDL.h>
...
...
@@ -36,46 +37,82 @@
// Demo timeout
#define T_DEMO 20000
// Class
// Classes
class
Menu
{
private
:
SDL_Surface
*
screens
[
15
];
int
episodes
;
unsigned
char
difficulty
;
int
message
(
const
char
*
text
);
int
generic
(
const
char
**
optionNames
,
int
options
,
int
&
chosen
);
int
textInput
(
const
char
*
request
,
char
*&
text
);
int
newGameDifficulty
(
GameModeType
mode
,
int
levelNum
,
int
worldNum
);
int
newGameLevel
(
GameModeType
mode
);
int
newGameEpisode
(
GameModeType
mode
);
int
joinGame
();
int
loadGame
();
int
setupKeyboard
();
int
setupJoystick
();
int
setupResolution
();
#ifdef SCALE
int
setupScaling
();
#endif
int
setupSound
();
public
:
SDL_Color
palettes
[
4
][
256
];
Menu
();
~
Menu
();
int
setup
();
int
main
();
protected
:
int
message
(
const
char
*
text
);
int
generic
(
const
char
**
optionNames
,
int
options
,
int
&
chosen
);
int
textInput
(
const
char
*
request
,
char
*&
text
);
};
// Variable
EXTERN
Menu
*
menu
;
class
GameMenu
:
public
Menu
{
private
:
SDL_Surface
*
episodeScreens
[
11
];
SDL_Surface
*
difficultyScreen
;
SDL_Color
palette
[
256
];
SDL_Color
greyPalette
[
256
];
int
episodes
;
unsigned
char
difficulty
;
int
newGameDifficulty
(
GameModeType
mode
,
int
levelNum
,
int
worldNum
);
int
newGameLevel
(
GameModeType
mode
);
int
newGameEpisode
(
GameModeType
mode
);
int
joinGame
();
public
:
GameMenu
(
File
*
file
);
~
GameMenu
();
int
newGame
();
int
loadGame
();
};
class
SetupMenu
:
public
Menu
{
private
:
int
setupKeyboard
();
int
setupJoystick
();
int
setupResolution
();
#ifdef SCALE
int
setupScaling
();
#endif
int
setupSound
();
public
:
int
setup
();
};
class
MainMenu
:
public
Menu
{
private
:
SDL_Surface
*
background
;
SDL_Surface
*
highlight
;
SDL_Surface
*
logo
;
GameMenu
*
gameMenu
;
SDL_Color
palette
[
256
];
public
:
MainMenu
();
~
MainMenu
();
int
main
();
};
// Variable
EXTERN
SDL_Color
menuPalette
[
256
];
#endif
src/menu/menuutil.cpp
deleted
100644 → 0
View file @
fcd9bfa7
/*
*
* menuutil.cpp
*
* 18th July 2009: Created menuutil.cpp from parts of menu.cpp
*
* Part of the OpenJazz project
*
*
* Copyright (c) 2005-2010 Alister Thomson
*
* OpenJazz is distributed under the terms of
* the GNU General Public License, version 2.0
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
/*
* Provides various generic menus.
*
*/
#include "menu.h"
#include "io/controls.h"
#include "io/gfx/font.h"
#include "io/gfx/video.h"
#include "io/sound.h"
#include "loop.h"
#include "util.h"
#include <string.h>
int
Menu
::
message
(
const
char
*
text
)
{
// Display a message to the user
video
.
setPalette
(
palettes
[
1
]);
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
if
(
controls
.
release
(
C_ENTER
)
||
controls
.
release
(
C_ESCAPE
))
return
E_NONE
;
SDL_Delay
(
T_FRAME
);
clearScreen
(
15
);
// Draw the message
fontmn2
->
showString
(
text
,
canvasW
>>
2
,
(
canvasH
>>
1
)
-
16
);
}
return
E_NONE
;
}
int
Menu
::
generic
(
const
char
**
optionNames
,
int
options
,
int
&
chosen
)
{
// Let the user select from a menu of the given options
int
count
;
video
.
setPalette
(
palettes
[
1
]);
if
(
chosen
>=
options
)
chosen
=
0
;
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
if
(
controls
.
release
(
C_ESCAPE
))
return
E_UNUSED
;
SDL_Delay
(
T_FRAME
);
clearScreen
(
0
);
for
(
count
=
0
;
count
<
options
;
count
++
)
{
if
(
count
==
chosen
)
fontmn2
->
mapPalette
(
240
,
8
,
114
,
16
);
fontmn2
->
showString
(
optionNames
[
count
],
canvasW
>>
2
,
(
canvasH
>>
1
)
+
(
count
<<
4
)
-
(
options
<<
3
));
if
(
count
==
chosen
)
fontmn2
->
restorePalette
();
}
if
(
controls
.
release
(
C_UP
))
chosen
=
(
chosen
+
options
-
1
)
%
options
;
if
(
controls
.
release
(
C_DOWN
))
chosen
=
(
chosen
+
1
)
%
options
;
if
(
controls
.
release
(
C_ENTER
))
{
playSound
(
S_ORB
);
return
E_NONE
;
}
}
return
E_NONE
;
}
int
Menu
::
textInput
(
const
char
*
request
,
char
*&
text
)
{
// Let the user to edit a text string
char
*
input
;
int
count
,
terminate
,
character
,
x
;
unsigned
int
cursor
;
// Create input string
input
=
createEditableString
(
text
);
cursor
=
strlen
(
input
);
while
(
true
)
{
character
=
loop
(
TYPING_LOOP
);
if
(
character
==
E_QUIT
)
{
delete
[]
input
;
return
E_QUIT
;
}
// Ensure there is space for another character
if
(
cursor
<
STRING_LENGTH
)
{
terminate
=
(
input
[
cursor
]
==
0
);
// If the character is valid, add it to the input string
if
((
character
==
' '
)
||
(
character
==
'.'
)
||
((
character
>=
'0'
)
&&
(
character
<=
'9'
))
||
((
character
>=
'a'
)
&&
(
character
<=
'z'
)))
{
input
[
cursor
]
=
character
;
cursor
++
;
if
(
terminate
)
input
[
cursor
]
=
0
;
}
else
if
((
character
>=
'A'
)
&&
(
character
<=
'Z'
))
{
input
[
cursor
]
=
character
|
32
;
cursor
++
;
if
(
terminate
)
input
[
cursor
]
=
0
;
}
}
if
((
character
==
SDLK_DELETE
)
&&
(
cursor
<
strlen
(
input
)))
{
for
(
count
=
cursor
;
count
<
STRING_LENGTH
;
count
++
)
input
[
count
]
=
input
[
count
+
1
];
}
if
((
character
==
SDLK_BACKSPACE
)
&&
(
cursor
>
0
))
{
for
(
count
=
cursor
-
1
;
count
<
STRING_LENGTH
;
count
++
)
input
[
count
]
=
input
[
count
+
1
];
cursor
--
;
}
if
(
controls
.
release
(
C_ESCAPE
))
{
delete
[]
input
;
return
E_UNUSED
;
}
SDL_Delay
(
T_FRAME
);
clearScreen
(
15
);
// Draw the prompt
fontmn2
->
showString
(
request
,
canvasW
>>
2
,
(
canvasH
>>
1
)
-
16
);
// Draw the section of the text before the cursor
fontmn2
->
mapPalette
(
240
,
8
,
114
,
16
);
terminate
=
input
[
cursor
];
input
[
cursor
]
=
0
;
x
=
fontmn2
->
showString
(
input
,
(
canvasW
>>
2
)
+
8
,
canvasH
>>
1
);
// Draw the cursor
drawRect
(
x
,
(
canvasH
>>
1
)
+
10
,
8
,
2
,
79
);
// Draw the section of text after the cursor
input
[
cursor
]
=
terminate
;
fontmn2
->
showString
(
input
+
cursor
,
x
,
canvasH
>>
1
);
fontmn2
->
restorePalette
();
if
(
controls
.
release
(
C_LEFT
)
&&
(
cursor
>
0
))
cursor
--
;
if
(
controls
.
release
(
C_RIGHT
)
&&
(
cursor
<
strlen
(
input
)))
cursor
++
;
if
(
controls
.
release
(
C_ENTER
))
{
playSound
(
S_ORB
);
// Replace the original string with the input string
delete
[]
text
;
text
=
input
;
return
E_NONE
;
}
}
delete
[]
input
;
return
E_UNUSED
;
}
src/menu/setupmenu.cpp
View file @
58b2311d
...
...
@@ -36,7 +36,7 @@
#include "loop.h"
int
Menu
::
setupKeyboard
()
{
int
Setup
Menu
::
setupKeyboard
()
{
const
char
*
options
[
PCONTROLS
]
=
{
"up"
,
"down"
,
"left"
,
"right"
,
"jump"
,
"swim up"
,
"fire"
,
"weapon"
};
int
progress
,
count
,
character
;
...
...
@@ -115,7 +115,7 @@ int Menu::setupKeyboard () {
}
int
Menu
::
setupJoystick
()
{
int
Setup
Menu
::
setupJoystick
()
{
const
char
*
options
[
PCONTROLS
]
=
{
"up"
,
"down"
,
"left"
,
"right"
,
"jump"
,
"swim up"
,
"fire"
,
"weapon"
};
int
progress
,
count
,
control
;
...
...
@@ -254,7 +254,7 @@ int Menu::setupJoystick () {
}
int
Menu
::
setupResolution
()
{
int
Setup
Menu
::
setupResolution
()
{
int
widthOptions
[]
=
{
320
,
400
,
512
,
640
,
720
,
768
,
800
,
960
,
1024
,
1152
,
1280
,
1440
,
1600
,
1920
};
...
...
@@ -405,7 +405,7 @@ int Menu::setupResolution () {
#ifdef SCALE
int
Menu
::
setupScaling
()
{
int
Setup
Menu
::
setupScaling
()
{
int
scaleFactor
;
...
...
@@ -466,7 +466,7 @@ int Menu::setupScaling () {
#endif
int
Menu
::
setupSound
()
{
int
Setup
Menu
::
setupSound
()
{
while
(
true
)
{
...
...
@@ -501,7 +501,7 @@ int Menu::setupSound () {
}
int
Menu
::
setup
()
{
int
Setup
Menu
::
setup
()
{
const
char
*
setupOptions
[
6
]
=
{
"character"
,
"keyboard"
,
"joystick"
,
"resolution"
,
"scaling"
,
"sound"
};
const
char
*
setupCharacterOptions
[
5
]
=
{
"name"
,
"fur"
,
"bandana"
,
"gun"
,
"wristband"
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment