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
c0b880a1
Commit
c0b880a1
authored
Mar 30, 2010
by
alistert
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Made a start on bonus levels.
parent
411eaa5a
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
764 additions
and
215 deletions
+764
-215
Makefile
Makefile
+1
-1
Makefile.arm
Makefile.arm
+1
-1
Makefile.debian
Makefile.debian
+1
-1
OpenJazz.h
src/OpenJazz.h
+4
-0
baselevel.cpp
src/baselevel.cpp
+151
-0
baselevel.h
src/baselevel.h
+70
-0
bonus.cpp
src/bonus/bonus.cpp
+368
-15
bonus.h
src/bonus/bonus.h
+22
-5
game.cpp
src/game/game.cpp
+90
-29
game.h
src/game/game.h
+2
-0
demolevel.cpp
src/level/demolevel.cpp
+2
-1
level.cpp
src/level/level.cpp
+17
-84
level.h
src/level/level.h
+12
-30
levelframe.cpp
src/level/levelframe.cpp
+3
-31
main.cpp
src/main.cpp
+2
-2
gamemenu.cpp
src/menu/gamemenu.cpp
+18
-15
No files found.
Makefile
View file @
c0b880a1
...
...
@@ -14,7 +14,7 @@ objects = src/bonus/bonus.o \
src/menu/menuutil.o src/menu/setupmenu.o
\
src/player/bird.o src/player/player.o src/player/playerframe.o
\
src/scene/scene.o src/scene/sceneload.o
\
src/main.o src/movable.o src/planet.o src/util.o
\
src/
baselevel.o src/
main.o src/movable.o src/planet.o src/util.o
\
src/io/gfx/scale2x/getopt.o src/io/gfx/scale2x/pixel.o
\
src/io/gfx/scale2x/scale2x.o
src/io/gfx/scale2x/scale3x.o
\
src/io/gfx/scale2x/scalebit.o
src/io/gfx/scale2x/simple2x.o
...
...
Makefile.arm
View file @
c0b880a1
...
...
@@ -38,7 +38,7 @@ OBJS = src/bonus/bonus.o \
src/menu/menuutil.o src/menu/setupmenu.o
\
src/player/bird.o src/player/player.o src/player/playerframe.o
\
src/scene/scene.o src/scene/sceneload.o
\
src/main.o src/movable.o src/planet.o src/util.o
\
src/
baselevel.o src/
main.o src/movable.o src/planet.o src/util.o
\
src/io/gfx/scale2x/getopt.o src/io/gfx/scale2x/pixel.o
\
src/io/gfx/scale2x/scale2x.o src/io/gfx/scale2x/scale3x.o
\
src/io/gfx/scale2x/scalebit.o src/io/gfx/scale2x/simple2x.o
...
...
Makefile.debian
View file @
c0b880a1
...
...
@@ -14,7 +14,7 @@ objects = src/bonus/bonus.o \
src/menu/menuutil.o src/menu/setupmenu.o
\
src/player/bird.o src/player/player.o src/player/playerframe.o
\
src/scene/scene.o src/scene/sceneload.o
\
src/main.o src/movable.o src/planet.o src/util.o
\
src/
baselevel.o src/
main.o src/movable.o src/planet.o src/util.o
\
src/io/gfx/scale2x/getopt.o src/io/gfx/scale2x/pixel.o
\
src/io/gfx/scale2x/scale2x.o src/io/gfx/scale2x/scale3x.o
\
src/io/gfx/scale2x/scalebit.o src/io/gfx/scale2x/simple2x.o
...
...
src/OpenJazz.h
View file @
c0b880a1
...
...
@@ -74,6 +74,7 @@
#define F_MENU "MENU.000"
#define F_PANEL "PANEL.000"
#define F_SOUNDS "SOUNDS.000"
#define F_BONUS "BONUS.000"
#define F_STARTUP_0SC "STARTUP.0SC"
#define F_END_0SC "END.0SC"
...
...
@@ -82,6 +83,7 @@
// File path prefixes
#define F_BLOCKS "BLOCKS"
#define F_BONUSMAP "BONUSMAP"
#define F_LEVEL "LEVEL"
#define F_PLANET "PLANET"
#define F_SPRITES "SPRITES"
...
...
@@ -90,6 +92,7 @@
#define F_MENU "menu.000"
#define F_PANEL "panel.000"
#define F_SOUNDS "sounds.000"
#define F_BONUS "bonus.000"
#define F_STARTUP_0SC "startup.0sc"
#define F_END_0SC "end.0sc"
...
...
@@ -98,6 +101,7 @@
// File path prefixes
#define F_BLOCKS "blocks"
#define F_BONUSMAP "bonusmap"
#define F_LEVEL "level"
#define F_PLANET "planet"
#define F_SPRITES "sprites"
...
...
src/baselevel.cpp
0 → 100644
View file @
c0b880a1
/*
*
* baselevel.cpp
*
* 30th March 2010: Created baselevel.cpp from parts of level.cpp and
* levelframe.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
*
*/
/*
* Deals with functionality common to ordinary levels and bonus levels.
*
*/
#include "io/gfx/font.h"
#include "io/gfx/video.h"
#include "player/player.h"
#include "baselevel.h"
BaseLevel
::
BaseLevel
()
{
// Arbitrary initial value
smoothfps
=
50.0
f
;
return
;
}
void
BaseLevel
::
timeCalcs
(
bool
paused
)
{
// Calculate smoothed fps
smoothfps
=
smoothfps
+
1.0
f
-
(
smoothfps
*
((
float
)(
ticks
-
prevTicks
))
/
1000.0
f
);
/* This equation is a simplified version of
(fps * c) + (smoothfps * (1 - c))
where c = (1 / fps)
and fps = 1000 / (ticks - prevTicks)
In other words, the response of smoothFPS to changes in FPS decreases as the
framerate increases
The following version is for c = (1 / smoothfps)
*/
// smoothfps = (fps / smoothfps) + smoothfps - 1;
// Ignore outlandish values
if
(
smoothfps
>
9999.0
f
)
smoothfps
=
9999.0
f
;
if
(
smoothfps
<
1.0
f
)
smoothfps
=
1.0
f
;
// Track number of ticks of gameplay since the level started
if
(
paused
)
{
tickOffset
=
globalTicks
-
ticks
;
}
else
if
(
globalTicks
-
tickOffset
>
ticks
+
100
)
{
prevTicks
=
ticks
;
ticks
+=
100
;
tickOffset
=
globalTicks
-
ticks
;
}
else
{
prevTicks
=
ticks
;
ticks
=
globalTicks
-
tickOffset
;
}
return
;
}
void
BaseLevel
::
drawStats
(
int
stats
)
{
int
count
,
width
;
// Draw graphics statistics
if
(
stats
&
S_SCREEN
)
{
#ifdef SCALE
if
(
scaleFactor
>
1
)
drawRect
(
canvasW
-
84
,
11
,
80
,
37
,
BLACK
);
else
#endif
drawRect
(
canvasW
-
84
,
11
,
80
,
25
,
BLACK
);
panelBigFont
->
showNumber
(
screenW
,
canvasW
-
52
,
14
);
panelBigFont
->
showString
(
"x"
,
canvasW
-
48
,
14
);
panelBigFont
->
showNumber
(
screenH
,
canvasW
-
12
,
14
);
panelBigFont
->
showString
(
"fps"
,
canvasW
-
76
,
26
);
panelBigFont
->
showNumber
((
int
)
smoothfps
,
canvasW
-
12
,
26
);
#ifdef SCALE
if
(
scaleFactor
>
1
)
{
panelBigFont
->
showNumber
(
canvasW
,
canvasW
-
52
,
38
);
panelBigFont
->
showString
(
"x"
,
canvasW
-
48
,
39
);
panelBigFont
->
showNumber
(
canvasH
,
canvasW
-
12
,
38
);
}
#endif
}
// Draw player list
if
(
stats
&
S_PLAYERS
)
{
width
=
39
;
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
if
(
panelBigFont
->
getStringWidth
(
players
[
count
].
getName
())
>
width
)
width
=
panelBigFont
->
getStringWidth
(
players
[
count
].
getName
());
drawRect
((
canvasW
>>
1
)
-
48
,
11
,
width
+
57
,
(
nPlayers
*
12
)
+
1
,
BLACK
);
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
{
panelBigFont
->
showNumber
(
count
+
1
,
(
canvasW
>>
1
)
-
24
,
14
+
(
count
*
12
));
panelBigFont
->
showString
(
players
[
count
].
getName
(),
(
canvasW
>>
1
)
-
16
,
14
+
(
count
*
12
));
panelBigFont
->
showNumber
(
players
[
count
].
teamScore
,
(
canvasW
>>
1
)
+
width
+
1
,
14
+
(
count
*
12
));
}
}
return
;
}
src/baselevel.h
0 → 100644
View file @
c0b880a1
/*
*
* baselevel.h
*
* 30th March 2010: Created baselevel.h from parts of level.h
*
* 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
*
*/
#ifndef _BASELEVEL_H
#define _BASELEVEL_H
#include "OpenJazz.h"
#include <SDL/SDL.h>
// Constants
// Displayed statistics
#define S_NONE 0
#define S_PLAYERS 1
#define S_SCREEN 2
// Macros
// For converting between tile positions and int/fixed values
#define FTOT(x) ((x) >> 15)
#define TTOF(x) ((x) << 15)
#define ITOT(x) ((x) >> 5)
#define TTOI(x) ((x) << 5)
// Classes
class
BaseLevel
{
protected
:
SDL_Surface
*
tileSet
;
SDL_Color
palette
[
256
];
unsigned
int
tickOffset
,
prevStepTicks
,
prevTicks
,
ticks
;
unsigned
int
endTime
;
float
smoothfps
;
int
items
;
void
timeCalcs
(
bool
paused
);
void
drawStats
(
int
stats
);
public
:
BaseLevel
();
};
#endif
src/bonus/bonus.cpp
View file @
c0b880a1
...
...
@@ -9,7 +9,7 @@
* Part of the OpenJazz project
*
*
* Copyright (c) 2005-20
09
Alister Thomson
* Copyright (c) 2005-20
10
Alister Thomson
*
* OpenJazz is distributed under the terms of
* the GNU General Public License, version 2.0
...
...
@@ -27,13 +27,50 @@
#include "bonus.h"
#include "game/gamemode.h"
#include "io/controls.h"
#include "io/file.h"
Bonus
::
Bonus
(
char
*
fileName
)
{
File
*
file
;
#include "io/file.h"
#include "io/gfx/font.h"
#include "io/gfx/paletteeffects.h"
#include "io/gfx/video.h"
#include "io/sound.h"
#include "menu/menu.h"
#include "player/player.h"
#include <math.h>
int
Bonus
::
loadTiles
(
char
*
fileName
)
{
File
*
file
;
try
{
file
=
new
File
(
fileName
,
false
);
}
catch
(
int
e
)
{
return
e
;
}
file
->
skipRLE
();
file
->
loadPalette
(
palette
);
tileSet
=
file
->
loadSurface
(
32
,
32
*
60
);
delete
file
;
return
E_NONE
;
}
Bonus
::
Bonus
(
char
*
fileName
,
unsigned
char
diff
)
{
File
*
file
;
unsigned
char
*
buffer
;
char
*
string
,
*
fileString
;
int
x
,
y
;
try
{
...
...
@@ -44,11 +81,97 @@ Bonus::Bonus (char * fileName) {
throw
e
;
}
// TODO: Load bonus level data
// Load tileset
file
->
seek
(
90
,
true
);
string
=
file
->
loadString
();
fileString
=
createFileName
(
string
,
0
);
x
=
loadTiles
(
fileString
);
delete
[]
string
;
delete
[]
fileString
;
if
(
x
!=
E_NONE
)
throw
x
;
// Load music
file
->
seek
(
121
,
true
);
fileString
=
file
->
loadString
();
playMusic
(
fileString
);
delete
[]
fileString
;
// Load tiles
file
->
seek
(
2694
,
true
);
buffer
=
file
->
loadRLE
(
BLW
*
BLH
);
for
(
y
=
0
;
y
<
BLH
;
y
++
)
{
for
(
x
=
0
;
x
<
BLW
;
x
++
)
{
tiles
[
y
][
x
]
=
buffer
[
x
+
(
y
*
BLW
)];
if
(
tiles
[
y
][
x
]
>
59
)
tiles
[
y
][
x
]
=
59
;
}
}
delete
[]
buffer
;
file
->
skipRLE
();
// Mysterious block
// Load events
buffer
=
file
->
loadRLE
(
BLW
*
BLH
);
for
(
y
=
0
;
y
<
BLW
;
y
++
)
{
for
(
x
=
0
;
x
<
BLH
;
x
++
)
{
events
[
y
][
x
]
=
buffer
[
x
+
(
y
*
BLW
)];
}
}
delete
[]
buffer
;
delete
file
;
// Palette animations
// Free any existing palette effects
if
(
firstPE
)
delete
firstPE
;
// Spinny whirly thing
firstPE
=
new
RotatePaletteEffect
(
112
,
16
,
F32
,
NULL
);
// Track sides
firstPE
=
new
RotatePaletteEffect
(
192
,
16
,
F32
,
firstPE
);
// Bouncy things
firstPE
=
new
RotatePaletteEffect
(
240
,
16
,
-
F32
,
firstPE
);
// Apply the palette to surfaces that already exist, e.g. fonts
usePalette
(
palette
);
// Adjust fontmn1 to use bonuslevel palette
fontmn1
->
mapPalette
(
224
,
8
,
0
,
16
);
// Set the tick at which the level will end
endTime
=
(
5
-
diff
)
*
30
*
1000
;
return
;
}
...
...
@@ -56,8 +179,18 @@ Bonus::Bonus (char * fileName) {
Bonus
::~
Bonus
()
{
// Nothing to do
// Free the palette effects
if
(
firstPE
)
{
delete
firstPE
;
firstPE
=
NULL
;
}
SDL_FreeSurface
(
tileSet
);
fontmn1
->
restorePalette
();
return
;
}
...
...
@@ -65,14 +198,234 @@ Bonus::~Bonus () {
int
Bonus
::
play
()
{
const
char
*
options
[
3
]
=
{
"continue game"
,
"setup options"
,
"quit game"
};
PaletteEffect
*
levelPE
;
bool
paused
,
pmenu
;
int
stats
,
option
;
SDL_Rect
src
,
dst
;
int
x
,
y
;
fixed
pX
,
pY
,
pDirection
;
int
mspf
;
tickOffset
=
globalTicks
;
ticks
=
16
;
prevStepTicks
=
0
;
pmenu
=
paused
=
false
;
option
=
0
;
stats
=
S_NONE
;
// Arbitrary position
localPlayer
->
setPosition
(
TTOF
(
32
)
+
F16
,
TTOF
(
7
)
+
F16
);
pDirection
=
FQ
;
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
if
(
controls
.
release
(
C_ESCAPE
))
return
E_NONE
;
// TODO: Bonus levels
if
(
controls
.
release
(
C_ESCAPE
))
{
if
(
!
gameMode
)
paused
=
!
paused
;
pmenu
=
!
pmenu
;
}
if
(
controls
.
release
(
C_PAUSE
)
&&
!
gameMode
)
paused
=
!
paused
;
if
(
controls
.
release
(
C_STATS
))
{
if
(
!
gameMode
)
stats
^=
S_SCREEN
;
else
stats
=
(
stats
+
1
)
&
3
;
}
if
(
pmenu
)
{
// Deal with menu controls
if
(
controls
.
release
(
C_UP
))
option
=
(
option
+
2
)
%
3
;
if
(
controls
.
release
(
C_DOWN
))
option
=
(
option
+
1
)
%
3
;
if
(
controls
.
release
(
C_ENTER
))
{
switch
(
option
)
{
case
0
:
// Continue
paused
=
pmenu
=
false
;
break
;
case
1
:
// Setup
if
(
!
gameMode
)
{
// Don't want palette effects in setup menu
levelPE
=
firstPE
;
firstPE
=
NULL
;
if
(
menu
->
setup
()
==
E_QUIT
)
return
E_QUIT
;
// Restore level palette
usePalette
(
palette
);
// Restore palette effects
firstPE
=
levelPE
;
}
break
;
case
2
:
// Quit game
return
E_NONE
;
}
}
}
timeCalcs
(
paused
);
mspf
=
ticks
-
prevTicks
;
pX
=
localPlayer
->
getX
();
pY
=
localPlayer
->
getY
();
if
(
!
paused
)
{
if
(
controls
.
getState
(
C_UP
))
{
pX
+=
fixed
(
sin
(
pDirection
*
6.283185
/
1024.0
)
*
64
*
mspf
);
pY
-=
fixed
(
cos
(
pDirection
*
6.283185
/
1024.0
)
*
64
*
mspf
);
}
if
(
controls
.
getState
(
C_DOWN
))
{
pX
-=
fixed
(
sin
(
pDirection
*
6.283185
/
1024.0
)
*
32
*
mspf
);
pY
+=
fixed
(
cos
(
pDirection
*
6.283185
/
1024.0
)
*
32
*
mspf
);
}
if
(
controls
.
getState
(
C_LEFT
))
pDirection
-=
mspf
/
2
;
if
(
controls
.
getState
(
C_RIGHT
))
pDirection
+=
mspf
/
2
;
localPlayer
->
setPosition
(
pX
,
pY
);
}
src
.
x
=
0
;
src
.
w
=
32
;
src
.
h
=
32
;
int
vX
=
FTOI
(
pX
)
-
(
canvasW
>>
1
);
int
vY
=
FTOI
(
pY
)
-
(
canvasH
>>
1
);
for
(
y
=
0
;
y
<=
ITOT
(
canvasH
-
1
)
+
1
;
y
++
)
{
for
(
x
=
0
;
x
<=
ITOT
(
canvasW
-
1
)
+
1
;
x
++
)
{
src
.
y
=
TTOI
(
tiles
[(
y
+
ITOT
(
vY
)
+
BLH
)
%
BLH
][(
x
+
ITOT
(
vX
)
+
BLW
)
%
BLW
]);
dst
.
x
=
TTOI
(
x
)
-
(
vX
&
31
);
dst
.
y
=
TTOI
(
y
)
-
(
vY
&
31
);
SDL_BlitSurface
(
tileSet
,
&
src
,
canvas
,
&
dst
);
dst
.
x
=
12
+
TTOI
(
x
)
-
(
vX
&
31
);
dst
.
y
=
12
+
TTOI
(
y
)
-
(
vY
&
31
);
switch
(
events
[(
y
+
ITOT
(
vY
)
+
BLH
)
%
BLH
][(
x
+
ITOT
(
vX
)
+
BLW
)
%
BLW
])
{
case
0
:
// No event
break
;
case
1
:
// Extra time
drawRect
(
dst
.
x
,
dst
.
y
,
8
,
8
,
60
);
break
;
case
2
:
// Gem
drawRect
(
dst
.
x
,
dst
.
y
,
8
,
8
,
67
);
break
;
case
3
:
// Hand
drawRect
(
dst
.
x
,
dst
.
y
,
8
,
8
,
15
);
break
;
case
4
:
// Exit
drawRect
(
dst
.
x
,
dst
.
y
,
8
,
8
,
45
);
break
;
default
:
drawRect
(
dst
.
x
,
dst
.
y
,
8
,
8
,
0
);
break
;
}
}
}
// Draw the "player"
drawRect
(
(
canvasW
>>
1
)
+
fixed
(
sin
(
pDirection
*
6.283185
/
1024.0
)
*
3
)
-
4
,
(
canvasH
>>
1
)
-
fixed
(
cos
(
pDirection
*
6.283185
/
1024.0
)
*
3
)
-
4
,
8
,
8
,
0
);
drawRect
((
canvasW
>>
1
)
-
4
,
(
canvasH
>>
1
)
-
4
,
8
,
8
,
22
);
// Show time remaining
if
(
endTime
>
ticks
)
x
=
endTime
-
ticks
;
else
x
=
0
;
y
=
x
/
(
60
*
1000
);
fontmn1
->
showNumber
(
y
,
144
,
8
);
x
-=
(
y
*
60
*
1000
);
y
=
x
/
1000
;
fontmn1
->
showNumber
(
y
,
192
,
8
);
// If paused, draw "PAUSE"
if
(
paused
&&
!
pmenu
)
fontmn1
->
showString
(
"PAUSE"
,
(
canvasW
>>
1
)
-
44
,
32
);
// Draw statistics
drawStats
(
stats
);
// Draw the menu
if
(
pmenu
)
{
// Draw the menu
drawRect
((
canvasW
>>
2
)
-
8
,
(
canvasH
>>
1
)
-
46
,
144
,
60
,
0
);
for
(
x
=
0
;
x
<
3
;
x
++
)
{
if
(
x
==
option
)
fontmn2
->
mapPalette
(
240
,
8
,
31
,
16
);
else
fontmn2
->
mapPalette
(
240
,
8
,
0
,
16
);
fontmn2
->
showString
(
options
[
x
],
canvasW
>>
2
,
(
canvasH
>>
1
)
+
(
x
<<
4
)
-
38
);
}
fontmn2
->
restorePalette
();
}
}
return
E_NONE
;
...
...
src/bonus/bonus.h
View file @
c0b880a1
...
...
@@ -8,7 +8,7 @@
* Part of the OpenJazz project
*
*
* Copyright (c) 2009 Alister Thomson
* Copyright (c) 2009
-2010
Alister Thomson
*
* OpenJazz is distributed under the terms of
* the GNU General Public License, version 2.0
...
...
@@ -22,14 +22,31 @@
#ifndef _BONUS_H
#define _BONUS_H
#include "baselevel.h"
#include <SDL/SDL.h>
// Constants
// General
#define BLW 256
/* Bonus level width */
#define BLH 256
/* Bonus level height */
// Class
class
Bonus
{
class
Bonus
:
public
BaseLevel
{
private
:
unsigned
char
tiles
[
BLH
][
BLW
];
unsigned
char
events
[
BLH
][
BLW
];
int
loadTiles
(
char
*
fileName
);
public
:
Bonus
(
char
*
fileName
);
Bonus
(
char
*
fileName
,
unsigned
char
diff
);
~
Bonus
();
int
play
();
...
...
src/game/game.cpp
View file @
c0b880a1
...
...
@@ -26,6 +26,7 @@
#include "game.h"
#include "gamemode.h"
#include "bonus/bonus.h"
#include "io/controls.h"
#include "io/gfx/font.h"
#include "io/gfx/video.h"
...
...
@@ -34,10 +35,13 @@
#include "player/player.h"
#include "scene/scene.h"
#include <string.h>
Game
::
Game
()
{
levelFile
=
NULL
;
levelFile
=
NULL
;
bonusFile
=
NULL
;
players
=
NULL
;
...
...
@@ -47,8 +51,19 @@ Game::Game () {
Game
::
Game
(
char
*
firstLevel
,
int
gameDifficulty
)
{
levelFile
=
createString
(
firstLevel
);
if
(
!
strncmp
(
firstLevel
,
F_BONUSMAP
,
8
))
{
levelFile
=
NULL
;
bonusFile
=
createString
(
firstLevel
);
}
else
{
levelFile
=
createString
(
firstLevel
);
bonusFile
=
NULL
;
}
difficulty
=
gameDifficulty
;
gameMode
=
NULL
;
...
...
@@ -66,6 +81,7 @@ Game::Game (char *firstLevel, int gameDifficulty) {
Game
::~
Game
()
{
if
(
levelFile
)
delete
[]
levelFile
;
if
(
bonusFile
)
delete
[]
levelFile
;
if
(
players
)
delete
[]
players
;
localPlayer
=
NULL
;
...
...
@@ -79,19 +95,32 @@ int Game::setLevel (char *fileName) {
if
(
levelFile
)
delete
[]
levelFile
;
if
(
!
fileName
)
levelFile
=
NULL
;
else
levelFile
=
createString
(
fileName
)
;
if
(
fileName
)
levelFile
=
createString
(
fileName
)
;
else
levelFile
=
NULL
;
return
E_NONE
;
}
int
Game
::
setBonus
(
char
*
fileName
)
{
if
(
bonusFile
)
delete
[]
bonusFile
;
if
(
fileName
)
bonusFile
=
createString
(
fileName
);
else
bonusFile
=
NULL
;
return
E_NONE
;
}
int
Game
::
play
()
{
Scene
*
scene
;
Bonus
*
bonus
;
Scene
*
scene
;
bool
checkpoint
;
int
r
et
;
int
levelRet
,
bonusR
et
;
checkpoint
=
false
;
...
...
@@ -99,22 +128,59 @@ int Game::play () {
while
(
true
)
{
sendTime
=
checkTime
=
0
;
if
(
levelFile
)
{
// Load the level
try
{
// Load and play the level
level
=
new
Level
(
levelFile
,
difficulty
,
checkpoint
);
try
{
}
catch
(
int
e
)
{
level
=
new
Level
(
levelFile
,
difficulty
,
checkpoint
);
return
e
;
}
catch
(
int
e
)
{
}
return
e
;
ret
=
level
->
play
();
}
switch
(
ret
)
{
levelRet
=
level
->
play
();
}
if
(
bonusFile
)
{
// Load and play the bonus level
try
{
bonus
=
new
Bonus
(
bonusFile
,
difficulty
);
}
catch
(
int
e
)
{
return
e
;
}
delete
[]
bonusFile
;
bonusFile
=
NULL
;
bonusRet
=
bonus
->
play
();
delete
bonus
;
if
(
bonusRet
==
E_QUIT
)
return
E_QUIT
;
if
(
bonusRet
==
E_NONE
)
return
E_NONE
;
}
if
(
!
levelFile
)
continue
;
switch
(
levelRet
)
{
case
E_NONE
:
// Quit game
...
...
@@ -141,6 +207,8 @@ int Game::play () {
}
delete
level
;
// Do not use old level's checkpoint coordinates
checkpoint
=
false
;
...
...
@@ -148,13 +216,9 @@ int Game::play () {
case
LOST
:
// Lost level
if
(
!
localPlayer
->
getLives
())
{
delete
level
;
return
E_NONE
;
// Not really a success...
}
delete
level
;
if
(
!
localPlayer
->
getLives
())
return
E_NONE
;
// Not really a success...
// Use checkpoint coordinates
checkpoint
=
true
;
...
...
@@ -165,13 +229,10 @@ int Game::play () {
delete
level
;
return
r
et
;
return
levelR
et
;
}
// Unload the previous level
delete
level
;
}
return
E_NONE
;
...
...
src/game/game.h
View file @
c0b880a1
...
...
@@ -84,6 +84,7 @@ class Game {
protected
:
char
*
levelFile
;
char
*
bonusFile
;
int
difficulty
;
unsigned
int
sendTime
,
checkTime
;
unsigned
char
checkX
,
checkY
;
...
...
@@ -95,6 +96,7 @@ class Game {
virtual
~
Game
();
virtual
int
setLevel
(
char
*
fileName
);
int
setBonus
(
char
*
fileName
);
int
play
();
void
view
(
int
change
);
virtual
void
send
(
unsigned
char
*
buffer
);
...
...
src/level/demolevel.cpp
View file @
c0b880a1
...
...
@@ -167,7 +167,8 @@ int DemoLevel::play () {
// Draw the graphics
draw
(
stats
);
draw
();
drawStats
(
stats
);
fontmn1
->
showString
(
"DEMO"
,
(
canvasW
>>
1
)
-
36
,
32
);
...
...
src/level/level.cpp
View file @
c0b880a1
...
...
@@ -12,7 +12,9 @@
* 18th July 2009: Created demolevel.cpp from parts of level.cpp and
* levelload.cpp
* 19th July 2009: Created levelframe.cpp from parts of level.cpp
* 19th July 2009: Added parts of levelload.cpp to level.cpp
* 19th July 2009: Added parts of levelload.cpp to level.cpp
* 30th March 2010: Created baselevel.cpp from parts of level.cpp and
* levelframe.cpp
*
* Part of the OpenJazz project
*
...
...
@@ -54,16 +56,15 @@
#include <string.h>
Level
::
Level
()
{
// Arbitrary initial value
smoothfps
=
50.0
f
;
Level
::
Level
()
{
// Do nothing
return
;
}
return
;
}
Level
::
Level
(
char
*
fileName
,
unsigned
char
diff
,
bool
checkpoint
)
{
int
ret
;
...
...
@@ -518,55 +519,10 @@ void Level::receive (unsigned char *buffer) {
}
void
Level
::
timeCalcs
(
bool
paused
)
{
// Calculate smoothed fps
smoothfps
=
smoothfps
+
1.0
f
-
(
smoothfps
*
((
float
)(
ticks
-
prevTicks
))
/
1000.0
f
);
/* This equation is a simplified version of
(fps * c) + (smoothfps * (1 - c))
where c = (1 / fps)
and fps = 1000 / (ticks - prevTicks)
In other words, the response of smoothFPS to changes in FPS decreases as the
framerate increases
The following version is for c = (1 / smoothfps)
*/
// smoothfps = (fps / smoothfps) + smoothfps - 1;
// Ignore outlandish values
if
(
smoothfps
>
9999.0
f
)
smoothfps
=
9999.0
f
;
if
(
smoothfps
<
1.0
f
)
smoothfps
=
1.0
f
;
// Track number of ticks of gameplay since the level started
if
(
paused
)
{
tickOffset
=
globalTicks
-
ticks
;
}
else
if
(
globalTicks
-
tickOffset
>
ticks
+
100
)
{
prevTicks
=
ticks
;
ticks
+=
100
;
tickOffset
=
globalTicks
-
ticks
;
}
else
{
prevTicks
=
ticks
;
ticks
=
globalTicks
-
tickOffset
;
}
return
;
}
int
Level
::
play
()
{
const
char
*
options
[
5
]
=
{
"continue game"
,
"save game"
,
"load game"
,
"setup options"
,
"quit game"
};
const
char
*
options
[
5
]
=
{
"continue game"
,
"save game"
,
"load game"
,
"setup options"
,
"quit game"
};
PaletteEffect
*
levelPE
;
char
*
string
;
bool
paused
,
pmenu
;
...
...
@@ -575,7 +531,6 @@ int Level::play () {
int
perfect
;
int
timeBonus
;
int
count
;
int
width
;
tickOffset
=
globalTicks
;
...
...
@@ -729,7 +684,7 @@ int Level::play () {
// Draw the graphics
draw
(
stats
);
draw
();
// If paused, draw "PAUSE"
...
...
@@ -740,31 +695,9 @@ int Level::play () {
// If this is a competitive game, draw the score
if
(
gameMode
)
gameMode
->
drawScore
();
// Draw player list
if
(
stats
&
S_PLAYERS
)
{
width
=
39
;
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
if
(
panelBigFont
->
getStringWidth
(
players
[
count
].
getName
())
>
width
)
width
=
panelBigFont
->
getStringWidth
(
players
[
count
].
getName
());
drawRect
((
viewW
>>
1
)
-
48
,
11
,
width
+
57
,
(
nPlayers
*
12
)
+
1
,
BLACK
);
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
{
panelBigFont
->
showNumber
(
count
+
1
,
(
viewW
>>
1
)
-
24
,
14
+
(
count
*
12
));
panelBigFont
->
showString
(
players
[
count
].
getName
(),
(
viewW
>>
1
)
-
16
,
14
+
(
count
*
12
));
panelBigFont
->
showNumber
(
players
[
count
].
teamScore
,
(
viewW
>>
1
)
+
width
+
1
,
14
+
(
count
*
12
));
}
}
// Draw statistics
drawStats
(
stats
);
if
(
stage
==
LS_END
)
{
...
...
src/level/level.h
View file @
c0b880a1
...
...
@@ -6,6 +6,7 @@
* 31st January 2006: Created level.h from parts of OpenJazz.h
* 4th February 2009: Created events.h from parts of level.h
* 19th March 2009: Created sprite.h from parts of level.h
* 30th March 2010: Created baselevel.h from parts of level.h
*
* Part of the OpenJazz project
*
...
...
@@ -31,6 +32,7 @@
#define _LEVEL_H
#include "baselevel.h"
#include "io/gfx/anim.h"
#include "OpenJazz.h"
...
...
@@ -39,11 +41,6 @@
// Constants
// Displayed statistics
#define S_NONE 0
#define S_PLAYERS 1
#define S_SCREEN 2
// General
#define LW 256
/* Level width */
#define LH 64
/* Level height */
...
...
@@ -65,15 +62,6 @@
#define T_END 1000
// Macros
// For converting between tile positions and int/fixed values
#define FTOT(x) ((x) >> 15)
#define TTOF(x) ((x) << 15)
#define ITOT(x) ((x) >> 5)
#define TTOI(x) ((x) << 5)
// Datatypes
typedef
struct
{
...
...
@@ -104,12 +92,11 @@ class Event;
class
Player
;
class
Scene
;
class
Level
{
class
Level
:
public
BaseLevel
{
private
:
char
*
sceneFile
;
Sprite
*
spriteSet
;
// 208 of which are usually in mainchar.000
SDL_Surface
*
tileSet
;
Anim
animSet
[
ANIMS
];
char
miscAnims
[
4
];
signed
char
bulletSet
[
BULLETS
][
BLENGTH
];
...
...
@@ -117,32 +104,26 @@ class Level {
char
mask
[
240
][
64
];
// At most 240 tiles, all with 8 * 8 masks
GridElement
grid
[
LH
][
LW
];
// All levels are the same size
int
soundMap
[
32
];
SDL_Color
palette
[
256
];
SDL_Color
skyPalette
[
256
];
bool
sky
;
unsigned
char
skyOrb
;
int
sprites
;
int
levelNum
,
worldNum
,
nextLevelNum
,
nextWorldNum
;
unsigned
char
difficulty
;
unsigned
int
endTime
;
int
enemies
,
items
;
int
enemies
;
fixed
waterLevel
;
fixed
waterLevelTarget
;
fixed
waterLevelSpeed
;
fixed
energyBar
;
int
stage
;
float
smoothfps
;
int
loadSprites
(
char
*
fileName
);
int
loadTiles
(
char
*
fileName
);
protected
:
unsigned
int
tickOffset
,
prevStepTicks
,
prevTicks
,
ticks
;
int
load
(
char
*
fileName
,
unsigned
char
diff
,
bool
checkpoint
);
int
step
();
void
draw
(
int
stats
);
void
timeCalcs
(
bool
paused
);
int
load
(
char
*
fileName
,
unsigned
char
diff
,
bool
checkpoint
);
int
step
();
void
draw
();
public
:
Event
*
firstEvent
;
...
...
@@ -150,9 +131,9 @@ class Level {
EventPath
path
[
PATHS
];
Level
();
Level
(
char
*
fileName
,
unsigned
char
diff
,
bool
checkpoint
);
Level
(
char
*
fileName
,
unsigned
char
diff
,
bool
checkpoint
);
virtual
~
Level
();
bool
checkMask
(
fixed
x
,
fixed
y
);
bool
checkMaskDown
(
fixed
x
,
fixed
y
);
bool
checkSpikes
(
fixed
x
,
fixed
y
);
...
...
@@ -189,6 +170,7 @@ class DemoLevel : public Level {
public
:
DemoLevel
(
const
char
*
fileName
);
~
DemoLevel
();
int
play
();
};
...
...
@@ -196,8 +178,8 @@ class DemoLevel : public Level {
// Variables
EXTERN
Level
*
level
;
EXTERN
fixed
viewX
,
viewY
;
EXTERN
Level
*
level
;
EXTERN
fixed
viewX
,
viewY
;
#endif
src/level/levelframe.cpp
View file @
c0b880a1
...
...
@@ -4,6 +4,8 @@
* levelframe.cpp
*
* 19th July 2009: Created levelframe.cpp from parts of level.cpp
* 30th March 2010: Created baselevel.cpp from parts of level.cpp and
* levelframe.cpp
*
* Part of the OpenJazz project
*
...
...
@@ -173,7 +175,7 @@ int Level::step () {
void
Level
::
draw
(
int
stats
)
{
void
Level
::
draw
()
{
GridElement
*
ge
;
Event
*
event
;
...
...
@@ -438,36 +440,6 @@ void Level::draw (int stats) {
// Fill in remaining energy bar space with black
drawRect
(
dst
.
x
,
canvasH
-
13
,
dst
.
w
,
7
,
BLACK
);
// Draw graphics statistics
if
(
stats
&
S_SCREEN
)
{
#ifdef SCALE
if
(
scaleFactor
>
1
)
drawRect
(
viewW
-
84
,
11
,
80
,
37
,
BLACK
);
else
#endif
drawRect
(
viewW
-
84
,
11
,
80
,
25
,
BLACK
);
panelBigFont
->
showNumber
(
screenW
,
viewW
-
52
,
14
);
panelBigFont
->
showString
(
"x"
,
viewW
-
48
,
14
);
panelBigFont
->
showNumber
(
screenH
,
viewW
-
12
,
14
);
panelBigFont
->
showString
(
"fps"
,
viewW
-
76
,
26
);
panelBigFont
->
showNumber
((
int
)
smoothfps
,
viewW
-
12
,
26
);
#ifdef SCALE
if
(
scaleFactor
>
1
)
{
panelBigFont
->
showNumber
(
canvasW
,
viewW
-
52
,
38
);
panelBigFont
->
showString
(
"x"
,
viewW
-
48
,
39
);
panelBigFont
->
showNumber
(
canvasH
,
viewW
-
12
,
38
);
}
#endif
}
return
;
...
...
src/main.cpp
View file @
c0b880a1
...
...
@@ -285,7 +285,7 @@ int loadMain (int argc, char *argv[]) {
logError
(
"Could not set video mode"
,
SDL_GetError
());
delete
characterName
;
delete
[]
characterName
;
delete
firstPath
;
...
...
@@ -319,7 +319,7 @@ int loadMain (int argc, char *argv[]) {
closeAudio
();
delete
characterName
;
delete
[]
characterName
;
delete
firstPath
;
...
...
src/menu/gamemenu.cpp
View file @
c0b880a1
...
...
@@ -81,8 +81,9 @@ int Menu::newGameDifficulty (int mode, int levelNum, int worldNum) {
if
(
controls
.
release
(
C_ENTER
))
{
playSound
(
S_ORB
);
firstLevel
=
createFileName
(
F_LEVEL
,
levelNum
,
worldNum
);
if
(
levelNum
==
-
1
)
firstLevel
=
createFileName
(
F_BONUSMAP
,
worldNum
);
else
firstLevel
=
createFileName
(
F_LEVEL
,
levelNum
,
worldNum
);
if
(
mode
==
M_SINGLE
)
{
...
...
@@ -118,6 +119,8 @@ int Menu::newGameDifficulty (int mode, int levelNum, int worldNum) {
}
delete
[]
firstLevel
;
// Play the level(s)
...
...
@@ -126,7 +129,6 @@ int Menu::newGameDifficulty (int mode, int levelNum, int worldNum) {
case
E_QUIT
:
delete
game
;
delete
[]
firstLevel
;
return
E_QUIT
;
...
...
@@ -139,7 +141,6 @@ int Menu::newGameDifficulty (int mode, int levelNum, int worldNum) {
}
delete
game
;
delete
[]
firstLevel
;
return
E_NONE
;
...
...
@@ -178,7 +179,8 @@ int Menu::newGameLevel (int mode) {
else
fontmn2
->
mapPalette
(
240
,
8
,
114
,
16
);
fontmn2
->
showString
(
"choose level:"
,
32
,
(
canvasH
<<
1
)
/
3
);
fontmn2
->
showNumber
(
levelNum
,
208
,
(
canvasH
<<
1
)
/
3
);
if
(
levelNum
>=
0
)
fontmn2
->
showNumber
(
levelNum
,
208
,
(
canvasH
<<
1
)
/
3
);
else
fontmn2
->
showString
(
"bonus"
,
172
,
(
canvasH
<<
1
)
/
3
);
if
(
option
!=
0
)
fontmn2
->
restorePalette
();
...
...
@@ -188,14 +190,14 @@ int Menu::newGameLevel (int mode) {
if
(
controls
.
release
(
C_LEFT
))
{
if
(
option
)
levelNum
=
(
levelNum
+
9
)
%
10
;
if
(
option
)
levelNum
=
(
(
levelNum
+
11
)
%
11
)
-
1
;
else
worldNum
=
(
worldNum
+
999
)
%
1000
;
}
if
(
controls
.
release
(
C_RIGHT
))
{
if
(
option
)
levelNum
=
(
levelNum
+
1
)
%
10
;
if
(
option
)
levelNum
=
(
(
levelNum
+
2
)
%
11
)
-
1
;
else
worldNum
=
(
worldNum
+
1
)
%
1000
;
}
...
...
@@ -223,7 +225,7 @@ int Menu::newGameEpisode (int mode) {
const
char
*
options
[
12
]
=
{
"episode 1"
,
"episode 2"
,
"episode 3"
,
"episode 4"
,
"episode 5"
,
"episode 6"
,
"episode a"
,
"episode b"
,
"episode c"
,
"episode x"
,
"bonus stage"
,
"specific level"
};
bool
exists
[
12
];
bool
exists
[
12
];
char
*
check
;
SDL_Rect
dst
;
int
episode
,
count
,
worldNum
;
...
...
@@ -246,7 +248,10 @@ int Menu::newGameEpisode (int mode) {
}
exists
[
10
]
=
false
;
check
=
createFileName
(
F_BONUSMAP
,
0
);
exists
[
10
]
=
fileExists
(
check
);
delete
[]
check
;
exists
[
11
]
=
true
;
episode
=
0
;
...
...
@@ -307,17 +312,15 @@ int Menu::newGameEpisode (int mode) {
if
(
episode
<
10
)
{
if
(
episode
<
6
)
worldNum
=
episode
*
3
;
else
if
((
episode
>=
6
)
&&
(
episode
<
9
))
worldNum
=
(
episode
+
4
)
*
3
;
else
if
((
episode
>=
6
)
&&
(
episode
<
9
))
worldNum
=
(
episode
+
4
)
*
3
;
else
worldNum
=
50
;
if
(
newGameDifficulty
(
mode
,
0
,
worldNum
)
==
E_QUIT
)
return
E_QUIT
;
if
(
newGameDifficulty
(
mode
,
0
,
worldNum
)
==
E_QUIT
)
return
E_QUIT
;
}
else
if
(
episode
==
10
)
{
// TODO: Loading and playing of bonus levels
if
(
newGameDifficulty
(
mode
,
-
1
,
0
)
==
E_QUIT
)
return
E_QUIT
;
}
else
{
if
(
newGameLevel
(
mode
)
==
E_QUIT
)
return
E_QUIT
;
...
...
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