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
40768f56
Commit
40768f56
authored
Apr 06, 2010
by
alistert
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added new font. More work on bonus levels.
parent
30bfea2a
Changes
25
Show whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
765 additions
and
439 deletions
+765
-439
OpenJazz.h
src/OpenJazz.h
+52
-32
baselevel.cpp
src/baselevel.cpp
+29
-0
baselevel.h
src/baselevel.h
+13
-1
bonus.cpp
src/bonus/bonus.cpp
+232
-96
bonus.h
src/bonus/bonus.h
+7
-3
game.cpp
src/game/game.cpp
+99
-44
game.h
src/game/game.h
+1
-1
gamemode.cpp
src/game/gamemode.cpp
+3
-3
font.cpp
src/io/gfx/font.cpp
+115
-26
font.h
src/io/gfx/font.h
+5
-2
sprite.cpp
src/io/gfx/sprite.cpp
+7
-1
video.cpp
src/io/gfx/video.cpp
+19
-0
video.h
src/io/gfx/video.h
+7
-6
demolevel.cpp
src/level/demolevel.cpp
+1
-1
level.cpp
src/level/level.cpp
+35
-72
level.h
src/level/level.h
+0
-11
levelframe.cpp
src/level/levelframe.cpp
+26
-11
levelload.cpp
src/level/levelload.cpp
+9
-32
main.cpp
src/main.cpp
+49
-45
mainmenu.cpp
src/menu/mainmenu.cpp
+2
-2
player.cpp
src/player/player.cpp
+9
-0
player.h
src/player/player.h
+2
-1
scene.cpp
src/scene/scene.cpp
+16
-14
scene.h
src/scene/scene.h
+14
-12
sceneload.cpp
src/scene/sceneload.cpp
+13
-23
No files found.
src/OpenJazz.h
View file @
40768f56
...
@@ -70,17 +70,27 @@
...
@@ -70,17 +70,27 @@
#define LEVEL_FILE "openjazz.tmp"
#define LEVEL_FILE "openjazz.tmp"
#ifdef UPPERCASE_FILENAMES
#ifdef UPPERCASE_FILENAMES
#define F_FONTS "FONTS.000"
#define F_MAINCHAR "MAINCHAR.000"
#define F_MAINCHAR "MAINCHAR.000"
#define F_MENU "MENU.000"
#define F_MENU "MENU.000"
#define F_PANEL "PANEL.000"
#define F_PANEL "PANEL.000"
#define F_SOUNDS "SOUNDS.000"
#define F_SOUNDS "SOUNDS.000"
#define F_BONUS "BONUS.000"
#define F_BONUS "BONUS.000"
#define F_
STARTUP_0SC "STARTUP.0SC"
#define F_
BONUS_0SC "BONUS.0SC"
#define F_END_0SC "END.0SC"
#define F_END_0SC "END.0SC"
#define F_INSTRUCT_0SC "INSTRUCT.0SC"
#define F_ORDER_0SC "ORDER.0SC"
#define F_STARTUP_0SC "STARTUP.0SC"
#define F_MACRO "MACRO.2"
#define F_MACRO "MACRO.2"
#define F_FONT2_0FN "FONT2.0FN"
#define F_FONTBIG_0FN "FONTBIG.0FN"
#define F_FONTINY_0FN "FONTINY.0FN"
#define F_FONTMN1_0FN "FONTMN1.0FN"
#define F_FONTMN2_0FN "FONTMN2.0FN"
// File path prefixes
// File path prefixes
#define F_BLOCKS "BLOCKS"
#define F_BLOCKS "BLOCKS"
#define F_BONUSMAP "BONUSMAP"
#define F_BONUSMAP "BONUSMAP"
...
@@ -88,17 +98,27 @@
...
@@ -88,17 +98,27 @@
#define F_PLANET "PLANET"
#define F_PLANET "PLANET"
#define F_SPRITES "SPRITES"
#define F_SPRITES "SPRITES"
#else
#else
#define F_FONTS "fonts.000"
#define F_MAINCHAR "mainchar.000"
#define F_MAINCHAR "mainchar.000"
#define F_MENU "menu.000"
#define F_MENU "menu.000"
#define F_PANEL "panel.000"
#define F_PANEL "panel.000"
#define F_SOUNDS "sounds.000"
#define F_SOUNDS "sounds.000"
#define F_BONUS "bonus.000"
#define F_BONUS "bonus.000"
#define F_
STARTUP_0SC "startup.0sc"
#define F_
BONUS_0SC "bonus.0sc"
#define F_END_0SC "end.0sc"
#define F_END_0SC "end.0sc"
#define F_INSTRUCT_0SC "instruct.0SC"
#define F_ORDER_0SC "order.0SC"
#define F_STARTUP_0SC "startup.0sc"
#define F_MACRO "macro.2"
#define F_MACRO "macro.2"
#define F_FONT2_0FN "font2.0fn"
#define F_FONTBIG_0FN "fontbig.0fn"
#define F_FONTINY_0FN "fontiny.0fn"
#define F_FONTMN1_0FN "fontmn1.0fn"
#define F_FONTMN2_0FN "fontmn2.0fn"
// File path prefixes
// File path prefixes
#define F_BLOCKS "blocks"
#define F_BLOCKS "blocks"
#define F_BONUSMAP "bonusmap"
#define F_BONUSMAP "bonusmap"
...
...
src/baselevel.cpp
View file @
40768f56
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
*/
*/
#include "game/game.h"
#include "io/gfx/font.h"
#include "io/gfx/font.h"
#include "io/gfx/video.h"
#include "io/gfx/video.h"
#include "player/player.h"
#include "player/player.h"
...
@@ -39,6 +40,9 @@ BaseLevel::BaseLevel () {
...
@@ -39,6 +40,9 @@ BaseLevel::BaseLevel () {
paused
=
false
;
paused
=
false
;
// Set the level stage
stage
=
LS_NORMAL
;
return
;
return
;
}
}
...
@@ -151,3 +155,28 @@ void BaseLevel::drawStats (int stats) {
...
@@ -151,3 +155,28 @@ void BaseLevel::drawStats (int stats) {
}
}
void
BaseLevel
::
addTimer
()
{
unsigned
char
buffer
[
MTL_L_PROP
];
if
(
stage
!=
LS_NORMAL
)
return
;
endTime
+=
2
*
60
*
1000
;
// 2 minutes. Is this right?
if
(
gameMode
)
{
buffer
[
0
]
=
MTL_L_PROP
;
buffer
[
1
]
=
MT_L_PROP
;
buffer
[
2
]
=
2
;
// add timer
buffer
[
3
]
=
0
;
buffer
[
4
]
=
0
;
// Don't really matter
game
->
send
(
buffer
);
}
return
;
}
src/baselevel.h
View file @
40768f56
...
@@ -46,6 +46,15 @@
...
@@ -46,6 +46,15 @@
#define TTOI(x) ((x) << 5)
#define TTOI(x) ((x) << 5)
// Enum
enum
LevelStage
{
LS_NORMAL
=
0
,
LS_SUDDENDEATH
=
1
,
LS_END
=
2
};
// Classes
// Classes
class
BaseLevel
{
class
BaseLevel
{
...
@@ -58,6 +67,7 @@ class BaseLevel {
...
@@ -58,6 +67,7 @@ class BaseLevel {
float
smoothfps
;
float
smoothfps
;
int
items
;
int
items
;
bool
paused
;
bool
paused
;
LevelStage
stage
;
void
timeCalcs
();
void
timeCalcs
();
void
drawStats
(
int
stats
);
void
drawStats
(
int
stats
);
...
@@ -65,6 +75,8 @@ class BaseLevel {
...
@@ -65,6 +75,8 @@ class BaseLevel {
public
:
public
:
BaseLevel
();
BaseLevel
();
void
addTimer
();
};
};
#endif
#endif
...
...
src/bonus/bonus.cpp
View file @
40768f56
...
@@ -27,6 +27,7 @@
...
@@ -27,6 +27,7 @@
#include "bonus.h"
#include "bonus.h"
#include "game/game.h"
#include "game/gamemode.h"
#include "game/gamemode.h"
#include "io/controls.h"
#include "io/controls.h"
#include "io/file.h"
#include "io/file.h"
...
@@ -147,6 +148,36 @@ Bonus::Bonus (char * fileName, unsigned char diff) {
...
@@ -147,6 +148,36 @@ Bonus::Bonus (char * fileName, unsigned char diff) {
delete
[]
buffer
;
delete
[]
buffer
;
file
->
seek
(
178
,
false
);
// Set the tick at which the level will end
endTime
=
file
->
loadShort
()
*
1000
;
// Number of gems to collect
items
=
file
->
loadShort
();
// The players' coordinates
x
=
file
->
loadShort
();
y
=
file
->
loadShort
();
if
(
game
)
game
->
setCheckpoint
(
x
,
y
);
// Set the players' initial values
if
(
game
)
{
for
(
x
=
0
;
x
<
nPlayers
;
x
++
)
game
->
resetPlayer
(
players
+
x
,
true
);
}
else
{
localPlayer
->
reset
();
localPlayer
->
setPosition
(
TTOF
(
x
)
+
F16
,
TTOF
(
y
)
+
F16
);
}
delete
file
;
delete
file
;
...
@@ -168,12 +199,8 @@ Bonus::Bonus (char * fileName, unsigned char diff) {
...
@@ -168,12 +199,8 @@ Bonus::Bonus (char * fileName, unsigned char diff) {
// Apply the palette to surfaces that already exist, e.g. fonts
// Apply the palette to surfaces that already exist, e.g. fonts
usePalette
(
palette
);
usePalette
(
palette
);
// Adjust fontmn1 to use bonuslevel palette
// Adjust fontmn1 to use bonus level palette
fontmn1
->
mapPalette
(
224
,
8
,
0
,
16
);
fontsFont
->
mapPalette
(
0
,
16
,
15
,
-
16
);
// Set the tick at which the level will end
endTime
=
(
5
-
diff
)
*
30
*
1000
;
return
;
return
;
...
@@ -193,122 +220,99 @@ Bonus::~Bonus () {
...
@@ -193,122 +220,99 @@ Bonus::~Bonus () {
SDL_FreeSurface
(
tileSet
);
SDL_FreeSurface
(
tileSet
);
font
mn1
->
restorePalette
();
font
sFont
->
restorePalette
();
return
;
return
;
}
}
int
Bonus
::
play
()
{
int
Bonus
::
step
()
{
const
char
*
options
[
3
]
=
{
"continue game"
,
"setup options"
,
"quit game"
};
fixed
playerX
,
playerY
;
PaletteEffect
*
levelPE
;
int
gridX
,
gridY
;
bool
pmenu
,
pmessage
;
int
stats
,
option
;
SDL_Rect
src
,
dst
;
int
x
,
y
;
int
msps
;
int
msps
;
int
count
;
// Milliseconds per step
msps
=
ticks
-
prevStepTicks
;
prevStepTicks
=
ticks
;
tickOffset
=
globalTicks
;
ticks
=
16
;
prevStepTicks
=
0
;
pmessage
=
pmenu
=
false
;
option
=
0
;
stats
=
S_NONE
;
// Arbitrary position
localPlayer
->
setPosition
(
TTOF
(
32
)
+
F16
,
TTOF
(
7
)
+
F16
);
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
// Check if time has run out
if
(
ticks
>
endTime
)
return
LOST
;
if
(
controls
.
release
(
C_ESCAPE
))
{
pmenu
=
!
pmenu
;
// Apply controls to local player
option
=
0
;
for
(
count
=
0
;
count
<
PCONTROLS
;
count
++
)
localPlayer
->
setControl
(
count
,
controls
.
getState
(
count
));
}
// Process players
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
{
if
(
controls
.
release
(
C_PAUSE
))
pmessage
=
!
pmessage
;
players
[
count
].
bonusStep
(
ticks
,
msps
)
;
if
(
controls
.
release
(
C_STATS
))
{
playerX
=
players
[
count
].
getX
();
playerY
=
players
[
count
].
getY
();
if
(
!
gameMode
)
stats
^=
S_SCREEN
;
gridX
=
FTOT
(
playerX
)
;
else
stats
=
(
stats
+
1
)
&
3
;
gridY
=
FTOT
(
playerY
)
;
}
if
((
playerX
>
TTOF
(
gridX
)
+
F12
)
&&
(
playerX
<
TTOF
(
gridX
)
+
F20
)
&&
(
playerY
>
TTOF
(
gridY
)
+
F12
)
&&
(
playerY
<
TTOF
(
gridY
)
+
F20
))
{
if
(
pmenu
)
{
while
(
gridX
<
0
)
gridX
+=
BLW
;
while
(
gridY
<
0
)
gridY
+=
BLH
;
// Deal with menu controls
switch
(
events
[
gridY
][
gridX
])
{
if
(
controls
.
release
(
C_UP
))
option
=
(
option
+
2
)
%
3
;
case
1
:
// Extra time
if
(
controls
.
release
(
C_DOWN
))
option
=
(
option
+
1
)
%
3
;
addTimer
();
events
[
gridY
][
gridX
]
=
0
;
if
(
controls
.
release
(
C_ENTER
))
{
break
;
switch
(
option
)
{
case
2
:
// Gem
case
0
:
// Continue
players
[
count
].
addItem
();
events
[
gridY
][
gridX
]
=
0
;
pmenu
=
false
;
if
(
players
[
count
].
getItems
()
>=
items
)
return
WON
;
break
;
break
;
case
1
:
// Setup
case
3
:
// Hand
if
(
!
gameMode
)
{
players
[
count
].
setSpeed
(
0
,
0
);
// Don't want palette effects in setup menu
break
;
levelPE
=
firstPE
;
firstPE
=
NULL
;
if
(
menu
->
setup
()
==
E_QUIT
)
return
E_QUIT
;
case
4
:
// Exit
// Restore level palette
return
LOST
;
usePalette
(
palette
);
// Restore palette effects
default
:
firstPE
=
levelPE
;
}
// Do nothing
break
;
break
;
case
2
:
// Quit game
return
E_NONE
;
}
}
}
}
}
}
if
(
!
gameMode
)
paused
=
pmessage
||
pmenu
;
return
E_NONE
;
timeCalcs
();
// Milliseconds per step
msps
=
ticks
-
prevStepTicks
;
prevStepTicks
=
ticks
;
if
(
!
paused
)
{
}
// Apply controls to local player
for
(
x
=
0
;
x
<
PCONTROLS
;
x
++
)
localPlayer
->
setControl
(
x
,
controls
.
getState
(
x
));
// Process players
void
Bonus
::
draw
()
{
for
(
x
=
0
;
x
<
nPlayers
;
x
++
)
players
[
x
].
bonusStep
(
ticks
,
msps
);
}
SDL_Rect
src
,
dst
;
int
x
,
y
;
src
.
x
=
0
;
src
.
x
=
0
;
src
.
w
=
32
;
src
.
w
=
32
;
...
@@ -379,19 +383,151 @@ int Bonus::play () {
...
@@ -379,19 +383,151 @@ int Bonus::play () {
drawRect
((
canvasW
>>
1
)
-
4
,
(
canvasH
>>
1
)
-
4
,
8
,
8
,
22
);
drawRect
((
canvasW
>>
1
)
-
4
,
(
canvasH
>>
1
)
-
4
,
8
,
8
,
22
);
// Show gem count
fontsFont
->
showString
(
"x"
,
15
,
0
);
fontsFont
->
showNumber
(
localPlayer
->
getItems
(),
64
,
0
);
fontsFont
->
showNumber
(
items
,
117
,
0
);
// Show time remaining
// Show time remaining
if
(
endTime
>
ticks
)
x
=
endTime
-
ticks
;
if
(
endTime
>
ticks
)
x
=
(
endTime
-
ticks
)
/
1000
;
else
x
=
0
;
else
x
=
0
;
y
=
x
/
(
60
*
1000
);
fontsFont
->
showNumber
(
x
/
60
,
242
,
0
);
fontmn1
->
showNumber
(
y
,
144
,
8
);
fontsFont
->
showNumber
(
x
%
60
,
286
,
0
);
x
-=
(
y
*
60
*
1000
);
y
=
x
/
1000
;
fontmn1
->
showNumber
(
y
,
192
,
8
);
return
;
}
int
Bonus
::
play
()
{
const
char
*
options
[
3
]
=
{
"continue game"
,
"setup options"
,
"quit game"
};
PaletteEffect
*
levelPE
;
bool
pmenu
,
pmessage
;
int
stats
,
option
;
unsigned
int
returnTime
;
int
count
;
tickOffset
=
globalTicks
;
ticks
=
16
;
prevStepTicks
=
0
;
pmessage
=
pmenu
=
false
;
option
=
0
;
stats
=
S_NONE
;
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
if
(
controls
.
release
(
C_ESCAPE
))
{
pmenu
=
!
pmenu
;
option
=
0
;
}
if
(
controls
.
release
(
C_PAUSE
))
pmessage
=
!
pmessage
;
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
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
;
}
}
}
if
(
!
gameMode
)
paused
=
pmessage
||
pmenu
;
timeCalcs
();
// Check if level has been won
if
(
returnTime
&&
(
ticks
>
returnTime
))
{
if
(
localPlayer
->
getItems
()
>=
items
)
return
WON
;
return
LOST
;
}
// Process frame-by-frame activity
if
(
!
paused
&&
(
ticks
>=
prevStepTicks
+
16
)
&&
(
stage
==
LS_NORMAL
))
{
count
=
step
();
if
(
count
<
0
)
return
count
;
else
if
(
count
)
{
stage
=
LS_END
;
firstPE
=
new
WhiteOutPaletteEffect
(
T_BONUS_END
,
firstPE
);
returnTime
=
ticks
+
T_BONUS_END
;
}
}
// Draw the graphics
draw
();
// If paused, draw "PAUSE"
// If paused, draw "PAUSE"
if
(
p
aused
&&
!
pmenu
)
if
(
p
message
&&
!
pmenu
)
font
mn1
->
showString
(
"pause"
,
(
canvasW
>>
1
)
-
44
,
32
);
font
sFont
->
showString
(
"pause"
,
(
canvasW
>>
1
)
-
44
,
32
);
// Draw statistics
// Draw statistics
drawStats
(
stats
);
drawStats
(
stats
);
...
@@ -403,12 +539,12 @@ int Bonus::play () {
...
@@ -403,12 +539,12 @@ int Bonus::play () {
drawRect
((
canvasW
>>
2
)
-
8
,
(
canvasH
>>
1
)
-
46
,
144
,
60
,
0
);
drawRect
((
canvasW
>>
2
)
-
8
,
(
canvasH
>>
1
)
-
46
,
144
,
60
,
0
);
for
(
x
=
0
;
x
<
3
;
x
++
)
{
for
(
count
=
0
;
count
<
3
;
count
++
)
{
if
(
x
==
option
)
fontmn2
->
mapPalette
(
240
,
8
,
31
,
16
);
if
(
count
==
option
)
fontmn2
->
mapPalette
(
240
,
8
,
31
,
16
);
else
fontmn2
->
mapPalette
(
240
,
8
,
0
,
16
);
else
fontmn2
->
mapPalette
(
240
,
8
,
0
,
16
);
fontmn2
->
showString
(
options
[
x
],
canvasW
>>
2
,
(
canvasH
>>
1
)
+
(
x
<<
4
)
-
38
);
fontmn2
->
showString
(
options
[
count
],
canvasW
>>
2
,
(
canvasH
>>
1
)
+
(
count
<<
4
)
-
38
);
}
}
...
...
src/bonus/bonus.h
View file @
40768f56
...
@@ -34,6 +34,8 @@
...
@@ -34,6 +34,8 @@
#define BLW 256
/* Bonus level width */
#define BLW 256
/* Bonus level width */
#define BLH 256
/* Bonus level height */
#define BLH 256
/* Bonus level height */
#define T_BONUS_END 1500
// Class
// Class
...
@@ -44,6 +46,8 @@ class Bonus : public BaseLevel {
...
@@ -44,6 +46,8 @@ class Bonus : public BaseLevel {
unsigned
char
events
[
BLH
][
BLW
];
unsigned
char
events
[
BLH
][
BLW
];
int
loadTiles
(
char
*
fileName
);
int
loadTiles
(
char
*
fileName
);
int
step
();
void
draw
();
public
:
public
:
Bonus
(
char
*
fileName
,
unsigned
char
diff
);
Bonus
(
char
*
fileName
,
unsigned
char
diff
);
...
...
src/game/game.cpp
View file @
40768f56
...
@@ -148,6 +148,22 @@ int Game::play () {
...
@@ -148,6 +148,22 @@ int Game::play () {
levelRet
=
level
->
play
();
levelRet
=
level
->
play
();
if
(
levelRet
<
0
)
{
delete
level
;
return
levelRet
;
}
else
if
(
levelRet
==
E_NONE
)
{
delete
level
;
playMusic
(
"menusng.psm"
);
return
E_NONE
;
}
}
else
levelRet
=
WON
;
}
else
levelRet
=
WON
;
...
@@ -165,34 +181,73 @@ int Game::play () {
...
@@ -165,34 +181,73 @@ int Game::play () {
}
}
if
(
levelFile
)
{
delete
[]
bonusFile
;
delete
[]
bonusFile
;
bonusFile
=
NULL
;
bonusFile
=
NULL
;
}
bonusRet
=
bonus
->
play
();
bonusRet
=
bonus
->
play
();
delete
bonus
;
delete
bonus
;
if
(
bonusRet
==
E_QUIT
)
return
E_QUIT
;
if
(
bonusRet
==
E_QUIT
)
{
if
(
bonusRet
==
E_NONE
)
return
E_NONE
;
if
(
level
)
delete
level
;
return
E_QUIT
;
}
else
if
(
bonusRet
==
E_NONE
)
{
if
(
level
)
delete
level
;
playMusic
(
"menusng.psm"
);
return
E_NONE
;
}
else
if
(
bonusRet
==
WON
)
{
try
{
scene
=
new
Scene
(
F_BONUS_0SC
);
}
catch
(
int
e
)
{
scene
=
NULL
;
}
}
if
(
scene
)
{
if
(
!
level
)
continue
;
if
(
scene
->
play
()
==
E_QUIT
)
{
delete
scene
;
switch
(
levelRet
)
{
if
(
level
)
delete
level
;
case
E_NONE
:
// Quit game
return
E_QUIT
;
delete
level
;
}
playMusic
(
"menusng.psm"
);
delete
scene
;
return
E_NONE
;
}
case
WON
:
// Completed level
// If part of a bonus-only game, go to next level
if
(
!
level
)
setBonus
((
bonusFile
[
10
]
*
10
)
+
bonusFile
[
11
]
-
527
);
}
}
if
(
!
level
)
continue
;
if
(
levelRet
==
WON
)
{
// Won the level
// If there is no next level, load and play the cutscene
// If there is no next level, load and play the cutscene
if
(
!
levelFile
)
{
if
(
!
levelFile
)
{
...
@@ -201,40 +256,40 @@ int Game::play () {
...
@@ -201,40 +256,40 @@ int Game::play () {
delete
level
;
delete
level
;
scene
->
play
();
if
(
scene
)
{
if
(
scene
->
play
()
==
E_QUIT
)
{
delete
scene
;
delete
scene
;
return
E_NONE
;
return
E_QUIT
;
}
}
delete
level
;
delete
scene
;
}
return
E_NONE
;
}
// Do not use old level's checkpoint coordinates
// Do not use old level's checkpoint coordinates
checkpoint
=
false
;
checkpoint
=
false
;
break
;
}
else
{
case
LOST
:
// Lost level
delete
level
;
// Lost the level
if
(
!
localPlayer
->
getLives
())
return
E_NONE
;
// Not really a success...
if
(
!
localPlayer
->
getLives
())
return
E_NONE
;
// Use checkpoint coordinates
// Use checkpoint coordinates
checkpoint
=
true
;
checkpoint
=
true
;
break
;
}
default
:
// Error
delete
level
;
delete
level
;
return
levelRet
;
}
}
}
return
E_NONE
;
return
E_NONE
;
...
@@ -294,10 +349,10 @@ void Game::setCheckpoint (unsigned char gridX, unsigned char gridY) {
...
@@ -294,10 +349,10 @@ void Game::setCheckpoint (unsigned char gridX, unsigned char gridY) {
}
}
void
Game
::
resetPlayer
(
Player
*
player
)
{
void
Game
::
resetPlayer
(
Player
*
player
,
bool
bonus
)
{
player
->
reset
();
player
->
reset
();
player
->
setPosition
(
TTOF
(
checkX
)
,
TTOF
(
checkY
));
player
->
setPosition
(
TTOF
(
checkX
)
+
(
bonus
?
F16
:
0
),
TTOF
(
checkY
)
+
(
bonus
?
F16
:
0
));
return
;
return
;
...
...
src/game/game.h
View file @
40768f56
...
@@ -105,7 +105,7 @@ class Game {
...
@@ -105,7 +105,7 @@ class Game {
virtual
int
step
(
unsigned
int
ticks
);
virtual
int
step
(
unsigned
int
ticks
);
virtual
void
score
(
unsigned
char
team
);
virtual
void
score
(
unsigned
char
team
);
virtual
void
setCheckpoint
(
unsigned
char
gridX
,
unsigned
char
gridY
);
virtual
void
setCheckpoint
(
unsigned
char
gridX
,
unsigned
char
gridY
);
void
resetPlayer
(
Player
*
player
);
void
resetPlayer
(
Player
*
player
,
bool
bonus
);
};
};
...
...
src/game/gamemode.cpp
View file @
40768f56
...
@@ -105,7 +105,7 @@ unsigned char FreeForAllGameMode::chooseTeam () {
...
@@ -105,7 +105,7 @@ unsigned char FreeForAllGameMode::chooseTeam () {
void
FreeForAllGameMode
::
drawScore
()
{
void
FreeForAllGameMode
::
drawScore
()
{
font
mn1
->
showNumber
(
localPlayer
->
teamScore
,
64
,
4
);
font
sFont
->
showNumber
(
localPlayer
->
teamScore
,
64
,
4
);
return
;
return
;
...
@@ -140,7 +140,7 @@ unsigned char TeamGameMode::chooseTeam () {
...
@@ -140,7 +140,7 @@ unsigned char TeamGameMode::chooseTeam () {
void
TeamGameMode
::
drawScore
()
{
void
TeamGameMode
::
drawScore
()
{
font
mn1
->
showNumber
(
localPlayer
->
teamScore
,
64
,
4
);
font
sFont
->
showNumber
(
localPlayer
->
teamScore
,
64
,
4
);
return
;
return
;
...
@@ -199,7 +199,7 @@ bool RaceGameMode::endOfLevel (Player *player, unsigned char gridX,
...
@@ -199,7 +199,7 @@ bool RaceGameMode::endOfLevel (Player *player, unsigned char gridX,
if
(
player
==
localPlayer
)
game
->
score
(
player
->
getTeam
());
if
(
player
==
localPlayer
)
game
->
score
(
player
->
getTeam
());
game
->
resetPlayer
(
player
);
game
->
resetPlayer
(
player
,
false
);
return
false
;
return
false
;
...
...
src/io/gfx/font.cpp
View file @
40768f56
...
@@ -36,7 +36,7 @@
...
@@ -36,7 +36,7 @@
Font
::
Font
(
const
char
*
fileName
)
{
Font
::
Font
(
const
char
*
fileName
)
{
File
*
file
;
File
*
file
;
unsigned
char
*
pixels
;
unsigned
char
*
pixels
,
*
blank
;
int
fileSize
;
int
fileSize
;
int
count
,
size
,
width
,
height
;
int
count
,
size
,
width
,
height
;
...
@@ -52,30 +52,24 @@ Font::Font (const char * fileName) {
...
@@ -52,30 +52,24 @@ Font::Font (const char * fileName) {
}
}
fileSize
=
file
->
getSize
();
file
->
seek
(
20
,
true
);
nCharacters
=
128
;
lineHeight
=
file
->
loadChar
()
<<
1
;
// Create the first character
pixels
=
new
unsigned
char
[
3
*
lineHeight
];
memset
(
pixels
,
0
,
3
*
lineHeight
);
file
->
seek
(
20
,
true
);
characters
[
0
]
=
createSurface
(
pixels
,
3
,
lineHeight
);
lineHeight
=
file
->
loadChar
()
<<
1
;
SDL_SetColorKey
(
characters
[
0
],
SDL_SRCCOLORKEY
,
0
);
delete
[]
pixels
;
// Create blank character data
// Create remaining characters
blank
=
new
unsigned
char
[
3
];
memset
(
blank
,
0
,
3
);
fileSize
=
file
->
getSize
();
nCharacters
=
128
;
file
->
seek
(
23
,
true
);
// Load characters
for
(
count
=
1
;
count
<
128
;
count
++
)
{
for
(
count
=
0
;
count
<
128
;
count
++
)
{
size
=
file
->
loadShort
();
size
=
file
->
loadShort
();
...
@@ -97,14 +91,17 @@ Font::Font (const char * fileName) {
...
@@ -97,14 +91,17 @@ Font::Font (const char * fileName) {
height
+=
pixels
[
3
]
<<
8
;
height
+=
pixels
[
3
]
<<
8
;
characters
[
count
]
=
createSurface
(
pixels
+
4
,
width
,
height
);
characters
[
count
]
=
createSurface
(
pixels
+
4
,
width
,
height
);
SDL_SetColorKey
(
characters
[
count
],
SDL_SRCCOLORKEY
,
0
);
delete
[]
pixels
;
delete
[]
pixels
;
}
else
characters
[
count
]
=
createSurface
(
NULL
,
1
,
1
);
}
else
characters
[
count
]
=
createSurface
(
blank
,
3
,
1
);
SDL_SetColorKey
(
characters
[
count
],
SDL_SRCCOLORKEY
,
0
);
}
}
delete
[]
blank
;
delete
file
;
delete
file
;
...
@@ -174,18 +171,19 @@ Font::Font (unsigned char *pixels, bool big) {
...
@@ -174,18 +171,19 @@ Font::Font (unsigned char *pixels, bool big) {
delete
[]
chrPixels
;
delete
[]
chrPixels
;
// Create ASCII->font map
if
(
big
)
{
if
(
big
)
{
// Goes " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-:."
// Goes " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-:."
// Create ASCII->font map
for
(
count
=
0
;
count
<
45
;
count
++
)
map
[
count
]
=
0
;
for
(
count
=
0
;
count
<
45
;
count
++
)
map
[
count
]
=
0
;
map
[
45
]
=
37
;
map
[
count
++
]
=
37
;
map
[
46
]
=
39
;
map
[
count
++
]
=
39
;
for
(
count
=
47
;
count
<
48
;
count
++
)
map
[
count
]
=
0
;
for
(;
count
<
48
;
count
++
)
map
[
count
]
=
0
;
for
(;
count
<
58
;
count
++
)
map
[
count
]
=
count
-
47
;
for
(;
count
<
58
;
count
++
)
map
[
count
]
=
count
-
47
;
map
[
58
]
=
38
;
map
[
count
++
]
=
38
;
for
(
count
=
59
;
count
<
65
;
count
++
)
map
[
count
]
=
0
;
for
(;
count
<
65
;
count
++
)
map
[
count
]
=
0
;
for
(;
count
<
91
;
count
++
)
map
[
count
]
=
count
-
54
;
for
(;
count
<
91
;
count
++
)
map
[
count
]
=
count
-
54
;
for
(;
count
<
97
;
count
++
)
map
[
count
]
=
0
;
for
(;
count
<
97
;
count
++
)
map
[
count
]
=
0
;
for
(;
count
<
123
;
count
++
)
map
[
count
]
=
count
-
86
;
for
(;
count
<
123
;
count
++
)
map
[
count
]
=
count
-
86
;
...
@@ -194,10 +192,9 @@ Font::Font (unsigned char *pixels, bool big) {
...
@@ -194,10 +192,9 @@ Font::Font (unsigned char *pixels, bool big) {
}
else
{
}
else
{
// Goes " 0123456789oo" (where oo = infinity)
// Goes " 0123456789oo" (where oo = infinity)
// Use :; to represent the infinity symbol
// Create ASCII->font map
for
(
count
=
0
;
count
<
48
;
count
++
)
map
[
count
]
=
0
;
for
(
count
=
0
;
count
<
48
;
count
++
)
map
[
count
]
=
0
;
// Use :; to represent the infinity symbol
for
(;
count
<
60
;
count
++
)
map
[
count
]
=
count
-
47
;
for
(;
count
<
60
;
count
++
)
map
[
count
]
=
count
-
47
;
for
(;
count
<
128
;
count
++
)
map
[
count
]
=
0
;
for
(;
count
<
128
;
count
++
)
map
[
count
]
=
0
;
...
@@ -208,6 +205,98 @@ Font::Font (unsigned char *pixels, bool big) {
...
@@ -208,6 +205,98 @@ Font::Font (unsigned char *pixels, bool big) {
}
}
Font
::
Font
()
{
File
*
file
;
unsigned
char
*
pixels
,
*
sorted
;
int
fileSize
;
int
count
,
width
,
height
;
// Load font from FONTS.000
try
{
file
=
new
File
(
F_FONTS
,
false
);
}
catch
(
int
e
)
{
throw
e
;
}
fileSize
=
file
->
getSize
();
nCharacters
=
file
->
loadShort
();
// Load characters
for
(
count
=
0
;
count
<
nCharacters
;
count
++
)
{
width
=
file
->
loadShort
()
<<
2
;
height
=
file
->
loadShort
();
file
->
seek
(
4
,
false
);
if
(
file
->
tell
()
>=
fileSize
)
{
nCharacters
=
count
;
break
;
}
pixels
=
file
->
loadBlock
(
width
*
height
);
sorted
=
sortPixels
(
pixels
,
width
*
height
);
characters
[
count
]
=
createSurface
(
sorted
,
width
,
height
);
SDL_SetColorKey
(
characters
[
count
],
SDL_SRCCOLORKEY
,
254
);
delete
[]
sorted
;
delete
[]
pixels
;
}
delete
file
;
lineHeight
=
characters
[
0
]
->
h
;
// Create blank character data
pixels
=
new
unsigned
char
[
3
];
memset
(
pixels
,
254
,
3
);
characters
[
nCharacters
]
=
createSurface
(
pixels
,
3
,
1
);
SDL_SetColorKey
(
characters
[
nCharacters
],
SDL_SRCCOLORKEY
,
254
);
delete
[]
pixels
;
// Create ASCII->font map
for
(
count
=
0
;
count
<
37
;
count
++
)
map
[
count
]
=
nCharacters
;
map
[
count
++
]
=
36
;
for
(;
count
<
48
;
count
++
)
map
[
count
]
=
nCharacters
;
for
(;
count
<
58
;
count
++
)
map
[
count
]
=
count
-
22
;
for
(;
count
<
65
;
count
++
)
map
[
count
]
=
nCharacters
;
for
(;
count
<
91
;
count
++
)
map
[
count
]
=
count
-
65
;
for
(;
count
<
97
;
count
++
)
map
[
count
]
=
nCharacters
;
for
(;
count
<
123
;
count
++
)
map
[
count
]
=
count
-
97
;
for
(;
count
<
128
;
count
++
)
map
[
count
]
=
nCharacters
;
nCharacters
++
;
for
(
count
=
0
;
count
<
128
;
count
++
)
{
if
(
map
[
count
]
>=
nCharacters
)
map
[
count
]
=
0
;
}
return
;
}
Font
::~
Font
()
{
Font
::~
Font
()
{
int
count
;
int
count
;
...
...
src/io/gfx/font.h
View file @
40768f56
...
@@ -44,6 +44,7 @@ class Font {
...
@@ -44,6 +44,7 @@ class Font {
public
:
public
:
Font
(
const
char
*
fileName
);
Font
(
const
char
*
fileName
);
Font
(
unsigned
char
*
pixels
,
bool
big
);
Font
(
unsigned
char
*
pixels
,
bool
big
);
Font
();
~
Font
();
~
Font
();
int
showString
(
const
char
*
s
,
int
x
,
int
y
);
int
showString
(
const
char
*
s
,
int
x
,
int
y
);
...
@@ -57,6 +58,7 @@ class Font {
...
@@ -57,6 +58,7 @@ class Font {
};
};
// Variables
// Variables
EXTERN
Font
*
font2
;
/* Taken from .0FN file name */
EXTERN
Font
*
font2
;
/* Taken from .0FN file name */
...
@@ -64,8 +66,9 @@ EXTERN Font *fontbig; /* Taken from .0FN file name */
...
@@ -64,8 +66,9 @@ EXTERN Font *fontbig; /* Taken from .0FN file name */
EXTERN
Font
*
fontiny
;
/* Taken from .0FN file name */
EXTERN
Font
*
fontiny
;
/* Taken from .0FN file name */
EXTERN
Font
*
fontmn1
;
/* Taken from .0FN file name */
EXTERN
Font
*
fontmn1
;
/* Taken from .0FN file name */
EXTERN
Font
*
fontmn2
;
/* Taken from .0FN file name */
EXTERN
Font
*
fontmn2
;
/* Taken from .0FN file name */
EXTERN
Font
*
panelBigFont
;
/* Not a font file, found in PANEL.000 */
EXTERN
Font
*
panelBigFont
;
/* Found in PANEL.000 */
EXTERN
Font
*
panelSmallFont
;
/* Not a font file, found in PANEL.000 */
EXTERN
Font
*
panelSmallFont
;
/* Found in PANEL.000 */
EXTERN
Font
*
fontsFont
;
/* Found in FONTS.000 */
#endif
#endif
src/io/gfx/sprite.cpp
View file @
40768f56
...
@@ -60,11 +60,17 @@ void Sprite::clearPixels () {
...
@@ -60,11 +60,17 @@ void Sprite::clearPixels () {
void
Sprite
::
setPixels
(
unsigned
char
*
data
,
int
width
,
int
height
)
{
void
Sprite
::
setPixels
(
unsigned
char
*
data
,
int
width
,
int
height
)
{
unsigned
char
*
sorted
;
if
(
pixels
)
SDL_FreeSurface
(
pixels
);
if
(
pixels
)
SDL_FreeSurface
(
pixels
);
pixels
=
createSurface
(
data
,
width
,
height
);
sorted
=
sortPixels
(
data
,
width
*
height
);
pixels
=
createSurface
(
sorted
,
width
,
height
);
SDL_SetColorKey
(
pixels
,
SDL_SRCCOLORKEY
,
SKEY
);
SDL_SetColorKey
(
pixels
,
SDL_SRCCOLORKEY
,
SKEY
);
delete
[]
sorted
;
return
;
return
;
}
}
...
...
src/io/gfx/video.cpp
View file @
40768f56
...
@@ -31,6 +31,25 @@
...
@@ -31,6 +31,25 @@
#include <string.h>
#include <string.h>
unsigned
char
*
sortPixels
(
unsigned
char
*
pixels
,
int
length
)
{
unsigned
char
*
sorted
;
int
count
;
sorted
=
new
unsigned
char
[
length
];
// Rearrange pixels in correct order
for
(
count
=
0
;
count
<
length
;
count
++
)
{
sorted
[
count
]
=
pixels
[(
count
>>
2
)
+
((
count
&
3
)
*
(
length
>>
2
))];
}
return
sorted
;
}
SDL_Surface
*
createSurface
(
unsigned
char
*
pixels
,
int
width
,
int
height
)
{
SDL_Surface
*
createSurface
(
unsigned
char
*
pixels
,
int
width
,
int
height
)
{
SDL_Surface
*
ret
;
SDL_Surface
*
ret
;
...
...
src/io/gfx/video.h
View file @
40768f56
...
@@ -75,6 +75,7 @@ EXTERN SDL_Surface *panelAmmo[5];
...
@@ -75,6 +75,7 @@ EXTERN SDL_Surface *panelAmmo[5];
// Functions
// Functions
EXTERN
unsigned
char
*
sortPixels
(
unsigned
char
*
pixels
,
int
length
);
EXTERN
SDL_Surface
*
createSurface
(
unsigned
char
*
pixels
,
int
width
,
int
height
);
EXTERN
SDL_Surface
*
createSurface
(
unsigned
char
*
pixels
,
int
width
,
int
height
);
EXTERN
void
createScreen
();
EXTERN
void
createScreen
();
EXTERN
void
usePalette
(
SDL_Color
*
palette
);
EXTERN
void
usePalette
(
SDL_Color
*
palette
);
...
...
src/level/demolevel.cpp
View file @
40768f56
...
@@ -171,7 +171,7 @@ int DemoLevel::play () {
...
@@ -171,7 +171,7 @@ int DemoLevel::play () {
drawStats
(
stats
);
drawStats
(
stats
);
font
mn1
->
showString
(
"demo"
,
(
canvasW
>>
1
)
-
36
,
32
);
font
sFont
->
showString
(
"demo"
,
(
canvasW
>>
1
)
-
36
,
32
);
}
}
...
...
src/level/level.cpp
View file @
40768f56
...
@@ -130,8 +130,6 @@ Level::~Level () {
...
@@ -130,8 +130,6 @@ Level::~Level () {
delete
[]
spriteSet
;
delete
[]
spriteSet
;
fontmn1
->
restorePalette
();
delete
[]
sceneFile
;
delete
[]
sceneFile
;
return
;
return
;
...
@@ -371,31 +369,6 @@ Anim * Level::getMiscAnim (unsigned char anim) {
...
@@ -371,31 +369,6 @@ Anim * Level::getMiscAnim (unsigned char anim) {
}
}
void
Level
::
addTimer
()
{
unsigned
char
buffer
[
MTL_L_PROP
];
if
(
stage
!=
LS_NORMAL
)
return
;
endTime
+=
2
*
60
*
1000
;
// 2 minutes. Is this right?
if
(
gameMode
)
{
buffer
[
0
]
=
MTL_L_PROP
;
buffer
[
1
]
=
MT_L_PROP
;
buffer
[
2
]
=
2
;
// add timer
buffer
[
3
]
=
0
;
buffer
[
4
]
=
0
;
// Don't really matter
game
->
send
(
buffer
);
}
return
;
}
void
Level
::
setWaterLevel
(
unsigned
char
gridY
)
{
void
Level
::
setWaterLevel
(
unsigned
char
gridY
)
{
unsigned
char
buffer
[
MTL_L_PROP
];
unsigned
char
buffer
[
MTL_L_PROP
];
...
@@ -418,6 +391,7 @@ void Level::setWaterLevel (unsigned char gridY) {
...
@@ -418,6 +391,7 @@ void Level::setWaterLevel (unsigned char gridY) {
}
}
fixed
Level
::
getWaterLevel
()
{
fixed
Level
::
getWaterLevel
()
{
return
waterLevel
;
return
waterLevel
;
...
@@ -465,8 +439,16 @@ LevelStage Level::getStage () {
...
@@ -465,8 +439,16 @@ LevelStage Level::getStage () {
Scene
*
Level
::
createScene
()
{
Scene
*
Level
::
createScene
()
{
try
{
return
new
Scene
(
sceneFile
);
return
new
Scene
(
sceneFile
);
}
catch
(
int
e
)
{
return
NULL
;
}
}
}
...
@@ -626,7 +608,6 @@ int Level::play () {
...
@@ -626,7 +608,6 @@ int Level::play () {
timeCalcs
();
timeCalcs
();
// Check if level has been won
// Check if level has been won
if
(
game
&&
returnTime
&&
(
ticks
>
returnTime
))
{
if
(
game
&&
returnTime
&&
(
ticks
>
returnTime
))
{
...
@@ -648,35 +629,15 @@ int Level::play () {
...
@@ -648,35 +629,15 @@ int Level::play () {
// Process frame-by-frame activity
// Process frame-by-frame activity
if
(
!
paused
)
{
if
(
!
paused
&&
(
ticks
>=
prevStepTicks
+
16
)
)
{
// Apply controls to local player
// Apply controls to local player
for
(
count
=
0
;
count
<
PCONTROLS
;
count
++
)
for
(
count
=
0
;
count
<
PCONTROLS
;
count
++
)
localPlayer
->
setControl
(
count
,
controls
.
getState
(
count
));
localPlayer
->
setControl
(
count
,
controls
.
getState
(
count
));
// Process step
if
(
ticks
>=
prevStepTicks
+
16
)
{
count
=
step
();
count
=
step
();
if
(
count
<
0
)
return
count
;
if
(
count
)
return
count
;
}
// Handle player reactions
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
{
if
(
players
[
count
].
reacted
(
ticks
)
==
PR_KILLED
)
{
if
(
!
gameMode
)
return
LOST
;
game
->
resetPlayer
(
players
+
count
);
}
}
}
}
...
@@ -687,8 +648,8 @@ int Level::play () {
...
@@ -687,8 +648,8 @@ int Level::play () {
// If paused, draw "PAUSE"
// If paused, draw "PAUSE"
if
(
p
aused
&&
!
pmenu
)
if
(
p
message
&&
!
pmenu
)
font
mn1
->
showString
(
"pause"
,
(
canvasW
>>
1
)
-
44
,
32
);
font
sFont
->
showString
(
"pause"
,
(
canvasW
>>
1
)
-
44
,
32
);
// If this is a competitive game, draw the score
// If this is a competitive game, draw the score
...
@@ -744,28 +705,30 @@ int Level::play () {
...
@@ -744,28 +705,30 @@ int Level::play () {
// Display statistics & bonuses
// Display statistics & bonuses
// TODO: Display percentage symbol
// TODO: Display percentage symbol
font
mn1
->
showString
(
"time"
,
(
canvasW
>>
1
)
-
152
,
(
canvasH
>>
1
)
-
60
);
font
sFont
->
showString
(
"time"
,
(
canvasW
>>
1
)
-
152
,
(
canvasH
>>
1
)
-
60
);
font
mn1
->
showNumber
(
timeBonus
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
60
);
font
sFont
->
showNumber
(
timeBonus
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
60
);
font
mn1
->
showString
(
"enemies"
,
(
canvasW
>>
1
)
-
152
,
(
canvasH
>>
1
)
-
40
);
font
sFont
->
showString
(
"enemies"
,
(
canvasW
>>
1
)
-
152
,
(
canvasH
>>
1
)
-
40
);
if
(
enemies
)
if
(
enemies
)
font
mn1
->
showNumber
((
localPlayer
->
getEnemies
()
*
100
)
/
enemies
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
40
);
font
sFont
->
showNumber
((
localPlayer
->
getEnemies
()
*
100
)
/
enemies
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
40
);
else
else
fontmn1
->
showNumber
(
0
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
40
);
fontsFont
->
showNumber
(
0
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
40
);
fontsFont
->
showString
(
"%"
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
40
);
font
mn1
->
showString
(
"items"
,
(
canvasW
>>
1
)
-
152
,
(
canvasH
>>
1
)
-
20
);
font
sFont
->
showString
(
"items"
,
(
canvasW
>>
1
)
-
152
,
(
canvasH
>>
1
)
-
20
);
if
(
items
)
if
(
items
)
font
mn1
->
showNumber
((
localPlayer
->
getItems
()
*
100
)
/
items
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
20
);
font
sFont
->
showNumber
((
localPlayer
->
getItems
()
*
100
)
/
items
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
20
);
else
else
fontmn1
->
showNumber
(
0
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
20
);
fontsFont
->
showNumber
(
0
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
20
);
fontsFont
->
showString
(
"%"
,
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
-
20
);
font
mn1
->
showString
(
"perfect"
,
(
canvasW
>>
1
)
-
152
,
canvasH
>>
1
);
font
sFont
->
showString
(
"perfect"
,
(
canvasW
>>
1
)
-
152
,
canvasH
>>
1
);
font
mn1
->
showNumber
(
perfect
,
(
canvasW
>>
1
)
+
124
,
canvasH
>>
1
);
font
sFont
->
showNumber
(
perfect
,
(
canvasW
>>
1
)
+
124
,
canvasH
>>
1
);
font
mn1
->
showString
(
"score"
,
(
canvasW
>>
1
)
-
152
,
(
canvasH
>>
1
)
+
40
);
font
sFont
->
showString
(
"score"
,
(
canvasW
>>
1
)
-
152
,
(
canvasH
>>
1
)
+
40
);
font
mn1
->
showNumber
(
localPlayer
->
getScore
(),
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
+
40
);
font
sFont
->
showNumber
(
localPlayer
->
getScore
(),
(
canvasW
>>
1
)
+
124
,
(
canvasH
>>
1
)
+
40
);
}
}
...
...
src/level/level.h
View file @
40768f56
...
@@ -57,15 +57,6 @@
...
@@ -57,15 +57,6 @@
#define T_END 1000
#define T_END 1000
// Enum
enum
LevelStage
{
LS_NORMAL
=
0
,
LS_SUDDENDEATH
=
1
,
LS_END
=
2
};
// Datatypes
// Datatypes
typedef
struct
{
typedef
struct
{
...
@@ -119,7 +110,6 @@ class Level : public BaseLevel {
...
@@ -119,7 +110,6 @@ class Level : public BaseLevel {
fixed
waterLevelTarget
;
fixed
waterLevelTarget
;
fixed
waterLevelSpeed
;
fixed
waterLevelSpeed
;
fixed
energyBar
;
fixed
energyBar
;
LevelStage
stage
;
int
loadSprites
(
char
*
fileName
);
int
loadSprites
(
char
*
fileName
);
int
loadTiles
(
char
*
fileName
);
int
loadTiles
(
char
*
fileName
);
...
@@ -153,7 +143,6 @@ class Level : public BaseLevel {
...
@@ -153,7 +143,6 @@ class Level : public BaseLevel {
Sprite
*
getSprite
(
unsigned
char
sprite
);
Sprite
*
getSprite
(
unsigned
char
sprite
);
Anim
*
getAnim
(
unsigned
char
anim
);
Anim
*
getAnim
(
unsigned
char
anim
);
Anim
*
getMiscAnim
(
unsigned
char
anim
);
Anim
*
getMiscAnim
(
unsigned
char
anim
);
void
addTimer
();
void
setWaterLevel
(
unsigned
char
gridY
);
void
setWaterLevel
(
unsigned
char
gridY
);
fixed
getWaterLevel
();
fixed
getWaterLevel
();
void
playSound
(
int
sound
);
void
playSound
(
int
sound
);
...
...
src/level/levelframe.cpp
View file @
40768f56
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
#include "game/game.h"
#include "game/game.h"
#include "game/gamemode.h"
#include "game/gamemode.h"
#include "io/controls.h"
#include "io/gfx/font.h"
#include "io/gfx/font.h"
#include "io/gfx/video.h"
#include "io/gfx/video.h"
#include "player/player.h"
#include "player/player.h"
...
@@ -169,6 +170,20 @@ int Level::step () {
...
@@ -169,6 +170,20 @@ int Level::step () {
waterLevel
+=
(
waterLevelSpeed
*
msps
)
>>
10
;
waterLevel
+=
(
waterLevelSpeed
*
msps
)
>>
10
;
// Handle player reactions
for
(
x
=
0
;
x
<
nPlayers
;
x
++
)
{
if
(
players
[
x
].
reacted
(
ticks
)
==
PR_KILLED
)
{
if
(
!
gameMode
)
return
LOST
;
game
->
resetPlayer
(
players
+
x
,
false
);
}
}
return
E_NONE
;
return
E_NONE
;
}
}
...
@@ -186,15 +201,9 @@ void Level::draw () {
...
@@ -186,15 +201,9 @@ void Level::draw () {
unsigned
int
change
;
unsigned
int
change
;
// Set tile drawing dimensions
src
.
w
=
TTOI
(
1
);
src
.
h
=
TTOI
(
1
);
src
.
x
=
0
;
// Calculate viewport
// Calculate viewport
if
(
game
&&
(
stage
==
LS_END
))
game
->
view
(
(
ticks
-
prevTicks
)
*
160
);
if
(
game
&&
(
stage
==
LS_END
))
game
->
view
(
paused
?
0
:
((
ticks
-
prevTicks
)
*
160
)
);
else
localPlayer
->
view
(
ticks
,
ticks
-
prevTicks
);
else
localPlayer
->
view
(
ticks
,
paused
?
0
:
(
ticks
-
prevTicks
)
);
// Ensure the new viewport is within the level
// Ensure the new viewport is within the level
if
(
viewX
<
0
)
viewX
=
0
;
if
(
viewX
<
0
)
viewX
=
0
;
...
@@ -211,9 +220,15 @@ void Level::draw () {
...
@@ -211,9 +220,15 @@ void Level::draw () {
dst
.
h
=
viewH
;
dst
.
h
=
viewH
;
SDL_SetClipRect
(
canvas
,
&
dst
);
SDL_SetClipRect
(
canvas
,
&
dst
);
if
((
viewW
<
canvasW
)
||
(
viewH
<
canvasH
))
clearScreen
(
15
);
if
((
viewW
<
canvasW
)
||
(
viewH
<
canvasH
))
clearScreen
(
15
);
// Set tile drawing dimensions
src
.
w
=
TTOI
(
1
);
src
.
h
=
TTOI
(
1
);
src
.
x
=
0
;
// If there is a sky, draw it
// If there is a sky, draw it
if
(
sky
)
{
if
(
sky
)
{
...
...
src/level/levelload.cpp
View file @
40768f56
...
@@ -50,7 +50,7 @@
...
@@ -50,7 +50,7 @@
int
Level
::
loadSprites
(
char
*
fileName
)
{
int
Level
::
loadSprites
(
char
*
fileName
)
{
File
*
file
,
*
mainFile
,
*
specFile
;
File
*
file
,
*
mainFile
,
*
specFile
;
unsigned
char
*
pixels
,
*
sorted
;
unsigned
char
*
pixels
,
*
mask
;
int
mainPos
,
specPos
;
int
mainPos
,
specPos
;
int
count
,
x
,
y
,
width
,
height
,
m
;
int
count
,
x
,
y
,
width
,
height
,
m
;
...
@@ -157,11 +157,10 @@ int Level::loadSprites (char * fileName) {
...
@@ -157,11 +157,10 @@ int Level::loadSprites (char * fileName) {
}
}
// m is for MAGIC
m
=
file
->
loadShort
();
m
=
file
->
loadShort
();
// Allocate space for
descrambling
// Allocate space for
mask
sorted
=
new
unsigned
char
[
width
*
height
];
mask
=
new
unsigned
char
[
width
*
height
];
// Actually, m is for mask offset.
// Actually, m is for mask offset.
// Sprites can be either masked or not masked.
// Sprites can be either masked or not masked.
...
@@ -219,9 +218,7 @@ int Level::loadSprites (char * fileName) {
...
@@ -219,9 +218,7 @@ int Level::loadSprites (char * fileName) {
for
(
x
=
0
;
x
<
width
;
x
++
)
{
for
(
x
=
0
;
x
<
width
;
x
++
)
{
sorted
[(((
y
>>
2
)
+
((
x
&
3
)
*
(
height
>>
2
)))
*
width
)
+
mask
[((
y
+
((
x
&
3
)
*
height
))
*
(
width
>>
2
))
+
(
x
>>
2
)]
=
(
x
>>
2
)
+
(((
y
&
3
)
+
((
height
&
3
)
*
(
x
&
3
)))
*
(
width
>>
2
))]
=
pixels
[(
y
*
width
)
+
x
];
pixels
[(
y
*
width
)
+
x
];
}
}
...
@@ -240,7 +237,7 @@ int Level::loadSprites (char * fileName) {
...
@@ -240,7 +237,7 @@ int Level::loadSprites (char * fileName) {
for
(
x
=
0
;
x
<
width
;
x
++
)
{
for
(
x
=
0
;
x
<
width
;
x
++
)
{
if
(
sorted
[(
y
*
width
)
+
x
]
==
1
)
{
if
(
mask
[(
y
*
width
)
+
x
]
==
1
)
{
// The unmasked portions are transparent, so no masked
// The unmasked portions are transparent, so no masked
// portion should be transparent.
// portion should be transparent.
...
@@ -265,27 +262,13 @@ int Level::loadSprites (char * fileName) {
...
@@ -265,27 +262,13 @@ int Level::loadSprites (char * fileName) {
}
}
// Rearrange pixels in correct order
for
(
y
=
0
;
y
<
height
;
y
++
)
{
for
(
x
=
0
;
x
<
width
;
x
++
)
{
sorted
[(
y
*
width
)
+
x
]
=
// Convert the scrambled sprite to an SDL surface
pixels
[(((
y
>>
2
)
+
((
x
&
3
)
*
(
height
>>
2
)))
*
width
)
+
spriteSet
[
count
].
setPixels
(
pixels
,
width
,
height
);
(
x
>>
2
)
+
(((
y
&
3
)
+
((
height
&
3
)
*
(
x
&
3
)))
*
(
width
>>
2
))];
}
}
// Convert the sprite to an SDL surface
spriteSet
[
count
].
setPixels
(
sorted
,
width
,
height
);
// Free redundant data
// Free redundant data
delete
[]
pixels
;
delete
[]
pixels
;
delete
[]
sorted
;
delete
[]
mask
;
// Check if the next sprite exists
// Check if the next sprite exists
...
@@ -829,7 +812,7 @@ int Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -829,7 +812,7 @@ int Level::load (char *fileName, unsigned char diff, bool checkpoint) {
if
(
game
)
{
if
(
game
)
{
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
game
->
resetPlayer
(
players
+
count
);
game
->
resetPlayer
(
players
+
count
,
false
);
}
else
{
}
else
{
...
@@ -1016,16 +999,10 @@ int Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -1016,16 +999,10 @@ int Level::load (char *fileName, unsigned char diff, bool checkpoint) {
// Apply the palette to surfaces that already exist, e.g. fonts
// Apply the palette to surfaces that already exist, e.g. fonts
usePalette
(
palette
);
usePalette
(
palette
);
// Adjust fontmn1 to use level palette
fontmn1
->
mapPalette
(
224
,
8
,
14
,
-
16
);
// Set the tick at which the level will end
// Set the tick at which the level will end
endTime
=
(
5
-
difficulty
)
*
2
*
60
*
1000
;
endTime
=
(
5
-
difficulty
)
*
2
*
60
*
1000
;
// Set the level stage
stage
=
LS_NORMAL
;
firstBullet
=
NULL
;
firstBullet
=
NULL
;
firstEvent
=
NULL
;
firstEvent
=
NULL
;
...
...
src/main.cpp
View file @
40768f56
...
@@ -403,16 +403,18 @@ int loadMain (int argc, char *argv[]) {
...
@@ -403,16 +403,18 @@ int loadMain (int argc, char *argv[]) {
try
{
try
{
fontsFont
=
new
Font
();
panelBigFont
=
new
Font
(
pixels
+
(
40
*
320
),
true
);
panelBigFont
=
new
Font
(
pixels
+
(
40
*
320
),
true
);
panelSmallFont
=
new
Font
(
pixels
+
(
48
*
320
),
false
);
panelSmallFont
=
new
Font
(
pixels
+
(
48
*
320
),
false
);
font2
=
new
Font
(
"font2.0fn"
);
font2
=
new
Font
(
F_FONT2_0FN
);
fontbig
=
new
Font
(
"fontbig.0fn"
);
fontbig
=
new
Font
(
F_FONTBIG_0FN
);
fontiny
=
new
Font
(
"fontiny.0fn"
);
fontiny
=
new
Font
(
F_FONTINY_0FN
);
fontmn1
=
new
Font
(
"fontmn1.0fn"
);
fontmn1
=
new
Font
(
F_FONTMN1_0FN
);
fontmn2
=
new
Font
(
"fontmn2.0fn"
);
fontmn2
=
new
Font
(
F_FONTMN2_0FN
);
}
catch
(
int
e
)
{
}
catch
(
int
e
)
{
if
(
fontsFont
)
delete
fontsFont
;
if
(
panelBigFont
)
delete
panelBigFont
;
if
(
panelBigFont
)
delete
panelBigFont
;
if
(
panelSmallFont
)
delete
panelSmallFont
;
if
(
panelSmallFont
)
delete
panelSmallFont
;
if
(
font2
)
delete
font2
;
if
(
font2
)
delete
font2
;
...
@@ -569,10 +571,11 @@ int loop (LoopType type) {
...
@@ -569,10 +571,11 @@ int loop (LoopType type) {
SDL_Event
event
;
SDL_Event
event
;
int
prevTicks
,
ret
;
int
prevTicks
,
ret
;
// Show everything that has been drawn so far
#ifdef SCALE
#ifdef SCALE
if
(
canvas
!=
screen
)
{
if
(
canvas
!=
screen
)
{
// Copy everything that has been drawn so far
scale
(
scaleFactor
,
scale
(
scaleFactor
,
screen
->
pixels
,
screen
->
pitch
,
screen
->
pixels
,
screen
->
pitch
,
canvas
->
pixels
,
canvas
->
pitch
,
canvas
->
pixels
,
canvas
->
pitch
,
...
@@ -581,12 +584,38 @@ int loop (LoopType type) {
...
@@ -581,12 +584,38 @@ int loop (LoopType type) {
}
}
#endif
#endif
SDL_Flip
(
screen
);
// Update tick count
prevTicks
=
globalTicks
;
prevTicks
=
globalTicks
;
globalTicks
=
SDL_GetTicks
();
globalTicks
=
SDL_GetTicks
();
// Apply palette effects
if
(
firstPE
)
{
/* If the palette is being emulated, compile all palette changes and
apply them all at once.
If the palette is being used directly, apply all palette effects
directly. */
if
(
fakePalette
)
{
memcpy
(
shownPalette
,
currentPalette
,
sizeof
(
SDL_Color
)
*
256
);
firstPE
->
apply
(
shownPalette
,
false
,
globalTicks
-
prevTicks
);
SDL_SetPalette
(
screen
,
SDL_PHYSPAL
,
shownPalette
,
0
,
256
);
}
else
{
firstPE
->
apply
(
shownPalette
,
true
,
globalTicks
-
prevTicks
);
}
}
// Show what has been drawn
SDL_Flip
(
screen
);
// Process system events
// Process system events
while
(
SDL_PollEvent
(
&
event
))
{
while
(
SDL_PollEvent
(
&
event
))
{
...
@@ -665,31 +694,6 @@ int loop (LoopType type) {
...
@@ -665,31 +694,6 @@ int loop (LoopType type) {
controls
.
loop
();
controls
.
loop
();
// Apply palette effects
if
(
firstPE
)
{
/* If the palette is being emulated, compile all palette changes and
apply them all at once.
If the palette is being used directly, apply all palette effects
directly. */
if
(
fakePalette
)
{
memcpy
(
shownPalette
,
currentPalette
,
sizeof
(
SDL_Color
)
*
256
);
firstPE
->
apply
(
shownPalette
,
false
,
globalTicks
-
prevTicks
);
SDL_SetPalette
(
screen
,
SDL_PHYSPAL
,
shownPalette
,
0
,
256
);
}
else
{
firstPE
->
apply
(
shownPalette
,
true
,
globalTicks
-
prevTicks
);
}
}
#if defined(WIZ) || defined(GP2X)
#if defined(WIZ) || defined(GP2X)
WIZ_AdjustVolume
(
volume_direction
);
WIZ_AdjustVolume
(
volume_direction
);
#endif
#endif
...
...
src/menu/mainmenu.cpp
View file @
40768f56
...
@@ -110,7 +110,7 @@ int Menu::main () {
...
@@ -110,7 +110,7 @@ int Menu::main () {
try
{
try
{
scene
=
new
Scene
(
"instruct.0sc"
);
scene
=
new
Scene
(
F_INSTRUCT_0SC
);
}
catch
(
int
e
)
{
}
catch
(
int
e
)
{
...
@@ -142,7 +142,7 @@ int Menu::main () {
...
@@ -142,7 +142,7 @@ int Menu::main () {
try
{
try
{
scene
=
new
Scene
(
"order.0sc"
);
scene
=
new
Scene
(
F_ORDER_0SC
);
}
catch
(
int
e
)
{
}
catch
(
int
e
)
{
...
...
src/player/player.cpp
View file @
40768f56
...
@@ -602,6 +602,15 @@ void Player::kill (Player *source, unsigned int ticks) {
...
@@ -602,6 +602,15 @@ void Player::kill (Player *source, unsigned int ticks) {
}
}
void
Player
::
addItem
()
{
items
++
;
return
;
}
void
Player
::
addScore
(
int
addedScore
)
{
void
Player
::
addScore
(
int
addedScore
)
{
score
+=
addedScore
*
10
;
score
+=
addedScore
*
10
;
...
...
src/player/player.h
View file @
40768f56
...
@@ -219,6 +219,7 @@ class Player : public Movable {
...
@@ -219,6 +219,7 @@ class Player : public Movable {
void
clearEvent
(
unsigned
char
gridX
,
unsigned
char
gridY
);
void
clearEvent
(
unsigned
char
gridX
,
unsigned
char
gridY
);
bool
hit
(
Player
*
source
,
unsigned
int
ticks
);
bool
hit
(
Player
*
source
,
unsigned
int
ticks
);
void
kill
(
Player
*
source
,
unsigned
int
ticks
);
void
kill
(
Player
*
source
,
unsigned
int
ticks
);
void
addItem
();
void
addScore
(
int
addedScore
);
void
addScore
(
int
addedScore
);
int
getScore
();
int
getScore
();
int
getEnergy
();
int
getEnergy
();
...
...
src/scene/scene.cpp
View file @
40768f56
...
@@ -132,6 +132,7 @@ Scene::Scene (const char * fileName) {
...
@@ -132,6 +132,7 @@ Scene::Scene (const char * fileName) {
}
}
background
=
NULL
;
images
=
NULL
;
images
=
NULL
;
palettes
=
NULL
;
palettes
=
NULL
;
...
@@ -180,6 +181,8 @@ Scene::~Scene () {
...
@@ -180,6 +181,8 @@ Scene::~Scene () {
delete
[]
pages
;
delete
[]
pages
;
if
(
background
)
SDL_FreeSurface
(
background
);
if
(
images
)
delete
images
;
if
(
images
)
delete
images
;
if
(
palettes
)
delete
palettes
;
if
(
palettes
)
delete
palettes
;
...
@@ -194,9 +197,10 @@ int Scene::play () {
...
@@ -194,9 +197,10 @@ int Scene::play () {
unsigned
int
pageTime
=
pages
[
sceneIndex
].
pageTime
;
unsigned
int
pageTime
=
pages
[
sceneIndex
].
pageTime
;
unsigned
int
lastTicks
=
globalTicks
;
unsigned
int
lastTicks
=
globalTicks
;
int
newpage
=
true
;
int
newpage
=
true
;
int
fadein
=
false
;
SDL_Rect
textRect
=
{
0
,
0
,
SW
,
SH
};
SDL_Rect
textRect
=
{
0
,
0
,
SW
,
SH
};
clearScreen
(
0
);
while
(
true
)
{
while
(
true
)
{
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
if
(
loop
(
NORMAL_LOOP
)
==
E_QUIT
)
return
E_QUIT
;
...
@@ -240,7 +244,9 @@ int Scene::play () {
...
@@ -240,7 +244,9 @@ int Scene::play () {
// usePalette(palette);
// usePalette(palette);
currentPalette
=
palette
->
palette
;
currentPalette
=
palette
->
palette
;
fadein
=
true
;
// Fade in from black
firstPE
=
new
FadeInPaletteEffect
(
250
,
firstPE
);
}
else
restorePalette
(
screen
);
}
else
restorePalette
(
screen
);
...
@@ -260,14 +266,20 @@ int Scene::play () {
...
@@ -260,14 +266,20 @@ int Scene::play () {
if
(
image
)
{
if
(
image
)
{
dst
.
x
=
(
pages
[
sceneIndex
].
bgPos
[
bg
]
&
65535
)
*
2
+
(
canvasW
-
SW
)
>>
1
;
dst
.
x
=
pages
[
sceneIndex
].
bgX
[
bg
]
+
((
canvasW
-
SW
)
>>
1
)
;
dst
.
y
=
((
pages
[
sceneIndex
].
bgPos
[
bg
]
&
(
~
65535
))
>>
16
)
*
2
+
(
canvasH
-
SH
)
>>
1
;
dst
.
y
=
pages
[
sceneIndex
].
bgY
[
bg
]
+
((
canvasH
-
SH
)
>>
1
)
;
SDL_BlitSurface
(
image
->
image
,
NULL
,
canvas
,
&
dst
);
SDL_BlitSurface
(
image
->
image
,
NULL
,
canvas
,
&
dst
);
}
}
}
}
}
else
if
(
background
)
{
dst
.
x
=
(
canvasW
-
SW
)
>>
1
;
dst
.
y
=
(
canvasH
-
SH
)
>>
1
;
SDL_BlitSurface
(
background
,
NULL
,
canvas
,
&
dst
);
}
else
clearScreen
(
0
);
}
else
clearScreen
(
0
);
...
@@ -350,16 +362,6 @@ int Scene::play () {
...
@@ -350,16 +362,6 @@ int Scene::play () {
}
}
// Fade in from black
if
(
fadein
)
{
fadein
=
false
;
firstPE
=
new
FadeInPaletteEffect
(
250
,
firstPE
);
clearScreen
(
0
);
}
}
}
return
E_NONE
;
return
E_NONE
;
...
...
src/scene/scene.h
View file @
40768f56
...
@@ -85,7 +85,8 @@ class ScenePage {
...
@@ -85,7 +85,8 @@ class ScenePage {
public
:
public
:
int
backgrounds
;
int
backgrounds
;
int
bgIndex
[
30
];
int
bgIndex
[
30
];
unsigned
int
bgPos
[
30
];
unsigned
short
int
bgX
[
30
];
unsigned
short
int
bgY
[
30
];
// Length of the scene in seconds, or if zero = anim complete, or 256 = user interaction
// Length of the scene in seconds, or if zero = anim complete, or 256 = user interaction
int
pageTime
;
int
pageTime
;
...
@@ -134,6 +135,7 @@ class SceneFont {
...
@@ -134,6 +135,7 @@ class SceneFont {
class
Scene
{
class
Scene
{
private
:
private
:
SDL_Surface
*
background
;
SceneImage
*
images
;
SceneImage
*
images
;
ScenePalette
*
palettes
;
ScenePalette
*
palettes
;
SceneFont
fonts
[
5
];
SceneFont
fonts
[
5
];
...
...
src/scene/sceneload.cpp
View file @
40768f56
...
@@ -111,21 +111,15 @@ void Scene::loadAni (File *f, int dataIndex) {
...
@@ -111,21 +111,15 @@ void Scene::loadAni (File *f, int dataIndex) {
case
0x3131
:
case
0x3131
:
{
// Skip back size header, this is read by the surface reader
// Skip back size header, this is read by the surface reader
f
->
seek
(
-
2
,
false
);
f
->
seek
(
-
2
,
false
);
SDL_Surface
*
image
=
f
->
loadSurface
(
SW
,
SH
);
if
(
!
background
)
background
=
f
->
loadSurface
(
SW
,
SH
);
SDL_BlitSurface
(
image
,
NULL
,
canvas
,
NULL
);
SDL_FreeSurface
(
image
);
// Use the most recently loaded palette
// Use the most recently loaded palette
SDL_SetPalette
(
screen
,
SDL_PHYSPAL
,
palettes
->
palette
,
0
,
256
);
SDL_SetPalette
(
screen
,
SDL_PHYSPAL
,
palettes
->
palette
,
0
,
256
);
currentPalette
=
palettes
->
palette
;
currentPalette
=
palettes
->
palette
;
}
break
;
break
;
case
0x4c31
:
case
0x4c31
:
...
@@ -461,19 +455,15 @@ void Scene::loadScripts (File *f) {
...
@@ -461,19 +455,15 @@ void Scene::loadScripts (File *f) {
case
ESceneBackground
:
case
ESceneBackground
:
{
pages
[
loop
].
bgX
[
pages
[
loop
].
backgrounds
]
=
f
->
loadShort
();
pages
[
loop
].
bgY
[
pages
[
loop
].
backgrounds
]
=
f
->
loadShort
();
pages
[
loop
].
bgIndex
[
pages
[
loop
].
backgrounds
]
=
f
->
loadShort
();
unsigned
short
int
xpos
=
f
->
loadShort
();
LOG
(
"ESceneBackground: xpos"
,
pages
[
loop
].
bgX
[
pages
[
loop
].
backgrounds
]);
unsigned
short
int
ypos
=
f
->
loadShort
();
LOG
(
"ESceneBackground: ypos"
,
pages
[
loop
].
bgY
[
pages
[
loop
].
backgrounds
]);
unsigned
short
bgImageIndex
=
f
->
loadShort
();
LOG
(
"ESceneBackground: index"
,
pages
[
loop
].
bgIndex
[
pages
[
loop
].
backgrounds
]);
LOG
(
"ESceneBackground: index"
,
bgImageIndex
);
LOG
(
"ESceneBackground: xpos"
,
xpos
);
LOG
(
"ESceneBackground: ypos"
,
ypos
);
pages
[
loop
].
bgIndex
[
pages
[
loop
].
backgrounds
]
=
bgImageIndex
;
pages
[
loop
].
bgPos
[
pages
[
loop
].
backgrounds
]
=
xpos
|
(
ypos
<<
16
);
pages
[
loop
].
backgrounds
++
;
}
pages
[
loop
].
backgrounds
++
;
break
;
break
;
...
...
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