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
eadb31ed
Commit
eadb31ed
authored
Jul 01, 2010
by
alistert
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added support for start position, one-way and spike events to JJ2 levels.
parent
0faba79b
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
128 additions
and
67 deletions
+128
-67
baselevel.cpp
src/baselevel.cpp
+4
-2
jj2level.cpp
src/jj2level/jj2level.cpp
+9
-14
jj2level.h
src/jj2level/jj2level.h
+9
-0
jj2levelframe.cpp
src/jj2level/jj2levelframe.cpp
+30
-10
jj2levelload.cpp
src/jj2level/jj2levelload.cpp
+65
-22
levelload.cpp
src/level/levelload.cpp
+0
-1
jj2levelplayerframe.cpp
src/player/jj2levelplayerframe.cpp
+11
-18
No files found.
src/baselevel.cpp
View file @
eadb31ed
...
@@ -46,6 +46,8 @@ BaseLevel::BaseLevel () {
...
@@ -46,6 +46,8 @@ BaseLevel::BaseLevel () {
smoothfps
=
50.0
f
;
smoothfps
=
50.0
f
;
paletteEffects
=
NULL
;
paletteEffects
=
NULL
;
tileSet
=
NULL
;
spriteSet
=
NULL
;
paused
=
false
;
paused
=
false
;
...
@@ -65,9 +67,9 @@ BaseLevel::~BaseLevel () {
...
@@ -65,9 +67,9 @@ BaseLevel::~BaseLevel () {
if
(
paletteEffects
)
delete
paletteEffects
;
if
(
paletteEffects
)
delete
paletteEffects
;
SDL_FreeSurface
(
tileSet
);
if
(
tileSet
)
SDL_FreeSurface
(
tileSet
);
delete
[]
spriteSet
;
if
(
spriteSet
)
delete
[]
spriteSet
;
return
;
return
;
...
...
src/jj2level/jj2level.cpp
View file @
eadb31ed
...
@@ -62,6 +62,9 @@ JJ2Level::~JJ2Level () {
...
@@ -62,6 +62,9 @@ JJ2Level::~JJ2Level () {
int
count
;
int
count
;
delete
[]
*
events
;
delete
[]
events
;
for
(
count
=
0
;
count
<
LAYERS
;
count
++
)
delete
layers
[
count
];
for
(
count
=
0
;
count
<
LAYERS
;
count
++
)
delete
layers
[
count
];
delete
[]
mask
;
delete
[]
mask
;
...
@@ -82,19 +85,15 @@ JJ2Level::~JJ2Level () {
...
@@ -82,19 +85,15 @@ JJ2Level::~JJ2Level () {
bool
JJ2Level
::
checkMaskUp
(
fixed
x
,
fixed
y
)
{
bool
JJ2Level
::
checkMaskUp
(
fixed
x
,
fixed
y
)
{
JJ2GridElement
*
ge
;
// Anything off the edge of the map is solid
// Anything off the edge of the map is solid
if
((
x
<
0
)
||
(
y
<
0
)
||
(
x
>=
TTOF
(
layers
[
3
]
->
getWidth
()))
||
(
y
>=
TTOF
(
layers
[
3
]
->
getHeight
())))
if
((
x
<
0
)
||
(
y
<
0
)
||
(
x
>=
TTOF
(
layers
[
3
]
->
getWidth
()))
||
(
y
>=
TTOF
(
layers
[
3
]
->
getHeight
())))
return
true
;
return
true
;
ge
=
layers
[
3
]
->
grid
[
FTOT
(
y
)]
+
FTOT
(
x
);
// Event 1 is one-way
if
(
events
[
FTOT
(
y
)][
FTOT
(
x
)].
type
==
1
)
return
false
;
// Event 122 is one-way
//if (ge->event == 122) return false;
// Check the mask in the tile in question
// Check the mask in the tile in question
return
mask
[(
ge
->
tile
<<
10
)
+
((
y
>>
5
)
&
992
)
+
((
x
>>
10
)
&
31
)];
return
mask
[(
layers
[
3
]
->
grid
[
FTOT
(
y
)][
FTOT
(
x
)].
tile
<<
10
)
+
((
y
>>
5
)
&
992
)
+
((
x
>>
10
)
&
31
)];
}
}
...
@@ -113,19 +112,15 @@ bool JJ2Level::checkMaskDown (fixed x, fixed y) {
...
@@ -113,19 +112,15 @@ bool JJ2Level::checkMaskDown (fixed x, fixed y) {
bool
JJ2Level
::
checkSpikes
(
fixed
x
,
fixed
y
)
{
bool
JJ2Level
::
checkSpikes
(
fixed
x
,
fixed
y
)
{
JJ2GridElement
*
ge
;
// Anything off the edge of the map is not spikes
// Anything off the edge of the map is not spikes
if
((
x
<
0
)
||
(
y
<
0
)
||
(
x
>
TTOF
(
layers
[
3
]
->
getWidth
()))
||
(
y
>
TTOF
(
layers
[
3
]
->
getHeight
())))
if
((
x
<
0
)
||
(
y
<
0
)
||
(
x
>
TTOF
(
layers
[
3
]
->
getWidth
()))
||
(
y
>
TTOF
(
layers
[
3
]
->
getHeight
())))
return
false
;
return
false
;
ge
=
layers
[
3
]
->
grid
[
FTOT
(
y
)]
+
FTOT
(
x
);
// Event 2 is spikes
if
(
events
[
FTOT
(
y
)][
FTOT
(
x
)].
type
!=
2
)
return
false
;
// Event 126 is spikes
//if (ge->event != 126) return false;
// Check the mask in the tile in question
// Check the mask in the tile in question
//return mask[(ge->
tile << 10) + ((y >> 5) & 992) + ((x >> 10) & 31)];
return
mask
[(
layers
[
3
]
->
grid
[
FTOT
(
y
)][
FTOT
(
x
)].
tile
<<
10
)
+
((
y
>>
5
)
&
992
)
+
((
x
>>
10
)
&
31
)];
return
false
;
return
false
;
...
...
src/jj2level/jj2level.h
View file @
eadb31ed
...
@@ -54,6 +54,13 @@ typedef struct {
...
@@ -54,6 +54,13 @@ typedef struct {
}
JJ2GridElement
;
}
JJ2GridElement
;
typedef
struct
{
unsigned
char
type
;
unsigned
char
data
[
3
];
}
JJ2Event
;
// Classes
// Classes
...
@@ -88,6 +95,8 @@ class JJ2Level : public BaseLevel {
...
@@ -88,6 +95,8 @@ class JJ2Level : public BaseLevel {
char
*
mask
;
char
*
mask
;
int
soundMap
[
32
];
int
soundMap
[
32
];
JJ2Layer
*
layers
[
LAYERS
];
JJ2Layer
*
layers
[
LAYERS
];
JJ2Event
**
events
;
int
width
,
height
;
unsigned
char
difficulty
;
unsigned
char
difficulty
;
fixed
waterLevel
;
fixed
waterLevel
;
fixed
waterLevelTarget
;
fixed
waterLevelTarget
;
...
...
src/jj2level/jj2levelframe.cpp
View file @
eadb31ed
...
@@ -88,7 +88,7 @@ int JJ2Level::step () {
...
@@ -88,7 +88,7 @@ int JJ2Level::step () {
void
JJ2Level
::
draw
()
{
void
JJ2Level
::
draw
()
{
int
count
,
energ
y
;
int
x
,
y
;
unsigned
int
change
;
unsigned
int
change
;
...
@@ -96,27 +96,47 @@ void JJ2Level::draw () {
...
@@ -96,27 +96,47 @@ void JJ2Level::draw () {
if
(
game
&&
(
stage
==
LS_END
))
game
->
view
(
paused
?
0
:
((
ticks
-
prevTicks
)
*
160
));
if
(
game
&&
(
stage
==
LS_END
))
game
->
view
(
paused
?
0
:
((
ticks
-
prevTicks
)
*
160
));
else
localPlayer
->
getJJ2LevelPlayer
()
->
view
(
ticks
,
paused
?
0
:
(
ticks
-
prevTicks
));
else
localPlayer
->
getJJ2LevelPlayer
()
->
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
;
if
(
FTOI
(
viewX
)
+
viewW
>=
TTOI
(
layers
[
3
]
->
getWidth
()))
viewX
=
ITOF
(
TTOI
(
layers
[
3
]
->
getWidth
()
)
-
viewW
);
if
(
FTOI
(
viewX
)
+
viewW
>=
TTOI
(
width
))
viewX
=
ITOF
(
TTOI
(
width
)
-
viewW
);
if
(
viewY
<
0
)
viewY
=
0
;
if
(
viewY
<
0
)
viewY
=
0
;
if
(
FTOI
(
viewY
)
+
viewH
>=
TTOI
(
layers
[
3
]
->
getHeight
()))
viewY
=
ITOF
(
TTOI
(
layers
[
3
]
->
getHeight
()
)
-
viewH
);
if
(
FTOI
(
viewY
)
+
viewH
>=
TTOI
(
height
))
viewY
=
ITOF
(
TTOI
(
height
)
-
viewH
);
// Show background layers
// Show background layers
for
(
count
=
7
;
count
>=
3
;
count
--
)
layers
[
count
]
->
draw
(
tileSet
);
for
(
x
=
7
;
x
>=
3
;
x
--
)
layers
[
x
]
->
draw
(
tileSet
);
// Calculate change since last step
// Calculate change since last step
change
=
paused
?
0
:
ticks
-
prevStepTicks
;
change
=
paused
?
0
:
ticks
-
prevStepTicks
;
// Show the events
/*for (y = 0; y < ITOT(viewH); y++) {
for (x = 0; x < ITOT(viewW ); x++) {
if (events[y + FTOT(viewY)][x + FTOT(viewX)].type > 2)
drawRect(8 + TTOI(x) - (FTOI(viewX) & 31), 8 + TTOI(y) - (FTOI(viewY) & 31), 16, 16, events[y + FTOT(viewY)][x + FTOT(viewX)].type);
}
}*/
// Show the players
// Show the players
for
(
count
=
0
;
count
<
nPlayers
;
count
++
)
players
[
count
].
getJJ2LevelPlayer
()
->
draw
(
ticks
,
change
);
for
(
x
=
0
;
x
<
nPlayers
;
x
++
)
{
players
[
x
].
getJJ2LevelPlayer
()
->
draw
(
ticks
,
change
);
// Show type of overlapping event
//panelBigFont->showNumber(events[FTOT(players[x].getJJ2LevelPlayer()->getY() + PYO_MID)][FTOT(players[x].getJJ2LevelPlayer()->getX() + PXO_MID)].type, viewW >> 1, viewH >> 1);
}
// Show foreground layers
// Show foreground layers
for
(
count
=
2
;
count
>=
0
;
count
--
)
layers
[
count
]
->
draw
(
tileSet
);
for
(
x
=
2
;
x
>=
0
;
x
--
)
layers
[
x
]
->
draw
(
tileSet
);
// Temporary lines showing the water level
// Temporary lines showing the water level
...
@@ -135,11 +155,11 @@ void JJ2Level::draw () {
...
@@ -135,11 +155,11 @@ void JJ2Level::draw () {
// Draw hearts
// Draw hearts
energy
=
localPlayer
->
getJJ2LevelPlayer
()
->
getEnergy
();
x
=
localPlayer
->
getJJ2LevelPlayer
()
->
getEnergy
();
for
(
count
=
1
;
count
<=
energy
;
count
++
)
{
for
(
y
=
1
;
y
<=
x
;
y
++
)
{
drawRect
(
viewW
-
(
count
*
12
),
4
,
8
,
8
,
48
);
drawRect
(
viewW
-
(
y
*
12
),
4
,
8
,
8
,
48
);
}
}
...
...
src/jj2level/jj2levelload.cpp
View file @
eadb31ed
...
@@ -363,6 +363,7 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -363,6 +363,7 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
unsigned
char
*
buffer
;
unsigned
char
*
buffer
;
char
*
string
;
char
*
string
;
unsigned
char
*
aBuffer
;
unsigned
char
*
aBuffer
;
unsigned
char
*
bBuffer
;
unsigned
char
*
cBuffer
;
unsigned
char
*
cBuffer
;
unsigned
char
*
dBuffer
;
unsigned
char
*
dBuffer
;
int
aCLength
,
bCLength
,
cCLength
,
dCLength
;
int
aCLength
,
bCLength
,
cCLength
,
dCLength
;
...
@@ -371,7 +372,7 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -371,7 +372,7 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
int
count
,
x
,
y
;
int
count
,
x
,
y
;
unsigned
char
tileQuad
[
8
];
unsigned
char
tileQuad
[
8
];
short
int
*
quadRefs
;
short
int
*
quadRefs
;
int
width
,
pitch
,
h
eight
;
int
layerWidth
,
pitch
,
layerH
eight
;
int
worldNum
;
int
worldNum
;
unsigned
char
startX
,
startY
;
unsigned
char
startX
,
startY
;
...
@@ -439,7 +440,7 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -439,7 +440,7 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
dLength
=
file
->
loadInt
();
dLength
=
file
->
loadInt
();
aBuffer
=
file
->
loadLZ
(
aCLength
,
aLength
);
aBuffer
=
file
->
loadLZ
(
aCLength
,
aLength
);
file
->
seek
(
bCLength
,
false
);
// Don't use this block yet
bBuffer
=
file
->
loadLZ
(
bCLength
,
bLength
);
cBuffer
=
file
->
loadLZ
(
cCLength
,
cLength
);
cBuffer
=
file
->
loadLZ
(
cCLength
,
cLength
);
dBuffer
=
file
->
loadLZ
(
dCLength
,
dLength
);
dBuffer
=
file
->
loadLZ
(
dCLength
,
dLength
);
...
@@ -453,6 +454,7 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -453,6 +454,7 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
delete
[]
dBuffer
;
delete
[]
dBuffer
;
delete
[]
cBuffer
;
delete
[]
cBuffer
;
delete
[]
bBuffer
;
delete
[]
aBuffer
;
delete
[]
aBuffer
;
delete
font
;
delete
font
;
...
@@ -479,17 +481,24 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -479,17 +481,24 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
for
(
count
=
0
;
count
<
LAYERS
;
count
++
)
{
for
(
count
=
0
;
count
<
LAYERS
;
count
++
)
{
w
idth
=
((
int
*
)(
aBuffer
+
8443
+
8
))[
count
];
layerW
idth
=
((
int
*
)(
aBuffer
+
8443
+
8
))[
count
];
pitch
=
((
int
*
)(
aBuffer
+
8443
+
40
))[
count
];
pitch
=
((
int
*
)(
aBuffer
+
8443
+
40
))[
count
];
height
=
((
int
*
)(
aBuffer
+
8443
+
72
))[
count
];
layerHeight
=
((
int
*
)(
aBuffer
+
8443
+
72
))[
count
];
if
(
count
==
3
)
{
width
=
layerWidth
;
height
=
layerHeight
;
}
if
(
aBuffer
[
8443
+
count
])
{
if
(
aBuffer
[
8443
+
count
])
{
layers
[
count
]
=
new
JJ2Layer
(
width
,
h
eight
);
layers
[
count
]
=
new
JJ2Layer
(
layerWidth
,
layerH
eight
);
for
(
y
=
0
;
y
<
h
eight
;
y
++
)
{
for
(
y
=
0
;
y
<
layerH
eight
;
y
++
)
{
for
(
x
=
0
;
x
<
layer
s
[
count
]
->
getWidth
()
;
x
++
)
{
for
(
x
=
0
;
x
<
layer
Width
;
x
++
)
{
if
((
x
&
3
)
==
0
)
memcpy
(
tileQuad
,
cBuffer
+
(
quadRefs
[
x
>>
2
]
<<
3
),
8
);
if
((
x
&
3
)
==
0
)
memcpy
(
tileQuad
,
cBuffer
+
(
quadRefs
[
x
>>
2
]
<<
3
),
8
);
...
@@ -515,6 +524,41 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -515,6 +524,41 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
}
}
// Load events
startX
=
0
;
startY
=
0
;
events
=
new
JJ2Event
*
[
height
];
*
events
=
new
JJ2Event
[
width
*
height
];
for
(
y
=
0
;
y
<
height
;
y
++
)
{
events
[
y
]
=
events
[
0
]
+
(
y
*
width
);
for
(
x
=
0
;
x
<
width
;
x
++
)
{
events
[
y
][
x
].
type
=
bBuffer
[((
y
*
width
)
+
x
)
<<
2
];
events
[
y
][
x
].
data
[
0
]
=
bBuffer
[(((
y
*
width
)
+
x
)
<<
2
)
+
1
];
events
[
y
][
x
].
data
[
1
]
=
bBuffer
[(((
y
*
width
)
+
x
)
<<
2
)
+
2
];
events
[
y
][
x
].
data
[
2
]
=
bBuffer
[(((
y
*
width
)
+
x
)
<<
2
)
+
3
];
if
(
events
[
y
][
x
].
type
==
29
)
{
startX
=
x
;
startY
=
y
;
}
}
}
delete
[]
dBuffer
;
delete
[]
cBuffer
;
delete
[]
bBuffer
;
delete
[]
aBuffer
;
// Open JJ1 level file for remaining data
// Open JJ1 level file for remaining data
...
@@ -542,14 +586,15 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -542,14 +586,15 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
delete
[]
string
;
delete
[]
string
;
delete
[]
musicFile
;
delete
[]
*
events
;
delete
[]
nextLevel
;
delete
[]
events
;
for
(
count
=
0
;
count
<
LAYERS
;
count
++
)
delete
layers
[
count
];
SDL_FreeSurface
(
tileSet
)
;
delete
[]
mask
;
delete
[]
dBuffer
;
delete
[]
musicFile
;
delete
[]
cBuffer
;
delete
[]
nextLevel
;
delete
[]
aBuffer
;
delete
font
;
delete
font
;
...
@@ -574,14 +619,15 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -574,14 +619,15 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
delete
file
;
delete
file
;
delete
[]
musicFile
;
delete
[]
*
events
;
delete
[]
nextLevel
;
delete
[]
events
;
SDL_FreeSurface
(
tileSet
)
;
for
(
x
=
0
;
x
<
LAYERS
;
x
++
)
delete
layers
[
x
]
;
delete
[]
dBuffer
;
delete
[]
mask
;
delete
[]
cBuffer
;
delete
[]
aBuffer
;
delete
[]
musicFile
;
delete
[]
nextLevel
;
delete
font
;
delete
font
;
...
@@ -720,9 +766,6 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -720,9 +766,6 @@ int JJ2Level::load (char *fileName, unsigned char diff, bool checkpoint) {
}
}
// Set the players' initial values
// Set the players' initial values
startX
=
10
;
startY
=
5
;
if
(
game
)
{
if
(
game
)
{
if
(
!
checkpoint
)
game
->
setCheckpoint
(
startX
,
startY
);
if
(
!
checkpoint
)
game
->
setCheckpoint
(
startX
,
startY
);
...
...
src/level/levelload.cpp
View file @
eadb31ed
...
@@ -512,7 +512,6 @@ int Level::load (char *fileName, unsigned char diff, bool checkpoint) {
...
@@ -512,7 +512,6 @@ int Level::load (char *fileName, unsigned char diff, bool checkpoint) {
if
(
count
<
0
)
{
if
(
count
<
0
)
{
SDL_FreeSurface
(
tileSet
);
delete
file
;
delete
file
;
delete
font
;
delete
font
;
...
...
src/player/jj2levelplayerframe.cpp
View file @
eadb31ed
...
@@ -685,29 +685,22 @@ void JJ2LevelPlayer::draw (unsigned int ticks, int change) {
...
@@ -685,29 +685,22 @@ void JJ2LevelPlayer::draw (unsigned int ticks, int change) {
// Show the player
// Show the player
// Flash red if hurt, otherwise use player colour
// Use player colour
if
((
reaction
==
JJ2PR_HURT
)
&&
(
!
((
ticks
/
30
)
&
3
)))
an
->
setPalette
(
palette
,
23
,
41
);
an
->
flashPalette
(
36
);
an
->
setPalette
(
palette
,
88
,
8
);
else
{
// Flash on and off if hurt
if
((
reaction
!=
JJ2PR_HURT
)
||
((
ticks
/
30
)
&
2
))
{
an
->
setPalette
(
palette
,
23
,
41
);
// Draw "motion blur"
an
->
setPalette
(
palette
,
88
,
8
);
if
(
fastFeetTime
>
ticks
)
an
->
draw
(
drawX
-
(
dx
>>
6
),
drawY
);
// Draw player
an
->
draw
(
drawX
,
drawY
);
}
}
// Draw "motion blur"
if
(
fastFeetTime
>
ticks
)
an
->
draw
(
drawX
-
(
dx
>>
6
),
drawY
);
// Draw player
an
->
draw
(
drawX
,
drawY
);
// Remove red flash or player colour from sprite
an
->
restorePalette
();
// Uncomment the following to see the area of the player
// Uncomment the following to see the area of the player
/*drawRect(FTOI(drawX + PXO_L - viewX),
/*drawRect(FTOI(drawX + PXO_L - viewX),
FTOI(drawY + PYO_TOP - viewY),
FTOI(drawY + PYO_TOP - viewY),
...
...
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