aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gob/scenery.cpp12
-rw-r--r--gob/scenery.h18
2 files changed, 19 insertions, 11 deletions
diff --git a/gob/scenery.cpp b/gob/scenery.cpp
index 5b43630670..f592b5ab21 100644
--- a/gob/scenery.cpp
+++ b/gob/scenery.cpp
@@ -114,6 +114,7 @@ int16 scen_loadStatic(char search) {
ptr->layers = (Scen_StaticLayer **)malloc(sizeof(Scen_StaticLayer *) * ptr->layersCount);
ptr->pieces = (Scen_PieceDesc **)malloc(sizeof(Scen_PieceDesc *) * picsCount);
+ ptr->piecesFromExt = (char *)malloc(picsCount);
for (i = 0; i < ptr->layersCount; i++) {
offset = (int16)READ_LE_UINT16(&((int16 *)dataPtr)[i]);
@@ -136,10 +137,12 @@ int16 scen_loadStatic(char search) {
ptr->pieces[i] =
(Scen_PieceDesc *) game_loadExtData(pictDescId, 0,
0);
+ ptr->piecesFromExt[i] = 1;
} else {
ptr->pieces[i] =
(Scen_PieceDesc *)
game_loadTotResource(pictDescId);
+ ptr->piecesFromExt[i] = 0;
}
width = inter_load16();
@@ -188,7 +191,7 @@ void scen_freeStatic(int16 index) {
return;
for (i = 0; i < scen_staticPictCount[index]; i++) {
- if (scen_staticFromExt[index] == 1)
+ if (scen_statics[index].piecesFromExt[i] == 1)
free(scen_statics[index].pieces[i]);
spr = scen_staticPictToSprite[index * 7 + i];
@@ -202,6 +205,7 @@ void scen_freeStatic(int16 index) {
free(scen_statics[index].layers);
free(scen_statics[index].pieces);
+ free(scen_statics[index].piecesFromExt);
if (scen_staticFromExt[index] == 1)
free(scen_statics[index].dataPtr);
@@ -430,6 +434,7 @@ int16 scen_loadAnim(char search) {
ptr->pieces =
(Scen_PieceDesc **) malloc(sizeof(Scen_PieceDesc *) *
picsCount);
+ ptr->piecesFromExt = (char *) malloc(picsCount);
for (i = 0; i < ptr->layersCount; i++) {
offset = (int16)READ_LE_UINT16(&((int16 *)dataPtr)[i]);
@@ -449,10 +454,12 @@ int16 scen_loadAnim(char search) {
ptr->pieces[i] =
(Scen_PieceDesc *) game_loadExtData(pictDescId, 0,
0);
+ ptr->piecesFromExt[i] = 1;
} else {
ptr->pieces[i] =
(Scen_PieceDesc *)
game_loadTotResource(pictDescId);
+ ptr->piecesFromExt[i] = 0;
}
width = inter_load16();
@@ -705,7 +712,7 @@ void scen_freeAnim(int16 animation) {
return;
for (i = 0; i < scen_animPictCount[animation]; i++) {
- if (scen_animFromExt[animation] == 1)
+ if (scen_animations[animation].piecesFromExt[i] == 1)
free(scen_animations[animation].pieces[i]);
spr = scen_animPictToSprite[animation * 7 + i];
@@ -720,6 +727,7 @@ void scen_freeAnim(int16 animation) {
free(scen_animations[animation].layers);
free(scen_animations[animation].pieces);
+ free(scen_animations[animation].piecesFromExt);
if (scen_animFromExt[animation] == 1)
free(scen_animations[animation].dataPtr);
diff --git a/gob/scenery.h b/gob/scenery.h
index 90b098ea14..71b59e685c 100644
--- a/gob/scenery.h
+++ b/gob/scenery.h
@@ -47,14 +47,6 @@ typedef struct Scen_StaticLayer {
Scen_StaticPlane planes[1];
} GCC_PACK Scen_StaticLayer;
-typedef struct Scen_Static {
- int16 layersCount;
- Scen_StaticLayer **layers;
- Scen_PieceDesc **pieces;
- void *unknown;
- char *dataPtr;
-} GCC_PACK Scen_Static;
-
// Animations
typedef struct Scen_AnimFramePiece {
@@ -77,11 +69,19 @@ typedef struct Scen_AnimLayer {
} GCC_PACK Scen_AnimLayer;
#pragma END_PACK_STRUCTS
+typedef struct Scen_Static {
+ int16 layersCount;
+ Scen_StaticLayer **layers;
+ Scen_PieceDesc **pieces;
+ char *piecesFromExt;
+ char *dataPtr;
+} Scen_Static;
+
struct Scen_Animation {
int16 layersCount;
Scen_AnimLayer **layers;
Scen_PieceDesc **pieces;
- void *unknowm;
+ char *piecesFromExt;
char *dataPtr;
};