[Scummvm-git-logs] scummvm master -> 8ec11f3aa54bb27415418699b828e6cfba35501a
sev-
noreply at scummvm.org
Fri Dec 2 10:51:58 UTC 2022
This automated email contains information about 120 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
d23e92c5c7 GOB: implement case 65533 in o2_loadMapObjects()
0358d870b5 GOB: add a few warnings on unimplemented cases
32dc085cf4 GOB: implement order correction feature in animate()
f6bb7902fc GOB: Adibou2 drawing order fixes
35eceb6bd3 GOB: draw sprites when animation < 0 without associated VMD
394b96ab8a GOB: no surface width rounding for Adibou2
8cf57d9d4a GOB: add stub for o7_moveFile (op draw 0x62)
57d69cf188 GOB: Fix hotspot issue leading to unbreakable waiting state in Adibou2
f104d53bb6 GOB: Fix cursor palette issue in Adibou2
0f95ad760f GOB: save children personal data and completed exercises in Adibou2
9c3ed44a8a GOB: save Adibou2 environment state
24b6eeb0a0 GOB: Adibou2 characters animations
c0f76d7578 GOB: Adibou2 characters path computation
7ed26da61b GOB: implement y-axis reflection, needed by some character animations
1453d97507 GOB: add handlers for temporary .inf files used by Adibou2 applications
5a53644bd7 GOB: rename changeDirection -> setGoblinState
a2dbc6beba GOB: Adibou2 pathfinding fixes
eb61c14d5c GOB: use infix operator++ on Pixel iterators where possible
f132bd0c18 GOB: bugfix character animation using incorrect sprites
4c551956c5 GOB: fix disappearing objects in Adibou2 after video play
95ddb1ca87 GOB: new workaround for Adibou2 failed assert(_finished) sound problem
b2c3510758 GOB: fix a crash in Adibou2 when changing hotspot
444a0586eb GOB: implement o7_loadMultObject
0db96b5b0b GOB: partially handle missing cases in o1_palLoad
d0961114f0 GOB: add more Adibou2 save files, simplify save handler
79a8634143 GOB: a few animation fixes in Adibou2
532076a73d GOB: add saved handler for lance.inf and retour.inf in Adibou2
f2812c1b3b GOB: fix animation crash in Adibou2
09dc57a4e3 GOB: save drawings in Adibou2
851b015beb GOB: save mailbox drawing in Adibou2
3546f15ab4 GOB: save flowers and cakes photos in Adibou2
27e5234e17 GOB: disable "split" surface for Adibou2
f0ab394243 GOB: fix missing closeVideo
da2d5c731f GOB: temp workaround to enable cake decoration in Adibou2
964133c415 GOB: misc file path related adjustments in Adibou2
40f834fd7c GOB: implement copyFile and moveFile
6e820968c2 GOB: remove _mapUnknownBool warning
b7349f8195 GOB: more save handlers for Adibou2
81d4a437e9 GOB: implement deleteFile() for Adibou2 save handlers
da923e24c1 GOB: Mult_object field_38 is videofile metadata, equivalent to 'slot' field
1e020bcd04 GOB: fix phantom sprites glitches in Adibou2 vegetables garden
44c724db55 GOB: more video object glitches fixes in Adibou2
e67c5be5a5 GOB: fix disappearing sprites issues in Adibou2
93f29de14f GOB: close only live sound when getting special video "RIEN" in Adibou2
fa13e43c18 GOB: remove "multiple click protection" from o1_keyFunc in Adibou2
a31b588ad0 GOB: fix "paint" game in Adibou2
962e9f9386 GOB: save breakout game progress in Adibou2
97a66c329e GOB: yet more int16->uint16 changes, to accommodate for Playtoons/Adibou2 larger variable space
601dd605d8 GOB: handle remaining Adibou2 characters animations
e3e6c76923 GOB: handle saves for Adibou2 construction minigame
48fa677c17 GOB: fix cursor issues in Adibou2
46f23e34bf GOB: another fillRect mode in Adibou2 (replace a specific color)
fc8b36f1d8 GOB: DRAW_PUTPIXEL with pattern 0xFF is getPixel() in Adibou2
b907d2afa6 GOB: workaround for a bug in Adibou2 scripts of "cooking" activity
f19528a0ad GOB: avoid warning in o7_setActiveCD when matching main game directory
edb0528536 GOB: no "fade" animation in Adibou2 after o1_palLoad
519b9b88ec GOB: disable filename replacement for Adibou2 database IDs.
65ec3bfa8a GOB: remove a forced retrace in newCycleAnim for Adibou2
da7439b3f3 GOB: Adibou2 forces palette entries 0 / 255 to be black / white
d1793fb833 GOB: fix in oPlaytoons_printText
656cc44dfe GOB: use oPlaytoons_printText in Adibou2
f187fdf5a4 GOB: add an English version of Adibou ("Adiboo")
141cd85e75 GOB: workaround for an issue with text tool in Adibou2 paint game
572ac219ba GOB: another fillRect mode used in Adibou2, "fill except one color"
b6e991f1c4 GOB: implement case -1 of o1_keyFunc
a0c30a957e GOB: add more Adibou1 versions
680077d92b GOB: add save handler stubs for Adibou1
87536a16e4 GOB: fix errors in Adibou2 savegame files list
cab63f8d31 GOB: skip copy protection test in Adibou1
5d66b9a200 GOB: add some Adibou1 stubs
0ac43888f2 GOB: handle saving Adibou2 drawings on "floppy disk"
37965283bf COMMON: add support for "name table" resource in NE executables
4e77480374 GOB: cursors can now be loaded from NE executables
283fd1b103 GOB: more cursor resizing fixes for Adibou2
736223cb7b GOB: work around a bug in Adibou2 script of "pleasant/unpleasant" game
73a3b0580f GOB: fix a uint16/uint32 cast error in o2_pushVars
8a08d6470b GOB: o7_deleteFile, allow to delete all files matching a pattern
baf76dd2d7 GOB: increase Variables stack size (600 -> 1000)
d9951de616 GOB: fix a crash in o7_readData when filename is empty
33e13b2ba3 GOB: workaround a bug in Adibou2 scripts after character deletion
4a6520c670 GOB: fix exercises completion details in Adibou2 tree
0fcbc34266 GOB: fix regression in Adibou2 paths handling
bc18fc6361 GOB: workaround to handle application CD changes in some Adibou2 versions
2d0ee1ffa1 GOB: fix some parasite sprites issues in Adibou2
df04e1c74c GOB: drawing order bugfix in Adibou2
0f811dcd6a GOB: vertical offset bugfix when deflating VMD directly onto a video surface
4ae76a7812 GOB: in "printText" opcode, bits 8-16 of "backColor" indicate the destination surface
912f61c904 GOB: skip '\r' or '\n' bytes when printing text
375559b9e3 GOB: fix Adibou2 cake recipes not showing properly
709df52d48 GOB: fix some audio/video sync issues in Adibou2
9beca4c206 GOB: work around an infinite loop issue in Adibou 2 "change CD" screen
6705ee619d GOB: fix a typo in a comment
31e0fda5e7 GOB: more Adibou2 videos must be played in the background
653ae7caf3 GOB: ensure waitSoundEnd is not called on "live" videos
dc83f97a2e GOB: fix interrupted intro sound in Adibou2
012b520872 GOB: a few missing "0 -> nullptr" replacements
dd0748fa66 GOB: a few format fixes
0e5953ad67 GOB: fix a crash when returning to launcher from Adibou2
fc8d530e51 GOB: protection from sound-only videos without proper flags in Adibou2
19476c96a5 GOB: split the big "updateAnim" function
abade0260d GOB: fix some animation speed issues in Adibou2
988d4882a2 GOB: fix a few cursor glitches in Adibou2
685277c2ec GOB: fix another parasite sprite issue in Adibou2
31b759a281 GOB: GPLv2 -> GPLv3 in file headers added for Adibou
2300f9c7e9 GOB: reduce header dependency in Adibou2 changes
2ec5b0185d GOB: more comments on Map "oblique" coordinates used in Adibou2
6a1e2d5d21 GOB: misc format/style/typo fixes in Adibou2 changes
9f8622c38d GOB: add a few TODOs in Adibou2 changes
5d519ed33b GOB: be more conservative about possible regressions in Adibou2 changes
bf652277aa GOB: do not add anymore all subdirectories to the search path in Adibou2
a71b1c9e94 GOB: allow more path separators in "file path -> save handler" mapping
92f1d69939 GOB: restrict the Adibou2 "free bananas" workaround to versions confirmed without unwanted side effect
1e5cb46b6e GOB: fix a missing indentation (Adibou2)
38b5431bec GOB: fix the prefix of an Adibou2 game flag (ADGF_ -> GF_)
493c7d8954 GOB: update the list of files containing translatable strings
50a6555ec3 GOB: misc format/style fixes in Adibou2 changes
d2462684e1 GOB: Added sdelamarre to credits
0b792ec806 GOB: Added missing override keywords
25d8019a90 GOB: Fix warning
8ec11f3aa5 CREDITS: Update
Commit: d23e92c5c7d409615a88966ae8cd66866fe9fbc0
https://github.com/scummvm/scummvm/commit/d23e92c5c7d409615a88966ae8cd66866fe9fbc0
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:22+01:00
Commit Message:
GOB: implement case 65533 in o2_loadMapObjects()
Changed paths:
engines/gob/map_v2.cpp
engines/gob/mult.h
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 1962a2e6a4b..91b325038fd 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -72,9 +72,8 @@ void Map_v2::loadMapObjects(const char *avjFile) {
break;
case 65533: {
int index = READ_VARO_UINT16(var);
- // _vm->_mult->_objects[index].field_6E = 0;
- // _vm->_mult->_objects[index].field_6A = variables;
- warning("Map_v2::loadMapObjects(): ID == 65533 (%d)", index);
+ _vm->_mult->_objects[index].field_6E = 0;
+ _vm->_mult->_objects[index].field_6A = variables;
break;
}
case 65534:
diff --git a/engines/gob/mult.h b/engines/gob/mult.h
index c47f0dbbfff..9b0e276e3ef 100644
--- a/engines/gob/mult.h
+++ b/engines/gob/mult.h
@@ -102,6 +102,8 @@ public:
int16 newRight;
int16 newBottom;
uint32 videoSlot;
+ byte* field_6A;
+ byte field_6E;
} PACKED_STRUCT;
struct Mult_StaticKey {
Commit: 0358d870b5e3557f9d44c946a0debc6edd703a4b
https://github.com/scummvm/scummvm/commit/0358d870b5e3557f9d44c946a0debc6edd703a4b
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: add a few warnings on unimplemented cases
Changed paths:
engines/gob/draw_v2.cpp
engines/gob/map_v2.cpp
diff --git a/engines/gob/draw_v2.cpp b/engines/gob/draw_v2.cpp
index aacb4950c72..bac67fe5273 100644
--- a/engines/gob/draw_v2.cpp
+++ b/engines/gob/draw_v2.cpp
@@ -919,6 +919,7 @@ void Draw_v2::spriteOperation(int16 operation) {
break;
default:
+ warning("unkown operation %d in Draw_v2::spriteOperation", operation);
break;
}
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 91b325038fd..3e05a532401 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -58,6 +58,10 @@ void Map_v2::loadMapObjects(const char *avjFile) {
if (((uint16) id) >= 65520) {
switch ((uint16) id) {
+ case 65529:
+ warning("Map_v2::loadMapObjects(): ID == 65529"); // TODO: unimplemented case
+ break;
+
case 65530:
for (int i = 0; i < _mapWidth * _mapHeight; i++)
_passMap[i] -= READ_VARO_UINT8(var + i);
Commit: 32dc085cf4025a693c9344395c77eb74c67a4f5d
https://github.com/scummvm/scummvm/commit/32dc085cf4025a693c9344395c77eb74c67a4f5d
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: implement order correction feature in animate()
Enabled by _vm->_map->_mapUnknownBool.
Changed paths:
engines/gob/mult.h
engines/gob/mult_v2.cpp
diff --git a/engines/gob/mult.h b/engines/gob/mult.h
index 9b0e276e3ef..ee26f07def7 100644
--- a/engines/gob/mult.h
+++ b/engines/gob/mult.h
@@ -60,6 +60,14 @@ public:
int8 redrawAnimation;
uint8 redrawLayer;
uint8 redrawFrame;
+ uint8 field_1B;
+ uint8 field_1C;
+ uint8 field_1D;
+ uint8 field_1E;
+ uint8 field_1F;
+ uint8 field_20;
+ uint8 field_21;
+ uint8 field_22;
} PACKED_STRUCT;
struct Mult_GobState {
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index ec92ad01e16..364db9d1592 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -821,12 +821,49 @@ void Mult_v2::animate() {
advanceAllObjects();
// Find relevant objects
+ int8 currentOrder = (int8) _objCount;
for (int i = 0; i < _objCount; i++) {
Mult_Object &animObj = _objects[i];
Mult_AnimData &animData = *(animObj.pAnimData);
- if (_vm->_map->_mapUnknownBool) {
- // TODO!
+ if (_vm->_map->_mapUnknownBool && !animData.isStatic && animData.order != 100) {
+ animData.order = currentOrder;
+ animData.field_22 = 0;
+ animData.field_21 = 0;
+ if (animData.animType == 10 || animData.animType == 3) {
+ animData.field_21 = 1;
+ if (animData.curLookDir > 10 || animData.animType == 3) {
+ animData.field_22 = 1;
+ }
+ }
+
+ for (int j = 0; j < i; j++) {
+ Mult_Object &animObject2 = _objects[j];
+ Mult_AnimData &animData2 = *(animObject2.pAnimData);
+
+ if (animData2.isStatic || animData2.order == 100)
+ continue;
+
+ int8 orderCorrection = 0;
+ if (animData2.destY <= animData.destY || animData2.destX > animData.destX) {
+ if (animData2.destY >= animData.destY || animData2.destX <= animData.destX) {
+ if (animData.destX + animData.field_1F <= animData2.destX || animData.destY - animData.field_20 < animData2.destY) {
+ if (animData2.destX + animData2.field_1F > animData.destX && animData2.destY - animData2.field_20 >= animData.destY) {
+ orderCorrection = 1;
+ } else {
+ orderCorrection = -1;
+ }
+ } else {
+ orderCorrection = 1;
+ }
+ } else {
+ orderCorrection = -1;
+ }
+
+ animData.order += orderCorrection;
+ animData2.order -= orderCorrection;
+ }
+ }
}
animData.intersected = 200;
Commit: f6bb7902fc0df6637d708062dbf9ec0e63a6252b
https://github.com/scummvm/scummvm/commit/f6bb7902fc0df6637d708062dbf9ec0e63a6252b
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: Adibou2 drawing order fixes
Changed paths:
engines/gob/mult_v2.cpp
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 364db9d1592..adeab893a66 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -838,31 +838,36 @@ void Mult_v2::animate() {
}
for (int j = 0; j < i; j++) {
- Mult_Object &animObject2 = _objects[j];
- Mult_AnimData &animData2 = *(animObject2.pAnimData);
+ Mult_Object &previousAnimObject = _objects[j];
+ Mult_AnimData &previousAnimData = *(previousAnimObject.pAnimData);
- if (animData2.isStatic || animData2.order == 100)
+ if (previousAnimData.isStatic || previousAnimData.order == 100)
continue;
int8 orderCorrection = 0;
- if (animData2.destY <= animData.destY || animData2.destX > animData.destX) {
- if (animData2.destY >= animData.destY || animData2.destX <= animData.destX) {
- if (animData.destX + animData.field_1F <= animData2.destX || animData.destY - animData.field_20 < animData2.destY) {
- if (animData2.destX + animData2.field_1F > animData.destX && animData2.destY - animData2.field_20 >= animData.destY) {
+ if (previousAnimData.destY <= animData.destY
+ || previousAnimData.destX >= animData.destX) {
+ if (previousAnimData.destY >= animData.destY
+ || previousAnimData.destX <= animData.destX) {
+ if (animData.destX + animData.field_1F <= previousAnimData.destX
+ || animData.destY - animData.field_20 >= previousAnimData.destY) {
+ if (previousAnimData.destX + previousAnimData.field_1F > animData.destX
+ && previousAnimData.destY - previousAnimData.field_20 < animData.destY) {
orderCorrection = 1;
- } else {
- orderCorrection = -1;
}
} else {
- orderCorrection = 1;
+ orderCorrection = -1;
}
} else {
- orderCorrection = -1;
+ orderCorrection = 1;
}
-
- animData.order += orderCorrection;
- animData2.order -= orderCorrection;
}
+ else
+ orderCorrection = -1;
+
+
+ animData.order += orderCorrection;
+ previousAnimData.order -= orderCorrection;
}
}
Commit: 35eceb6bd3f30f1187b0d54f686be0d332fe74f1
https://github.com/scummvm/scummvm/commit/35eceb6bd3f30f1187b0d54f686be0d332fe74f1
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: draw sprites when animation < 0 without associated VMD
Changed paths:
engines/gob/inter_v1.cpp
engines/gob/map_v2.cpp
engines/gob/mult.h
engines/gob/scenery.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index ff250052a74..5a81c7ac7d9 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -496,6 +496,10 @@ void Inter_v1::o1_initMult() {
_vm->_mult->_objects[i].pAnimData->isStatic = 1;
_vm->_mult->_objects[i].tick = 0;
+ _vm->_mult->_objects[i].animName = nullptr;
+ _vm->_mult->_objects[i].field_38 = 0;
+ _vm->_mult->_objects[i].field_6A = nullptr;
+ _vm->_mult->_objects[i].field_6E = 0;
_vm->_mult->_objects[i].lastLeft = -1;
_vm->_mult->_objects[i].lastRight = -1;
_vm->_mult->_objects[i].lastTop = -1;
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 3e05a532401..736211949ee 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -59,7 +59,7 @@ void Map_v2::loadMapObjects(const char *avjFile) {
if (((uint16) id) >= 65520) {
switch ((uint16) id) {
case 65529:
- warning("Map_v2::loadMapObjects(): ID == 65529"); // TODO: unimplemented case
+ warning("Map_v2::loadMapObjects(): ID == 65529 unimplemented"); // TODO: unimplemented case
break;
case 65530:
diff --git a/engines/gob/mult.h b/engines/gob/mult.h
index ee26f07def7..55b5859b50c 100644
--- a/engines/gob/mult.h
+++ b/engines/gob/mult.h
@@ -110,6 +110,8 @@ public:
int16 newRight;
int16 newBottom;
uint32 videoSlot;
+ void* field_38;
+ char* animName;
byte* field_6A;
byte field_6E;
} PACKED_STRUCT;
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index cd9387c5b2e..29ad2760d84 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -566,6 +566,39 @@ void Scenery::freeAnim(int16 index) {
_animPictCount[index] = 0;
}
+void clipInRect(int16 left, int16 top, int16 width, int16 height, int16 *deltaX, int16 *deltaY,
+ int16 *leftPtr, int16 *topPtr, int16 *rightPtr, int16 *bottomPtr,
+ int16 layer) {
+ int16 posX = (int16)*leftPtr;
+ if (posX < left) {
+ if (!(layer & 0x80)) {
+ *deltaX += left - posX;
+ }
+
+ *leftPtr = left;
+ }
+
+ int16 right = left + width;
+ if (*rightPtr >= right) {
+ if (layer & 0x80) {
+ *deltaX += *rightPtr - (right - 1);
+ }
+
+ *rightPtr = right - 1;
+ }
+
+ int16 posY = (int16)*topPtr;
+ if (posY < top) {
+ *deltaY += top - posY;
+ *topPtr = top;
+ }
+
+ int16 bottom = top + height;
+ if (*bottomPtr >= bottom) {
+ *bottomPtr = bottom - 1;
+ }
+}
+
// flags & 1 - do capture all area animation is occupying
// flags & 4 == 0 - calculate animation final size
// flags & 2 != 0 - don't check with "toRedraw"'s
@@ -614,138 +647,231 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
Mult::Mult_Object &obj = _vm->_mult->_objects[-animation - 1];
if ((obj.videoSlot == 0) || !_vm->_vidPlayer->slotIsOpen(obj.videoSlot - 1)) {
- _toRedrawLeft = -12345;
- return;
- }
-
- if (frame >= (int32)_vm->_vidPlayer->getFrameCount(obj.videoSlot - 1))
- frame = _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1;
+ if (_vm->getGameType() == kGameTypeAdibou2) {
+ if (!(flags & 4))
+ _toRedrawLeft = -12345;
+
+ if (obj.animName != nullptr) {
+ warning("updateAnim Adibou2 stub (obj.animName=%s)", obj.animName);
+ } else {
+ auto &sprite = _vm->_draw->_spritesArray[50 - animation - 1];
+ if (sprite != nullptr) {
+ int16 sprite_top = 0;
+ int16 sprite_left = 0;
+ int16 sprite_dest_left = *obj.pPosX;
+ int16 sprite_dest_top = *obj.pPosY;
+ int16 sprite_dest_right = sprite_dest_left + sprite->getWidth() - 1;
+ int16 sprite_dest_bottom = sprite_dest_top + sprite->getHeight() - 1;
+
+ if (flags & 2) {
+ clipInRect(_vm->_mult->_animLeft,
+ _vm->_mult->_animTop,
+ _vm->_mult->_animWidth,
+ _vm->_mult->_animHeight,
+ &sprite_left,
+ &sprite_top,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+ } else if (flags & 4) {
+ clipInRect(_toRedrawLeft,
+ _toRedrawTop,
+ _toRedrawRight - _toRedrawLeft + 1,
+ _toRedrawBottom - _toRedrawTop + 1,
+ &sprite_left,
+ &sprite_top,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+ } else {
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ }
+
+ if (doDraw) {
+ if ((int32)*obj.pPosX > sprite_dest_right)
+ return;
+
+ if ((int32)*obj.pPosY > sprite_dest_bottom)
+ return;
+
+ _vm->_draw->_sourceSurface = 50 - animation - 1;
+ _vm->_draw->_destSurface = Draw::kBackSurface;
+
+ clipInRect(_vm->_mult->_animLeft,
+ _vm->_mult->_animTop,
+ _vm->_mult->_animWidth,
+ _vm->_mult->_animHeight,
+ &sprite_left,
+ &sprite_top,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+
+ _vm->_draw->_spriteLeft = sprite_left;
+ _vm->_draw->_spriteTop = sprite_top;
+ _vm->_draw->_spriteRight = sprite_dest_right - sprite_dest_left + 1;
+ _vm->_draw->_spriteBottom = sprite_dest_bottom - sprite_dest_top + 1;
+ _vm->_draw->_destSpriteX = sprite_dest_left,
+ _vm->_draw->_destSpriteY = sprite_dest_top,
+
+ _vm->_draw->_transparency = layer;
+ _vm->_draw->spriteOperation(DRAW_BLITSURF);
+ }
+
+ if (!(flags & 4)) {
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ // TODO word_4F6AF0 etc.
+ }
+ }
+ }
- if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) >= 255) {
- // Allow for object videos with more than 255 frames, although the
- // object frame counter is just a byte.
-
- uint32 curFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1;
- uint16 frameWrap = curFrame / 256;
-
- frame = ((frame + 1) % 256) + frameWrap * 256;
- }
+ return;
+ } else {
+ _toRedrawLeft = -12345;
+ return;
+ }
+ } else {
+ if (frame >= (int32)_vm->_vidPlayer->getFrameCount(obj.videoSlot - 1))
+ frame = _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1;
- if (frame != (int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1)) {
- // Seek to frame
+ if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) >= 255) {
+ // Allow for object videos with more than 255 frames, although the
+ // object frame counter is just a byte.
- VideoPlayer::Properties props;
+ uint32 curFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1;
+ uint16 frameWrap = curFrame / 256;
- props.forceSeek = true;
- props.waitEndFrame = false;
- props.lastFrame = frame;
+ frame = ((frame + 1) % 256) + frameWrap * 256;
+ }
- if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) < frame)
- props.startFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1;
- else
- props.startFrame = frame;
+ if (frame != (int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1)) {
+ // Seek to frame
- _vm->_vidPlayer->play(obj.videoSlot - 1, props);
- }
+ VideoPlayer::Properties props;
- int32 subtitle = _vm->_vidPlayer->getSubtitleIndex(obj.videoSlot - 1);
- if (subtitle != -1)
- _vm->_draw->printTotText(subtitle);
+ props.forceSeek = true;
+ props.waitEndFrame = false;
+ props.lastFrame = frame;
- destX = 0;
- destY = 0;
- left = *(obj.pPosX);
- top = *(obj.pPosY);
- right = left + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - 1;
- bottom = top + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) - 1;
+ if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) < frame)
+ props.startFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1;
+ else
+ props.startFrame = frame;
- if (flags & 2) {
- if (left < _vm->_mult->_animLeft) {
- destX += _vm->_mult->_animLeft - left;
- left = _vm->_mult->_animLeft;
+ _vm->_vidPlayer->play(obj.videoSlot - 1, props);
}
- if ((_vm->_mult->_animLeft + _vm->_mult->_animWidth) <= right)
- right = _vm->_mult->_animLeft + _vm->_mult->_animWidth - 1;
+ int32 subtitle = _vm->_vidPlayer->getSubtitleIndex(obj.videoSlot - 1);
+ if (subtitle != -1)
+ _vm->_draw->printTotText(subtitle);
- if (top < _vm->_mult->_animTop) {
- destY += _vm->_mult->_animTop - top;
- top = _vm->_mult->_animTop;
- }
+ destX = 0;
+ destY = 0;
+ left = *(obj.pPosX);
+ top = *(obj.pPosY);
+ right = left + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - 1;
+ bottom = top + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) - 1;
- if ((_vm->_mult->_animTop + _vm->_mult->_animHeight) <= bottom)
- bottom = _vm->_mult->_animTop + _vm->_mult->_animHeight - 1;
+ if (flags & 2) {
+ if (left < _vm->_mult->_animLeft) {
+ destX += _vm->_mult->_animLeft - left;
+ left = _vm->_mult->_animLeft;
+ }
- } else if (flags & 4) {
- if (left < _toRedrawLeft) {
- destX += _toRedrawLeft - left;
- left = _toRedrawLeft;
- }
+ if ((_vm->_mult->_animLeft + _vm->_mult->_animWidth) <= right)
+ right = _vm->_mult->_animLeft + _vm->_mult->_animWidth - 1;
- if (right > _toRedrawRight)
- right = _toRedrawRight;
+ if (top < _vm->_mult->_animTop) {
+ destY += _vm->_mult->_animTop - top;
+ top = _vm->_mult->_animTop;
+ }
- if (top < _toRedrawTop) {
- destY += _toRedrawTop - top;
- top = _toRedrawTop;
- }
+ if ((_vm->_mult->_animTop + _vm->_mult->_animHeight) <= bottom)
+ bottom = _vm->_mult->_animTop + _vm->_mult->_animHeight - 1;
- if (bottom > _toRedrawBottom)
- bottom = _toRedrawBottom;
+ } else if (flags & 4) {
+ if (left < _toRedrawLeft) {
+ destX += _toRedrawLeft - left;
+ left = _toRedrawLeft;
+ }
- } else {
- _toRedrawTop = top;
- _toRedrawLeft = left;
- _toRedrawRight = right;
- _toRedrawBottom = bottom;
- }
+ if (right > _toRedrawRight)
+ right = _toRedrawRight;
- if (doDraw) {
- if ((left > right) || (top > bottom))
- return;
-
- if (left < _vm->_mult->_animLeft) {
- destX += _vm->_mult->_animLeft - left;
- left = _vm->_mult->_animLeft;
- }
+ if (top < _toRedrawTop) {
+ destY += _toRedrawTop - top;
+ top = _toRedrawTop;
+ }
- if ((_vm->_mult->_animLeft + _vm->_mult->_animWidth) <= right)
- right = _vm->_mult->_animLeft + _vm->_mult->_animWidth - 1;
+ if (bottom > _toRedrawBottom)
+ bottom = _toRedrawBottom;
- if (top < _vm->_mult->_animTop) {
- destY += _vm->_mult->_animTop - top;
- top = _vm->_mult->_animTop;
+ } else {
+ _toRedrawTop = top;
+ _toRedrawLeft = left;
+ _toRedrawRight = right;
+ _toRedrawBottom = bottom;
}
- if ((_vm->_mult->_animTop + _vm->_mult->_animHeight) <= bottom)
- bottom = _vm->_mult->_animTop + _vm->_mult->_animHeight - 1;
-
- _vm->_draw->_spriteLeft = destX;
- _vm->_draw->_spriteTop = destY;
- _vm->_draw->_spriteRight = right - left + 1;
- _vm->_draw->_spriteBottom = bottom - top + 1;
- _vm->_draw->_destSpriteX = left;
- _vm->_draw->_destSpriteY = top;
- _vm->_draw->_transparency = layer;
- if (layer & 0x80)
- _vm->_draw->_spriteLeft = _vm->_vidPlayer->getWidth(obj.videoSlot - 1) -
- (destX + _vm->_draw->_spriteRight);
-
- _vm->_vidPlayer->copyFrame(obj.videoSlot - 1, *_vm->_draw->_backSurface,
- _vm->_draw->_spriteLeft, _vm->_draw->_spriteTop,
- _vm->_draw->_spriteRight, _vm->_draw->_spriteBottom,
- _vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
- (_vm->_draw->_transparency != 0) ? 0 : -1);
-
- _vm->_draw->invalidateRect(_vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
- _vm->_draw->_destSpriteX + _vm->_draw->_spriteRight - 1,
- _vm->_draw->_destSpriteY + _vm->_draw->_spriteBottom - 1);
+ if (doDraw) {
+ if ((left > right) || (top > bottom))
+ return;
+
+ if (left < _vm->_mult->_animLeft) {
+ destX += _vm->_mult->_animLeft - left;
+ left = _vm->_mult->_animLeft;
+ }
+
+ if ((_vm->_mult->_animLeft + _vm->_mult->_animWidth) <= right)
+ right = _vm->_mult->_animLeft + _vm->_mult->_animWidth - 1;
+
+ if (top < _vm->_mult->_animTop) {
+ destY += _vm->_mult->_animTop - top;
+ top = _vm->_mult->_animTop;
+ }
+
+ if ((_vm->_mult->_animTop + _vm->_mult->_animHeight) <= bottom)
+ bottom = _vm->_mult->_animTop + _vm->_mult->_animHeight - 1;
+
+ _vm->_draw->_spriteLeft = destX;
+ _vm->_draw->_spriteTop = destY;
+ _vm->_draw->_spriteRight = right - left + 1;
+ _vm->_draw->_spriteBottom = bottom - top + 1;
+ _vm->_draw->_destSpriteX = left;
+ _vm->_draw->_destSpriteY = top;
+ _vm->_draw->_transparency = layer;
+ if (layer & 0x80)
+ _vm->_draw->_spriteLeft = _vm->_vidPlayer->getWidth(obj.videoSlot - 1) -
+ (destX + _vm->_draw->_spriteRight);
+
+ _vm->_vidPlayer->copyFrame(obj.videoSlot - 1, *_vm->_draw->_backSurface,
+ _vm->_draw->_spriteLeft, _vm->_draw->_spriteTop,
+ _vm->_draw->_spriteRight, _vm->_draw->_spriteBottom,
+ _vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
+ (_vm->_draw->_transparency != 0) ? 0 : -1);
+
+ _vm->_draw->invalidateRect(_vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
+ _vm->_draw->_destSpriteX + _vm->_draw->_spriteRight - 1,
+ _vm->_draw->_destSpriteY + _vm->_draw->_spriteBottom - 1);
+ }
}
if (!(flags & 4)) {
- _animLeft = _toRedrawLeft = left;
- _animTop = _toRedrawTop = top;
- _animRight = _toRedrawRight = right;
+ _animLeft = _toRedrawLeft = left;
+ _animTop = _toRedrawTop = top;
+ _animRight = _toRedrawRight = right;
_animBottom = _toRedrawBottom = bottom;
}
Commit: 394b96ab8a66c67123fd708d244dffa7ba5d0722
https://github.com/scummvm/scummvm/commit/394b96ab8a66c67123fd708d244dffa7ba5d0722
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: no surface width rounding for Adibou2
Changed paths:
engines/gob/video.cpp
diff --git a/engines/gob/video.cpp b/engines/gob/video.cpp
index e71eacef926..b5f22897008 100644
--- a/engines/gob/video.cpp
+++ b/engines/gob/video.cpp
@@ -224,7 +224,8 @@ SurfacePtr Video::initSurfDesc(int16 width, int16 height, int16 flags) {
} else {
assert(!(flags & DISABLE_SPR_ALLOC));
- if (!(flags & SCUMMVM_CURSOR))
+
+ if (!(flags & SCUMMVM_CURSOR) && _vm->getGameType() != kGameTypeAdibou2)
width = (width + 7) & 0xFFF8;
descPtr = SurfacePtr(new Surface(width, height, _vm->getPixelFormat().bytesPerPixel));
Commit: 8cf57d9d4a64e59c051f9248677b1be76cfbea1a
https://github.com/scummvm/scummvm/commit/8cf57d9d4a64e59c051f9248677b1be76cfbea1a
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: add stub for o7_moveFile (op draw 0x62)
Changed paths:
engines/gob/inter.h
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 248aecd7d24..e991421346d 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -682,6 +682,7 @@ protected:
void o7_intToString();
void o7_callFunction();
void o7_loadFunctions();
+ void o7_moveFile();
void o7_playVmdOrMusic();
void o7_draw0x89();
void o7_findFile();
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 63fc0c34409..6af217c3acf 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -62,6 +62,7 @@ void Inter_v7::setupOpcodesDraw() {
OPCODEDRAW(0x57, o7_intToString);
OPCODEDRAW(0x59, o7_callFunction);
OPCODEDRAW(0x5A, o7_loadFunctions);
+ OPCODEDRAW(0x62, o7_moveFile);
OPCODEDRAW(0x83, o7_playVmdOrMusic);
OPCODEDRAW(0x89, o7_draw0x89);
OPCODEDRAW(0x8A, o7_findFile);
@@ -263,6 +264,21 @@ void Inter_v7::o7_loadFunctions() {
_vm->_game->loadFunctions(tot, flags);
}
+void Inter_v7::o7_moveFile() {
+ Common::String path1 = _vm->_game->_script->evalString();
+ Common::String path2 = _vm->_game->_script->evalString();
+
+ Common::String file1 = getFile(path1.c_str());
+ Common::String file2 = getFile(path2.c_str());
+
+ if (file1.equalsIgnoreCase(file2)) {
+ warning("o7_moveFile(): \"%s\" == \"%s\"", path1.c_str(), path2.c_str());
+ return;
+ }
+
+ warning("Adibou2 Stub: move file from \"%s\" to \"%s\"", file1.c_str(), file2.c_str());
+}
+
void Inter_v7::o7_playVmdOrMusic() {
Common::String file = _vm->_game->_script->evalString();
Commit: 57d69cf188a221cb78eda85ba8e99849ba7ac767
https://github.com/scummvm/scummvm/commit/57d69cf188a221cb78eda85ba8e99849ba7ac767
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: Fix hotspot issue leading to unbreakable waiting state in Adibou2
The hotspot id must be converted to signed integer before being written to game variables.
Changed paths:
engines/gob/hotspots.cpp
diff --git a/engines/gob/hotspots.cpp b/engines/gob/hotspots.cpp
index a960112264c..750a9720be0 100644
--- a/engines/gob/hotspots.cpp
+++ b/engines/gob/hotspots.cpp
@@ -2022,7 +2022,7 @@ void Hotspots::setCurrentHotspot(const uint16 *ids, uint16 id) const {
}
if (Hotspot::getState(id) == kStateFilled)
- WRITE_VAR(16, ids[id & 0xFFF]);
+ WRITE_VAR(16, (int16) ids[id & 0xFFF]);
else
WRITE_VAR(16, id & 0xFFF);
}
Commit: f104d53bb6941d6d8fa68245c9a2e40965b22fe4
https://github.com/scummvm/scummvm/commit/f104d53bb6941d6d8fa68245c9a2e40965b22fe4
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: Fix cursor palette issue in Adibou2
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 6af217c3acf..cb9ff3e7ef8 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -168,7 +168,7 @@ void Inter_v7::o7_loadCursor() {
_vm->_draw->_cursorHeight - 1, 0);
// If the cursor name is empty, that cursor will be drawn by the scripts
- if (cursorName.empty()) {
+ if (cursorName.empty() || cursorName == "VIDE") { // "VIDE" is "empty" in french
// Make sure the cursors sprite is big enough and set to non-extern palette
resizeCursors(-1, -1, cursorIndex + 1, true);
_vm->_draw->_doCursorPalettes[cursorIndex] = false;
Commit: 0f95ad760f330432d44582c91e1fa409f7b59dd4
https://github.com/scummvm/scummvm/commit/0f95ad760f330432d44582c91e1fa409f7b59dd4
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:23+01:00
Commit Message:
GOB: save children personal data and completed exercises in Adibou2
child personal data: name, birth date, face sprite
Changed paths:
engines/gob/inter.h
engines/gob/inter_v7.cpp
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index e991421346d..e2446fb8680 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -661,7 +661,6 @@ protected:
Common::String getFile(const char *path);
-private:
bool readSprite(Common::String file, int32 dataVar, int32 size, int32 offset);
};
@@ -698,6 +697,8 @@ protected:
void o7_closedBase();
void o7_getDBString();
+ void o7_readData(OpFuncParams ¶ms);
+
void o7_oemToANSI(OpGobParams ¶ms);
void o7_gob0x201(OpGobParams ¶ms);
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index cb9ff3e7ef8..5794609cf23 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -37,6 +37,7 @@
#include "gob/expression.h"
#include "gob/videoplayer.h"
#include "gob/sound/sound.h"
+#include "gob/save/saveload.h"
namespace Gob {
@@ -81,6 +82,7 @@ void Inter_v7::setupOpcodesDraw() {
void Inter_v7::setupOpcodesFunc() {
Inter_Playtoons::setupOpcodesFunc();
+ OPCODEFUNC(0x4D, o7_readData);
}
void Inter_v7::setupOpcodesGob() {
@@ -635,6 +637,83 @@ void Inter_v7::o7_getDBString() {
WRITE_VAR(27, 1); // Success
}
+void Inter_v7::o7_readData(OpFuncParams ¶ms) {
+ Common::String file = getFile(_vm->_game->_script->evalString());
+
+ uint16 dataVar = _vm->_game->_script->readVarIndex();
+ int32 size = _vm->_game->_script->readValExpr();
+ int32 offset = _vm->_game->_script->evalInt();
+ int32 retSize = 0;
+
+ debugC(2, kDebugFileIO, "Read from file \"%s\" (%d, %d bytes at %d)",
+ file.c_str(), dataVar, size, offset);
+
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file.c_str());
+ if (mode == SaveLoad::kSaveModeSave) {
+
+ WRITE_VAR(1, 1);
+
+ if (!_vm->_saveLoad->load(file.c_str(), dataVar, size, offset)) {
+ // Too noisy, the scripts often try to load "save" file not existing (yet)
+ // GUI::MessageDialog dialog(_("Failed to load saved game from file."));
+ // dialog.runModal();
+ } else
+ WRITE_VAR(1, 0);
+
+ return;
+
+ } else if (mode == SaveLoad::kSaveModeIgnore)
+ return;
+
+ if (size < 0) {
+ if (readSprite(file, dataVar, size, offset))
+ WRITE_VAR(1, 0);
+ return;
+ } else if (size == 0) {
+ dataVar = 0;
+ size = _vm->_game->_script->getVariablesCount() * 4;
+ }
+
+ byte *buf = _variables->getAddressOff8(dataVar);
+
+ if (file[0] == 0) {
+ WRITE_VAR(1, size);
+ return;
+ }
+
+ WRITE_VAR(1, 1);
+ Common::SeekableReadStream *stream = _vm->_dataIO->getFile(file);
+ if (!stream)
+ return;
+
+ _vm->_draw->animateCursor(4);
+ if (offset > stream->size()) {
+ warning("oPlaytoons_readData: File \"%s\", Offset (%d) > file size (%d)",
+ file.c_str(), offset, (int)stream->size());
+ delete stream;
+ return;
+ }
+
+ if (offset < 0)
+ stream->seek(offset + 1, SEEK_END);
+ else
+ stream->seek(offset);
+
+ if (((dataVar >> 2) == 59) && (size == 4)) {
+ WRITE_VAR(59, stream->readUint32LE());
+ // The scripts in some versions divide through 256^3 then,
+ // effectively doing a LE->BE conversion
+ if ((_vm->getPlatform() != Common::kPlatformDOS) && (VAR(59) < 256))
+ WRITE_VAR(59, SWAP_BYTES_32(VAR(59)));
+ } else
+ retSize = stream->read(buf, size);
+
+ if (retSize == size)
+ WRITE_VAR(1, 0);
+
+ delete stream;
+}
+
void Inter_v7::o7_oemToANSI(OpGobParams ¶ms) {
_vm->_game->_script->skip(2);
}
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index d387ce657d8..af6e4bb162e 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -888,10 +888,11 @@ protected:
SaveFile *getSaveFile(const char *fileName);
};
-/** Save/Load class for Playtoons. */
+/** Save/Load class for Adibou 2/Adi. */
class SaveLoad_v7: public SaveLoad {
public:
static const uint32 kChildrenCount = 16;
+ static const uint32 kAdibou2NbrOfApplications = 5;
SaveLoad_v7(GobEngine *vm, const char *targetName);
~SaveLoad_v7() override;
@@ -906,12 +907,51 @@ protected:
const char *description;
};
+ class FaceHandler : public TempSpriteHandler {
+ public:
+ FaceHandler(GobEngine *vm, const Common::String &target, const Common::String &ext);
+ ~FaceHandler() override;
+
+ int32 getSize() override;
+ bool load(int16 dataVar, int32 size, int32 offset) override;
+ bool save(int16 dataVar, int32 size, int32 offset) override;
+
+ private:
+ class File : public SlotFileStatic {
+ public:
+ File(GobEngine *vm, const Common::String &base, const Common::String &ext);
+ ~File() override;
+ };
+
+ File _file;
+ };
+
+ class GameFileHandler : public SaveHandler {
+ public:
+ GameFileHandler(GobEngine *vm, const Common::String &target, const Common::String &ext);
+ ~GameFileHandler() override;
+
+ int32 getSize() override;
+ bool load(int16 dataVar, int32 size, int32 offset) override;
+ bool save(int16 dataVar, int32 size, int32 offset) override;
+
+ private:
+ class File : public SlotFileStatic {
+ public:
+ File(GobEngine *vm, const Common::String &base, const Common::String &ext);
+ ~File() override;
+ };
+
+ File _file;
+ };
+
static SaveFile _saveFiles[];
- TempSpriteHandler *_faceHandler[kChildrenCount];
+ FaceHandler *_faceHandler[kChildrenCount];
FakeFileHandler *_childrenHandler;
FakeFileHandler *_debilHandler;
- FakeFileHandler *_configHandler;
+ GameFileHandler *_configHandler;
+ GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 313d373351d..f12dc0a0a5b 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -45,41 +45,289 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"visage15.inf", kSaveModeSave, nullptr, "face" }, // Child 15
{"visage16.inf", kSaveModeSave, nullptr, "face" }, // Child 16
{ "enfant.inf", kSaveModeSave, nullptr, "children" },
- { "debil.tmp", kSaveModeSave, nullptr, nullptr },
+ { "debil.tmp", kSaveModeSave, nullptr, nullptr },
{ "config.inf", kSaveModeSave, nullptr, "configuration"},
-// Addy 4 Base
- {"config00.inf", kSaveModeSave, nullptr, nullptr },
- {"statev00.inf", kSaveModeSave, nullptr, nullptr },
+ // Adibou Applications 1-5
+ {"Gsa01_01.inf", kSaveModeSave, nullptr, "app progress" }, // Child 01
+ {"Gsa02_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_02.inf", kSaveModeSave, nullptr, "app progress" }, // Child 02
+ {"Gsa02_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_03.inf", kSaveModeSave, nullptr, "app progress" }, // Child 03
+ {"Gsa02_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_04.inf", kSaveModeSave, nullptr, "app progress" }, // Child 04
+ {"Gsa02_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_05.inf", kSaveModeSave, nullptr, "app progress" }, // Child 05
+ {"Gsa02_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_06.inf", kSaveModeSave, nullptr, "app progress" }, // Child 06
+ {"Gsa02_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_07.inf", kSaveModeSave, nullptr, "app progress" }, // Child 07
+ {"Gsa02_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_08.inf", kSaveModeSave, nullptr, "app progress" }, // Child 08
+ {"Gsa02_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_09.inf", kSaveModeSave, nullptr, "app progress" }, // Child 09
+ {"Gsa02_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_10.inf", kSaveModeSave, nullptr, "app progress" }, // Child 10
+ {"Gsa02_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_11.inf", kSaveModeSave, nullptr, "app progress" }, // Child 11
+ {"Gsa02_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_12.inf", kSaveModeSave, nullptr, "app progress" }, // Child 12
+ {"Gsa02_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_13.inf", kSaveModeSave, nullptr, "app progress" }, // Child 13
+ {"Gsa02_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_14.inf", kSaveModeSave, nullptr, "app progress" }, // Child 14
+ {"Gsa02_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_15.inf", kSaveModeSave, nullptr, "app progress" }, // Child 15
+ {"Gsa02_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_16.inf", kSaveModeSave, nullptr, "app progress" }, // Child 16
+ {"Gsa02_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa03_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa04_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa05_16.inf", kSaveModeSave, nullptr, "app progress" },
+
+ // Addy 4 Base
+ {"config00.inf", kSaveModeSave, nullptr, nullptr },
+ {"statev00.inf", kSaveModeSave, nullptr, nullptr },
// Addy 4 Grundschule
- { "premier.dep", kSaveModeSave, nullptr, nullptr },
- { "quitter.dep", kSaveModeSave, nullptr, nullptr },
- { "appel.dep", kSaveModeSave, nullptr, nullptr },
- { "parole.dep", kSaveModeSave, nullptr, nullptr },
- { "ado4.inf", kSaveModeSave, nullptr, nullptr },
- {"mcurrent.inf", kSaveModeSave, nullptr, nullptr },
- { "perso.dep", kSaveModeSave, nullptr, nullptr },
- { "nouveau.dep", kSaveModeSave, nullptr, nullptr },
- { "adi.tmp", kSaveModeSave, nullptr, nullptr },
- { "adi.inf", kSaveModeSave, nullptr, nullptr },
- { "adi4.tmp", kSaveModeSave, nullptr, nullptr }
+ { "premier.dep", kSaveModeSave, nullptr, nullptr },
+ { "quitter.dep", kSaveModeSave, nullptr, nullptr },
+ { "appel.dep", kSaveModeSave, nullptr, nullptr },
+ { "parole.dep", kSaveModeSave, nullptr, nullptr },
+ { "ado4.inf", kSaveModeSave, nullptr, nullptr },
+ {"mcurrent.inf", kSaveModeSave, nullptr, nullptr },
+ { "perso.dep", kSaveModeSave, nullptr, nullptr },
+ { "nouveau.dep", kSaveModeSave, nullptr, nullptr },
+ { "adi.tmp", kSaveModeSave, nullptr, nullptr },
+ { "adi.inf", kSaveModeSave, nullptr, nullptr },
+ { "adi4.tmp", kSaveModeSave, nullptr, nullptr }
};
+SaveLoad_v7::FaceHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
+SlotFileStatic(vm, base, ext) {
+}
+
+SaveLoad_v7::FaceHandler::File::~File() {
+}
+
+
+SaveLoad_v7::FaceHandler::FaceHandler(GobEngine *vm, const Common::String &target, const Common::String &ext)
+ : TempSpriteHandler(vm), _file(vm, target, ext) {
+}
+
+SaveLoad_v7::FaceHandler::~FaceHandler() {
+}
+
+int32 SaveLoad_v7::FaceHandler::getSize() {
+ Common::String fileName = _file.build();
+
+ if (fileName.empty())
+ return -1;;
+
+ SaveReader reader(1, 0, fileName);
+ SaveHeader header;
+
+ if (!reader.load())
+ return -1;
+
+ if (!reader.readPartHeader(0, &header))
+ return -1;
+
+ // Return the part's size
+ return header.getSize();
+}
+
+bool SaveLoad_v7::FaceHandler::load(int16 dataVar, int32 size, int32 offset)
+{
+ if (!TempSpriteHandler::createFromSprite(dataVar, size, offset))
+ return false;
+
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ SaveReader reader(1, 0, fileName);
+ if (!reader.load())
+ return false;
+
+ if (!reader.readPart(0, _sprite))
+ return false;
+
+ return TempSpriteHandler::load(dataVar, size, offset);
+}
+
+bool SaveLoad_v7::FaceHandler::save(int16 dataVar, int32 size, int32 offset)
+{
+ if (!TempSpriteHandler::save(dataVar, size, offset))
+ return false;
+
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ SaveWriter writer(1, 0, fileName);
+ return writer.writePart(0, _sprite);
+}
+
+SaveLoad_v7::GameFileHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
+SlotFileStatic(vm, base, ext) {
+}
+
+SaveLoad_v7::GameFileHandler::File::~File() {
+}
+
+
+SaveLoad_v7::GameFileHandler::GameFileHandler(GobEngine *vm, const Common::String &target, const Common::String &ext) :
+SaveHandler(vm), _file(vm, target, ext) {
+}
+
+SaveLoad_v7::GameFileHandler::~GameFileHandler() {
+}
+
+int32 SaveLoad_v7::GameFileHandler::getSize() {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return -1;
+
+ SaveReader reader(1, 0, fileName);
+ SaveHeader header;
+
+ if (!reader.load())
+ return -1;
+
+ if (!reader.readPartHeader(0, &header))
+ return -1;
+
+ // Return the part's size
+ return header.getSize();
+}
+
+bool SaveLoad_v7::GameFileHandler::load(int16 dataVar, int32 size, int32 offset) {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ uint32 varSize = SaveHandler::getVarSize(_vm);
+ if (size == 0) {
+ // Indicator to load all variables
+ dataVar = 0;
+ size = (int32) varSize;
+ }
+
+ SaveReader reader(1, 0, fileName);
+ SavePartVars vars(_vm, size);
+
+
+ if (!reader.load()) {
+ return false;
+ }
+
+ if (!reader.readPart(0, &vars)) {
+ return false;
+ }
+
+ if (!vars.writeInto((uint16) dataVar, offset, size)) {
+ return false;
+ }
+
+ return true;
+}
+
+bool SaveLoad_v7::GameFileHandler::save(int16 dataVar, int32 size, int32 offset) {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ uint32 varSize = SaveHandler::getVarSize(_vm);
+ if (size == 0) {
+ // Indicator to save all variables
+ dataVar = 0;
+ size = (int32) varSize;
+ }
+
+ SaveWriter writer(1, 0, fileName);
+ SavePartVars vars(_vm, size);
+
+ if (!vars.readFrom((uint16) dataVar, offset, size))
+ return false;
+
+ return writer.writePart(0, &vars);
+}
+
+
SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
SaveLoad(vm) {
- for (uint32 i = 0; i < kChildrenCount; i++)
- _saveFiles[i].handler = _faceHandler[i] = new TempSpriteHandler(_vm);
+ uint32 index = 0;
+ for (uint32 i = 0; i < kChildrenCount; i++) {
+ _saveFiles[index++].handler = _faceHandler[i] = new FaceHandler(_vm,
+ targetName,
+ Common::String::format("vsg%02d", i + 1));
+ }
- _saveFiles[16].handler = _childrenHandler = new FakeFileHandler(_vm);
- _saveFiles[17].handler = _debilHandler = new FakeFileHandler(_vm);
- _saveFiles[18].handler = _configHandler = new FakeFileHandler(_vm);
+ _saveFiles[index++].handler = _childrenHandler = new FakeFileHandler(_vm);
+ _saveFiles[index++].handler = _debilHandler = new FakeFileHandler(_vm);
+ _saveFiles[index++].handler = _configHandler = new GameFileHandler(_vm, targetName, "cfg");
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ {
+ for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
+ {
+ Common::String ext = Common::String::format("gsa%02d_%02d", j + 1, i + 1);
+ _saveFiles[index++].handler = _adibou2AppProgressHandler[i][j] = new GameFileHandler(_vm,
+ targetName,
+ ext);
+ }
+ }
for (int i = 0; i < 2; i++)
- _saveFiles[19 + i].handler = _addy4BaseHandler[i] = new FakeFileHandler(_vm);
+ _saveFiles[index++].handler = _addy4BaseHandler[i] = new FakeFileHandler(_vm);
for (int i = 0; i < 11; i++)
- _saveFiles[21 + i].handler = _addy4GrundschuleHandler[i] = new FakeFileHandler(_vm);
+ _saveFiles[index++].handler = _addy4GrundschuleHandler[i] = new FakeFileHandler(_vm);
}
SaveLoad_v7::~SaveLoad_v7() {
@@ -93,6 +341,12 @@ SaveLoad_v7::~SaveLoad_v7() {
delete _debilHandler;
delete _childrenHandler;
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ {
+ for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
+ delete _adibou2AppProgressHandler[i][j];
+ }
+
for (uint32 i = 0; i < kChildrenCount; i++)
delete _faceHandler[i];
}
Commit: 9c3ed44a8adc2d6be654c521099adf1452783274
https://github.com/scummvm/scummvm/commit/9c3ed44a8adc2d6be654c521099adf1452783274
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: save Adibou2 environment state
environment: flowers, vegetable garden...
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index af6e4bb162e..80dda8c599c 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -945,15 +945,41 @@ protected:
File _file;
};
+ class EnvironmentHandler : public SaveHandler {
+ public:
+ EnvironmentHandler(GobEngine *vm, const Common::String &target, const Common::String &ext);
+ ~EnvironmentHandler() override;
+
+ int32 getSize() override;
+ bool load(int16 dataVar, int32 size, int32 offset) override;
+ bool save(int16 dataVar, int32 size, int32 offset) override;
+
+ private:
+ class File : public SlotFileStatic {
+ public:
+ File(GobEngine *vm, const Common::String &base, const Common::String &ext);
+ ~File() override;
+ };
+
+ static const int kNbrOfParts = 6;
+ static const Common::Array<int> kPartOffsets;
+ static int offset_to_part(int offset);
+
+ File _file;
+ SaveReader _reader;
+ SaveWriter _writer;
+ };
+
static SaveFile _saveFiles[];
- FaceHandler *_faceHandler[kChildrenCount];
- FakeFileHandler *_childrenHandler;
- FakeFileHandler *_debilHandler;
- GameFileHandler *_configHandler;
- GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
- FakeFileHandler *_addy4BaseHandler[2];
- FakeFileHandler *_addy4GrundschuleHandler[11];
+ FaceHandler *_faceHandler[kChildrenCount];
+ FakeFileHandler *_childrenHandler;
+ FakeFileHandler *_debilHandler;
+ GameFileHandler *_configHandler;
+ EnvironmentHandler *_adibou2EnvHandler[kChildrenCount];
+ GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
+ FakeFileHandler *_addy4BaseHandler[2];
+ FakeFileHandler *_addy4GrundschuleHandler[11];
SaveHandler *getHandler(const char *fileName) const override;
const char *getDescription(const char *fileName) const override;
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index f12dc0a0a5b..dac816dc450 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -47,6 +47,23 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{ "enfant.inf", kSaveModeSave, nullptr, "children" },
{ "debil.tmp", kSaveModeSave, nullptr, nullptr },
{ "config.inf", kSaveModeSave, nullptr, "configuration"},
+ // Adibou environment (flowers, vegetables...)
+ {"enviro01.inf", kSaveModeSave, nullptr, "environment" }, // Child 01
+ {"enviro02.inf", kSaveModeSave, nullptr, "environment" }, // Child 02
+ {"enviro03.inf", kSaveModeSave, nullptr, "environment" }, // Child 03
+ {"enviro04.inf", kSaveModeSave, nullptr, "environment" }, // Child 04
+ {"enviro05.inf", kSaveModeSave, nullptr, "environment" }, // Child 05
+ {"enviro06.inf", kSaveModeSave, nullptr, "environment" }, // Child 06
+ {"enviro07.inf", kSaveModeSave, nullptr, "environment" }, // Child 07
+ {"enviro08.inf", kSaveModeSave, nullptr, "environment" }, // Child 08
+ {"enviro09.inf", kSaveModeSave, nullptr, "environment" }, // Child 09
+ {"enviro10.inf", kSaveModeSave, nullptr, "environment" }, // Child 10
+ {"enviro11.inf", kSaveModeSave, nullptr, "environment" }, // Child 11
+ {"enviro12.inf", kSaveModeSave, nullptr, "environment" }, // Child 12
+ {"enviro13.inf", kSaveModeSave, nullptr, "environment" }, // Child 13
+ {"enviro14.inf", kSaveModeSave, nullptr, "environment" }, // Child 14
+ {"enviro15.inf", kSaveModeSave, nullptr, "environment" }, // Child 15
+ {"enviro16.inf", kSaveModeSave, nullptr, "environment" }, // Child 16
// Adibou Applications 1-5
{"Gsa01_01.inf", kSaveModeSave, nullptr, "app progress" }, // Child 01
{"Gsa02_01.inf", kSaveModeSave, nullptr, "app progress" },
@@ -297,7 +314,105 @@ bool SaveLoad_v7::GameFileHandler::save(int16 dataVar, int32 size, int32 offset)
return writer.writePart(0, &vars);
}
+SaveLoad_v7::EnvironmentHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
+SlotFileStatic(vm, base, ext) {
+}
+
+SaveLoad_v7::EnvironmentHandler::File::~File() {
+}
+
+SaveLoad_v7::EnvironmentHandler::EnvironmentHandler(GobEngine *vm, const Common::String &target, const Common::String &ext) :
+SaveHandler(vm),
+_file(vm, target, ext),
+_reader(kNbrOfParts, 0, _file.build()),
+_writer(kNbrOfParts, 0, _file.build()) {
+}
+
+SaveLoad_v7::EnvironmentHandler::~EnvironmentHandler() {
+}
+
+const Common::Array<int> SaveLoad_v7::EnvironmentHandler::kPartOffsets = {0, 1764, 2564, 3284, 6684, 7192};
+int SaveLoad_v7::EnvironmentHandler::offset_to_part(int offset)
+{
+ for (int i = 0; i < kNbrOfParts; ++i) {
+ if (offset == kPartOffsets[i]) {
+ return i;
+ }
+ }
+
+ warning("No part with offset %d, defaults to part 0", offset);
+ return 0;
+}
+
+int32 SaveLoad_v7::EnvironmentHandler::getSize() {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return -1;
+
+ if (!_reader.load())
+ return -1;
+
+ int32 totalSize = 0;
+ for (int i = 0; i < kNbrOfParts; ++i)
+ {
+ SaveHeader header;
+ if (!_reader.readPartHeader(0, &header))
+ return -1;
+
+ totalSize += (int32) header.getSize();
+ }
+
+ return totalSize;
+}
+
+bool SaveLoad_v7::EnvironmentHandler::load(int16 dataVar, int32 size, int32 offset) {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ uint32 varSize = SaveHandler::getVarSize(_vm);
+ if (size == 0) {
+ // Indicator to load all variables
+ dataVar = 0;
+ size = (int32) varSize;
+ }
+
+ SavePartVars vars(_vm, size);
+
+ if (!_reader.load()) {
+ return false;
+ }
+
+ if (!_reader.readPart(offset_to_part(offset), &vars)) {
+ return false;
+ }
+ if (!vars.writeInto((uint16) dataVar, 0, size)) {
+ return false;
+ }
+
+ return true;
+}
+
+bool SaveLoad_v7::EnvironmentHandler::save(int16 dataVar, int32 size, int32 offset) {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ uint32 varSize = SaveHandler::getVarSize(_vm);
+ if (size == 0) {
+ // Indicator to save all variables
+ dataVar = 0;
+ size = (int32) varSize;
+ }
+
+ SavePartVars vars(_vm, size);
+
+ if (!vars.readFrom((uint16) dataVar, 0, size))
+ return false;
+
+ return _writer.writePart(offset_to_part(offset), &vars);
+}
SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
SaveLoad(vm) {
@@ -312,6 +427,11 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
_saveFiles[index++].handler = _childrenHandler = new FakeFileHandler(_vm);
_saveFiles[index++].handler = _debilHandler = new FakeFileHandler(_vm);
_saveFiles[index++].handler = _configHandler = new GameFileHandler(_vm, targetName, "cfg");
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ _saveFiles[index++].handler = _adibou2EnvHandler[i] = new EnvironmentHandler(_vm,
+ targetName,
+ Common::String::format("env%02d", i + 1));
+
for (uint32 i = 0; i < kChildrenCount; i++)
{
for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
@@ -343,6 +463,8 @@ SaveLoad_v7::~SaveLoad_v7() {
for (uint32 i = 0; i < kChildrenCount; i++)
{
+ delete _adibou2EnvHandler[i];
+
for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
delete _adibou2AppProgressHandler[i][j];
}
Commit: 24b6eeb0a023a5ccba76e8a629ac5faf3453eebe
https://github.com/scummvm/scummvm/commit/24b6eeb0a023a5ccba76e8a629ac5faf3453eebe
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: Adibou2 characters animations
Changed paths:
A engines/gob/goblin_v7.cpp
engines/gob/gob.cpp
engines/gob/goblin.cpp
engines/gob/goblin.h
engines/gob/inter.h
engines/gob/inter_v1.cpp
engines/gob/inter_v7.cpp
engines/gob/map_v2.cpp
engines/gob/module.mk
engines/gob/mult.h
engines/gob/mult_v2.cpp
engines/gob/scenery.cpp
engines/gob/videoplayer.h
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index aef249d0b83..adb21565595 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -629,7 +629,7 @@ Common::Error GobEngine::initGameParts() {
_mult = new Mult_v2(this);
_draw = new Draw_v2(this);
_map = new Map_v2(this);
- _goblin = new Goblin_v4(this);
+ _goblin = new Goblin_v7(this);
_scenery = new Scenery_v2(this);
_saveLoad = new SaveLoad_v7(this, _targetName.c_str());
break;
diff --git a/engines/gob/goblin.cpp b/engines/gob/goblin.cpp
index 7f822c84c04..49d83d8c7ca 100644
--- a/engines/gob/goblin.cpp
+++ b/engines/gob/goblin.cpp
@@ -1917,4 +1917,8 @@ void Goblin::updateLayer2(Mult::Mult_AnimData *animData) {
}
}
+void Goblin::changeDirection(Mult::Mult_Object *obj, int16 animState) {
+ warning("Goblin::changeDirection not implemented !");
+}
+
} // End of namespace Gob
diff --git a/engines/gob/goblin.h b/engines/gob/goblin.h
index d137d649261..4c89e1a966b 100644
--- a/engines/gob/goblin.h
+++ b/engines/gob/goblin.h
@@ -228,6 +228,7 @@ public:
virtual void initiateMove(Mult::Mult_Object *obj) = 0;
virtual void moveAdvance(Mult::Mult_Object *obj, Gob_Object *gobDesc,
int16 nextAct, int16 framesCount) = 0;
+ virtual void changeDirection(Mult::Mult_Object *obj, int16 animState);
Goblin(GobEngine *vm);
virtual ~Goblin();
@@ -326,6 +327,15 @@ private:
int16 turnState(int16 state, uint16 dir);
};
+class Goblin_v7 : public Goblin_v4 {
+public:
+ Goblin_v7(GobEngine *vm);
+ ~Goblin_v7() override {}
+
+ void initiateMove(Mult::Mult_Object *obj);
+ void changeDirection(Mult::Mult_Object *obj, int16 animState);
+};
+
} // End of namespace Gob
#endif // GOB_GOBLIN_H
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
new file mode 100644
index 00000000000..be351f45d12
--- /dev/null
+++ b/engines/gob/goblin_v7.cpp
@@ -0,0 +1,311 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "gob/global.h"
+#include "gob/gob.h"
+#include "gob/goblin.h"
+#include "gob/inter.h"
+#include "gob/map.h"
+#include "gob/mult.h"
+#include "gob/scenery.h"
+#include "gob/videoplayer.h"
+
+namespace Gob {
+
+Goblin_v7::Goblin_v7(GobEngine *vm) : Goblin_v4(vm) {
+}
+
+static void sub_4309D3(Draw *draw, Mult::Mult_Object &obj) {
+ if (obj.field_38 != nullptr) {
+ Mult::Mult_AnimData animData = *obj.pAnimData;
+ draw->freeSprite(50 - animData.animation - 1);
+ // sub_473261()
+
+ if (obj.field_50)
+ obj.field_3C = nullptr;
+ else
+ obj.field_38[10] = 0;
+
+ if (obj.field_38[40] != 0) {
+
+ }
+ }
+
+ obj.field_38 = nullptr;
+ obj.animName[0] = '\0';
+}
+
+void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
+ char str[128];
+ obj->pAnimData->layer &= 3;
+ int32 var_4 = 0;
+ Common::strlcpy(str, obj->animName, 128);
+ if (obj->pAnimData->curLookDir >= 10) {
+ if (obj->pAnimData->curLookDir == 26 ||
+ obj->pAnimData->curLookDir == 36) {
+ if (str[strlen(str) - 1] == 'U') {
+ str[strlen(str) - 3] = '\0';
+ } else
+ str[strlen(str) - 2] = '\0';
+ } else {
+ str[strlen(str) - 3] = '\0';
+ }
+ } else {
+ str[strlen(str) - 2] = '\0';
+ }
+
+ if (animState < 100)
+ var_4 = 1;
+ else
+ var_4 = 0;
+
+ animState %= 100;
+ obj->pAnimData->curLookDir = animState;
+
+ int16 var_98 = 0;
+ int16 var_9C = 0;
+ while (true) {
+ if (animState <= 0 || animState > obj->animVariables[2]) {
+ obj->pAnimData->animType = 11;
+ return;
+ } else {
+ int16 *var_94 = obj->animVariables + animState * obj->animVariables[1];
+ if (*var_94 == 0) {
+ var_98 = var_94[1];
+ var_9C = var_94[2];
+ } else {
+ if ((int8)*var_94 == -2) {
+ switch (animState) {
+ case 1:
+ animState = 5;
+ break;
+ case 2:
+ animState = 4;
+ break;
+ case 4:
+ animState = 2;
+ break;
+ case 5:
+ animState = 1;
+ break;
+ case 6:
+ animState = 8;
+ break;
+ case 8:
+ animState = 6;
+ break;
+ case 31:
+ case 32:
+ case 33:
+ case 34:
+ case 35:
+ case 36:
+ animState -= 10;
+ break;
+ default: // 3, 7, 9-30, > 36
+ obj->pAnimData->animType = 11;
+ return;
+ }
+
+ obj->pAnimData->layer |= 0x80;
+ var_98 = var_94[1];
+ var_9C = var_94[2];
+ } else if ((int8)*var_94 == -1) {
+ obj->pAnimData->animType = 11;
+ return;
+ } else {
+ animState = *var_94;
+ continue;
+ }
+ }
+ }
+
+ break;
+ }
+
+ int32 var_A4 = 0;
+ if (obj->pAnimData->stateType == 1) {
+ var_A4 = animState;
+ if (var_A4 == 22)
+ animState = 27;
+ else if (var_A4 == 25)
+ animState = 26;
+ }
+
+ switch (animState) {
+ case 1:
+ Common::strlcat(str, "GG", 128);
+ break;
+ case 2:
+ Common::strlcat(str, "GH", 128);
+ break;
+ case 3:
+ Common::strlcat(str, "HH", 128);
+ break;
+ case 4:
+ Common::strlcat(str, "DH", 128);
+ break;
+ case 5:
+ Common::strlcat(str, "DD", 128);
+ break;
+ case 6:
+ Common::strlcat(str, "DB", 128);
+ break;
+ case 7:
+ Common::strlcat(str, "BB", 128);
+ break;
+ case 8:
+ Common::strlcat(str, "GB", 128);
+ break;
+ case 21:
+ Common::strlcat(str, "COG", 128);
+ break;
+ case 22:
+ warning("Goblin_v7::changeDirection: animState == 22 not implemented");
+ break;
+ case 23:
+ Common::strlcat(str, "EXP", 128);
+ break;
+ case 24:
+ Common::strlcat(str, "FRA", 128);
+ break;
+ case 25:
+ warning("Goblin_v7::changeDirection: animState == 25 not implemented");
+ break;
+ case 26:
+ warning("Goblin_v7::changeDirection: animState == 26 not implemented");
+ break;
+ case 27:
+ warning("Goblin_v7::changeDirection: animState == 27 not implemented");
+ break;
+
+ default:
+ Common::strlcat(str, Common::String::format("%02d", animState).c_str(), 128);
+ }
+
+ if (strcmp(str, obj->animName) != 0) {
+ Common::strlcpy(obj->animName, str, 16);
+ }
+
+ int32 var_88 = 0;
+ int32 var_90 = 0;
+ if (_vm->_map->_mapUnknownBool) {
+ var_88 = (_vm->_map->getTilesWidth() / 2) * obj->pAnimData->destX +
+ (_vm->_map->getTilesWidth() / 2) * obj->pAnimData->destY -
+ (_vm->_map->getTilesWidth() * 39) / 2;
+
+ var_90 = (_vm->_map->getTilesHeight() / 2) * obj->pAnimData->destY -
+ (_vm->_map->getTilesHeight() / 2) * obj->pAnimData->destX +
+ (_vm->_map->getTilesHeight() * 20);
+
+ if (animState > 10) {
+ obj->destX = obj->pAnimData->destX;
+ obj->goblinX = obj->destX;
+ obj->destY = obj->pAnimData->destY;
+ obj->goblinY = obj->destY;
+ }
+ } else {
+ var_90 = obj->pAnimData->destY * _vm->_map->getTilesHeight();
+ var_88 = obj->pAnimData->destX * _vm->_map->getTilesWidth();
+ }
+
+ *obj->pPosX = var_88 + var_98;
+ *obj->pPosY = var_90 + var_9C;
+ obj->pAnimData->frame = 0;
+ if (var_4 == 0) {
+ sub_4309D3(_vm->_draw, *obj);
+
+ VideoPlayer::Properties props;
+ props.x = -1;
+ props.y = -1;
+ props.startFrame = 0;
+ props.lastFrame = 0;
+ props.breakKey = 0;
+ props.flags = 0x1201;
+ props.palStart = 0;
+ props.palEnd = 0;
+
+ Common::strlcpy(obj->animName, str, 16);
+ if (obj->videoSlot > 0)
+ _vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
+
+ int slot = _vm->_vidPlayer->openVideo(false, str, props);
+ obj->videoSlot = slot + 1;
+ } else {
+ if (obj->field_38 == nullptr ||
+ strcmp(obj->animName, str) != 0 ||
+ obj->field_38[28] & 0x800) {
+
+ VideoPlayer::Properties props;
+ props.x = -1;
+ props.y = -1;
+ props.startFrame = 0;
+ props.lastFrame = 0;
+ props.breakKey = 0;
+ props.flags = 0x1601;
+ props.palStart = 0;
+ props.palEnd = 0;
+
+ if (obj->videoSlot > 0)
+ _vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
+
+ int slot = _vm->_vidPlayer->openVideo(false, str, props);
+ obj->videoSlot = slot + 1;
+ }
+ }
+}
+
+void Goblin_v7::initiateMove(Mult::Mult_Object *obj) {
+ int32 animState = 0;
+ if (obj->destX != obj->gobDestX || obj->destY != obj->gobDestY) {
+ animState = 1;
+ }
+
+ if (animState == 0) {
+ obj->pAnimData->newState = animState;
+ changeDirection(obj, animState);
+ } else {
+ if (obj->pAnimData->destX != obj->pAnimData->field_1D || obj->pAnimData->destY != obj->pAnimData->field_1E)
+ obj->pAnimData->pathExistence = 2;
+ else
+ obj->pAnimData->pathExistence = 1;
+
+ obj->pAnimData->animType = 12;
+ if (obj->pAnimData->curLookDir >= 20) {
+ if (obj->pAnimData->curLookDir >= 30) {
+ if (obj->pAnimData->curLookDir >= 40)
+ return;
+ else {
+ changeDirection(obj, 105);
+ obj->pAnimData->pathExistence = 3;
+ }
+ } else {
+ changeDirection(obj, 101);
+ obj->pAnimData->pathExistence = 3;
+ }
+ } else {
+ changeDirection(obj, obj->pAnimData->curLookDir + 100);
+ }
+ }
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index e2446fb8680..4f3db4dd55d 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -678,6 +678,8 @@ protected:
void o7_loadCursor();
void o7_displayWarning();
void o7_logString();
+ void o7_moveGoblin();
+ void o7_setGoblinState();
void o7_intToString();
void o7_callFunction();
void o7_loadFunctions();
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 5a81c7ac7d9..e813fbecdbd 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -496,9 +496,9 @@ void Inter_v1::o1_initMult() {
_vm->_mult->_objects[i].pAnimData->isStatic = 1;
_vm->_mult->_objects[i].tick = 0;
- _vm->_mult->_objects[i].animName = nullptr;
+ _vm->_mult->_objects[i].animName[0] = '\0';
_vm->_mult->_objects[i].field_38 = 0;
- _vm->_mult->_objects[i].field_6A = nullptr;
+ _vm->_mult->_objects[i].animVariables = nullptr;
_vm->_mult->_objects[i].field_6E = 0;
_vm->_mult->_objects[i].lastLeft = -1;
_vm->_mult->_objects[i].lastRight = -1;
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 5794609cf23..09889d61f0d 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -60,6 +60,8 @@ void Inter_v7::setupOpcodesDraw() {
OPCODEDRAW(0x0D, o7_loadCursor);
OPCODEDRAW(0x44, o7_displayWarning);
OPCODEDRAW(0x45, o7_logString);
+ OPCODEDRAW(0x52, o7_moveGoblin);
+ OPCODEDRAW(0x55, o7_setGoblinState);
OPCODEDRAW(0x57, o7_intToString);
OPCODEDRAW(0x59, o7_callFunction);
OPCODEDRAW(0x5A, o7_loadFunctions);
@@ -235,6 +237,62 @@ void Inter_v7::o7_logString() {
t.tm_hour, t.tm_min, t.tm_sec, str1.c_str());
}
+void Inter_v7::o7_moveGoblin() {
+ int16 destX, destY;
+ int16 index;
+
+ destX = _vm->_game->_script->readValExpr();
+ destY = _vm->_game->_script->readValExpr();
+ index = _vm->_game->_script->readValExpr();
+
+ Mult::Mult_Object &obj = _vm->_mult->_objects[index];
+ Mult::Mult_AnimData &animData = *(obj.pAnimData);
+
+ if (animData.animType < 10 || animData.animType > 12)
+ return;
+
+ animData.pathExistence = 0;
+ animData.animTypeBak = 0;
+ animData.framesLeft = 0;
+ animData.isBusy = 0;
+ animData.redrawFrame = destX;
+ animData.field_1D = destX;
+ animData.field_1B = destY;
+ animData.field_1E = destY;
+ animData.newState = 0;
+ animData.stateType = animData.destX;
+ animData.animTypeBak = animData.destY;
+
+ if (animData.animType == 10 && animData.curLookDir <= 10)
+ return;
+
+ animData.field_1B = animData.destX;
+ animData.field_1C = animData.destY;
+ animData.animType = 10;
+
+ _vm->_goblin->initiateMove(&obj);
+}
+
+void Inter_v7::o7_setGoblinState() {
+ int16 index = _vm->_game->_script->readValExpr();
+ int16 state = _vm->_game->_script->readValExpr();
+ int16 type = _vm->_game->_script->readValExpr();
+
+ Mult::Mult_Object &obj = _vm->_mult->_objects[index];
+ Mult::Mult_AnimData &animData = *(obj.pAnimData);
+
+ if (animData.animType < 10 || animData.animType > 12)
+ return;
+
+ animData.pathExistence = 1;
+ animData.animType = 10;
+ animData.redrawAnimation = animData.stateType;
+ animData.redrawLayer = animData.animTypeBak;
+
+ _vm->_goblin->changeDirection(&obj, state + type*100);
+}
+
+
void Inter_v7::o7_intToString() {
uint16 valueIndex = _vm->_game->_script->readVarIndex();
uint16 destIndex = _vm->_game->_script->readVarIndex();
@@ -341,6 +399,8 @@ void Inter_v7::o7_playVmdOrMusic() {
*_vm->_mult->_objects[props.startFrame].pPosY = y;
}
+ Common::strlcpy(_vm->_mult->_objects[props.startFrame].animName, file.c_str(), 16);
+
return;
} else if (props.lastFrame == -4) {
warning("Woodruff Stub: Video/Music command -4: Play background video %s", file.c_str());
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 736211949ee..432d4eec849 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -77,7 +77,7 @@ void Map_v2::loadMapObjects(const char *avjFile) {
case 65533: {
int index = READ_VARO_UINT16(var);
_vm->_mult->_objects[index].field_6E = 0;
- _vm->_mult->_objects[index].field_6A = variables;
+ _vm->_mult->_objects[index].animVariables = (int16*) variables;
break;
}
case 65534:
diff --git a/engines/gob/module.mk b/engines/gob/module.mk
index 0a09eb8404e..24fc7193198 100644
--- a/engines/gob/module.mk
+++ b/engines/gob/module.mk
@@ -27,6 +27,7 @@ MODULE_OBJS := \
goblin_v2.o \
goblin_v3.o \
goblin_v4.o \
+ goblin_v7.o \
hotspots.o \
iniconfig.o \
init.o \
diff --git a/engines/gob/mult.h b/engines/gob/mult.h
index 55b5859b50c..cbacf5327f0 100644
--- a/engines/gob/mult.h
+++ b/engines/gob/mult.h
@@ -110,10 +110,12 @@ public:
int16 newRight;
int16 newBottom;
uint32 videoSlot;
- void* field_38;
- char* animName;
- byte* field_6A;
- byte field_6E;
+ uint32* field_38;
+ byte* field_3C;
+ char animName[16];
+ int8 field_50;
+ int16* animVariables;
+ int8 field_6E;
} PACKED_STRUCT;
struct Mult_StaticKey {
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index adeab893a66..b57f7262481 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -718,8 +718,20 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
animData.animType = 11;
if (animData.animType == 11) {
- if (animData.isBusy != 0)
- warning("Woodruff Stub: AnimType 11");
+ if (animData.isBusy != 0) {
+ if (animData.animTypeBak == 1) {
+ if (animData.framesLeft != 0) {
+ --animData.framesLeft;
+ }
+ else {
+ _vm->_goblin->changeDirection(&animObj, animData.isBusy);
+ animData.isBusy = 0;
+ animData.animTypeBak = 0;
+ animData.animType = 10;
+ }
+
+ }
+ }
return;
}
@@ -790,7 +802,15 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
break;
case 10:
- warning("Woodruff Stub: AnimType 10");
+ if (_vm->_map->_mapUnknownBool) {
+ int8 deltaY = animObj.destY - animObj.goblinY;
+ if (deltaY == -1) {
+ *animObj.pPosX = *animObj.pPosX - _vm->_map->getTilesWidth();
+ }
+ else if (deltaY == 1) {
+ *animObj.pPosX = *animObj.pPosX + _vm->_map->getTilesWidth();
+ }
+ }
break;
default:
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index 29ad2760d84..a3a69596f8d 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -651,7 +651,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
if (!(flags & 4))
_toRedrawLeft = -12345;
- if (obj.animName != nullptr) {
+ if (obj.animName[0] != '\0') {
warning("updateAnim Adibou2 stub (obj.animName=%s)", obj.animName);
} else {
auto &sprite = _vm->_draw->_spritesArray[50 - animation - 1];
diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h
index ee561892295..e0d645f4771 100644
--- a/engines/gob/videoplayer.h
+++ b/engines/gob/videoplayer.h
@@ -84,9 +84,9 @@ public:
int16 breakKey; ///< Keycode of the break/abort key.
uint16 palCmd; ///< Palette command.
- int16 palStart; ///< Palette entry to start with.
- int16 palEnd; ///< Palette entry to end at.
- int32 palFrame; ///< Frame to apply the palette command at.
+ int16 palStart; ///< Palette entry to start with.
+ int16 palEnd; ///< Palette entry to end at.
+ int32 palFrame; ///< Frame to apply the palette command at.
bool noBlock; ///< Non-blocking "live" video?
Commit: c0f76d75784e9b3fdfea149286ef038e98a7faf0
https://github.com/scummvm/scummvm/commit/c0f76d75784e9b3fdfea149286ef038e98a7faf0
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: Adibou2 characters path computation
Changed paths:
engines/gob/goblin.h
engines/gob/goblin_v7.cpp
engines/gob/inter_v7.cpp
engines/gob/mult.h
engines/gob/mult_v2.cpp
engines/gob/scenery.cpp
diff --git a/engines/gob/goblin.h b/engines/gob/goblin.h
index 4c89e1a966b..a2815c45543 100644
--- a/engines/gob/goblin.h
+++ b/engines/gob/goblin.h
@@ -334,6 +334,12 @@ public:
void initiateMove(Mult::Mult_Object *obj);
void changeDirection(Mult::Mult_Object *obj, int16 animState);
+
+private:
+ int32 computeObjNextDirection(Mult::Mult_Object &obj);
+ int32 findPath(int8 x, int8 y, int8 destX, int8 destY);
+ bool directionWalkable(int8 x, int8 y, int8 direction);
+ int32 directionFromOriginAndDest(int8 x, int8 y, int8 destX, int8 destY);
};
} // End of namespace Gob
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index be351f45d12..f88eb2da0fe 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -81,19 +81,21 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
animState %= 100;
obj->pAnimData->curLookDir = animState;
- int16 var_98 = 0;
- int16 var_9C = 0;
+ int16 newXCorrection = 0;
+ int16 newYCorrection = 0;
while (true) {
+ // obj->animVariables[1]: number of fields per state
+ // obj->animVariables[2]: max number of states
if (animState <= 0 || animState > obj->animVariables[2]) {
obj->pAnimData->animType = 11;
return;
} else {
- int16 *var_94 = obj->animVariables + animState * obj->animVariables[1];
- if (*var_94 == 0) {
- var_98 = var_94[1];
- var_9C = var_94[2];
+ int16 *animVariablesForState = obj->animVariables + animState * obj->animVariables[1];
+ if (animVariablesForState[0] == 0) {
+ newXCorrection = animVariablesForState[1];
+ newYCorrection = animVariablesForState[2];
} else {
- if ((int8)*var_94 == -2) {
+ if (animVariablesForState[0] == -2) {
switch (animState) {
case 1:
animState = 5;
@@ -127,13 +129,13 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
}
obj->pAnimData->layer |= 0x80;
- var_98 = var_94[1];
- var_9C = var_94[2];
- } else if ((int8)*var_94 == -1) {
+ newXCorrection = animVariablesForState[1];
+ newYCorrection = animVariablesForState[2];
+ } else if (animVariablesForState[0] == -1) {
obj->pAnimData->animType = 11;
return;
} else {
- animState = *var_94;
+ animState = animVariablesForState[0];
continue;
}
}
@@ -206,14 +208,15 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
Common::strlcpy(obj->animName, str, 16);
}
- int32 var_88 = 0;
- int32 var_90 = 0;
+ int32 newX = 0;
+ int32 newY = 0;
if (_vm->_map->_mapUnknownBool) {
- var_88 = (_vm->_map->getTilesWidth() / 2) * obj->pAnimData->destX +
+ // Weird coordinates mapping
+ newX = (_vm->_map->getTilesWidth() / 2) * obj->pAnimData->destX +
(_vm->_map->getTilesWidth() / 2) * obj->pAnimData->destY -
(_vm->_map->getTilesWidth() * 39) / 2;
- var_90 = (_vm->_map->getTilesHeight() / 2) * obj->pAnimData->destY -
+ newY = (_vm->_map->getTilesHeight() / 2) * obj->pAnimData->destY -
(_vm->_map->getTilesHeight() / 2) * obj->pAnimData->destX +
(_vm->_map->getTilesHeight() * 20);
@@ -224,12 +227,12 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
obj->goblinY = obj->destY;
}
} else {
- var_90 = obj->pAnimData->destY * _vm->_map->getTilesHeight();
- var_88 = obj->pAnimData->destX * _vm->_map->getTilesWidth();
+ newY = obj->pAnimData->destY * _vm->_map->getTilesHeight();
+ newX = obj->pAnimData->destX * _vm->_map->getTilesWidth();
}
- *obj->pPosX = var_88 + var_98;
- *obj->pPosY = var_90 + var_9C;
+ *obj->pPosX = newX + newXCorrection;
+ *obj->pPosY = newY + newYCorrection;
obj->pAnimData->frame = 0;
if (var_4 == 0) {
sub_4309D3(_vm->_draw, *obj);
@@ -243,6 +246,7 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
props.flags = 0x1201;
props.palStart = 0;
props.palEnd = 0;
+ props.sprite = -obj->pAnimData->animation - 1;
Common::strlcpy(obj->animName, str, 16);
if (obj->videoSlot > 0)
@@ -253,7 +257,7 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
} else {
if (obj->field_38 == nullptr ||
strcmp(obj->animName, str) != 0 ||
- obj->field_38[28] & 0x800) {
+ obj->field_38[4] & 0x800) {
VideoPlayer::Properties props;
props.x = -1;
@@ -264,27 +268,260 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
props.flags = 0x1601;
props.palStart = 0;
props.palEnd = 0;
+ props.sprite = -obj->pAnimData->animation - 1;
if (obj->videoSlot > 0)
_vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
int slot = _vm->_vidPlayer->openVideo(false, str, props);
+ debugC(1, kDebugVideo, "Playing video \"%s\" (change directions 2) @ %d+%d, frames %d - %d, "
+ "paletteCmd %d (%d - %d), flags %X, slot = %d", str,
+ props.x, props.y, props.startFrame, props.lastFrame,
+ props.palCmd, props.palStart, props.palEnd, props.flags, slot);
obj->videoSlot = slot + 1;
}
}
}
+/*
+ * 0: (0, 0)
+ * 1: (-1, -1)
+ * 2: (0, -1)
+ * 3: (1, -1)
+ * 4: (1, 0)
+ * 5: (1, 1)
+ * 6: (0, 1)
+ * 7: (-1, 1)
+ * 8: (-1, 0)
+ * 9: (0, 0)
+ */
+
+static int8 deltaXFromDirection[10] = {0, -1, 0, 1, 1, 1, 0, -1, -1, 0};
+static int8 deltaYFromDirection[10] = {0, -1, -1, -1, 0, 1, 1, 1, 0, 0};
+
+static void updateGobDest(Map *map, Mult::Mult_Object &obj) {
+ if (map->getPass(obj.gobDestX, obj.gobDestY, map->getMapWidth())) {
+ int8 newGobDestX = 0;
+ int32 var_8 = 1000;
+ int8 newGobDestY = 0;
+ int32 direction = 2;
+ for (;direction <= 8; direction += 2) {
+ int32 nbrOfStepsDir = 0;
+ int8 tempGobDestX = obj.gobDestX;
+ int8 tempGobDestY = obj.gobDestY;
+
+ while (true) {
+ tempGobDestX += deltaXFromDirection[direction];
+ tempGobDestY += deltaYFromDirection[direction];
+ nbrOfStepsDir++;
+ if (tempGobDestX < 0
+ || tempGobDestX >= map->getMapWidth()
+ || tempGobDestY < 0
+ || tempGobDestY >= map->getMapHeight()) {
+ break;
+ }
+
+ if (!map->getPass(tempGobDestX, tempGobDestY, map->getMapWidth())) {
+ if (nbrOfStepsDir < var_8) {
+ newGobDestX = tempGobDestX;
+ newGobDestY = tempGobDestY;
+ var_8 = nbrOfStepsDir;
+ break;
+ }
+ }
+ }
+ }
+
+ if (var_8 != 1000) {
+ obj.gobDestX = newGobDestX;
+ obj.gobDestY = newGobDestY;
+ }
+ }
+}
+
+int8 directionFromDeltaXY(int8 deltaX, int8 deltaY) {
+ for (int8 direction = 1; direction <= 8; ++direction) {
+ if (deltaXFromDirection[direction] == deltaX &&
+ deltaYFromDirection[direction] == deltaY)
+ return direction;
+ }
+ return 0;
+}
+
+bool Goblin_v7::directionWalkable(int8 x, int8 y, int8 direction) {
+ int8 newX = x + deltaXFromDirection[direction];
+ int8 newY = y + deltaYFromDirection[direction];
+ if (newX >= 0 &&
+ newX < _vm->_map->getMapWidth() &&
+ newY >= 0 &&
+ newY < _vm->_map->getMapHeight()) {
+ return _vm->_map->getPass(x, y, direction);
+ }
+ else
+ return false;
+}
+
+int32 Goblin_v7::directionFromOriginAndDest(int8 x, int8 y, int8 destX, int8 destY) {
+ int8 deltaX = 0;
+ int8 deltaY = 0;
+
+ if (destX < x)
+ deltaX = -1;
+ else if (destX > x)
+ deltaX = 1;
+
+ if (destY < y)
+ deltaY = -1;
+ else if (destY > y)
+ deltaY = 1;
+
+ int8 direction = directionFromDeltaXY(deltaX, deltaY);
+ if (directionWalkable(x, y, direction))
+ return direction;
+
+ // Look for another walkable direction
+ direction -= 1;
+ if (direction <= 0)
+ direction += 8;
+ if (directionWalkable(x, y, direction))
+ return direction;
+
+ direction += 2;
+ if (direction > 8)
+ direction -= 8;
+ if (directionWalkable(x, y, direction))
+ return direction;
+
+ direction -= 3;
+ if (direction <= 0)
+ direction += 8;
+ if (directionWalkable(x, y, direction))
+ return -direction;
+
+ direction += 4;
+ if (direction > 8)
+ direction -= 8;
+ if (directionWalkable(x, y, direction))
+ return -direction;
+
+ return 0;
+}
+
+
+int32 Goblin_v7::findPath(int8 x, int8 y, int8 destX, int8 destY) {
+ int8 newX = x;
+ int8 newY = y;
+ int8 previousDir = -1;
+ int8 var_8 = 0;
+ int8 var_18 = 0;
+ int8 var_1C = 0;
+
+ while (true)
+ {
+ int8 direction = directionFromOriginAndDest(newX, newY , destX, destY);
+ if (direction == 0)
+ return 0;
+
+ if (direction >= 0) {
+ if (var_8 == 1) {
+ var_8 = 2;
+ var_1C = findPath(x, y, newX, newY);
+ if (var_1C > 0)
+ var_18 = var_1C;
+ }
+ }
+ else {
+ direction = -direction;
+ if (var_8 == 0)
+ var_8 = 1;
+ }
+
+ if (previousDir > 0) {
+ previousDir += 4;
+ if (previousDir > 8)
+ previousDir -= 8;
+ }
+
+ if (direction == previousDir) {
+ direction += 4;
+ if (direction > 8)
+ direction -= 8;
+
+ if (!directionWalkable(newX, newY, direction))
+ return 0;
+ }
+
+ if (var_18 == 0)
+ var_18 = direction;
+
+ previousDir = direction;
+ newX += deltaXFromDirection[direction];
+ newY += deltaYFromDirection[direction];
+
+ if (newX != destX || newY != destY)
+ continue;
+ else
+ return var_18;
+ }
+}
+
+int32 Goblin_v7::computeObjNextDirection(Mult::Mult_Object &obj) {
+ Mult::Mult_AnimData animData = *obj.pAnimData;
+ if (animData.stateType == 1) {
+ warning("Adibou2 computeObjNextDirection animData.stateType == 1 stub");
+ return 0;
+ }
+ else {
+ updateGobDest(_vm->_map, obj);
+ int32 direction = findPath(obj.goblinX, obj.goblinY, obj.gobDestX, obj.gobDestY);
+ if (direction == 0) {
+ direction = directionFromOriginAndDest(obj.goblinX, obj.goblinY, obj.gobDestX, obj.gobDestY);
+ if (direction < 0)
+ direction = -direction;
+ }
+
+ if (animData.newState > 0) {
+ int32 newState = animData.newState + 4;
+ if (newState > 8) {
+ newState -= 8;
+ }
+
+ if (direction == newState) {
+ direction = animData.newState;
+ if (!directionWalkable(obj.goblinX, obj.goblinY, direction))
+ return 0;
+ }
+ }
+
+ if (direction < 0)
+ return 0;
+
+ obj.destX = obj.goblinX + deltaXFromDirection[direction];
+ obj.destY = obj.goblinY + deltaYFromDirection[direction];
+ return direction;
+ }
+}
+
void Goblin_v7::initiateMove(Mult::Mult_Object *obj) {
int32 animState = 0;
- if (obj->destX != obj->gobDestX || obj->destY != obj->gobDestY) {
- animState = 1;
+ if (obj->goblinX != obj->gobDestX || obj->goblinY != obj->gobDestY) {
+ debugC(5, kDebugGameFlow, "Computing Obj %s new state (obj->goblinX = %d, obj->gobDestX = %d, obj->goblinY = %d, obj->gobDestY = %d)",
+ obj->animName, obj->goblinX , obj->gobDestX , obj->goblinY ,obj->gobDestY);
+
+ animState = computeObjNextDirection(*obj);
+
+ debugC(5, kDebugGameFlow, "Obj %s new state = %d (obj->goblinX = %d, obj->gobDestX = %d, obj->goblinY = %d, obj->gobDestY = %d)",
+ obj->animName, animState, obj->goblinX , obj->gobDestX , obj->goblinY ,obj->gobDestY);
}
- if (animState == 0) {
+ debugC(5, kDebugGameFlow, "Obj %s initiateMove (lookDir=%d, obj->posX=%d, obj->posY=%d, obj->goblinX = %d, obj->gobDestX = %d, obj->goblinY = %d, obj->gobDestY = %d)",
+ obj->animName, obj->pAnimData->curLookDir, (int16) *obj->pPosX, (int16) *obj->pPosY, obj->goblinX , obj->gobDestX , obj->goblinY , obj->gobDestY);
+
+ if (animState != 0) {
obj->pAnimData->newState = animState;
changeDirection(obj, animState);
} else {
- if (obj->pAnimData->destX != obj->pAnimData->field_1D || obj->pAnimData->destY != obj->pAnimData->field_1E)
+ if (obj->pAnimData->destX != obj->pAnimData->gobDestX_maybe || obj->pAnimData->destY != obj->pAnimData->gobDestY_maybe)
obj->pAnimData->pathExistence = 2;
else
obj->pAnimData->pathExistence = 1;
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 09889d61f0d..105fccecfeb 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -255,21 +255,23 @@ void Inter_v7::o7_moveGoblin() {
animData.animTypeBak = 0;
animData.framesLeft = 0;
animData.isBusy = 0;
- animData.redrawFrame = destX;
- animData.field_1D = destX;
- animData.field_1B = destY;
- animData.field_1E = destY;
+ obj.gobDestX = destX;
+ animData.gobDestX_maybe = destX;
+ obj.gobDestY = destY;
+ animData.gobDestY_maybe = destY;
animData.newState = 0;
- animData.stateType = animData.destX;
- animData.animTypeBak = animData.destY;
+ obj.goblinX = animData.destX;
+ obj.goblinY = animData.destY;
if (animData.animType == 10 && animData.curLookDir <= 10)
return;
- animData.field_1B = animData.destX;
- animData.field_1C = animData.destY;
+ animData.destXBak = animData.destX;
+ animData.destYBak = animData.destY;
animData.animType = 10;
+ debugC(1, kDebugVideo, "o7_moveGoblin Obj %s destX = %d, destY = %d (gobX = %d, gobY = %d) ", obj.animName, destX, destY, obj.goblinX, obj.goblinY);
+
_vm->_goblin->initiateMove(&obj);
}
@@ -286,10 +288,17 @@ void Inter_v7::o7_setGoblinState() {
animData.pathExistence = 1;
animData.animType = 10;
- animData.redrawAnimation = animData.stateType;
- animData.redrawLayer = animData.animTypeBak;
+ obj.destX = obj.goblinX;
+ obj.destY = obj.goblinY;
+
+ debugC(1, kDebugVideo, "o7_setGoblinState Obj %s state = %d, type = %d = %d ", obj.animName, state, type, state + type*100);
_vm->_goblin->changeDirection(&obj, state + type*100);
+ if (type != 0) {
+ animData.pathExistence = 3;
+ animData.animType = 12;
+ animData.frame = 0;
+ }
}
diff --git a/engines/gob/mult.h b/engines/gob/mult.h
index cbacf5327f0..d093056b2d8 100644
--- a/engines/gob/mult.h
+++ b/engines/gob/mult.h
@@ -60,10 +60,10 @@ public:
int8 redrawAnimation;
uint8 redrawLayer;
uint8 redrawFrame;
- uint8 field_1B;
- uint8 field_1C;
- uint8 field_1D;
- uint8 field_1E;
+ uint8 destXBak;
+ uint8 destYBak;
+ int8 gobDestX_maybe;
+ uint8 gobDestY_maybe;
uint8 field_1F;
uint8 field_20;
uint8 field_21;
@@ -99,17 +99,13 @@ public:
int8 gobDestY;
uint8 nearestWayPoint;
uint8 nearestDest;
- int8 field_22;
int8 needRedraw;
- int8 field_24;
- int8 field_25;
- int8 field_26;
- int8 field_27;
int16 newLeft;
int16 newTop;
int16 newRight;
int16 newBottom;
uint32 videoSlot;
+ int16 field_30;
uint32* field_38;
byte* field_3C;
char animName[16];
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index b57f7262481..7930ad35e05 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -806,11 +806,29 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
int8 deltaY = animObj.destY - animObj.goblinY;
if (deltaY == -1) {
*animObj.pPosX = *animObj.pPosX - _vm->_map->getTilesWidth();
- }
- else if (deltaY == 1) {
+ } else if (deltaY == 1) {
*animObj.pPosX = *animObj.pPosX + _vm->_map->getTilesWidth();
}
}
+ else {
+ warning("Adibou2 newCycleAnim _mapUnknownBool == false stub");
+ }
+
+
+ animData.frame = 0;
+ animData.destXBak = animData.destX;
+ animData.destYBak = animData.destY;
+ animObj.goblinX = animObj.destX;
+ animData.destX = animObj.goblinX;
+ animObj.goblinY = animObj.destY;
+ animData.destY = animObj.goblinY;
+ if (animData.pathExistence) {
+ animObj.gobDestX = animObj.goblinX;
+ animObj.gobDestY = animObj.goblinY;
+ }
+
+ _vm->_goblin->initiateMove(&animObj);
+
break;
default:
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index a3a69596f8d..16917757861 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -651,90 +651,130 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
if (!(flags & 4))
_toRedrawLeft = -12345;
- if (obj.animName[0] != '\0') {
- warning("updateAnim Adibou2 stub (obj.animName=%s)", obj.animName);
- } else {
- auto &sprite = _vm->_draw->_spritesArray[50 - animation - 1];
- if (sprite != nullptr) {
- int16 sprite_top = 0;
- int16 sprite_left = 0;
- int16 sprite_dest_left = *obj.pPosX;
- int16 sprite_dest_top = *obj.pPosY;
- int16 sprite_dest_right = sprite_dest_left + sprite->getWidth() - 1;
- int16 sprite_dest_bottom = sprite_dest_top + sprite->getHeight() - 1;
-
- if (flags & 2) {
- clipInRect(_vm->_mult->_animLeft,
- _vm->_mult->_animTop,
- _vm->_mult->_animWidth,
- _vm->_mult->_animHeight,
- &sprite_left,
- &sprite_top,
- &sprite_dest_left,
- &sprite_dest_top,
- &sprite_dest_right,
- &sprite_dest_bottom,
- layer);
- } else if (flags & 4) {
- clipInRect(_toRedrawLeft,
- _toRedrawTop,
- _toRedrawRight - _toRedrawLeft + 1,
- _toRedrawBottom - _toRedrawTop + 1,
- &sprite_left,
- &sprite_top,
- &sprite_dest_left,
- &sprite_dest_top,
- &sprite_dest_right,
- &sprite_dest_bottom,
- layer);
- } else {
- _toRedrawRight = sprite_dest_right;
- _toRedrawBottom = sprite_dest_bottom;
- _toRedrawLeft = sprite_dest_left;
- _toRedrawTop = sprite_dest_top;
- }
+ int16 deltaX = 0;
+ int16 deltaY = 0;
+ int16 sprite_dest_left = 0;
+ int16 sprite_dest_top = 0;
+ int16 sprite_dest_right = 0;
+ int16 sprite_dest_bottom = 0;
+
+ if (obj.animVariables && obj.animName[0] != '\0') { // TODO: obj.animVariables hack
+ if (!obj.field_38) {
+ warning("updateAnim Adibou2 stub obj.field_38 == nullptr");
+ }
- if (doDraw) {
- if ((int32)*obj.pPosX > sprite_dest_right)
- return;
-
- if ((int32)*obj.pPosY > sprite_dest_bottom)
- return;
-
- _vm->_draw->_sourceSurface = 50 - animation - 1;
- _vm->_draw->_destSurface = Draw::kBackSurface;
-
- clipInRect(_vm->_mult->_animLeft,
- _vm->_mult->_animTop,
- _vm->_mult->_animWidth,
- _vm->_mult->_animHeight,
- &sprite_left,
- &sprite_top,
- &sprite_dest_left,
- &sprite_dest_top,
- &sprite_dest_right,
- &sprite_dest_bottom,
- layer);
-
- _vm->_draw->_spriteLeft = sprite_left;
- _vm->_draw->_spriteTop = sprite_top;
- _vm->_draw->_spriteRight = sprite_dest_right - sprite_dest_left + 1;
- _vm->_draw->_spriteBottom = sprite_dest_bottom - sprite_dest_top + 1;
- _vm->_draw->_destSpriteX = sprite_dest_left,
- _vm->_draw->_destSpriteY = sprite_dest_top,
-
- _vm->_draw->_transparency = layer;
- _vm->_draw->spriteOperation(DRAW_BLITSURF);
+ if (obj.field_38 != nullptr && obj.field_38[4] & 0x800) {
+ warning("updateAnim Adibou2 stub obj.field_38 & 0x800 != 0");
+ }
+
+ // if (obj.field4F == 0)
+ if (frame != obj.field_30) {
+ if (obj.field_38 != nullptr && obj.field_38[4] & 0x800) {
+ warning("updateAnim Adibou2 stub obj.field_38 & 0x800 != 0 (2)");
}
- if (!(flags & 4)) {
- _toRedrawLeft = sprite_dest_left;
- _toRedrawTop = sprite_dest_top;
- _toRedrawRight = sprite_dest_right;
- _toRedrawBottom = sprite_dest_bottom;
- // TODO word_4F6AF0 etc.
+ VideoPlayer::Properties props;
+ props.x = 0;
+ props.y = 0;
+ props.startFrame = 0;
+ props.lastFrame = 0;
+ props.breakKey = 0;
+ props.flags = 0;
+ props.palStart = 0;
+ props.palEnd = 0;
+ props.sprite = -obj.pAnimData->animation - 1;
+
+ _vm->_vidPlayer->openVideo(false, obj.animName, props);
+ if (obj.field_38 != nullptr && obj.field_38[4] & 0x8000) {
+ warning("updateAnim Adibou2 stub obj.field_38 & 0x8000 != 0");
+ }
+ else {
+ sprite_dest_left = *obj.pPosX ;
+ sprite_dest_top = *obj.pPosY;
+ sprite_dest_right = sprite_dest_left + obj.field_38[5] - 1;
+ sprite_dest_bottom = sprite_dest_top + obj.field_38[6] - 1;
}
}
+ } else {
+ auto &sprite = _vm->_draw->_spritesArray[50 - animation - 1];
+ if (sprite == nullptr)
+ return;
+
+ sprite_dest_left = *obj.pPosX;
+ sprite_dest_top = *obj.pPosY;
+ sprite_dest_right = sprite_dest_left + sprite->getWidth() - 1;
+ sprite_dest_bottom = sprite_dest_top + sprite->getHeight() - 1;
+
+ if (flags & 2) {
+ clipInRect(_vm->_mult->_animLeft,
+ _vm->_mult->_animTop,
+ _vm->_mult->_animWidth,
+ _vm->_mult->_animHeight,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+ } else if (flags & 4) {
+ clipInRect(_toRedrawLeft,
+ _toRedrawTop,
+ _toRedrawRight - _toRedrawLeft + 1,
+ _toRedrawBottom - _toRedrawTop + 1,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+ } else {
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ }
+
+ if (doDraw) {
+ if (sprite_dest_left > sprite_dest_right)
+ return;
+
+ if (sprite_dest_top > sprite_dest_bottom)
+ return;
+
+ _vm->_draw->_sourceSurface = 50 - animation - 1;
+ _vm->_draw->_destSurface = Draw::kBackSurface;
+
+ clipInRect(_vm->_mult->_animLeft,
+ _vm->_mult->_animTop,
+ _vm->_mult->_animWidth,
+ _vm->_mult->_animHeight,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+
+ _vm->_draw->_spriteLeft = deltaX;
+ _vm->_draw->_spriteTop = deltaY;
+ _vm->_draw->_spriteRight = sprite_dest_right - sprite_dest_left + 1;
+ _vm->_draw->_spriteBottom = sprite_dest_bottom - sprite_dest_top + 1;
+ _vm->_draw->_destSpriteX = sprite_dest_left,
+ _vm->_draw->_destSpriteY = sprite_dest_top,
+
+ _vm->_draw->_transparency = layer;
+ _vm->_draw->spriteOperation(DRAW_BLITSURF);
+ }
+
+ if (!(flags & 4)) {
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ }
}
return;
Commit: 7ed26da61be904e551c1d4f40095323b8e253ce9
https://github.com/scummvm/scummvm/commit/7ed26da61be904e551c1d4f40095323b8e253ce9
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: implement y-axis reflection, needed by some character animations
Some animations for characters moves do not exist for "east" directions (E, NE, SE), but are obtained by symmetry from "west" ones (W, NW, SW).
Changed paths:
engines/gob/draw_v2.cpp
engines/gob/goblin_v7.cpp
engines/gob/scenery.cpp
engines/gob/surface.cpp
engines/gob/surface.h
engines/gob/videoplayer.cpp
engines/gob/videoplayer.h
diff --git a/engines/gob/draw_v2.cpp b/engines/gob/draw_v2.cpp
index bac67fe5273..9633d76705f 100644
--- a/engines/gob/draw_v2.cpp
+++ b/engines/gob/draw_v2.cpp
@@ -748,7 +748,7 @@ void Draw_v2::spriteOperation(int16 operation) {
_spriteLeft, spriteTop,
_spriteLeft + _spriteRight - 1,
_spriteTop + _spriteBottom - 1,
- _destSpriteX, _destSpriteY, (_transparency == 0) ? -1 : 0);
+ _destSpriteX, _destSpriteY, (_transparency == 0) ? -1 : 0, _transparency & 0x80);
dirtiedRect(_destSurface, _destSpriteX, _destSpriteY,
_destSpriteX + _spriteRight - 1, _destSpriteY + _spriteBottom - 1);
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index f88eb2da0fe..1a47fa27efb 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -96,6 +96,9 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
newYCorrection = animVariablesForState[2];
} else {
if (animVariablesForState[0] == -2) {
+ // Reflexion relative to Y axis:
+ // Some videos exist only for "west" directions (W, NW, SW, N S),
+ // "east" directions (E, NE, SE) are then obtained by symmetry
switch (animState) {
case 1:
animState = 5;
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index 16917757861..52ba7ce7c28 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -900,7 +900,8 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
_vm->_draw->_spriteLeft, _vm->_draw->_spriteTop,
_vm->_draw->_spriteRight, _vm->_draw->_spriteBottom,
_vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
- (_vm->_draw->_transparency != 0) ? 0 : -1);
+ (_vm->_draw->_transparency != 0) ? 0 : -1,
+ (_vm->_draw->_transparency & 0x80));
_vm->_draw->invalidateRect(_vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
_vm->_draw->_destSpriteX + _vm->_draw->_spriteRight - 1,
diff --git a/engines/gob/surface.cpp b/engines/gob/surface.cpp
index 1a825eedc1a..cdfe5439291 100644
--- a/engines/gob/surface.cpp
+++ b/engines/gob/surface.cpp
@@ -318,7 +318,7 @@ bool Surface::clipBlitRect(int16 &left, int16 &top, int16 &right, int16 &bottom,
}
void Surface::blit(const Surface &from, int16 left, int16 top, int16 right, int16 bottom,
- int16 x, int16 y, int32 transp) {
+ int16 x, int16 y, int32 transp, bool yAxisReflection) {
// Color depths have to fit
assert(_bpp == from._bpp);
@@ -335,7 +335,7 @@ void Surface::blit(const Surface &from, int16 left, int16 top, int16 right, int1
// Nothing to do
return;
- if ((left == 0) && (_width == from._width) && (_width == width) && (transp == -1)) {
+ if ((left == 0) && (_width == from._width) && (_width == width) && (transp == -1) && !yAxisReflection) {
// If these conditions are met, we can directly use memmove
// Pointers to the blit destination and source start points
@@ -346,7 +346,7 @@ void Surface::blit(const Surface &from, int16 left, int16 top, int16 right, int1
return;
}
- if (transp == -1) {
+ if (transp == -1 && !yAxisReflection) {
// We don't have to look for transparency => we can use memmove line-wise
// Pointers to the blit destination and source start points
@@ -373,9 +373,17 @@ void Surface::blit(const Surface &from, int16 left, int16 top, int16 right, int1
Pixel dstRow = dst;
ConstPixel srcRow = src;
- for (uint16 i = 0; i < width; i++, dstRow++, srcRow++)
- if (srcRow.get() != ((uint32) transp))
- dstRow.set(srcRow.get());
+ if (yAxisReflection) {
+ srcRow += width - 1;
+ for (uint16 i = 0; i < width; i++, dstRow++, srcRow--)
+ if (srcRow.get() != ((uint32) transp))
+ dstRow.set(srcRow.get());
+ }
+ else {
+ for (uint16 i = 0; i < width; i++, dstRow++, srcRow++)
+ if (srcRow.get() != ((uint32) transp))
+ dstRow.set(srcRow.get());
+ }
dst += _width;
src += from._width;
diff --git a/engines/gob/surface.h b/engines/gob/surface.h
index d8c86326760..6cd9be7d57b 100644
--- a/engines/gob/surface.h
+++ b/engines/gob/surface.h
@@ -111,7 +111,7 @@ public:
ConstPixel get(uint16 x = 0, uint16 y = 0) const;
void blit(const Surface &from, int16 left, int16 top, int16 right, int16 bottom,
- int16 x, int16 y, int32 transp = -1);
+ int16 x, int16 y, int32 transp = -1, bool yAxisReflexion = false);
void blit(const Surface &from, int16 x, int16 y, int32 transp = -1);
void blit(const Surface &from, int32 transp = -1);
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index 98c2cb8c3fb..69b90f9142f 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -725,7 +725,7 @@ void VideoPlayer::writeVideoInfo(const Common::String &file, int16 varX, int16 v
bool VideoPlayer::copyFrame(int slot, Surface &dest,
uint16 left, uint16 top, uint16 width, uint16 height, uint16 x, uint16 y,
- int32 transp) const {
+ int32 transp, bool yAxisReflection) const {
const Video *video = getVideoBySlot(slot);
if (!video)
@@ -741,7 +741,7 @@ bool VideoPlayer::copyFrame(int slot, Surface &dest,
// of the frame data which is undesirable.
Surface src(surface->w, surface->h, surface->format.bytesPerPixel, (byte *)const_cast<void *>(surface->getPixels()));
- dest.blit(src, left, top, left + width - 1, top + height - 1, x, y, transp);
+ dest.blit(src, left, top, left + width - 1, top + height - 1, x, y, transp, yAxisReflection);
return true;
}
diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h
index e0d645f4771..4a5fa4a8283 100644
--- a/engines/gob/videoplayer.h
+++ b/engines/gob/videoplayer.h
@@ -151,7 +151,7 @@ public:
bool copyFrame(int slot, Surface &dest,
uint16 left, uint16 top, uint16 width, uint16 height, uint16 x, uint16 y,
- int32 transp = -1) const;
+ int32 transp = -1, bool yAxisReflexion = false) const;
private:
struct Video {
Commit: 1453d975077c53b4e0b0b6fd6ebf7a3bf21b1a9b
https://github.com/scummvm/scummvm/commit/1453d975077c53b4e0b0b6fd6ebf7a3bf21b1a9b
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: add handlers for temporary .inf files used by Adibou2 applications
This fixes incorrect activities titles in applications.
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 80dda8c599c..c59dd8272f1 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -893,6 +893,7 @@ class SaveLoad_v7: public SaveLoad {
public:
static const uint32 kChildrenCount = 16;
static const uint32 kAdibou2NbrOfApplications = 5;
+ static const uint32 kAdibou2NbrOfAppInfoFiles = 3; // app, crite, exo
SaveLoad_v7(GobEngine *vm, const char *targetName);
~SaveLoad_v7() override;
@@ -978,6 +979,8 @@ protected:
GameFileHandler *_configHandler;
EnvironmentHandler *_adibou2EnvHandler[kChildrenCount];
GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
+ FakeFileHandler *_adibou2AppInfoHandler[kAdibou2NbrOfAppInfoFiles][kAdibou2NbrOfApplications];
+ TempSpriteHandler *_adibou2AppIcoHandler[kAdibou2NbrOfApplications];
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index dac816dc450..5322cbb31f4 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -65,86 +65,106 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"enviro15.inf", kSaveModeSave, nullptr, "environment" }, // Child 15
{"enviro16.inf", kSaveModeSave, nullptr, "environment" }, // Child 16
// Adibou Applications 1-5
- {"Gsa01_01.inf", kSaveModeSave, nullptr, "app progress" }, // Child 01
- {"Gsa02_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_02.inf", kSaveModeSave, nullptr, "app progress" }, // Child 02
- {"Gsa02_02.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_02.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_02.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_02.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_03.inf", kSaveModeSave, nullptr, "app progress" }, // Child 03
- {"Gsa02_03.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_03.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_03.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_03.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_04.inf", kSaveModeSave, nullptr, "app progress" }, // Child 04
- {"Gsa02_04.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_04.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_04.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_04.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_05.inf", kSaveModeSave, nullptr, "app progress" }, // Child 05
- {"Gsa02_05.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_05.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_05.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_05.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_06.inf", kSaveModeSave, nullptr, "app progress" }, // Child 06
- {"Gsa02_06.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_06.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_06.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_06.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_07.inf", kSaveModeSave, nullptr, "app progress" }, // Child 07
- {"Gsa02_07.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_07.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_07.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_07.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_08.inf", kSaveModeSave, nullptr, "app progress" }, // Child 08
- {"Gsa02_08.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_08.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_08.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_08.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_09.inf", kSaveModeSave, nullptr, "app progress" }, // Child 09
- {"Gsa02_09.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_09.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_09.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_09.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_10.inf", kSaveModeSave, nullptr, "app progress" }, // Child 10
- {"Gsa02_10.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_10.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_10.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_10.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_11.inf", kSaveModeSave, nullptr, "app progress" }, // Child 11
- {"Gsa02_11.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_11.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_11.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_11.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_12.inf", kSaveModeSave, nullptr, "app progress" }, // Child 12
- {"Gsa02_12.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_12.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_12.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_12.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_13.inf", kSaveModeSave, nullptr, "app progress" }, // Child 13
- {"Gsa02_13.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_13.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_13.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_13.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_14.inf", kSaveModeSave, nullptr, "app progress" }, // Child 14
- {"Gsa02_14.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_14.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_14.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_14.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_15.inf", kSaveModeSave, nullptr, "app progress" }, // Child 15
- {"Gsa02_15.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_15.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_15.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_15.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa01_16.inf", kSaveModeSave, nullptr, "app progress" }, // Child 16
- {"Gsa02_16.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa03_16.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa04_16.inf", kSaveModeSave, nullptr, "app progress" },
- {"Gsa05_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"Gsa01_01.inf", kSaveModeSave, 0, "app progress" }, // Child 01
+ {"Gsa02_01.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_01.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_01.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_01.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_02.inf", kSaveModeSave, 0, "app progress" }, // Child 02
+ {"Gsa02_02.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_02.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_02.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_02.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_03.inf", kSaveModeSave, 0, "app progress" }, // Child 03
+ {"Gsa02_03.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_03.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_03.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_03.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_04.inf", kSaveModeSave, 0, "app progress" }, // Child 04
+ {"Gsa02_04.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_04.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_04.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_04.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_05.inf", kSaveModeSave, 0, "app progress" }, // Child 05
+ {"Gsa02_05.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_05.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_05.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_05.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_06.inf", kSaveModeSave, 0, "app progress" }, // Child 06
+ {"Gsa02_06.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_06.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_06.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_06.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_07.inf", kSaveModeSave, 0, "app progress" }, // Child 07
+ {"Gsa02_07.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_07.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_07.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_07.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_08.inf", kSaveModeSave, 0, "app progress" }, // Child 08
+ {"Gsa02_08.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_08.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_08.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_08.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_09.inf", kSaveModeSave, 0, "app progress" }, // Child 09
+ {"Gsa02_09.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_09.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_09.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_09.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_10.inf", kSaveModeSave, 0, "app progress" }, // Child 10
+ {"Gsa02_10.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_10.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_10.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_10.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_11.inf", kSaveModeSave, 0, "app progress" }, // Child 11
+ {"Gsa02_11.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_11.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_11.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_11.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_12.inf", kSaveModeSave, 0, "app progress" }, // Child 12
+ {"Gsa02_12.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_12.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_12.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_12.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_13.inf", kSaveModeSave, 0, "app progress" }, // Child 13
+ {"Gsa02_13.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_13.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_13.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_13.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_14.inf", kSaveModeSave, 0, "app progress" }, // Child 14
+ {"Gsa02_14.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_14.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_14.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_14.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_15.inf", kSaveModeSave, 0, "app progress" }, // Child 15
+ {"Gsa02_15.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_15.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_15.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_15.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa01_16.inf", kSaveModeSave, 0, "app progress" }, // Child 16
+ {"Gsa02_16.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa03_16.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa04_16.inf", kSaveModeSave, 0, "app progress" },
+ {"Gsa05_16.inf", kSaveModeSave, 0, "app progress" },
+ {"appli_01.inf", kSaveModeSave, 0, "app info" },
+ {"appli_02.inf", kSaveModeSave, 0, "app info" },
+ {"appli_03.inf", kSaveModeSave, 0, "app info" },
+ {"appli_04.inf", kSaveModeSave, 0, "app info" },
+ {"appli_05.inf", kSaveModeSave, 0, "app info" },
+ {"crite_01.inf", kSaveModeSave, 0, "app info" },
+ {"crite_02.inf", kSaveModeSave, 0, "app info" },
+ {"crite_03.inf", kSaveModeSave, 0, "app info" },
+ {"crite_04.inf", kSaveModeSave, 0, "app info" },
+ {"crite_05.inf", kSaveModeSave, 0, "app info" },
+ {"exo_01.inf", kSaveModeSave, 0, "app info" },
+ {"exo_02.inf", kSaveModeSave, 0, "app info" },
+ {"exo_03.inf", kSaveModeSave, 0, "app info" },
+ {"exo_04.inf", kSaveModeSave, 0, "app info" },
+ {"exo_05.inf", kSaveModeSave, 0, "app info" },
+ {"ico_01.inf", kSaveModeSave, 0, "app info" },
+ {"ico_02.inf", kSaveModeSave, 0, "app info" },
+ {"ico_03.inf", kSaveModeSave, 0, "app info" },
+ {"ico_04.inf", kSaveModeSave, 0, "app info" },
+ {"ico_05.inf", kSaveModeSave, 0, "app info" },
// Addy 4 Base
{"config00.inf", kSaveModeSave, nullptr, nullptr },
@@ -443,6 +463,15 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
}
}
+ for (uint32 i = 0; i < kAdibou2NbrOfAppInfoFiles; i++) {
+ for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++) {
+ _saveFiles[index++].handler = _adibou2AppInfoHandler[i][j] = new FakeFileHandler(_vm);
+ }
+ }
+
+ for (uint32 i = 0; i < kAdibou2NbrOfApplications; i++) {
+ _saveFiles[index++].handler = _adibou2AppIcoHandler[i] = new TempSpriteHandler(_vm);
+ }
for (int i = 0; i < 2; i++)
_saveFiles[index++].handler = _addy4BaseHandler[i] = new FakeFileHandler(_vm);
@@ -471,6 +500,16 @@ SaveLoad_v7::~SaveLoad_v7() {
for (uint32 i = 0; i < kChildrenCount; i++)
delete _faceHandler[i];
+
+ for (uint32 i = 0; i < kAdibou2NbrOfAppInfoFiles; i++) {
+ for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++) {
+ delete _adibou2AppInfoHandler[i][j];
+ }
+ }
+
+ for (uint32 i = 0; i < kAdibou2NbrOfApplications; i++) {
+ delete _adibou2AppIcoHandler[i];
+ }
}
const SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) const {
Commit: 5a53644bd7d909542ddc338bc0583a3fdf354a19
https://github.com/scummvm/scummvm/commit/5a53644bd7d909542ddc338bc0583a3fdf354a19
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: rename changeDirection -> setGoblinState
Changed paths:
engines/gob/goblin.cpp
engines/gob/goblin.h
engines/gob/goblin_v7.cpp
engines/gob/inter_v7.cpp
engines/gob/mult_v2.cpp
diff --git a/engines/gob/goblin.cpp b/engines/gob/goblin.cpp
index 49d83d8c7ca..576fd1344aa 100644
--- a/engines/gob/goblin.cpp
+++ b/engines/gob/goblin.cpp
@@ -1917,8 +1917,8 @@ void Goblin::updateLayer2(Mult::Mult_AnimData *animData) {
}
}
-void Goblin::changeDirection(Mult::Mult_Object *obj, int16 animState) {
- warning("Goblin::changeDirection not implemented !");
+void Goblin::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
+ warning("Goblin::setGoblinState not implemented !");
}
} // End of namespace Gob
diff --git a/engines/gob/goblin.h b/engines/gob/goblin.h
index a2815c45543..c168209d6eb 100644
--- a/engines/gob/goblin.h
+++ b/engines/gob/goblin.h
@@ -228,7 +228,7 @@ public:
virtual void initiateMove(Mult::Mult_Object *obj) = 0;
virtual void moveAdvance(Mult::Mult_Object *obj, Gob_Object *gobDesc,
int16 nextAct, int16 framesCount) = 0;
- virtual void changeDirection(Mult::Mult_Object *obj, int16 animState);
+ virtual void setGoblinState(Mult::Mult_Object *obj, int16 animState);
Goblin(GobEngine *vm);
virtual ~Goblin();
@@ -333,7 +333,7 @@ public:
~Goblin_v7() override {}
void initiateMove(Mult::Mult_Object *obj);
- void changeDirection(Mult::Mult_Object *obj, int16 animState);
+ void setGoblinState(Mult::Mult_Object *obj, int16 animState);
private:
int32 computeObjNextDirection(Mult::Mult_Object &obj);
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index 1a47fa27efb..7bea1f42213 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -54,7 +54,7 @@ static void sub_4309D3(Draw *draw, Mult::Mult_Object &obj) {
obj.animName[0] = '\0';
}
-void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
+void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
char str[128];
obj->pAnimData->layer &= 3;
int32 var_4 = 0;
@@ -147,12 +147,10 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
break;
}
- int32 var_A4 = 0;
if (obj->pAnimData->stateType == 1) {
- var_A4 = animState;
- if (var_A4 == 22)
+ if (animState == 22)
animState = 27;
- else if (var_A4 == 25)
+ else if (animState == 25)
animState = 26;
}
@@ -185,7 +183,7 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
Common::strlcat(str, "COG", 128);
break;
case 22:
- warning("Goblin_v7::changeDirection: animState == 22 not implemented");
+ warning("Goblin_v7::setGoblinState: animState == 22 not implemented");
break;
case 23:
Common::strlcat(str, "EXP", 128);
@@ -194,13 +192,13 @@ void Goblin_v7::changeDirection(Mult::Mult_Object *obj, int16 animState) {
Common::strlcat(str, "FRA", 128);
break;
case 25:
- warning("Goblin_v7::changeDirection: animState == 25 not implemented");
+ warning("Goblin_v7::setGoblinState: animState == 25 not implemented");
break;
case 26:
- warning("Goblin_v7::changeDirection: animState == 26 not implemented");
+ warning("Goblin_v7::setGoblinState: animState == 26 not implemented");
break;
case 27:
- warning("Goblin_v7::changeDirection: animState == 27 not implemented");
+ warning("Goblin_v7::setGoblinState: animState == 27 not implemented");
break;
default:
@@ -522,7 +520,7 @@ void Goblin_v7::initiateMove(Mult::Mult_Object *obj) {
if (animState != 0) {
obj->pAnimData->newState = animState;
- changeDirection(obj, animState);
+ setGoblinState(obj, animState);
} else {
if (obj->pAnimData->destX != obj->pAnimData->gobDestX_maybe || obj->pAnimData->destY != obj->pAnimData->gobDestY_maybe)
obj->pAnimData->pathExistence = 2;
@@ -535,15 +533,15 @@ void Goblin_v7::initiateMove(Mult::Mult_Object *obj) {
if (obj->pAnimData->curLookDir >= 40)
return;
else {
- changeDirection(obj, 105);
+ setGoblinState(obj, 105);
obj->pAnimData->pathExistence = 3;
}
} else {
- changeDirection(obj, 101);
+ setGoblinState(obj, 101);
obj->pAnimData->pathExistence = 3;
}
} else {
- changeDirection(obj, obj->pAnimData->curLookDir + 100);
+ setGoblinState(obj, obj->pAnimData->curLookDir + 100);
}
}
}
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 105fccecfeb..5654ad0ea01 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -293,7 +293,7 @@ void Inter_v7::o7_setGoblinState() {
debugC(1, kDebugVideo, "o7_setGoblinState Obj %s state = %d, type = %d = %d ", obj.animName, state, type, state + type*100);
- _vm->_goblin->changeDirection(&obj, state + type*100);
+ _vm->_goblin->setGoblinState(&obj, state + type * 100);
if (type != 0) {
animData.pathExistence = 3;
animData.animType = 12;
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 7930ad35e05..9c095d23f72 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -724,7 +724,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
--animData.framesLeft;
}
else {
- _vm->_goblin->changeDirection(&animObj, animData.isBusy);
+ _vm->_goblin->setGoblinState(&animObj, animData.isBusy);
animData.isBusy = 0;
animData.animTypeBak = 0;
animData.animType = 10;
Commit: a2dbc6beba1cadb6586ec904af07f8b135e913f4
https://github.com/scummvm/scummvm/commit/a2dbc6beba1cadb6586ec904af07f8b135e913f4
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: Adibou2 pathfinding fixes
Changed paths:
engines/gob/goblin.h
engines/gob/goblin_v7.cpp
diff --git a/engines/gob/goblin.h b/engines/gob/goblin.h
index c168209d6eb..ac6f89c9f26 100644
--- a/engines/gob/goblin.h
+++ b/engines/gob/goblin.h
@@ -339,7 +339,7 @@ private:
int32 computeObjNextDirection(Mult::Mult_Object &obj);
int32 findPath(int8 x, int8 y, int8 destX, int8 destY);
bool directionWalkable(int8 x, int8 y, int8 direction);
- int32 directionFromOriginAndDest(int8 x, int8 y, int8 destX, int8 destY);
+ int32 bestWalkableDirectionFromOriginAndDest(int8 x, int8 y, int8 destX, int8 destY);
};
} // End of namespace Gob
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index 7bea1f42213..da729b26d0f 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -300,8 +300,12 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
static int8 deltaXFromDirection[10] = {0, -1, 0, 1, 1, 1, 0, -1, -1, 0};
static int8 deltaYFromDirection[10] = {0, -1, -1, -1, 0, 1, 1, 1, 0, 0};
+static bool positionWalkable(Map *map, int8 x, int8 y) {
+ return !map->getPass(x, y, map->getMapWidth());
+}
+
static void updateGobDest(Map *map, Mult::Mult_Object &obj) {
- if (map->getPass(obj.gobDestX, obj.gobDestY, map->getMapWidth())) {
+ if (!positionWalkable(map, obj.gobDestX, obj.gobDestY)) {
int8 newGobDestX = 0;
int32 var_8 = 1000;
int8 newGobDestY = 0;
@@ -322,7 +326,7 @@ static void updateGobDest(Map *map, Mult::Mult_Object &obj) {
break;
}
- if (!map->getPass(tempGobDestX, tempGobDestY, map->getMapWidth())) {
+ if (positionWalkable(map, tempGobDestX, tempGobDestY)) {
if (nbrOfStepsDir < var_8) {
newGobDestX = tempGobDestX;
newGobDestY = tempGobDestY;
@@ -350,19 +354,19 @@ int8 directionFromDeltaXY(int8 deltaX, int8 deltaY) {
}
bool Goblin_v7::directionWalkable(int8 x, int8 y, int8 direction) {
- int8 newX = x + deltaXFromDirection[direction];
- int8 newY = y + deltaYFromDirection[direction];
- if (newX >= 0 &&
- newX < _vm->_map->getMapWidth() &&
- newY >= 0 &&
- newY < _vm->_map->getMapHeight()) {
- return _vm->_map->getPass(x, y, direction);
+ int8 nextX = x + deltaXFromDirection[direction];
+ int8 nextY = y + deltaYFromDirection[direction];
+ if (nextX >= 0 &&
+ nextX < _vm->_map->getMapWidth() &&
+ nextY >= 0 &&
+ nextY < _vm->_map->getMapHeight()) {
+ return positionWalkable(_vm->_map, nextX, nextY);
}
else
return false;
}
-int32 Goblin_v7::directionFromOriginAndDest(int8 x, int8 y, int8 destX, int8 destY) {
+int32 Goblin_v7::bestWalkableDirectionFromOriginAndDest(int8 x, int8 y, int8 destX, int8 destY) {
int8 deltaX = 0;
int8 deltaY = 0;
@@ -410,59 +414,59 @@ int32 Goblin_v7::directionFromOriginAndDest(int8 x, int8 y, int8 destX, int8 des
int32 Goblin_v7::findPath(int8 x, int8 y, int8 destX, int8 destY) {
- int8 newX = x;
- int8 newY = y;
- int8 previousDir = -1;
+ int8 currentX = x;
+ int8 currentY = y;
+ int8 returnToPreviousStepDir = -1;
int8 var_8 = 0;
- int8 var_18 = 0;
+ int8 firstDirection = 0;
int8 var_1C = 0;
while (true)
{
- int8 direction = directionFromOriginAndDest(newX, newY , destX, destY);
- if (direction == 0)
+ int8 currentDirection = bestWalkableDirectionFromOriginAndDest(currentX, currentY, destX, destY);
+ if (currentDirection == 0)
return 0;
- if (direction >= 0) {
+ if (currentDirection >= 0) {
if (var_8 == 1) {
var_8 = 2;
- var_1C = findPath(x, y, newX, newY);
+ var_1C = findPath(x, y, currentX, currentY);
if (var_1C > 0)
- var_18 = var_1C;
+ firstDirection = var_1C;
}
}
else {
- direction = -direction;
+ currentDirection = -currentDirection;
if (var_8 == 0)
var_8 = 1;
}
- if (previousDir > 0) {
- previousDir += 4;
- if (previousDir > 8)
- previousDir -= 8;
+ if (returnToPreviousStepDir > 0) {
+ returnToPreviousStepDir += 4;
+ if (returnToPreviousStepDir > 8)
+ returnToPreviousStepDir -= 8;
}
- if (direction == previousDir) {
- direction += 4;
- if (direction > 8)
- direction -= 8;
+ if (currentDirection == returnToPreviousStepDir) {
+ currentDirection += 4;
+ if (currentDirection > 8)
+ currentDirection -= 8;
- if (!directionWalkable(newX, newY, direction))
+ if (!directionWalkable(currentX, currentY, currentDirection))
return 0;
}
- if (var_18 == 0)
- var_18 = direction;
+ if (firstDirection == 0)
+ firstDirection = currentDirection;
- previousDir = direction;
- newX += deltaXFromDirection[direction];
- newY += deltaYFromDirection[direction];
+ returnToPreviousStepDir = currentDirection; // Will be inverted later
+ currentX += deltaXFromDirection[currentDirection];
+ currentY += deltaYFromDirection[currentDirection];
- if (newX != destX || newY != destY)
+ if (currentX != destX || currentY != destY)
continue;
else
- return var_18;
+ return firstDirection;
}
}
@@ -476,7 +480,7 @@ int32 Goblin_v7::computeObjNextDirection(Mult::Mult_Object &obj) {
updateGobDest(_vm->_map, obj);
int32 direction = findPath(obj.goblinX, obj.goblinY, obj.gobDestX, obj.gobDestY);
if (direction == 0) {
- direction = directionFromOriginAndDest(obj.goblinX, obj.goblinY, obj.gobDestX, obj.gobDestY);
+ direction = bestWalkableDirectionFromOriginAndDest(obj.goblinX, obj.goblinY, obj.gobDestX, obj.gobDestY);
if (direction < 0)
direction = -direction;
}
Commit: eb61c14d5c6ed62739b2152a537af46c56b59077
https://github.com/scummvm/scummvm/commit/eb61c14d5c6ed62739b2152a537af46c56b59077
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: use infix operator++ on Pixel iterators where possible
Changed paths:
engines/gob/draw_fascin.cpp
engines/gob/surface.cpp
engines/gob/video.cpp
engines/gob/video_v1.cpp
engines/gob/video_v2.cpp
engines/gob/video_v6.cpp
diff --git a/engines/gob/draw_fascin.cpp b/engines/gob/draw_fascin.cpp
index 15bf4e88b9c..d9f48a621fb 100644
--- a/engines/gob/draw_fascin.cpp
+++ b/engines/gob/draw_fascin.cpp
@@ -1028,7 +1028,7 @@ void Draw_Fascination::drawWinTrace(int16 left, int16 top, int16 width, int16 he
Pixel pixelTop = _frontSurface->get(left, top);
Pixel pixelBottom = _frontSurface->get(left, bottom);
- for (int16 i = 0; i < width; i++, pixelTop++, pixelBottom++) {
+ for (int16 i = 0; i < width; i++, ++pixelTop, ++pixelBottom) {
pixelTop.set((pixelTop.get() + 128) & 0xFF);
pixelBottom.set((pixelBottom.get() + 128) & 0xFF);
}
diff --git a/engines/gob/surface.cpp b/engines/gob/surface.cpp
index cdfe5439291..f22d0cecd2d 100644
--- a/engines/gob/surface.cpp
+++ b/engines/gob/surface.cpp
@@ -375,12 +375,12 @@ void Surface::blit(const Surface &from, int16 left, int16 top, int16 right, int1
if (yAxisReflection) {
srcRow += width - 1;
- for (uint16 i = 0; i < width; i++, dstRow++, srcRow--)
+ for (uint16 i = 0; i < width; i++, ++dstRow, --srcRow)
if (srcRow.get() != ((uint32) transp))
dstRow.set(srcRow.get());
}
else {
- for (uint16 i = 0; i < width; i++, dstRow++, srcRow++)
+ for (uint16 i = 0; i < width; i++, ++dstRow, ++srcRow)
if (srcRow.get() != ((uint32) transp))
dstRow.set(srcRow.get());
}
diff --git a/engines/gob/video.cpp b/engines/gob/video.cpp
index b5f22897008..3538d4d63f4 100644
--- a/engines/gob/video.cpp
+++ b/engines/gob/video.cpp
@@ -125,7 +125,7 @@ void Font::drawLetter(Surface &surf, uint8 c, uint16 x, uint16 y,
dst.set(color2);
}
- dst++;
+ ++dst;
data <<= 1;
}
@@ -327,7 +327,7 @@ void Video::drawPacked(byte *sprBuf, int16 width, int16 height,
if (!transp || val)
dst.set(val);
- dst++;
+ ++dst;
curx++;
if (curx == destRight) {
dst += dest.getWidth() + x - curx;
diff --git a/engines/gob/video_v1.cpp b/engines/gob/video_v1.cpp
index fe4e792344c..73650cd34fa 100644
--- a/engines/gob/video_v1.cpp
+++ b/engines/gob/video_v1.cpp
@@ -84,7 +84,7 @@ char Video_v1::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
temp = *srcPtr++;
if ((temp != 0) || (transp == 0))
destPtr.set(temp);
- destPtr++;
+ ++destPtr;
curWidth++;
if (curWidth >= srcWidth) {
curWidth = 0;
@@ -112,7 +112,7 @@ char Video_v1::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
temp = memBuffer[(offset + counter2) % 4096];
if ((temp != 0) || (transp == 0))
destPtr.set(temp);
- destPtr++;
+ ++destPtr;
curWidth++;
if (curWidth >= srcWidth) {
diff --git a/engines/gob/video_v2.cpp b/engines/gob/video_v2.cpp
index 79f9fbb38dc..a1ad7acd3e0 100644
--- a/engines/gob/video_v2.cpp
+++ b/engines/gob/video_v2.cpp
@@ -94,7 +94,7 @@ char Video_v2::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
if ((temp != 0) || (transp == 0))
destPtr.set(temp);
- destPtr++;
+ ++destPtr;
curWidth++;
if (curWidth >= srcWidth) {
@@ -128,7 +128,7 @@ char Video_v2::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
if ((temp != 0) || (transp == 0))
destPtr.set(temp);
- destPtr++;
+ ++destPtr;
curWidth++;
if (curWidth >= srcWidth) {
diff --git a/engines/gob/video_v6.cpp b/engines/gob/video_v6.cpp
index 67d522a19d0..80489b43ace 100644
--- a/engines/gob/video_v6.cpp
+++ b/engines/gob/video_v6.cpp
@@ -124,7 +124,7 @@ void Video_v6::drawYUV(Surface &destDesc, int16 x, int16 y,
int nextChromaLine = (i < ((height - 1) & ~3) ) ? dataWidth : 0;
- for (int j = 0; j < width; j++, dstRow++) {
+ for (int j = 0; j < width; j++, ++dstRow) {
int nextChromaColumn = (j < ((width - 1) & ~3)) ? 1 : 0;
Commit: f132bd0c18c8ec7c2ac23c4e40a03fb77dfbddc2
https://github.com/scummvm/scummvm/commit/f132bd0c18c8ec7c2ac23c4e40a03fb77dfbddc2
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:24+01:00
Commit Message:
GOB: bugfix character animation using incorrect sprites
Changed paths:
engines/gob/goblin_v7.cpp
engines/gob/scenery.cpp
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index da729b26d0f..15828e6137b 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -247,7 +247,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
props.flags = 0x1201;
props.palStart = 0;
props.palEnd = 0;
- props.sprite = -obj->pAnimData->animation - 1;
+ props.sprite = -1;
Common::strlcpy(obj->animName, str, 16);
if (obj->videoSlot > 0)
@@ -269,7 +269,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
props.flags = 0x1601;
props.palStart = 0;
props.palEnd = 0;
- props.sprite = -obj->pAnimData->animation - 1;
+ props.sprite = -1;
if (obj->videoSlot > 0)
_vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index 52ba7ce7c28..4d91da8944c 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -682,7 +682,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
props.flags = 0;
props.palStart = 0;
props.palEnd = 0;
- props.sprite = -obj.pAnimData->animation - 1;
+ props.sprite = -1;
_vm->_vidPlayer->openVideo(false, obj.animName, props);
if (obj.field_38 != nullptr && obj.field_38[4] & 0x8000) {
Commit: 4c551956c5dac5f4fa77e4587159c2873f3822ae
https://github.com/scummvm/scummvm/commit/4c551956c5dac5f4fa77e4587159c2873f3822ae
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:25+01:00
Commit Message:
GOB: fix disappearing objects in Adibou2 after video play
The video slot was sometimes not closed, preventing the mult object to be reused with a static image.
Changed paths:
engines/gob/mult_v2.cpp
engines/gob/videoplayer.cpp
engines/gob/videoplayer.h
video/coktel_decoder.cpp
video/coktel_decoder.h
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 9c095d23f72..4871e144606 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -791,14 +791,14 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
case 7:
animData.frame--;
animData.isPaused = 1;
-/*
+
if ((animData.animation < 0) && (animObj.videoSlot > 0)) {
if (_vm->_vidPlayer->getFlags(animObj.videoSlot - 1) & 0x1000) {
_vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
animObj.videoSlot = 0;
}
}
-*/
+
break;
case 10:
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index 69b90f9142f..0f31971b183 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -655,6 +655,13 @@ uint16 VideoPlayer::getDefaultY(int slot) const {
return video->decoder->getDefaultY();
}
+uint32 VideoPlayer::getFlags(int slot) const {
+ const Video *video = getVideoBySlot(slot);
+ if (!video)
+ return 0;
+
+ return video->decoder->getFlags();
+}
const Common::List<Common::Rect> *VideoPlayer::getDirtyRects(int slot) const {
const Video *video = getVideoBySlot(slot);
if (!video)
diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h
index 4a5fa4a8283..9fb1807faea 100644
--- a/engines/gob/videoplayer.h
+++ b/engines/gob/videoplayer.h
@@ -138,6 +138,8 @@ public:
uint16 getHeight (int slot = 0) const;
uint16 getDefaultX (int slot = 0) const;
uint16 getDefaultY (int slot = 0) const;
+ uint32 getFlags (int slot = 0) const;
+
const Common::List<Common::Rect> *getDirtyRects(int slot = 0) const;
diff --git a/video/coktel_decoder.cpp b/video/coktel_decoder.cpp
index 123ceb26b65..20981a4152f 100644
--- a/video/coktel_decoder.cpp
+++ b/video/coktel_decoder.cpp
@@ -875,6 +875,10 @@ void PreIMDDecoder::renderFrame() {
_dirtyRects.push_back(Common::Rect(_x, _y, _x + _width, _y + _height));
}
+uint32 PreIMDDecoder::getFlags() const {
+ return 0;
+}
+
Graphics::PixelFormat PreIMDDecoder::getPixelFormat() const {
return Graphics::PixelFormat::createFormatCLUT8();
}
@@ -1535,6 +1539,10 @@ void IMDDecoder::emptySoundSlice(bool hasNextCmd) {
_audioStream->queueBuffer(soundBuf, _soundSliceSize, DisposeAfterUse::YES, 0);
}
+uint32 IMDDecoder::getFlags() const {
+ return _flags;
+}
+
Graphics::PixelFormat IMDDecoder::getPixelFormat() const {
return Graphics::PixelFormat::createFormatCLUT8();
}
@@ -2712,6 +2720,10 @@ Audio::AudioStream *VMDDecoder::create16bitADPCM(Common::SeekableReadStream *str
return new VMD_ADPCMStream(stream, DisposeAfterUse::YES, _soundFreq, (_soundStereo == 0) ? 1 : 2);
}
+uint32 VMDDecoder::getFlags() const {
+ return _flags;
+}
+
Graphics::PixelFormat VMDDecoder::getPixelFormat() const {
if (_externalCodec) {
if (_codec)
diff --git a/video/coktel_decoder.h b/video/coktel_decoder.h
index 5e18c0ba8e4..518350e1c2a 100644
--- a/video/coktel_decoder.h
+++ b/video/coktel_decoder.h
@@ -176,6 +176,7 @@ public:
uint16 getWidth() const;
uint16 getHeight() const;
+ virtual uint32 getFlags() const = 0;
virtual Graphics::PixelFormat getPixelFormat() const = 0;
uint32 getFrameCount() const;
@@ -288,6 +289,8 @@ public:
const Graphics::Surface *decodeNextFrame();
+ uint32 getFlags() const;
+
Graphics::PixelFormat getPixelFormat() const;
private:
@@ -320,6 +323,8 @@ public:
const Graphics::Surface *decodeNextFrame();
+ uint32 getFlags() const;
+
Graphics::PixelFormat getPixelFormat() const;
private:
@@ -425,6 +430,8 @@ public:
const Graphics::Surface *decodeNextFrame();
+ uint32 getFlags() const;
+
Graphics::PixelFormat getPixelFormat() const;
protected:
Commit: 95ddb1ca87616d4bca42c79f533393b780e139aa
https://github.com/scummvm/scummvm/commit/95ddb1ca87616d4bca42c79f533393b780e139aa
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:25+01:00
Commit Message:
GOB: new workaround for Adibou2 failed assert(_finished) sound problem
Seems to be occurs when o7_playWmdOrMusic is called a second time to close a previously open video
Changed paths:
engines/gob/inter_v7.cpp
engines/gob/mult_v2.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 5654ad0ea01..7b4a347ec99 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -472,8 +472,9 @@ void Inter_v7::o7_playVmdOrMusic() {
_vm->_vidPlayer->play(slot, props);
if (close && !props.noBlock) {
- if (!props.canceled)
- _vm->_vidPlayer->waitSoundEnd(slot);
+ // TODO Adibou2 temp sound workaround assert(_finished) failed
+ /*if (!props.canceled)
+ _vm->_vidPlayer->waitSoundEnd(slot);*/
_vm->_vidPlayer->closeVideo(slot);
}
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 4871e144606..3b427d5c8a8 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -864,7 +864,7 @@ void Mult_v2::animate() {
Mult_Object &animObj = _objects[i];
Mult_AnimData &animData = *(animObj.pAnimData);
- if (_vm->_map->_mapUnknownBool && !animData.isStatic && animData.order != 100) {
+ if (_vm->_map->_mapUnknownBool && !animData.isStatic && animData.order <= 100) {
animData.order = currentOrder;
animData.field_22 = 0;
animData.field_21 = 0;
@@ -879,7 +879,7 @@ void Mult_v2::animate() {
Mult_Object &previousAnimObject = _objects[j];
Mult_AnimData &previousAnimData = *(previousAnimObject.pAnimData);
- if (previousAnimData.isStatic || previousAnimData.order == 100)
+ if (previousAnimData.isStatic || previousAnimData.order > 100)
continue;
int8 orderCorrection = 0;
Commit: b2c35107588e6ffc899530d4e910450b5eeec025
https://github.com/scummvm/scummvm/commit/b2c35107588e6ffc899530d4e910450b5eeec025
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:25+01:00
Commit Message:
GOB: fix a crash in Adibou2 when changing hotspot
The leave function should not be called for hotspot "0"
Changed paths:
engines/gob/hotspots.cpp
diff --git a/engines/gob/hotspots.cpp b/engines/gob/hotspots.cpp
index 750a9720be0..38493705a18 100644
--- a/engines/gob/hotspots.cpp
+++ b/engines/gob/hotspots.cpp
@@ -811,12 +811,13 @@ uint16 Hotspots::check(uint8 handleMouse, int16 delay, uint16 &id, uint16 &index
((delay <= 0) || (_vm->_game->_mouseButtons == kMouseButtonsNone)))
_vm->_draw->blitCursor();
-
- if ((key != _currentKey) && (_vm->getGameType() != kGameTypeFascination) &&
- (_vm->getGameType() != kGameTypeGeisha))
- // If the hotspot changed, leave the old one
- // Code not present in Fascination executables
- leave(_currentIndex);
+ if ((_currentKey != 0) &&
+ (key != _currentKey) &&
+ (_vm->getGameType() != kGameTypeFascination) &&
+ (_vm->getGameType() != kGameTypeGeisha))
+ // If the hotspot changed, leave the old one
+ // Code not present in Fascination executables
+ leave(_currentIndex);
_currentKey = 0;
break;
Commit: 444a0586eb0ca8c1517109854f8dacba790c18a8
https://github.com/scummvm/scummvm/commit/444a0586eb0ca8c1517109854f8dacba790c18a8
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:25+01:00
Commit Message:
GOB: implement o7_loadMultObject
Special behaviour when x == -1234 and y == -4321 (close video, isStatic = 1).
Changed paths:
engines/gob/inter.h
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 4f3db4dd55d..487e4e9f469 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -676,6 +676,7 @@ protected:
void o7_draw0x0C();
void o7_loadCursor();
+ void o7_loadMultObject();
void o7_displayWarning();
void o7_logString();
void o7_moveGoblin();
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 7b4a347ec99..687656cb638 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -58,6 +58,7 @@ void Inter_v7::setupOpcodesDraw() {
OPCODEDRAW(0x0C, o7_draw0x0C);
OPCODEDRAW(0x0D, o7_loadCursor);
+ OPCODEDRAW(0x17, o7_loadMultObject);
OPCODEDRAW(0x44, o7_displayWarning);
OPCODEDRAW(0x45, o7_logString);
OPCODEDRAW(0x52, o7_moveGoblin);
@@ -215,6 +216,44 @@ void Inter_v7::o7_loadCursor() {
delete defaultCursor;
}
+void Inter_v7::o7_loadMultObject() {
+ assert(_vm->_mult->_objects);
+
+ uint16 objIndex = _vm->_game->_script->readValExpr();
+
+ Mult::Mult_Object &obj = _vm->_mult->_objects[objIndex];
+ Mult::Mult_AnimData &objAnim = *(obj.pAnimData);
+
+ auto x = _vm->_game->_script->readValExpr();
+ auto y = _vm->_game->_script->readValExpr();
+ debugC(4, kDebugGameFlow, "Loading mult object %d -> x = %d, y = %d", objIndex, x ,y);
+
+ *obj.pPosX = x;
+ *obj.pPosY = y;
+
+ byte *multData = (byte *) &objAnim;
+ for (int i = 0; i < 11; i++) {
+ if (_vm->_game->_script->peekByte() != 99)
+ multData[i] = _vm->_game->_script->readValExpr();
+ else
+ _vm->_game->_script->skip(1);
+ }
+
+ if (((int32)*obj.pPosX == -1234) && ((int32)*obj.pPosY == -4321)) {
+ if (obj.videoSlot > 0)
+ _vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
+
+ objAnim.isStatic = 1;
+
+ obj.animVariables = nullptr;
+ obj.videoSlot = 0;
+ obj.lastLeft = -1;
+ obj.lastTop = -1;
+ obj.lastBottom = -1;
+ obj.lastRight = -1;
+ }
+}
+
void Inter_v7::o7_displayWarning() {
Common::String caption = _vm->_game->_script->evalString();
Common::String text = _vm->_game->_script->evalString();
Commit: 0db96b5b0bdd72aa91bb15cc3f3c0b4218658136
https://github.com/scummvm/scummvm/commit/0db96b5b0bdd72aa91bb15cc3f3c0b4218658136
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:25+01:00
Commit Message:
GOB: partially handle missing cases in o1_palLoad
Only adjust position in script - implementation itself not done yet.
Changed paths:
engines/gob/inter_v1.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index e813fbecdbd..427e7b7b990 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1150,6 +1150,17 @@ void Inter_v1::o1_palLoad(OpFuncParams ¶ms) {
memset((char *)_vm->_draw->_vgaPalette, 0, 768);
break;
+ case 55:
+ // TODO case 55 implementation
+ _vm->_game->_script->skip(2);
+ _vm->_draw->_applyPal = false;
+ return;
+
+ case 56:
+ // TODO case 56 implementation
+ _vm->_game->_script->skip(2);
+ break;
+
case 61:
index1 = _vm->_game->_script->readByte();
index2 = (_vm->_game->_script->readByte() - index1 + 1) * 3;
Commit: d0961114f076035266b44291d3eb688028946971
https://github.com/scummvm/scummvm/commit/d0961114f076035266b44291d3eb688028946971
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:25+01:00
Commit Message:
GOB: add more Adibou2 save files, simplify save handler
Changed paths:
engines/gob/save/savefile.cpp
engines/gob/save/savefile.h
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/savefile.cpp b/engines/gob/save/savefile.cpp
index 55f633aae06..4981acfa40c 100644
--- a/engines/gob/save/savefile.cpp
+++ b/engines/gob/save/savefile.cpp
@@ -255,6 +255,13 @@ bool SavePartVars::readFromRaw(const byte *data, uint32 size) {
return true;
}
+bool SavePartVars::partialReadFromRaw(const byte *data, uint32 size) {
+ if (size > _size)
+ return false;
+ memcpy(_data, data, size);
+ return true;
+}
+
bool SavePartVars::writeInto(uint32 var, uint32 offset, uint32 size) const {
if (!_vm->_inter->_variables)
return false;
diff --git a/engines/gob/save/savefile.h b/engines/gob/save/savefile.h
index d8d6a96421b..19dd9f92182 100644
--- a/engines/gob/save/savefile.h
+++ b/engines/gob/save/savefile.h
@@ -139,6 +139,10 @@ public:
/** Read size bytes of raw data into the part. */
bool readFromRaw(const byte *data, uint32 size);
+ /** Same, allowing "size" to be smaller than data size of the part */
+ bool partialReadFromRaw(const byte *data, uint32 size);
+
+ const byte* data() const { return _data; }
private:
GobEngine *_vm;
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index c59dd8272f1..41553692e20 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -893,8 +893,6 @@ class SaveLoad_v7: public SaveLoad {
public:
static const uint32 kChildrenCount = 16;
static const uint32 kAdibou2NbrOfApplications = 5;
- static const uint32 kAdibou2NbrOfAppInfoFiles = 3; // app, crite, exo
-
SaveLoad_v7(GobEngine *vm, const char *targetName);
~SaveLoad_v7() override;
@@ -908,10 +906,10 @@ protected:
const char *description;
};
- class FaceHandler : public TempSpriteHandler {
+ class SpriteHandler : public TempSpriteHandler {
public:
- FaceHandler(GobEngine *vm, const Common::String &target, const Common::String &ext);
- ~FaceHandler() override;
+ SpriteHandler(GobEngine *vm, const Common::String &target, const Common::String &ext);
+ ~SpriteHandler() override;
int32 getSize() override;
bool load(int16 dataVar, int32 size, int32 offset) override;
@@ -946,40 +944,20 @@ protected:
File _file;
};
- class EnvironmentHandler : public SaveHandler {
- public:
- EnvironmentHandler(GobEngine *vm, const Common::String &target, const Common::String &ext);
- ~EnvironmentHandler() override;
-
- int32 getSize() override;
- bool load(int16 dataVar, int32 size, int32 offset) override;
- bool save(int16 dataVar, int32 size, int32 offset) override;
-
- private:
- class File : public SlotFileStatic {
- public:
- File(GobEngine *vm, const Common::String &base, const Common::String &ext);
- ~File() override;
- };
-
- static const int kNbrOfParts = 6;
- static const Common::Array<int> kPartOffsets;
- static int offset_to_part(int offset);
-
- File _file;
- SaveReader _reader;
- SaveWriter _writer;
- };
-
static SaveFile _saveFiles[];
- FaceHandler *_faceHandler[kChildrenCount];
+ SpriteHandler *_faceHandler[kChildrenCount];
FakeFileHandler *_childrenHandler;
FakeFileHandler *_debilHandler;
GameFileHandler *_configHandler;
- EnvironmentHandler *_adibou2EnvHandler[kChildrenCount];
+ GameFileHandler *_adibou2EnvHandler[kChildrenCount];
GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
- FakeFileHandler *_adibou2AppInfoHandler[kAdibou2NbrOfAppInfoFiles][kAdibou2NbrOfApplications];
+ GameFileHandler *_adibou2MemoHandler[kChildrenCount];
+ GameFileHandler *_adibou2DiploHandler[kChildrenCount];
+ GameFileHandler *_adibou2AppliHandler[kAdibou2NbrOfApplications];
+ GameFileHandler *_adibou2CriteHandler[kAdibou2NbrOfApplications];
+ GameFileHandler *_adibou2ExoHandler[kAdibou2NbrOfApplications];
+ GameFileHandler *_adibou2ApplicationsInfoHandler;
TempSpriteHandler *_adibou2AppIcoHandler[kAdibou2NbrOfApplications];
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 5322cbb31f4..5a4c5b51f4c 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -145,6 +145,38 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"Gsa03_16.inf", kSaveModeSave, 0, "app progress" },
{"Gsa04_16.inf", kSaveModeSave, 0, "app progress" },
{"Gsa05_16.inf", kSaveModeSave, 0, "app progress" },
+ {"memo_01.inf", kSaveModeSave, 0, "memo" }, // Child 01
+ {"memo_02.inf", kSaveModeSave, 0, "memo" }, // Child 02
+ {"memo_03.inf", kSaveModeSave, 0, "memo" }, // Child 03
+ {"memo_04.inf", kSaveModeSave, 0, "memo" }, // Child 04
+ {"memo_05.inf", kSaveModeSave, 0, "memo" }, // Child 05
+ {"memo_06.inf", kSaveModeSave, 0, "memo" }, // Child 06
+ {"memo_07.inf", kSaveModeSave, 0, "memo" }, // Child 07
+ {"memo_08.inf", kSaveModeSave, 0, "memo" }, // Child 08
+ {"memo_09.inf", kSaveModeSave, 0, "memo" }, // Child 09
+ {"memo_10.inf", kSaveModeSave, 0, "memo" }, // Child 10
+ {"memo_11.inf", kSaveModeSave, 0, "memo" }, // Child 11
+ {"memo_12.inf", kSaveModeSave, 0, "memo" }, // Child 12
+ {"memo_13.inf", kSaveModeSave, 0, "memo" }, // Child 13
+ {"memo_14.inf", kSaveModeSave, 0, "memo" }, // Child 14
+ {"memo_15.inf", kSaveModeSave, 0, "memo" }, // Child 15
+ {"memo_16.inf", kSaveModeSave, 0, "memo" }, // Child 16
+ {"diplo_01.inf", kSaveModeSave, 0, "diplo" }, // Child 01
+ {"diplo_02.inf", kSaveModeSave, 0, "diplo" }, // Child 02
+ {"diplo_03.inf", kSaveModeSave, 0, "diplo" }, // Child 03
+ {"diplo_04.inf", kSaveModeSave, 0, "diplo" }, // Child 04
+ {"diplo_05.inf", kSaveModeSave, 0, "diplo" }, // Child 05
+ {"diplo_06.inf", kSaveModeSave, 0, "diplo" }, // Child 06
+ {"diplo_07.inf", kSaveModeSave, 0, "diplo" }, // Child 07
+ {"diplo_08.inf", kSaveModeSave, 0, "diplo" }, // Child 08
+ {"diplo_09.inf", kSaveModeSave, 0, "diplo" }, // Child 09
+ {"diplo_10.inf", kSaveModeSave, 0, "diplo" }, // Child 10
+ {"diplo_11.inf", kSaveModeSave, 0, "diplo" }, // Child 11
+ {"diplo_12.inf", kSaveModeSave, 0, "diplo" }, // Child 12
+ {"diplo_13.inf", kSaveModeSave, 0, "diplo" }, // Child 13
+ {"diplo_14.inf", kSaveModeSave, 0, "diplo" }, // Child 14
+ {"diplo_15.inf", kSaveModeSave, 0, "diplo" }, // Child 15
+ {"diplo_16.inf", kSaveModeSave, 0, "diplo" }, // Child 16
{"appli_01.inf", kSaveModeSave, 0, "app info" },
{"appli_02.inf", kSaveModeSave, 0, "app info" },
{"appli_03.inf", kSaveModeSave, 0, "app info" },
@@ -165,6 +197,7 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"ico_03.inf", kSaveModeSave, 0, "app info" },
{"ico_04.inf", kSaveModeSave, 0, "app info" },
{"ico_05.inf", kSaveModeSave, 0, "app info" },
+ {"applis.inf", kSaveModeSave, 0, "app info" },
// Addy 4 Base
{"config00.inf", kSaveModeSave, nullptr, nullptr },
@@ -183,22 +216,22 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{ "adi4.tmp", kSaveModeSave, nullptr, nullptr }
};
-SaveLoad_v7::FaceHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
+SaveLoad_v7::SpriteHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
SlotFileStatic(vm, base, ext) {
}
-SaveLoad_v7::FaceHandler::File::~File() {
+SaveLoad_v7::SpriteHandler::File::~File() {
}
-SaveLoad_v7::FaceHandler::FaceHandler(GobEngine *vm, const Common::String &target, const Common::String &ext)
+SaveLoad_v7::SpriteHandler::SpriteHandler(GobEngine *vm, const Common::String &target, const Common::String &ext)
: TempSpriteHandler(vm), _file(vm, target, ext) {
}
-SaveLoad_v7::FaceHandler::~FaceHandler() {
+SaveLoad_v7::SpriteHandler::~SpriteHandler() {
}
-int32 SaveLoad_v7::FaceHandler::getSize() {
+int32 SaveLoad_v7::SpriteHandler::getSize() {
Common::String fileName = _file.build();
if (fileName.empty())
@@ -217,7 +250,7 @@ int32 SaveLoad_v7::FaceHandler::getSize() {
return header.getSize();
}
-bool SaveLoad_v7::FaceHandler::load(int16 dataVar, int32 size, int32 offset)
+bool SaveLoad_v7::SpriteHandler::load(int16 dataVar, int32 size, int32 offset)
{
if (!TempSpriteHandler::createFromSprite(dataVar, size, offset))
return false;
@@ -236,7 +269,7 @@ bool SaveLoad_v7::FaceHandler::load(int16 dataVar, int32 size, int32 offset)
return TempSpriteHandler::load(dataVar, size, offset);
}
-bool SaveLoad_v7::FaceHandler::save(int16 dataVar, int32 size, int32 offset)
+bool SaveLoad_v7::SpriteHandler::save(int16 dataVar, int32 size, int32 offset)
{
if (!TempSpriteHandler::save(dataVar, size, offset))
return false;
@@ -287,16 +320,19 @@ bool SaveLoad_v7::GameFileHandler::load(int16 dataVar, int32 size, int32 offset)
if (fileName.empty())
return false;
- uint32 varSize = SaveHandler::getVarSize(_vm);
if (size == 0) {
+ uint32 varSize = SaveHandler::getVarSize(_vm);
// Indicator to load all variables
dataVar = 0;
size = (int32) varSize;
}
- SaveReader reader(1, 0, fileName);
- SavePartVars vars(_vm, size);
+ int32 fileSize = getSize();
+ if (fileSize < 0)
+ return false;
+ SaveReader reader(1, 0, fileName);
+ SavePartVars vars(_vm, fileSize);
if (!reader.load()) {
return false;
@@ -318,120 +354,51 @@ bool SaveLoad_v7::GameFileHandler::save(int16 dataVar, int32 size, int32 offset)
if (fileName.empty())
return false;
- uint32 varSize = SaveHandler::getVarSize(_vm);
if (size == 0) {
// Indicator to save all variables
dataVar = 0;
+ uint32 varSize = SaveHandler::getVarSize(_vm);
size = (int32) varSize;
}
- SaveWriter writer(1, 0, fileName);
- SavePartVars vars(_vm, size);
-
- if (!vars.readFrom((uint16) dataVar, offset, size))
- return false;
-
- return writer.writePart(0, &vars);
-}
-
-SaveLoad_v7::EnvironmentHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
-SlotFileStatic(vm, base, ext) {
-}
-
-SaveLoad_v7::EnvironmentHandler::File::~File() {
-}
-
-SaveLoad_v7::EnvironmentHandler::EnvironmentHandler(GobEngine *vm, const Common::String &target, const Common::String &ext) :
-SaveHandler(vm),
-_file(vm, target, ext),
-_reader(kNbrOfParts, 0, _file.build()),
-_writer(kNbrOfParts, 0, _file.build()) {
-}
-
-SaveLoad_v7::EnvironmentHandler::~EnvironmentHandler() {
-}
-
-const Common::Array<int> SaveLoad_v7::EnvironmentHandler::kPartOffsets = {0, 1764, 2564, 3284, 6684, 7192};
-int SaveLoad_v7::EnvironmentHandler::offset_to_part(int offset)
-{
- for (int i = 0; i < kNbrOfParts; ++i) {
- if (offset == kPartOffsets[i]) {
- return i;
- }
- }
-
- warning("No part with offset %d, defaults to part 0", offset);
- return 0;
-}
-
-int32 SaveLoad_v7::EnvironmentHandler::getSize() {
- Common::String fileName = _file.build();
- if (fileName.empty())
- return -1;
-
- if (!_reader.load())
- return -1;
-
- int32 totalSize = 0;
- for (int i = 0; i < kNbrOfParts; ++i)
- {
- SaveHeader header;
- if (!_reader.readPartHeader(0, &header))
- return -1;
-
- totalSize += (int32) header.getSize();
+ int32 fileSize = getSize();
+ int32 newFileSize = size;
+ if (fileSize > 0) {
+ newFileSize = MAX<int32>(fileSize, size + offset);
}
- return totalSize;
-}
-
-bool SaveLoad_v7::EnvironmentHandler::load(int16 dataVar, int32 size, int32 offset) {
- Common::String fileName = _file.build();
- if (fileName.empty())
- return false;
-
- uint32 varSize = SaveHandler::getVarSize(_vm);
- if (size == 0) {
- // Indicator to load all variables
- dataVar = 0;
- size = (int32) varSize;
- }
-
- SavePartVars vars(_vm, size);
-
- if (!_reader.load()) {
- return false;
- }
-
- if (!_reader.readPart(offset_to_part(offset), &vars)) {
- return false;
- }
-
- if (!vars.writeInto((uint16) dataVar, 0, size)) {
- return false;
- }
-
- return true;
-}
-
-bool SaveLoad_v7::EnvironmentHandler::save(int16 dataVar, int32 size, int32 offset) {
- Common::String fileName = _file.build();
- if (fileName.empty())
- return false;
+ SavePartVars vars(_vm, newFileSize);
+ if (fileSize > 0
+ &&
+ (offset > 0 || size < fileSize)) {
+ // Load data from file, as some of it will not be overwritten
+ SaveReader reader(1, 0, fileName);
+ if (!reader.load()) {
+ return false;
+ }
- uint32 varSize = SaveHandler::getVarSize(_vm);
- if (size == 0) {
- // Indicator to save all variables
- dataVar = 0;
- size = (int32) varSize;
+ if (fileSize == newFileSize) {
+ // We can use the same SavePartVars object
+ if (!reader.readPart(0, &vars)) {
+ return false;
+ }
+ } else {
+ // We need to use a temporary SavePartVars object to load data
+ SavePartVars vars_from_file(_vm, fileSize);
+ if (!reader.readPart(0, &vars_from_file)) {;
+ return false;
+ }
+
+ // Copy data from temporary SavePartVars object to the real one
+ vars.partialReadFromRaw(vars_from_file.data(), fileSize);
+ }
}
- SavePartVars vars(_vm, size);
-
- if (!vars.readFrom((uint16) dataVar, 0, size))
+ SaveWriter writer(1, 0, fileName);
+ if (!vars.readFrom((uint16) dataVar, offset, size))
return false;
- return _writer.writePart(offset_to_part(offset), &vars);
+ return writer.writePart(0, &vars);
}
SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
@@ -439,7 +406,7 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
uint32 index = 0;
for (uint32 i = 0; i < kChildrenCount; i++) {
- _saveFiles[index++].handler = _faceHandler[i] = new FaceHandler(_vm,
+ _saveFiles[index++].handler = _faceHandler[i] = new SpriteHandler(_vm,
targetName,
Common::String::format("vsg%02d", i + 1));
}
@@ -447,10 +414,12 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
_saveFiles[index++].handler = _childrenHandler = new FakeFileHandler(_vm);
_saveFiles[index++].handler = _debilHandler = new FakeFileHandler(_vm);
_saveFiles[index++].handler = _configHandler = new GameFileHandler(_vm, targetName, "cfg");
+
+ //const Common::Array<int> environmentOffsets = {0, 1764, 2564, 3284, 6684, 7192};
for (uint32 i = 0; i < kChildrenCount; i++)
- _saveFiles[index++].handler = _adibou2EnvHandler[i] = new EnvironmentHandler(_vm,
- targetName,
- Common::String::format("env%02d", i + 1));
+ _saveFiles[index++].handler = _adibou2EnvHandler[i] = new GameFileHandler(_vm,
+ targetName,
+ Common::String::format("env%02d", i + 1));
for (uint32 i = 0; i < kChildrenCount; i++)
{
@@ -463,15 +432,26 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
}
}
- for (uint32 i = 0; i < kAdibou2NbrOfAppInfoFiles; i++) {
- for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++) {
- _saveFiles[index++].handler = _adibou2AppInfoHandler[i][j] = new FakeFileHandler(_vm);
- }
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ {
+ _saveFiles[index++].handler = _adibou2MemoHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("memo%02d", i + 1));
+ _saveFiles[index++].handler = _adibou2DiploHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("diplo%02d", i + 1));
}
+
for (uint32 i = 0; i < kAdibou2NbrOfApplications; i++) {
- _saveFiles[index++].handler = _adibou2AppIcoHandler[i] = new TempSpriteHandler(_vm);
+ _saveFiles[index++].handler = _adibou2AppliHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("appli%02d", i + 1));
+ _saveFiles[index++].handler = _adibou2CriteHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("crite%02d", i + 1));
+ _saveFiles[index++].handler = _adibou2ExoHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("exo%02d", i + 1));
}
+
+ for (uint32 i = 0; i < kAdibou2NbrOfApplications; i++) {
+ _saveFiles[index++].handler = _adibou2AppIcoHandler[i] = new SpriteHandler(_vm, targetName, Common::String::format("app_ico%02d", i + 1));
+ }
+
+ const Common::Array<int> applisOffsets = {0, 4, 8, 12, 16, 20};
+ _saveFiles[index++].handler = _adibou2ApplicationsInfoHandler = new GameFileHandler(_vm, targetName, "applis");
+
for (int i = 0; i < 2; i++)
_saveFiles[index++].handler = _addy4BaseHandler[i] = new FakeFileHandler(_vm);
@@ -499,17 +479,23 @@ SaveLoad_v7::~SaveLoad_v7() {
}
for (uint32 i = 0; i < kChildrenCount; i++)
+ {
delete _faceHandler[i];
+ delete _adibou2MemoHandler[i];
+ delete _adibou2DiploHandler[i];
+ }
- for (uint32 i = 0; i < kAdibou2NbrOfAppInfoFiles; i++) {
- for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++) {
- delete _adibou2AppInfoHandler[i][j];
- }
+ for (uint32 i = 0; i < kAdibou2NbrOfApplications; i++) {
+ delete _adibou2AppliHandler[i];
+ delete _adibou2CriteHandler[i];
+ delete _adibou2ExoHandler[i];
}
for (uint32 i = 0; i < kAdibou2NbrOfApplications; i++) {
delete _adibou2AppIcoHandler[i];
}
+
+ delete _adibou2ApplicationsInfoHandler;
}
const SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) const {
Commit: 79a8634143830f2ffd91a428438326845f9b7a70
https://github.com/scummvm/scummvm/commit/79a8634143830f2ffd91a428438326845f9b7a70
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:25+01:00
Commit Message:
GOB: a few animation fixes in Adibou2
Changed paths:
engines/gob/mult_v2.cpp
engines/gob/scenery.cpp
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 3b427d5c8a8..dd0d21b8146 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -794,8 +794,9 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
if ((animData.animation < 0) && (animObj.videoSlot > 0)) {
if (_vm->_vidPlayer->getFlags(animObj.videoSlot - 1) & 0x1000) {
- _vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
+ /*_vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
animObj.videoSlot = 0;
+ animObj.animName[0] = '\0';*/
}
}
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index 4d91da8944c..e7a43beab3c 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -919,6 +919,14 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
return;
}
+
+ if ((_vm->getGameType() == kGameTypeAdibou2) && animation >= 0) {
+ _toRedrawRight = 1000;
+ _toRedrawBottom = 1000;
+ _toRedrawLeft = 1000;
+ _toRedrawTop = 1000;
+ }
+
if ((animation < 0) || (animation >= 10))
return;
if ((_animPictCount[animation] == 0) || (layer < 0))
Commit: 532076a73d366c2268673f774ba533846f22d9c8
https://github.com/scummvm/scummvm/commit/532076a73d366c2268673f774ba533846f22d9c8
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:25+01:00
Commit Message:
GOB: add saved handler for lance.inf and retour.inf in Adibou2
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 41553692e20..5f164e8ba4b 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -958,6 +958,8 @@ protected:
GameFileHandler *_adibou2CriteHandler[kAdibou2NbrOfApplications];
GameFileHandler *_adibou2ExoHandler[kAdibou2NbrOfApplications];
GameFileHandler *_adibou2ApplicationsInfoHandler;
+ FakeFileHandler *_adibou2RetourHandler;
+ FakeFileHandler *_adibou2LanceHandler;
TempSpriteHandler *_adibou2AppIcoHandler[kAdibou2NbrOfApplications];
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 5a4c5b51f4c..36b6371ab71 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -198,6 +198,8 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"ico_04.inf", kSaveModeSave, 0, "app info" },
{"ico_05.inf", kSaveModeSave, 0, "app info" },
{"applis.inf", kSaveModeSave, 0, "app info" },
+ {"lance.inf", kSaveModeSave, 0, "app info" },
+ {"retour.inf", kSaveModeSave, 0, "app info" },
// Addy 4 Base
{"config00.inf", kSaveModeSave, nullptr, nullptr },
@@ -451,6 +453,8 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
const Common::Array<int> applisOffsets = {0, 4, 8, 12, 16, 20};
_saveFiles[index++].handler = _adibou2ApplicationsInfoHandler = new GameFileHandler(_vm, targetName, "applis");
+ _saveFiles[index++].handler = _adibou2RetourHandler = new FakeFileHandler(_vm);
+ _saveFiles[index++].handler = _adibou2LanceHandler = new FakeFileHandler(_vm);
for (int i = 0; i < 2; i++)
_saveFiles[index++].handler = _addy4BaseHandler[i] = new FakeFileHandler(_vm);
@@ -496,6 +500,8 @@ SaveLoad_v7::~SaveLoad_v7() {
}
delete _adibou2ApplicationsInfoHandler;
+ delete _adibou2RetourHandler;
+ delete _adibou2LanceHandler;
}
const SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) const {
Commit: f2812c1b3b6a2e32571e5df25c0772ad4927c454
https://github.com/scummvm/scummvm/commit/f2812c1b3b6a2e32571e5df25c0772ad4927c454
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: fix animation crash in Adibou2
Changed paths:
engines/gob/scenery.cpp
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index e7a43beab3c..c21466dc18b 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -660,7 +660,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
if (obj.animVariables && obj.animName[0] != '\0') { // TODO: obj.animVariables hack
if (!obj.field_38) {
- warning("updateAnim Adibou2 stub obj.field_38 == nullptr");
+ //warning("updateAnim Adibou2 stub obj.field_38 == nullptr");
}
if (obj.field_38 != nullptr && obj.field_38[4] & 0x800) {
@@ -688,7 +688,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
if (obj.field_38 != nullptr && obj.field_38[4] & 0x8000) {
warning("updateAnim Adibou2 stub obj.field_38 & 0x8000 != 0");
}
- else {
+ else if (obj.field_38 != nullptr) {
sprite_dest_left = *obj.pPosX ;
sprite_dest_top = *obj.pPosY;
sprite_dest_right = sprite_dest_left + obj.field_38[5] - 1;
Commit: 09dc57a4e3c2d1db9e7061f1d6a5461e1a1d1cd6
https://github.com/scummvm/scummvm/commit/09dc57a4e3c2d1db9e7061f1d6a5461e1a1d1cd6
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: save drawings in Adibou2
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 5f164e8ba4b..74b036914c6 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -893,6 +893,7 @@ class SaveLoad_v7: public SaveLoad {
public:
static const uint32 kChildrenCount = 16;
static const uint32 kAdibou2NbrOfApplications = 5;
+ static const uint32 kAdibou2NbrOfSavedDrawings = 12;
SaveLoad_v7(GobEngine *vm, const char *targetName);
~SaveLoad_v7() override;
@@ -961,6 +962,10 @@ protected:
FakeFileHandler *_adibou2RetourHandler;
FakeFileHandler *_adibou2LanceHandler;
TempSpriteHandler *_adibou2AppIcoHandler[kAdibou2NbrOfApplications];
+ SpriteHandler *_adibou2DrawingHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
+ SpriteHandler *_adibou2DrawingThumbnailHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
+ GameFileHandler *_adibou2DrawingPaletteHandler[kChildrenCount];
+
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 36b6371ab71..1c1bb2c9dd3 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -200,6 +200,433 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"applis.inf", kSaveModeSave, 0, "app info" },
{"lance.inf", kSaveModeSave, 0, "app info" },
{"retour.inf", kSaveModeSave, 0, "app info" },
+ // Adibou2 saved drawings (up to 12)
+ // Child1
+ {"cart0101.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0201.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0301.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0401.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0501.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0601.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0701.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0801.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0901.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1001.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1101.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1201.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett01.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child2
+ {"cart0102.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0202.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0302.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0402.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0502.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0602.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0702.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0802.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0902.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1002.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1102.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1202.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett02.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child3
+ {"cart0103.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0203.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0303.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0403.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0503.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0603.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0703.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0803.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0903.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1003.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1103.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1203.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett03.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child4
+ {"cart0104.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0204.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0304.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0404.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0504.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0604.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0704.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0804.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0904.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1004.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1104.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1204.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett04.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child5
+ {"cart0105.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0205.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0305.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0405.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0505.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0605.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0705.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0805.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0905.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1005.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1105.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1205.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett05.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child6
+ {"cart0106.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0206.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0306.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0406.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0506.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0606.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0706.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0806.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0906.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1006.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1106.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1206.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett06.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child7
+ {"cart0107.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0207.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0307.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0407.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0507.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0607.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0707.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0807.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0907.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1007.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1107.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1207.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett07.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child8
+ {"cart0108.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0208.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0308.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0408.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0508.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0608.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0708.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0808.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0908.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1008.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1108.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1208.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett08.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child9
+ {"cart0109.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0209.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0309.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0409.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0509.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0609.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0709.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0809.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0909.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1009.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1109.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1209.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett09.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child10
+ {"cart0110.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0210.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0310.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0410.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0510.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0610.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0710.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0810.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0910.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1010.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1110.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1210.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett10.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child11
+ {"cart0111.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0211.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0311.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0411.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0511.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0611.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0711.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0811.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0911.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1011.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1111.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1211.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett11.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child12
+ {"cart0112.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0212.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0312.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0412.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0512.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0612.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0712.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0812.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0912.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1012.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1112.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1212.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett12.inf", kSaveModeSave, 0, "drawing palette" },
+ // Child13
+ {"cart0113.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0213.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0313.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0413.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0513.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0613.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0713.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0813.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0913.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1013.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1113.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1213.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett13.inf", kSaveModeSave, 0, "drawing palette" },
+ {"pal12_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal13_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ // Child14
+ {"cart0114.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0214.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0314.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0414.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0514.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0614.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0714.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0814.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0914.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1014.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1114.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1214.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett14.inf", kSaveModeSave, 0, "drawing palette" },
+ {"pal12_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal13_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal14_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ // Child15
+ {"cart0115.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0215.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0315.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0415.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0515.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0615.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0715.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0815.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0915.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1015.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1115.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1215.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett15.inf", kSaveModeSave, 0, "drawing palette" },
+ {"pal12_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal13_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal14_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal15_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ // Child16
+ {"cart0116.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0216.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0316.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0416.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0516.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0616.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0716.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0816.inf", kSaveModeSave, 0, "drawing" },
+ {"cart0916.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1016.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1116.inf", kSaveModeSave, 0, "drawing" },
+ {"cart1216.inf", kSaveModeSave, 0, "drawing" },
+ {"pal00_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal01_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal02_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal03_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal04_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal05_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal06_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal07_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal08_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal09_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal10_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal11_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"palett16.inf", kSaveModeSave, 0, "drawing palette" },
+
// Addy 4 Base
{"config00.inf", kSaveModeSave, nullptr, nullptr },
@@ -417,7 +844,6 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
_saveFiles[index++].handler = _debilHandler = new FakeFileHandler(_vm);
_saveFiles[index++].handler = _configHandler = new GameFileHandler(_vm, targetName, "cfg");
- //const Common::Array<int> environmentOffsets = {0, 1764, 2564, 3284, 6684, 7192};
for (uint32 i = 0; i < kChildrenCount; i++)
_saveFiles[index++].handler = _adibou2EnvHandler[i] = new GameFileHandler(_vm,
targetName,
@@ -456,6 +882,19 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
_saveFiles[index++].handler = _adibou2RetourHandler = new FakeFileHandler(_vm);
_saveFiles[index++].handler = _adibou2LanceHandler = new FakeFileHandler(_vm);
+ for (uint32 i = 0; i < kChildrenCount; i++) {
+ for (uint32 j = 0; j < kAdibou2NbrOfSavedDrawings; j++) {
+ _saveFiles[index++].handler = _adibou2DrawingHandler[i][j] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("draw%02d_%02d", i + 1, j + 1));
+ _saveFiles[index++].handler = _adibou2DrawingThumbnailHandler[i][j] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("draw_thumbnail_%02d_%02d", i + 1, j + 1));
+ }
+
+ _saveFiles[index++].handler = _adibou2DrawingPaletteHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("draw_palette_%02d", i + 1));
+ }
+
for (int i = 0; i < 2; i++)
_saveFiles[index++].handler = _addy4BaseHandler[i] = new FakeFileHandler(_vm);
@@ -502,6 +941,15 @@ SaveLoad_v7::~SaveLoad_v7() {
delete _adibou2ApplicationsInfoHandler;
delete _adibou2RetourHandler;
delete _adibou2LanceHandler;
+
+ for (uint32 i = 0; i < kChildrenCount; i++) {
+ for (uint32 j = 0; j < kAdibou2NbrOfSavedDrawings; j++) {
+ delete _adibou2DrawingHandler[i][j];
+ delete _adibou2DrawingThumbnailHandler[i][j];
+ }
+
+ delete _adibou2DrawingPaletteHandler[i];
+ }
}
const SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) const {
Commit: 851b015beb2a76344af5d7ad8ac117cd73d1b7c3
https://github.com/scummvm/scummvm/commit/851b015beb2a76344af5d7ad8ac117cd73d1b7c3
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: save mailbox drawing in Adibou2
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 74b036914c6..729898edd3f 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -965,6 +965,7 @@ protected:
SpriteHandler *_adibou2DrawingHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
SpriteHandler *_adibou2DrawingThumbnailHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
GameFileHandler *_adibou2DrawingPaletteHandler[kChildrenCount];
+ SpriteHandler *_adibou2DrawingMailboxHandler[kChildrenCount];
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 1c1bb2c9dd3..f9aa67658d5 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -214,19 +214,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1001.inf", kSaveModeSave, 0, "drawing" },
{"cart1101.inf", kSaveModeSave, 0, "drawing" },
{"cart1201.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_01.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett01.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr01.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child2
{"cart0102.inf", kSaveModeSave, 0, "drawing" },
{"cart0202.inf", kSaveModeSave, 0, "drawing" },
@@ -240,19 +241,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1002.inf", kSaveModeSave, 0, "drawing" },
{"cart1102.inf", kSaveModeSave, 0, "drawing" },
{"cart1202.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_02.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett02.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr02.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child3
{"cart0103.inf", kSaveModeSave, 0, "drawing" },
{"cart0203.inf", kSaveModeSave, 0, "drawing" },
@@ -266,19 +268,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1003.inf", kSaveModeSave, 0, "drawing" },
{"cart1103.inf", kSaveModeSave, 0, "drawing" },
{"cart1203.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_03.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett03.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr03.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child4
{"cart0104.inf", kSaveModeSave, 0, "drawing" },
{"cart0204.inf", kSaveModeSave, 0, "drawing" },
@@ -292,19 +295,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1004.inf", kSaveModeSave, 0, "drawing" },
{"cart1104.inf", kSaveModeSave, 0, "drawing" },
{"cart1204.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_04.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett04.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr04.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child5
{"cart0105.inf", kSaveModeSave, 0, "drawing" },
{"cart0205.inf", kSaveModeSave, 0, "drawing" },
@@ -318,19 +322,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1005.inf", kSaveModeSave, 0, "drawing" },
{"cart1105.inf", kSaveModeSave, 0, "drawing" },
{"cart1205.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_05.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett05.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr05.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child6
{"cart0106.inf", kSaveModeSave, 0, "drawing" },
{"cart0206.inf", kSaveModeSave, 0, "drawing" },
@@ -344,19 +349,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1006.inf", kSaveModeSave, 0, "drawing" },
{"cart1106.inf", kSaveModeSave, 0, "drawing" },
{"cart1206.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_06.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett06.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr06.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child7
{"cart0107.inf", kSaveModeSave, 0, "drawing" },
{"cart0207.inf", kSaveModeSave, 0, "drawing" },
@@ -370,19 +376,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1007.inf", kSaveModeSave, 0, "drawing" },
{"cart1107.inf", kSaveModeSave, 0, "drawing" },
{"cart1207.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_07.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett07.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr07.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child8
{"cart0108.inf", kSaveModeSave, 0, "drawing" },
{"cart0208.inf", kSaveModeSave, 0, "drawing" },
@@ -396,19 +403,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1008.inf", kSaveModeSave, 0, "drawing" },
{"cart1108.inf", kSaveModeSave, 0, "drawing" },
{"cart1208.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_08.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett08.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr08.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child9
{"cart0109.inf", kSaveModeSave, 0, "drawing" },
{"cart0209.inf", kSaveModeSave, 0, "drawing" },
@@ -422,19 +430,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1009.inf", kSaveModeSave, 0, "drawing" },
{"cart1109.inf", kSaveModeSave, 0, "drawing" },
{"cart1209.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_09.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett09.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr09.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child10
{"cart0110.inf", kSaveModeSave, 0, "drawing" },
{"cart0210.inf", kSaveModeSave, 0, "drawing" },
@@ -448,19 +457,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1010.inf", kSaveModeSave, 0, "drawing" },
{"cart1110.inf", kSaveModeSave, 0, "drawing" },
{"cart1210.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_10.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett10.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr10.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child11
{"cart0111.inf", kSaveModeSave, 0, "drawing" },
{"cart0211.inf", kSaveModeSave, 0, "drawing" },
@@ -474,19 +484,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1011.inf", kSaveModeSave, 0, "drawing" },
{"cart1111.inf", kSaveModeSave, 0, "drawing" },
{"cart1211.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_11.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett11.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr11.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child12
{"cart0112.inf", kSaveModeSave, 0, "drawing" },
{"cart0212.inf", kSaveModeSave, 0, "drawing" },
@@ -500,19 +511,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1012.inf", kSaveModeSave, 0, "drawing" },
{"cart1112.inf", kSaveModeSave, 0, "drawing" },
{"cart1212.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_12.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett12.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr12.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Child13
{"cart0113.inf", kSaveModeSave, 0, "drawing" },
{"cart0213.inf", kSaveModeSave, 0, "drawing" },
@@ -526,21 +538,22 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1013.inf", kSaveModeSave, 0, "drawing" },
{"cart1113.inf", kSaveModeSave, 0, "drawing" },
{"cart1213.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett13.inf", kSaveModeSave, 0, "drawing palette" },
- {"pal12_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal13_13.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"plettr13.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pal12_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal13_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
// Child14
{"cart0114.inf", kSaveModeSave, 0, "drawing" },
{"cart0214.inf", kSaveModeSave, 0, "drawing" },
@@ -554,22 +567,23 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1014.inf", kSaveModeSave, 0, "drawing" },
{"cart1114.inf", kSaveModeSave, 0, "drawing" },
{"cart1214.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett14.inf", kSaveModeSave, 0, "drawing palette" },
- {"pal12_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal13_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal14_14.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"plettr14.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pal12_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal13_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal14_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
// Child15
{"cart0115.inf", kSaveModeSave, 0, "drawing" },
{"cart0215.inf", kSaveModeSave, 0, "drawing" },
@@ -583,23 +597,24 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1015.inf", kSaveModeSave, 0, "drawing" },
{"cart1115.inf", kSaveModeSave, 0, "drawing" },
{"cart1215.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett15.inf", kSaveModeSave, 0, "drawing palette" },
- {"pal12_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal13_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal14_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal15_15.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"plettr15.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pal12_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal13_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal14_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal15_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
// Child16
{"cart0116.inf", kSaveModeSave, 0, "drawing" },
{"cart0216.inf", kSaveModeSave, 0, "drawing" },
@@ -613,19 +628,20 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"cart1016.inf", kSaveModeSave, 0, "drawing" },
{"cart1116.inf", kSaveModeSave, 0, "drawing" },
{"cart1216.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal01_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal02_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal03_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal04_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal05_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal06_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal07_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal08_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal09_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal10_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
- {"pal11_16.inf", kSaveModeSave, 0, "drawing thumbnail"},
+ {"pal00_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal01_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal02_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal03_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal04_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal05_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal06_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal07_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal08_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal09_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal10_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"pal11_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett16.inf", kSaveModeSave, 0, "drawing palette" },
+ {"plettr16.inf", kSaveModeSave, 0, "drawing in mailbox" },
// Addy 4 Base
@@ -892,7 +908,13 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
Common::String::format("draw_thumbnail_%02d_%02d", i + 1, j + 1));
}
- _saveFiles[index++].handler = _adibou2DrawingPaletteHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("draw_palette_%02d", i + 1));
+ _saveFiles[index++].handler = _adibou2DrawingPaletteHandler[i] = new GameFileHandler(_vm,
+ targetName,
+ Common::String::format("draw_palette_%02d",
+ i + 1));
+ _saveFiles[index++].handler = _adibou2DrawingMailboxHandler[i] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("draw_mailbox_%02d", i + 1));
}
for (int i = 0; i < 2; i++)
@@ -949,6 +971,7 @@ SaveLoad_v7::~SaveLoad_v7() {
}
delete _adibou2DrawingPaletteHandler[i];
+ delete _adibou2DrawingMailboxHandler[i];
}
}
Commit: 3546f15ab4d606490882577dd926f527a9e0df96
https://github.com/scummvm/scummvm/commit/3546f15ab4d606490882577dd926f527a9e0df96
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: save flowers and cakes photos in Adibou2
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 729898edd3f..c5d2a3cce46 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -966,6 +966,9 @@ protected:
SpriteHandler *_adibou2DrawingThumbnailHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
GameFileHandler *_adibou2DrawingPaletteHandler[kChildrenCount];
SpriteHandler *_adibou2DrawingMailboxHandler[kChildrenCount];
+ SpriteHandler *_adibou2CakePhotoHandler[kChildrenCount];
+ SpriteHandler *_adibou2FlowerPhotoHandler[kChildrenCount];
+ SpriteHandler *_adibou2FlowerPhoto2Handler[kChildrenCount];
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index f9aa67658d5..97bdb48d2f0 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -228,6 +228,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett01.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr01.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod01.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur01.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud01.inf", kSaveModeSave, 0, "photo of flowers" },
// Child2
{"cart0102.inf", kSaveModeSave, 0, "drawing" },
{"cart0202.inf", kSaveModeSave, 0, "drawing" },
@@ -255,6 +258,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett02.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr02.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod02.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur02.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud02.inf", kSaveModeSave, 0, "photo of flowers" },
// Child3
{"cart0103.inf", kSaveModeSave, 0, "drawing" },
{"cart0203.inf", kSaveModeSave, 0, "drawing" },
@@ -282,6 +288,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett03.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr03.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod03.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur03.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud03.inf", kSaveModeSave, 0, "photo of flowers" },
// Child4
{"cart0104.inf", kSaveModeSave, 0, "drawing" },
{"cart0204.inf", kSaveModeSave, 0, "drawing" },
@@ -309,6 +318,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett04.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr04.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod04.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur04.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud04.inf", kSaveModeSave, 0, "photo of flowers" },
// Child5
{"cart0105.inf", kSaveModeSave, 0, "drawing" },
{"cart0205.inf", kSaveModeSave, 0, "drawing" },
@@ -336,6 +348,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett05.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr05.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod05.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur05.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud05.inf", kSaveModeSave, 0, "photo of flowers" },
// Child6
{"cart0106.inf", kSaveModeSave, 0, "drawing" },
{"cart0206.inf", kSaveModeSave, 0, "drawing" },
@@ -363,6 +378,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett06.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr06.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod06.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur06.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud06.inf", kSaveModeSave, 0, "photo of flowers" },
// Child7
{"cart0107.inf", kSaveModeSave, 0, "drawing" },
{"cart0207.inf", kSaveModeSave, 0, "drawing" },
@@ -390,6 +408,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett07.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr07.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod07.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur07.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud07.inf", kSaveModeSave, 0, "photo of flowers" },
// Child8
{"cart0108.inf", kSaveModeSave, 0, "drawing" },
{"cart0208.inf", kSaveModeSave, 0, "drawing" },
@@ -417,6 +438,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett08.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr08.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod08.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur08.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud08.inf", kSaveModeSave, 0, "photo of flowers" },
// Child9
{"cart0109.inf", kSaveModeSave, 0, "drawing" },
{"cart0209.inf", kSaveModeSave, 0, "drawing" },
@@ -444,6 +468,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett09.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr09.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod09.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur09.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud09.inf", kSaveModeSave, 0, "photo of flowers" },
// Child10
{"cart0110.inf", kSaveModeSave, 0, "drawing" },
{"cart0210.inf", kSaveModeSave, 0, "drawing" },
@@ -471,6 +498,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett10.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr10.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod10.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur10.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud10.inf", kSaveModeSave, 0, "photo of flowers" },
// Child11
{"cart0111.inf", kSaveModeSave, 0, "drawing" },
{"cart0211.inf", kSaveModeSave, 0, "drawing" },
@@ -498,6 +528,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett11.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr11.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod11.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur11.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud11.inf", kSaveModeSave, 0, "photo of flowers" },
// Child12
{"cart0112.inf", kSaveModeSave, 0, "drawing" },
{"cart0212.inf", kSaveModeSave, 0, "drawing" },
@@ -525,6 +558,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett12.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr12.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod12.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur12.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud12.inf", kSaveModeSave, 0, "photo of flowers" },
// Child13
{"cart0113.inf", kSaveModeSave, 0, "drawing" },
{"cart0213.inf", kSaveModeSave, 0, "drawing" },
@@ -552,6 +588,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett13.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr13.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod13.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur13.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud13.inf", kSaveModeSave, 0, "photo of flowers" },
{"pal12_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal13_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
// Child14
@@ -581,6 +620,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett14.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr14.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod14.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur14.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud14.inf", kSaveModeSave, 0, "photo of flowers" },
{"pal12_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal13_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal14_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
@@ -611,6 +653,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett15.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr15.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod15.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur15.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud15.inf", kSaveModeSave, 0, "photo of flowers" },
{"pal12_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal13_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal14_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
@@ -642,6 +687,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"pal11_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"palett16.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr16.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"pgatod16.inf", kSaveModeSave, 0, "photo of cake" },
+ {"pfleur16.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleud16.inf", kSaveModeSave, 0, "photo of flowers" },
// Addy 4 Base
@@ -915,6 +963,18 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
_saveFiles[index++].handler = _adibou2DrawingMailboxHandler[i] = new SpriteHandler(_vm,
targetName,
Common::String::format("draw_mailbox_%02d", i + 1));
+
+ _saveFiles[index++].handler = _adibou2CakePhotoHandler[i] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("photo_cake_%02d", i + 1));
+
+ _saveFiles[index++].handler = _adibou2FlowerPhotoHandler[i] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("photo_flower_%02d", i + 1));
+
+ _saveFiles[index++].handler = _adibou2FlowerPhoto2Handler[i] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("photo_flower_2_%02d", i + 1));
}
for (int i = 0; i < 2; i++)
Commit: 27e5234e17ecc1cf547d5791da23b1fa234d79f1
https://github.com/scummvm/scummvm/commit/27e5234e17ecc1cf547d5791da23b1fa234d79f1
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: disable "split" surface for Adibou2
The "split" logic seems to have disappeared in recent versions of the engine (it was triggered by mistake in some situation, resulting in bad draws).
o7_initScreen still need to be fully adapted.
Changed paths:
engines/gob/inter.h
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 487e4e9f469..2abb793952e 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -686,6 +686,7 @@ protected:
void o7_loadFunctions();
void o7_moveFile();
void o7_playVmdOrMusic();
+ void o7_initScreen();
void o7_draw0x89();
void o7_findFile();
void o7_findCDFile();
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 687656cb638..853793b844e 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -67,6 +67,7 @@ void Inter_v7::setupOpcodesDraw() {
OPCODEDRAW(0x59, o7_callFunction);
OPCODEDRAW(0x5A, o7_loadFunctions);
OPCODEDRAW(0x62, o7_moveFile);
+ OPCODEDRAW(0x80, o7_initScreen);
OPCODEDRAW(0x83, o7_playVmdOrMusic);
OPCODEDRAW(0x89, o7_draw0x89);
OPCODEDRAW(0x8A, o7_findFile);
@@ -387,6 +388,104 @@ void Inter_v7::o7_moveFile() {
warning("Adibou2 Stub: move file from \"%s\" to \"%s\"", file1.c_str(), file2.c_str());
}
+
+void Inter_v7::o7_initScreen() {
+ // TODO: continue implementation
+ int16 offY;
+ int16 videoMode;
+ int16 width, height;
+
+ offY = _vm->_game->_script->readInt16();
+
+ videoMode = offY & 0xFF;
+ offY = (offY >> 8) & 0xFF;
+
+ width = _vm->_game->_script->readValExpr();
+ height = _vm->_game->_script->readValExpr();
+
+ if (videoMode == 0)
+ videoMode = 0x14;
+
+ _vm->_video->clearScreen();
+
+ if (videoMode == 0x13) {
+
+ if (width == -1)
+ width = 320;
+ if (height == -1)
+ height = 200;
+
+ _vm->_width = 320;
+ _vm->_height = 200;
+
+ _vm->_video->setSize();
+
+ } else if (_vm->_global->_videoMode == 0x13) {
+ width = _vm->_width = 640;
+ height = _vm->_height = 480;
+
+ _vm->_video->setSize();
+ }
+
+ _vm->_global->_fakeVideoMode = videoMode;
+
+ // Some versions require this
+ if (videoMode == 0x18)
+ _vm->_global->_fakeVideoMode = 0x37;
+
+ if ((videoMode == _vm->_global->_videoMode) && (width == -1))
+ return;
+
+ if (width > 0)
+ _vm->_video->_surfWidth = width;
+ if (height > 0)
+ _vm->_video->_surfHeight = height;
+
+ _vm->_video->_screenDeltaX = 0;
+ if (_vm->_video->_surfWidth < _vm->_width)
+ _vm->_video->_screenDeltaX = (_vm->_width - _vm->_video->_surfWidth) / 2;
+
+ _vm->_global->_mouseMinX = _vm->_video->_screenDeltaX;
+ _vm->_global->_mouseMaxX = _vm->_video->_screenDeltaX + _vm->_video->_surfWidth - 1;
+
+ _vm->_video->_splitStart = _vm->_video->_surfHeight - offY;
+
+ _vm->_video->_splitHeight1 = MIN<int16>(_vm->_height, _vm->_video->_surfHeight);
+ _vm->_video->_splitHeight2 = offY;
+
+ if ((_vm->_video->_surfHeight + offY) < _vm->_height)
+ _vm->_video->_screenDeltaY = (_vm->_height - (_vm->_video->_surfHeight + offY)) / 2;
+ else
+ _vm->_video->_screenDeltaY = 0;
+
+ _vm->_global->_mouseMaxY = (_vm->_video->_surfHeight + _vm->_video->_screenDeltaY) - offY - 1;
+ _vm->_global->_mouseMinY = _vm->_video->_screenDeltaY;
+
+ _vm->_draw->closeScreen();
+ _vm->_util->clearPalette();
+ memset(_vm->_global->_redPalette, 0, 256);
+ memset(_vm->_global->_greenPalette, 0, 256);
+ memset(_vm->_global->_bluePalette, 0, 256);
+
+ _vm->_video->_splitSurf.reset();
+ _vm->_draw->_spritesArray[24].reset();
+ _vm->_draw->_spritesArray[25].reset();
+
+ _vm->_global->_videoMode = videoMode;
+ _vm->_video->initPrimary(videoMode);
+ WRITE_VAR(15, _vm->_global->_fakeVideoMode);
+
+ _vm->_global->_setAllPalette = true;
+
+ _vm->_util->setMousePos(_vm->_global->_inter_mouseX,
+ _vm->_global->_inter_mouseY);
+ _vm->_util->clearPalette();
+
+ _vm->_draw->initScreen();
+
+ _vm->_util->setScrollOffset();
+}
+
void Inter_v7::o7_playVmdOrMusic() {
Common::String file = _vm->_game->_script->evalString();
Commit: f0ab3942432124e855175ba838219d711986e4ff
https://github.com/scummvm/scummvm/commit/f0ab3942432124e855175ba838219d711986e4ff
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: fix missing closeVideo
This revealed some dirty rectangle issues on a few exercises.
Changed paths:
engines/gob/mult_v2.cpp
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index dd0d21b8146..3b427d5c8a8 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -794,9 +794,8 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
if ((animData.animation < 0) && (animObj.videoSlot > 0)) {
if (_vm->_vidPlayer->getFlags(animObj.videoSlot - 1) & 0x1000) {
- /*_vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
+ _vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
animObj.videoSlot = 0;
- animObj.animName[0] = '\0';*/
}
}
Commit: da2d5c731fd50113d4684c75eda4ad77efbc6369
https://github.com/scummvm/scummvm/commit/da2d5c731fd50113d4684c75eda4ad77efbc6369
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: temp workaround to enable cake decoration in Adibou2
Rely on DRAW_PUTPIXEL with pattern OxFF ; only mock the variable update at the end for now.
+ use Draw_Playtoons for Adibou2
Changed paths:
engines/gob/draw_playtoons.cpp
engines/gob/gob.cpp
diff --git a/engines/gob/draw_playtoons.cpp b/engines/gob/draw_playtoons.cpp
index 9fb0da4641a..0a0a4d792b8 100644
--- a/engines/gob/draw_playtoons.cpp
+++ b/engines/gob/draw_playtoons.cpp
@@ -22,6 +22,7 @@
#include "common/endian.h"
#include "gob/draw.h"
+#include "gob/inter.h"
#include "gob/game.h"
#include "gob/resources.h"
@@ -148,6 +149,7 @@ void Draw_Playtoons::spriteOperation(int16 operation) {
switch (_pattern & 0xFF) {
case 0xFF:
warning("oPlaytoons_spriteOperation: operation DRAW_PUTPIXEL, pattern -1");
+ WRITE_VAR(0, 1);
break;
case 1:
_spritesArray[_destSurface]->fillRect(destSpriteX,
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index adb21565595..c276f2c2c17 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -627,7 +627,7 @@ Common::Error GobEngine::initGameParts() {
_video = new Video_v6(this);
_inter = new Inter_v7(this);
_mult = new Mult_v2(this);
- _draw = new Draw_v2(this);
+ _draw = new Draw_Playtoons(this);
_map = new Map_v2(this);
_goblin = new Goblin_v7(this);
_scenery = new Scenery_v2(this);
Commit: 964133c4154d83b68b30640bb093bd250403df0a
https://github.com/scummvm/scummvm/commit/964133c4154d83b68b30640bb093bd250403df0a
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: misc file path related adjustments in Adibou2
Changed paths:
engines/gob/databases.cpp
engines/gob/init_v7.cpp
engines/gob/inter.h
engines/gob/inter_v7.cpp
diff --git a/engines/gob/databases.cpp b/engines/gob/databases.cpp
index bce7517f128..d29ca2ea806 100644
--- a/engines/gob/databases.cpp
+++ b/engines/gob/databases.cpp
@@ -92,7 +92,7 @@ bool Databases::open(const Common::String &id, const Common::String &file) {
bool Databases::close(const Common::String &id) {
DBMap::iterator db = _databases.find(id);
if (db == _databases.end()) {
- warning("Databases::open(): A database with the ID \"%s\" does not exist", id.c_str());
+ warning("Databases::close(): A database with the ID \"%s\" does not exist", id.c_str());
return false;
}
diff --git a/engines/gob/init_v7.cpp b/engines/gob/init_v7.cpp
index 7a39f53e06c..ee3c4357d1b 100644
--- a/engines/gob/init_v7.cpp
+++ b/engines/gob/init_v7.cpp
@@ -34,10 +34,8 @@ Init_v7::~Init_v7() {
void Init_v7::initGame() {
const Common::FSNode gameDataDir(ConfMan.get("path"));
-
- // Add the environment directory
- SearchMan.addSubDirectoryMatching(gameDataDir, "envir");
-
+ // That way, an application can be added simply by copying it as a separate subdirectory, in the main game directory
+ SearchMan.addSubDirectoryMatching(gameDataDir, "*");
Init::initGame();
}
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 2abb793952e..edc26885e57 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -687,9 +687,9 @@ protected:
void o7_moveFile();
void o7_playVmdOrMusic();
void o7_initScreen();
- void o7_draw0x89();
+ void o7_setActiveCD();
void o7_findFile();
- void o7_findCDFile();
+ void o7_findNextFile();
void o7_getSystemProperty();
void o7_loadImage();
void o7_setVolume();
@@ -711,8 +711,10 @@ private:
Databases _databases;
Common::PEResources *_cursors;
+ Common::ArchiveMemberList _remainingFilesFromPreviousSearch;
+ Common::String _currentCDPath;
- Common::String findFile(const Common::String &mask);
+ Common::String findFile(const Common::String &mask, const Common::String &previousFile);
bool loadCursorFile();
void resizeCursors(int16 width, int16 height, int16 count, bool transparency);
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 853793b844e..f26ad597b6c 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -69,9 +69,9 @@ void Inter_v7::setupOpcodesDraw() {
OPCODEDRAW(0x62, o7_moveFile);
OPCODEDRAW(0x80, o7_initScreen);
OPCODEDRAW(0x83, o7_playVmdOrMusic);
- OPCODEDRAW(0x89, o7_draw0x89);
+ OPCODEDRAW(0x89, o7_setActiveCD);
OPCODEDRAW(0x8A, o7_findFile);
- OPCODEDRAW(0x8B, o7_findCDFile);
+ OPCODEDRAW(0x8B, o7_findNextFile);
OPCODEDRAW(0x8C, o7_getSystemProperty);
OPCODEDRAW(0x90, o7_loadImage);
OPCODEDRAW(0x93, o7_setVolume);
@@ -617,33 +617,95 @@ void Inter_v7::o7_playVmdOrMusic() {
}
}
-void Inter_v7::o7_draw0x89() {
+void Inter_v7::o7_setActiveCD() {
Common::String str0 = _vm->_game->_script->evalString();
Common::String str1 = _vm->_game->_script->evalString();
- warning("Addy Stub Draw 0x89: \"%s\", \"%s\"", str0.c_str(), str1.c_str());
-
- if (findFile(str0).empty()) {
- storeValue(0);
- return;
+ Common::ArchiveMemberList files;
+ SearchMan.listMatchingMembers(files, str0);
+
+ for (Common::ArchiveMemberPtr file : files) {
+ auto *node = dynamic_cast<Common::FSNode *>(file.get());
+ if (node != nullptr) {
+ Common::String path = node->getParent().getName();
+ if (path.equalsIgnoreCase("applis")
+ || path.equalsIgnoreCase("envir"))
+ continue;
+
+ debugC(5, kDebugFileIO, "o7_setActiveCD: %s -> %s", _currentCDPath.c_str(), path.c_str());
+ if (!_currentCDPath.empty())
+ SearchMan.setPriority(_currentCDPath, 0);
+
+ _currentCDPath = path;
+ SearchMan.setPriority(path, 1);
+ storeValue(1);
+ return;
+ }
}
- storeValue(1);
+ storeValue(0);
}
void Inter_v7::o7_findFile() {
- Common::String file = findFile(getFile(_vm->_game->_script->evalString()));
+ Common::String file_pattern = getFile(_vm->_game->_script->evalString());
+ Common::ArchiveMemberList files;
- storeString(file.c_str());
- storeValue(file.empty() ? 0 : 1);
+ SearchMan.listMatchingMembers(files, file_pattern);
+ Common::ArchiveMemberList filesWithoutDuplicates;
+ for (Common::ArchiveMemberPtr file : files)
+ {
+ bool found = false;
+ for (Common::ArchiveMemberPtr fileWithoutDuplicates : filesWithoutDuplicates)
+ {
+ if (file->getName() == fileWithoutDuplicates->getName())
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found)
+ filesWithoutDuplicates.push_back(file);
+ }
+
+ debugC(5, kDebugFileIO, "o7_findFile(%s): %d matches (%d including duplicates)",
+ file_pattern.c_str(),
+ filesWithoutDuplicates.size(),
+ files.size());
+
+ if (filesWithoutDuplicates.empty()) {
+ storeString("");
+ storeValue(0);
+ }
+ else {
+ Common::String file = files.front()->getName();
+ filesWithoutDuplicates.pop_front();
+ debugC(5, kDebugFileIO, "o7_findFile(%s): first match = %s",
+ file_pattern.c_str(),
+ file.c_str());
+
+ storeString(file.c_str());
+ storeValue(1);
+ }
+
+ _remainingFilesFromPreviousSearch = filesWithoutDuplicates;
}
-void Inter_v7::o7_findCDFile() {
- Common::String mask = getFile(GET_VARO_STR(_vm->_game->_script->readVarIndex()));
- Common::String file = findFile(mask);
+void Inter_v7::o7_findNextFile() {
+ uint16 type;
+ uint16 varIndex = _vm->_game->_script->readVarIndex(0, &type);
- warning("Addy Stub: Find CD file \"%s\"", mask.c_str());
- storeValue(0);
+ Common::String file;
+ if (!_remainingFilesFromPreviousSearch.empty()) {
+ file = _remainingFilesFromPreviousSearch.front()->getName();
+ _remainingFilesFromPreviousSearch.pop_front();
+ }
+
+ debugC(5, kDebugFileIO, "o7_findNextFile: new match = %s",
+ file.c_str());
+
+ storeString(varIndex, type, file.c_str());
+ storeValue(file.empty() ? 0 : 1);
}
void Inter_v7::o7_getSystemProperty() {
@@ -671,7 +733,7 @@ void Inter_v7::o7_getSystemProperty() {
}
void Inter_v7::o7_loadImage() {
- Common::String file = _vm->_game->_script->evalString();
+ Common::String file = getFile(_vm->_game->_script->evalString());
if (!file.contains('.'))
file += ".TGA";
@@ -805,8 +867,8 @@ void Inter_v7::o7_loadIFFPalette() {
}
void Inter_v7::o7_opendBase() {
- Common::String dbFile = _vm->_game->_script->evalString();
- Common::String id = _vm->_game->_script->evalString();
+ Common::String dbFile = getFile(_vm->_game->_script->evalString());
+ Common::String id = getFile(_vm->_game->_script->evalString());
dbFile += ".DBF";
@@ -820,7 +882,7 @@ void Inter_v7::o7_opendBase() {
}
void Inter_v7::o7_closedBase() {
- Common::String id = _vm->_game->_script->evalString();
+ Common::String id = getFile(_vm->_game->_script->evalString());
if (_databases.close(id))
WRITE_VAR(27, 1); // Success
@@ -829,7 +891,7 @@ void Inter_v7::o7_closedBase() {
}
void Inter_v7::o7_getDBString() {
- Common::String id = _vm->_game->_script->evalString();
+ Common::String id = getFile(_vm->_game->_script->evalString());
Common::String group = _vm->_game->_script->evalString();
Common::String section = _vm->_game->_script->evalString();
Common::String keyword = _vm->_game->_script->evalString();
@@ -932,17 +994,6 @@ void Inter_v7::o7_gob0x201(OpGobParams ¶ms) {
WRITE_VAR(varIndex, 1);
}
-Common::String Inter_v7::findFile(const Common::String &mask) {
- Common::ArchiveMemberList files;
-
- SearchMan.listMatchingMembers(files, mask);
-
- if (files.empty())
- return "";
-
- return files.front()->getName();
-}
-
bool Inter_v7::loadCursorFile() {
if (_cursors)
return true;
Commit: 40f834fd7cb2446a0b99fc4f37c5b76bc445a41c
https://github.com/scummvm/scummvm/commit/40f834fd7cb2446a0b99fc4f37c5b76bc445a41c
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:26+01:00
Commit Message:
GOB: implement copyFile and moveFile
Changed paths:
engines/gob/inter.h
engines/gob/inter_v7.cpp
engines/gob/save/saveconverter.cpp
engines/gob/save/savefile.cpp
engines/gob/save/savefile.h
engines/gob/save/savehandler.cpp
engines/gob/save/savehandler.h
engines/gob/save/saveload.cpp
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index edc26885e57..aca8cec38e8 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -685,6 +685,7 @@ protected:
void o7_callFunction();
void o7_loadFunctions();
void o7_moveFile();
+ void o7_copyFile();
void o7_playVmdOrMusic();
void o7_initScreen();
void o7_setActiveCD();
@@ -715,6 +716,7 @@ private:
Common::String _currentCDPath;
Common::String findFile(const Common::String &mask, const Common::String &previousFile);
+ void copyFile(const Common::String &sourceFile, const Common::String &destFile);
bool loadCursorFile();
void resizeCursors(int16 width, int16 height, int16 count, bool transparency);
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index f26ad597b6c..8a77a6b4372 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -66,6 +66,7 @@ void Inter_v7::setupOpcodesDraw() {
OPCODEDRAW(0x57, o7_intToString);
OPCODEDRAW(0x59, o7_callFunction);
OPCODEDRAW(0x5A, o7_loadFunctions);
+ OPCODEDRAW(0x60, o7_copyFile);
OPCODEDRAW(0x62, o7_moveFile);
OPCODEDRAW(0x80, o7_initScreen);
OPCODEDRAW(0x83, o7_playVmdOrMusic);
@@ -373,6 +374,56 @@ void Inter_v7::o7_loadFunctions() {
_vm->_game->loadFunctions(tot, flags);
}
+void Inter_v7::copyFile(const Common::String &sourceFile, const Common::String &destFile) {
+ SaveLoad::SaveMode mode1 = _vm->_saveLoad->getSaveMode(sourceFile.c_str());
+ SaveLoad::SaveMode mode2 = _vm->_saveLoad->getSaveMode(destFile.c_str());
+
+ if (mode2 == SaveLoad::kSaveModeIgnore || mode2 == SaveLoad::kSaveModeExists)
+ return;
+ else if (mode2 == SaveLoad::kSaveModeSave) {
+ if (mode1 == SaveLoad::kSaveModeNone) {
+ Common::SeekableReadStream *stream = _vm->_dataIO->getFile(sourceFile);
+ if (!stream)
+ return;
+
+ int32 size = stream->size();
+ byte *data = new byte[size];
+ stream->read(data, size);
+
+ _vm->_saveLoad->saveFromRaw(destFile.c_str(), data, size, 0);
+ delete[] data;
+ delete stream;
+ } else if (mode1 == SaveLoad::kSaveModeSave) {
+ _vm->_saveLoad->copySaveGame(sourceFile.c_str(), destFile.c_str());
+ } else
+ warning("o7_copyFile(): unsupported mode %d for source \"%s\" while copying to \"%s\" ",
+ mode1,
+ sourceFile.c_str(),
+ destFile.c_str());
+ }
+ else
+ warning("Attempted to write to file \"%s\" while copying from \"%s\"",
+ destFile.c_str(),
+ sourceFile.c_str());
+
+}
+
+void Inter_v7::o7_copyFile() {
+ Common::String path1 = _vm->_game->_script->evalString();
+ Common::String path2 = _vm->_game->_script->evalString();
+
+ debugC(2, kDebugFileIO, "Copy file \"%s\" to \"%s", path1.c_str(), path2.c_str());
+
+ Common::String file1 = getFile(path1.c_str());
+ Common::String file2 = getFile(path2.c_str());
+ if (file1.equalsIgnoreCase(file2)) {
+ warning("o7_copyFile(): \"%s\" == \"%s\"", path1.c_str(), path2.c_str());
+ return;
+ }
+
+ copyFile(file1, file2);
+}
+
void Inter_v7::o7_moveFile() {
Common::String path1 = _vm->_game->_script->evalString();
Common::String path2 = _vm->_game->_script->evalString();
@@ -385,7 +436,12 @@ void Inter_v7::o7_moveFile() {
return;
}
- warning("Adibou2 Stub: move file from \"%s\" to \"%s\"", file1.c_str(), file2.c_str());
+ copyFile(file1, file2);
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file1.c_str());
+ if (mode == SaveLoad::kSaveModeSave) {
+ _vm->_saveLoad->deleteFile(file1.c_str());
+ } else if (mode == SaveLoad::kSaveModeNone)
+ warning("Attempted to delete file \"%s\" while moving it to \"%s\"", file1.c_str(), file2.c_str());
}
diff --git a/engines/gob/save/saveconverter.cpp b/engines/gob/save/saveconverter.cpp
index 19564f474c4..9d5925ea7cf 100644
--- a/engines/gob/save/saveconverter.cpp
+++ b/engines/gob/save/saveconverter.cpp
@@ -217,7 +217,7 @@ SavePartVars *SaveConverter::readVars(Common::SeekableReadStream &stream,
SavePartVars *vars = new SavePartVars(_vm, count);
// Read variables into part
- if (!vars->readFromRaw(data, count)) {
+ if (!vars->readFromRaw(data, 0, count)) {
delete[] data;
delete vars;
return nullptr;
diff --git a/engines/gob/save/savefile.cpp b/engines/gob/save/savefile.cpp
index 4981acfa40c..897cc6a8895 100644
--- a/engines/gob/save/savefile.cpp
+++ b/engines/gob/save/savefile.cpp
@@ -247,18 +247,11 @@ bool SavePartVars::readFrom(uint32 var, uint32 offset, uint32 size) {
return _vm->_inter->_variables->copyTo(var, _data + offset, size);
}
-bool SavePartVars::readFromRaw(const byte *data, uint32 size) {
- if (size != _size)
+bool SavePartVars::readFromRaw(const byte *data, uint32 offset, uint32 size) {
+ if (offset + size > _size)
return false;
- memcpy(_data, data, size);
- return true;
-}
-
-bool SavePartVars::partialReadFromRaw(const byte *data, uint32 size) {
- if (size > _size)
- return false;
- memcpy(_data, data, size);
+ memcpy(_data + offset, data, size);
return true;
}
@@ -276,6 +269,14 @@ bool SavePartVars::writeInto(uint32 var, uint32 offset, uint32 size) const {
return true;
}
+bool SavePartVars::writeIntoRaw(byte *data, uint32 offset, uint32 size) const {
+ if ((offset + size) > _size)
+ return false;
+
+ memcpy(data, _data + offset, size);
+ return true;
+}
+
SavePartSprite::SavePartSprite(uint32 width, uint32 height, bool trueColor) {
assert((width > 0) && (height > 0));
@@ -329,9 +330,10 @@ bool SavePartSprite::read(Common::ReadStream &stream) {
}
// The sprite's dimensions have to fit
- if (stream.readUint32LE() != _width)
- return false;
- if (stream.readUint32LE() != _height)
+ uint32 width = stream.readUint32LE();
+ uint32 height = stream.readUint32LE();
+
+ if (width*height != _width*_height)
return false;
// If it's in the current format, the true color flag has to be the same too
@@ -378,9 +380,7 @@ bool SavePartSprite::readPalette(const byte *palette) {
bool SavePartSprite::readSprite(const Surface &sprite) {
// The sprite's dimensions have to fit
- if (((uint32)sprite.getWidth()) != _width)
- return false;
- if (((uint32)sprite.getHeight()) != _height)
+ if (((uint32)sprite.getWidth()*sprite.getHeight()) != _width*_height)
return false;
if (_trueColor) {
@@ -420,9 +420,7 @@ bool SavePartSprite::writePalette(byte *palette) const {
bool SavePartSprite::writeSprite(Surface &sprite) const {
// The sprite's dimensions have to fit
- if (((uint32)sprite.getWidth()) != _width)
- return false;
- if (((uint32)sprite.getHeight()) != _height)
+ if (((uint32) sprite.getWidth() * sprite.getHeight()) != _width * _height)
return false;
if (_trueColor) {
diff --git a/engines/gob/save/savefile.h b/engines/gob/save/savefile.h
index 19dd9f92182..8a64897421f 100644
--- a/engines/gob/save/savefile.h
+++ b/engines/gob/save/savefile.h
@@ -138,9 +138,10 @@ public:
bool writeInto(uint32 var, uint32 offset, uint32 size) const;
/** Read size bytes of raw data into the part. */
- bool readFromRaw(const byte *data, uint32 size);
- /** Same, allowing "size" to be smaller than data size of the part */
- bool partialReadFromRaw(const byte *data, uint32 size);
+ bool readFromRaw(const byte *data, uint32 offset, uint32 size);
+
+ /** Write size bytes of the part at the specified offset into a raw buffer. */
+ bool writeIntoRaw(byte *data, uint32 offset, uint32 size) const;
const byte* data() const { return _data; }
diff --git a/engines/gob/save/savehandler.cpp b/engines/gob/save/savehandler.cpp
index 59a8205256d..e5041ccd9f7 100644
--- a/engines/gob/save/savehandler.cpp
+++ b/engines/gob/save/savehandler.cpp
@@ -223,6 +223,16 @@ bool SaveHandler::deleteFile() {
return true;
}
+bool SaveHandler::loadToRaw(byte *ptr, int32 size, int32 offset) {
+ warning("SaveHandler::loadToRaw() not implemented");
+ return false;
+}
+
+bool SaveHandler::saveFromRaw(const byte *ptr, int32 size, int32 offset) {
+ warning("SaveHandler::saveFromRaw() not implemented");
+ return false;
+}
+
TempSpriteHandler::TempSpriteHandler(GobEngine *vm) : SaveHandler(vm) {
_sprite = nullptr;
@@ -315,6 +325,34 @@ bool TempSpriteHandler::create(uint32 width, uint32 height, bool trueColor) {
return true;
}
+bool TempSpriteHandler::loadToRaw(byte *ptr, int32 size, int32 offset) {
+ // Sprite available?
+ if (!_sprite)
+ return false;
+
+ Surface destSprite(1, size, 1);
+
+ // Load the sprite
+ if (!_sprite->writeSprite(destSprite))
+ return false;
+
+ // Copy the sprite to the buffer
+ memcpy(ptr, destSprite.getData(), size);
+
+ return true;
+}
+
+bool TempSpriteHandler::saveFromRaw(const byte *ptr, int32 size, int32 offset) {
+ create(1, size, false);
+
+ if (!_sprite->readSpriteRaw(ptr, size))
+ return false;
+
+ // Assume no palette used
+
+ return true;
+}
+
bool TempSpriteHandler::createFromSprite(int16 dataVar, int32 size, int32 offset) {
return createSprite(dataVar, size, offset) != nullptr;
}
@@ -522,6 +560,30 @@ bool FakeFileHandler::save(int16 dataVar, int32 size, int32 offset) {
return true;
}
+bool FakeFileHandler::loadToRaw(byte *ptr, int32 size, int32 offset) {
+ if (size <= 0)
+ return false;
+
+ if ((uint32)(offset + size) > _data.size())
+ return false;
+
+ memcpy(ptr, &_data[0] + offset, size);
+
+ return true;
+}
+
+bool FakeFileHandler::saveFromRaw(const byte *ptr, int32 size, int32 offset) {
+ if (size <= 0)
+ return false;
+
+ if ((uint32)(offset + size) > _data.size())
+ _data.resize(offset + size);
+
+ memcpy(&_data[0] + offset, ptr, size);
+
+ return true;
+}
+
bool FakeFileHandler::deleteFile() {
_data.clear();
diff --git a/engines/gob/save/savehandler.h b/engines/gob/save/savehandler.h
index 4b25a393ee8..cbb4d5a3d7e 100644
--- a/engines/gob/save/savehandler.h
+++ b/engines/gob/save/savehandler.h
@@ -119,6 +119,9 @@ public:
/** Saves (parts of) the file. */
virtual bool save(int16 dataVar, int32 size, int32 offset) = 0;
+ virtual bool loadToRaw(byte *ptr, int32 size, int32 offset);
+ virtual bool saveFromRaw(const byte *ptr, int32 size, int32 offset);
+
/** Deletes the file. */
virtual bool deleteFile();
@@ -138,6 +141,9 @@ public:
bool load(int16 dataVar, int32 size, int32 offset) override;
bool save(int16 dataVar, int32 size, int32 offset) override;
+ bool loadToRaw(byte *ptr, int32 size, int32 offset) override;
+ bool saveFromRaw(const byte *ptr, int32 size, int32 offset) override;
+
bool create(uint32 width, uint32 height, bool trueColor);
bool createFromSprite(int16 dataVar, int32 size, int32 offset);
@@ -187,6 +193,8 @@ public:
int32 getSize() override;
bool load(int16 dataVar, int32 size, int32 offset) override;
bool save(int16 dataVar, int32 size, int32 offset) override;
+ bool loadToRaw(byte *ptr, int32 size, int32 offset) override;
+ bool saveFromRaw(const byte *ptr, int32 size, int32 offset) override;
bool deleteFile() override;
diff --git a/engines/gob/save/saveload.cpp b/engines/gob/save/saveload.cpp
index e89dce20291..c08bf2ecb71 100644
--- a/engines/gob/save/saveload.cpp
+++ b/engines/gob/save/saveload.cpp
@@ -110,6 +110,81 @@ bool SaveLoad::save(const char *fileName, int16 dataVar, int32 size, int32 offse
return true;
}
+bool SaveLoad::saveFromRaw(const char *fileName, byte *ptr, int32 size, int32 offset){
+ debugC(3, kDebugSaveLoad, "Requested saving of save file \"%s\" - raw %p, %d, %d",
+ fileName, (void*) ptr, size, offset);
+
+ SaveHandler *handler = getHandler(fileName);
+
+ if (!handler) {
+ warning("No save handler for \"%s\" (raw %p, %d, %d)", fileName, (void*) ptr, size, offset);
+ return false;
+ }
+
+ if (!handler->saveFromRaw(ptr, size, offset)) {
+ const char *desc = getDescription(fileName);
+
+ if (!desc)
+ desc = "Unknown";
+
+ warning("Could not save %s (\"%s\" (raw %p, %d, %d))",
+ desc, fileName, (void*) ptr, size, offset);
+ return false;
+ }
+
+ debugC(3, kDebugSaveLoad, "Successfully saved game");
+ return true;
+}
+
+bool SaveLoad::copySaveGame(const char *fileNameSrc, const char *fileNameDest){
+ SaveHandler *handlerSrc = getHandler(fileNameSrc);
+
+ if (!handlerSrc) {
+ warning("copySaveGame: no save handler for source \"%s\" ", fileNameSrc);
+ return false;
+ }
+
+ SaveHandler *handlerDest = getHandler(fileNameDest);
+ if (!handlerDest) {
+ warning("copySaveGame: no save handler for destination \"%s\" ", fileNameDest);
+ return false;
+ }
+
+ int32 size = handlerSrc->getSize();
+ if (size == -1) {
+ warning("copySaveGame: source file \"%s\" does not exists", fileNameSrc);
+ return false;
+ }
+
+ byte *buffer = new byte[size];
+
+ if (!handlerSrc->loadToRaw(buffer, size, 0)) {
+ const char *desc = getDescription(fileNameSrc);
+
+ if (!desc)
+ desc = "Unknown";
+
+ warning("Could not load %s (\"%s\") for copying to %s", desc, fileNameSrc, fileNameDest);
+ delete[] buffer;
+ return false;
+ }
+
+ if (!handlerDest->saveFromRaw(buffer, size, 0)) {
+ const char *desc = getDescription(fileNameDest);
+
+ if (!desc)
+ desc = "Unknown";
+
+ warning("Could not save %s (\"%s\") when copying from %s", desc, fileNameDest, fileNameSrc);
+ delete[] buffer;
+ return false;
+ }
+
+ debugC(3, kDebugSaveLoad, "Successfully copied saved game");
+ delete[] buffer;
+ return true;
+}
+
bool SaveLoad::deleteFile(const char *fileName) {
debugC(3, kDebugSaveLoad, "Requested deletion save file \"%s\"", fileName);
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index c5d2a3cce46..244e18db781 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -59,6 +59,8 @@ public:
bool load(const char *fileName, int16 dataVar, int32 size, int32 offset);
/** Saves size bytes from the variables starting with data dataVar at offset. */
bool save(const char *fileName, int16 dataVar, int32 size, int32 offset);
+ bool saveFromRaw(const char *fileName, byte *ptr, int32 size, int32 offset);
+ bool copySaveGame(const char *fileNameSrc, const char *fileNameDest);
/** Deletes the file. */
bool deleteFile(const char *fileName);
@@ -915,6 +917,8 @@ protected:
int32 getSize() override;
bool load(int16 dataVar, int32 size, int32 offset) override;
bool save(int16 dataVar, int32 size, int32 offset) override;
+ bool loadToRaw(byte *ptr, int32 size, int32 offset) override;
+ bool saveFromRaw(const byte* ptr, int32 size, int32 offset) override;
private:
class File : public SlotFileStatic {
@@ -934,8 +938,13 @@ protected:
int32 getSize() override;
bool load(int16 dataVar, int32 size, int32 offset) override;
bool save(int16 dataVar, int32 size, int32 offset) override;
+ bool loadToRaw(byte *ptr, int32 size, int32 offset) override;
+ bool saveFromRaw(const byte *ptr, int32 size, int32 offset) override;
private:
+ // Save from raw pointer if ptrRaw != nullptr, else save from game variables
+ bool save(const byte *ptrRaw, int16 dataVar, int32 size, int32 offset);
+
class File : public SlotFileStatic {
public:
File(GobEngine *vm, const Common::String &base, const Common::String &ext);
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 97bdb48d2f0..1836f314b54 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -775,6 +775,33 @@ bool SaveLoad_v7::SpriteHandler::save(int16 dataVar, int32 size, int32 offset)
return writer.writePart(0, _sprite);
}
+bool SaveLoad_v7::SpriteHandler::loadToRaw(byte *ptr, int32 size, int32 offset) {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ SaveReader reader(1, 0, fileName);
+ if (!reader.load())
+ return false;
+
+ if (!reader.readPart(0, _sprite))
+ return false;
+
+ return TempSpriteHandler::loadToRaw(ptr, size, offset);
+}
+
+bool SaveLoad_v7::SpriteHandler::saveFromRaw(const byte *ptr, int32 size, int32 offset) {
+ if (!TempSpriteHandler::saveFromRaw(ptr, size, offset))
+ return false;
+
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ SaveWriter writer(1, 0, fileName);
+ return writer.writePart(0, _sprite);
+}
+
SaveLoad_v7::GameFileHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
SlotFileStatic(vm, base, ext) {
}
@@ -842,7 +869,7 @@ bool SaveLoad_v7::GameFileHandler::load(int16 dataVar, int32 size, int32 offset)
return true;
}
-bool SaveLoad_v7::GameFileHandler::save(int16 dataVar, int32 size, int32 offset) {
+bool SaveLoad_v7::GameFileHandler::save(const byte *ptrRaw, int16 dataVar, int32 size, int32 offset) {
Common::String fileName = _file.build();
if (fileName.empty())
return false;
@@ -883,17 +910,65 @@ bool SaveLoad_v7::GameFileHandler::save(int16 dataVar, int32 size, int32 offset)
}
// Copy data from temporary SavePartVars object to the real one
- vars.partialReadFromRaw(vars_from_file.data(), fileSize);
+ vars.readFromRaw(vars_from_file.data(), 0, fileSize);
}
}
SaveWriter writer(1, 0, fileName);
- if (!vars.readFrom((uint16) dataVar, offset, size))
- return false;
+ if (ptrRaw) {
+ // Write data from raw pointer
+ vars.readFromRaw(ptrRaw, offset, size);
+ } else {
+ // Write data from variables
+ if (!vars.readFrom((uint16) dataVar, offset, size))
+ return false;
+ }
return writer.writePart(0, &vars);
}
+bool SaveLoad_v7::GameFileHandler::save(int16 dataVar, int32 size, int32 offset) {
+ return save(nullptr, dataVar, size, offset);
+}
+
+bool SaveLoad_v7::GameFileHandler::loadToRaw(byte *ptr, int32 size, int32 offset) {
+Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ if (size == 0) {
+ uint32 varSize = SaveHandler::getVarSize(_vm);
+ // Indicator to load all variables
+ size = (int32) varSize;
+ }
+
+ int32 fileSize = getSize();
+ if (fileSize < 0)
+ return false;
+
+ SaveReader reader(1, 0, fileName);
+ SavePartVars vars(_vm, fileSize);
+
+ if (!reader.load()) {
+ return false;
+ }
+
+ if (!reader.readPart(0, &vars)) {
+ return false;
+ }
+
+ if (!vars.writeIntoRaw(ptr, offset, size)) {
+ return false;
+ }
+
+ return true;
+}
+
+
+bool SaveLoad_v7::GameFileHandler::saveFromRaw(const byte *ptr, int32 size, int32 offset) {
+ return save(ptr, 0, size, offset);
+}
+
SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
SaveLoad(vm) {
Commit: 6e820968c29994beecd286edb3e8ed16ff3f8c4f
https://github.com/scummvm/scummvm/commit/6e820968c29994beecd286edb3e8ed16ff3f8c4f
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: remove _mapUnknownBool warning
This "unknown bool" is true and used in Adibou2 (although its exact meaning is not clear yet)
Changed paths:
engines/gob/map_v2.cpp
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 432d4eec849..82dbf0ea194 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -86,8 +86,6 @@ void Map_v2::loadMapObjects(const char *avjFile) {
_mapWidth = READ_VARO_UINT8(var + 2);
_mapHeight = READ_VARO_UINT8(var + 3);
_mapUnknownBool = READ_VARO_UINT8(var + 4) ? true : false;
- if (_mapUnknownBool)
- warning("Map_v2::loadMapObjects(): _mapUnknownBool == true");
break;
case 65535:
_passMap = (int8 *)_vm->_inter->_variables->getAddressOff8(var);
Commit: b7349f81953f1a1c24e9165bdf19da7faab0fca3
https://github.com/scummvm/scummvm/commit/b7349f81953f1a1c24e9165bdf19da7faab0fca3
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: more save handlers for Adibou2
"TEMP01.CSA" is actually "weather" file for player1.
The first time, it needs to be copied from "TEMP.CSA" (copy file is now implemented, remove previous workaround)
Changed paths:
engines/gob/inter_playtoons.cpp
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp
index 8d133506eef..437a920a2cf 100644
--- a/engines/gob/inter_playtoons.cpp
+++ b/engines/gob/inter_playtoons.cpp
@@ -477,10 +477,6 @@ Common::String Inter_Playtoons::getFile(const char *path) {
bool Inter_Playtoons::readSprite(Common::String file, int32 dataVar,
int32 size, int32 offset) {
- // WORKAROUND: Adibou copies TEMP.CSA to TEMP01.CSA, which isn't yet implemented
- if (file.equalsIgnoreCase("TEMP01.CSA"))
- file = "TEMP.CSA";
-
bool palette = false;
if (size < -1000) {
palette = true;
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 244e18db781..506fd8e5233 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -961,6 +961,7 @@ protected:
FakeFileHandler *_debilHandler;
GameFileHandler *_configHandler;
GameFileHandler *_adibou2EnvHandler[kChildrenCount];
+ SpriteHandler *_adibou2WeatherHandler[kChildrenCount];
GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
GameFileHandler *_adibou2MemoHandler[kChildrenCount];
GameFileHandler *_adibou2DiploHandler[kChildrenCount];
@@ -977,7 +978,9 @@ protected:
SpriteHandler *_adibou2DrawingMailboxHandler[kChildrenCount];
SpriteHandler *_adibou2CakePhotoHandler[kChildrenCount];
SpriteHandler *_adibou2FlowerPhotoHandler[kChildrenCount];
- SpriteHandler *_adibou2FlowerPhoto2Handler[kChildrenCount];
+ SpriteHandler *_adibou2FlowerInVaseHandler[kChildrenCount];
+ SpriteHandler *_adibou2FadedFlowerInVaseHandler[kChildrenCount];
+ SpriteHandler *_adibou2PosterHandler[kChildrenCount];
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 1836f314b54..a4382563e81 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -48,22 +48,41 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{ "debil.tmp", kSaveModeSave, nullptr, nullptr },
{ "config.inf", kSaveModeSave, nullptr, "configuration"},
// Adibou environment (flowers, vegetables...)
- {"enviro01.inf", kSaveModeSave, nullptr, "environment" }, // Child 01
- {"enviro02.inf", kSaveModeSave, nullptr, "environment" }, // Child 02
- {"enviro03.inf", kSaveModeSave, nullptr, "environment" }, // Child 03
- {"enviro04.inf", kSaveModeSave, nullptr, "environment" }, // Child 04
- {"enviro05.inf", kSaveModeSave, nullptr, "environment" }, // Child 05
- {"enviro06.inf", kSaveModeSave, nullptr, "environment" }, // Child 06
- {"enviro07.inf", kSaveModeSave, nullptr, "environment" }, // Child 07
- {"enviro08.inf", kSaveModeSave, nullptr, "environment" }, // Child 08
- {"enviro09.inf", kSaveModeSave, nullptr, "environment" }, // Child 09
- {"enviro10.inf", kSaveModeSave, nullptr, "environment" }, // Child 10
- {"enviro11.inf", kSaveModeSave, nullptr, "environment" }, // Child 11
- {"enviro12.inf", kSaveModeSave, nullptr, "environment" }, // Child 12
- {"enviro13.inf", kSaveModeSave, nullptr, "environment" }, // Child 13
- {"enviro14.inf", kSaveModeSave, nullptr, "environment" }, // Child 14
- {"enviro15.inf", kSaveModeSave, nullptr, "environment" }, // Child 15
- {"enviro16.inf", kSaveModeSave, nullptr, "environment" }, // Child 16
+ {"enviro01.inf", kSaveModeSave, 0, "environment" }, // Child 01
+ {"enviro02.inf", kSaveModeSave, 0, "environment" }, // Child 02
+ {"enviro03.inf", kSaveModeSave, 0, "environment" }, // Child 03
+ {"enviro04.inf", kSaveModeSave, 0, "environment" }, // Child 04
+ {"enviro05.inf", kSaveModeSave, 0, "environment" }, // Child 05
+ {"enviro06.inf", kSaveModeSave, 0, "environment" }, // Child 06
+ {"enviro07.inf", kSaveModeSave, 0, "environment" }, // Child 07
+ {"enviro08.inf", kSaveModeSave, 0, "environment" }, // Child 08
+ {"enviro09.inf", kSaveModeSave, 0, "environment" }, // Child 09
+ {"enviro10.inf", kSaveModeSave, 0, "environment" }, // Child 10
+ {"enviro11.inf", kSaveModeSave, 0, "environment" }, // Child 11
+ {"enviro12.inf", kSaveModeSave, 0, "environment" }, // Child 12
+ {"enviro13.inf", kSaveModeSave, 0, "environment" }, // Child 13
+ {"enviro14.inf", kSaveModeSave, 0, "environment" }, // Child 14
+ {"enviro15.inf", kSaveModeSave, 0, "environment" }, // Child 15
+ {"enviro16.inf", kSaveModeSave, 0, "environment" }, // Child 16
+
+ // Adibou environment weather
+ {"temp01.csa" , kSaveModeSave, 0, "weather" },
+ {"temp02.csa" , kSaveModeSave, 0, "weather" },
+ {"temp03.csa" , kSaveModeSave, 0, "weather" },
+ {"temp04.csa" , kSaveModeSave, 0, "weather" },
+ {"temp05.csa" , kSaveModeSave, 0, "weather" },
+ {"temp06.csa" , kSaveModeSave, 0, "weather" },
+ {"temp07.csa" , kSaveModeSave, 0, "weather" },
+ {"temp08.csa" , kSaveModeSave, 0, "weather" },
+ {"temp09.csa" , kSaveModeSave, 0, "weather" },
+ {"temp10.csa" , kSaveModeSave, 0, "weather" },
+ {"temp11.csa" , kSaveModeSave, 0, "weather" },
+ {"temp12.csa" , kSaveModeSave, 0, "weather" },
+ {"temp13.csa" , kSaveModeSave, 0, "weather" },
+ {"temp14.csa" , kSaveModeSave, 0, "weather" },
+ {"temp15.csa" , kSaveModeSave, 0, "weather" },
+ {"temp16.csa" , kSaveModeSave, 0, "weather" },
+
// Adibou Applications 1-5
{"Gsa01_01.inf", kSaveModeSave, 0, "app progress" }, // Child 01
{"Gsa02_01.inf", kSaveModeSave, 0, "app progress" },
@@ -229,8 +248,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett01.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr01.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod01.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur01.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud01.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur01.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur01.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud01.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable01.inf", kSaveModeSave, 0, "poster" },
// Child2
{"cart0102.inf", kSaveModeSave, 0, "drawing" },
{"cart0202.inf", kSaveModeSave, 0, "drawing" },
@@ -259,8 +280,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett02.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr02.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod02.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur02.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud02.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur02.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur02.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud02.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable02.inf", kSaveModeSave, 0, "poster" },
// Child3
{"cart0103.inf", kSaveModeSave, 0, "drawing" },
{"cart0203.inf", kSaveModeSave, 0, "drawing" },
@@ -289,8 +312,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett03.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr03.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod03.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur03.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud03.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur03.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur03.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud03.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable03.inf", kSaveModeSave, 0, "poster" },
// Child4
{"cart0104.inf", kSaveModeSave, 0, "drawing" },
{"cart0204.inf", kSaveModeSave, 0, "drawing" },
@@ -319,8 +344,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett04.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr04.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod04.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur04.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud04.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur04.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur04.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud04.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable04.inf", kSaveModeSave, 0, "poster" },
// Child5
{"cart0105.inf", kSaveModeSave, 0, "drawing" },
{"cart0205.inf", kSaveModeSave, 0, "drawing" },
@@ -349,8 +376,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett05.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr05.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod05.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur05.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud05.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur05.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur05.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud05.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable05.inf", kSaveModeSave, 0, "poster" },
// Child6
{"cart0106.inf", kSaveModeSave, 0, "drawing" },
{"cart0206.inf", kSaveModeSave, 0, "drawing" },
@@ -379,8 +408,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett06.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr06.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod06.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur06.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud06.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur06.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur06.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud06.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable06.inf", kSaveModeSave, 0, "poster" },
// Child7
{"cart0107.inf", kSaveModeSave, 0, "drawing" },
{"cart0207.inf", kSaveModeSave, 0, "drawing" },
@@ -409,8 +440,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett07.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr07.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod07.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur07.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud07.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur07.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur07.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud07.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable07.inf", kSaveModeSave, 0, "poster" },
// Child8
{"cart0108.inf", kSaveModeSave, 0, "drawing" },
{"cart0208.inf", kSaveModeSave, 0, "drawing" },
@@ -439,8 +472,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett08.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr08.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod08.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur08.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud08.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur08.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur08.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud08.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable08.inf", kSaveModeSave, 0, "poster" },
// Child9
{"cart0109.inf", kSaveModeSave, 0, "drawing" },
{"cart0209.inf", kSaveModeSave, 0, "drawing" },
@@ -469,8 +504,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett09.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr09.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod09.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur09.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud09.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur09.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur09.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud09.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable09.inf", kSaveModeSave, 0, "poster" },
// Child10
{"cart0110.inf", kSaveModeSave, 0, "drawing" },
{"cart0210.inf", kSaveModeSave, 0, "drawing" },
@@ -499,8 +536,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett10.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr10.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod10.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur10.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud10.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur10.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur10.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud10.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable10.inf", kSaveModeSave, 0, "poster" },
// Child11
{"cart0111.inf", kSaveModeSave, 0, "drawing" },
{"cart0211.inf", kSaveModeSave, 0, "drawing" },
@@ -529,8 +568,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett11.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr11.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod11.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur11.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud11.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur11.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur11.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud11.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable11.inf", kSaveModeSave, 0, "poster" },
// Child12
{"cart0112.inf", kSaveModeSave, 0, "drawing" },
{"cart0212.inf", kSaveModeSave, 0, "drawing" },
@@ -559,8 +600,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett12.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr12.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod12.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur12.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud12.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur12.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur12.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud12.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable12.inf", kSaveModeSave, 0, "poster" },
// Child13
{"cart0113.inf", kSaveModeSave, 0, "drawing" },
{"cart0213.inf", kSaveModeSave, 0, "drawing" },
@@ -589,8 +632,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett13.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr13.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod13.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur13.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud13.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur13.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable13.inf", kSaveModeSave, 0, "poster" },
{"pal12_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal13_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
// Child14
@@ -621,8 +666,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett14.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr14.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod14.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur14.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud14.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur14.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable14.inf", kSaveModeSave, 0, "poster" },
{"pal12_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal13_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal14_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
@@ -654,8 +701,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett15.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr15.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod15.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur15.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud15.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur15.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable15.inf", kSaveModeSave, 0, "poster" },
{"pal12_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal13_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
{"pal14_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
@@ -688,8 +737,10 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"palett16.inf", kSaveModeSave, 0, "drawing palette" },
{"plettr16.inf", kSaveModeSave, 0, "drawing in mailbox" },
{"pgatod16.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur16.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleud16.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"pfleur16.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"mfleur16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mfleud16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"mtable16.inf", kSaveModeSave, 0, "poster" },
// Addy 4 Base
@@ -984,9 +1035,18 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
_saveFiles[index++].handler = _configHandler = new GameFileHandler(_vm, targetName, "cfg");
for (uint32 i = 0; i < kChildrenCount; i++)
+ {
_saveFiles[index++].handler = _adibou2EnvHandler[i] = new GameFileHandler(_vm,
targetName,
Common::String::format("env%02d", i + 1));
+ }
+
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ {
+ _saveFiles[index++].handler = _adibou2WeatherHandler[i] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("weather_%02d", i + 1));
+ }
for (uint32 i = 0; i < kChildrenCount; i++)
{
@@ -1047,9 +1107,17 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
targetName,
Common::String::format("photo_flower_%02d", i + 1));
- _saveFiles[index++].handler = _adibou2FlowerPhoto2Handler[i] = new SpriteHandler(_vm,
- targetName,
- Common::String::format("photo_flower_2_%02d", i + 1));
+ _saveFiles[index++].handler = _adibou2FlowerInVaseHandler[i] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("photo_flower_vase_%02d", i + 1));
+
+ _saveFiles[index++].handler = _adibou2FadedFlowerInVaseHandler[i] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("photo_flower_vase_2_%02d", i + 1));
+
+ _saveFiles[index++].handler = _adibou2PosterHandler[i] = new SpriteHandler(_vm,
+ targetName,
+ Common::String::format("poster_%02d", i + 1));
}
for (int i = 0; i < 2; i++)
@@ -1073,6 +1141,7 @@ SaveLoad_v7::~SaveLoad_v7() {
for (uint32 i = 0; i < kChildrenCount; i++)
{
delete _adibou2EnvHandler[i];
+ delete _adibou2WeatherHandler[i];
for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
delete _adibou2AppProgressHandler[i][j];
@@ -1107,6 +1176,11 @@ SaveLoad_v7::~SaveLoad_v7() {
delete _adibou2DrawingPaletteHandler[i];
delete _adibou2DrawingMailboxHandler[i];
+ delete _adibou2CakePhotoHandler[i];
+ delete _adibou2FlowerPhotoHandler[i];
+ delete _adibou2FlowerInVaseHandler[i];
+ delete _adibou2FadedFlowerInVaseHandler[i];
+ delete _adibou2PosterHandler[i];
}
}
Commit: 81d4a437e96bb90b3d6dcff2801793a4a0b44365
https://github.com/scummvm/scummvm/commit/81d4a437e96bb90b3d6dcff2801793a4a0b44365
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: implement deleteFile() for Adibou2 save handlers
Changed paths:
engines/gob/save/savefile.cpp
engines/gob/save/savefile.h
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/savefile.cpp b/engines/gob/save/savefile.cpp
index 897cc6a8895..3a533ac8795 100644
--- a/engines/gob/save/savefile.cpp
+++ b/engines/gob/save/savefile.cpp
@@ -1009,6 +1009,14 @@ bool SaveWriter::save(Common::WriteStream &stream) {
return SaveContainer::write(stream);
}
+bool SaveWriter::deleteFile() {
+ if (_fileName.empty())
+ return false;
+
+ Common::SaveFileManager *saveMan = g_system->getSavefileManager();
+ return saveMan->removeSavefile(_fileName);
+}
+
bool SaveWriter::save() {
Common::OutSaveFile *out = openSave();
diff --git a/engines/gob/save/savefile.h b/engines/gob/save/savefile.h
index 8a64897421f..30ef19a7a03 100644
--- a/engines/gob/save/savefile.h
+++ b/engines/gob/save/savefile.h
@@ -340,6 +340,7 @@ public:
bool writePart(uint32 partN, const SavePart *part);
bool save(Common::WriteStream &stream);
+ bool deleteFile();
protected:
bool save();
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 506fd8e5233..1d241095476 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -919,6 +919,7 @@ protected:
bool save(int16 dataVar, int32 size, int32 offset) override;
bool loadToRaw(byte *ptr, int32 size, int32 offset) override;
bool saveFromRaw(const byte* ptr, int32 size, int32 offset) override;
+ bool deleteFile() override;
private:
class File : public SlotFileStatic {
@@ -940,6 +941,7 @@ protected:
bool save(int16 dataVar, int32 size, int32 offset) override;
bool loadToRaw(byte *ptr, int32 size, int32 offset) override;
bool saveFromRaw(const byte *ptr, int32 size, int32 offset) override;
+ bool deleteFile() override;
private:
// Save from raw pointer if ptrRaw != nullptr, else save from game variables
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index a4382563e81..40602c46867 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -853,6 +853,15 @@ bool SaveLoad_v7::SpriteHandler::saveFromRaw(const byte *ptr, int32 size, int32
return writer.writePart(0, _sprite);
}
+bool SaveLoad_v7::SpriteHandler::deleteFile() {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ SaveWriter writer(1, 0, fileName);
+ return writer.deleteFile();
+}
+
SaveLoad_v7::GameFileHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
SlotFileStatic(vm, base, ext) {
}
@@ -1020,6 +1029,15 @@ bool SaveLoad_v7::GameFileHandler::saveFromRaw(const byte *ptr, int32 size, int3
return save(ptr, 0, size, offset);
}
+bool SaveLoad_v7::GameFileHandler::deleteFile() {
+ Common::String fileName = _file.build();
+ if (fileName.empty())
+ return false;
+
+ SaveWriter writer(1, 0, fileName);
+ return writer.deleteFile();
+}
+
SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
SaveLoad(vm) {
Commit: da923e24c1b191f5b525a054dd7d13f99b2ab33b
https://github.com/scummvm/scummvm/commit/da923e24c1b191f5b525a054dd7d13f99b2ab33b
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: Mult_object field_38 is videofile metadata, equivalent to 'slot' field
Changed paths:
engines/gob/goblin_v7.cpp
engines/gob/inter_v1.cpp
engines/gob/mult.h
engines/gob/scenery.cpp
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index 15828e6137b..28ba7ac2c49 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -34,26 +34,6 @@ namespace Gob {
Goblin_v7::Goblin_v7(GobEngine *vm) : Goblin_v4(vm) {
}
-static void sub_4309D3(Draw *draw, Mult::Mult_Object &obj) {
- if (obj.field_38 != nullptr) {
- Mult::Mult_AnimData animData = *obj.pAnimData;
- draw->freeSprite(50 - animData.animation - 1);
- // sub_473261()
-
- if (obj.field_50)
- obj.field_3C = nullptr;
- else
- obj.field_38[10] = 0;
-
- if (obj.field_38[40] != 0) {
-
- }
- }
-
- obj.field_38 = nullptr;
- obj.animName[0] = '\0';
-}
-
void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
char str[128];
obj->pAnimData->layer &= 3;
@@ -206,6 +186,8 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
}
if (strcmp(str, obj->animName) != 0) {
+ _vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
+ obj->videoSlot = 0;
Common::strlcpy(obj->animName, str, 16);
}
@@ -236,7 +218,8 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
*obj->pPosY = newY + newYCorrection;
obj->pAnimData->frame = 0;
if (var_4 == 0) {
- sub_4309D3(_vm->_draw, *obj);
+ _vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
+ obj->videoSlot = 0;
VideoPlayer::Properties props;
props.x = -1;
@@ -244,21 +227,17 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
props.startFrame = 0;
props.lastFrame = 0;
props.breakKey = 0;
- props.flags = 0x1201;
+ props.flags = 0x1601;
props.palStart = 0;
props.palEnd = 0;
props.sprite = -1;
- Common::strlcpy(obj->animName, str, 16);
- if (obj->videoSlot > 0)
- _vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
-
int slot = _vm->_vidPlayer->openVideo(false, str, props);
obj->videoSlot = slot + 1;
} else {
- if (obj->field_38 == nullptr ||
+ if (obj->videoSlot == 0 ||
strcmp(obj->animName, str) != 0 ||
- obj->field_38[4] & 0x800) {
+ (_vm->_vidPlayer->getFlags(obj->videoSlot - 1) & 0x800)) {
VideoPlayer::Properties props;
props.x = -1;
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 427e7b7b990..b4898981639 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -497,7 +497,7 @@ void Inter_v1::o1_initMult() {
_vm->_mult->_objects[i].pAnimData->isStatic = 1;
_vm->_mult->_objects[i].tick = 0;
_vm->_mult->_objects[i].animName[0] = '\0';
- _vm->_mult->_objects[i].field_38 = 0;
+ _vm->_mult->_objects[i].videoSlot = 0;
_vm->_mult->_objects[i].animVariables = nullptr;
_vm->_mult->_objects[i].field_6E = 0;
_vm->_mult->_objects[i].lastLeft = -1;
diff --git a/engines/gob/mult.h b/engines/gob/mult.h
index d093056b2d8..b738788969b 100644
--- a/engines/gob/mult.h
+++ b/engines/gob/mult.h
@@ -104,9 +104,13 @@ public:
int16 newTop;
int16 newRight;
int16 newBottom;
+ int16 spriteDestLeft;
+ int16 spriteDestTop;
+ int16 spriteDestRight;
+ int16 spriteDestBottom;
uint32 videoSlot;
- int16 field_30;
- uint32* field_38;
+ int16 lastFrameIndex;
+ int16 field_32[3];
byte* field_3C;
char animName[16];
int8 field_50;
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index c21466dc18b..8c31e2aae9e 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -657,22 +657,10 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
int16 sprite_dest_top = 0;
int16 sprite_dest_right = 0;
int16 sprite_dest_bottom = 0;
+ int16 sprite_width = 0;
- if (obj.animVariables && obj.animName[0] != '\0') { // TODO: obj.animVariables hack
- if (!obj.field_38) {
- //warning("updateAnim Adibou2 stub obj.field_38 == nullptr");
- }
-
- if (obj.field_38 != nullptr && obj.field_38[4] & 0x800) {
- warning("updateAnim Adibou2 stub obj.field_38 & 0x800 != 0");
- }
-
- // if (obj.field4F == 0)
- if (frame != obj.field_30) {
- if (obj.field_38 != nullptr && obj.field_38[4] & 0x800) {
- warning("updateAnim Adibou2 stub obj.field_38 & 0x800 != 0 (2)");
- }
-
+ if (obj.animName[0] != '\0' && obj.animVariables) {
+ if (obj.videoSlot == 0) {
VideoPlayer::Properties props;
props.x = 0;
props.y = 0;
@@ -684,17 +672,138 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
props.palEnd = 0;
props.sprite = -1;
- _vm->_vidPlayer->openVideo(false, obj.animName, props);
- if (obj.field_38 != nullptr && obj.field_38[4] & 0x8000) {
- warning("updateAnim Adibou2 stub obj.field_38 & 0x8000 != 0");
+ int slot = _vm->_vidPlayer->openVideo(false, obj.animName, props);
+ obj.videoSlot = slot + 1;
+ }
+
+ if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800) {
+ if (doDraw) {
+ if (frame == (int32) _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1 &&
+ (int16) *obj.pPosX >= _animLeft &&
+ (int16) *obj.pPosX <= _animTop) {
+ if ((int16) *obj.pPosY + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) <= _animBottom
+ && !(flags & 0x4)) {
+
+ if (frame != obj.lastFrameIndex) {
+ //_vm->_vidPlayer->setXY();
+ VideoPlayer::Properties props;
+ props.x = *obj.pPosX;
+ props.y = *obj.pPosY;
+ props.startFrame = 0;
+ props.lastFrame = 0;
+ props.breakKey = 0;
+ props.flags = 0;
+ props.palStart = 0;
+ props.palEnd = 0;
+ props.sprite = -obj.pAnimData->animation - 1;
+
+ if (obj.videoSlot > 0)
+ _vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
+
+ int slot = _vm->_vidPlayer->openVideo(false, obj.animName, props);
+ obj.videoSlot = slot + 1;
+
+ sprite_dest_left = obj.spriteDestLeft;
+ sprite_dest_top = obj.spriteDestTop;
+ sprite_dest_right = obj.spriteDestRight;
+ sprite_dest_bottom = obj.spriteDestBottom;
+
+ if (flags & 0x2) {
+ clipInRect(_vm->_mult->_animLeft,
+ _vm->_mult->_animTop,
+ _vm->_mult->_animWidth,
+ _vm->_mult->_animHeight,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+ }
+ } else if (flags & 4) {
+ clipInRect(_toRedrawLeft,
+ _toRedrawTop,
+ _toRedrawRight - _toRedrawLeft + 1,
+ _toRedrawBottom - _toRedrawTop + 1,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+ } else {
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ }
+
+ if (!(flags & 4)) {
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ }
+ }
+ }
}
- else if (obj.field_38 != nullptr) {
- sprite_dest_left = *obj.pPosX ;
- sprite_dest_top = *obj.pPosY;
- sprite_dest_right = sprite_dest_left + obj.field_38[5] - 1;
- sprite_dest_bottom = sprite_dest_top + obj.field_38[6] - 1;
+ else {
+ if (frame != (int16) _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1) {
+ //getFrameCoords
+ }
+
+ sprite_dest_left = obj.spriteDestLeft;
+ sprite_dest_top = obj.spriteDestTop;
+ sprite_dest_right = obj.spriteDestRight;
+ sprite_dest_bottom = obj.spriteDestBottom;
}
}
+
+ // if (obj.field4F == 0)
+ if (frame != obj.lastFrameIndex) {
+ if ((obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800) ||
+ doDraw) {
+ if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800)
+ warning("updateAnim Adibou2 stub obj.field_38 & 0x800 != 0");
+
+ VideoPlayer::Properties props;
+ props.x = 0;
+ props.y = 0;
+ props.startFrame = 0;
+ props.lastFrame = 0;
+ props.breakKey = 0;
+ props.flags = 0;
+ props.palStart = 0;
+ props.palEnd = 0;
+ props.sprite = -obj.pAnimData->animation - 1;
+
+ if (obj.videoSlot > 0)
+ _vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
+
+ int slot = _vm->_vidPlayer->openVideo(false, obj.animName, props);
+ obj.videoSlot = slot + 1;
+ }
+ }
+
+ if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x8000) {
+ deltaX = obj.spriteDestLeft;
+ deltaY = obj.spriteDestTop;
+ sprite_dest_left = *obj.pPosX + deltaX;
+ sprite_dest_top = *obj.pPosY + deltaY;
+ sprite_width = obj.spriteDestRight- obj.spriteDestLeft + 1;
+ if (layer & 0x80) {
+ sprite_dest_left = *obj.pPosX + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - deltaX - sprite_width;
+ }
+ }
+ else {
+ sprite_dest_left = *obj.pPosX ;
+ sprite_dest_top = *obj.pPosY;
+ sprite_dest_right = sprite_dest_left + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - 1;
+ sprite_dest_bottom = sprite_dest_top + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) - 1;
+ }
+
} else {
auto &sprite = _vm->_draw->_spritesArray[50 - animation - 1];
if (sprite == nullptr)
@@ -946,8 +1055,8 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
return;
_vm->_game->capturePush(_toRedrawLeft, _toRedrawTop,
- _toRedrawRight - _toRedrawLeft + 1,
- _toRedrawBottom - _toRedrawTop + 1);
+ _toRedrawRight - _toRedrawLeft + 1,
+ _toRedrawBottom - _toRedrawTop + 1);
*_pCaptureCounter = *_pCaptureCounter + 1;
}
@@ -963,9 +1072,9 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
_toRedrawLeft = MAX(_toRedrawLeft, _vm->_mult->_animLeft);
_toRedrawTop = MAX(_toRedrawTop, _vm->_mult->_animTop);
_toRedrawRight = MIN(_toRedrawRight,
- (int16)(_vm->_mult->_animLeft + _vm->_mult->_animWidth - 1));
+ (int16)(_vm->_mult->_animLeft + _vm->_mult->_animWidth - 1));
_toRedrawBottom = MIN(_toRedrawBottom,
- (int16)(_vm->_mult->_animTop + _vm->_mult->_animHeight - 1));
+ (int16)(_vm->_mult->_animTop + _vm->_mult->_animHeight - 1));
} else
_toRedrawLeft = -12345;
@@ -1028,9 +1137,9 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
}
if ((left <= right) && ((destX + right - left) >=
- (_vm->_mult->_animLeft + _vm->_mult->_animWidth)))
+ (_vm->_mult->_animLeft + _vm->_mult->_animWidth)))
right -= (destX + right - left) -
- (_vm->_mult->_animLeft + _vm->_mult->_animWidth) + 1;
+ (_vm->_mult->_animLeft + _vm->_mult->_animWidth) + 1;
if (destY < _vm->_mult->_animTop) {
top += _vm->_mult->_animTop - destY;
@@ -1038,9 +1147,9 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
}
if ((top <= bottom) && ((destY + bottom - top) >=
- (_vm->_mult->_animTop + _vm->_mult->_animHeight)))
+ (_vm->_mult->_animTop + _vm->_mult->_animHeight)))
bottom -= (destY + bottom - top) -
- (_vm->_mult->_animTop + _vm->_mult->_animHeight) + 1;
+ (_vm->_mult->_animTop + _vm->_mult->_animHeight) + 1;
} else if (flags & 4) {
if (destX < _toRedrawLeft) {
@@ -1065,7 +1174,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
if (doDraw) {
_vm->_draw->_sourceSurface =
- _animPictToSprite[animation * 7 + pictIndex];
+ _animPictToSprite[animation * 7 + pictIndex];
_vm->_draw->_destSurface = Draw::kBackSurface;
_vm->_draw->_spriteLeft = left;
Commit: 1e020bcd042b5ad9671a3efabb18530ceb00b17c
https://github.com/scummvm/scummvm/commit/1e020bcd042b5ad9671a3efabb18530ceb00b17c
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: fix phantom sprites glitches in Adibou2 vegetables garden
Changed paths:
engines/gob/goblin_v7.cpp
engines/gob/inter_v7.cpp
engines/gob/mult_v2.cpp
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index 28ba7ac2c49..d0247bcc3fc 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -188,6 +188,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
if (strcmp(str, obj->animName) != 0) {
_vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
obj->videoSlot = 0;
+ _vm->_draw->freeSprite(50 - obj->pAnimData->animation - 1);
Common::strlcpy(obj->animName, str, 16);
}
@@ -220,6 +221,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
if (var_4 == 0) {
_vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
obj->videoSlot = 0;
+ _vm->_draw->freeSprite(50 - obj->pAnimData->animation - 1);
VideoPlayer::Properties props;
props.x = -1;
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 8a77a6b4372..97aa1f642f3 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -242,13 +242,15 @@ void Inter_v7::o7_loadMultObject() {
}
if (((int32)*obj.pPosX == -1234) && ((int32)*obj.pPosY == -4321)) {
- if (obj.videoSlot > 0)
+ if (obj.videoSlot > 0) {
_vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
+ obj.videoSlot = 0;
+ _vm->_draw->freeSprite(50 - obj.pAnimData->animation - 1);
+ }
objAnim.isStatic = 1;
obj.animVariables = nullptr;
- obj.videoSlot = 0;
obj.lastLeft = -1;
obj.lastTop = -1;
obj.lastBottom = -1;
@@ -585,7 +587,11 @@ void Inter_v7::o7_playVmdOrMusic() {
_vm->_mult->_objects[props.startFrame].pAnimData->animation = -props.startFrame - 1;
if (_vm->_mult->_objects[props.startFrame].videoSlot > 0)
+ {
_vm->_vidPlayer->closeVideo(_vm->_mult->_objects[props.startFrame].videoSlot - 1);
+ _vm->_mult->_objects[props.startFrame].videoSlot = 0;
+ _vm->_draw->freeSprite(50 - _vm->_mult->_objects[props.startFrame].pAnimData->animation - 1);
+ }
uint32 x = props.x;
uint32 y = props.y;
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 3b427d5c8a8..d7a1109462e 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -783,6 +783,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
if ((animData.animation < 0) && (animObj.videoSlot > 0)) {
_vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
animObj.videoSlot = 0;
+ _vm->_draw->freeSprite(50 - animObj.pAnimData->animation - 1);
}
break;
@@ -796,6 +797,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
if (_vm->_vidPlayer->getFlags(animObj.videoSlot - 1) & 0x1000) {
_vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
animObj.videoSlot = 0;
+ _vm->_draw->freeSprite(50 - animObj.pAnimData->animation - 1);
}
}
Commit: 44c724db550654392828ded92300f38449cca9a1
https://github.com/scummvm/scummvm/commit/44c724db550654392828ded92300f38449cca9a1
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: more video object glitches fixes in Adibou2
Changed paths:
engines/gob/goblin_v7.cpp
engines/gob/inter_v7.cpp
engines/gob/mult.cpp
engines/gob/mult.h
engines/gob/mult_v2.cpp
engines/gob/scenery.cpp
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index d0247bcc3fc..2bdd9618f0a 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -186,9 +186,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
}
if (strcmp(str, obj->animName) != 0) {
- _vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
- obj->videoSlot = 0;
- _vm->_draw->freeSprite(50 - obj->pAnimData->animation - 1);
+ _vm->_mult->closeObjVideo(*obj);
Common::strlcpy(obj->animName, str, 16);
}
@@ -219,9 +217,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
*obj->pPosY = newY + newYCorrection;
obj->pAnimData->frame = 0;
if (var_4 == 0) {
- _vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
- obj->videoSlot = 0;
- _vm->_draw->freeSprite(50 - obj->pAnimData->animation - 1);
+ _vm->_mult->closeObjVideo(*obj);
VideoPlayer::Properties props;
props.x = -1;
@@ -234,8 +230,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
props.palEnd = 0;
props.sprite = -1;
- int slot = _vm->_vidPlayer->openVideo(false, str, props);
- obj->videoSlot = slot + 1;
+ _vm->_mult->openObjVideo(str, props, obj->pAnimData->animation);
} else {
if (obj->videoSlot == 0 ||
strcmp(obj->animName, str) != 0 ||
@@ -252,15 +247,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
props.palEnd = 0;
props.sprite = -1;
- if (obj->videoSlot > 0)
- _vm->_vidPlayer->closeVideo(obj->videoSlot - 1);
-
- int slot = _vm->_vidPlayer->openVideo(false, str, props);
- debugC(1, kDebugVideo, "Playing video \"%s\" (change directions 2) @ %d+%d, frames %d - %d, "
- "paletteCmd %d (%d - %d), flags %X, slot = %d", str,
- props.x, props.y, props.startFrame, props.lastFrame,
- props.palCmd, props.palStart, props.palEnd, props.flags, slot);
- obj->videoSlot = slot + 1;
+ _vm->_mult->openObjVideo(str, props, obj->pAnimData->animation);
}
}
}
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 97aa1f642f3..8cf4e96d85f 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -243,9 +243,7 @@ void Inter_v7::o7_loadMultObject() {
if (((int32)*obj.pPosX == -1234) && ((int32)*obj.pPosY == -4321)) {
if (obj.videoSlot > 0) {
- _vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
- obj.videoSlot = 0;
- _vm->_draw->freeSprite(50 - obj.pAnimData->animation - 1);
+ _vm->_mult->closeObjVideo(obj);
}
objAnim.isStatic = 1;
@@ -576,8 +574,13 @@ void Inter_v7::o7_playVmdOrMusic() {
} else if (props.lastFrame == -3) {
if (file.empty()) {
- _vm->_vidPlayer->closeVideo(_vm->_mult->_objects[props.startFrame].videoSlot - 1);
- _vm->_mult->_objects[props.startFrame].videoSlot = 0;
+ if (props.flags & 0x400) {
+ if (!_vm->_mult->_objects[props.startFrame].pAnimData->isStatic) {
+ if (_vm->_mult->_objects[props.startFrame].videoSlot > 0) {
+ //_vm->_vidPlayer->pauseVideo(_vm->_mult->_objects[props.startFrame].videoSlot - 1, true);
+ }
+ }
+ }
return;
}
@@ -587,18 +590,12 @@ void Inter_v7::o7_playVmdOrMusic() {
_vm->_mult->_objects[props.startFrame].pAnimData->animation = -props.startFrame - 1;
if (_vm->_mult->_objects[props.startFrame].videoSlot > 0)
- {
- _vm->_vidPlayer->closeVideo(_vm->_mult->_objects[props.startFrame].videoSlot - 1);
- _vm->_mult->_objects[props.startFrame].videoSlot = 0;
- _vm->_draw->freeSprite(50 - _vm->_mult->_objects[props.startFrame].pAnimData->animation - 1);
- }
+ _vm->_mult->closeObjVideo(_vm->_mult->_objects[props.startFrame]);
uint32 x = props.x;
uint32 y = props.y;
- int slot = _vm->_vidPlayer->openVideo(false, file, props);
-
- _vm->_mult->_objects[props.startFrame].videoSlot = slot + 1;
+ int slot = _vm->_mult->openObjVideo(file, props, -props.startFrame - 1);
if (x == 0xFFFFFFFF) {
*_vm->_mult->_objects[props.startFrame].pPosX = _vm->_vidPlayer->getDefaultX(slot);
@@ -608,8 +605,6 @@ void Inter_v7::o7_playVmdOrMusic() {
*_vm->_mult->_objects[props.startFrame].pPosY = y;
}
- Common::strlcpy(_vm->_mult->_objects[props.startFrame].animName, file.c_str(), 16);
-
return;
} else if (props.lastFrame == -4) {
warning("Woodruff Stub: Video/Music command -4: Play background video %s", file.c_str());
diff --git a/engines/gob/mult.cpp b/engines/gob/mult.cpp
index bf17da40f8d..16bef33d254 100644
--- a/engines/gob/mult.cpp
+++ b/engines/gob/mult.cpp
@@ -443,6 +443,31 @@ void Mult::doSoundAnim(bool &stop, int16 frame) {
}
}
+int Mult::openObjVideo(const Common::String &file, VideoPlayer::Properties &properties, int animation) {
+ if (animation < 0) {
+ Mult_Object &object = _objects[-animation - 1];
+ if (object.videoSlot > 0)
+ _vm->_vidPlayer->closeVideo(object.videoSlot - 1);
+
+ Common::strlcpy(object.animName, file.c_str(), 16);
+ int slot = _vm->_vidPlayer->openVideo(false, file, properties);
+ object.videoSlot = slot + 1;
+ return slot;
+ }
+
+ return -1;
+}
+
+void Mult::closeObjVideo(Mult_Object &object) {
+ if (object.videoSlot > 0) {
+ _vm->_draw->freeSprite(50 - object.pAnimData->animation - 1);
+
+ _vm->_vidPlayer->closeVideo(object.videoSlot - 1);
+ object.videoSlot = 0;
+ object.animName[0] = 0;
+ }
+}
+
void Mult::clearObjectVideos() {
if (!_objects)
return;
diff --git a/engines/gob/mult.h b/engines/gob/mult.h
index b738788969b..36305b164dd 100644
--- a/engines/gob/mult.h
+++ b/engines/gob/mult.h
@@ -22,6 +22,7 @@
#ifndef GOB_MULT_H
#define GOB_MULT_H
+#include "gob/videoplayer.h"
#include "gob/video.h"
#include "gob/variables.h"
@@ -256,6 +257,8 @@ public:
void playMult(int16 startFrame, int16 endFrame, char checkEscape,
char handleMouse);
+ int openObjVideo(const Common::String &file, VideoPlayer::Properties &properties, int animation);
+ void closeObjVideo(Mult_Object &object);
void clearObjectVideos();
virtual void loadMult(int16 resId) = 0;
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index d7a1109462e..58e50fffb54 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -781,9 +781,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
animData.isStatic = 1;
animData.frame = 0;
if ((animData.animation < 0) && (animObj.videoSlot > 0)) {
- _vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
- animObj.videoSlot = 0;
- _vm->_draw->freeSprite(50 - animObj.pAnimData->animation - 1);
+ closeObjVideo(animObj);
}
break;
@@ -795,9 +793,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
if ((animData.animation < 0) && (animObj.videoSlot > 0)) {
if (_vm->_vidPlayer->getFlags(animObj.videoSlot - 1) & 0x1000) {
- _vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
- animObj.videoSlot = 0;
- _vm->_draw->freeSprite(50 - animObj.pAnimData->animation - 1);
+ closeObjVideo(animObj);
}
}
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index 8c31e2aae9e..c019cf8018f 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -659,7 +659,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
int16 sprite_dest_bottom = 0;
int16 sprite_width = 0;
- if (obj.animName[0] != '\0' && obj.animVariables) {
+ if (obj.animName[0] != '\0') {
if (obj.videoSlot == 0) {
VideoPlayer::Properties props;
props.x = 0;
@@ -672,8 +672,8 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
props.palEnd = 0;
props.sprite = -1;
- int slot = _vm->_vidPlayer->openVideo(false, obj.animName, props);
- obj.videoSlot = slot + 1;
+
+ _vm->_mult->openObjVideo(obj.animName, props, animation);
}
if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800) {
@@ -697,11 +697,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
props.palEnd = 0;
props.sprite = -obj.pAnimData->animation - 1;
- if (obj.videoSlot > 0)
- _vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
-
- int slot = _vm->_vidPlayer->openVideo(false, obj.animName, props);
- obj.videoSlot = slot + 1;
+ _vm->_mult->openObjVideo(obj.animName, props, animation);
sprite_dest_left = obj.spriteDestLeft;
sprite_dest_top = obj.spriteDestTop;
Commit: e67c5be5a559dacf6f44c6ebade477dd3e8be25b
https://github.com/scummvm/scummvm/commit/e67c5be5a559dacf6f44c6ebade477dd3e8be25b
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: fix disappearing sprites issues in Adibou2
Changed paths:
engines/gob/goblin_v7.cpp
engines/gob/inter_v7.cpp
engines/gob/mult_v2.cpp
engines/gob/scenery.cpp
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index 2bdd9618f0a..19dea3c512e 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -228,7 +228,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
props.flags = 0x1601;
props.palStart = 0;
props.palEnd = 0;
- props.sprite = -1;
+ props.sprite = 50 - obj->pAnimData->animation - 1;
_vm->_mult->openObjVideo(str, props, obj->pAnimData->animation);
} else {
@@ -245,7 +245,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
props.flags = 0x1601;
props.palStart = 0;
props.palEnd = 0;
- props.sprite = -1;
+ props.sprite = 50 - obj->pAnimData->animation - 1;
_vm->_mult->openObjVideo(str, props, obj->pAnimData->animation);
}
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 8cf4e96d85f..a2ba75cdcf9 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -585,9 +585,9 @@ void Inter_v7::o7_playVmdOrMusic() {
}
props.flags = VideoPlayer::kFlagOtherSurface;
- props.sprite = -1;
_vm->_mult->_objects[props.startFrame].pAnimData->animation = -props.startFrame - 1;
+ props.sprite = 50 - _vm->_mult->_objects[props.startFrame].pAnimData->animation - 1;
if (_vm->_mult->_objects[props.startFrame].videoSlot > 0)
_vm->_mult->closeObjVideo(_vm->_mult->_objects[props.startFrame]);
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 58e50fffb54..a02c5bd256a 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -793,7 +793,9 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
if ((animData.animation < 0) && (animObj.videoSlot > 0)) {
if (_vm->_vidPlayer->getFlags(animObj.videoSlot - 1) & 0x1000) {
- closeObjVideo(animObj);
+ _vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
+ animObj.videoSlot = 0;
+ animObj.animName[0] = 0;
}
}
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index c019cf8018f..a5a34d30bd5 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -670,7 +670,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
props.flags = 0;
props.palStart = 0;
props.palEnd = 0;
- props.sprite = -1;
+ props.sprite = 50 - obj.pAnimData->animation - 1;
_vm->_mult->openObjVideo(obj.animName, props, animation);
@@ -695,7 +695,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
props.flags = 0;
props.palStart = 0;
props.palEnd = 0;
- props.sprite = -obj.pAnimData->animation - 1;
+ props.sprite = 50 - obj.pAnimData->animation - 1;
_vm->_mult->openObjVideo(obj.animName, props, animation);
@@ -773,7 +773,7 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
props.flags = 0;
props.palStart = 0;
props.palEnd = 0;
- props.sprite = -obj.pAnimData->animation - 1;
+ props.sprite = 50 - obj.pAnimData->animation - 1;
if (obj.videoSlot > 0)
_vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
Commit: 93f29de14f996d4ec8c4c8f996df0e59c68886f4
https://github.com/scummvm/scummvm/commit/93f29de14f996d4ec8c4c8f996df0e59c68886f4
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: close only live sound when getting special video "RIEN" in Adibou2
Instead of closing all *videos*, which messes with open slots and lead to glitches.
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index a2ba75cdcf9..f9e5faf55f6 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -564,7 +564,7 @@ void Inter_v7::o7_playVmdOrMusic() {
props.palCmd, props.palStart, props.palEnd, props.flags);
if (file == "RIEN") {
- _vm->_vidPlayer->closeAll();
+ _vm->_vidPlayer->closeLiveSound();
return;
}
Commit: fa13e43c180b0eb0f648b3a1a9dd6c6a64bbe891
https://github.com/scummvm/scummvm/commit/fa13e43c180b0eb0f648b3a1a9dd6c6a64bbe891
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:27+01:00
Commit Message:
GOB: remove "multiple click protection" from o1_keyFunc in Adibou2
(As already done for Fascination)
Adibou scripts sometimes call functions with a storeMouse() in a row before checking the result, expecting a mouse down from the first processing to be still stored in variables.
E.g.
sub_5257 {
o1_animatePalette();
o1_keyFunc(1);
o1_keyFunc(2);
if (var32_16==1) {
Changed paths:
engines/gob/inter_v1.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index b4898981639..b5ac75934ec 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1234,6 +1234,7 @@ void Inter_v1::o1_keyFunc(OpFuncParams ¶ms) {
switch (cmd) {
case -1:
+ warning("o1_keyFunc: stub for command %d", cmd);
break;
case 0:
@@ -1246,7 +1247,7 @@ void Inter_v1::o1_keyFunc(OpFuncParams ¶ms) {
break;
case 1:
- if (_vm->getGameType() != kGameTypeFascination)
+ if (_vm->getGameType() != kGameTypeFascination && _vm->getGameType() != kGameTypeAdibou2)
_vm->_util->forceMouseUp(true);
key = _vm->_game->checkKeys(&_vm->_global->_inter_mouseX,
&_vm->_global->_inter_mouseY, &_vm->_game->_mouseButtons, 0);
Commit: a31b588ad0594a8132d984953039bc2a3e086b4e
https://github.com/scummvm/scummvm/commit/a31b588ad0594a8132d984953039bc2a3e086b4e
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:28+01:00
Commit Message:
GOB: fix "paint" game in Adibou2
All tools now work correctly, except "text tool" which is still buggy.
Most missing graphical primitives had already stubs in "Inter_Playtoons", implement them there instead of "Inter_v7".
Changed paths:
engines/gob/draw_playtoons.cpp
engines/gob/inter.h
engines/gob/inter_playtoons.cpp
engines/gob/inter_v6.cpp
engines/gob/surface.cpp
engines/gob/surface.h
diff --git a/engines/gob/draw_playtoons.cpp b/engines/gob/draw_playtoons.cpp
index 0a0a4d792b8..8486ddd3ec5 100644
--- a/engines/gob/draw_playtoons.cpp
+++ b/engines/gob/draw_playtoons.cpp
@@ -178,11 +178,17 @@ void Draw_Playtoons::spriteOperation(int16 operation) {
case DRAW_FILLRECT:
switch (_pattern & 0xFF) {
case 1:
- case 2:
case 3:
case 4:
warning("oPlaytoons_spriteOperation: operation DRAW_FILLRECT, pattern %d", _pattern & 0xFF);
break;
+ case 2: {
+ Common::Rect dirtyRect = _spritesArray[_destSurface]->fillAreaAtPoint(destSpriteX,
+ _destSpriteY,
+ _backColor);
+ dirtiedRect(_destSurface, dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
+ break ;
+ }
case 0:
_spritesArray[_destSurface]->fillRect(destSpriteX,
_destSpriteY, _destSpriteX + _spriteRight - 1,
@@ -216,7 +222,6 @@ void Draw_Playtoons::spriteOperation(int16 operation) {
break;
default:
- warning("oPlaytoons_spriteOperation: operation DRAW_DRAWLINE, draw %d lines", (_pattern & 0xFF) * (_pattern & 0xFF));
for (int16 i = 0; i <= _pattern; i++)
for (int16 j = 0; j <= _pattern; j++)
_spritesArray[_destSurface]->drawLine(
@@ -235,11 +240,8 @@ void Draw_Playtoons::spriteOperation(int16 operation) {
break;
case DRAW_INVALIDATE:
- if ((_pattern & 0xFF) != 0)
- warning("oPlaytoons_spriteOperation: operation DRAW_INVALIDATE, pattern %d", _pattern & 0xFF);
-
_spritesArray[_destSurface]->drawCircle(_destSpriteX,
- _destSpriteY, _spriteRight, _frontColor);
+ _destSpriteY, _spriteRight, _frontColor, _pattern & 0xFF);
dirtiedRect(_destSurface, _destSpriteX - _spriteRight, _destSpriteY - _spriteBottom,
_destSpriteX + _spriteRight, _destSpriteY + _spriteBottom);
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index aca8cec38e8..278435b91f6 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -649,6 +649,8 @@ protected:
void oPlaytoons_F_1B(OpFuncParams ¶ms);
void oPlaytoons_putPixel(OpFuncParams ¶ms);
void oPlaytoons_freeSprite(OpFuncParams ¶ms);
+ void oPlaytoons_drawLine(OpFuncParams ¶ms);
+ void oPlaytoons_invalidate(OpFuncParams ¶ms);
void oPlaytoons_checkData(OpFuncParams ¶ms);
void oPlaytoons_readData(OpFuncParams ¶ms);
diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp
index 437a920a2cf..6ce44bf2611 100644
--- a/engines/gob/inter_playtoons.cpp
+++ b/engines/gob/inter_playtoons.cpp
@@ -86,6 +86,8 @@ void Inter_Playtoons::setupOpcodesFunc() {
OPCODEFUNC(0x1B, oPlaytoons_F_1B);
OPCODEFUNC(0x24, oPlaytoons_putPixel);
OPCODEFUNC(0x27, oPlaytoons_freeSprite);
+ OPCODEFUNC(0x34, oPlaytoons_drawLine);
+ OPCODEFUNC(0x36, oPlaytoons_invalidate);
OPCODEFUNC(0x3F, oPlaytoons_checkData);
OPCODEFUNC(0x4D, oPlaytoons_readData);
}
@@ -209,6 +211,35 @@ void Inter_Playtoons::oPlaytoons_freeSprite(OpFuncParams ¶ms) {
_vm->_draw->freeSprite(index);
}
+void Inter_Playtoons::oPlaytoons_drawLine(OpFuncParams ¶ms) {
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
+
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteBottom = _vm->_game->_script->readValExpr();
+
+ _vm->_game->_script->readExpr(99, 0);
+ //unk_var is always set to 0 in Playtoons
+ _vm->_draw->_frontColor = _vm->_game->_script->getResultInt() & 0xFFFF; // + unk_var;
+ _vm->_draw->_pattern = _vm->_game->_script->getResultInt()>>16;
+ _vm->_draw->spriteOperation(DRAW_DRAWLINE);
+}
+
+void Inter_Playtoons::oPlaytoons_invalidate(OpFuncParams ¶ms) {
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+
+ _vm->_game->_script->readExpr(99, 0);
+ //unk_var is always set to 0 in Playtoons
+ _vm->_draw->_frontColor = _vm->_game->_script->getResultInt() & 0xFFFF; // + unk_var;
+ _vm->_draw->_pattern = _vm->_game->_script->getResultInt()>>16;
+
+ _vm->_draw->spriteOperation(DRAW_INVALIDATE);
+}
+
void Inter_Playtoons::oPlaytoons_checkData(OpFuncParams ¶ms) {
Common::String file = getFile(_vm->_game->_script->evalString());
diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp
index a4d7e439ea1..715d0969111 100644
--- a/engines/gob/inter_v6.cpp
+++ b/engines/gob/inter_v6.cpp
@@ -381,9 +381,6 @@ void Inter_v6::o6_fillRect(OpFuncParams ¶ms) {
_vm->_draw->_backColor = patternColor & 0xFFFF;
_vm->_draw->_pattern = patternColor >> 16;
- if (_vm->_draw->_pattern != 0)
- warning("Urban Stub: o6_fillRect(), _pattern = %d", _vm->_draw->_pattern);
-
if (_vm->_draw->_spriteRight < 0) {
_vm->_draw->_destSpriteX += _vm->_draw->_spriteRight - 1;
_vm->_draw->_spriteRight = -_vm->_draw->_spriteRight + 2;
diff --git a/engines/gob/surface.cpp b/engines/gob/surface.cpp
index f22d0cecd2d..4bc837b601d 100644
--- a/engines/gob/surface.cpp
+++ b/engines/gob/surface.cpp
@@ -26,6 +26,7 @@
#include "common/util.h"
#include "common/frac.h"
#include "common/textconsole.h"
+#include "common/stack.h"
#include "graphics/primitives.h"
#include "graphics/pixelformat.h"
@@ -532,6 +533,44 @@ void Surface::fillRect(int16 left, int16 top, int16 right, int16 bottom, uint32
}
}
+Common::Rect Surface::fillAreaAtPoint(int16 left, int16 top, uint32 color) {
+ Common::Rect modifiedArea;
+ if (left < 0 || left >= _width || top < 0 || top >= _height)
+ // Nothing to do
+ return modifiedArea;
+
+ Pixel pixel = get(left, top);
+ uint32 initialColor = pixel.get();
+ if (initialColor == color)
+ return modifiedArea;
+
+ pixel.set(color);
+ modifiedArea.extend(Common::Rect(left, top, left + 1, top + 1));
+ Common::Stack<Common::Point> pointsToScan;
+ pointsToScan.push(Common::Point(left, top));
+ int16 directions[4] = {1, 0, -1, 0};
+
+ while (!pointsToScan.empty()) {
+ Common::Point point = pointsToScan.pop();
+ for (int i = 0; i < 4; i++) {
+ int16 x = point.x + directions[i];
+ int16 y = point.y + directions[(i + 1) % 4];
+ if (x < 0 || x >= _width || y < 0 || y >= _height)
+ continue;
+
+ Pixel p = get(x, y);
+ if (p.get() == initialColor) {
+ p.set(color);
+ if (!modifiedArea.contains(x, y))
+ modifiedArea.extend(Common::Rect(x, y, x + 1, y + 1));
+ pointsToScan.push(Common::Point(x, y));
+ }
+ }
+ }
+
+ return modifiedArea;
+}
+
void Surface::fill(uint32 color) {
if (_bpp == 1) {
// We can directly use memset
@@ -660,13 +699,21 @@ void Surface::drawCircle(uint16 x0, uint16 y0, uint16 radius, uint32 color, int1
int16 x = 0;
int16 y = radius;
- if (pattern == 0) {
+ switch (pattern) {
+ case 0xFF:
+ fillRect(x0, y0 + radius, x0, y0 - radius, color);
+ fillRect(x0 + radius, y0, x0 - radius, y0, color);
+ break ;
+ case 0:
putPixel(x0, y0 + radius, color);
putPixel(x0, y0 - radius, color);
putPixel(x0 + radius, y0, color);
putPixel(x0 - radius, y0, color);
- } else
- warning("Surface::drawCircle - pattern %d", pattern);
+ break;
+ default:
+ break;
+ }
+
while (x < y) {
if (f >= 0) {
@@ -679,7 +726,8 @@ void Surface::drawCircle(uint16 x0, uint16 y0, uint16 radius, uint32 color, int1
f += ddFx + 1;
switch (pattern) {
- case -1:
+ case 0xFF:
+ // Fill circle
fillRect(x0 - y, y0 + x, x0 + y, y0 + x, color);
fillRect(x0 - x, y0 + y, x0 + x, y0 + y, color);
fillRect(x0 - y, y0 - x, x0 + y, y0 - x, color);
diff --git a/engines/gob/surface.h b/engines/gob/surface.h
index 6cd9be7d57b..c241dbbcc7d 100644
--- a/engines/gob/surface.h
+++ b/engines/gob/surface.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "common/ptr.h"
#include "common/rational.h"
+#include "common/rect.h"
namespace Common {
class SeekableReadStream;
@@ -121,6 +122,7 @@ public:
void blitScaled(const Surface &from, Common::Rational scale, int32 transp = -1);
void fillRect(int16 left, int16 top, int16 right, int16 bottom, uint32 color);
+ Common::Rect fillAreaAtPoint(int16 left, int16 top, uint32 color);
void fill(uint32 color);
void clear();
Commit: 962e9f9386bb7d97fcbdb1f1eefca8063342c4a5
https://github.com/scummvm/scummvm/commit/962e9f9386bb7d97fcbdb1f1eefca8063342c4a5
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:28+01:00
Commit Message:
GOB: save breakout game progress in Adibou2
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 1d241095476..50735363941 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -964,6 +964,7 @@ protected:
GameFileHandler *_configHandler;
GameFileHandler *_adibou2EnvHandler[kChildrenCount];
SpriteHandler *_adibou2WeatherHandler[kChildrenCount];
+ GameFileHandler *_adibou2BreakoutGameProgressHandler[kChildrenCount];
GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
GameFileHandler *_adibou2MemoHandler[kChildrenCount];
GameFileHandler *_adibou2DiploHandler[kChildrenCount];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 40602c46867..ff39698d514 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -83,6 +83,24 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"temp15.csa" , kSaveModeSave, 0, "weather" },
{"temp16.csa" , kSaveModeSave, 0, "weather" },
+ // Adibou brekout game progress
+ {"brique01.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique02.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique03.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique04.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique05.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique06.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique07.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique08.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique09.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique10.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique11.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique12.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique13.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique14.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique15.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"brique16.inf" , kSaveModeSave, 0, "breakout game progress" },
+
// Adibou Applications 1-5
{"Gsa01_01.inf", kSaveModeSave, 0, "app progress" }, // Child 01
{"Gsa02_01.inf", kSaveModeSave, 0, "app progress" },
@@ -1066,6 +1084,13 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
Common::String::format("weather_%02d", i + 1));
}
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ {
+ _saveFiles[index++].handler = _adibou2BreakoutGameProgressHandler[i] = new GameFileHandler(_vm,
+ targetName,
+ Common::String::format("breakout_%02d", i + 1));
+ }
+
for (uint32 i = 0; i < kChildrenCount; i++)
{
for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
@@ -1160,6 +1185,7 @@ SaveLoad_v7::~SaveLoad_v7() {
{
delete _adibou2EnvHandler[i];
delete _adibou2WeatherHandler[i];
+ delete _adibou2BreakoutGameProgressHandler[i];
for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
delete _adibou2AppProgressHandler[i][j];
Commit: 97a66c329e759c345589dd986571d09c8b095c17
https://github.com/scummvm/scummvm/commit/97a66c329e759c345589dd986571d09c8b095c17
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:28+01:00
Commit Message:
GOB: yet more int16->uint16 changes, to accommodate for Playtoons/Adibou2 larger variable space
This makes the Playtoons-like minigame in Adibou2 playable (with glitches).
Changed paths:
engines/gob/expression.cpp
engines/gob/expression.h
engines/gob/inter_v2.cpp
engines/gob/inter_v5.cpp
engines/gob/script.cpp
engines/gob/script.h
engines/gob/videoplayer.cpp
engines/gob/videoplayer.h
diff --git a/engines/gob/expression.cpp b/engines/gob/expression.cpp
index dd1f9dcca7b..7d065af7818 100644
--- a/engines/gob/expression.cpp
+++ b/engines/gob/expression.cpp
@@ -575,7 +575,7 @@ bool Expression::getVarBase(uint32 &varBase, bool mindStop,
return false;
}
-int16 Expression::parseVarIndex(uint16 *size, uint16 *type) {
+uint16 Expression::parseVarIndex(uint16 *size, uint16 *type) {
int16 temp2;
byte *arrDesc;
int16 dim;
diff --git a/engines/gob/expression.h b/engines/gob/expression.h
index 8e4d2623c27..67a55194254 100644
--- a/engines/gob/expression.h
+++ b/engines/gob/expression.h
@@ -114,7 +114,7 @@ public:
void printExpr(char stopToken);
void printVarIndex();
- int16 parseVarIndex(uint16 *size = 0, uint16 *type = 0);
+ uint16 parseVarIndex(uint16 *size = 0, uint16 *type = 0);
int16 parseValExpr(byte stopToken = 99);
int16 parseExpr(byte stopToken, byte *type);
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index c9c109540d6..24965d04edb 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -616,7 +616,7 @@ void Inter_v2::o2_pushVars() {
void Inter_v2::o2_popVars() {
uint8 count = _vm->_game->_script->readByte();
for (int i = 0; i < count; i++) {
- int16 varOff = _vm->_game->_script->readVarIndex();
+ uint16 varOff = _vm->_game->_script->readVarIndex();
_varStack.pop(*_variables, varOff);
}
@@ -977,11 +977,11 @@ void Inter_v2::o2_playImd() {
void Inter_v2::o2_getImdInfo() {
Common::String imd = _vm->_game->_script->evalString();
- int16 varX = _vm->_game->_script->readVarIndex();
- int16 varY = _vm->_game->_script->readVarIndex();
- int16 varFrames = _vm->_game->_script->readVarIndex();
- int16 varWidth = _vm->_game->_script->readVarIndex();
- int16 varHeight = _vm->_game->_script->readVarIndex();
+ uint16 varX = _vm->_game->_script->readVarIndex();
+ uint16 varY = _vm->_game->_script->readVarIndex();
+ uint16 varFrames = _vm->_game->_script->readVarIndex();
+ uint16 varWidth = _vm->_game->_script->readVarIndex();
+ uint16 varHeight = _vm->_game->_script->readVarIndex();
// WORKAROUND: The nut rolling animation in the administration center
// in Woodruff is called "noixroul", but the scripts think it's "noixroule".
diff --git a/engines/gob/inter_v5.cpp b/engines/gob/inter_v5.cpp
index 8138b6c2c42..380b341090c 100644
--- a/engines/gob/inter_v5.cpp
+++ b/engines/gob/inter_v5.cpp
@@ -214,7 +214,7 @@ void Inter_v5::o5_initScreen() {
}
void Inter_v5::o5_istrlen(OpFuncParams ¶ms) {
- int16 strVar1, strVar2;
+ uint16 strVar1, strVar2;
int16 len;
uint16 type;
diff --git a/engines/gob/script.cpp b/engines/gob/script.cpp
index 572b4c999c5..6edd60f8ca0 100644
--- a/engines/gob/script.cpp
+++ b/engines/gob/script.cpp
@@ -261,7 +261,7 @@ char *Script::peekString(int32 offset) {
return (char *)(_totPtr + offset);
}
-int16 Script::readVarIndex(uint16 *size, uint16 *type) {
+uint16 Script::readVarIndex(uint16 *size, uint16 *type) {
return _expression->parseVarIndex(size, type);
}
diff --git a/engines/gob/script.h b/engines/gob/script.h
index 901f1b22288..04954547efb 100644
--- a/engines/gob/script.h
+++ b/engines/gob/script.h
@@ -74,7 +74,7 @@ public:
char *peekString(int32 offset = 0);
// Expression parsing functions
- int16 readVarIndex(uint16 *size = 0, uint16 *type = 0);
+ uint16 readVarIndex(uint16 *size = 0, uint16 *type = 0);
int16 readValExpr(byte stopToken = 99);
int16 readExpr(byte stopToken, byte *type);
void skipExpr(char stopToken);
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index 0f31971b183..ec6291995ad 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -694,8 +694,8 @@ int32 VideoPlayer::getSubtitleIndex(int slot) const {
return video->decoder->getSubtitleIndex();
}
-void VideoPlayer::writeVideoInfo(const Common::String &file, int16 varX, int16 varY,
- int16 varFrames, int16 varWidth, int16 varHeight) {
+void VideoPlayer::writeVideoInfo(const Common::String &file, uint16 varX, uint16 varY,
+ uint16 varFrames, uint16 varWidth, uint16 varHeight) {
Properties properties;
diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h
index 9fb1807faea..496b2ca5c70 100644
--- a/engines/gob/videoplayer.h
+++ b/engines/gob/videoplayer.h
@@ -148,8 +148,8 @@ public:
int32 getSubtitleIndex(int slot = 0) const;
- void writeVideoInfo(const Common::String &file, int16 varX, int16 varY,
- int16 varFrames, int16 varWidth, int16 varHeight);
+ void writeVideoInfo(const Common::String &file, uint16 varX, uint16 varY,
+ uint16 varFrames, uint16 varWidth, uint16 varHeight);
bool copyFrame(int slot, Surface &dest,
uint16 left, uint16 top, uint16 width, uint16 height, uint16 x, uint16 y,
Commit: 601dd605d8ee2aac118b70e72f3175584d15e869
https://github.com/scummvm/scummvm/commit/601dd605d8ee2aac118b70e72f3175584d15e869
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:28+01:00
Commit Message:
GOB: handle remaining Adibou2 characters animations
EFR : scared
PAR : talk
PAU : pause
RIR : laugh
Changed paths:
engines/gob/goblin_v7.cpp
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index 19dea3c512e..df89921428f 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -104,6 +104,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
case 34:
case 35:
case 36:
+ case 37:
animState -= 10;
break;
default: // 3, 7, 9-30, > 36
@@ -162,24 +163,86 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
case 21:
Common::strlcat(str, "COG", 128);
break;
- case 22:
- warning("Goblin_v7::setGoblinState: animState == 22 not implemented");
+ case 22:{
+ uint animIndex = _vm->_rnd.getRandomNumber(1);
+ switch (animIndex) {
+ case 0:
+ Common::strlcat(str, "EFR", 128); // scared (EFFRAYE)
+ break;
+ case 1:
+ Common::strlcat(str, "EF1", 128);
+ break;
+ default:
+ break;
+ }
+
break;
+ }
case 23:
Common::strlcat(str, "EXP", 128);
break;
case 24:
Common::strlcat(str, "FRA", 128);
break;
- case 25:
- warning("Goblin_v7::setGoblinState: animState == 25 not implemented");
+ case 25: {
+ uint animIndex = _vm->_rnd.getRandomNumber(3);
+ switch (animIndex) {
+ case 0:
+ Common::strlcat(str, "PAR", 128); // talking (PARLE)
+ break;
+ case 1:
+ Common::strlcat(str, "PA1", 128);
+ break;
+ case 2:
+ Common::strlcat(str, "PA2", 128);
+ break;
+ case 3:
+ Common::strlcat(str, "PA3", 128);
+ break;
+ default:
+ break;
+ }
+
break;
- case 26:
- warning("Goblin_v7::setGoblinState: animState == 26 not implemented");
+ }
+
+
+ case 26: {
+ uint animIndex = _vm->_rnd.getRandomNumber(3);
+ switch (animIndex) {
+ case 0:
+ Common::strlcat(str, "PAU", 128); // taking a break (PAUSE)
+ break;
+ case 1:
+ Common::strlcat(str, "P1", 128);
+ break;
+ case 2:
+ Common::strlcat(str, "P2", 128);
+ break;
+ case 3:
+ Common::strlcat(str, "P3", 128);
+ break;
+ default:
+ break;
+ }
+
break;
- case 27:
- warning("Goblin_v7::setGoblinState: animState == 27 not implemented");
+ }
+ case 27: {
+ uint animIndex = _vm->_rnd.getRandomNumber(1);
+ switch (animIndex) {
+ case 0:
+ Common::strlcat(str, "RIR", 128); // laughing (RIRE)
+ break;
+ case 1:
+ Common::strlcat(str, "RI1", 128);
+ break;
+ default:
+ break;
+ }
+
break;
+ }
default:
Common::strlcat(str, Common::String::format("%02d", animState).c_str(), 128);
Commit: e3e6c769239369518da3f387b246b0478fbd0743
https://github.com/scummvm/scummvm/commit/e3e6c769239369518da3f387b246b0478fbd0743
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:28+01:00
Commit Message:
GOB: handle saves for Adibou2 construction minigame
A few int16->utin16 were needed again.
Changed paths:
engines/gob/inter.h
engines/gob/inter_playtoons.cpp
engines/gob/inter_v7.cpp
engines/gob/save/savehandler.cpp
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 278435b91f6..2a25d775dd6 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -705,6 +705,7 @@ protected:
void o7_getDBString();
void o7_readData(OpFuncParams ¶ms);
+ void o7_writeData(OpFuncParams ¶ms);
void o7_oemToANSI(OpGobParams ¶ms);
void o7_gob0x201(OpGobParams ¶ms);
diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp
index 6ce44bf2611..517d24641c6 100644
--- a/engines/gob/inter_playtoons.cpp
+++ b/engines/gob/inter_playtoons.cpp
@@ -498,11 +498,21 @@ Common::String Inter_Playtoons::getFile(const char *path) {
if (backslash)
path = backslash + 1;
- if (orig != path)
+
+ Common::String newPath = path;
+ // Comma in filenames tells this engine that the file handle may be reused for next read/write operations
+ // E.g. myfile,0 will keep the file handle for "myfile".
+ // If later we request file I/O for "myfile,1" the file handle will be reused.
+ // It seems that we can just ignore this, as the seek position of the handle is reset anyway.
+ uint32 commaPos = newPath.find(',');
+ if (commaPos != Common::String::npos)
+ newPath = newPath.substr(0, commaPos);
+
+ if (orig != newPath)
debugC(2, kDebugFileIO, "Inter_Playtoons::getFile(): Evaluating path"
"\"%s\" to \"%s\"", orig, path);
- return path;
+ return newPath;
}
bool Inter_Playtoons::readSprite(Common::String file, int32 dataVar,
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index f9e5faf55f6..de540d559e2 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -21,11 +21,14 @@
#include "common/endian.h"
#include "common/archive.h"
+#include "common/translation.h"
#include "common/winexe_pe.h"
#include "graphics/cursorman.h"
#include "graphics/wincursor.h"
+#include "gui/message.h"
+
#include "image/iff.h"
#include "gob/gob.h"
@@ -88,6 +91,7 @@ void Inter_v7::setupOpcodesDraw() {
void Inter_v7::setupOpcodesFunc() {
Inter_Playtoons::setupOpcodesFunc();
OPCODEFUNC(0x4D, o7_readData);
+ OPCODEFUNC(0x4E, o7_writeData);
}
void Inter_v7::setupOpcodesGob() {
@@ -1041,6 +1045,36 @@ void Inter_v7::o7_readData(OpFuncParams ¶ms) {
delete stream;
}
+void Inter_v7::o7_writeData(OpFuncParams ¶ms) {
+ Common::String file = getFile(_vm->_game->_script->evalString());
+
+ int16 dataVar = _vm->_game->_script->readVarIndex();
+ int32 size = _vm->_game->_script->readValExpr();
+ int32 offset = _vm->_game->_script->evalInt();
+
+ debugC(2, kDebugFileIO, "Write to file \"%s\" (%d, %d bytes at %d)",
+ file.c_str(), dataVar, size, offset);
+
+ WRITE_VAR(1, 1);
+
+ SaveLoad::SaveMode mode = _vm->_saveLoad ? _vm->_saveLoad->getSaveMode(file.c_str()) : SaveLoad::kSaveModeNone;
+ if (mode == SaveLoad::kSaveModeSave) {
+
+ if (!_vm->_saveLoad->save(file.c_str(), dataVar, size, offset)) {
+
+ GUI::MessageDialog dialog(_("Failed to save game to file."));
+ dialog.runModal();
+
+ } else
+ WRITE_VAR(1, 0);
+
+ } else if (mode == SaveLoad::kSaveModeIgnore)
+ return;
+ else if (mode == SaveLoad::kSaveModeNone)
+ warning("Attempted to write to file \"%s\"", file.c_str());
+}
+
+
void Inter_v7::o7_oemToANSI(OpGobParams ¶ms) {
_vm->_game->_script->skip(2);
}
diff --git a/engines/gob/save/savehandler.cpp b/engines/gob/save/savehandler.cpp
index e5041ccd9f7..0d6a41b4193 100644
--- a/engines/gob/save/savehandler.cpp
+++ b/engines/gob/save/savehandler.cpp
@@ -543,7 +543,7 @@ bool FakeFileHandler::load(int16 dataVar, int32 size, int32 offset) {
if ((uint32)(offset + size) > _data.size())
return false;
- _vm->_inter->_variables->copyFrom(dataVar, &_data[0] + offset, size);
+ _vm->_inter->_variables->copyFrom((uint16) dataVar, &_data[0] + offset, size);
return true;
}
@@ -555,7 +555,7 @@ bool FakeFileHandler::save(int16 dataVar, int32 size, int32 offset) {
if ((uint32)(offset + size) > _data.size())
_data.resize(offset + size);
- _vm->_inter->_variables->copyTo(dataVar, &_data[0] + offset, size);
+ _vm->_inter->_variables->copyTo((uint16) dataVar, &_data[0] + offset, size);
return true;
}
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 50735363941..c9f33c3e468 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -896,6 +896,7 @@ public:
static const uint32 kChildrenCount = 16;
static const uint32 kAdibou2NbrOfApplications = 5;
static const uint32 kAdibou2NbrOfSavedDrawings = 12;
+ static const uint32 kAdibou2NbrOfConstructionGameFiles = 3;
SaveLoad_v7(GobEngine *vm, const char *targetName);
~SaveLoad_v7() override;
@@ -965,6 +966,8 @@ protected:
GameFileHandler *_adibou2EnvHandler[kChildrenCount];
SpriteHandler *_adibou2WeatherHandler[kChildrenCount];
GameFileHandler *_adibou2BreakoutGameProgressHandler[kChildrenCount];
+ FakeFileHandler *_adibou2ConstructionGameTempFileHandler[kAdibou2NbrOfConstructionGameFiles];
+ GameFileHandler *_adibou2ConstructionGameProgressHandler[kChildrenCount][kAdibou2NbrOfConstructionGameFiles];
GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
GameFileHandler *_adibou2MemoHandler[kChildrenCount];
GameFileHandler *_adibou2DiploHandler[kChildrenCount];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index ff39698d514..6a498895105 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -101,6 +101,60 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"brique15.inf" , kSaveModeSave, 0, "breakout game progress" },
{"brique16.inf" , kSaveModeSave, 0, "breakout game progress" },
+ // Adibou Playtoon-like minigame
+ {"construc.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"ptrecord.inf" , kSaveModeSave, 0, "construction game progress" }, // PTRECORD = "Playtoons record" probably
+ {"aide.inf" , kSaveModeSave, 0, "construction game progress" },
+
+ {"constr01.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 01
+ {"ptreco01.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide01.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr02.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 02
+ {"ptreco02.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide02.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr03.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 03
+ {"ptreco03.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide03.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr04.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 04
+ {"ptreco04.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide04.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr05.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 05
+ {"ptreco05.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide05.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr06.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 06
+ {"ptreco06.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide06.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr07.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 07
+ {"ptreco07.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide07.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr08.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 08
+ {"ptreco08.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide08.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr09.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 09
+ {"ptreco09.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide09.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr10.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 10
+ {"ptreco10.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide10.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr11.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 11
+ {"ptreco11.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide11.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr12.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 12
+ {"ptreco12.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide12.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr13.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 13
+ {"ptreco13.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide13.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr14.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 14
+ {"ptreco14.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide14.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr15.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 15
+ {"ptreco15.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide15.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"constr16.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 16
+ {"ptreco16.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"aide16.inf" , kSaveModeSave, 0, "construction game progress" },
+
// Adibou Applications 1-5
{"Gsa01_01.inf", kSaveModeSave, 0, "app progress" }, // Child 01
{"Gsa02_01.inf", kSaveModeSave, 0, "app progress" },
@@ -1091,6 +1145,22 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
Common::String::format("breakout_%02d", i + 1));
}
+ for (uint32 i = 0; i < kAdibou2NbrOfConstructionGameFiles; i++)
+ {
+ _saveFiles[index++].handler = _adibou2ConstructionGameTempFileHandler[i] = new FakeFileHandler(_vm);
+ }
+
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ {
+ for (uint32 j = 0; j < kAdibou2NbrOfConstructionGameFiles; j++)
+ {
+ const char *fileName = (j == 0)?"construc":((j == 1)?"ptreco":"aide");
+ _saveFiles[index++].handler = _adibou2ConstructionGameProgressHandler[i][j] = new GameFileHandler(_vm,
+ targetName,
+ Common::String::format("%s_%02d", fileName, i + 1));
+ }
+ }
+
for (uint32 i = 0; i < kChildrenCount; i++)
{
for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
@@ -1187,10 +1257,16 @@ SaveLoad_v7::~SaveLoad_v7() {
delete _adibou2WeatherHandler[i];
delete _adibou2BreakoutGameProgressHandler[i];
+ for (uint32 j = 0; j < kAdibou2NbrOfConstructionGameFiles; j++)
+ delete _adibou2ConstructionGameProgressHandler[i][j];
+
for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
delete _adibou2AppProgressHandler[i][j];
}
+ for (uint32 i = 0; i < kAdibou2NbrOfConstructionGameFiles; i++)
+ delete _adibou2ConstructionGameTempFileHandler[i];
+
for (uint32 i = 0; i < kChildrenCount; i++)
{
delete _faceHandler[i];
Commit: 48fa677c179952285a5dc6a65af3360a24766dc2
https://github.com/scummvm/scummvm/commit/48fa677c179952285a5dc6a65af3360a24766dc2
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:28+01:00
Commit Message:
GOB: fix cursor issues in Adibou2
- resizeCursors should be able to shrink cursor sizes (sometimes Adibou2 uses 50*50 cursors, and then goes back to 32*32)
- cursor palettes (_draw->_cursorPalettes) should not be used when initializing cursoes with o1_initCursor
Changed paths:
engines/gob/inter_v1.cpp
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index b5ac75934ec..b723f549e27 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -358,6 +358,11 @@ void Inter_v1::o1_initCursor() {
_vm->_draw->_cursorSpritesBack.reset();
_vm->_draw->_scummvmCursor.reset();
+ if (_vm->_draw->_doCursorPalettes != nullptr) {
+ delete _vm->_draw->_doCursorPalettes;
+ _vm->_draw->_doCursorPalettes = nullptr;
+ }
+
_vm->_draw->_cursorWidth = width;
_vm->_draw->_cursorHeight = height;
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index de540d559e2..7e275942eef 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -111,14 +111,11 @@ void Inter_v7::resizeCursors(int16 width, int16 height, int16 count, bool transp
if (height <= 0)
height = _vm->_draw->_cursorHeight;
- width = MAX<uint16>(width , _vm->_draw->_cursorWidth);
- height = MAX<uint16>(height, _vm->_draw->_cursorHeight);
-
_vm->_draw->_transparentCursor = transparency;
// Cursors sprite already big enough
- if ((_vm->_draw->_cursorWidth >= width) && (_vm->_draw->_cursorHeight >= height) &&
- (_vm->_draw->_cursorCount >= count))
+ if ((_vm->_draw->_cursorWidth == width) && (_vm->_draw->_cursorHeight == height) &&
+ (_vm->_draw->_cursorCount >= count) && _vm->_draw->_doCursorPalettes != nullptr)
return;
_vm->_draw->_cursorCount = count;
Commit: 46f23e34bf6e15a9b2aaee14b97e5d7e433f5174
https://github.com/scummvm/scummvm/commit/46f23e34bf6e15a9b2aaee14b97e5d7e433f5174
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:28+01:00
Commit Message:
GOB: another fillRect mode in Adibou2 (replace a specific color)
Fixes choice highlighting in "Adibou station" game
Changed paths:
engines/gob/inter.h
engines/gob/inter_v6.cpp
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 2a25d775dd6..1013e12e613 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -704,6 +704,7 @@ protected:
void o7_closedBase();
void o7_getDBString();
+ void o7_fillRect(OpFuncParams ¶ms);
void o7_readData(OpFuncParams ¶ms);
void o7_writeData(OpFuncParams ¶ms);
diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp
index 715d0969111..9b8577e3d5c 100644
--- a/engines/gob/inter_v6.cpp
+++ b/engines/gob/inter_v6.cpp
@@ -391,6 +391,7 @@ void Inter_v6::o6_fillRect(OpFuncParams ¶ms) {
}
if (destSurf & 0x80) {
+ // Implemented in Inter_v7::o7_fillRect, consider merging if needed
warning("Urban Stub: o6_fillRect(), destSurf & 0x80");
return;
}
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 7e275942eef..3d59314655b 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -90,6 +90,7 @@ void Inter_v7::setupOpcodesDraw() {
void Inter_v7::setupOpcodesFunc() {
Inter_Playtoons::setupOpcodesFunc();
+ OPCODEFUNC(0x33, o7_fillRect);
OPCODEFUNC(0x4D, o7_readData);
OPCODEFUNC(0x4E, o7_writeData);
}
@@ -965,6 +966,85 @@ void Inter_v7::o7_getDBString() {
WRITE_VAR(27, 1); // Success
}
+void Inter_v7::o7_fillRect(OpFuncParams ¶ms) {
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
+
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteBottom = _vm->_game->_script->readValExpr();
+
+ uint32 patternColor = _vm->_game->_script->evalInt();
+
+ int16 savedPattern = _vm->_draw->_pattern;
+
+ _vm->_draw->_backColor = patternColor & 0xFFFF;
+ _vm->_draw->_pattern = patternColor >> 16;
+
+ if (_vm->_draw->_spriteRight < 0) {
+ _vm->_draw->_destSpriteX += _vm->_draw->_spriteRight - 1;
+ _vm->_draw->_spriteRight = -_vm->_draw->_spriteRight + 2;
+ }
+ if (_vm->_draw->_spriteBottom < 0) {
+ _vm->_draw->_destSpriteY += _vm->_draw->_spriteBottom - 1;
+ _vm->_draw->_spriteBottom = -_vm->_draw->_spriteBottom + 2;
+ }
+
+ if (_vm->_draw->_destSurface & 0x80) {
+ _vm->_draw->_destSurface &= 0x7F;
+ if (_vm->_draw->_destSurface > 100)
+ _vm->_draw->_destSurface -= 80;
+
+ if (_vm->_draw->_pattern & 0x8000)
+ warning("o7_fillRect: pattern %d & 0x8000 != 0 stub", _vm->_draw->_pattern);
+ else {
+ // Replace a specific color in the rectangle
+ uint8 colorToReplace = (_vm->_draw->_backColor >> 8) & 0xFF;
+ _vm->_draw->_pattern = 4;
+ _vm->_draw->_backColor = _vm->_draw->_backColor & 0xFF;
+ // Additional condition on surface.field_10 in executables (video mode ?), seems to be always true for Adibou2
+ // if (_vm->_draw->_spritesArray[_vm->_draw->_destSurface].field_10 & 0x80)) {
+ SurfacePtr newSurface = _vm->_video->initSurfDesc(_vm->_draw->_spriteRight,
+ _vm->_draw->_spriteBottom,
+ 8);
+ newSurface->blit(*_vm->_draw->_spritesArray[_vm->_draw->_destSurface],
+ _vm->_draw->_destSpriteX,
+ _vm->_draw->_destSpriteY,
+ _vm->_draw->_destSpriteX + _vm->_draw->_spriteRight - 1,
+ _vm->_draw->_destSpriteY + _vm->_draw->_spriteRight - 1,
+ 0,
+ 0,
+ 0);
+
+ for (int y = 0; y < _vm->_draw->_spriteBottom; y++) {
+ for (int x = 0; x < _vm->_draw->_spriteRight; x++) {
+ if ((colorToReplace & 0xFF) == newSurface->get(x, y).get())
+ newSurface->putPixel(x, y, _vm->_draw->_backColor);
+ }
+ }
+
+ _vm->_draw->_spritesArray[_vm->_draw->_destSurface]->blit(*newSurface,
+ 0,
+ 0,
+ _vm->_draw->_spriteRight - 1,
+ _vm->_draw->_spriteBottom - 1,
+ _vm->_draw->_destSpriteX,
+ _vm->_draw->_destSpriteY,
+ 0);
+
+ _vm->_draw->dirtiedRect(_vm->_draw->_destSurface,
+ _vm->_draw->_destSpriteX,
+ _vm->_draw->_destSpriteY,
+ _vm->_draw->_destSpriteX + _vm->_draw->_spriteRight - 1,
+ _vm->_draw->_destSpriteY + _vm->_draw->_spriteBottom - 1);
+
+ }
+ }
+ else
+ _vm->_draw->spriteOperation(DRAW_FILLRECT);
+ _vm->_draw->_pattern = savedPattern;
+}
+
void Inter_v7::o7_readData(OpFuncParams ¶ms) {
Common::String file = getFile(_vm->_game->_script->evalString());
Commit: fc8b36f1d837f79d682a316519841cc265043180
https://github.com/scummvm/scummvm/commit/fc8b36f1d837f79d682a316519841cc265043180
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:28+01:00
Commit Message:
GOB: DRAW_PUTPIXEL with pattern 0xFF is getPixel() in Adibou2
Changed paths:
engines/gob/draw_playtoons.cpp
diff --git a/engines/gob/draw_playtoons.cpp b/engines/gob/draw_playtoons.cpp
index 8486ddd3ec5..b04312d8ae8 100644
--- a/engines/gob/draw_playtoons.cpp
+++ b/engines/gob/draw_playtoons.cpp
@@ -148,8 +148,7 @@ void Draw_Playtoons::spriteOperation(int16 operation) {
case DRAW_PUTPIXEL:
switch (_pattern & 0xFF) {
case 0xFF:
- warning("oPlaytoons_spriteOperation: operation DRAW_PUTPIXEL, pattern -1");
- WRITE_VAR(0, 1);
+ WRITE_VAR(0, _spritesArray[_destSurface]->get(_destSpriteX, _destSpriteY).get());
break;
case 1:
_spritesArray[_destSurface]->fillRect(destSpriteX,
Commit: b907d2afa6faa71c3fce68e42fb9d9e7744cd315
https://github.com/scummvm/scummvm/commit/b907d2afa6faa71c3fce68e42fb9d9e7744cd315
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: workaround for a bug in Adibou2 scripts of "cooking" activity
Changed paths:
engines/gob/inter_v6.cpp
diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp
index 9b8577e3d5c..b997ea541bb 100644
--- a/engines/gob/inter_v6.cpp
+++ b/engines/gob/inter_v6.cpp
@@ -297,6 +297,26 @@ void Inter_v6::o6_assign(OpFuncParams ¶ms) {
} else
loopCount = 1;
+ // WORKAROUND for a bug in Adibou 2 scripts for cooking activity: bananas count is not updated correctly.
+ // The banana balance equation should be: "remaining bananas = previous remaining bananas - bananas used for cake"
+ // but scripts do instead "remaining bananas = previous remaining *cherries* - bananas used for cake" :p
+ if (_vm->getGameType() == kGameTypeAdibou2
+ &&
+ loopCount == 1
+ &&
+ _vm->_game->_script->pos() == 18631 // same offset in all versions
+ &&
+ (dest == 40956 // bananas in v2.10, v2.11
+ ||
+ dest == 40916) // bananas in v2.12, v2.13
+ &&
+ _vm->isCurrentTot("cuisine.tot")) {
+ uint16 bananasInCakesVar = (dest == 40956) ? 22820 : 22828;
+ WRITE_VAR_OFFSET(dest, VAR_OFFSET(dest) - VAR_OFFSET(bananasInCakesVar) /* bananas used for cake */);
+ _vm->_game->_script->skipExpr(99);
+ return;
+ }
+
for (int i = 0; i < loopCount; i++) {
int16 result;
int16 srcType = _vm->_game->_script->evalExpr(&result);
Commit: f19528a0ad03e8c25f8f202300d071b7579a7ae8
https://github.com/scummvm/scummvm/commit/f19528a0ad03e8c25f8f202300d071b7579a7ae8
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: avoid warning in o7_setActiveCD when matching main game directory
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 3d59314655b..26510364922 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -19,6 +19,7 @@
*
*/
+#include "common/config-manager.h"
#include "common/endian.h"
#include "common/archive.h"
#include "common/translation.h"
@@ -686,17 +687,25 @@ void Inter_v7::o7_setActiveCD() {
for (Common::ArchiveMemberPtr file : files) {
auto *node = dynamic_cast<Common::FSNode *>(file.get());
if (node != nullptr) {
- Common::String path = node->getParent().getName();
- if (path.equalsIgnoreCase("applis")
- || path.equalsIgnoreCase("envir"))
+ Common::String dirname = node->getParent().getName();
+ Common::FSNode gameDataDir(ConfMan.get("path"));
+ bool newDirIsGameDir = (node->getParent().getPath() == gameDataDir.getPath());
+
+ if (!newDirIsGameDir &&
+ (dirname.equalsIgnoreCase("applis")
+ || dirname.equalsIgnoreCase("envir")))
continue;
- debugC(5, kDebugFileIO, "o7_setActiveCD: %s -> %s", _currentCDPath.c_str(), path.c_str());
+ debugC(5, kDebugFileIO, "o7_setActiveCD: %s -> %s", _currentCDPath.c_str(), dirname.c_str());
if (!_currentCDPath.empty())
SearchMan.setPriority(_currentCDPath, 0);
- _currentCDPath = path;
- SearchMan.setPriority(path, 1);
+ if (newDirIsGameDir)
+ _currentCDPath = "";
+ else {
+ _currentCDPath = dirname;
+ SearchMan.setPriority(dirname, 1);
+ }
storeValue(1);
return;
}
Commit: edb0528536736a82766fd3ca16cd4d6ce06d3ae6
https://github.com/scummvm/scummvm/commit/edb0528536736a82766fd3ca16cd4d6ce06d3ae6
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: no "fade" animation in Adibou2 after o1_palLoad
No fade transitions in the original game, and it leads to glitches (e.g. sometimes a scene is shown to soon, with a wrong palette, due to unexpected retrace in fade() call).
Changed paths:
engines/gob/inter_v1.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index b723f549e27..a8232520803 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1197,6 +1197,14 @@ void Inter_v1::o1_palLoad(OpFuncParams ¶ms) {
}
if (!_vm->_draw->_applyPal) {
+ if (_vm->getGameType() == kGameTypeAdibou2) {
+ if (_vm->_global->_pPaletteDesc)
+ _vm->_video->setFullPalette(_vm->_global->_pPaletteDesc);
+ else
+ _vm->_util->clearPalette();
+ return ;
+ }
+
_vm->_global->_pPaletteDesc->unused2 = _vm->_draw->_unusedPalette2;
_vm->_global->_pPaletteDesc->unused1 = _vm->_draw->_unusedPalette1;
Commit: 519b9b88ecd56d57245319cfb42af63c71a5139c
https://github.com/scummvm/scummvm/commit/519b9b88ecd56d57245319cfb42af63c71a5139c
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: disable filename replacement for Adibou2 database IDs.
Fix missing names in applications list.
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 26510364922..258a3681c74 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -936,7 +936,7 @@ void Inter_v7::o7_loadIFFPalette() {
void Inter_v7::o7_opendBase() {
Common::String dbFile = getFile(_vm->_game->_script->evalString());
- Common::String id = getFile(_vm->_game->_script->evalString());
+ Common::String id = _vm->_game->_script->evalString();
dbFile += ".DBF";
@@ -950,7 +950,7 @@ void Inter_v7::o7_opendBase() {
}
void Inter_v7::o7_closedBase() {
- Common::String id = getFile(_vm->_game->_script->evalString());
+ Common::String id = _vm->_game->_script->evalString();
if (_databases.close(id))
WRITE_VAR(27, 1); // Success
@@ -959,7 +959,7 @@ void Inter_v7::o7_closedBase() {
}
void Inter_v7::o7_getDBString() {
- Common::String id = getFile(_vm->_game->_script->evalString());
+ Common::String id = _vm->_game->_script->evalString();
Common::String group = _vm->_game->_script->evalString();
Common::String section = _vm->_game->_script->evalString();
Common::String keyword = _vm->_game->_script->evalString();
Commit: 65ec3bfa8af87655448be242ed6eeb9d72c44e01
https://github.com/scummvm/scummvm/commit/65ec3bfa8af87655448be242ed6eeb9d72c44e01
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: remove a forced retrace in newCycleAnim for Adibou2
Lead to glitches (scenes shown too soon before loading the correct palette), and does not seem to be needed.
Changed paths:
engines/gob/mult_v2.cpp
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index a02c5bd256a..ea1c762cbd2 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -699,7 +699,8 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
animLayer = _vm->_scenery->getAnimLayer(nAnim, nLayer);
} else {
if (animObj.videoSlot > 0) {
- _vm->_video->retrace();
+ if (_vm->getGameType() != kGameTypeAdibou2)
+ _vm->_video->retrace();
_vm->_vidPlayer->waitEndFrame(animObj.videoSlot - 1, true);
}
}
Commit: da7439b3f31f16c93c86972715251d5cfd60c891
https://github.com/scummvm/scummvm/commit/da7439b3f31f16c93c86972715251d5cfd60c891
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: Adibou2 forces palette entries 0 / 255 to be black / white
Changed paths:
engines/gob/inter_v1.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index a8232520803..55fa3c4c9f3 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1185,6 +1185,15 @@ void Inter_v1::o1_palLoad(OpFuncParams ¶ms) {
_vm->_draw->_vgaPalette[0].blue = 0;
}
+ if (_vm->getGameType() == kGameTypeAdibou2) {
+ _vm->_draw->_vgaPalette[0].red = 0;
+ _vm->_draw->_vgaPalette[0].green = 0;
+ _vm->_draw->_vgaPalette[0].blue = 0;
+ _vm->_draw->_vgaPalette[255].red = 63;
+ _vm->_draw->_vgaPalette[255].green = 63;
+ _vm->_draw->_vgaPalette[255].blue = 63;
+ }
+
if (_vm->_draw->_applyPal) {
_vm->_draw->_applyPal = false;
_vm->_video->setFullPalette(_vm->_global->_pPaletteDesc);
Commit: d1793fb8333d5f1badd7a97a012ddb081494e5ce
https://github.com/scummvm/scummvm/commit/d1793fb8333d5f1badd7a97a012ddb081494e5ce
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: fix in oPlaytoons_printText
Changed paths:
engines/gob/inter_playtoons.cpp
diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp
index 517d24641c6..6d2f50a9768 100644
--- a/engines/gob/inter_playtoons.cpp
+++ b/engines/gob/inter_playtoons.cpp
@@ -97,7 +97,6 @@ void Inter_Playtoons::setupOpcodesGob() {
void Inter_Playtoons::oPlaytoons_printText(OpFuncParams ¶ms) {
char buf[60];
- int i;
int16 oldTransparency;
_vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
@@ -123,8 +122,9 @@ void Inter_Playtoons::oPlaytoons_printText(OpFuncParams ¶ms) {
// _vm->_draw->_frontColor += colMod;
oldTransparency = _vm->_draw->_transparency;
+ int i = 0;
do {
- for (i = 0; (_vm->_game->_script->peekChar() != '.') &&
+ for (; (_vm->_game->_script->peekChar() != '.') &&
(_vm->_game->_script->peekByte() != 200); i++) {
buf[i] = _vm->_game->_script->readChar();
}
Commit: 656cc44dfe0187dd7eee83112d0cbd76a8254a25
https://github.com/scummvm/scummvm/commit/656cc44dfe0187dd7eee83112d0cbd76a8254a25
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: use oPlaytoons_printText in Adibou2
Partially fix the "text" tool in paint game, font spacing is now correct (there is still a key listening issue, though).
Changed paths:
engines/gob/inter.h
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 1013e12e613..818aacd4979 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -704,6 +704,7 @@ protected:
void o7_closedBase();
void o7_getDBString();
+ void o7_printText(OpFuncParams ¶ms);
void o7_fillRect(OpFuncParams ¶ms);
void o7_readData(OpFuncParams ¶ms);
void o7_writeData(OpFuncParams ¶ms);
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 258a3681c74..d9efe561155 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -91,6 +91,7 @@ void Inter_v7::setupOpcodesDraw() {
void Inter_v7::setupOpcodesFunc() {
Inter_Playtoons::setupOpcodesFunc();
+ OPCODEFUNC(0x11, o7_printText);
OPCODEFUNC(0x33, o7_fillRect);
OPCODEFUNC(0x4D, o7_readData);
OPCODEFUNC(0x4E, o7_writeData);
@@ -975,6 +976,9 @@ void Inter_v7::o7_getDBString() {
WRITE_VAR(27, 1); // Success
}
+void Inter_v7::o7_printText(OpFuncParams ¶ms) {
+ oPlaytoons_printText(params);
+}
void Inter_v7::o7_fillRect(OpFuncParams ¶ms) {
_vm->_draw->_destSurface = _vm->_game->_script->readInt16();
Commit: f187fdf5a4bd4aefa995f3ed76584a10d15c69fc
https://github.com/scummvm/scummvm/commit/f187fdf5a4bd4aefa995f3ed76584a10d15c69fc
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:29+01:00
Commit Message:
GOB: add an English version of Adibou ("Adiboo")
Changed paths:
engines/gob/detection/tables_adibou.h
diff --git a/engines/gob/detection/tables_adibou.h b/engines/gob/detection/tables_adibou.h
index f9f5e66c521..0501246df9d 100644
--- a/engines/gob/detection/tables_adibou.h
+++ b/engines/gob/detection/tables_adibou.h
@@ -186,6 +186,21 @@
0, 0, 0
},
+// -- English: Adiboo --
+{
+ {
+ "adibou2",
+ "ADIBOO 2",
+ AD_ENTRY1s("intro.stk", "718a51862406136c28639489a9ba950a", 956350),
+ EN_ANY,
+ kPlatformDOS,
+ ADGF_NO_FLAGS,
+ GUIO0()},
+ kGameTypeAdibou2,
+ kFeaturesNone,
+ 0, 0, 0
+},
+
// -- Demos --
{
Commit: 141cd85e75638dbe5812a46bd74b6613c3993005
https://github.com/scummvm/scummvm/commit/141cd85e75638dbe5812a46bd74b6613c3993005
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: workaround for an issue with text tool in Adibou2 paint game
Changed paths:
engines/gob/inter_v1.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 55fa3c4c9f3..07f54afd958 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1271,6 +1271,20 @@ void Inter_v1::o1_keyFunc(OpFuncParams ¶ms) {
case 1:
if (_vm->getGameType() != kGameTypeFascination && _vm->getGameType() != kGameTypeAdibou2)
_vm->_util->forceMouseUp(true);
+
+ // FIXME This is a hack to fix an issue with "text" tool in Adibou2 paint game.
+ // keyPress() is called twice in a loop before testing its return value.
+ // If the first keyPress call catches the key event, the second call will reset
+ // the key buffer, and the loop continues.
+ // Strangely in the original game it seems that the event is always caught by the
+ // second keyPress.
+ if (_vm->getGameType() == kGameTypeAdibou2
+ &&
+ (_vm->_game->_script->pos() == 18750 || _vm->_game->_script->pos() == 18955)
+ &&
+ _vm->isCurrentTot("palette.tot"))
+ break;
+
key = _vm->_game->checkKeys(&_vm->_global->_inter_mouseX,
&_vm->_global->_inter_mouseY, &_vm->_game->_mouseButtons, 0);
storeKey(key);
Commit: 572ac219ba59f6adfb9747ef89e6c523ea854548
https://github.com/scummvm/scummvm/commit/572ac219ba59f6adfb9747ef89e6c523ea854548
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: another fillRect mode used in Adibou2, "fill except one color"
Fixes level 3 of the "mask" game.
Changed paths:
engines/gob/draw_playtoons.cpp
engines/gob/surface.cpp
engines/gob/surface.h
diff --git a/engines/gob/draw_playtoons.cpp b/engines/gob/draw_playtoons.cpp
index b04312d8ae8..74c6640cdb0 100644
--- a/engines/gob/draw_playtoons.cpp
+++ b/engines/gob/draw_playtoons.cpp
@@ -176,11 +176,23 @@ void Draw_Playtoons::spriteOperation(int16 operation) {
break;
case DRAW_FILLRECT:
switch (_pattern & 0xFF) {
- case 1:
case 3:
case 4:
warning("oPlaytoons_spriteOperation: operation DRAW_FILLRECT, pattern %d", _pattern & 0xFF);
break;
+
+ case 1: {
+ _spritesArray[_destSurface]->fillArea(destSpriteX,
+ _destSpriteY,
+ _destSpriteX + _spriteRight - 1,
+ _destSpriteY + _spriteBottom - 1,
+ _backColor & 0xFF,
+ (_backColor >> 8) & 0xFF);
+
+ dirtiedRect(_destSurface, _destSpriteX, _destSpriteY,
+ _destSpriteX + _spriteRight - 1, _destSpriteY + _spriteBottom - 1);
+ break;
+ }
case 2: {
Common::Rect dirtyRect = _spritesArray[_destSurface]->fillAreaAtPoint(destSpriteX,
_destSpriteY,
diff --git a/engines/gob/surface.cpp b/engines/gob/surface.cpp
index 4bc837b601d..b39eabc910a 100644
--- a/engines/gob/surface.cpp
+++ b/engines/gob/surface.cpp
@@ -533,7 +533,42 @@ void Surface::fillRect(int16 left, int16 top, int16 right, int16 bottom, uint32
}
}
-Common::Rect Surface::fillAreaAtPoint(int16 left, int16 top, uint32 color) {
+// Fill rectangle with fillColor, except pixels with backgroundColor
+void Surface::fillArea(int16 left, int16 top, int16 right, int16 bottom, uint32 fillColor, uint32 backgroundColor) {
+ // Just in case those are swapped
+ if (left > right)
+ SWAP(left, right);
+ if (top > bottom)
+ SWAP(top, bottom);
+
+ if ((left >= _width) || (top >= _height))
+ // Nothing to do
+ return;
+
+ left = CLIP<int32>(left , 0, _width - 1);
+ top = CLIP<int32>(top , 0, _height - 1);
+ right = CLIP<int32>(right , 0, _width - 1);
+ bottom = CLIP<int32>(bottom, 0, _height - 1);
+
+ // Area to actually fill
+ uint16 width = CLIP<int32>(right - left + 1, 0, _width - left);
+ uint16 height = CLIP<int32>(bottom - top + 1, 0, _height - top);
+
+ if ((width == 0) || (height == 0))
+ // Nothing to do
+ return;
+
+ Pixel p = get(left, top);
+ while (height-- > 0) {
+ for (uint16 i = 0; i < width; i++, ++p)
+ if (p.get() != backgroundColor)
+ p.set(fillColor);
+
+ p += _width - width;
+ }
+}
+
+Common::Rect Surface::fillAreaAtPoint(int16 left, int16 top, uint32 fillColor) {
Common::Rect modifiedArea;
if (left < 0 || left >= _width || top < 0 || top >= _height)
// Nothing to do
@@ -541,10 +576,10 @@ Common::Rect Surface::fillAreaAtPoint(int16 left, int16 top, uint32 color) {
Pixel pixel = get(left, top);
uint32 initialColor = pixel.get();
- if (initialColor == color)
+ if (initialColor == fillColor)
return modifiedArea;
- pixel.set(color);
+ pixel.set(fillColor);
modifiedArea.extend(Common::Rect(left, top, left + 1, top + 1));
Common::Stack<Common::Point> pointsToScan;
pointsToScan.push(Common::Point(left, top));
@@ -560,7 +595,7 @@ Common::Rect Surface::fillAreaAtPoint(int16 left, int16 top, uint32 color) {
Pixel p = get(x, y);
if (p.get() == initialColor) {
- p.set(color);
+ p.set(fillColor);
if (!modifiedArea.contains(x, y))
modifiedArea.extend(Common::Rect(x, y, x + 1, y + 1));
pointsToScan.push(Common::Point(x, y));
diff --git a/engines/gob/surface.h b/engines/gob/surface.h
index c241dbbcc7d..b11a5cf48c6 100644
--- a/engines/gob/surface.h
+++ b/engines/gob/surface.h
@@ -122,7 +122,8 @@ public:
void blitScaled(const Surface &from, Common::Rational scale, int32 transp = -1);
void fillRect(int16 left, int16 top, int16 right, int16 bottom, uint32 color);
- Common::Rect fillAreaAtPoint(int16 left, int16 top, uint32 color);
+ void fillArea(int16 left, int16 top, int16 right, int16 bottom, uint32 fillColor, uint32 backgroundColor);
+ Common::Rect fillAreaAtPoint(int16 left, int16 top, uint32 fillColor);
void fill(uint32 color);
void clear();
Commit: b6e991f1c4cf5f8bedbc16dfd15ae425cabf8380
https://github.com/scummvm/scummvm/commit/b6e991f1c4cf5f8bedbc16dfd15ae425cabf8380
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: implement case -1 of o1_keyFunc
Same as case 1. Fixes the "Cancel" button of "Change CD" screen in Adibou2.
Changed paths:
engines/gob/inter_v1.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 07f54afd958..1b5f98c624c 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1255,10 +1255,6 @@ void Inter_v1::o1_keyFunc(OpFuncParams ¶ms) {
int16 key;
switch (cmd) {
- case -1:
- warning("o1_keyFunc: stub for command %d", cmd);
- break;
-
case 0:
_vm->_draw->_showCursor &= ~2;
_vm->_util->longDelay(1);
@@ -1268,6 +1264,7 @@ void Inter_v1::o1_keyFunc(OpFuncParams ¶ms) {
_vm->_util->clearKeyBuf();
break;
+ case -1:
case 1:
if (_vm->getGameType() != kGameTypeFascination && _vm->getGameType() != kGameTypeAdibou2)
_vm->_util->forceMouseUp(true);
Commit: a0c30a957e607f4925a0f108aa28886b1234ae67
https://github.com/scummvm/scummvm/commit/a0c30a957e607f4925a0f108aa28886b1234ae67
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: add more Adibou1 versions
Changed paths:
engines/gob/detection/tables_adibou.h
diff --git a/engines/gob/detection/tables_adibou.h b/engines/gob/detection/tables_adibou.h
index 0501246df9d..89b63a3a991 100644
--- a/engines/gob/detection/tables_adibou.h
+++ b/engines/gob/detection/tables_adibou.h
@@ -40,6 +40,35 @@
kFeaturesAdLib,
0, 0, 0
},
+{
+ {
+ "adibou1",
+ "ADIBOU 1 Environnement 4-7 ans",
+
+ AD_ENTRY1s("intro.stk", "904a93f46687617bb34e672020fc17a4", 248724),
+ FR_FRA,
+ kPlatformDOS,
+ ADGF_NO_FLAGS,
+ GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
+ },
+ kGameTypeAdibou1,
+ kFeaturesAdLib | kFeaturesEGA,
+ 0, "base.tot", 0
+},
+{
+ {
+ "adibou1",
+ "ADIBOU 1 Environnement 4-7 ans",
+ AD_ENTRY1s("intro.stk", "228edf921ebcd9f1c6d566856f264ea4", 2647968),
+ FR_FRA,
+ kPlatformDOS,
+ ADGF_NO_FLAGS,
+ GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
+ },
+ kGameTypeAdibou1,
+ kFeaturesAdLib,
+ 0, 0, 0
+},
{
{
"adibou2",
Commit: 680077d92b7a69ec7d13bacdf1c1a86e87d07923
https://github.com/scummvm/scummvm/commit/680077d92b7a69ec7d13bacdf1c1a86e87d07923
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: add save handler stubs for Adibou1
Remove a blocking "floppy disk error" screen on some versions.
Changed paths:
A engines/gob/save/saveload_adibou1.cpp
engines/gob/gob.cpp
engines/gob/module.mk
engines/gob/save/saveload.h
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index c276f2c2c17..eb0f5eba6e9 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -643,7 +643,7 @@ Common::Error GobEngine::initGameParts() {
_map = new Map_v2(this);
_goblin = new Goblin_v2(this);
_scenery = new Scenery_v2(this);
- _saveLoad = new SaveLoad_v2(this, _targetName.c_str());
+ _saveLoad = new SaveLoad_Adibou1(this, _targetName.c_str());
break;
case kGameTypeAbracadabra:
diff --git a/engines/gob/module.mk b/engines/gob/module.mk
index 24fc7193198..381189b6de8 100644
--- a/engines/gob/module.mk
+++ b/engines/gob/module.mk
@@ -105,6 +105,7 @@ MODULE_OBJS := \
save/saveload_v4.o \
save/saveload_v6.o \
save/saveload_v7.o \
+ save/saveload_adibou1.o \
save/saveload_geisha.o \
save/saveload_fascin.o \
save/saveload_ajworld.o \
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index c9f33c3e468..22a1ea9799d 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -282,6 +282,33 @@ protected:
SaveFile *getSaveFile(const char *fileName);
};
+/** Save/Load class for Adibou 1 */
+class SaveLoad_Adibou1 : public SaveLoad {
+public:
+ SaveLoad_Adibou1(GobEngine *vm, const char *targetName);
+ ~SaveLoad_Adibou1() override;
+
+ SaveMode getSaveMode(const char *fileName) const override;
+
+protected:
+ struct SaveFile {
+ const char *sourceName;
+ SaveMode mode;
+ SaveHandler *handler;
+ const char *description;
+ };
+
+ static SaveFile _saveFiles[];
+
+ FakeFileHandler *_bouHandler;
+
+ SaveHandler *getHandler(const char *fileName) const override;
+ const char *getDescription(const char *fileName) const override;
+
+ const SaveFile *getSaveFile(const char *fileName) const;
+ SaveFile *getSaveFile(const char *fileName);
+};
+
/** Save/Load class for Goblins 3 and Lost in Time. */
class SaveLoad_v3 : public SaveLoad {
public:
diff --git a/engines/gob/save/saveload_adibou1.cpp b/engines/gob/save/saveload_adibou1.cpp
new file mode 100644
index 00000000000..24f1a6ddeca
--- /dev/null
+++ b/engines/gob/save/saveload_adibou1.cpp
@@ -0,0 +1,89 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "gob/save/saveload.h"
+#include "gob/save/saveconverter.h"
+#include "gob/inter.h"
+#include "gob/variables.h"
+
+namespace Gob {
+
+SaveLoad_Adibou1::SaveFile SaveLoad_Adibou1::_saveFiles[] = {
+ { "bou.inf", kSaveModeSave, nullptr, "adibou1"},
+};
+
+SaveLoad_Adibou1::SaveLoad_Adibou1(GobEngine *vm, const char *targetName) :
+ SaveLoad(vm) {
+
+ _saveFiles[0].handler = _bouHandler = new FakeFileHandler(vm);
+}
+
+SaveLoad_Adibou1::~SaveLoad_Adibou1() {
+ delete _bouHandler;
+}
+
+const SaveLoad_Adibou1::SaveFile *SaveLoad_Adibou1::getSaveFile(const char *fileName) const {
+ for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
+ if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
+ return &_saveFiles[i];
+
+ return 0;
+}
+
+SaveLoad_Adibou1::SaveFile *SaveLoad_Adibou1::getSaveFile(const char *fileName) {
+ fileName = stripPath(fileName);
+
+ for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
+ if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
+ return &_saveFiles[i];
+
+ return 0;
+}
+
+SaveHandler *SaveLoad_Adibou1::getHandler(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->handler;
+
+ return 0;
+}
+
+const char *SaveLoad_Adibou1::getDescription(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->description;
+
+ return 0;
+}
+
+SaveLoad::SaveMode SaveLoad_Adibou1::getSaveMode(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->mode;
+
+ return kSaveModeNone;
+}
+
+} // End of namespace Gob
Commit: 87536a16e44a505e86f50609dd9e3143f66831e8
https://github.com/scummvm/scummvm/commit/87536a16e44a505e86f50609dd9e3143f66831e8
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: fix errors in Adibou2 savegame files list
Changed paths:
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 6a498895105..0dfcc972760 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -708,8 +708,6 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"mfleur13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
{"mfleud13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
{"mtable13.inf", kSaveModeSave, 0, "poster" },
- {"pal12_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal13_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
// Child14
{"cart0114.inf", kSaveModeSave, 0, "drawing" },
{"cart0214.inf", kSaveModeSave, 0, "drawing" },
@@ -742,9 +740,6 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"mfleur14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
{"mfleud14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
{"mtable14.inf", kSaveModeSave, 0, "poster" },
- {"pal12_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal13_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal14_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
// Child15
{"cart0115.inf", kSaveModeSave, 0, "drawing" },
{"cart0215.inf", kSaveModeSave, 0, "drawing" },
@@ -777,10 +772,6 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"mfleur15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
{"mfleud15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
{"mtable15.inf", kSaveModeSave, 0, "poster" },
- {"pal12_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal13_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal14_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal15_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
// Child16
{"cart0116.inf", kSaveModeSave, 0, "drawing" },
{"cart0216.inf", kSaveModeSave, 0, "drawing" },
Commit: cab63f8d3138ae8a9514a9c2502dace5b9818568
https://github.com/scummvm/scummvm/commit/cab63f8d3138ae8a9514a9c2502dace5b9818568
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: skip copy protection test in Adibou1
Changed paths:
engines/gob/inter_v1.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 1b5f98c624c..bc3ec63e64c 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -709,6 +709,13 @@ void Inter_v1::o1_callSub(OpFuncParams ¶ms) {
return;
}
+ // Skipping the copy protection screen in Adibou2
+ if (!_vm->_copyProtection && (_vm->getGameType() == kGameTypeAdibou1) && (offset == 1746) &&
+ _vm->isCurrentTot("base.tot")) {
+ debugC(2, kDebugGameFlow, "Skipping copy protection screen");
+ return;
+ }
+
_vm->_game->_script->call(offset);
if ((params.counter == params.cmdCount) && (params.retFlag == 2)) {
Commit: 5d66b9a2006d74cf287f6a39e3ecdaffd3079cf3
https://github.com/scummvm/scummvm/commit/5d66b9a2006d74cf287f6a39e3ecdaffd3079cf3
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: add some Adibou1 stubs
Changed paths:
engines/gob/inter.h
engines/gob/inter_v2.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 818aacd4979..a5bf9c2330b 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -448,6 +448,8 @@ protected:
void o2_writeData(OpFuncParams ¶ms);
void o2_loadInfogramesIns(OpGobParams ¶ms);
void o2_playInfogrames(OpGobParams ¶ms);
+ void o2_gob0x0B(OpGobParams ¶ms);
+ void o2_gob1001(OpGobParams ¶ms);
void o2_startInfogrames(OpGobParams ¶ms);
void o2_stopInfogrames(OpGobParams ¶ms);
void o2_handleGoblins(OpGobParams ¶ms);
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index 24965d04edb..eab838c3f00 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -140,11 +140,13 @@ void Inter_v2::setupOpcodesGob() {
OPCODEGOB( 2, o2_stopInfogrames);
OPCODEGOB( 10, o2_playInfogrames);
+ OPCODEGOB( 11, o2_gob0x0B);
OPCODEGOB(100, o2_handleGoblins);
OPCODEGOB(500, o2_playProtracker);
OPCODEGOB(501, o2_stopProtracker);
+ OPCODEGOB(1001, o2_gob1001);
}
void Inter_v2::checkSwitchTable(uint32 &offset) {
@@ -578,6 +580,13 @@ void Inter_v2::o2_totSub() {
uint8 flags = _vm->_game->_script->readByte();
+ // Skipping the copy protection screen in Adibou2
+ if (!_vm->_copyProtection && (_vm->getGameType() == kGameTypeAdibou1) && totFile == "p_eleph") {
+ debugC(2, kDebugGameFlow, "Skipping copy protection screen");
+ _varStack.pushInt(1);
+ return;
+ }
+
_vm->_game->totSub(flags, totFile);
}
@@ -1583,6 +1592,18 @@ void Inter_v2::o2_playInfogrames(OpGobParams ¶ms) {
_vm->_sound->infogramesPlay();
}
+void Inter_v2::o2_gob0x0B(OpGobParams ¶ms)
+{
+ _vm->_game->_script->skip(4);
+ warning("Adibou1 stub: o2_gob0x0B");
+}
+
+void Inter_v2::o2_gob1001(OpGobParams ¶ms)
+{
+ _vm->_game->_script->skip(2);
+ warning("Adibou1 stub: o2_gob1001");
+}
+
void Inter_v2::o2_startInfogrames(OpGobParams ¶ms) {
_vm->_game->_script->readInt16();
Commit: 0ac43888f2b95a5843599b1bf6367eba760ebe2f
https://github.com/scummvm/scummvm/commit/0ac43888f2b95a5843599b1bf6367eba760ebe2f
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:30+01:00
Commit Message:
GOB: handle saving Adibou2 drawings on "floppy disk"
They will just land on the save directory, as other saves, with fix filename "adibou2_drawing_on_floppy_disk".
The use case is to facilitate sharing drawings between different Adibou characters, for example to continue a friend's drawing. In this view, we wrap the full picture and its thumbnail in a same file with a fix filename, so that one need only to move the "adibou2_drawing_on_floppy_disk" file between Adibou2 installations to share "floppy disk" drawings.
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 22a1ea9799d..1ec7c6d4b85 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -959,6 +959,34 @@ protected:
File _file;
};
+ class DrawingOnFloppyDiskHandler : public TempSpriteHandler {
+ public:
+ DrawingOnFloppyDiskHandler(GobEngine *vm,
+ SaveReader *reader,
+ SaveWriter *writer,
+ bool isThumbnail,
+ uint32 chunkSize = 1);
+ ~DrawingOnFloppyDiskHandler() override;
+
+ int32 getSize() override;
+ bool load(int16 dataVar, int32 size, int32 offset) override;
+ bool save(int16 dataVar, int32 size, int32 offset) override;
+ bool deleteFile() override;
+
+ private:
+ class File : public SlotFileStatic {
+ public:
+ File(GobEngine *vm, const Common::String &base, const Common::String &ext);
+ ~File() override;
+ };
+
+ //File _file;
+ SaveWriter *_writer;
+ SaveReader *_reader;
+ bool _isThumbnail;
+ int32 _chunkSize;
+ };
+
class GameFileHandler : public SaveHandler {
public:
GameFileHandler(GobEngine *vm, const Common::String &target, const Common::String &ext);
@@ -984,39 +1012,43 @@ protected:
File _file;
};
+
static SaveFile _saveFiles[];
- SpriteHandler *_faceHandler[kChildrenCount];
- FakeFileHandler *_childrenHandler;
- FakeFileHandler *_debilHandler;
- GameFileHandler *_configHandler;
- GameFileHandler *_adibou2EnvHandler[kChildrenCount];
- SpriteHandler *_adibou2WeatherHandler[kChildrenCount];
- GameFileHandler *_adibou2BreakoutGameProgressHandler[kChildrenCount];
- FakeFileHandler *_adibou2ConstructionGameTempFileHandler[kAdibou2NbrOfConstructionGameFiles];
- GameFileHandler *_adibou2ConstructionGameProgressHandler[kChildrenCount][kAdibou2NbrOfConstructionGameFiles];
- GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
- GameFileHandler *_adibou2MemoHandler[kChildrenCount];
- GameFileHandler *_adibou2DiploHandler[kChildrenCount];
- GameFileHandler *_adibou2AppliHandler[kAdibou2NbrOfApplications];
- GameFileHandler *_adibou2CriteHandler[kAdibou2NbrOfApplications];
- GameFileHandler *_adibou2ExoHandler[kAdibou2NbrOfApplications];
- GameFileHandler *_adibou2ApplicationsInfoHandler;
- FakeFileHandler *_adibou2RetourHandler;
- FakeFileHandler *_adibou2LanceHandler;
- TempSpriteHandler *_adibou2AppIcoHandler[kAdibou2NbrOfApplications];
- SpriteHandler *_adibou2DrawingHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
- SpriteHandler *_adibou2DrawingThumbnailHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
- GameFileHandler *_adibou2DrawingPaletteHandler[kChildrenCount];
- SpriteHandler *_adibou2DrawingMailboxHandler[kChildrenCount];
- SpriteHandler *_adibou2CakePhotoHandler[kChildrenCount];
- SpriteHandler *_adibou2FlowerPhotoHandler[kChildrenCount];
- SpriteHandler *_adibou2FlowerInVaseHandler[kChildrenCount];
- SpriteHandler *_adibou2FadedFlowerInVaseHandler[kChildrenCount];
- SpriteHandler *_adibou2PosterHandler[kChildrenCount];
-
- FakeFileHandler *_addy4BaseHandler[2];
- FakeFileHandler *_addy4GrundschuleHandler[11];
+ SpriteHandler *_faceHandler[kChildrenCount];
+ FakeFileHandler *_childrenHandler;
+ FakeFileHandler *_debilHandler;
+ GameFileHandler *_configHandler;
+ GameFileHandler *_adibou2EnvHandler[kChildrenCount];
+ SpriteHandler *_adibou2WeatherHandler[kChildrenCount];
+ GameFileHandler *_adibou2BreakoutGameProgressHandler[kChildrenCount];
+ FakeFileHandler *_adibou2ConstructionGameTempFileHandler[kAdibou2NbrOfConstructionGameFiles];
+ GameFileHandler *_adibou2ConstructionGameProgressHandler[kChildrenCount][kAdibou2NbrOfConstructionGameFiles];
+ GameFileHandler *_adibou2AppProgressHandler[kChildrenCount][kAdibou2NbrOfApplications];
+ GameFileHandler *_adibou2MemoHandler[kChildrenCount];
+ GameFileHandler *_adibou2DiploHandler[kChildrenCount];
+ GameFileHandler *_adibou2AppliHandler[kAdibou2NbrOfApplications];
+ GameFileHandler *_adibou2CriteHandler[kAdibou2NbrOfApplications];
+ GameFileHandler *_adibou2ExoHandler[kAdibou2NbrOfApplications];
+ GameFileHandler *_adibou2ApplicationsInfoHandler;
+ FakeFileHandler *_adibou2RetourHandler;
+ FakeFileHandler *_adibou2LanceHandler;
+ TempSpriteHandler *_adibou2AppIcoHandler[kAdibou2NbrOfApplications];
+ SpriteHandler *_adibou2DrawingHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
+ SpriteHandler *_adibou2DrawingThumbnailHandler[kChildrenCount][kAdibou2NbrOfSavedDrawings];
+ GameFileHandler *_adibou2DrawingPaletteHandler[kChildrenCount];
+ SpriteHandler *_adibou2DrawingMailboxHandler[kChildrenCount];
+ SpriteHandler *_adibou2CakePhotoHandler[kChildrenCount];
+ SpriteHandler *_adibou2FlowerPhotoHandler[kChildrenCount];
+ SpriteHandler *_adibou2FlowerInVaseHandler[kChildrenCount];
+ SpriteHandler *_adibou2FadedFlowerInVaseHandler[kChildrenCount];
+ SpriteHandler *_adibou2PosterHandler[kChildrenCount];
+ DrawingOnFloppyDiskHandler *_adibou2DrawingOnFloppyDiskHandler;
+ DrawingOnFloppyDiskHandler *_adibou2DrawingThumbnailOnFloppyDiskHandler;
+ FakeFileHandler *_adibou2TestDobHandler;
+
+ FakeFileHandler *_addy4BaseHandler[2];
+ FakeFileHandler *_addy4GrundschuleHandler[11];
SaveHandler *getHandler(const char *fileName) const override;
const char *getDescription(const char *fileName) const override;
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 0dfcc972760..de8f71c1e07 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -805,6 +805,9 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"mfleud16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
{"mtable16.inf", kSaveModeSave, 0, "poster" },
+ {"adibou.pal", kSaveModeSave, 0, "drawing on floppy disk" },
+ {"adibour.pal", kSaveModeSave, 0, "drawing on floppy disk (thumbnail)" },
+ {"test.dob", kSaveModeSave, 0, "test floppy disk file" },
// Addy 4 Base
{"config00.inf", kSaveModeSave, nullptr, nullptr },
@@ -925,6 +928,93 @@ bool SaveLoad_v7::SpriteHandler::deleteFile() {
return writer.deleteFile();
}
+SaveLoad_v7::DrawingOnFloppyDiskHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
+ SlotFileStatic(vm, base, ext) {
+}
+
+SaveLoad_v7::DrawingOnFloppyDiskHandler::File::~File() {
+}
+
+
+SaveLoad_v7::DrawingOnFloppyDiskHandler::DrawingOnFloppyDiskHandler(GobEngine *vm,
+ SaveReader *reader,
+ SaveWriter *writer,
+ bool isThumbnail,
+ uint32 chunkSize)
+ : TempSpriteHandler(vm), _reader(reader), _writer(writer), _isThumbnail(isThumbnail), _chunkSize(chunkSize) {
+}
+
+SaveLoad_v7::DrawingOnFloppyDiskHandler::~DrawingOnFloppyDiskHandler() {
+ // Assume reader and writer are owned by the handler of the full picture
+ if (!_isThumbnail) {
+ delete _reader;
+ delete _writer;
+ }
+}
+
+int32 SaveLoad_v7::DrawingOnFloppyDiskHandler::getSize() {
+ if (_reader == nullptr || !_reader->load())
+ return -1;
+
+ if (_isThumbnail) {
+ // First part is the thumbnail
+ SaveHeader header;
+ if (!_reader->readPartHeader(0, &header))
+ return -1;
+
+ return header.getSize();
+ }
+ else {
+ // Following parts are the full picture chunks
+ int32 size = -1;
+ SaveHeader header;
+ for (int i = 1; _reader->readPartHeader(i, &header); i++) {
+ if (size == -1)
+ size = 0;
+ size += header.getSize();
+ }
+
+ return size;
+ }
+}
+
+bool SaveLoad_v7::DrawingOnFloppyDiskHandler::load(int16 dataVar, int32 size, int32 offset)
+{
+ if (!TempSpriteHandler::createFromSprite(dataVar, size, offset))
+ return false;
+
+ if (!_reader->load())
+ return false;
+
+ int32 part = 0;
+ if (_isThumbnail)
+ part = 0;
+ else
+ part = 1 + offset / _chunkSize;
+ if (!_reader->readPart(part, _sprite))
+ return false;
+
+ return TempSpriteHandler::load(dataVar, size, offset);
+}
+
+bool SaveLoad_v7::DrawingOnFloppyDiskHandler::save(int16 dataVar, int32 size, int32 offset)
+{
+ if (!TempSpriteHandler::save(dataVar, size, offset))
+ return false;
+
+ int32 part = 0;
+ if (_isThumbnail)
+ part = 0;
+ else
+ part = 1 + offset / _chunkSize;
+
+ return _writer->writePart(part, _sprite);
+}
+
+bool SaveLoad_v7::DrawingOnFloppyDiskHandler::deleteFile() {
+ return _writer->deleteFile();
+}
+
SaveLoad_v7::GameFileHandler::File::File(GobEngine *vm, const Common::String &base, const Common::String &ext) :
SlotFileStatic(vm, base, ext) {
}
@@ -1224,6 +1314,25 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
Common::String::format("poster_%02d", i + 1));
}
+ uint32 drawingOnFloppyDiskFullSize = 163200;
+ uint32 drawingOnFloppyDiskChunkSize = 4800;
+ uint32 nbrOfParts = 1 + drawingOnFloppyDiskFullSize / drawingOnFloppyDiskChunkSize; // 1 for the thumbnail, 34 for the drawing
+ Common::String drawingOnFloppyDiskName = "adibou2_my_drawing_on_floppy_disk"; // Fix filename to facilitate sharing
+
+ SaveReader *reader = new SaveReader(nbrOfParts, 0, drawingOnFloppyDiskName);
+ SaveWriter *writer = new SaveWriter(nbrOfParts, 0, drawingOnFloppyDiskName);
+
+ _saveFiles[index++].handler = _adibou2DrawingOnFloppyDiskHandler = new DrawingOnFloppyDiskHandler(_vm,
+ reader,
+ writer,
+ false,
+ drawingOnFloppyDiskChunkSize);
+ _saveFiles[index++].handler = _adibou2DrawingThumbnailOnFloppyDiskHandler = new DrawingOnFloppyDiskHandler(_vm,
+ reader,
+ writer,
+ true);
+ _saveFiles[index++].handler = _adibou2TestDobHandler = new FakeFileHandler(_vm);
+
for (int i = 0; i < 2; i++)
_saveFiles[index++].handler = _addy4BaseHandler[i] = new FakeFileHandler(_vm);
@@ -1293,6 +1402,10 @@ SaveLoad_v7::~SaveLoad_v7() {
delete _adibou2FadedFlowerInVaseHandler[i];
delete _adibou2PosterHandler[i];
}
+
+ delete _adibou2DrawingOnFloppyDiskHandler;
+ delete _adibou2DrawingThumbnailOnFloppyDiskHandler;
+ delete _adibou2TestDobHandler;
}
const SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) const {
Commit: 37965283bf1e88a9ad8bcd2f55032e044cf807d8
https://github.com/scummvm/scummvm/commit/37965283bf1e88a9ad8bcd2f55032e044cf807d8
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
COMMON: add support for "name table" resource in NE executables
A "resource ID -> name" mapping found in some NE executables, stored as a resource.
Not described by any documentation I could find, but the corresponding #define can be encountered in some old header files.
Mentioned by this blog post https://www.toptensoftware.com/blog/win3mu-5/ (section "The Mysterious Resource Type #15").
Changed paths:
common/winexe.h
common/winexe_ne.cpp
common/winexe_ne.h
diff --git a/common/winexe.h b/common/winexe.h
index eb52f0b8c91..93ca7a0f83d 100644
--- a/common/winexe.h
+++ b/common/winexe.h
@@ -54,6 +54,7 @@ enum WinResourceType {
kWinMessageTable = 0x0B,
kWinGroupCursor = 0x0C,
kWinGroupIcon = 0x0E,
+ kWinNameTable = 0x0F,
kWinVersion = 0x10,
kWinDlgInclude = 0x11,
kWinPlugPlay = 0x13,
diff --git a/common/winexe_ne.cpp b/common/winexe_ne.cpp
index 8471faed731..ec5b6205b75 100644
--- a/common/winexe_ne.cpp
+++ b/common/winexe_ne.cpp
@@ -103,10 +103,64 @@ uint32 NEResources::getResourceTableOffset() {
return offsetResourceTable;
}
+/**
+ * A "resource ID -> name" mapping found in some NE executables, stored as a resource.
+ * Not described by any documentation I could find, but the corresponding #define can be encountered in some old header files.
+ * Mentioned by this blog post https://www.toptensoftware.com/blog/win3mu-5/ (section "The Mysterious Resource Type #15")
+ *
+ * The name table records have the following layout:
+ *
+ * struct
+ * {
+ * WORD lengthEntry; // length of this entry (including this field)
+ * WORD resourceType; // see WinResourceType constants
+ * WORD resourceId; // ordinal of resource | 0x8000
+ * BYTE paddingZero; // maybe ??
+ * CHAR szName[]; // null-terminated name
+ * }
+ *
+*/
+
+bool NEResources::readNameTable(uint32 offset, uint32 size) {
+ if (!_exe)
+ return false;
+
+ uint32 curPos = _exe->pos();
+ if (!_exe->seek(offset)) {
+ _exe->seek(curPos);
+ return false;
+ }
+
+ uint32 offsetEnd = offset + size;
+ while (_exe->pos() < offsetEnd) {
+ uint16 lengthEntry = _exe->readUint16LE();
+ if (lengthEntry == 0)
+ break;
+
+ uint16 resourceType = _exe->readUint16LE();
+ uint16 resourceId = _exe->readUint16LE();
+ resourceId &= 0x7FFF;
+ _exe->skip(1); // paddingZero
+
+ Common::String name = _exe->readString('\0', lengthEntry - 7);
+ if (name.size() + 8 != lengthEntry) {
+ warning("NEResources::readNameTable(): unexpected string length in name table (expected = %d, found = %d, string = %s)",
+ lengthEntry - 7, name.size() + 1, name.c_str());
+ }
+
+ debug(2, "NEResources::readNameTable(): resourceType = %d, resourceId = %d, name = %s",
+ resourceType, resourceId, name.c_str());
+ _nameTable[resourceType][resourceId] = name;
+ }
+
+ _exe->seek(curPos);
+ return true;
+}
+
static const char *s_resTypeNames[] = {
"", "cursor", "bitmap", "icon", "menu", "dialog", "string",
"font_dir", "font", "accelerator", "rc_data", "msg_table",
- "group_cursor", "", "group_icon", "", "version", "dlg_include",
+ "group_cursor", "", "group_icon", "name_table", "version", "dlg_include",
"", "plug_play", "vxd", "ani_cursor", "ani_icon", "html",
"manifest"
};
@@ -158,6 +212,8 @@ bool NEResources::readResourceTable(uint32 offset) {
debug(2, "Found resource %s %s", type.toString().c_str(), res.id.toString().c_str());
_resources.push_back(res);
+ if (type == kWinNameTable)
+ readNameTable(res.offset, res.size);
}
typeID = _exe->readUint16LE();
@@ -185,9 +241,15 @@ String NEResources::getResourceString(SeekableReadStream &exe, uint32 offset) {
}
const NEResources::Resource *NEResources::findResource(const WinResourceID &type, const WinResourceID &id) const {
- for (List<Resource>::const_iterator it = _resources.begin(); it != _resources.end(); ++it)
- if (it->type == type && it->id == id)
+ for (List<Resource>::const_iterator it = _resources.begin(); it != _resources.end(); ++it) {
+ if (it->type == type &&
+ (it->id == id ||
+ (!_nameTable.empty() &&
+ _nameTable.contains(it->type) &&
+ _nameTable[it->type].contains(it->id) &&
+ _nameTable[it->type][it->id] == id.toString())))
return &*it;
+ }
return nullptr;
}
diff --git a/common/winexe_ne.h b/common/winexe_ne.h
index c6adfe14808..4aea3da64c3 100644
--- a/common/winexe_ne.h
+++ b/common/winexe_ne.h
@@ -93,11 +93,18 @@ private:
/** All resources. */
List<Resource> _resources;
+ typedef HashMap<WinResourceID, Common::String, WinResourceID_Hash, WinResourceID_EqualTo> IDMap;
+ typedef HashMap<WinResourceID, IDMap, WinResourceID_Hash, WinResourceID_EqualTo> TypeMap;
+ TypeMap _nameTable;
+
/** Read the offset to the resource table. */
uint32 getResourceTableOffset();
/** Read the resource table. */
bool readResourceTable(uint32 offset);
+ /** Read the name table. */
+ bool readNameTable(uint32 offset, uint32 size);
+
/** Find a specific resource. */
const Resource *findResource(const WinResourceID &type, const WinResourceID &id) const;
Commit: 4e77480374b041a73a10e754333758498b9e37ea
https://github.com/scummvm/scummvm/commit/4e77480374b041a73a10e754333758498b9e37ea
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
GOB: cursors can now be loaded from NE executables
Some Adibou2 versions use NE executables instead of PE, and rely on the "name table" feature for map the cursor name the cursor data.
Changed paths:
engines/gob/inter.h
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index a5bf9c2330b..3d9c1bb770a 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -31,7 +31,7 @@
#include "gob/databases.h"
namespace Common {
- class PEResources;
+ class WinResources;
}
namespace Gob {
@@ -718,7 +718,7 @@ private:
INIConfig _inis;
Databases _databases;
- Common::PEResources *_cursors;
+ Common::WinResources *_cursors;
Common::ArchiveMemberList _remainingFilesFromPreviousSearch;
Common::String _currentCDPath;
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index d9efe561155..5d22d9dbd79 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -24,6 +24,7 @@
#include "common/archive.h"
#include "common/translation.h"
#include "common/winexe_pe.h"
+#include "common/winexe_ne.h"
#include "graphics/cursorman.h"
#include "graphics/wincursor.h"
@@ -1179,10 +1180,16 @@ bool Inter_v7::loadCursorFile() {
if (_cursors)
return true;
- _cursors = new Common::PEResources();
-
- if (_cursors->loadFromEXE("cursor32.dll"))
- return true;
+ if (_vm->_dataIO->hasFile("cursor32.dll")) {
+ _cursors = new Common::PEResources();
+ if (_cursors->loadFromEXE("cursor32.dll"))
+ return true;
+ }
+ else if (_vm->_dataIO->hasFile("cursor.dll")) {
+ _cursors = new Common::NEResources();
+ if (_cursors->loadFromEXE("cursor.dll"))
+ return true;
+ }
delete _cursors;
_cursors = nullptr;
Commit: 283fd1b103899901824cd7893ca08e4bbba75d39
https://github.com/scummvm/scummvm/commit/283fd1b103899901824cd7893ca08e4bbba75d39
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
GOB: more cursor resizing fixes for Adibou2
This fixes remaining cursor issues in an English version of Adibou2.
Changed paths:
engines/gob/inter.h
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 3d9c1bb770a..2ace7d358a8 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -679,7 +679,8 @@ protected:
void setupOpcodesGob() override;
void o7_draw0x0C();
- void o7_loadCursor();
+ void o7_loadCursor(OpFuncParams ¶ms);
+ void o7_loadCursorFromExec();
void o7_loadMultObject();
void o7_displayWarning();
void o7_logString();
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 5d22d9dbd79..35264f76ce5 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -41,6 +41,7 @@
#include "gob/script.h"
#include "gob/expression.h"
#include "gob/videoplayer.h"
+#include "gob/resources.h"
#include "gob/sound/sound.h"
#include "gob/save/saveload.h"
@@ -62,7 +63,7 @@ void Inter_v7::setupOpcodesDraw() {
Inter_Playtoons::setupOpcodesDraw();
OPCODEDRAW(0x0C, o7_draw0x0C);
- OPCODEDRAW(0x0D, o7_loadCursor);
+ OPCODEDRAW(0x0D, o7_loadCursorFromExec);
OPCODEDRAW(0x17, o7_loadMultObject);
OPCODEDRAW(0x44, o7_displayWarning);
OPCODEDRAW(0x45, o7_logString);
@@ -92,6 +93,7 @@ void Inter_v7::setupOpcodesDraw() {
void Inter_v7::setupOpcodesFunc() {
Inter_Playtoons::setupOpcodesFunc();
+ OPCODEFUNC(0x03, o7_loadCursor);
OPCODEFUNC(0x11, o7_printText);
OPCODEFUNC(0x33, o7_fillRect);
OPCODEFUNC(0x4D, o7_readData);
@@ -117,11 +119,23 @@ void Inter_v7::resizeCursors(int16 width, int16 height, int16 count, bool transp
_vm->_draw->_transparentCursor = transparency;
+ bool sameCursorDimensions = (_vm->_draw->_cursorWidth == width) && (_vm->_draw->_cursorHeight == height);
+
// Cursors sprite already big enough
- if ((_vm->_draw->_cursorWidth == width) && (_vm->_draw->_cursorHeight == height) &&
- (_vm->_draw->_cursorCount >= count) && _vm->_draw->_doCursorPalettes != nullptr)
+ if (sameCursorDimensions &&
+ _vm->_draw->_cursorCount >= count &&
+ _vm->_draw->_doCursorPalettes != nullptr)
return;
+ debugC(5, kDebugGraphics, "Resizing cursors: size %dx%d -> %dx%d, cursor count %d -> %d)",
+ _vm->_draw->_cursorWidth,
+ width,
+ _vm->_draw->_cursorHeight,
+ height,
+ _vm->_draw->_cursorCount,
+ count);
+ SurfacePtr oldCursorsSprites = _vm->_draw->_cursorSprites;
+ int oldCursorCount = _vm->_draw->_cursorCount;
_vm->_draw->_cursorCount = count;
_vm->_draw->_cursorWidth = width;
_vm->_draw->_cursorHeight = height;
@@ -136,41 +150,145 @@ void Inter_v7::resizeCursors(int16 width, int16 height, int16 count, bool transp
_vm->_draw->_cursorSpritesBack = _vm->_draw->_spritesArray[Draw::kCursorSurface];
_vm->_draw->_cursorSprites = _vm->_draw->_cursorSpritesBack;
+ if (sameCursorDimensions && oldCursorCount < count)
+ _vm->_draw->_cursorSprites->blit(*oldCursorsSprites);
+ oldCursorsSprites.reset();
+
_vm->_draw->_scummvmCursor = _vm->_video->initSurfDesc(width, height, SCUMMVM_CURSOR);
- for (int i = 0; i < 40; i++) {
+ for (int i = sameCursorDimensions ? oldCursorCount : 0; i < count; i++) {
_vm->_draw->_cursorAnimLow[i] = -1;
_vm->_draw->_cursorAnimDelays[i] = 0;
_vm->_draw->_cursorAnimHigh[i] = 0;
}
_vm->_draw->_cursorAnimLow[1] = 0;
- delete[] _vm->_draw->_doCursorPalettes;
- delete[] _vm->_draw->_cursorPalettes;
- delete[] _vm->_draw->_cursorKeyColors;
- delete[] _vm->_draw->_cursorPaletteStarts;
- delete[] _vm->_draw->_cursorPaletteCounts;
- delete[] _vm->_draw->_cursorHotspotsX;
- delete[] _vm->_draw->_cursorHotspotsY;
-
- _vm->_draw->_cursorPalettes = new byte[256 * 3 * count];
- _vm->_draw->_doCursorPalettes = new bool[count];
- _vm->_draw->_cursorKeyColors = new byte[count];
- _vm->_draw->_cursorPaletteStarts = new uint16[count];
- _vm->_draw->_cursorPaletteCounts = new uint16[count];
- _vm->_draw->_cursorHotspotsX = new int32[count];
- _vm->_draw->_cursorHotspotsY = new int32[count];
-
- memset(_vm->_draw->_cursorPalettes , 0, count * 256 * 3);
- memset(_vm->_draw->_doCursorPalettes , 0, count * sizeof(bool));
- memset(_vm->_draw->_cursorKeyColors , 0, count * sizeof(byte));
- memset(_vm->_draw->_cursorPaletteStarts, 0, count * sizeof(uint16));
- memset(_vm->_draw->_cursorPaletteCounts, 0, count * sizeof(uint16));
- memset(_vm->_draw->_cursorHotspotsX , 0, count * sizeof(int32));
- memset(_vm->_draw->_cursorHotspotsY , 0, count * sizeof(int32));
+ if (oldCursorCount < count || _vm->_draw->_doCursorPalettes == nullptr) {
+ bool *oldDoCursorPalettes = _vm->_draw->_doCursorPalettes;
+ byte *oldCursorPalettes = _vm->_draw->_cursorPalettes;
+ byte *oldCursorKeyColors = _vm->_draw->_cursorKeyColors;
+ uint16 *oldCursorPaletteStarts = _vm->_draw->_cursorPaletteStarts;
+ uint16 *oldCursorPaletteCounts = _vm->_draw->_cursorPaletteCounts;
+ int32 *oldCursorHotspotsX = _vm->_draw->_cursorHotspotsX;
+ int32 *oldCursorHotspotsY = _vm->_draw->_cursorHotspotsY;
+
+ _vm->_draw->_cursorPalettes = new byte[256 * 3 * count];
+ _vm->_draw->_doCursorPalettes = new bool[count];
+ _vm->_draw->_cursorKeyColors = new byte[count];
+ _vm->_draw->_cursorPaletteStarts = new uint16[count];
+ _vm->_draw->_cursorPaletteCounts = new uint16[count];
+ _vm->_draw->_cursorHotspotsX = new int32[count];
+ _vm->_draw->_cursorHotspotsY = new int32[count];
+
+ memset(_vm->_draw->_cursorPalettes , 0, count * 256 * 3);
+ memset(_vm->_draw->_doCursorPalettes , 0, count * sizeof(bool));
+ memset(_vm->_draw->_cursorKeyColors , 0, count * sizeof(byte));
+ memset(_vm->_draw->_cursorPaletteStarts, 0, count * sizeof(uint16));
+ memset(_vm->_draw->_cursorPaletteCounts, 0, count * sizeof(uint16));
+ memset(_vm->_draw->_cursorHotspotsX , 0, count * sizeof(int32));
+ memset(_vm->_draw->_cursorHotspotsY , 0, count * sizeof(int32));
+
+ if (sameCursorDimensions && oldCursorCount < count) {
+ if (oldCursorPalettes != nullptr)
+ memcpy(_vm->_draw->_cursorPalettes, oldCursorPalettes, oldCursorCount * 256 * 3);
+ if (oldDoCursorPalettes != nullptr)
+ memcpy(_vm->_draw->_doCursorPalettes, oldDoCursorPalettes, oldCursorCount * sizeof(bool));
+ if (oldCursorKeyColors != nullptr)
+ memcpy(_vm->_draw->_cursorKeyColors, oldCursorKeyColors, oldCursorCount * sizeof(byte));
+ if (oldCursorPaletteStarts != nullptr)
+ memcpy(_vm->_draw->_cursorPaletteStarts, oldCursorPaletteStarts, oldCursorCount * sizeof(uint16));
+ if (oldCursorPaletteCounts != nullptr)
+ memcpy(_vm->_draw->_cursorPaletteCounts, oldCursorPaletteCounts, oldCursorCount * sizeof(uint16));
+ if (oldCursorHotspotsX != nullptr)
+ memcpy(_vm->_draw->_cursorHotspotsX, oldCursorHotspotsX, oldCursorCount * sizeof(int32));
+ if (oldCursorHotspotsY != nullptr)
+ memcpy(_vm->_draw->_cursorHotspotsY, oldCursorHotspotsY, oldCursorCount * sizeof(int32));
+ }
+
+ delete[] oldDoCursorPalettes;
+ delete[] oldCursorPalettes;
+ delete[] oldCursorKeyColors;
+ delete[] oldCursorPaletteStarts;
+ delete[] oldCursorPaletteCounts;
+ delete[] oldCursorHotspotsX;
+ delete[] oldCursorHotspotsY;
+ }
+}
+
+void Inter_v7::o7_loadCursor(OpFuncParams ¶ms) {
+ int16 id = _vm->_game->_script->readInt16();
+
+ if ((id == -1) || (id == -2)) {
+ char file[10];
+
+ if (id == -1) {
+ for (int i = 0; i < 9; i++)
+ file[i] = _vm->_game->_script->readChar();
+ } else
+ strncpy(file, GET_VAR_STR(_vm->_game->_script->readInt16()), 10);
+
+ file[9] = '\0';
+
+ uint16 start = _vm->_game->_script->readUint16();
+ int8 index = _vm->_game->_script->readInt8();
+
+ VideoPlayer::Properties props;
+
+ props.sprite = -1;
+
+ int vmdSlot = _vm->_vidPlayer->openVideo(false, file, props);
+ if (vmdSlot == -1) {
+ warning("Can't open video \"%s\" as cursor", file);
+ return;
+ }
+
+ int16 framesCount = _vm->_vidPlayer->getFrameCount(vmdSlot);
+
+ for (int i = 0; i < framesCount; i++) {
+ props.startFrame = i;
+ props.lastFrame = i;
+ props.waitEndFrame = false;
+
+ _vm->_vidPlayer->play(vmdSlot, props);
+ _vm->_vidPlayer->copyFrame(vmdSlot, *_vm->_draw->_cursorSprites,
+ 0, 0, _vm->_draw->_cursorWidth, _vm->_draw->_cursorWidth,
+ (start + i) * _vm->_draw->_cursorWidth, 0);
+ }
+
+ _vm->_vidPlayer->closeVideo(vmdSlot);
+
+ _vm->_draw->_cursorAnimLow[index] = start;
+ _vm->_draw->_cursorAnimHigh[index] = framesCount + start - 1;
+ _vm->_draw->_cursorAnimDelays[index] = 10;
+
+ return;
+ }
+
+ int8 index = _vm->_game->_script->readInt8();
+
+ Resource *resource = _vm->_game->_resources->getResource((uint16) id);
+ if (!resource)
+ return;
+
+ int16 cursorWidth = MAX(_vm->_draw->_cursorWidth, resource->getWidth());
+ int16 cursorHeight = MAX(_vm->_draw->_cursorHeight, resource->getHeight());
+ resizeCursors(cursorWidth, cursorHeight, index + 1, true);
+ if ((index * _vm->_draw->_cursorWidth) >= _vm->_draw->_cursorSprites->getWidth())
+ return;
+
+ _vm->_draw->_cursorSprites->fillRect(index * _vm->_draw->_cursorWidth, 0,
+ index * _vm->_draw->_cursorWidth + _vm->_draw->_cursorWidth - 1,
+ _vm->_draw->_cursorHeight - 1, 0);
+
+ _vm->_video->drawPackedSprite(resource->getData(),
+ resource->getWidth(), resource->getHeight(),
+ index * _vm->_draw->_cursorWidth, 0, 0, *_vm->_draw->_cursorSprites);
+ _vm->_draw->_cursorAnimLow[index] = 0;
+
+ delete resource;
}
-void Inter_v7::o7_loadCursor() {
+void Inter_v7::o7_loadCursorFromExec() {
int16 cursorIndex = _vm->_game->_script->readValExpr();
Common::String cursorName = _vm->_game->_script->evalString();
Commit: 736223cb7b678bb3e1767d2c74c2958dceb24005
https://github.com/scummvm/scummvm/commit/736223cb7b678bb3e1767d2c74c2958dceb24005
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
GOB: work around a bug in Adibou2 script of "pleasant/unpleasant" game
The script accessed uninitialized parts of an array (index 0 while the array was initialized from index 1).
Changed paths:
engines/gob/inter_v6.cpp
diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp
index b997ea541bb..1db6017c7e7 100644
--- a/engines/gob/inter_v6.cpp
+++ b/engines/gob/inter_v6.cpp
@@ -353,6 +353,21 @@ void Inter_v6::o6_assign(OpFuncParams ¶ms) {
break;
}
}
+
+ // WORKAROUND for a bug in Adibou2 script of "pleasant/unpleasant" game
+ if (_vm->getGameType() == kGameTypeAdibou2
+ &&
+ loopCount == 1
+ &&
+ _vm->_game->_script->pos() == 6739
+ &&
+ dest == 508
+ &&
+ VAR_OFFSET(dest) == 0
+ &&
+ _vm->isCurrentTot("l6ex11.tot")) {
+ WRITE_VAR_OFFSET(dest, 1); // used as a loop index for an array initialized only from index 1, skip value 0
+ }
}
void Inter_v6::o6_removeHotspot(OpFuncParams ¶ms) {
Commit: 73a3b0580f3e937c01c7ba4e1bbb910c801a31d8
https://github.com/scummvm/scummvm/commit/73a3b0580f3e937c01c7ba4e1bbb910c801a31d8
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
GOB: fix a uint16/uint32 cast error in o2_pushVars
Ints were converted to uint16 first and then uint32 before being pushed, and popped as uint32, so a pushed (int32) "-1" was popped as (uint32) 65535.
This fixes an infinite loop when making a mistake in Adibou2 "write sentence in order" exercise.
Changed paths:
engines/gob/inter_v2.cpp
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index eab838c3f00..68294b9b203 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -617,7 +617,7 @@ void Inter_v2::o2_pushVars() {
if (_vm->_game->_script->evalExpr(&value) != 20)
value = 0;
- _varStack.pushInt((uint16)value);
+ _varStack.pushInt((uint32)value);
}
}
}
Commit: 8a08d6470b10ea988ce2e62e9ee653242654ce88
https://github.com/scummvm/scummvm/commit/8a08d6470b10ea988ce2e62e9ee653242654ce88
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
GOB: o7_deleteFile, allow to delete all files matching a pattern
Fixes the "delete character" button in Adibou2
We cannot strip paths for this opcode, as scripts sometimes delete all files in a directory (e.g. "TEMP\*.*", that would have been simplified as "*.*" with path stripping).
Use also full path match for read/write/copy/move operations, to allow distinguishing savegames with same filename under different directories, with a fallback to simple filename matching.
Changed paths:
engines/gob/inter.h
engines/gob/inter_v5.cpp
engines/gob/inter_v7.cpp
engines/gob/save/saveload.cpp
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 2ace7d358a8..b50bc613a60 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -691,6 +691,7 @@ protected:
void o7_loadFunctions();
void o7_moveFile();
void o7_copyFile();
+ void o7_deleteFile();
void o7_playVmdOrMusic();
void o7_initScreen();
void o7_setActiveCD();
diff --git a/engines/gob/inter_v5.cpp b/engines/gob/inter_v5.cpp
index 380b341090c..de8f23611e2 100644
--- a/engines/gob/inter_v5.cpp
+++ b/engines/gob/inter_v5.cpp
@@ -103,8 +103,7 @@ void Inter_v5::o5_deleteFile() {
if (mode == SaveLoad::kSaveModeSave) {
if (!_vm->_saveLoad->deleteFile(file)) {
- GUI::MessageDialog dialog(_("Failed to delete file."));
- dialog.runModal();
+ warning("Cannot delete file \"%s\"", file);
}
} else if (mode == SaveLoad::kSaveModeNone)
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 35264f76ce5..d38169f6cb1 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -73,6 +73,7 @@ void Inter_v7::setupOpcodesDraw() {
OPCODEDRAW(0x59, o7_callFunction);
OPCODEDRAW(0x5A, o7_loadFunctions);
OPCODEDRAW(0x60, o7_copyFile);
+ OPCODEDRAW(0x61, o7_deleteFile);
OPCODEDRAW(0x62, o7_moveFile);
OPCODEDRAW(0x80, o7_initScreen);
OPCODEDRAW(0x83, o7_playVmdOrMusic);
@@ -537,34 +538,58 @@ void Inter_v7::o7_copyFile() {
debugC(2, kDebugFileIO, "Copy file \"%s\" to \"%s", path1.c_str(), path2.c_str());
- Common::String file1 = getFile(path1.c_str());
- Common::String file2 = getFile(path2.c_str());
- if (file1.equalsIgnoreCase(file2)) {
+ if (path1.equalsIgnoreCase(path2)) {
warning("o7_copyFile(): \"%s\" == \"%s\"", path1.c_str(), path2.c_str());
return;
}
- copyFile(file1, file2);
+ copyFile(path1, path2);
+}
+
+void Inter_v7::o7_deleteFile() {
+ Common::String file =_vm->_game->_script->evalString();
+
+ debugC(2, kDebugFileIO, "Delete file \"%s\"", file.c_str());
+
+ bool isPattern = file.contains('*') || file.contains('?');
+ Common::List<Common::String> files;
+ if (isPattern) {
+ files = _vm->_saveLoad->getFilesMatchingPattern(file.c_str());
+ debugC(2, kDebugFileIO, "Delete file matching pattern \"%s\" (%d matching file(s))", file.c_str(), files.size());
+ for (const Common::String &matchingFile : files)
+ debugC(5, kDebugFileIO, "Matching file: %s", matchingFile.c_str());
+ }
+ else {
+ files.push_back(file);
+ debugC(2, kDebugFileIO, "Delete file \"%s\"", file.c_str());
+ }
+
+ for (const Common::String &fileToDelete : files) {
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(fileToDelete.c_str());
+ if (mode == SaveLoad::kSaveModeSave) {
+ if (!_vm->_saveLoad->deleteFile(fileToDelete.c_str())) {
+ warning("Cannot delete file \"%s\"", fileToDelete.c_str());
+ }
+ } else if (mode == SaveLoad::kSaveModeNone)
+ warning("Attempted to delete file \"%s\"", fileToDelete.c_str());
+ }
}
void Inter_v7::o7_moveFile() {
Common::String path1 = _vm->_game->_script->evalString();
Common::String path2 = _vm->_game->_script->evalString();
- Common::String file1 = getFile(path1.c_str());
- Common::String file2 = getFile(path2.c_str());
-
- if (file1.equalsIgnoreCase(file2)) {
+ if (path1.equalsIgnoreCase(path2)) {
warning("o7_moveFile(): \"%s\" == \"%s\"", path1.c_str(), path2.c_str());
return;
}
- copyFile(file1, file2);
- SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file1.c_str());
+ copyFile(path1, path2);
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(path1.c_str());
if (mode == SaveLoad::kSaveModeSave) {
- _vm->_saveLoad->deleteFile(file1.c_str());
+ _vm->_saveLoad->deleteFile(path1.c_str());
} else if (mode == SaveLoad::kSaveModeNone)
- warning("Attempted to delete file \"%s\" while moving it to \"%s\"", file1.c_str(), file2.c_str());
+ warning("Attempted to delete file \"%s\" while moving it to \"%s\"", path1.c_str(), path2.c_str());
}
@@ -1178,7 +1203,7 @@ void Inter_v7::o7_fillRect(OpFuncParams ¶ms) {
}
void Inter_v7::o7_readData(OpFuncParams ¶ms) {
- Common::String file = getFile(_vm->_game->_script->evalString());
+ Common::String file = _vm->_game->_script->evalString();
uint16 dataVar = _vm->_game->_script->readVarIndex();
int32 size = _vm->_game->_script->readValExpr();
@@ -1255,7 +1280,7 @@ void Inter_v7::o7_readData(OpFuncParams ¶ms) {
}
void Inter_v7::o7_writeData(OpFuncParams ¶ms) {
- Common::String file = getFile(_vm->_game->_script->evalString());
+ Common::String file = _vm->_game->_script->evalString();
int16 dataVar = _vm->_game->_script->readVarIndex();
int32 size = _vm->_game->_script->readValExpr();
diff --git a/engines/gob/save/saveload.cpp b/engines/gob/save/saveload.cpp
index c08bf2ecb71..f88007eb71b 100644
--- a/engines/gob/save/saveload.cpp
+++ b/engines/gob/save/saveload.cpp
@@ -41,6 +41,11 @@ const char *SaveLoad::stripPath(const char *fileName) {
return fileName;
}
+Common::List<Common::String> SaveLoad::getFilesMatchingPattern(const char *pattern) const {
+ warning("SaveLoad::getFilesMatchingPattern not implemented");
+ return Common::List<Common::String>();
+}
+
int32 SaveLoad::getSize(const char *fileName) {
debugC(3, kDebugSaveLoad, "Requested size of save file \"%s\"", fileName);
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 1ec7c6d4b85..8ef89e50dc9 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -53,6 +53,9 @@ public:
/** Returns how to handle that file. */
virtual SaveMode getSaveMode(const char *fileName) const;
+ /** Returns all files known by the saving system matching a pattern. */
+ virtual Common::List<Common::String> getFilesMatchingPattern(const char *pattern) const;
+
/** Returns the file's (virtual) size. */
int32 getSize(const char *fileName);
/** Loads size bytes from offset into the variables starting with dataVar. */
@@ -928,6 +931,7 @@ public:
~SaveLoad_v7() override;
SaveMode getSaveMode(const char *fileName) const override;
+ Common::List<Common::String> getFilesMatchingPattern(const char *pattern) const override;
protected:
struct SaveFile {
@@ -1017,7 +1021,7 @@ protected:
SpriteHandler *_faceHandler[kChildrenCount];
FakeFileHandler *_childrenHandler;
- FakeFileHandler *_debilHandler;
+ FakeFileHandler *_debilHandler[4];
GameFileHandler *_configHandler;
GameFileHandler *_adibou2EnvHandler[kChildrenCount];
SpriteHandler *_adibou2WeatherHandler[kChildrenCount];
@@ -1054,7 +1058,6 @@ protected:
const char *getDescription(const char *fileName) const override;
const SaveFile *getSaveFile(const char *fileName) const;
- SaveFile *getSaveFile(const char *fileName);
};
} // End of namespace Gob
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index de8f71c1e07..e4adf5cd613 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -28,782 +28,788 @@ namespace Gob {
SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
// Addy Junior Base
- {"visage01.inf", kSaveModeSave, nullptr, "face" }, // Child 01
- {"visage02.inf", kSaveModeSave, nullptr, "face" }, // Child 02
- {"visage03.inf", kSaveModeSave, nullptr, "face" }, // Child 03
- {"visage04.inf", kSaveModeSave, nullptr, "face" }, // Child 04
- {"visage05.inf", kSaveModeSave, nullptr, "face" }, // Child 05
- {"visage06.inf", kSaveModeSave, nullptr, "face" }, // Child 06
- {"visage07.inf", kSaveModeSave, nullptr, "face" }, // Child 07
- {"visage08.inf", kSaveModeSave, nullptr, "face" }, // Child 08
- {"visage09.inf", kSaveModeSave, nullptr, "face" }, // Child 09
- {"visage10.inf", kSaveModeSave, nullptr, "face" }, // Child 10
- {"visage11.inf", kSaveModeSave, nullptr, "face" }, // Child 11
- {"visage12.inf", kSaveModeSave, nullptr, "face" }, // Child 12
- {"visage13.inf", kSaveModeSave, nullptr, "face" }, // Child 13
- {"visage14.inf", kSaveModeSave, nullptr, "face" }, // Child 14
- {"visage15.inf", kSaveModeSave, nullptr, "face" }, // Child 15
- {"visage16.inf", kSaveModeSave, nullptr, "face" }, // Child 16
- { "enfant.inf", kSaveModeSave, nullptr, "children" },
- { "debil.tmp", kSaveModeSave, nullptr, nullptr },
- { "config.inf", kSaveModeSave, nullptr, "configuration"},
+ {"DATA\\visage01.inf", kSaveModeSave, 0, "face" }, // Child 01
+ {"DATA\\visage02.inf", kSaveModeSave, 0, "face" }, // Child 02
+ {"DATA\\visage03.inf", kSaveModeSave, 0, "face" }, // Child 03
+ {"DATA\\visage04.inf", kSaveModeSave, 0, "face" }, // Child 04
+ {"DATA\\visage05.inf", kSaveModeSave, 0, "face" }, // Child 05
+ {"DATA\\visage06.inf", kSaveModeSave, 0, "face" }, // Child 06
+ {"DATA\\visage07.inf", kSaveModeSave, 0, "face" }, // Child 07
+ {"DATA\\visage08.inf", kSaveModeSave, 0, "face" }, // Child 08
+ {"DATA\\visage09.inf", kSaveModeSave, 0, "face" }, // Child 09
+ {"DATA\\visage10.inf", kSaveModeSave, 0, "face" }, // Child 10
+ {"DATA\\visage11.inf", kSaveModeSave, 0, "face" }, // Child 11
+ {"DATA\\visage12.inf", kSaveModeSave, 0, "face" }, // Child 12
+ {"DATA\\visage13.inf", kSaveModeSave, 0, "face" }, // Child 13
+ {"DATA\\visage14.inf", kSaveModeSave, 0, "face" }, // Child 14
+ {"DATA\\visage15.inf", kSaveModeSave, 0, "face" }, // Child 15
+ {"DATA\\visage16.inf", kSaveModeSave, 0, "face" }, // Child 16
+ {"DATA\\enfant.inf", kSaveModeSave, 0, "children" },
+
+ {"TEMP\\debil.tmp", kSaveModeSave, 0, 0 },
+ {"DATA\\debil.tmp", kSaveModeSave, 0, 0 },
+ {"APPLIS\\debil.tmp", kSaveModeSave, 0, 0 },
+ {"ENVIR\\debil.tmp", kSaveModeSave, 0, 0 },
+
+
+ { "DATA\\config.inf", kSaveModeSave, 0, "configuration"},
// Adibou environment (flowers, vegetables...)
- {"enviro01.inf", kSaveModeSave, 0, "environment" }, // Child 01
- {"enviro02.inf", kSaveModeSave, 0, "environment" }, // Child 02
- {"enviro03.inf", kSaveModeSave, 0, "environment" }, // Child 03
- {"enviro04.inf", kSaveModeSave, 0, "environment" }, // Child 04
- {"enviro05.inf", kSaveModeSave, 0, "environment" }, // Child 05
- {"enviro06.inf", kSaveModeSave, 0, "environment" }, // Child 06
- {"enviro07.inf", kSaveModeSave, 0, "environment" }, // Child 07
- {"enviro08.inf", kSaveModeSave, 0, "environment" }, // Child 08
- {"enviro09.inf", kSaveModeSave, 0, "environment" }, // Child 09
- {"enviro10.inf", kSaveModeSave, 0, "environment" }, // Child 10
- {"enviro11.inf", kSaveModeSave, 0, "environment" }, // Child 11
- {"enviro12.inf", kSaveModeSave, 0, "environment" }, // Child 12
- {"enviro13.inf", kSaveModeSave, 0, "environment" }, // Child 13
- {"enviro14.inf", kSaveModeSave, 0, "environment" }, // Child 14
- {"enviro15.inf", kSaveModeSave, 0, "environment" }, // Child 15
- {"enviro16.inf", kSaveModeSave, 0, "environment" }, // Child 16
+ {"DATA\\enviro01.inf", kSaveModeSave, 0, "environment" }, // Child 01
+ {"DATA\\enviro02.inf", kSaveModeSave, 0, "environment" }, // Child 02
+ {"DATA\\enviro03.inf", kSaveModeSave, 0, "environment" }, // Child 03
+ {"DATA\\enviro04.inf", kSaveModeSave, 0, "environment" }, // Child 04
+ {"DATA\\enviro05.inf", kSaveModeSave, 0, "environment" }, // Child 05
+ {"DATA\\enviro06.inf", kSaveModeSave, 0, "environment" }, // Child 06
+ {"DATA\\enviro07.inf", kSaveModeSave, 0, "environment" }, // Child 07
+ {"DATA\\enviro08.inf", kSaveModeSave, 0, "environment" }, // Child 08
+ {"DATA\\enviro09.inf", kSaveModeSave, 0, "environment" }, // Child 09
+ {"DATA\\enviro10.inf", kSaveModeSave, 0, "environment" }, // Child 10
+ {"DATA\\enviro11.inf", kSaveModeSave, 0, "environment" }, // Child 11
+ {"DATA\\enviro12.inf", kSaveModeSave, 0, "environment" }, // Child 12
+ {"DATA\\enviro13.inf", kSaveModeSave, 0, "environment" }, // Child 13
+ {"DATA\\enviro14.inf", kSaveModeSave, 0, "environment" }, // Child 14
+ {"DATA\\enviro15.inf", kSaveModeSave, 0, "environment" }, // Child 15
+ {"DATA\\enviro16.inf", kSaveModeSave, 0, "environment" }, // Child 16
// Adibou environment weather
- {"temp01.csa" , kSaveModeSave, 0, "weather" },
- {"temp02.csa" , kSaveModeSave, 0, "weather" },
- {"temp03.csa" , kSaveModeSave, 0, "weather" },
- {"temp04.csa" , kSaveModeSave, 0, "weather" },
- {"temp05.csa" , kSaveModeSave, 0, "weather" },
- {"temp06.csa" , kSaveModeSave, 0, "weather" },
- {"temp07.csa" , kSaveModeSave, 0, "weather" },
- {"temp08.csa" , kSaveModeSave, 0, "weather" },
- {"temp09.csa" , kSaveModeSave, 0, "weather" },
- {"temp10.csa" , kSaveModeSave, 0, "weather" },
- {"temp11.csa" , kSaveModeSave, 0, "weather" },
- {"temp12.csa" , kSaveModeSave, 0, "weather" },
- {"temp13.csa" , kSaveModeSave, 0, "weather" },
- {"temp14.csa" , kSaveModeSave, 0, "weather" },
- {"temp15.csa" , kSaveModeSave, 0, "weather" },
- {"temp16.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp01.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp02.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp03.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp04.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp05.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp06.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp07.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp08.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp09.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp10.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp11.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp12.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp13.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp14.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp15.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp16.csa" , kSaveModeSave, 0, "weather" },
// Adibou brekout game progress
- {"brique01.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique02.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique03.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique04.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique05.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique06.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique07.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique08.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique09.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique10.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique11.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique12.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique13.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique14.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique15.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"brique16.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique01.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique02.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique03.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique04.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique05.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique06.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique07.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique08.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique09.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique10.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique11.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique12.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique13.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique14.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique15.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique16.inf" , kSaveModeSave, 0, "breakout game progress" },
// Adibou Playtoon-like minigame
{"construc.inf" , kSaveModeSave, 0, "construction game progress" },
{"ptrecord.inf" , kSaveModeSave, 0, "construction game progress" }, // PTRECORD = "Playtoons record" probably
{"aide.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr01.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 01
- {"ptreco01.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide01.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr02.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 02
- {"ptreco02.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide02.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr03.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 03
- {"ptreco03.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide03.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr04.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 04
- {"ptreco04.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide04.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr05.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 05
- {"ptreco05.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide05.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr06.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 06
- {"ptreco06.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide06.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr07.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 07
- {"ptreco07.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide07.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr08.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 08
- {"ptreco08.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide08.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr09.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 09
- {"ptreco09.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide09.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr10.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 10
- {"ptreco10.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide10.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr11.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 11
- {"ptreco11.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide11.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr12.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 12
- {"ptreco12.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide12.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr13.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 13
- {"ptreco13.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide13.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr14.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 14
- {"ptreco14.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide14.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr15.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 15
- {"ptreco15.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide15.inf" , kSaveModeSave, 0, "construction game progress" },
- {"constr16.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 16
- {"ptreco16.inf" , kSaveModeSave, 0, "construction game progress" },
- {"aide16.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr01.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 01
+ {"DATA\\ptreco01.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide01.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr02.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 02
+ {"DATA\\ptreco02.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide02.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr03.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 03
+ {"DATA\\ptreco03.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide03.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr04.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 04
+ {"DATA\\ptreco04.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide04.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr05.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 05
+ {"DATA\\ptreco05.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide05.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr06.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 06
+ {"DATA\\ptreco06.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide06.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr07.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 07
+ {"DATA\\ptreco07.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide07.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr08.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 08
+ {"DATA\\ptreco08.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide08.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr09.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 09
+ {"DATA\\ptreco09.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide09.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr10.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 10
+ {"DATA\\ptreco10.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide10.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr11.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 11
+ {"DATA\\ptreco11.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide11.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr12.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 12
+ {"DATA\\ptreco12.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide12.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr13.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 13
+ {"DATA\\ptreco13.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide13.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr14.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 14
+ {"DATA\\ptreco14.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide14.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr15.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 15
+ {"DATA\\ptreco15.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide15.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\constr16.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 16
+ {"DATA\\ptreco16.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"DATA\\aide16.inf" , kSaveModeSave, 0, "construction game progress" },
// Adibou Applications 1-5
- {"Gsa01_01.inf", kSaveModeSave, 0, "app progress" }, // Child 01
- {"Gsa02_01.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_01.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_01.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_01.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_02.inf", kSaveModeSave, 0, "app progress" }, // Child 02
- {"Gsa02_02.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_02.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_02.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_02.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_03.inf", kSaveModeSave, 0, "app progress" }, // Child 03
- {"Gsa02_03.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_03.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_03.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_03.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_04.inf", kSaveModeSave, 0, "app progress" }, // Child 04
- {"Gsa02_04.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_04.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_04.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_04.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_05.inf", kSaveModeSave, 0, "app progress" }, // Child 05
- {"Gsa02_05.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_05.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_05.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_05.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_06.inf", kSaveModeSave, 0, "app progress" }, // Child 06
- {"Gsa02_06.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_06.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_06.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_06.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_07.inf", kSaveModeSave, 0, "app progress" }, // Child 07
- {"Gsa02_07.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_07.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_07.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_07.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_08.inf", kSaveModeSave, 0, "app progress" }, // Child 08
- {"Gsa02_08.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_08.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_08.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_08.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_09.inf", kSaveModeSave, 0, "app progress" }, // Child 09
- {"Gsa02_09.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_09.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_09.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_09.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_10.inf", kSaveModeSave, 0, "app progress" }, // Child 10
- {"Gsa02_10.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_10.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_10.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_10.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_11.inf", kSaveModeSave, 0, "app progress" }, // Child 11
- {"Gsa02_11.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_11.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_11.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_11.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_12.inf", kSaveModeSave, 0, "app progress" }, // Child 12
- {"Gsa02_12.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_12.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_12.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_12.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_13.inf", kSaveModeSave, 0, "app progress" }, // Child 13
- {"Gsa02_13.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_13.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_13.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_13.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_14.inf", kSaveModeSave, 0, "app progress" }, // Child 14
- {"Gsa02_14.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_14.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_14.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_14.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_15.inf", kSaveModeSave, 0, "app progress" }, // Child 15
- {"Gsa02_15.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_15.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_15.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_15.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa01_16.inf", kSaveModeSave, 0, "app progress" }, // Child 16
- {"Gsa02_16.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa03_16.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa04_16.inf", kSaveModeSave, 0, "app progress" },
- {"Gsa05_16.inf", kSaveModeSave, 0, "app progress" },
- {"memo_01.inf", kSaveModeSave, 0, "memo" }, // Child 01
- {"memo_02.inf", kSaveModeSave, 0, "memo" }, // Child 02
- {"memo_03.inf", kSaveModeSave, 0, "memo" }, // Child 03
- {"memo_04.inf", kSaveModeSave, 0, "memo" }, // Child 04
- {"memo_05.inf", kSaveModeSave, 0, "memo" }, // Child 05
- {"memo_06.inf", kSaveModeSave, 0, "memo" }, // Child 06
- {"memo_07.inf", kSaveModeSave, 0, "memo" }, // Child 07
- {"memo_08.inf", kSaveModeSave, 0, "memo" }, // Child 08
- {"memo_09.inf", kSaveModeSave, 0, "memo" }, // Child 09
- {"memo_10.inf", kSaveModeSave, 0, "memo" }, // Child 10
- {"memo_11.inf", kSaveModeSave, 0, "memo" }, // Child 11
- {"memo_12.inf", kSaveModeSave, 0, "memo" }, // Child 12
- {"memo_13.inf", kSaveModeSave, 0, "memo" }, // Child 13
- {"memo_14.inf", kSaveModeSave, 0, "memo" }, // Child 14
- {"memo_15.inf", kSaveModeSave, 0, "memo" }, // Child 15
- {"memo_16.inf", kSaveModeSave, 0, "memo" }, // Child 16
- {"diplo_01.inf", kSaveModeSave, 0, "diplo" }, // Child 01
- {"diplo_02.inf", kSaveModeSave, 0, "diplo" }, // Child 02
- {"diplo_03.inf", kSaveModeSave, 0, "diplo" }, // Child 03
- {"diplo_04.inf", kSaveModeSave, 0, "diplo" }, // Child 04
- {"diplo_05.inf", kSaveModeSave, 0, "diplo" }, // Child 05
- {"diplo_06.inf", kSaveModeSave, 0, "diplo" }, // Child 06
- {"diplo_07.inf", kSaveModeSave, 0, "diplo" }, // Child 07
- {"diplo_08.inf", kSaveModeSave, 0, "diplo" }, // Child 08
- {"diplo_09.inf", kSaveModeSave, 0, "diplo" }, // Child 09
- {"diplo_10.inf", kSaveModeSave, 0, "diplo" }, // Child 10
- {"diplo_11.inf", kSaveModeSave, 0, "diplo" }, // Child 11
- {"diplo_12.inf", kSaveModeSave, 0, "diplo" }, // Child 12
- {"diplo_13.inf", kSaveModeSave, 0, "diplo" }, // Child 13
- {"diplo_14.inf", kSaveModeSave, 0, "diplo" }, // Child 14
- {"diplo_15.inf", kSaveModeSave, 0, "diplo" }, // Child 15
- {"diplo_16.inf", kSaveModeSave, 0, "diplo" }, // Child 16
- {"appli_01.inf", kSaveModeSave, 0, "app info" },
- {"appli_02.inf", kSaveModeSave, 0, "app info" },
- {"appli_03.inf", kSaveModeSave, 0, "app info" },
- {"appli_04.inf", kSaveModeSave, 0, "app info" },
- {"appli_05.inf", kSaveModeSave, 0, "app info" },
- {"crite_01.inf", kSaveModeSave, 0, "app info" },
- {"crite_02.inf", kSaveModeSave, 0, "app info" },
- {"crite_03.inf", kSaveModeSave, 0, "app info" },
- {"crite_04.inf", kSaveModeSave, 0, "app info" },
- {"crite_05.inf", kSaveModeSave, 0, "app info" },
- {"exo_01.inf", kSaveModeSave, 0, "app info" },
- {"exo_02.inf", kSaveModeSave, 0, "app info" },
- {"exo_03.inf", kSaveModeSave, 0, "app info" },
- {"exo_04.inf", kSaveModeSave, 0, "app info" },
- {"exo_05.inf", kSaveModeSave, 0, "app info" },
- {"ico_01.inf", kSaveModeSave, 0, "app info" },
- {"ico_02.inf", kSaveModeSave, 0, "app info" },
- {"ico_03.inf", kSaveModeSave, 0, "app info" },
- {"ico_04.inf", kSaveModeSave, 0, "app info" },
- {"ico_05.inf", kSaveModeSave, 0, "app info" },
- {"applis.inf", kSaveModeSave, 0, "app info" },
- {"lance.inf", kSaveModeSave, 0, "app info" },
- {"retour.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\Gsa01_01.inf", kSaveModeSave, 0, "app progress" }, // Child 01
+ {"DATA\\Gsa02_01.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_01.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_01.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_01.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_02.inf", kSaveModeSave, 0, "app progress" }, // Child 02
+ {"DATA\\Gsa02_02.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_02.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_02.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_02.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_03.inf", kSaveModeSave, 0, "app progress" }, // Child 03
+ {"DATA\\Gsa02_03.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_03.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_03.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_03.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_04.inf", kSaveModeSave, 0, "app progress" }, // Child 04
+ {"DATA\\Gsa02_04.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_04.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_04.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_04.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_05.inf", kSaveModeSave, 0, "app progress" }, // Child 05
+ {"DATA\\Gsa02_05.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_05.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_05.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_05.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_06.inf", kSaveModeSave, 0, "app progress" }, // Child 06
+ {"DATA\\Gsa02_06.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_06.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_06.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_06.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_07.inf", kSaveModeSave, 0, "app progress" }, // Child 07
+ {"DATA\\Gsa02_07.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_07.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_07.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_07.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_08.inf", kSaveModeSave, 0, "app progress" }, // Child 08
+ {"DATA\\Gsa02_08.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_08.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_08.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_08.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_09.inf", kSaveModeSave, 0, "app progress" }, // Child 09
+ {"DATA\\Gsa02_09.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_09.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_09.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_09.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_10.inf", kSaveModeSave, 0, "app progress" }, // Child 10
+ {"DATA\\Gsa02_10.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_10.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_10.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_10.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_11.inf", kSaveModeSave, 0, "app progress" }, // Child 11
+ {"DATA\\Gsa02_11.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_11.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_11.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_11.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_12.inf", kSaveModeSave, 0, "app progress" }, // Child 12
+ {"DATA\\Gsa02_12.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_12.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_12.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_12.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_13.inf", kSaveModeSave, 0, "app progress" }, // Child 13
+ {"DATA\\Gsa02_13.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_13.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_13.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_13.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_14.inf", kSaveModeSave, 0, "app progress" }, // Child 14
+ {"DATA\\Gsa02_14.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_14.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_14.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_14.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_15.inf", kSaveModeSave, 0, "app progress" }, // Child 15
+ {"DATA\\Gsa02_15.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_15.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_15.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_15.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa01_16.inf", kSaveModeSave, 0, "app progress" }, // Child 16
+ {"DATA\\Gsa02_16.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa03_16.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa04_16.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\Gsa05_16.inf", kSaveModeSave, 0, "app progress" },
+ {"DATA\\memo_01.inf", kSaveModeSave, 0, "memo" }, // Child 01
+ {"DATA\\memo_02.inf", kSaveModeSave, 0, "memo" }, // Child 02
+ {"DATA\\memo_03.inf", kSaveModeSave, 0, "memo" }, // Child 03
+ {"DATA\\memo_04.inf", kSaveModeSave, 0, "memo" }, // Child 04
+ {"DATA\\memo_05.inf", kSaveModeSave, 0, "memo" }, // Child 05
+ {"DATA\\memo_06.inf", kSaveModeSave, 0, "memo" }, // Child 06
+ {"DATA\\memo_07.inf", kSaveModeSave, 0, "memo" }, // Child 07
+ {"DATA\\memo_08.inf", kSaveModeSave, 0, "memo" }, // Child 08
+ {"DATA\\memo_09.inf", kSaveModeSave, 0, "memo" }, // Child 09
+ {"DATA\\memo_10.inf", kSaveModeSave, 0, "memo" }, // Child 10
+ {"DATA\\memo_11.inf", kSaveModeSave, 0, "memo" }, // Child 11
+ {"DATA\\memo_12.inf", kSaveModeSave, 0, "memo" }, // Child 12
+ {"DATA\\memo_13.inf", kSaveModeSave, 0, "memo" }, // Child 13
+ {"DATA\\memo_14.inf", kSaveModeSave, 0, "memo" }, // Child 14
+ {"DATA\\memo_15.inf", kSaveModeSave, 0, "memo" }, // Child 15
+ {"DATA\\memo_16.inf", kSaveModeSave, 0, "memo" }, // Child 16
+ {"DATA\\diplo_01.inf", kSaveModeSave, 0, "diplo" }, // Child 01
+ {"DATA\\diplo_02.inf", kSaveModeSave, 0, "diplo" }, // Child 02
+ {"DATA\\diplo_03.inf", kSaveModeSave, 0, "diplo" }, // Child 03
+ {"DATA\\diplo_04.inf", kSaveModeSave, 0, "diplo" }, // Child 04
+ {"DATA\\diplo_05.inf", kSaveModeSave, 0, "diplo" }, // Child 05
+ {"DATA\\diplo_06.inf", kSaveModeSave, 0, "diplo" }, // Child 06
+ {"DATA\\diplo_07.inf", kSaveModeSave, 0, "diplo" }, // Child 07
+ {"DATA\\diplo_08.inf", kSaveModeSave, 0, "diplo" }, // Child 08
+ {"DATA\\diplo_09.inf", kSaveModeSave, 0, "diplo" }, // Child 09
+ {"DATA\\diplo_10.inf", kSaveModeSave, 0, "diplo" }, // Child 10
+ {"DATA\\diplo_11.inf", kSaveModeSave, 0, "diplo" }, // Child 11
+ {"DATA\\diplo_12.inf", kSaveModeSave, 0, "diplo" }, // Child 12
+ {"DATA\\diplo_13.inf", kSaveModeSave, 0, "diplo" }, // Child 13
+ {"DATA\\diplo_14.inf", kSaveModeSave, 0, "diplo" }, // Child 14
+ {"DATA\\diplo_15.inf", kSaveModeSave, 0, "diplo" }, // Child 15
+ {"DATA\\diplo_16.inf", kSaveModeSave, 0, "diplo" }, // Child 16
+ {"DATA\\appli_01.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\appli_02.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\appli_03.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\appli_04.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\appli_05.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\crite_01.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\crite_02.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\crite_03.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\crite_04.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\crite_05.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\exo_01.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\exo_02.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\exo_03.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\exo_04.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\exo_05.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\ico_01.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\ico_02.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\ico_03.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\ico_04.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\ico_05.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\applis.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\lance.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\retour.inf", kSaveModeSave, 0, "app info" },
// Adibou2 saved drawings (up to 12)
// Child1
- {"cart0101.inf", kSaveModeSave, 0, "drawing" },
- {"cart0201.inf", kSaveModeSave, 0, "drawing" },
- {"cart0301.inf", kSaveModeSave, 0, "drawing" },
- {"cart0401.inf", kSaveModeSave, 0, "drawing" },
- {"cart0501.inf", kSaveModeSave, 0, "drawing" },
- {"cart0601.inf", kSaveModeSave, 0, "drawing" },
- {"cart0701.inf", kSaveModeSave, 0, "drawing" },
- {"cart0801.inf", kSaveModeSave, 0, "drawing" },
- {"cart0901.inf", kSaveModeSave, 0, "drawing" },
- {"cart1001.inf", kSaveModeSave, 0, "drawing" },
- {"cart1101.inf", kSaveModeSave, 0, "drawing" },
- {"cart1201.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett01.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr01.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod01.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur01.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur01.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud01.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable01.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0101.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0201.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0301.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0401.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0501.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0601.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0701.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0801.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0901.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1001.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1101.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1201.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett01.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr01.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod01.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur01.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur01.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud01.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable01.inf", kSaveModeSave, 0, "poster" },
// Child2
- {"cart0102.inf", kSaveModeSave, 0, "drawing" },
- {"cart0202.inf", kSaveModeSave, 0, "drawing" },
- {"cart0302.inf", kSaveModeSave, 0, "drawing" },
- {"cart0402.inf", kSaveModeSave, 0, "drawing" },
- {"cart0502.inf", kSaveModeSave, 0, "drawing" },
- {"cart0602.inf", kSaveModeSave, 0, "drawing" },
- {"cart0702.inf", kSaveModeSave, 0, "drawing" },
- {"cart0802.inf", kSaveModeSave, 0, "drawing" },
- {"cart0902.inf", kSaveModeSave, 0, "drawing" },
- {"cart1002.inf", kSaveModeSave, 0, "drawing" },
- {"cart1102.inf", kSaveModeSave, 0, "drawing" },
- {"cart1202.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett02.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr02.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod02.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur02.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur02.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud02.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable02.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0102.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0202.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0302.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0402.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0502.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0602.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0702.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0802.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0902.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1002.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1102.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1202.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett02.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr02.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod02.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur02.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur02.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud02.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable02.inf", kSaveModeSave, 0, "poster" },
// Child3
- {"cart0103.inf", kSaveModeSave, 0, "drawing" },
- {"cart0203.inf", kSaveModeSave, 0, "drawing" },
- {"cart0303.inf", kSaveModeSave, 0, "drawing" },
- {"cart0403.inf", kSaveModeSave, 0, "drawing" },
- {"cart0503.inf", kSaveModeSave, 0, "drawing" },
- {"cart0603.inf", kSaveModeSave, 0, "drawing" },
- {"cart0703.inf", kSaveModeSave, 0, "drawing" },
- {"cart0803.inf", kSaveModeSave, 0, "drawing" },
- {"cart0903.inf", kSaveModeSave, 0, "drawing" },
- {"cart1003.inf", kSaveModeSave, 0, "drawing" },
- {"cart1103.inf", kSaveModeSave, 0, "drawing" },
- {"cart1203.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett03.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr03.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod03.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur03.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur03.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud03.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable03.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0103.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0203.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0303.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0403.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0503.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0603.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0703.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0803.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0903.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1003.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1103.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1203.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett03.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr03.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod03.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur03.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur03.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud03.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable03.inf", kSaveModeSave, 0, "poster" },
// Child4
- {"cart0104.inf", kSaveModeSave, 0, "drawing" },
- {"cart0204.inf", kSaveModeSave, 0, "drawing" },
- {"cart0304.inf", kSaveModeSave, 0, "drawing" },
- {"cart0404.inf", kSaveModeSave, 0, "drawing" },
- {"cart0504.inf", kSaveModeSave, 0, "drawing" },
- {"cart0604.inf", kSaveModeSave, 0, "drawing" },
- {"cart0704.inf", kSaveModeSave, 0, "drawing" },
- {"cart0804.inf", kSaveModeSave, 0, "drawing" },
- {"cart0904.inf", kSaveModeSave, 0, "drawing" },
- {"cart1004.inf", kSaveModeSave, 0, "drawing" },
- {"cart1104.inf", kSaveModeSave, 0, "drawing" },
- {"cart1204.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett04.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr04.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod04.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur04.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur04.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud04.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable04.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0104.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0204.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0304.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0404.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0504.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0604.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0704.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0804.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0904.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1004.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1104.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1204.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett04.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr04.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod04.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur04.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur04.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud04.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable04.inf", kSaveModeSave, 0, "poster" },
// Child5
- {"cart0105.inf", kSaveModeSave, 0, "drawing" },
- {"cart0205.inf", kSaveModeSave, 0, "drawing" },
- {"cart0305.inf", kSaveModeSave, 0, "drawing" },
- {"cart0405.inf", kSaveModeSave, 0, "drawing" },
- {"cart0505.inf", kSaveModeSave, 0, "drawing" },
- {"cart0605.inf", kSaveModeSave, 0, "drawing" },
- {"cart0705.inf", kSaveModeSave, 0, "drawing" },
- {"cart0805.inf", kSaveModeSave, 0, "drawing" },
- {"cart0905.inf", kSaveModeSave, 0, "drawing" },
- {"cart1005.inf", kSaveModeSave, 0, "drawing" },
- {"cart1105.inf", kSaveModeSave, 0, "drawing" },
- {"cart1205.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett05.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr05.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod05.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur05.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur05.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud05.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable05.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0105.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0205.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0305.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0405.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0505.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0605.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0705.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0805.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0905.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1005.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1105.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1205.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett05.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr05.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod05.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur05.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur05.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud05.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable05.inf", kSaveModeSave, 0, "poster" },
// Child6
- {"cart0106.inf", kSaveModeSave, 0, "drawing" },
- {"cart0206.inf", kSaveModeSave, 0, "drawing" },
- {"cart0306.inf", kSaveModeSave, 0, "drawing" },
- {"cart0406.inf", kSaveModeSave, 0, "drawing" },
- {"cart0506.inf", kSaveModeSave, 0, "drawing" },
- {"cart0606.inf", kSaveModeSave, 0, "drawing" },
- {"cart0706.inf", kSaveModeSave, 0, "drawing" },
- {"cart0806.inf", kSaveModeSave, 0, "drawing" },
- {"cart0906.inf", kSaveModeSave, 0, "drawing" },
- {"cart1006.inf", kSaveModeSave, 0, "drawing" },
- {"cart1106.inf", kSaveModeSave, 0, "drawing" },
- {"cart1206.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett06.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr06.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod06.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur06.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur06.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud06.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable06.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0106.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0206.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0306.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0406.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0506.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0606.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0706.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0806.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0906.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1006.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1106.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1206.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett06.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr06.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod06.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur06.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur06.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud06.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable06.inf", kSaveModeSave, 0, "poster" },
// Child7
- {"cart0107.inf", kSaveModeSave, 0, "drawing" },
- {"cart0207.inf", kSaveModeSave, 0, "drawing" },
- {"cart0307.inf", kSaveModeSave, 0, "drawing" },
- {"cart0407.inf", kSaveModeSave, 0, "drawing" },
- {"cart0507.inf", kSaveModeSave, 0, "drawing" },
- {"cart0607.inf", kSaveModeSave, 0, "drawing" },
- {"cart0707.inf", kSaveModeSave, 0, "drawing" },
- {"cart0807.inf", kSaveModeSave, 0, "drawing" },
- {"cart0907.inf", kSaveModeSave, 0, "drawing" },
- {"cart1007.inf", kSaveModeSave, 0, "drawing" },
- {"cart1107.inf", kSaveModeSave, 0, "drawing" },
- {"cart1207.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett07.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr07.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod07.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur07.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur07.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud07.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable07.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0107.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0207.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0307.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0407.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0507.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0607.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0707.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0807.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0907.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1007.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1107.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1207.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett07.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr07.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod07.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur07.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur07.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud07.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable07.inf", kSaveModeSave, 0, "poster" },
// Child8
- {"cart0108.inf", kSaveModeSave, 0, "drawing" },
- {"cart0208.inf", kSaveModeSave, 0, "drawing" },
- {"cart0308.inf", kSaveModeSave, 0, "drawing" },
- {"cart0408.inf", kSaveModeSave, 0, "drawing" },
- {"cart0508.inf", kSaveModeSave, 0, "drawing" },
- {"cart0608.inf", kSaveModeSave, 0, "drawing" },
- {"cart0708.inf", kSaveModeSave, 0, "drawing" },
- {"cart0808.inf", kSaveModeSave, 0, "drawing" },
- {"cart0908.inf", kSaveModeSave, 0, "drawing" },
- {"cart1008.inf", kSaveModeSave, 0, "drawing" },
- {"cart1108.inf", kSaveModeSave, 0, "drawing" },
- {"cart1208.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett08.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr08.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod08.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur08.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur08.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud08.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable08.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0108.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0208.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0308.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0408.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0508.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0608.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0708.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0808.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0908.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1008.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1108.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1208.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett08.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr08.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod08.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur08.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur08.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud08.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable08.inf", kSaveModeSave, 0, "poster" },
// Child9
- {"cart0109.inf", kSaveModeSave, 0, "drawing" },
- {"cart0209.inf", kSaveModeSave, 0, "drawing" },
- {"cart0309.inf", kSaveModeSave, 0, "drawing" },
- {"cart0409.inf", kSaveModeSave, 0, "drawing" },
- {"cart0509.inf", kSaveModeSave, 0, "drawing" },
- {"cart0609.inf", kSaveModeSave, 0, "drawing" },
- {"cart0709.inf", kSaveModeSave, 0, "drawing" },
- {"cart0809.inf", kSaveModeSave, 0, "drawing" },
- {"cart0909.inf", kSaveModeSave, 0, "drawing" },
- {"cart1009.inf", kSaveModeSave, 0, "drawing" },
- {"cart1109.inf", kSaveModeSave, 0, "drawing" },
- {"cart1209.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett09.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr09.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod09.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur09.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur09.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud09.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable09.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0109.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0209.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0309.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0409.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0509.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0609.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0709.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0809.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0909.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1009.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1109.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1209.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett09.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr09.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod09.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur09.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur09.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud09.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable09.inf", kSaveModeSave, 0, "poster" },
// Child10
- {"cart0110.inf", kSaveModeSave, 0, "drawing" },
- {"cart0210.inf", kSaveModeSave, 0, "drawing" },
- {"cart0310.inf", kSaveModeSave, 0, "drawing" },
- {"cart0410.inf", kSaveModeSave, 0, "drawing" },
- {"cart0510.inf", kSaveModeSave, 0, "drawing" },
- {"cart0610.inf", kSaveModeSave, 0, "drawing" },
- {"cart0710.inf", kSaveModeSave, 0, "drawing" },
- {"cart0810.inf", kSaveModeSave, 0, "drawing" },
- {"cart0910.inf", kSaveModeSave, 0, "drawing" },
- {"cart1010.inf", kSaveModeSave, 0, "drawing" },
- {"cart1110.inf", kSaveModeSave, 0, "drawing" },
- {"cart1210.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett10.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr10.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod10.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur10.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur10.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud10.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable10.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0110.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0210.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0310.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0410.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0510.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0610.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0710.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0810.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0910.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1010.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1110.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1210.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett10.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr10.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod10.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur10.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur10.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud10.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable10.inf", kSaveModeSave, 0, "poster" },
// Child11
- {"cart0111.inf", kSaveModeSave, 0, "drawing" },
- {"cart0211.inf", kSaveModeSave, 0, "drawing" },
- {"cart0311.inf", kSaveModeSave, 0, "drawing" },
- {"cart0411.inf", kSaveModeSave, 0, "drawing" },
- {"cart0511.inf", kSaveModeSave, 0, "drawing" },
- {"cart0611.inf", kSaveModeSave, 0, "drawing" },
- {"cart0711.inf", kSaveModeSave, 0, "drawing" },
- {"cart0811.inf", kSaveModeSave, 0, "drawing" },
- {"cart0911.inf", kSaveModeSave, 0, "drawing" },
- {"cart1011.inf", kSaveModeSave, 0, "drawing" },
- {"cart1111.inf", kSaveModeSave, 0, "drawing" },
- {"cart1211.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett11.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr11.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod11.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur11.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur11.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud11.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable11.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0111.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0211.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0311.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0411.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0511.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0611.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0711.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0811.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0911.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1011.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1111.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1211.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett11.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr11.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod11.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur11.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur11.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud11.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable11.inf", kSaveModeSave, 0, "poster" },
// Child12
- {"cart0112.inf", kSaveModeSave, 0, "drawing" },
- {"cart0212.inf", kSaveModeSave, 0, "drawing" },
- {"cart0312.inf", kSaveModeSave, 0, "drawing" },
- {"cart0412.inf", kSaveModeSave, 0, "drawing" },
- {"cart0512.inf", kSaveModeSave, 0, "drawing" },
- {"cart0612.inf", kSaveModeSave, 0, "drawing" },
- {"cart0712.inf", kSaveModeSave, 0, "drawing" },
- {"cart0812.inf", kSaveModeSave, 0, "drawing" },
- {"cart0912.inf", kSaveModeSave, 0, "drawing" },
- {"cart1012.inf", kSaveModeSave, 0, "drawing" },
- {"cart1112.inf", kSaveModeSave, 0, "drawing" },
- {"cart1212.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett12.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr12.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod12.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur12.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur12.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud12.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable12.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0112.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0212.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0312.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0412.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0512.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0612.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0712.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0812.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0912.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1012.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1112.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1212.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett12.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr12.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod12.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur12.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur12.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud12.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable12.inf", kSaveModeSave, 0, "poster" },
// Child13
- {"cart0113.inf", kSaveModeSave, 0, "drawing" },
- {"cart0213.inf", kSaveModeSave, 0, "drawing" },
- {"cart0313.inf", kSaveModeSave, 0, "drawing" },
- {"cart0413.inf", kSaveModeSave, 0, "drawing" },
- {"cart0513.inf", kSaveModeSave, 0, "drawing" },
- {"cart0613.inf", kSaveModeSave, 0, "drawing" },
- {"cart0713.inf", kSaveModeSave, 0, "drawing" },
- {"cart0813.inf", kSaveModeSave, 0, "drawing" },
- {"cart0913.inf", kSaveModeSave, 0, "drawing" },
- {"cart1013.inf", kSaveModeSave, 0, "drawing" },
- {"cart1113.inf", kSaveModeSave, 0, "drawing" },
- {"cart1213.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett13.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr13.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod13.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur13.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable13.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0113.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0213.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0313.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0413.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0513.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0613.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0713.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0813.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0913.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1013.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1113.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1213.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett13.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr13.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod13.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur13.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable13.inf", kSaveModeSave, 0, "poster" },
// Child14
- {"cart0114.inf", kSaveModeSave, 0, "drawing" },
- {"cart0214.inf", kSaveModeSave, 0, "drawing" },
- {"cart0314.inf", kSaveModeSave, 0, "drawing" },
- {"cart0414.inf", kSaveModeSave, 0, "drawing" },
- {"cart0514.inf", kSaveModeSave, 0, "drawing" },
- {"cart0614.inf", kSaveModeSave, 0, "drawing" },
- {"cart0714.inf", kSaveModeSave, 0, "drawing" },
- {"cart0814.inf", kSaveModeSave, 0, "drawing" },
- {"cart0914.inf", kSaveModeSave, 0, "drawing" },
- {"cart1014.inf", kSaveModeSave, 0, "drawing" },
- {"cart1114.inf", kSaveModeSave, 0, "drawing" },
- {"cart1214.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett14.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr14.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod14.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur14.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable14.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0114.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0214.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0314.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0414.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0514.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0614.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0714.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0814.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0914.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1014.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1114.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1214.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett14.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr14.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod14.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur14.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable14.inf", kSaveModeSave, 0, "poster" },
// Child15
- {"cart0115.inf", kSaveModeSave, 0, "drawing" },
- {"cart0215.inf", kSaveModeSave, 0, "drawing" },
- {"cart0315.inf", kSaveModeSave, 0, "drawing" },
- {"cart0415.inf", kSaveModeSave, 0, "drawing" },
- {"cart0515.inf", kSaveModeSave, 0, "drawing" },
- {"cart0615.inf", kSaveModeSave, 0, "drawing" },
- {"cart0715.inf", kSaveModeSave, 0, "drawing" },
- {"cart0815.inf", kSaveModeSave, 0, "drawing" },
- {"cart0915.inf", kSaveModeSave, 0, "drawing" },
- {"cart1015.inf", kSaveModeSave, 0, "drawing" },
- {"cart1115.inf", kSaveModeSave, 0, "drawing" },
- {"cart1215.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett15.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr15.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod15.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur15.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable15.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0115.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0215.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0315.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0415.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0515.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0615.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0715.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0815.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0915.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1015.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1115.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1215.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett15.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr15.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod15.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur15.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable15.inf", kSaveModeSave, 0, "poster" },
// Child16
- {"cart0116.inf", kSaveModeSave, 0, "drawing" },
- {"cart0216.inf", kSaveModeSave, 0, "drawing" },
- {"cart0316.inf", kSaveModeSave, 0, "drawing" },
- {"cart0416.inf", kSaveModeSave, 0, "drawing" },
- {"cart0516.inf", kSaveModeSave, 0, "drawing" },
- {"cart0616.inf", kSaveModeSave, 0, "drawing" },
- {"cart0716.inf", kSaveModeSave, 0, "drawing" },
- {"cart0816.inf", kSaveModeSave, 0, "drawing" },
- {"cart0916.inf", kSaveModeSave, 0, "drawing" },
- {"cart1016.inf", kSaveModeSave, 0, "drawing" },
- {"cart1116.inf", kSaveModeSave, 0, "drawing" },
- {"cart1216.inf", kSaveModeSave, 0, "drawing" },
- {"pal00_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal01_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal02_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal03_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal04_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal05_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal06_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal07_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal08_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal09_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal10_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"pal11_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"palett16.inf", kSaveModeSave, 0, "drawing palette" },
- {"plettr16.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"pgatod16.inf", kSaveModeSave, 0, "photo of cake" },
- {"pfleur16.inf", kSaveModeSave, 0, "photo of flowers" },
- {"mfleur16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mfleud16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"mtable16.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0116.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0216.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0316.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0416.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0516.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0616.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0716.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0816.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart0916.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1016.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1116.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\cart1216.inf", kSaveModeSave, 0, "drawing" },
+ {"DATA\\pal00_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal01_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal02_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal03_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal04_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal05_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal06_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal07_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal08_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal09_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal10_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\pal11_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
+ {"DATA\\palett16.inf", kSaveModeSave, 0, "drawing palette" },
+ {"DATA\\plettr16.inf", kSaveModeSave, 0, "drawing in mailbox" },
+ {"DATA\\pgatod16.inf", kSaveModeSave, 0, "photo of cake" },
+ {"DATA\\pfleur16.inf", kSaveModeSave, 0, "photo of flowers" },
+ {"DATA\\mfleur16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mfleud16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
+ {"DATA\\mtable16.inf", kSaveModeSave, 0, "poster" },
{"adibou.pal", kSaveModeSave, 0, "drawing on floppy disk" },
{"adibour.pal", kSaveModeSave, 0, "drawing on floppy disk (thumbnail)" },
@@ -1202,7 +1208,10 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
}
_saveFiles[index++].handler = _childrenHandler = new FakeFileHandler(_vm);
- _saveFiles[index++].handler = _debilHandler = new FakeFileHandler(_vm);
+ for (int i = 0; i < 4; ++i) {
+ _saveFiles[index++].handler = _debilHandler[0] = new FakeFileHandler(_vm);
+ }
+
_saveFiles[index++].handler = _configHandler = new GameFileHandler(_vm, targetName, "cfg");
for (uint32 i = 0; i < kChildrenCount; i++)
@@ -1348,7 +1357,8 @@ SaveLoad_v7::~SaveLoad_v7() {
delete _addy4BaseHandler[i];
delete _configHandler;
- delete _debilHandler;
+ for (int i = 0; i < 4; i++)
+ delete _debilHandler[i];
delete _childrenHandler;
for (uint32 i = 0; i < kChildrenCount; i++)
@@ -1409,20 +1419,16 @@ SaveLoad_v7::~SaveLoad_v7() {
}
const SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) const {
- fileName = stripPath(fileName);
+ // First, search for full path match
for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
return &_saveFiles[i];
- return nullptr;
-}
-
-SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) {
+ // If no match has been found, search for a filename-only match, ignoring paths
fileName = stripPath(fileName);
-
for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
- if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
+ if (!scumm_stricmp(fileName, stripPath(_saveFiles[i].sourceName)))
return &_saveFiles[i];
return nullptr;
@@ -1455,4 +1461,18 @@ SaveLoad::SaveMode SaveLoad_v7::getSaveMode(const char *fileName) const {
return kSaveModeNone;
}
+Common::List<Common::String> SaveLoad_v7::getFilesMatchingPattern(const char *pattern) const {
+ Common::List<Common::String> files;
+ Common::String patternEscaped = pattern;
+ Common::replace(patternEscaped, "\\", "\\\\");
+
+ for (const SaveFile &saveFile : _saveFiles) {
+ // Full path match only
+ if (Common::matchString(saveFile.sourceName, patternEscaped.c_str(), true))
+ files.push_back(saveFile.sourceName);
+ }
+
+ return files;
+}
+
} // End of namespace Gob
Commit: baf76dd2d7faf62f4d86377eaaaad16af8a511f0
https://github.com/scummvm/scummvm/commit/baf76dd2d7faf62f4d86377eaaaad16af8a511f0
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
GOB: increase Variables stack size (600 -> 1000)
Previous max size (600) can be reached in some Adibou2 scripts
Changed paths:
engines/gob/inter.cpp
diff --git a/engines/gob/inter.cpp b/engines/gob/inter.cpp
index c0145500a7a..c38a5361d5c 100644
--- a/engines/gob/inter.cpp
+++ b/engines/gob/inter.cpp
@@ -35,7 +35,7 @@
namespace Gob {
-Inter::Inter(GobEngine *vm) : _vm(vm), _varStack(600) {
+Inter::Inter(GobEngine *vm) : _vm(vm), _varStack(1000) {
_terminate = 0;
_break = false;
Commit: d9951de61668d6c4d067c5d6d7e27d94c962588c
https://github.com/scummvm/scummvm/commit/d9951de61668d6c4d067c5d6d7e27d94c962588c
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
GOB: fix a crash in o7_readData when filename is empty
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index d38169f6cb1..1e852883dd3 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -1241,7 +1241,7 @@ void Inter_v7::o7_readData(OpFuncParams ¶ms) {
byte *buf = _variables->getAddressOff8(dataVar);
- if (file[0] == 0) {
+ if (file.empty()) {
WRITE_VAR(1, size);
return;
}
Commit: 33e13b2ba3e3541cb0708aaf58217474640190c4
https://github.com/scummvm/scummvm/commit/33e13b2ba3e3541cb0708aaf58217474640190c4
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:31+01:00
Commit Message:
GOB: workaround a bug in Adibou2 scripts after character deletion
Characters deletion in Adibou2 work by deleting all files matching with character number as suffix, but this removes also some unrelated save files about installed applications
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 1e852883dd3..b8c55fd4b99 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -564,6 +564,21 @@ void Inter_v7::o7_deleteFile() {
debugC(2, kDebugFileIO, "Delete file \"%s\"", file.c_str());
}
+ if (_vm->getGameType() == kGameTypeAdibou2
+ && isPattern
+ && file.hasPrefix("DATA\\??????")) {
+ // WORKAROUND a bug in original game: files APPLI_<N>.INF and CRITE_<N>.INF should not be deleted when removing character <N>
+ // Those files contain *application <N>* data, not "character <N>" data
+ for (Common::List<Common::String>::iterator it = files.begin(); it != files.end(); ++it) {
+ if (it->matchString("DATA\\\\appli_??.inf", true) || it->matchString("DATA\\\\crite_??.inf", true)) {
+ debugC(2, kDebugFileIO, "o7_deleteFile: ignoring deletion of file \"%s\" when processing pattern %s (delete character bug workaround)",
+ it->c_str(),
+ file.c_str());
+ it = files.reverse_erase(it);
+ }
+ }
+ }
+
for (const Common::String &fileToDelete : files) {
SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(fileToDelete.c_str());
if (mode == SaveLoad::kSaveModeSave) {
Commit: 4a6520c6703964deb8bbed67dc9191e0449fc01d
https://github.com/scummvm/scummvm/commit/4a6520c6703964deb8bbed67dc9191e0449fc01d
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:32+01:00
Commit Message:
GOB: fix exercises completion details in Adibou2 tree
Changed paths:
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 8ef89e50dc9..70055b3758c 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -1050,6 +1050,7 @@ protected:
DrawingOnFloppyDiskHandler *_adibou2DrawingOnFloppyDiskHandler;
DrawingOnFloppyDiskHandler *_adibou2DrawingThumbnailOnFloppyDiskHandler;
FakeFileHandler *_adibou2TestDobHandler;
+ FakeFileHandler *_adibou2ExerciseListHandler;
FakeFileHandler *_addy4BaseHandler[2];
FakeFileHandler *_addy4GrundschuleHandler[11];
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index e4adf5cd613..6491f97288c 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -815,6 +815,8 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"adibour.pal", kSaveModeSave, 0, "drawing on floppy disk (thumbnail)" },
{"test.dob", kSaveModeSave, 0, "test floppy disk file" },
+ {"TEMP\\liste.$$$", kSaveModeSave, 0, "exercise list" },
+
// Addy 4 Base
{"config00.inf", kSaveModeSave, nullptr, nullptr },
{"statev00.inf", kSaveModeSave, nullptr, nullptr },
@@ -1341,6 +1343,7 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
writer,
true);
_saveFiles[index++].handler = _adibou2TestDobHandler = new FakeFileHandler(_vm);
+ _saveFiles[index++].handler = _adibou2ExerciseListHandler = new FakeFileHandler(_vm);
for (int i = 0; i < 2; i++)
_saveFiles[index++].handler = _addy4BaseHandler[i] = new FakeFileHandler(_vm);
@@ -1416,6 +1419,7 @@ SaveLoad_v7::~SaveLoad_v7() {
delete _adibou2DrawingOnFloppyDiskHandler;
delete _adibou2DrawingThumbnailOnFloppyDiskHandler;
delete _adibou2TestDobHandler;
+ delete _adibou2ExerciseListHandler;
}
const SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) const {
Commit: 0fcbc34266a37c7d04b2325da8a4839d1c473bde
https://github.com/scummvm/scummvm/commit/0fcbc34266a37c7d04b2325da8a4839d1c473bde
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:32+01:00
Commit Message:
GOB: fix regression in Adibou2 paths handling
We still need to call getFile() on paths to remove special tokens (@:, <ALLCD>...), but we do not strip paths anymore.
Changed paths:
engines/gob/inter.h
engines/gob/inter_playtoons.cpp
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index b50bc613a60..6b684c6732b 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -663,7 +663,7 @@ protected:
void oPlaytoons_copyFile();
void oPlaytoons_openItk();
- Common::String getFile(const char *path);
+ Common::String getFile(const char *path, bool stripPath = true);
bool readSprite(Common::String file, int32 dataVar, int32 size, int32 offset);
};
diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp
index 6d2f50a9768..096440dd9a5 100644
--- a/engines/gob/inter_playtoons.cpp
+++ b/engines/gob/inter_playtoons.cpp
@@ -480,7 +480,7 @@ void Inter_Playtoons::oPlaytoons_openItk() {
_vm->_dataIO->openArchive(file, false);
}
-Common::String Inter_Playtoons::getFile(const char *path) {
+Common::String Inter_Playtoons::getFile(const char *path, bool stripPath) {
const char *orig = path;
if (!strncmp(path, "@:\\", 3))
@@ -494,10 +494,12 @@ Common::String Inter_Playtoons::getFile(const char *path) {
else if (!strncmp(path, "<ALLCD>", 7))
path += 7;
- const char *backslash = strrchr(path, '\\');
- if (backslash)
- path = backslash + 1;
-
+ if (stripPath)
+ {
+ const char *backslash = strrchr(path, '\\');
+ if (backslash)
+ path = backslash + 1;
+ }
Common::String newPath = path;
// Comma in filenames tells this engine that the file handle may be reused for next read/write operations
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index b8c55fd4b99..d84d74b7aa0 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -538,12 +538,14 @@ void Inter_v7::o7_copyFile() {
debugC(2, kDebugFileIO, "Copy file \"%s\" to \"%s", path1.c_str(), path2.c_str());
- if (path1.equalsIgnoreCase(path2)) {
+ Common::String file1 = getFile(path1.c_str(), false);
+ Common::String file2 = getFile(path2.c_str(), false);
+ if (file1.equalsIgnoreCase(file2)) {
warning("o7_copyFile(): \"%s\" == \"%s\"", path1.c_str(), path2.c_str());
return;
}
- copyFile(path1, path2);
+ copyFile(file1, file2);
}
void Inter_v7::o7_deleteFile() {
@@ -594,17 +596,20 @@ void Inter_v7::o7_moveFile() {
Common::String path1 = _vm->_game->_script->evalString();
Common::String path2 = _vm->_game->_script->evalString();
- if (path1.equalsIgnoreCase(path2)) {
+ Common::String file1 = getFile(path1.c_str(), false);
+ Common::String file2 = getFile(path2.c_str(), false);
+
+ if (file1.equalsIgnoreCase(file2)) {
warning("o7_moveFile(): \"%s\" == \"%s\"", path1.c_str(), path2.c_str());
return;
}
- copyFile(path1, path2);
- SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(path1.c_str());
+ copyFile(file1, file2);
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file1.c_str());
if (mode == SaveLoad::kSaveModeSave) {
- _vm->_saveLoad->deleteFile(path1.c_str());
+ _vm->_saveLoad->deleteFile(file1.c_str());
} else if (mode == SaveLoad::kSaveModeNone)
- warning("Attempted to delete file \"%s\" while moving it to \"%s\"", path1.c_str(), path2.c_str());
+ warning("Attempted to delete file \"%s\" while moving it to \"%s\"", file1.c_str(), file2.c_str());
}
@@ -1218,7 +1223,7 @@ void Inter_v7::o7_fillRect(OpFuncParams ¶ms) {
}
void Inter_v7::o7_readData(OpFuncParams ¶ms) {
- Common::String file = _vm->_game->_script->evalString();
+ Common::String file = getFile(_vm->_game->_script->evalString(), false);
uint16 dataVar = _vm->_game->_script->readVarIndex();
int32 size = _vm->_game->_script->readValExpr();
@@ -1295,7 +1300,7 @@ void Inter_v7::o7_readData(OpFuncParams ¶ms) {
}
void Inter_v7::o7_writeData(OpFuncParams ¶ms) {
- Common::String file = _vm->_game->_script->evalString();
+ Common::String file = getFile(_vm->_game->_script->evalString(), false);
int16 dataVar = _vm->_game->_script->readVarIndex();
int32 size = _vm->_game->_script->readValExpr();
Commit: bc18fc6361a8f95d5e85579603f055b69e27780e
https://github.com/scummvm/scummvm/commit/bc18fc6361a8f95d5e85579603f055b69e27780e
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:32+01:00
Commit Message:
GOB: workaround to handle application CD changes in some Adibou2 versions
Some versions of Adibou2 are only able to handle one CD at a time. This workaround enable to add Adibou2 applications by copying them as a subdirectory of the game directory, just like in multi-cd-aware versions.
Changed paths:
engines/gob/init_v7.cpp
engines/gob/inter.h
engines/gob/inter_v7.cpp
engines/gob/save/saveload.cpp
engines/gob/save/saveload.h
diff --git a/engines/gob/init_v7.cpp b/engines/gob/init_v7.cpp
index ee3c4357d1b..56fb6782cec 100644
--- a/engines/gob/init_v7.cpp
+++ b/engines/gob/init_v7.cpp
@@ -35,7 +35,7 @@ Init_v7::~Init_v7() {
void Init_v7::initGame() {
const Common::FSNode gameDataDir(ConfMan.get("path"));
// That way, an application can be added simply by copying it as a separate subdirectory, in the main game directory
- SearchMan.addSubDirectoryMatching(gameDataDir, "*");
+ SearchMan.addSubDirectoryMatching(gameDataDir, "*", 0, 4, true);
Init::initGame();
}
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 6b684c6732b..49bdd87d702 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -710,6 +710,7 @@ protected:
void o7_printText(OpFuncParams ¶ms);
void o7_fillRect(OpFuncParams ¶ms);
+ void o7_checkData(OpFuncParams ¶ms);
void o7_readData(OpFuncParams ¶ms);
void o7_writeData(OpFuncParams ¶ms);
@@ -729,6 +730,9 @@ private:
bool loadCursorFile();
void resizeCursors(int16 width, int16 height, int16 count, bool transparency);
+
+ bool setCurrentCDPath(const Common::FSNode &dir);
+ Common::Array<uint32> getAdibou2InstalledApplications();
};
} // End of namespace Gob
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index d84d74b7aa0..f86ada64e93 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -97,6 +97,7 @@ void Inter_v7::setupOpcodesFunc() {
OPCODEFUNC(0x03, o7_loadCursor);
OPCODEFUNC(0x11, o7_printText);
OPCODEFUNC(0x33, o7_fillRect);
+ OPCODEFUNC(0x3F, o7_checkData);
OPCODEFUNC(0x4D, o7_readData);
OPCODEFUNC(0x4E, o7_writeData);
}
@@ -848,29 +849,13 @@ void Inter_v7::o7_setActiveCD() {
Common::ArchiveMemberList files;
SearchMan.listMatchingMembers(files, str0);
+ Common::String savedCDpath = _currentCDPath;
for (Common::ArchiveMemberPtr file : files) {
auto *node = dynamic_cast<Common::FSNode *>(file.get());
- if (node != nullptr) {
- Common::String dirname = node->getParent().getName();
- Common::FSNode gameDataDir(ConfMan.get("path"));
- bool newDirIsGameDir = (node->getParent().getPath() == gameDataDir.getPath());
-
- if (!newDirIsGameDir &&
- (dirname.equalsIgnoreCase("applis")
- || dirname.equalsIgnoreCase("envir")))
- continue;
-
- debugC(5, kDebugFileIO, "o7_setActiveCD: %s -> %s", _currentCDPath.c_str(), dirname.c_str());
- if (!_currentCDPath.empty())
- SearchMan.setPriority(_currentCDPath, 0);
-
- if (newDirIsGameDir)
- _currentCDPath = "";
- else {
- _currentCDPath = dirname;
- SearchMan.setPriority(dirname, 1);
- }
+ if (node != nullptr &&
+ setCurrentCDPath(node->getParent())) {
+ debugC(5, kDebugFileIO, "o7_setActiveCD: %s -> %s", savedCDpath.c_str(), _currentCDPath.c_str());
storeValue(1);
return;
}
@@ -1222,6 +1207,116 @@ void Inter_v7::o7_fillRect(OpFuncParams ¶ms) {
_vm->_draw->_pattern = savedPattern;
}
+bool Inter_v7::setCurrentCDPath(const Common::FSNode &newDir) {
+ Common::FSNode gameDataDir(ConfMan.get("path"));
+ bool newDirIsGameDir = (newDir.getPath() == gameDataDir.getPath());
+ Common::String newDirName = newDir.getName();
+
+ if (!newDirIsGameDir &&
+ (newDirName.equalsIgnoreCase("applis") || newDirName.equalsIgnoreCase("envir")))
+ return false;
+
+ if (!_currentCDPath.empty())
+ SearchMan.setPriority(_currentCDPath, 0);
+
+ if (newDirIsGameDir)
+ _currentCDPath = "";
+ else {
+ _currentCDPath = newDirName;
+ SearchMan.setPriority(newDirName, 1);
+ }
+
+ return true;
+}
+
+Common::Array<uint32> Inter_v7::getAdibou2InstalledApplications() {
+ byte buffer[4];
+ Common::Array<uint32> applicationNumbers;
+ if (_vm->_saveLoad->loadToRaw("applis.inf", buffer, 4, 0)) {
+ int numApplications = READ_LE_UINT32(buffer);
+ for (int i = 0; i < numApplications; i++) {
+ if (_vm->_saveLoad->loadToRaw("applis.inf", buffer, 4, 4 + i * 4)) {
+ uint32 applicationNumber = READ_LE_UINT32(buffer);
+ applicationNumbers.push_back(applicationNumber);
+ }
+ }
+ }
+
+ return applicationNumbers;
+}
+
+void Inter_v7::o7_checkData(OpFuncParams ¶ms) {
+ Common::String file = getFile(_vm->_game->_script->evalString());
+
+ if (_vm->getGameType() == kGameTypeAdibou2
+ &&
+ file == "CD.INF") {
+ // WORKAROUND: some versions of Adibou2 are only able to handle one CD at a time.
+ // In such versions, scripts always begin to look for CD.INF file in the CD, and check
+ // if its contents matches the selected application. We insert a hack here, to set
+ // the directory of the wanted application as "current CD" directory.
+ // This way, applications can be made available by copying them as a subdirectory of the
+ // game directory, just like in multi-cd-aware versions.
+ Common::Array<uint32> installedApplications = getAdibou2InstalledApplications();
+ int32 indexAppli = VAR_OFFSET(20196);
+ if (indexAppli == -1) {
+ // New appli, find the first directory containing an application still not installed, and set it as "current CD" path.
+ Common::ArchiveMemberList files;
+ SearchMan.listMatchingMembers(files, file); // Search for CD.INF files
+ for (Common::ArchiveMemberPtr &cdInfFile : files) {
+ Common::SeekableReadStream *stream = cdInfFile->createReadStream();
+ while (stream->pos() + 4 <= stream->size()) {
+ // CD.INF contains a list of applications, as uint32 LE values
+ uint32 applicationNumber = stream->readUint32LE();
+ if (Common::find(installedApplications.begin(), installedApplications.end(), applicationNumber) == installedApplications.end()) {
+ // Application not installed yet, set it as current CD path
+ Common::FSNode cdInfFileNode(cdInfFile->getName());
+ setCurrentCDPath(cdInfFileNode.getParent());
+ break;
+ }
+ }
+ }
+ } else if (indexAppli >= 0 && (size_t) indexAppli <= installedApplications.size()) {
+ // Already installed appli, find its directory and set it as "current CD" path
+ int32 applicationNumber = installedApplications[indexAppli - 1];
+ Common::String appliVmdName = Common::String::format("appli_%02d.vmd", applicationNumber);
+ Common::ArchiveMemberList files;
+ SearchMan.listMatchingMembers(files, appliVmdName);
+ for (Common::ArchiveMemberPtr &member : files) {
+ auto *node = dynamic_cast<Common::FSNode *>(member.get());
+ if (node != nullptr) {
+ if (setCurrentCDPath(node->getParent()))
+ break;
+ }
+ }
+ }
+ }
+
+ uint16 varOff = _vm->_game->_script->readVarIndex();
+
+ int32 size = -1;
+ int16 handle = 1;
+ SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file.c_str());
+ if (mode == SaveLoad::kSaveModeNone) {
+ size = _vm->_dataIO->fileSize(file);
+ if (size == -1)
+ warning("File \"%s\" not found", file.c_str());
+
+ } else if (mode == SaveLoad::kSaveModeSave)
+ size = _vm->_saveLoad->getSize(file.c_str());
+ else if (mode == SaveLoad::kSaveModeExists)
+ size = 23;
+
+ if (size == -1)
+ handle = -1;
+
+ debugC(2, kDebugFileIO, "Requested size of file \"%s\": %d",
+ file.c_str(), size);
+
+ WRITE_VAR_OFFSET(varOff, handle);
+ WRITE_VAR(16, (uint32) size);
+}
+
void Inter_v7::o7_readData(OpFuncParams ¶ms) {
Common::String file = getFile(_vm->_game->_script->evalString(), false);
diff --git a/engines/gob/save/saveload.cpp b/engines/gob/save/saveload.cpp
index f88007eb71b..835796c8ed1 100644
--- a/engines/gob/save/saveload.cpp
+++ b/engines/gob/save/saveload.cpp
@@ -89,6 +89,32 @@ bool SaveLoad::load(const char *fileName, int16 dataVar, int32 size, int32 offse
return true;
}
+bool SaveLoad::loadToRaw(const char *fileName, byte *ptr, int32 size, int32 offset) {
+ debugC(3, kDebugSaveLoad, "Requested loading of save file \"%s\" - raw %p, %d, %d",
+ fileName, ptr, size, offset);
+
+ SaveHandler *handler = getHandler(fileName);
+
+ if (!handler) {
+ warning("No save handler for \"%s\" (raw %p, %d, %d)", fileName, (void*) ptr, size, offset);
+ return false;
+ }
+
+ if (!handler->loadToRaw(ptr, size, offset)) {
+ const char *desc = getDescription(fileName);
+
+ if (!desc)
+ desc = "Unknown";
+
+ warning("Could not load %s (\"%s\" (raw %p, %d, %d))",
+ desc, fileName, (void*) ptr, size, offset);
+ return false;
+ }
+
+ debugC(3, kDebugSaveLoad, "Successfully loaded game");
+ return true;
+}
+
bool SaveLoad::save(const char *fileName, int16 dataVar, int32 size, int32 offset) {
debugC(3, kDebugSaveLoad, "Requested saving of save file \"%s\" - %d, %d, %d",
fileName, dataVar, size, offset);
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 70055b3758c..3ccd5364616 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -60,6 +60,7 @@ public:
int32 getSize(const char *fileName);
/** Loads size bytes from offset into the variables starting with dataVar. */
bool load(const char *fileName, int16 dataVar, int32 size, int32 offset);
+ bool loadToRaw(const char *fileName, byte *ptr, int32 size, int32 offset);
/** Saves size bytes from the variables starting with data dataVar at offset. */
bool save(const char *fileName, int16 dataVar, int32 size, int32 offset);
bool saveFromRaw(const char *fileName, byte *ptr, int32 size, int32 offset);
Commit: 2d0ee1ffa107f1fdc71cac5905cff7ad4a03356d
https://github.com/scummvm/scummvm/commit/2d0ee1ffa107f1fdc71cac5905cff7ad4a03356d
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:32+01:00
Commit Message:
GOB: fix some parasite sprites issues in Adibou2
Some sprite cleaning was missing when destroying objects.
Changed paths:
engines/gob/inter.h
engines/gob/inter_v1.cpp
engines/gob/inter_v7.cpp
engines/gob/map_v2.cpp
engines/gob/mult.cpp
engines/gob/mult.h
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 49bdd87d702..f556d369384 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -679,8 +679,8 @@ protected:
void setupOpcodesGob() override;
void o7_draw0x0C();
- void o7_loadCursor(OpFuncParams ¶ms);
void o7_loadCursorFromExec();
+ void o7_freeMult();
void o7_loadMultObject();
void o7_displayWarning();
void o7_logString();
@@ -708,6 +708,7 @@ protected:
void o7_closedBase();
void o7_getDBString();
+ void o7_loadCursor(OpFuncParams ¶ms);
void o7_printText(OpFuncParams ¶ms);
void o7_fillRect(OpFuncParams ¶ms);
void o7_checkData(OpFuncParams ¶ms);
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index bc3ec63e64c..6faa06e8a92 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -504,7 +504,7 @@ void Inter_v1::o1_initMult() {
_vm->_mult->_objects[i].animName[0] = '\0';
_vm->_mult->_objects[i].videoSlot = 0;
_vm->_mult->_objects[i].animVariables = nullptr;
- _vm->_mult->_objects[i].field_6E = 0;
+ _vm->_mult->_objects[i].ownAnimVariables = false;
_vm->_mult->_objects[i].lastLeft = -1;
_vm->_mult->_objects[i].lastRight = -1;
_vm->_mult->_objects[i].lastTop = -1;
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index f86ada64e93..7a036422930 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -64,6 +64,7 @@ void Inter_v7::setupOpcodesDraw() {
OPCODEDRAW(0x0C, o7_draw0x0C);
OPCODEDRAW(0x0D, o7_loadCursorFromExec);
+ OPCODEDRAW(0x15, o7_freeMult);
OPCODEDRAW(0x17, o7_loadMultObject);
OPCODEDRAW(0x44, o7_displayWarning);
OPCODEDRAW(0x45, o7_logString);
@@ -343,6 +344,10 @@ void Inter_v7::o7_loadCursorFromExec() {
delete defaultCursor;
}
+void Inter_v7::o7_freeMult() {
+ _vm->_mult->freeMult(true);
+}
+
void Inter_v7::o7_loadMultObject() {
assert(_vm->_mult->_objects);
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 82dbf0ea194..8adb74566a4 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -76,7 +76,7 @@ void Map_v2::loadMapObjects(const char *avjFile) {
break;
case 65533: {
int index = READ_VARO_UINT16(var);
- _vm->_mult->_objects[index].field_6E = 0;
+ _vm->_mult->_objects[index].ownAnimVariables = false;
_vm->_mult->_objects[index].animVariables = (int16*) variables;
break;
}
diff --git a/engines/gob/mult.cpp b/engines/gob/mult.cpp
index 16bef33d254..02aca14d47c 100644
--- a/engines/gob/mult.cpp
+++ b/engines/gob/mult.cpp
@@ -122,13 +122,20 @@ void Mult::freeAll() {
}
}
-void Mult::freeMult() {
+void Mult::freeMult(bool freeObjectSprites) {
clearObjectVideos();
if (_objects)
for (int i = 0; i < _objCount; i++) {
delete _objects[i].pPosX;
delete _objects[i].pPosY;
+ if (_objects[i].ownAnimVariables) {
+ delete _objects[i].animVariables;
+ _objects[i].animVariables = nullptr;
+ }
+
+ if (freeObjectSprites)
+ _vm->_draw->freeSprite(50 + i);
}
delete[] _objects;
diff --git a/engines/gob/mult.h b/engines/gob/mult.h
index 36305b164dd..0a9b328f247 100644
--- a/engines/gob/mult.h
+++ b/engines/gob/mult.h
@@ -116,7 +116,7 @@ public:
char animName[16];
int8 field_50;
int16* animVariables;
- int8 field_6E;
+ bool ownAnimVariables;
} PACKED_STRUCT;
struct Mult_StaticKey {
@@ -252,7 +252,7 @@ public:
void initAll();
void freeAll();
void checkFreeMult();
- void freeMult();
+ void freeMult(bool freeObjectSprites = false);
void zeroMultData();
void playMult(int16 startFrame, int16 endFrame, char checkEscape,
char handleMouse);
Commit: df04e1c74c208313e81ef09fa62eedc519275c42
https://github.com/scummvm/scummvm/commit/df04e1c74c208313e81ef09fa62eedc519275c42
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:32+01:00
Commit Message:
GOB: drawing order bugfix in Adibou2
Order "100" (and above) should not be modified.
+ rewrite more clearly "order correction" rules
Changed paths:
engines/gob/mult_v2.cpp
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index ea1c762cbd2..56db71599d6 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -865,7 +865,7 @@ void Mult_v2::animate() {
Mult_Object &animObj = _objects[i];
Mult_AnimData &animData = *(animObj.pAnimData);
- if (_vm->_map->_mapUnknownBool && !animData.isStatic && animData.order <= 100) {
+ if (_vm->_map->_mapUnknownBool && !animData.isStatic && animData.order < 100) {
animData.order = currentOrder;
animData.field_22 = 0;
animData.field_21 = 0;
@@ -884,26 +884,19 @@ void Mult_v2::animate() {
continue;
int8 orderCorrection = 0;
- if (previousAnimData.destY <= animData.destY
- || previousAnimData.destX >= animData.destX) {
- if (previousAnimData.destY >= animData.destY
- || previousAnimData.destX <= animData.destX) {
- if (animData.destX + animData.field_1F <= previousAnimData.destX
- || animData.destY - animData.field_20 >= previousAnimData.destY) {
- if (previousAnimData.destX + previousAnimData.field_1F > animData.destX
- && previousAnimData.destY - previousAnimData.field_20 < animData.destY) {
- orderCorrection = 1;
- }
- } else {
- orderCorrection = -1;
- }
- } else {
- orderCorrection = 1;
- }
- }
- else
+ if (previousAnimData.destY > animData.destY
+ && previousAnimData.destX < animData.destX) {
orderCorrection = -1;
-
+ } else if (previousAnimData.destY < animData.destY
+ && previousAnimData.destX > animData.destX) {
+ orderCorrection = 1;
+ } else if (animData.destX + animData.field_1F > previousAnimData.destX
+ && animData.destY - animData.field_20 < previousAnimData.destY) {
+ orderCorrection = -1;
+ } else if (previousAnimData.destX + previousAnimData.field_1F > animData.destX
+ && previousAnimData.destY - previousAnimData.field_20 < animData.destY) {
+ orderCorrection = 1;
+ }
animData.order += orderCorrection;
previousAnimData.order -= orderCorrection;
Commit: 0f811dcd6a5efa741a02b1a2134c64ff4c5857d8
https://github.com/scummvm/scummvm/commit/0f811dcd6a5efa741a02b1a2134c64ff4c5857d8
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:32+01:00
Commit Message:
GOB: vertical offset bugfix when deflating VMD directly onto a video surface
This fixes a frame offset error in the puzzle game of Adibou2, where the vertical offset was added twice.
Changed paths:
video/coktel_decoder.cpp
diff --git a/video/coktel_decoder.cpp b/video/coktel_decoder.cpp
index 20981a4152f..8dd6fe9f257 100644
--- a/video/coktel_decoder.cpp
+++ b/video/coktel_decoder.cpp
@@ -2380,7 +2380,7 @@ bool VMDDecoder::renderFrame(Common::Rect &rect) {
if ((type == 2) && (rect.width() == _surface.w) && (_x == 0) && (_blitMode == 0)) {
// Directly uncompress onto the video surface
const int offsetX = rect.left * _surface.format.bytesPerPixel;
- const int offsetY = (_y + rect.top) * _surface.pitch;
+ const int offsetY = rect.top * _surface.pitch;
const int offset = offsetX + offsetY;
if (deLZ77((byte *)_surface.getPixels() + offset, dataPtr, dataSize,
Commit: 4ae76a78126b5a37a8bdc2ee1f441544c2b04678
https://github.com/scummvm/scummvm/commit/4ae76a78126b5a37a8bdc2ee1f441544c2b04678
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:32+01:00
Commit Message:
GOB: in "printText" opcode, bits 8-16 of "backColor" indicate the destination surface
Fixes the text in Adibou2's diploma.
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 7a036422930..1257e66536f 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -1131,7 +1131,96 @@ void Inter_v7::o7_getDBString() {
}
void Inter_v7::o7_printText(OpFuncParams ¶ms) {
- oPlaytoons_printText(params);
+ char buf[60];
+ int i;
+ int16 oldTransparency;
+
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+
+ _vm->_draw->_backColor = _vm->_game->_script->readValExpr();
+ _vm->_draw->_frontColor = _vm->_game->_script->readValExpr();
+ _vm->_draw->_fontIndex = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSurface = Draw::kBackSurface;
+ _vm->_draw->_textToPrint = buf;
+ _vm->_draw->_transparency = 0;
+
+ if (_vm->_draw->_backColor & 0xFF00) {
+ _vm->_draw->_destSurface = _vm->_draw->_backColor >> 8;
+ _vm->_draw->_backColor &= 0xFF;
+ }
+
+ if (_vm->_draw->_backColor == 16) {
+ _vm->_draw->_backColor = 0;
+ _vm->_draw->_transparency = 1;
+ }
+
+ // colMod is read from conf file (_off_=xxx).
+ // in Playtoons, it's not present in the conf file, thus always equal to the default value (0).
+ // Maybe used in ADIs...
+ // if (!_vm->_draw->_transparency)
+ // _vm->_draw->_backColor += colMod;
+ // _vm->_draw->_frontColor += colMod;
+
+ oldTransparency = _vm->_draw->_transparency;
+ i = 0;
+ do {
+ for (; (_vm->_game->_script->peekChar() != '.') &&
+ (_vm->_game->_script->peekByte() != 200); i++) {
+ buf[i] = _vm->_game->_script->readChar();
+ }
+
+ if (_vm->_game->_script->peekByte() != 200) {
+ _vm->_game->_script->skip(1);
+ switch (_vm->_game->_script->peekByte()) {
+ case TYPE_VAR_INT8:
+ case TYPE_ARRAY_INT8:
+ Common::sprintf_s(buf + i, sizeof(buf) - i, "%d",
+ (int8) READ_VARO_UINT8(_vm->_game->_script->readVarIndex()));
+ break;
+
+ case TYPE_VAR_INT16:
+ case TYPE_VAR_INT32_AS_INT16:
+ case TYPE_ARRAY_INT16:
+ Common::sprintf_s(buf + i, sizeof(buf) - i, "%d",
+ (int16) READ_VARO_UINT16(_vm->_game->_script->readVarIndex()));
+ break;
+
+ case TYPE_VAR_INT32:
+ case TYPE_ARRAY_INT32:
+ Common::sprintf_s(buf + i, sizeof(buf) - i, "%d",
+ (int32)VAR_OFFSET(_vm->_game->_script->readVarIndex()));
+ break;
+
+ case TYPE_VAR_STR:
+ case TYPE_ARRAY_STR:
+ Common::sprintf_s(buf + i, sizeof(buf) - i, "%s",
+ GET_VARO_STR(_vm->_game->_script->readVarIndex()));
+ break;
+
+ default:
+ break;
+ }
+ _vm->_game->_script->skip(1);
+ } else
+ buf[i] = 0;
+
+ if (_vm->_game->_script->peekByte() == 200) {
+ _vm->_draw->_spriteBottom = _vm->_draw->_fonts[_vm->_draw->_fontIndex]->getCharHeight();
+ _vm->_draw->_spriteRight = _vm->_draw->stringLength(_vm->_draw->_textToPrint, _vm->_draw->_fontIndex);
+ _vm->_draw->adjustCoords(1, &_vm->_draw->_spriteBottom, &_vm->_draw->_spriteRight);
+ if (_vm->_draw->_transparency == 0) {
+ _vm->_draw->spriteOperation(DRAW_FILLRECT);
+ _vm->_draw->_transparency = 1;
+ }
+ _vm->_draw->spriteOperation(DRAW_PRINTTEXT);
+ _vm->_draw->_transparency = oldTransparency;
+ i = 0;
+ } else
+ i = strlen(buf);
+ } while (_vm->_game->_script->peekByte() != 200);
+
+ _vm->_game->_script->skip(1);
}
void Inter_v7::o7_fillRect(OpFuncParams ¶ms) {
_vm->_draw->_destSurface = _vm->_game->_script->readInt16();
Commit: 912f61c90449d99db94a7bc5cb9711eed237b7a5
https://github.com/scummvm/scummvm/commit/912f61c90449d99db94a7bc5cb9711eed237b7a5
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:32+01:00
Commit Message:
GOB: skip '\r' or '\n' bytes when printing text
CRLF is sometimes found at the end of resource strings, but uselessly (the "printText" opcode has no is no "newline" capacity)
Fixes garbage characters in Adibou2 diploma text.
Changed paths:
engines/gob/video.cpp
diff --git a/engines/gob/video.cpp b/engines/gob/video.cpp
index 3538d4d63f4..41d33585f12 100644
--- a/engines/gob/video.cpp
+++ b/engines/gob/video.cpp
@@ -96,6 +96,9 @@ void Font::drawLetter(Surface &surf, uint8 c, uint16 x, uint16 y,
uint16 data;
+ if (c == '\r' || c == '\n')
+ return;
+
const byte *src = getCharData(c);
if (!src) {
warning("Font::drawLetter(): getCharData() == 0");
Commit: 375559b9e3f221d28b2768668f5a9a1d399d80ed
https://github.com/scummvm/scummvm/commit/375559b9e3f221d28b2768668f5a9a1d399d80ed
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: fix Adibou2 cake recipes not showing properly
Changed paths:
engines/gob/draw_v2.cpp
diff --git a/engines/gob/draw_v2.cpp b/engines/gob/draw_v2.cpp
index 9633d76705f..de25fbd8ee4 100644
--- a/engines/gob/draw_v2.cpp
+++ b/engines/gob/draw_v2.cpp
@@ -301,6 +301,11 @@ void Draw_v2::printTotText(int16 id) {
_backColor = *ptr++;
_transparency = 1;
+ if ((_vm->getGameType() == kGameTypeAdibou2 ||
+ _vm->getGameType() == kGameTypeAdi4) &&
+ _backColor == 16)
+ _backColor = -1;
+
spriteOperation(DRAW_CLEARRECT);
_backColor = 0;
Commit: 709df52d485047d0bb16032233daedbd61be4ff2
https://github.com/scummvm/scummvm/commit/709df52d485047d0bb16032233daedbd61be4ff2
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: fix some audio/video sync issues in Adibou2
This workaround solves audio/video sync issues that used to appear frequently in many animations, e.g. when Adibou kicks the ball in the garden.
Those animations easily get out of sync when the timing is done by hotspots::evaluate, which sometimes does not call animate() as often as needed for good sync (mouse events processing, in particular, can delay the call).
The original game seems to use also some kind of frame skipping to address this problem.
Changed paths:
engines/gob/mult_v2.cpp
engines/gob/videoplayer.cpp
engines/gob/videoplayer.h
video/coktel_decoder.cpp
video/coktel_decoder.h
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 56db71599d6..fec705da760 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -737,7 +737,26 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
}
if (animData.animType != 8)
+ {
animData.frame++;
+ if (_vm->getGameType() == kGameTypeAdibou2
+ &&
+ animData.animation < 0
+ &&
+ animObj.videoSlot > 0)
+ {
+ // Workaround to improve audio sync of video objects in Adibou 2
+ // They easily get out of sync when the timing is done by hotspots::evaluate, which sometimes does not call animate()
+ // as often as needed for good sync (mouse events processing, in particular, can delay the call).
+ // The original game seems to use also some kind of frame skipping to address this problem.
+ int32 expectedFrame = _vm->_vidPlayer->getExpectedFrameFromCurrentTime(animObj.videoSlot - 1);
+ expectedFrame = CLIP<int32>(expectedFrame, -1, _vm->_vidPlayer->getFrameCount(animObj.videoSlot - 1) - 1);
+ if (expectedFrame > animData.frame + 5) {
+ // We are too far behind, skip frames
+ animData.frame = expectedFrame;
+ }
+ }
+ }
if (animData.animation < 0) {
if ((animObj.videoSlot > 0) &&
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index ec6291995ad..f799a8c6d60 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -369,6 +369,15 @@ void VideoPlayer::waitEndFrame(int slot, bool onlySound) {
}
}
+int32 VideoPlayer::getExpectedFrameFromCurrentTime(int slot) {
+ Video *video = getVideoBySlot(slot);
+ if (!video)
+ return -1;
+
+ return video->decoder->getExpectedFrameFromCurrentTime();
+}
+
+
bool VideoPlayer::isPlayingLive() const {
const Video *video = getVideoBySlot(0);
return video && video->live;
diff --git a/engines/gob/videoplayer.h b/engines/gob/videoplayer.h
index 496b2ca5c70..a4c5f40215b 100644
--- a/engines/gob/videoplayer.h
+++ b/engines/gob/videoplayer.h
@@ -123,6 +123,7 @@ public:
bool play(int slot, Properties &properties);
void waitEndFrame(int slot, bool onlySound = false);
+ int32 getExpectedFrameFromCurrentTime(int slot);
bool isPlayingLive() const;
diff --git a/video/coktel_decoder.cpp b/video/coktel_decoder.cpp
index 8dd6fe9f257..0df1919b1cd 100644
--- a/video/coktel_decoder.cpp
+++ b/video/coktel_decoder.cpp
@@ -651,6 +651,17 @@ uint32 CoktelDecoder::getTimeToNextFrame() const {
return nextFrameStartTime - elapsedTime;
}
+int32 CoktelDecoder::getExpectedFrameFromCurrentTime() const {
+ if (endOfVideo() || _curFrame < 0)
+ return -1;
+
+ int32 elapsedTime = g_system->getMillis() - _startTime;
+ if (elapsedTime < 0)
+ return -1;
+
+ return (Common::Rational(elapsedTime * getFrameRate()) / 1000).toInt();
+}
+
uint32 CoktelDecoder::getStaticTimeToNextFrame() const {
return (1000 / _frameRate).toInt();
}
diff --git a/video/coktel_decoder.h b/video/coktel_decoder.h
index 518350e1c2a..4aaaee39ff3 100644
--- a/video/coktel_decoder.h
+++ b/video/coktel_decoder.h
@@ -186,6 +186,7 @@ public:
uint32 getTimeToNextFrame() const;
uint32 getStaticTimeToNextFrame() const;
+ int32 getExpectedFrameFromCurrentTime() const;
void pauseVideo(bool pause);
Commit: 9beca4c2064b9331dab3d197580ac706288c74f9
https://github.com/scummvm/scummvm/commit/9beca4c2064b9331dab3d197580ac706288c74f9
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: work around an infinite loop issue in Adibou 2 "change CD" screen
It seems that this bug is harmless in the original game because it requires a certain combination of files to be present in the CD, which is not the case in practice in Adibou2 CDs ; but it exists for us because our fake "CD" search includes all files in game directory and sub-directories.
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 1257e66536f..1c307f8ce5d 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -1408,7 +1408,15 @@ void Inter_v7::o7_checkData(OpFuncParams ¶ms) {
file.c_str(), size);
WRITE_VAR_OFFSET(varOff, handle);
- WRITE_VAR(16, (uint32) size);
+ if (_vm->getGameType() == kGameTypeAdibou2
+ &&
+ _vm->isCurrentTot("BE_CD.TOT")) {
+ // WORKAROUND: in script BE_CD.TOT of Adibou 2, o7_checkData() can be called in the "leave" callback of a hotspot.
+ // This corrupts the "current hotspot" variable, which is also VAR(16) (!), and lead to an infinite loop.
+ // We skip writing the file size into VAR(16) here as a workarond (the value is not used anyway).
+ }
+ else
+ WRITE_VAR(16, (uint32) size);
}
void Inter_v7::o7_readData(OpFuncParams ¶ms) {
Commit: 6705ee619d998852c325e17eb46db17a61304a8d
https://github.com/scummvm/scummvm/commit/6705ee619d998852c325e17eb46db17a61304a8d
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: fix a typo in a comment
Changed paths:
engines/gob/inter_v1.cpp
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 6faa06e8a92..c0649dc36d8 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1277,11 +1277,11 @@ void Inter_v1::o1_keyFunc(OpFuncParams ¶ms) {
_vm->_util->forceMouseUp(true);
// FIXME This is a hack to fix an issue with "text" tool in Adibou2 paint game.
- // keyPress() is called twice in a loop before testing its return value.
- // If the first keyPress call catches the key event, the second call will reset
+ // keyFunc() is called twice in a loop before testing its return value.
+ // If the first keyFunc call catches the key event, the second call will reset
// the key buffer, and the loop continues.
// Strangely in the original game it seems that the event is always caught by the
- // second keyPress.
+ // second keyFunc.
if (_vm->getGameType() == kGameTypeAdibou2
&&
(_vm->_game->_script->pos() == 18750 || _vm->_game->_script->pos() == 18955)
Commit: 31e0fda5e747dc17dcee011db8a9f9b842847742
https://github.com/scummvm/scummvm/commit/31e0fda5e747dc17dcee011db8a9f9b842847742
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: more Adibou2 videos must be played in the background
Besides startFrame == -2, it seems that a video must also go to the background (i.e. be non-blocking) if start_frame == end_frame == 0 *and* if it is not to be drawn into a specific sprite.
But more conditions may apply - they are very difficult to follow in the ASM.
This fixes interrupted sound issues in Adibou2 "Playtoons" minigame help descriptions.
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 1c307f8ce5d..751fda48855 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -816,7 +816,10 @@ void Inter_v7::o7_playVmdOrMusic() {
return;
}
- if (props.startFrame == -2) {
+ if (props.startFrame == -2 ||
+ (props.startFrame == props.lastFrame && // /!\ Found partly from asm, partly by trial and errors. Reality may be more complex...
+ props.lastFrame != -1 &&
+ !(props.flags & VideoPlayer::kFlagOtherSurface))) {
props.startFrame = 0;
props.lastFrame = -1;
props.noBlock = true;
Commit: 653ae7caf36768c8a144004eda491d9696e2744c
https://github.com/scummvm/scummvm/commit/653ae7caf36768c8a144004eda491d9696e2744c
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: ensure waitSoundEnd is not called on "live" videos
waitSoundEnd call finishSound(), an then updateLive(), which will load new frames while being in "finished" state.
The !props.noBlock check on call site was not enough, as sometimes the close order on a live video does not have "live" flags.
Changed paths:
engines/gob/inter_v7.cpp
engines/gob/videoplayer.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 751fda48855..930be9c5153 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -844,9 +844,8 @@ void Inter_v7::o7_playVmdOrMusic() {
_vm->_vidPlayer->play(slot, props);
if (close && !props.noBlock) {
- // TODO Adibou2 temp sound workaround assert(_finished) failed
- /*if (!props.canceled)
- _vm->_vidPlayer->waitSoundEnd(slot);*/
+ if (!props.canceled)
+ _vm->_vidPlayer->waitSoundEnd(slot);
_vm->_vidPlayer->closeVideo(slot);
}
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index f799a8c6d60..c6d57c0bce7 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -275,7 +275,7 @@ void VideoPlayer::finishVideoSound(int slot) {
void VideoPlayer::waitSoundEnd(int slot) {
Video *video = getVideoBySlot(slot);
- if (!video || !video->decoder)
+ if (!video || !video->decoder || video->live)
return;
video->decoder->finishSound();
Commit: dc83f97a2ead4dbd83786363c44d863c9af95477
https://github.com/scummvm/scummvm/commit/dc83f97a2ead4dbd83786363c44d863c9af95477
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: fix interrupted intro sound in Adibou2
The script relies on "var_off_212" (current frame) becoming "-1" when the video ends, but its update was disabled for sound-only videos, by a hack for "Bamboo" game to deal with multiple live videos.
We disable this hack (i.e. re-enable var_off_212 update) when there is only one "live" video.
Changed paths:
engines/gob/videoplayer.cpp
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index c6d57c0bce7..604f352a5c2 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -393,11 +393,18 @@ void VideoPlayer::updateLive(int slot, bool force) {
if (!video || !video->live)
return;
+ int nbrOfLiveVideos = 0;
+ for (int i = 0; i < kVideoSlotCount; i++) {
+ Video *otherVideo = getVideoBySlot(i);
+ if (otherVideo && otherVideo->live)
+ ++nbrOfLiveVideos;
+ }
+
if (video->properties.startFrame >= (int32)(video->decoder->getFrameCount() - 1)) {
// Video ended
if (!video->properties.loop) {
- if (!(video->properties.flags & kFlagNoVideo))
+ if (!(video->properties.flags & kFlagNoVideo) || nbrOfLiveVideos == 1)
WRITE_VAR_OFFSET(212, (uint32)-1);
_vm->_vidPlayer->closeVideo(slot);
return;
@@ -414,7 +421,7 @@ void VideoPlayer::updateLive(int slot, bool force) {
if (!force && (video->decoder->getTimeToNextFrame() > 0))
return;
- if (!(video->properties.flags & kFlagNoVideo))
+ if (!(video->properties.flags & kFlagNoVideo) || nbrOfLiveVideos == 1)
WRITE_VAR_OFFSET(212, video->properties.startFrame + 1);
bool backwards = video->properties.startFrame > video->properties.lastFrame;
Commit: 012b52087212bc8a744347175879e6b93dcec707
https://github.com/scummvm/scummvm/commit/012b52087212bc8a744347175879e6b93dcec707
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: a few missing "0 -> nullptr" replacements
Changed paths:
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 6491f97288c..31a832dc4f0 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -28,794 +28,794 @@ namespace Gob {
SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
// Addy Junior Base
- {"DATA\\visage01.inf", kSaveModeSave, 0, "face" }, // Child 01
- {"DATA\\visage02.inf", kSaveModeSave, 0, "face" }, // Child 02
- {"DATA\\visage03.inf", kSaveModeSave, 0, "face" }, // Child 03
- {"DATA\\visage04.inf", kSaveModeSave, 0, "face" }, // Child 04
- {"DATA\\visage05.inf", kSaveModeSave, 0, "face" }, // Child 05
- {"DATA\\visage06.inf", kSaveModeSave, 0, "face" }, // Child 06
- {"DATA\\visage07.inf", kSaveModeSave, 0, "face" }, // Child 07
- {"DATA\\visage08.inf", kSaveModeSave, 0, "face" }, // Child 08
- {"DATA\\visage09.inf", kSaveModeSave, 0, "face" }, // Child 09
- {"DATA\\visage10.inf", kSaveModeSave, 0, "face" }, // Child 10
- {"DATA\\visage11.inf", kSaveModeSave, 0, "face" }, // Child 11
- {"DATA\\visage12.inf", kSaveModeSave, 0, "face" }, // Child 12
- {"DATA\\visage13.inf", kSaveModeSave, 0, "face" }, // Child 13
- {"DATA\\visage14.inf", kSaveModeSave, 0, "face" }, // Child 14
- {"DATA\\visage15.inf", kSaveModeSave, 0, "face" }, // Child 15
- {"DATA\\visage16.inf", kSaveModeSave, 0, "face" }, // Child 16
- {"DATA\\enfant.inf", kSaveModeSave, 0, "children" },
-
- {"TEMP\\debil.tmp", kSaveModeSave, 0, 0 },
- {"DATA\\debil.tmp", kSaveModeSave, 0, 0 },
- {"APPLIS\\debil.tmp", kSaveModeSave, 0, 0 },
- {"ENVIR\\debil.tmp", kSaveModeSave, 0, 0 },
-
-
- { "DATA\\config.inf", kSaveModeSave, 0, "configuration"},
+ {"DATA\\visage01.inf", kSaveModeSave, nullptr, "face" }, // Child 01
+ {"DATA\\visage02.inf", kSaveModeSave, nullptr, "face" }, // Child 02
+ {"DATA\\visage03.inf", kSaveModeSave, nullptr, "face" }, // Child 03
+ {"DATA\\visage04.inf", kSaveModeSave, nullptr, "face" }, // Child 04
+ {"DATA\\visage05.inf", kSaveModeSave, nullptr, "face" }, // Child 05
+ {"DATA\\visage06.inf", kSaveModeSave, nullptr, "face" }, // Child 06
+ {"DATA\\visage07.inf", kSaveModeSave, nullptr, "face" }, // Child 07
+ {"DATA\\visage08.inf", kSaveModeSave, nullptr, "face" }, // Child 08
+ {"DATA\\visage09.inf", kSaveModeSave, nullptr, "face" }, // Child 09
+ {"DATA\\visage10.inf", kSaveModeSave, nullptr, "face" }, // Child 10
+ {"DATA\\visage11.inf", kSaveModeSave, nullptr, "face" }, // Child 11
+ {"DATA\\visage12.inf", kSaveModeSave, nullptr, "face" }, // Child 12
+ {"DATA\\visage13.inf", kSaveModeSave, nullptr, "face" }, // Child 13
+ {"DATA\\visage14.inf", kSaveModeSave, nullptr, "face" }, // Child 14
+ {"DATA\\visage15.inf", kSaveModeSave, nullptr, "face" }, // Child 15
+ {"DATA\\visage16.inf", kSaveModeSave, nullptr, "face" }, // Child 16
+ {"DATA\\enfant.inf", kSaveModeSave, nullptr, "children" },
+
+ {"TEMP\\debil.tmp", kSaveModeSave, nullptr, nullptr },
+ {"DATA\\debil.tmp", kSaveModeSave, nullptr, nullptr },
+ {"APPLIS\\debil.tmp", kSaveModeSave, nullptr, nullptr },
+ {"ENVIR\\debil.tmp", kSaveModeSave, nullptr, nullptr },
+
+
+ { "DATA\\config.inf", kSaveModeSave, nullptr, "configuration"},
// Adibou environment (flowers, vegetables...)
- {"DATA\\enviro01.inf", kSaveModeSave, 0, "environment" }, // Child 01
- {"DATA\\enviro02.inf", kSaveModeSave, 0, "environment" }, // Child 02
- {"DATA\\enviro03.inf", kSaveModeSave, 0, "environment" }, // Child 03
- {"DATA\\enviro04.inf", kSaveModeSave, 0, "environment" }, // Child 04
- {"DATA\\enviro05.inf", kSaveModeSave, 0, "environment" }, // Child 05
- {"DATA\\enviro06.inf", kSaveModeSave, 0, "environment" }, // Child 06
- {"DATA\\enviro07.inf", kSaveModeSave, 0, "environment" }, // Child 07
- {"DATA\\enviro08.inf", kSaveModeSave, 0, "environment" }, // Child 08
- {"DATA\\enviro09.inf", kSaveModeSave, 0, "environment" }, // Child 09
- {"DATA\\enviro10.inf", kSaveModeSave, 0, "environment" }, // Child 10
- {"DATA\\enviro11.inf", kSaveModeSave, 0, "environment" }, // Child 11
- {"DATA\\enviro12.inf", kSaveModeSave, 0, "environment" }, // Child 12
- {"DATA\\enviro13.inf", kSaveModeSave, 0, "environment" }, // Child 13
- {"DATA\\enviro14.inf", kSaveModeSave, 0, "environment" }, // Child 14
- {"DATA\\enviro15.inf", kSaveModeSave, 0, "environment" }, // Child 15
- {"DATA\\enviro16.inf", kSaveModeSave, 0, "environment" }, // Child 16
+ {"DATA\\enviro01.inf", kSaveModeSave, nullptr, "environment" }, // Child 01
+ {"DATA\\enviro02.inf", kSaveModeSave, nullptr, "environment" }, // Child 02
+ {"DATA\\enviro03.inf", kSaveModeSave, nullptr, "environment" }, // Child 03
+ {"DATA\\enviro04.inf", kSaveModeSave, nullptr, "environment" }, // Child 04
+ {"DATA\\enviro05.inf", kSaveModeSave, nullptr, "environment" }, // Child 05
+ {"DATA\\enviro06.inf", kSaveModeSave, nullptr, "environment" }, // Child 06
+ {"DATA\\enviro07.inf", kSaveModeSave, nullptr, "environment" }, // Child 07
+ {"DATA\\enviro08.inf", kSaveModeSave, nullptr, "environment" }, // Child 08
+ {"DATA\\enviro09.inf", kSaveModeSave, nullptr, "environment" }, // Child 09
+ {"DATA\\enviro10.inf", kSaveModeSave, nullptr, "environment" }, // Child 10
+ {"DATA\\enviro11.inf", kSaveModeSave, nullptr, "environment" }, // Child 11
+ {"DATA\\enviro12.inf", kSaveModeSave, nullptr, "environment" }, // Child 12
+ {"DATA\\enviro13.inf", kSaveModeSave, nullptr, "environment" }, // Child 13
+ {"DATA\\enviro14.inf", kSaveModeSave, nullptr, "environment" }, // Child 14
+ {"DATA\\enviro15.inf", kSaveModeSave, nullptr, "environment" }, // Child 15
+ {"DATA\\enviro16.inf", kSaveModeSave, nullptr, "environment" }, // Child 16
// Adibou environment weather
- {"DATA\\temp01.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp02.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp03.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp04.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp05.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp06.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp07.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp08.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp09.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp10.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp11.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp12.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp13.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp14.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp15.csa" , kSaveModeSave, 0, "weather" },
- {"DATA\\temp16.csa" , kSaveModeSave, 0, "weather" },
+ {"DATA\\temp01.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp02.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp03.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp04.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp05.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp06.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp07.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp08.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp09.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp10.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp11.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp12.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp13.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp14.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp15.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA\\temp16.csa" , kSaveModeSave, nullptr, "weather" },
// Adibou brekout game progress
- {"DATA\\brique01.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique02.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique03.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique04.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique05.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique06.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique07.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique08.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique09.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique10.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique11.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique12.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique13.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique14.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique15.inf" , kSaveModeSave, 0, "breakout game progress" },
- {"DATA\\brique16.inf" , kSaveModeSave, 0, "breakout game progress" },
+ {"DATA\\brique01.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique02.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique03.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique04.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique05.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique06.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique07.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique08.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique09.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique10.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique11.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique12.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique13.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique14.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique15.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA\\brique16.inf" , kSaveModeSave, nullptr, "breakout game progress" },
// Adibou Playtoon-like minigame
- {"construc.inf" , kSaveModeSave, 0, "construction game progress" },
- {"ptrecord.inf" , kSaveModeSave, 0, "construction game progress" }, // PTRECORD = "Playtoons record" probably
- {"aide.inf" , kSaveModeSave, 0, "construction game progress" },
-
- {"DATA\\constr01.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 01
- {"DATA\\ptreco01.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide01.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr02.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 02
- {"DATA\\ptreco02.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide02.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr03.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 03
- {"DATA\\ptreco03.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide03.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr04.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 04
- {"DATA\\ptreco04.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide04.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr05.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 05
- {"DATA\\ptreco05.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide05.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr06.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 06
- {"DATA\\ptreco06.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide06.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr07.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 07
- {"DATA\\ptreco07.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide07.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr08.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 08
- {"DATA\\ptreco08.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide08.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr09.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 09
- {"DATA\\ptreco09.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide09.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr10.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 10
- {"DATA\\ptreco10.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide10.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr11.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 11
- {"DATA\\ptreco11.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide11.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr12.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 12
- {"DATA\\ptreco12.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide12.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr13.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 13
- {"DATA\\ptreco13.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide13.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr14.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 14
- {"DATA\\ptreco14.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide14.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr15.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 15
- {"DATA\\ptreco15.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide15.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\constr16.inf" , kSaveModeSave, 0, "construction game progress" }, // Child 16
- {"DATA\\ptreco16.inf" , kSaveModeSave, 0, "construction game progress" },
- {"DATA\\aide16.inf" , kSaveModeSave, 0, "construction game progress" },
+ {"construc.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"ptrecord.inf" , kSaveModeSave, nullptr, "construction game progress" }, // PTRECORD = "Playtoons record" probably
+ {"aide.inf" , kSaveModeSave, nullptr, "construction game progress" },
+
+ {"DATA\\constr01.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 01
+ {"DATA\\ptreco01.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide01.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr02.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 02
+ {"DATA\\ptreco02.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide02.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr03.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 03
+ {"DATA\\ptreco03.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide03.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr04.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 04
+ {"DATA\\ptreco04.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide04.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr05.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 05
+ {"DATA\\ptreco05.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide05.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr06.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 06
+ {"DATA\\ptreco06.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide06.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr07.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 07
+ {"DATA\\ptreco07.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide07.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr08.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 08
+ {"DATA\\ptreco08.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide08.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr09.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 09
+ {"DATA\\ptreco09.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide09.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr10.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 10
+ {"DATA\\ptreco10.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide10.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr11.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 11
+ {"DATA\\ptreco11.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide11.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr12.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 12
+ {"DATA\\ptreco12.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide12.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr13.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 13
+ {"DATA\\ptreco13.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide13.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr14.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 14
+ {"DATA\\ptreco14.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide14.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr15.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 15
+ {"DATA\\ptreco15.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide15.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\constr16.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 16
+ {"DATA\\ptreco16.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA\\aide16.inf" , kSaveModeSave, nullptr, "construction game progress" },
// Adibou Applications 1-5
- {"DATA\\Gsa01_01.inf", kSaveModeSave, 0, "app progress" }, // Child 01
- {"DATA\\Gsa02_01.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_01.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_01.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_01.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_02.inf", kSaveModeSave, 0, "app progress" }, // Child 02
- {"DATA\\Gsa02_02.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_02.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_02.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_02.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_03.inf", kSaveModeSave, 0, "app progress" }, // Child 03
- {"DATA\\Gsa02_03.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_03.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_03.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_03.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_04.inf", kSaveModeSave, 0, "app progress" }, // Child 04
- {"DATA\\Gsa02_04.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_04.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_04.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_04.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_05.inf", kSaveModeSave, 0, "app progress" }, // Child 05
- {"DATA\\Gsa02_05.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_05.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_05.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_05.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_06.inf", kSaveModeSave, 0, "app progress" }, // Child 06
- {"DATA\\Gsa02_06.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_06.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_06.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_06.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_07.inf", kSaveModeSave, 0, "app progress" }, // Child 07
- {"DATA\\Gsa02_07.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_07.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_07.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_07.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_08.inf", kSaveModeSave, 0, "app progress" }, // Child 08
- {"DATA\\Gsa02_08.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_08.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_08.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_08.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_09.inf", kSaveModeSave, 0, "app progress" }, // Child 09
- {"DATA\\Gsa02_09.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_09.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_09.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_09.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_10.inf", kSaveModeSave, 0, "app progress" }, // Child 10
- {"DATA\\Gsa02_10.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_10.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_10.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_10.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_11.inf", kSaveModeSave, 0, "app progress" }, // Child 11
- {"DATA\\Gsa02_11.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_11.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_11.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_11.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_12.inf", kSaveModeSave, 0, "app progress" }, // Child 12
- {"DATA\\Gsa02_12.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_12.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_12.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_12.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_13.inf", kSaveModeSave, 0, "app progress" }, // Child 13
- {"DATA\\Gsa02_13.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_13.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_13.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_13.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_14.inf", kSaveModeSave, 0, "app progress" }, // Child 14
- {"DATA\\Gsa02_14.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_14.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_14.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_14.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_15.inf", kSaveModeSave, 0, "app progress" }, // Child 15
- {"DATA\\Gsa02_15.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_15.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_15.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_15.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa01_16.inf", kSaveModeSave, 0, "app progress" }, // Child 16
- {"DATA\\Gsa02_16.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa03_16.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa04_16.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\Gsa05_16.inf", kSaveModeSave, 0, "app progress" },
- {"DATA\\memo_01.inf", kSaveModeSave, 0, "memo" }, // Child 01
- {"DATA\\memo_02.inf", kSaveModeSave, 0, "memo" }, // Child 02
- {"DATA\\memo_03.inf", kSaveModeSave, 0, "memo" }, // Child 03
- {"DATA\\memo_04.inf", kSaveModeSave, 0, "memo" }, // Child 04
- {"DATA\\memo_05.inf", kSaveModeSave, 0, "memo" }, // Child 05
- {"DATA\\memo_06.inf", kSaveModeSave, 0, "memo" }, // Child 06
- {"DATA\\memo_07.inf", kSaveModeSave, 0, "memo" }, // Child 07
- {"DATA\\memo_08.inf", kSaveModeSave, 0, "memo" }, // Child 08
- {"DATA\\memo_09.inf", kSaveModeSave, 0, "memo" }, // Child 09
- {"DATA\\memo_10.inf", kSaveModeSave, 0, "memo" }, // Child 10
- {"DATA\\memo_11.inf", kSaveModeSave, 0, "memo" }, // Child 11
- {"DATA\\memo_12.inf", kSaveModeSave, 0, "memo" }, // Child 12
- {"DATA\\memo_13.inf", kSaveModeSave, 0, "memo" }, // Child 13
- {"DATA\\memo_14.inf", kSaveModeSave, 0, "memo" }, // Child 14
- {"DATA\\memo_15.inf", kSaveModeSave, 0, "memo" }, // Child 15
- {"DATA\\memo_16.inf", kSaveModeSave, 0, "memo" }, // Child 16
- {"DATA\\diplo_01.inf", kSaveModeSave, 0, "diplo" }, // Child 01
- {"DATA\\diplo_02.inf", kSaveModeSave, 0, "diplo" }, // Child 02
- {"DATA\\diplo_03.inf", kSaveModeSave, 0, "diplo" }, // Child 03
- {"DATA\\diplo_04.inf", kSaveModeSave, 0, "diplo" }, // Child 04
- {"DATA\\diplo_05.inf", kSaveModeSave, 0, "diplo" }, // Child 05
- {"DATA\\diplo_06.inf", kSaveModeSave, 0, "diplo" }, // Child 06
- {"DATA\\diplo_07.inf", kSaveModeSave, 0, "diplo" }, // Child 07
- {"DATA\\diplo_08.inf", kSaveModeSave, 0, "diplo" }, // Child 08
- {"DATA\\diplo_09.inf", kSaveModeSave, 0, "diplo" }, // Child 09
- {"DATA\\diplo_10.inf", kSaveModeSave, 0, "diplo" }, // Child 10
- {"DATA\\diplo_11.inf", kSaveModeSave, 0, "diplo" }, // Child 11
- {"DATA\\diplo_12.inf", kSaveModeSave, 0, "diplo" }, // Child 12
- {"DATA\\diplo_13.inf", kSaveModeSave, 0, "diplo" }, // Child 13
- {"DATA\\diplo_14.inf", kSaveModeSave, 0, "diplo" }, // Child 14
- {"DATA\\diplo_15.inf", kSaveModeSave, 0, "diplo" }, // Child 15
- {"DATA\\diplo_16.inf", kSaveModeSave, 0, "diplo" }, // Child 16
- {"DATA\\appli_01.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\appli_02.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\appli_03.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\appli_04.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\appli_05.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\crite_01.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\crite_02.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\crite_03.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\crite_04.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\crite_05.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\exo_01.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\exo_02.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\exo_03.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\exo_04.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\exo_05.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\ico_01.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\ico_02.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\ico_03.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\ico_04.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\ico_05.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\applis.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\lance.inf", kSaveModeSave, 0, "app info" },
- {"DATA\\retour.inf", kSaveModeSave, 0, "app info" },
+ {"DATA\\Gsa01_01.inf", kSaveModeSave, nullptr, "app progress" }, // Child 01
+ {"DATA\\Gsa02_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_02.inf", kSaveModeSave, nullptr, "app progress" }, // Child 02
+ {"DATA\\Gsa02_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_03.inf", kSaveModeSave, nullptr, "app progress" }, // Child 03
+ {"DATA\\Gsa02_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_04.inf", kSaveModeSave, nullptr, "app progress" }, // Child 04
+ {"DATA\\Gsa02_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_05.inf", kSaveModeSave, nullptr, "app progress" }, // Child 05
+ {"DATA\\Gsa02_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_06.inf", kSaveModeSave, nullptr, "app progress" }, // Child 06
+ {"DATA\\Gsa02_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_07.inf", kSaveModeSave, nullptr, "app progress" }, // Child 07
+ {"DATA\\Gsa02_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_08.inf", kSaveModeSave, nullptr, "app progress" }, // Child 08
+ {"DATA\\Gsa02_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_09.inf", kSaveModeSave, nullptr, "app progress" }, // Child 09
+ {"DATA\\Gsa02_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_10.inf", kSaveModeSave, nullptr, "app progress" }, // Child 10
+ {"DATA\\Gsa02_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_11.inf", kSaveModeSave, nullptr, "app progress" }, // Child 11
+ {"DATA\\Gsa02_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_12.inf", kSaveModeSave, nullptr, "app progress" }, // Child 12
+ {"DATA\\Gsa02_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_13.inf", kSaveModeSave, nullptr, "app progress" }, // Child 13
+ {"DATA\\Gsa02_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_14.inf", kSaveModeSave, nullptr, "app progress" }, // Child 14
+ {"DATA\\Gsa02_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_15.inf", kSaveModeSave, nullptr, "app progress" }, // Child 15
+ {"DATA\\Gsa02_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_16.inf", kSaveModeSave, nullptr, "app progress" }, // Child 16
+ {"DATA\\Gsa02_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\memo_01.inf", kSaveModeSave, nullptr, "memo" }, // Child 01
+ {"DATA\\memo_02.inf", kSaveModeSave, nullptr, "memo" }, // Child 02
+ {"DATA\\memo_03.inf", kSaveModeSave, nullptr, "memo" }, // Child 03
+ {"DATA\\memo_04.inf", kSaveModeSave, nullptr, "memo" }, // Child 04
+ {"DATA\\memo_05.inf", kSaveModeSave, nullptr, "memo" }, // Child 05
+ {"DATA\\memo_06.inf", kSaveModeSave, nullptr, "memo" }, // Child 06
+ {"DATA\\memo_07.inf", kSaveModeSave, nullptr, "memo" }, // Child 07
+ {"DATA\\memo_08.inf", kSaveModeSave, nullptr, "memo" }, // Child 08
+ {"DATA\\memo_09.inf", kSaveModeSave, nullptr, "memo" }, // Child 09
+ {"DATA\\memo_10.inf", kSaveModeSave, nullptr, "memo" }, // Child 10
+ {"DATA\\memo_11.inf", kSaveModeSave, nullptr, "memo" }, // Child 11
+ {"DATA\\memo_12.inf", kSaveModeSave, nullptr, "memo" }, // Child 12
+ {"DATA\\memo_13.inf", kSaveModeSave, nullptr, "memo" }, // Child 13
+ {"DATA\\memo_14.inf", kSaveModeSave, nullptr, "memo" }, // Child 14
+ {"DATA\\memo_15.inf", kSaveModeSave, nullptr, "memo" }, // Child 15
+ {"DATA\\memo_16.inf", kSaveModeSave, nullptr, "memo" }, // Child 16
+ {"DATA\\diplo_01.inf", kSaveModeSave, nullptr, "diplo" }, // Child 01
+ {"DATA\\diplo_02.inf", kSaveModeSave, nullptr, "diplo" }, // Child 02
+ {"DATA\\diplo_03.inf", kSaveModeSave, nullptr, "diplo" }, // Child 03
+ {"DATA\\diplo_04.inf", kSaveModeSave, nullptr, "diplo" }, // Child 04
+ {"DATA\\diplo_05.inf", kSaveModeSave, nullptr, "diplo" }, // Child 05
+ {"DATA\\diplo_06.inf", kSaveModeSave, nullptr, "diplo" }, // Child 06
+ {"DATA\\diplo_07.inf", kSaveModeSave, nullptr, "diplo" }, // Child 07
+ {"DATA\\diplo_08.inf", kSaveModeSave, nullptr, "diplo" }, // Child 08
+ {"DATA\\diplo_09.inf", kSaveModeSave, nullptr, "diplo" }, // Child 09
+ {"DATA\\diplo_10.inf", kSaveModeSave, nullptr, "diplo" }, // Child 10
+ {"DATA\\diplo_11.inf", kSaveModeSave, nullptr, "diplo" }, // Child 11
+ {"DATA\\diplo_12.inf", kSaveModeSave, nullptr, "diplo" }, // Child 12
+ {"DATA\\diplo_13.inf", kSaveModeSave, nullptr, "diplo" }, // Child 13
+ {"DATA\\diplo_14.inf", kSaveModeSave, nullptr, "diplo" }, // Child 14
+ {"DATA\\diplo_15.inf", kSaveModeSave, nullptr, "diplo" }, // Child 15
+ {"DATA\\diplo_16.inf", kSaveModeSave, nullptr, "diplo" }, // Child 16
+ {"DATA\\appli_01.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\appli_02.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\appli_03.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\appli_04.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\appli_05.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\crite_01.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\crite_02.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\crite_03.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\crite_04.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\crite_05.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\exo_01.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\exo_02.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\exo_03.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\exo_04.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\exo_05.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\ico_01.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\ico_02.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\ico_03.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\ico_04.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\ico_05.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\applis.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\lance.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA\\retour.inf", kSaveModeSave, nullptr, "app info" },
// Adibou2 saved drawings (up to 12)
// Child1
- {"DATA\\cart0101.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0201.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0301.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0401.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0501.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0601.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0701.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0801.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0901.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1001.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1101.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1201.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_01.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett01.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr01.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod01.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur01.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur01.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud01.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable01.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0101.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0201.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0301.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0401.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0501.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0601.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0701.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0801.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0901.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1001.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1101.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1201.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett01.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr01.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod01.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur01.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur01.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud01.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable01.inf", kSaveModeSave, nullptr, "poster" },
// Child2
- {"DATA\\cart0102.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0202.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0302.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0402.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0502.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0602.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0702.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0802.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0902.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1002.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1102.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1202.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_02.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett02.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr02.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod02.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur02.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur02.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud02.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable02.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0102.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0202.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0302.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0402.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0502.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0602.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0702.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0802.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0902.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1002.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1102.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1202.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett02.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr02.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod02.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur02.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur02.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud02.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable02.inf", kSaveModeSave, nullptr, "poster" },
// Child3
- {"DATA\\cart0103.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0203.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0303.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0403.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0503.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0603.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0703.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0803.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0903.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1003.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1103.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1203.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_03.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett03.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr03.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod03.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur03.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur03.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud03.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable03.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0103.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0203.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0303.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0403.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0503.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0603.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0703.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0803.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0903.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1003.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1103.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1203.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett03.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr03.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod03.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur03.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur03.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud03.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable03.inf", kSaveModeSave, nullptr, "poster" },
// Child4
- {"DATA\\cart0104.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0204.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0304.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0404.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0504.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0604.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0704.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0804.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0904.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1004.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1104.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1204.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_04.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett04.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr04.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod04.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur04.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur04.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud04.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable04.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0104.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0204.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0304.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0404.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0504.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0604.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0704.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0804.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0904.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1004.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1104.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1204.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett04.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr04.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod04.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur04.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur04.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud04.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable04.inf", kSaveModeSave, nullptr, "poster" },
// Child5
- {"DATA\\cart0105.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0205.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0305.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0405.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0505.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0605.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0705.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0805.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0905.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1005.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1105.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1205.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_05.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett05.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr05.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod05.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur05.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur05.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud05.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable05.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0105.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0205.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0305.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0405.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0505.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0605.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0705.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0805.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0905.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1005.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1105.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1205.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett05.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr05.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod05.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur05.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur05.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud05.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable05.inf", kSaveModeSave, nullptr, "poster" },
// Child6
- {"DATA\\cart0106.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0206.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0306.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0406.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0506.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0606.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0706.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0806.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0906.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1006.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1106.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1206.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_06.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett06.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr06.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod06.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur06.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur06.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud06.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable06.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0106.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0206.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0306.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0406.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0506.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0606.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0706.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0806.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0906.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1006.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1106.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1206.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett06.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr06.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod06.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur06.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur06.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud06.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable06.inf", kSaveModeSave, nullptr, "poster" },
// Child7
- {"DATA\\cart0107.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0207.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0307.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0407.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0507.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0607.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0707.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0807.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0907.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1007.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1107.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1207.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_07.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett07.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr07.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod07.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur07.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur07.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud07.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable07.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0107.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0207.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0307.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0407.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0507.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0607.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0707.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0807.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0907.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1007.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1107.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1207.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett07.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr07.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod07.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur07.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur07.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud07.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable07.inf", kSaveModeSave, nullptr, "poster" },
// Child8
- {"DATA\\cart0108.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0208.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0308.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0408.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0508.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0608.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0708.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0808.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0908.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1008.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1108.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1208.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_08.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett08.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr08.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod08.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur08.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur08.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud08.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable08.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0108.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0208.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0308.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0408.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0508.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0608.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0708.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0808.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0908.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1008.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1108.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1208.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett08.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr08.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod08.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur08.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur08.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud08.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable08.inf", kSaveModeSave, nullptr, "poster" },
// Child9
- {"DATA\\cart0109.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0209.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0309.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0409.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0509.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0609.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0709.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0809.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0909.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1009.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1109.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1209.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_09.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett09.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr09.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod09.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur09.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur09.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud09.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable09.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0109.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0209.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0309.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0409.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0509.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0609.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0709.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0809.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0909.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1009.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1109.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1209.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett09.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr09.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod09.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur09.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur09.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud09.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable09.inf", kSaveModeSave, nullptr, "poster" },
// Child10
- {"DATA\\cart0110.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0210.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0310.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0410.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0510.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0610.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0710.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0810.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0910.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1010.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1110.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1210.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_10.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett10.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr10.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod10.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur10.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur10.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud10.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable10.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0110.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0210.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0310.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0410.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0510.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0610.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0710.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0810.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0910.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1010.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1110.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1210.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett10.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr10.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod10.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur10.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur10.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud10.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable10.inf", kSaveModeSave, nullptr, "poster" },
// Child11
- {"DATA\\cart0111.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0211.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0311.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0411.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0511.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0611.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0711.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0811.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0911.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1011.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1111.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1211.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_11.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett11.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr11.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod11.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur11.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur11.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud11.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable11.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0111.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0211.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0311.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0411.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0511.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0611.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0711.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0811.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0911.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1011.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1111.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1211.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett11.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr11.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod11.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur11.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur11.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud11.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable11.inf", kSaveModeSave, nullptr, "poster" },
// Child12
- {"DATA\\cart0112.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0212.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0312.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0412.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0512.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0612.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0712.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0812.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0912.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1012.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1112.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1212.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_12.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett12.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr12.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod12.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur12.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur12.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud12.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable12.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0112.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0212.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0312.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0412.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0512.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0612.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0712.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0812.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0912.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1012.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1112.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1212.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett12.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr12.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod12.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur12.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur12.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud12.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable12.inf", kSaveModeSave, nullptr, "poster" },
// Child13
- {"DATA\\cart0113.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0213.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0313.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0413.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0513.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0613.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0713.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0813.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0913.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1013.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1113.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1213.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_13.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett13.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr13.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod13.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur13.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud13.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable13.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0113.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0213.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0313.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0413.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0513.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0613.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0713.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0813.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0913.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1013.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1113.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1213.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett13.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr13.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod13.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur13.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur13.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud13.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable13.inf", kSaveModeSave, nullptr, "poster" },
// Child14
- {"DATA\\cart0114.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0214.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0314.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0414.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0514.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0614.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0714.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0814.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0914.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1014.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1114.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1214.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_14.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett14.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr14.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod14.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur14.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud14.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable14.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0114.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0214.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0314.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0414.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0514.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0614.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0714.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0814.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0914.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1014.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1114.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1214.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett14.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr14.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod14.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur14.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur14.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud14.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable14.inf", kSaveModeSave, nullptr, "poster" },
// Child15
- {"DATA\\cart0115.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0215.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0315.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0415.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0515.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0615.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0715.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0815.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0915.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1015.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1115.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1215.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_15.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett15.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr15.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod15.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur15.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud15.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable15.inf", kSaveModeSave, 0, "poster" },
+ {"DATA\\cart0115.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0215.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0315.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0415.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0515.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0615.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0715.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0815.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0915.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1015.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1115.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1215.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett15.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr15.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod15.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur15.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur15.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud15.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable15.inf", kSaveModeSave, nullptr, "poster" },
// Child16
- {"DATA\\cart0116.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0216.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0316.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0416.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0516.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0616.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0716.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0816.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart0916.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1016.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1116.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\cart1216.inf", kSaveModeSave, 0, "drawing" },
- {"DATA\\pal00_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal01_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal02_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal03_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal04_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal05_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal06_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal07_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal08_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal09_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal10_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\pal11_16.inf", kSaveModeSave, 0, "drawing thumbnail" },
- {"DATA\\palett16.inf", kSaveModeSave, 0, "drawing palette" },
- {"DATA\\plettr16.inf", kSaveModeSave, 0, "drawing in mailbox" },
- {"DATA\\pgatod16.inf", kSaveModeSave, 0, "photo of cake" },
- {"DATA\\pfleur16.inf", kSaveModeSave, 0, "photo of flowers" },
- {"DATA\\mfleur16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mfleud16.inf", kSaveModeSave, 0, "photo of flowers (vase)" },
- {"DATA\\mtable16.inf", kSaveModeSave, 0, "poster" },
-
- {"adibou.pal", kSaveModeSave, 0, "drawing on floppy disk" },
- {"adibour.pal", kSaveModeSave, 0, "drawing on floppy disk (thumbnail)" },
- {"test.dob", kSaveModeSave, 0, "test floppy disk file" },
-
- {"TEMP\\liste.$$$", kSaveModeSave, 0, "exercise list" },
+ {"DATA\\cart0116.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0216.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0316.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0416.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0516.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0616.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0716.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0816.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart0916.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1016.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1116.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\cart1216.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA\\pal00_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal01_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal02_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal03_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal04_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal05_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal06_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal07_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal08_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal09_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal10_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\pal11_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA\\palett16.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA\\plettr16.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA\\pgatod16.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA\\pfleur16.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA\\mfleur16.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mfleud16.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA\\mtable16.inf", kSaveModeSave, nullptr, "poster" },
+
+ {"adibou.pal", kSaveModeSave, nullptr, "drawing on floppy disk" },
+ {"adibour.pal", kSaveModeSave, nullptr, "drawing on floppy disk (thumbnail)" },
+ {"test.dob", kSaveModeSave, nullptr, "test floppy disk file" },
+
+ {"TEMP\\liste.$$$", kSaveModeSave, nullptr, "exercise list" },
// Addy 4 Base
{"config00.inf", kSaveModeSave, nullptr, nullptr },
Commit: dd0748fa66ccfacf61753eeefca0c6f46181d910
https://github.com/scummvm/scummvm/commit/dd0748fa66ccfacf61753eeefca0c6f46181d910
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:33+01:00
Commit Message:
GOB: a few format fixes
Changed paths:
engines/gob/save/savefile.cpp
diff --git a/engines/gob/save/savefile.cpp b/engines/gob/save/savefile.cpp
index 3a533ac8795..17ab4263d89 100644
--- a/engines/gob/save/savefile.cpp
+++ b/engines/gob/save/savefile.cpp
@@ -333,7 +333,7 @@ bool SavePartSprite::read(Common::ReadStream &stream) {
uint32 width = stream.readUint32LE();
uint32 height = stream.readUint32LE();
- if (width*height != _width*_height)
+ if (width * height != _width * _height)
return false;
// If it's in the current format, the true color flag has to be the same too
@@ -380,7 +380,7 @@ bool SavePartSprite::readPalette(const byte *palette) {
bool SavePartSprite::readSprite(const Surface &sprite) {
// The sprite's dimensions have to fit
- if (((uint32)sprite.getWidth()*sprite.getHeight()) != _width*_height)
+ if (((uint32)sprite.getWidth() * sprite.getHeight()) != _width * _height)
return false;
if (_trueColor) {
Commit: 0e5953ad67af10ad775bdf7f5d1d221d5f874bfc
https://github.com/scummvm/scummvm/commit/0e5953ad67af10ad775bdf7f5d1d221d5f874bfc
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:34+01:00
Commit Message:
GOB: fix a crash when returning to launcher from Adibou2
Changed paths:
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 31a832dc4f0..e360288b114 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -1211,7 +1211,7 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
_saveFiles[index++].handler = _childrenHandler = new FakeFileHandler(_vm);
for (int i = 0; i < 4; ++i) {
- _saveFiles[index++].handler = _debilHandler[0] = new FakeFileHandler(_vm);
+ _saveFiles[index++].handler = _debilHandler[i] = new FakeFileHandler(_vm);
}
_saveFiles[index++].handler = _configHandler = new GameFileHandler(_vm, targetName, "cfg");
Commit: fc8d530e51200e94634b77a7b10d85a2399129eb
https://github.com/scummvm/scummvm/commit/fc8d530e51200e94634b77a7b10d85a2399129eb
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:34+01:00
Commit Message:
GOB: protection from sound-only videos without proper flags in Adibou2
Such videos may try to allocate a Surface with null width/height.
Fix the jokes "jingle" of the radio in Adibou's house.
Changed paths:
engines/gob/videoplayer.cpp
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index 604f352a5c2..e542d26556c 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -155,9 +155,17 @@ int VideoPlayer::openVideo(bool primary, const Common::String &file, Properties
bool screenSize = properties.flags & kFlagScreenSurface;
if (ownSurf) {
- _vm->_draw->_spritesArray[properties.sprite] =
- _vm->_video->initSurfDesc(screenSize ? _vm->_width : video->decoder->getWidth(),
- screenSize ? _vm->_height : video->decoder->getHeight(), 0);
+ uint16 height = screenSize ? _vm->_width : video->decoder->getWidth();
+ uint16 width = screenSize ? _vm->_height : video->decoder->getHeight();
+
+ if (height > 0 && width > 0) {
+ _vm->_draw->_spritesArray[properties.sprite] =
+ _vm->_video->initSurfDesc(screenSize ? _vm->_width : video->decoder->getWidth(),
+ screenSize ? _vm->_height : video->decoder->getHeight(), 0);
+ } else {
+ warning("VideoPlayer::openVideo() file=%s:"
+ "Invalid surface dimensions (%dx%d)", file.c_str(), width, height);
+ }
}
if (!_vm->_draw->_spritesArray[properties.sprite] &&
Commit: 19476c96a55a19e069c7ada2d51783ac8543f459
https://github.com/scummvm/scummvm/commit/19476c96a55a19e069c7ada2d51783ac8543f459
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:34+01:00
Commit Message:
GOB: split the big "updateAnim" function
Changed paths:
engines/gob/scenery.cpp
engines/gob/scenery.h
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index a5a34d30bd5..f3cc2da72b1 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -599,129 +599,95 @@ void clipInRect(int16 left, int16 top, int16 width, int16 height, int16 *deltaX,
}
}
-// flags & 1 - do capture all area animation is occupying
-// flags & 4 == 0 - calculate animation final size
-// flags & 2 != 0 - don't check with "toRedraw"'s
-// flags & 4 != 0 - checkk view toRedraw
-void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
- int16 drawDeltaX, int16 drawDeltaY, char doDraw) {
- AnimLayer *layerPtr;
- PieceDesc **pictPtr;
- AnimFramePiece *framePtr;
-
- uint16 pieceIndex;
- uint16 pictIndex;
+void Scenery::updateAnimObjectVideo(int16 layer, int16 frame, int16 animation, int16 flags,
+ int16 drawDeltaX, int16 drawDeltaY, char doDraw) {
int16 left;
int16 right;
int16 top;
int16 bottom;
- byte highX;
- byte highY;
-
- int16 i;
- int16 transp;
-
int16 destX;
int16 destY;
- if ((animation < 0) &&
- ((_vm->getGameType() == kGameTypeWoodruff) ||
- (_vm->getGameType() == kGameTypeAdibou2))) {
- // Object video
-
- if (flags & 1) { // Do capture
- updateAnim(layer, frame, animation, 0, drawDeltaX, drawDeltaY, 0);
-
- if (_toRedrawLeft == -12345)
- return;
-
- _vm->_game->capturePush(_toRedrawLeft, _toRedrawTop,
- _toRedrawRight - _toRedrawLeft + 1,
- _toRedrawBottom - _toRedrawTop + 1);
-
- *_pCaptureCounter = *_pCaptureCounter + 1;
- }
+ if (flags & 1) { // Do capture
+ updateAnim(layer, frame, animation, 0, drawDeltaX, drawDeltaY, 0);
- Mult::Mult_Object &obj = _vm->_mult->_objects[-animation - 1];
+ if (_toRedrawLeft == -12345)
+ return;
- if ((obj.videoSlot == 0) || !_vm->_vidPlayer->slotIsOpen(obj.videoSlot - 1)) {
- if (_vm->getGameType() == kGameTypeAdibou2) {
- if (!(flags & 4))
- _toRedrawLeft = -12345;
+ _vm->_game->capturePush(_toRedrawLeft, _toRedrawTop,
+ _toRedrawRight - _toRedrawLeft + 1,
+ _toRedrawBottom - _toRedrawTop + 1);
- int16 deltaX = 0;
- int16 deltaY = 0;
- int16 sprite_dest_left = 0;
- int16 sprite_dest_top = 0;
- int16 sprite_dest_right = 0;
- int16 sprite_dest_bottom = 0;
- int16 sprite_width = 0;
+ *_pCaptureCounter = *_pCaptureCounter + 1;
+ }
- if (obj.animName[0] != '\0') {
- if (obj.videoSlot == 0) {
- VideoPlayer::Properties props;
- props.x = 0;
- props.y = 0;
- props.startFrame = 0;
- props.lastFrame = 0;
- props.breakKey = 0;
- props.flags = 0;
- props.palStart = 0;
- props.palEnd = 0;
- props.sprite = 50 - obj.pAnimData->animation - 1;
+ Mult::Mult_Object &obj = _vm->_mult->_objects[-animation - 1];
+ if ((obj.videoSlot == 0) || !_vm->_vidPlayer->slotIsOpen(obj.videoSlot - 1)) {
+ if (_vm->getGameType() == kGameTypeAdibou2) {
+ if (!(flags & 4))
+ _toRedrawLeft = -12345;
- _vm->_mult->openObjVideo(obj.animName, props, animation);
- }
+ int16 deltaX = 0;
+ int16 deltaY = 0;
+ int16 sprite_dest_left = 0;
+ int16 sprite_dest_top = 0;
+ int16 sprite_dest_right = 0;
+ int16 sprite_dest_bottom = 0;
+ int16 sprite_width = 0;
+
+ if (obj.animName[0] != '\0') {
+ if (obj.videoSlot == 0) {
+ VideoPlayer::Properties props;
+ props.x = 0;
+ props.y = 0;
+ props.startFrame = 0;
+ props.lastFrame = 0;
+ props.breakKey = 0;
+ props.flags = 0;
+ props.palStart = 0;
+ props.palEnd = 0;
+ props.sprite = 50 - obj.pAnimData->animation - 1;
+
+
+ _vm->_mult->openObjVideo(obj.animName, props, animation);
+ }
- if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800) {
- if (doDraw) {
- if (frame == (int32) _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1 &&
- (int16) *obj.pPosX >= _animLeft &&
- (int16) *obj.pPosX <= _animTop) {
- if ((int16) *obj.pPosY + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) <= _animBottom
- && !(flags & 0x4)) {
-
- if (frame != obj.lastFrameIndex) {
- //_vm->_vidPlayer->setXY();
- VideoPlayer::Properties props;
- props.x = *obj.pPosX;
- props.y = *obj.pPosY;
- props.startFrame = 0;
- props.lastFrame = 0;
- props.breakKey = 0;
- props.flags = 0;
- props.palStart = 0;
- props.palEnd = 0;
- props.sprite = 50 - obj.pAnimData->animation - 1;
-
- _vm->_mult->openObjVideo(obj.animName, props, animation);
-
- sprite_dest_left = obj.spriteDestLeft;
- sprite_dest_top = obj.spriteDestTop;
- sprite_dest_right = obj.spriteDestRight;
- sprite_dest_bottom = obj.spriteDestBottom;
-
- if (flags & 0x2) {
- clipInRect(_vm->_mult->_animLeft,
- _vm->_mult->_animTop,
- _vm->_mult->_animWidth,
- _vm->_mult->_animHeight,
- &deltaX,
- &deltaY,
- &sprite_dest_left,
- &sprite_dest_top,
- &sprite_dest_right,
- &sprite_dest_bottom,
- layer);
- }
- } else if (flags & 4) {
- clipInRect(_toRedrawLeft,
- _toRedrawTop,
- _toRedrawRight - _toRedrawLeft + 1,
- _toRedrawBottom - _toRedrawTop + 1,
+ if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800) {
+ if (doDraw) {
+ if (frame == (int32) _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1 &&
+ (int16) *obj.pPosX >= _animLeft &&
+ (int16) *obj.pPosX <= _animTop) {
+ if ((int16) *obj.pPosY + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) <= _animBottom
+ && !(flags & 0x4)) {
+
+ if (frame != obj.lastFrameIndex) {
+ //_vm->_vidPlayer->setXY();
+ VideoPlayer::Properties props;
+ props.x = *obj.pPosX;
+ props.y = *obj.pPosY;
+ props.startFrame = 0;
+ props.lastFrame = 0;
+ props.breakKey = 0;
+ props.flags = 0;
+ props.palStart = 0;
+ props.palEnd = 0;
+ props.sprite = 50 - obj.pAnimData->animation - 1;
+
+ _vm->_mult->openObjVideo(obj.animName, props, animation);
+
+ sprite_dest_left = obj.spriteDestLeft;
+ sprite_dest_top = obj.spriteDestTop;
+ sprite_dest_right = obj.spriteDestRight;
+ sprite_dest_bottom = obj.spriteDestBottom;
+
+ if (flags & 0x2) {
+ clipInRect(_vm->_mult->_animLeft,
+ _vm->_mult->_animTop,
+ _vm->_mult->_animWidth,
+ _vm->_mult->_animHeight,
&deltaX,
&deltaY,
&sprite_dest_left,
@@ -729,298 +695,346 @@ void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
&sprite_dest_right,
&sprite_dest_bottom,
layer);
- } else {
- _toRedrawRight = sprite_dest_right;
- _toRedrawBottom = sprite_dest_bottom;
- _toRedrawLeft = sprite_dest_left;
- _toRedrawTop = sprite_dest_top;
}
+ } else if (flags & 4) {
+ clipInRect(_toRedrawLeft,
+ _toRedrawTop,
+ _toRedrawRight - _toRedrawLeft + 1,
+ _toRedrawBottom - _toRedrawTop + 1,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+ } else {
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ }
- if (!(flags & 4)) {
- _toRedrawRight = sprite_dest_right;
- _toRedrawBottom = sprite_dest_bottom;
- _toRedrawLeft = sprite_dest_left;
- _toRedrawTop = sprite_dest_top;
- }
+ if (!(flags & 4)) {
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
}
}
}
- else {
- if (frame != (int16) _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1) {
- //getFrameCoords
- }
-
- sprite_dest_left = obj.spriteDestLeft;
- sprite_dest_top = obj.spriteDestTop;
- sprite_dest_right = obj.spriteDestRight;
- sprite_dest_bottom = obj.spriteDestBottom;
- }
}
-
- // if (obj.field4F == 0)
- if (frame != obj.lastFrameIndex) {
- if ((obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800) ||
- doDraw) {
- if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800)
- warning("updateAnim Adibou2 stub obj.field_38 & 0x800 != 0");
-
- VideoPlayer::Properties props;
- props.x = 0;
- props.y = 0;
- props.startFrame = 0;
- props.lastFrame = 0;
- props.breakKey = 0;
- props.flags = 0;
- props.palStart = 0;
- props.palEnd = 0;
- props.sprite = 50 - obj.pAnimData->animation - 1;
-
- if (obj.videoSlot > 0)
- _vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
-
- int slot = _vm->_vidPlayer->openVideo(false, obj.animName, props);
- obj.videoSlot = slot + 1;
+ else {
+ if (frame != (int16) _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1) {
+ //getFrameCoords
}
+
+ sprite_dest_left = obj.spriteDestLeft;
+ sprite_dest_top = obj.spriteDestTop;
+ sprite_dest_right = obj.spriteDestRight;
+ sprite_dest_bottom = obj.spriteDestBottom;
}
+ }
- if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x8000) {
- deltaX = obj.spriteDestLeft;
- deltaY = obj.spriteDestTop;
- sprite_dest_left = *obj.pPosX + deltaX;
- sprite_dest_top = *obj.pPosY + deltaY;
- sprite_width = obj.spriteDestRight- obj.spriteDestLeft + 1;
- if (layer & 0x80) {
- sprite_dest_left = *obj.pPosX + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - deltaX - sprite_width;
- }
+ // if (obj.field4F == 0)
+ if (frame != obj.lastFrameIndex) {
+ if ((obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800) ||
+ doDraw) {
+ if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x800)
+ warning("updateAnim Adibou2 stub obj.field_38 & 0x800 != 0");
+
+ VideoPlayer::Properties props;
+ props.x = 0;
+ props.y = 0;
+ props.startFrame = 0;
+ props.lastFrame = 0;
+ props.breakKey = 0;
+ props.flags = 0;
+ props.palStart = 0;
+ props.palEnd = 0;
+ props.sprite = 50 - obj.pAnimData->animation - 1;
+
+ if (obj.videoSlot > 0)
+ _vm->_vidPlayer->closeVideo(obj.videoSlot - 1);
+
+ int slot = _vm->_vidPlayer->openVideo(false, obj.animName, props);
+ obj.videoSlot = slot + 1;
}
- else {
- sprite_dest_left = *obj.pPosX ;
- sprite_dest_top = *obj.pPosY;
- sprite_dest_right = sprite_dest_left + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - 1;
- sprite_dest_bottom = sprite_dest_top + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) - 1;
+ }
+
+ if (obj.videoSlot != 0 && _vm->_vidPlayer->getFlags(obj.videoSlot - 1) & 0x8000) {
+ deltaX = obj.spriteDestLeft;
+ deltaY = obj.spriteDestTop;
+ sprite_dest_left = *obj.pPosX + deltaX;
+ sprite_dest_top = *obj.pPosY + deltaY;
+ sprite_width = obj.spriteDestRight- obj.spriteDestLeft + 1;
+ if (layer & 0x80) {
+ sprite_dest_left = *obj.pPosX + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - deltaX - sprite_width;
}
+ }
+ else {
+ sprite_dest_left = *obj.pPosX ;
+ sprite_dest_top = *obj.pPosY;
+ sprite_dest_right = sprite_dest_left + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - 1;
+ sprite_dest_bottom = sprite_dest_top + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) - 1;
+ }
+
+ } else {
+ auto &sprite = _vm->_draw->_spritesArray[50 - animation - 1];
+ if (sprite == nullptr)
+ return;
+ sprite_dest_left = *obj.pPosX;
+ sprite_dest_top = *obj.pPosY;
+ sprite_dest_right = sprite_dest_left + sprite->getWidth() - 1;
+ sprite_dest_bottom = sprite_dest_top + sprite->getHeight() - 1;
+
+ if (flags & 2) {
+ clipInRect(_vm->_mult->_animLeft,
+ _vm->_mult->_animTop,
+ _vm->_mult->_animWidth,
+ _vm->_mult->_animHeight,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+ } else if (flags & 4) {
+ clipInRect(_toRedrawLeft,
+ _toRedrawTop,
+ _toRedrawRight - _toRedrawLeft + 1,
+ _toRedrawBottom - _toRedrawTop + 1,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
} else {
- auto &sprite = _vm->_draw->_spritesArray[50 - animation - 1];
- if (sprite == nullptr)
- return;
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ }
- sprite_dest_left = *obj.pPosX;
- sprite_dest_top = *obj.pPosY;
- sprite_dest_right = sprite_dest_left + sprite->getWidth() - 1;
- sprite_dest_bottom = sprite_dest_top + sprite->getHeight() - 1;
-
- if (flags & 2) {
- clipInRect(_vm->_mult->_animLeft,
- _vm->_mult->_animTop,
- _vm->_mult->_animWidth,
- _vm->_mult->_animHeight,
- &deltaX,
- &deltaY,
- &sprite_dest_left,
- &sprite_dest_top,
- &sprite_dest_right,
- &sprite_dest_bottom,
- layer);
- } else if (flags & 4) {
- clipInRect(_toRedrawLeft,
- _toRedrawTop,
- _toRedrawRight - _toRedrawLeft + 1,
- _toRedrawBottom - _toRedrawTop + 1,
- &deltaX,
- &deltaY,
- &sprite_dest_left,
- &sprite_dest_top,
- &sprite_dest_right,
- &sprite_dest_bottom,
- layer);
- } else {
- _toRedrawRight = sprite_dest_right;
- _toRedrawBottom = sprite_dest_bottom;
- _toRedrawLeft = sprite_dest_left;
- _toRedrawTop = sprite_dest_top;
- }
+ if (doDraw) {
+ if (sprite_dest_left > sprite_dest_right)
+ return;
- if (doDraw) {
- if (sprite_dest_left > sprite_dest_right)
- return;
-
- if (sprite_dest_top > sprite_dest_bottom)
- return;
-
- _vm->_draw->_sourceSurface = 50 - animation - 1;
- _vm->_draw->_destSurface = Draw::kBackSurface;
-
- clipInRect(_vm->_mult->_animLeft,
- _vm->_mult->_animTop,
- _vm->_mult->_animWidth,
- _vm->_mult->_animHeight,
- &deltaX,
- &deltaY,
- &sprite_dest_left,
- &sprite_dest_top,
- &sprite_dest_right,
- &sprite_dest_bottom,
- layer);
-
- _vm->_draw->_spriteLeft = deltaX;
- _vm->_draw->_spriteTop = deltaY;
- _vm->_draw->_spriteRight = sprite_dest_right - sprite_dest_left + 1;
- _vm->_draw->_spriteBottom = sprite_dest_bottom - sprite_dest_top + 1;
- _vm->_draw->_destSpriteX = sprite_dest_left,
- _vm->_draw->_destSpriteY = sprite_dest_top,
-
- _vm->_draw->_transparency = layer;
- _vm->_draw->spriteOperation(DRAW_BLITSURF);
- }
+ if (sprite_dest_top > sprite_dest_bottom)
+ return;
- if (!(flags & 4)) {
- _toRedrawLeft = sprite_dest_left;
- _toRedrawTop = sprite_dest_top;
- _toRedrawRight = sprite_dest_right;
- _toRedrawBottom = sprite_dest_bottom;
- }
+ _vm->_draw->_sourceSurface = 50 - animation - 1;
+ _vm->_draw->_destSurface = Draw::kBackSurface;
+
+ clipInRect(_vm->_mult->_animLeft,
+ _vm->_mult->_animTop,
+ _vm->_mult->_animWidth,
+ _vm->_mult->_animHeight,
+ &deltaX,
+ &deltaY,
+ &sprite_dest_left,
+ &sprite_dest_top,
+ &sprite_dest_right,
+ &sprite_dest_bottom,
+ layer);
+
+ _vm->_draw->_spriteLeft = deltaX;
+ _vm->_draw->_spriteTop = deltaY;
+ _vm->_draw->_spriteRight = sprite_dest_right - sprite_dest_left + 1;
+ _vm->_draw->_spriteBottom = sprite_dest_bottom - sprite_dest_top + 1;
+ _vm->_draw->_destSpriteX = sprite_dest_left,
+ _vm->_draw->_destSpriteY = sprite_dest_top,
+
+ _vm->_draw->_transparency = layer;
+ _vm->_draw->spriteOperation(DRAW_BLITSURF);
}
- return;
- } else {
- _toRedrawLeft = -12345;
- return;
+ if (!(flags & 4)) {
+ _toRedrawLeft = sprite_dest_left;
+ _toRedrawTop = sprite_dest_top;
+ _toRedrawRight = sprite_dest_right;
+ _toRedrawBottom = sprite_dest_bottom;
+ }
}
} else {
- if (frame >= (int32)_vm->_vidPlayer->getFrameCount(obj.videoSlot - 1))
- frame = _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1;
-
- if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) >= 255) {
- // Allow for object videos with more than 255 frames, although the
- // object frame counter is just a byte.
+ // Woodruff
+ _toRedrawLeft = -12345;
+ }
- uint32 curFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1;
- uint16 frameWrap = curFrame / 256;
+ return;
+ }
- frame = ((frame + 1) % 256) + frameWrap * 256;
- }
+ if (frame >= (int32)_vm->_vidPlayer->getFrameCount(obj.videoSlot - 1))
+ frame = _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1;
- if (frame != (int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1)) {
- // Seek to frame
+ if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) >= 255) {
+ // Allow for object videos with more than 255 frames, although the
+ // object frame counter is just a byte.
- VideoPlayer::Properties props;
+ uint32 curFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1;
+ uint16 frameWrap = curFrame / 256;
- props.forceSeek = true;
- props.waitEndFrame = false;
- props.lastFrame = frame;
+ frame = ((frame + 1) % 256) + frameWrap * 256;
+ }
- if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) < frame)
- props.startFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1;
- else
- props.startFrame = frame;
+ if (frame != (int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1)) {
+ // Seek to frame
- _vm->_vidPlayer->play(obj.videoSlot - 1, props);
- }
+ VideoPlayer::Properties props;
- int32 subtitle = _vm->_vidPlayer->getSubtitleIndex(obj.videoSlot - 1);
- if (subtitle != -1)
- _vm->_draw->printTotText(subtitle);
-
- destX = 0;
- destY = 0;
- left = *(obj.pPosX);
- top = *(obj.pPosY);
- right = left + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - 1;
- bottom = top + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) - 1;
-
- if (flags & 2) {
- if (left < _vm->_mult->_animLeft) {
- destX += _vm->_mult->_animLeft - left;
- left = _vm->_mult->_animLeft;
- }
+ props.forceSeek = true;
+ props.waitEndFrame = false;
+ props.lastFrame = frame;
- if ((_vm->_mult->_animLeft + _vm->_mult->_animWidth) <= right)
- right = _vm->_mult->_animLeft + _vm->_mult->_animWidth - 1;
+ if ((int32)_vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) < frame)
+ props.startFrame = _vm->_vidPlayer->getCurrentFrame(obj.videoSlot - 1) + 1;
+ else
+ props.startFrame = frame;
- if (top < _vm->_mult->_animTop) {
- destY += _vm->_mult->_animTop - top;
- top = _vm->_mult->_animTop;
- }
+ _vm->_vidPlayer->play(obj.videoSlot - 1, props);
+ }
- if ((_vm->_mult->_animTop + _vm->_mult->_animHeight) <= bottom)
- bottom = _vm->_mult->_animTop + _vm->_mult->_animHeight - 1;
+ int32 subtitle = _vm->_vidPlayer->getSubtitleIndex(obj.videoSlot - 1);
+ if (subtitle != -1)
+ _vm->_draw->printTotText(subtitle);
+
+ destX = 0;
+ destY = 0;
+ left = *(obj.pPosX);
+ top = *(obj.pPosY);
+ right = left + _vm->_vidPlayer->getWidth(obj.videoSlot - 1) - 1;
+ bottom = top + _vm->_vidPlayer->getHeight(obj.videoSlot - 1) - 1;
+
+ if (flags & 2) {
+ if (left < _vm->_mult->_animLeft) {
+ destX += _vm->_mult->_animLeft - left;
+ left = _vm->_mult->_animLeft;
+ }
- } else if (flags & 4) {
- if (left < _toRedrawLeft) {
- destX += _toRedrawLeft - left;
- left = _toRedrawLeft;
- }
+ if ((_vm->_mult->_animLeft + _vm->_mult->_animWidth) <= right)
+ right = _vm->_mult->_animLeft + _vm->_mult->_animWidth - 1;
- if (right > _toRedrawRight)
- right = _toRedrawRight;
+ if (top < _vm->_mult->_animTop) {
+ destY += _vm->_mult->_animTop - top;
+ top = _vm->_mult->_animTop;
+ }
- if (top < _toRedrawTop) {
- destY += _toRedrawTop - top;
- top = _toRedrawTop;
- }
+ if ((_vm->_mult->_animTop + _vm->_mult->_animHeight) <= bottom)
+ bottom = _vm->_mult->_animTop + _vm->_mult->_animHeight - 1;
- if (bottom > _toRedrawBottom)
- bottom = _toRedrawBottom;
+ } else if (flags & 4) {
+ if (left < _toRedrawLeft) {
+ destX += _toRedrawLeft - left;
+ left = _toRedrawLeft;
+ }
- } else {
- _toRedrawTop = top;
- _toRedrawLeft = left;
- _toRedrawRight = right;
- _toRedrawBottom = bottom;
- }
+ if (right > _toRedrawRight)
+ right = _toRedrawRight;
- if (doDraw) {
- if ((left > right) || (top > bottom))
- return;
+ if (top < _toRedrawTop) {
+ destY += _toRedrawTop - top;
+ top = _toRedrawTop;
+ }
- if (left < _vm->_mult->_animLeft) {
- destX += _vm->_mult->_animLeft - left;
- left = _vm->_mult->_animLeft;
- }
+ if (bottom > _toRedrawBottom)
+ bottom = _toRedrawBottom;
- if ((_vm->_mult->_animLeft + _vm->_mult->_animWidth) <= right)
- right = _vm->_mult->_animLeft + _vm->_mult->_animWidth - 1;
+ } else {
+ _toRedrawTop = top;
+ _toRedrawLeft = left;
+ _toRedrawRight = right;
+ _toRedrawBottom = bottom;
+ }
- if (top < _vm->_mult->_animTop) {
- destY += _vm->_mult->_animTop - top;
- top = _vm->_mult->_animTop;
- }
+ if (doDraw) {
+ if ((left > right) || (top > bottom))
+ return;
- if ((_vm->_mult->_animTop + _vm->_mult->_animHeight) <= bottom)
- bottom = _vm->_mult->_animTop + _vm->_mult->_animHeight - 1;
-
- _vm->_draw->_spriteLeft = destX;
- _vm->_draw->_spriteTop = destY;
- _vm->_draw->_spriteRight = right - left + 1;
- _vm->_draw->_spriteBottom = bottom - top + 1;
- _vm->_draw->_destSpriteX = left;
- _vm->_draw->_destSpriteY = top;
- _vm->_draw->_transparency = layer;
- if (layer & 0x80)
- _vm->_draw->_spriteLeft = _vm->_vidPlayer->getWidth(obj.videoSlot - 1) -
- (destX + _vm->_draw->_spriteRight);
-
- _vm->_vidPlayer->copyFrame(obj.videoSlot - 1, *_vm->_draw->_backSurface,
- _vm->_draw->_spriteLeft, _vm->_draw->_spriteTop,
- _vm->_draw->_spriteRight, _vm->_draw->_spriteBottom,
- _vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
- (_vm->_draw->_transparency != 0) ? 0 : -1,
- (_vm->_draw->_transparency & 0x80));
-
- _vm->_draw->invalidateRect(_vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
- _vm->_draw->_destSpriteX + _vm->_draw->_spriteRight - 1,
- _vm->_draw->_destSpriteY + _vm->_draw->_spriteBottom - 1);
- }
+ if (left < _vm->_mult->_animLeft) {
+ destX += _vm->_mult->_animLeft - left;
+ left = _vm->_mult->_animLeft;
}
- if (!(flags & 4)) {
- _animLeft = _toRedrawLeft = left;
- _animTop = _toRedrawTop = top;
- _animRight = _toRedrawRight = right;
- _animBottom = _toRedrawBottom = bottom;
+ if ((_vm->_mult->_animLeft + _vm->_mult->_animWidth) <= right)
+ right = _vm->_mult->_animLeft + _vm->_mult->_animWidth - 1;
+
+ if (top < _vm->_mult->_animTop) {
+ destY += _vm->_mult->_animTop - top;
+ top = _vm->_mult->_animTop;
}
+ if ((_vm->_mult->_animTop + _vm->_mult->_animHeight) <= bottom)
+ bottom = _vm->_mult->_animTop + _vm->_mult->_animHeight - 1;
+
+ _vm->_draw->_spriteLeft = destX;
+ _vm->_draw->_spriteTop = destY;
+ _vm->_draw->_spriteRight = right - left + 1;
+ _vm->_draw->_spriteBottom = bottom - top + 1;
+ _vm->_draw->_destSpriteX = left;
+ _vm->_draw->_destSpriteY = top;
+ _vm->_draw->_transparency = layer;
+ if (layer & 0x80)
+ _vm->_draw->_spriteLeft = _vm->_vidPlayer->getWidth(obj.videoSlot - 1) -
+ (destX + _vm->_draw->_spriteRight);
+
+ _vm->_vidPlayer->copyFrame(obj.videoSlot - 1, *_vm->_draw->_backSurface,
+ _vm->_draw->_spriteLeft, _vm->_draw->_spriteTop,
+ _vm->_draw->_spriteRight, _vm->_draw->_spriteBottom,
+ _vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
+ (_vm->_draw->_transparency != 0) ? 0 : -1,
+ (_vm->_draw->_transparency & 0x80));
+
+ _vm->_draw->invalidateRect(_vm->_draw->_destSpriteX, _vm->_draw->_destSpriteY,
+ _vm->_draw->_destSpriteX + _vm->_draw->_spriteRight - 1,
+ _vm->_draw->_destSpriteY + _vm->_draw->_spriteBottom - 1);
+
+ }
+
+ if (!(flags & 4)) {
+ _animLeft = _toRedrawLeft = left;
+ _animTop = _toRedrawTop = top;
+ _animRight = _toRedrawRight = right;
+ _animBottom = _toRedrawBottom = bottom;
+ }
+}
+
+// flags & 1 - do capture all area animation is occupying
+// flags & 4 == 0 - calculate animation final size
+// flags & 2 != 0 - don't check with "toRedraw"'s
+// flags & 4 != 0 - checkk view toRedraw
+void Scenery::updateAnim(int16 layer, int16 frame, int16 animation, int16 flags,
+ int16 drawDeltaX, int16 drawDeltaY, char doDraw) {
+ AnimLayer *layerPtr;
+ PieceDesc **pictPtr;
+ AnimFramePiece *framePtr;
+
+ uint16 pieceIndex;
+ uint16 pictIndex;
+
+ int16 left;
+ int16 right;
+ int16 top;
+ int16 bottom;
+
+ byte highX;
+ byte highY;
+
+ int16 i;
+ int16 transp;
+
+ int16 destX;
+ int16 destY;
+
+ if ((animation < 0) &&
+ ((_vm->getGameType() == kGameTypeWoodruff) ||
+ (_vm->getGameType() == kGameTypeAdibou2))) {
+ // Object video
+
+ updateAnimObjectVideo(layer, frame, animation, flags, drawDeltaX, drawDeltaY, doDraw);
return;
}
diff --git a/engines/gob/scenery.h b/engines/gob/scenery.h
index f579aba26cf..5a0c459eecf 100644
--- a/engines/gob/scenery.h
+++ b/engines/gob/scenery.h
@@ -113,6 +113,8 @@ public:
void freeAnim(int16 index);
void updateAnim(int16 layer, int16 frame, int16 animation,
int16 flags, int16 drawDeltaX, int16 drawDeltaY, char doDraw);
+ void updateAnimObjectVideo(int16 layer, int16 frame, int16 animation,
+ int16 flags, int16 drawDeltaX, int16 drawDeltaY, char doDraw);
void writeAnimLayerInfo(uint16 index, uint16 layer,
int16 varDX, int16 varDY, int16 varUnk0, int16 varFrames);
Commit: abade0260df26d514bd69077dd0772d7f7d8681b
https://github.com/scummvm/scummvm/commit/abade0260df26d514bd69077dd0772d7f7d8681b
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:34+01:00
Commit Message:
GOB: fix some animation speed issues in Adibou2
In some cases, e.g. Adibou walking from his house, the animation is drawn using video object and _mult->animate() calls, but outside any "evaluate hotspots" loop. The loop is done directly from the scripts and has no synchronization with frame rate, so the animation goes too fast.
We add a timing correction in the animate() loop, by not incrementing the video frame number in video object if we are in advance, and continuing the loop, to keep the UI responsive.
Changed paths:
engines/gob/mult_v2.cpp
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index fec705da760..8535b2ebcd0 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -699,9 +699,18 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
animLayer = _vm->_scenery->getAnimLayer(nAnim, nLayer);
} else {
if (animObj.videoSlot > 0) {
- if (_vm->getGameType() != kGameTypeAdibou2)
+ if (_vm->getGameType() == kGameTypeAdibou2) {
+ int expectedFrame = _vm->_vidPlayer->getExpectedFrameFromCurrentTime(animObj.videoSlot - 1);
+ if (expectedFrame >= 0 &&
+ expectedFrame < animData.frame) {
+ return; // We are in advance, do not further increment the frame
+ }
+
+ _vm->_vidPlayer->waitEndFrame(animObj.videoSlot - 1, true);
+ } else {
_vm->_video->retrace();
- _vm->_vidPlayer->waitEndFrame(animObj.videoSlot - 1, true);
+ _vm->_vidPlayer->waitEndFrame(animObj.videoSlot - 1, true);
+ }
}
}
Commit: 988d4882a2ee0a1a94291e818eaa68072c25347d
https://github.com/scummvm/scummvm/commit/988d4882a2ee0a1a94291e818eaa68072c25347d
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:34+01:00
Commit Message:
GOB: fix a few cursor glitches in Adibou2
Try to mimic more closely what is done in the executable.
Fixes black squares sometimes blinking around the cursor (just after selecting the character, when hoovering seeds bags in the vegetable garden...), and fix a temporarily disappearing "waiting" cursor in some "change CD" screens.
Changed paths:
A engines/gob/draw_v7.cpp
engines/gob/draw.cpp
engines/gob/draw.h
engines/gob/gob.cpp
engines/gob/inter.h
engines/gob/inter_v7.cpp
engines/gob/module.mk
diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp
index 2ae69dc6ac9..c5f537712c5 100644
--- a/engines/gob/draw.cpp
+++ b/engines/gob/draw.cpp
@@ -386,6 +386,103 @@ void Draw::adjustCoords(char adjust, int16 *coord1, int16 *coord2) {
}
}
+void Draw::resizeCursors(int16 width, int16 height, int16 count, bool transparency) {
+ if (width <= 0)
+ width = _vm->_draw->_cursorWidth;
+ if (height <= 0)
+ height = _vm->_draw->_cursorHeight;
+
+ _vm->_draw->_transparentCursor = transparency;
+
+ bool sameCursorDimensions = (_vm->_draw->_cursorWidth == width) && (_vm->_draw->_cursorHeight == height);
+
+ // Cursors sprite already big enough
+ if (sameCursorDimensions &&
+ _vm->_draw->_cursorCount >= count &&
+ _vm->_draw->_doCursorPalettes != nullptr)
+ return;
+
+ debugC(5, kDebugGraphics, "Resizing cursors: size %dx%d -> %dx%d, cursor count %d -> %d)",
+ _vm->_draw->_cursorWidth,
+ width,
+ _vm->_draw->_cursorHeight,
+ height,
+ _vm->_draw->_cursorCount,
+ count);
+ SurfacePtr oldCursorsSprites = _vm->_draw->_cursorSprites;
+ int oldCursorCount = _vm->_draw->_cursorCount;
+ _vm->_draw->_cursorCount = count;
+ _vm->_draw->_cursorWidth = width;
+ _vm->_draw->_cursorHeight = height;
+
+ _vm->_draw->freeSprite(Draw::kCursorSurface);
+ _vm->_draw->_cursorSprites.reset();
+ _vm->_draw->_cursorSpritesBack.reset();
+ _vm->_draw->_scummvmCursor.reset();
+
+ _vm->_draw->initSpriteSurf(Draw::kCursorSurface, width * count, height, 2);
+
+ _vm->_draw->_cursorSpritesBack = _vm->_draw->_spritesArray[Draw::kCursorSurface];
+ _vm->_draw->_cursorSprites = _vm->_draw->_cursorSpritesBack;
+
+ if (sameCursorDimensions && oldCursorCount < count)
+ _vm->_draw->_cursorSprites->blit(*oldCursorsSprites);
+ oldCursorsSprites.reset();
+
+ _vm->_draw->_scummvmCursor = _vm->_video->initSurfDesc(width, height, SCUMMVM_CURSOR);
+
+ if (oldCursorCount < count || _vm->_draw->_doCursorPalettes == nullptr) {
+ bool *oldDoCursorPalettes = _vm->_draw->_doCursorPalettes;
+ byte *oldCursorPalettes = _vm->_draw->_cursorPalettes;
+ byte *oldCursorKeyColors = _vm->_draw->_cursorKeyColors;
+ uint16 *oldCursorPaletteStarts = _vm->_draw->_cursorPaletteStarts;
+ uint16 *oldCursorPaletteCounts = _vm->_draw->_cursorPaletteCounts;
+ int32 *oldCursorHotspotsX = _vm->_draw->_cursorHotspotsX;
+ int32 *oldCursorHotspotsY = _vm->_draw->_cursorHotspotsY;
+
+ _vm->_draw->_cursorPalettes = new byte[256 * 3 * count];
+ _vm->_draw->_doCursorPalettes = new bool[count];
+ _vm->_draw->_cursorKeyColors = new byte[count];
+ _vm->_draw->_cursorPaletteStarts = new uint16[count];
+ _vm->_draw->_cursorPaletteCounts = new uint16[count];
+ _vm->_draw->_cursorHotspotsX = new int32[count];
+ _vm->_draw->_cursorHotspotsY = new int32[count];
+
+ memset(_vm->_draw->_cursorPalettes , 0, count * 256 * 3);
+ memset(_vm->_draw->_doCursorPalettes , 0, count * sizeof(bool));
+ memset(_vm->_draw->_cursorKeyColors , 0, count * sizeof(byte));
+ memset(_vm->_draw->_cursorPaletteStarts, 0, count * sizeof(uint16));
+ memset(_vm->_draw->_cursorPaletteCounts, 0, count * sizeof(uint16));
+ memset(_vm->_draw->_cursorHotspotsX , 0, count * sizeof(int32));
+ memset(_vm->_draw->_cursorHotspotsY , 0, count * sizeof(int32));
+
+ if (sameCursorDimensions && oldCursorCount < count) {
+ if (oldCursorPalettes != nullptr)
+ memcpy(_vm->_draw->_cursorPalettes, oldCursorPalettes, oldCursorCount * 256 * 3);
+ if (oldDoCursorPalettes != nullptr)
+ memcpy(_vm->_draw->_doCursorPalettes, oldDoCursorPalettes, oldCursorCount * sizeof(bool));
+ if (oldCursorKeyColors != nullptr)
+ memcpy(_vm->_draw->_cursorKeyColors, oldCursorKeyColors, oldCursorCount * sizeof(byte));
+ if (oldCursorPaletteStarts != nullptr)
+ memcpy(_vm->_draw->_cursorPaletteStarts, oldCursorPaletteStarts, oldCursorCount * sizeof(uint16));
+ if (oldCursorPaletteCounts != nullptr)
+ memcpy(_vm->_draw->_cursorPaletteCounts, oldCursorPaletteCounts, oldCursorCount * sizeof(uint16));
+ if (oldCursorHotspotsX != nullptr)
+ memcpy(_vm->_draw->_cursorHotspotsX, oldCursorHotspotsX, oldCursorCount * sizeof(int32));
+ if (oldCursorHotspotsY != nullptr)
+ memcpy(_vm->_draw->_cursorHotspotsY, oldCursorHotspotsY, oldCursorCount * sizeof(int32));
+ }
+
+ delete[] oldDoCursorPalettes;
+ delete[] oldCursorPalettes;
+ delete[] oldCursorKeyColors;
+ delete[] oldCursorPaletteStarts;
+ delete[] oldCursorPaletteCounts;
+ delete[] oldCursorHotspotsX;
+ delete[] oldCursorHotspotsY;
+ }
+}
+
int Draw::stringLength(const char *str, uint16 fontIndex) {
static const int8 japaneseExtraCharLen[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
diff --git a/engines/gob/draw.h b/engines/gob/draw.h
index be0a006bcc5..7736d955828 100644
--- a/engines/gob/draw.h
+++ b/engines/gob/draw.h
@@ -22,6 +22,7 @@
#ifndef GOB_DRAW_H
#define GOB_DRAW_H
+#include "common/winexe.h"
#include "gob/video.h"
namespace Gob {
@@ -143,6 +144,9 @@ public:
int8 _cursorAnimLow[40];
int8 _cursorAnimHigh[40];
int8 _cursorAnimDelays[40];
+ Common::String _cursorNames[40];
+ Common::String _cursorName;
+ bool _isCursorFromExe;
int32 _cursorCount;
bool *_doCursorPalettes;
@@ -191,6 +195,7 @@ public:
void adjustCoords(char adjust, uint16 *coord1, uint16 *coord2) {
adjustCoords(adjust, (int16 *)coord1, (int16 *)coord2);
}
+ void resizeCursors(int16 width, int16 height, int16 count, bool transparency);
int stringLength(const char *str, uint16 fontIndex);
void printTextCentered(int16 id, int16 left, int16 top, int16 right,
int16 bottom, const char *str, int16 fontIndex, int16 color);
@@ -208,6 +213,7 @@ public:
virtual void initScreen() = 0;
virtual void closeScreen() = 0;
virtual void blitCursor() = 0;
+
virtual void animateCursor(int16 cursor) = 0;
virtual void printTotText(int16 id) = 0;
virtual void spriteOperation(int16 operation) = 0;
@@ -298,6 +304,21 @@ public:
void spriteOperation(int16 operation) override;
};
+
+class Draw_v7: public Draw_Playtoons {
+public:
+ Draw_v7(GobEngine *vm);
+ ~Draw_v7() override;
+ void animateCursor(int16 cursor) override;
+
+
+private:
+ Common::WinResources *_cursors;
+
+ bool loadCursorFile();
+ bool loadCursorFromFile(int32 cursorIndex);
+};
+
// Draw operations
#define DRAW_BLITSURF 0
diff --git a/engines/gob/draw_v7.cpp b/engines/gob/draw_v7.cpp
new file mode 100644
index 00000000000..05a23f1adde
--- /dev/null
+++ b/engines/gob/draw_v7.cpp
@@ -0,0 +1,269 @@
+/* ScummVM - Graphic Adventure Engine
+*
+* ScummVM is the legal property of its developers, whose names
+* are too numerous to list here. Please refer to the COPYRIGHT
+* file distributed with this source distribution.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "common/winexe_ne.h"
+#include "common/winexe_pe.h"
+#include "graphics/cursorman.h"
+
+#include "gob/dataio.h"
+#include "gob/draw.h"
+#include "gob/game.h"
+#include "gob/global.h"
+#include "gob/hotspots.h"
+#include "gob/inter.h"
+#include "gob/resources.h"
+#include "gob/scenery.h"
+#include "gob/script.h"
+#include "graphics/wincursor.h"
+
+namespace Gob {
+
+Draw_v7::Draw_v7(GobEngine *vm) : Draw_Playtoons(vm), _cursors(nullptr) {
+}
+
+Draw_v7::~Draw_v7() {
+ delete _cursors;
+}
+
+bool Draw_v7::loadCursorFile() {
+ if (_cursors)
+ return true;
+
+ if (_vm->_dataIO->hasFile("cursor32.dll")) {
+ _cursors = new Common::PEResources();
+ if (_cursors->loadFromEXE("cursor32.dll"))
+ return true;
+ }
+ else if (_vm->_dataIO->hasFile("cursor.dll")) {
+ _cursors = new Common::NEResources();
+ if (_cursors->loadFromEXE("cursor.dll"))
+ return true;
+ }
+
+ delete _cursors;
+ _cursors = nullptr;
+
+ return false;
+}
+
+bool Draw_v7::loadCursorFromFile(int cursorIndex) {
+ if (cursorIndex < 0 || cursorIndex >= 40)
+ return false;
+
+ Common::String cursorName = _cursorNames[cursorIndex];
+
+ Graphics::WinCursorGroup *cursorGroup = nullptr;
+ Graphics::Cursor *defaultCursor = nullptr;
+
+ // Load the cursor file and cursor group
+ if (loadCursorFile())
+ cursorGroup = Graphics::WinCursorGroup::createCursorGroup(_cursors, Common::WinResourceID(cursorName));
+
+ // If the requested cursor does not exist, create a default one
+ const Graphics::Cursor *cursor = nullptr;
+ if (!cursorGroup || cursorGroup->cursors.empty() || !cursorGroup->cursors[0].cursor) {
+ defaultCursor = Graphics::makeDefaultWinCursor();
+
+ cursor = defaultCursor;
+ } else
+ cursor = cursorGroup->cursors[0].cursor;
+
+ // Make sure the cursors sprite it big enough
+ resizeCursors(cursor->getWidth(), cursor->getHeight(), cursorIndex + 1, true);
+
+ Surface cursorSurf(cursor->getWidth(), cursor->getHeight(), 1, cursor->getSurface());
+
+ _vm->_draw->_cursorSprites->blit(cursorSurf, cursorIndex * _vm->_draw->_cursorWidth, 0);
+
+ memcpy(_vm->_draw->_cursorPalettes + cursorIndex * 256 * 3, cursor->getPalette(), cursor->getPaletteCount() * 3);
+
+ _vm->_draw->_doCursorPalettes [cursorIndex] = true;
+ _vm->_draw->_cursorKeyColors [cursorIndex] = cursor->getKeyColor();
+ _vm->_draw->_cursorPaletteStarts[cursorIndex] = cursor->getPaletteStartIndex();
+ _vm->_draw->_cursorPaletteCounts[cursorIndex] = cursor->getPaletteCount();
+ _vm->_draw->_cursorHotspotsX [cursorIndex] = cursor->getHotspotX();
+ _vm->_draw->_cursorHotspotsY [cursorIndex] = cursor->getHotspotY();
+
+ delete cursorGroup;
+ delete defaultCursor;
+ return true;
+}
+
+void Draw_v7::animateCursor(int16 cursor) {
+ if (!_cursorSprites)
+ return;
+
+ int16 cursorIndex = cursor;
+ int16 newX = 0, newY = 0;
+ uint16 hotspotX, hotspotY;
+
+ _showCursor |= 1;
+
+ // .-- _draw_animateCursorSUB1 ---
+ if (cursorIndex == -1) {
+ cursorIndex =
+ _vm->_game->_hotspots->findCursor(_vm->_global->_inter_mouseX,
+ _vm->_global->_inter_mouseY);
+
+ if (_cursorAnimLow[cursorIndex] == -1)
+ cursorIndex = 1;
+ }
+ // '------
+
+ if (_cursorAnimLow[cursorIndex] != -1) {
+ // .-- _draw_animateCursorSUB2 ---
+ if (cursorIndex == _cursorIndex) {
+ if ((_cursorAnimDelays[_cursorIndex] != 0) &&
+ ((_cursorTimeKey + (_cursorAnimDelays[_cursorIndex] * 10)) <=
+ _vm->_util->getTimeKey())) {
+ _cursorAnim++;
+ if ((_cursorAnimHigh[_cursorIndex] < _cursorAnim) ||
+ (_cursorAnimLow[_cursorIndex] > _cursorAnim))
+ _cursorAnim = _cursorAnimLow[_cursorIndex];
+ _cursorTimeKey = _vm->_util->getTimeKey();
+ } else {
+ if (_noInvalidated && (_vm->_global->_inter_mouseX == _cursorX) &&
+ (_vm->_global->_inter_mouseY == _cursorY)) {
+ _vm->_video->waitRetrace();
+ return;
+ }
+ }
+ } else {
+ _cursorIndex = cursorIndex;
+ if (_cursorAnimDelays[cursorIndex] != 0) {
+ _cursorAnim = _cursorAnimLow[cursorIndex];
+ _cursorTimeKey = _vm->_util->getTimeKey();
+ }
+ }
+
+ if (_cursorAnimDelays[_cursorIndex] != 0) {
+ if ((_cursorAnimHigh[_cursorIndex] < _cursorAnim) ||
+ (_cursorAnimLow[_cursorIndex] > _cursorAnim))
+ _cursorAnim = _cursorAnimLow[_cursorIndex];
+
+ //debugC(1, kDebugGraphics, "Draw_v7::animateCursor() - cursor index %d replaced by cursor anim '%d'", cursorIndex, _cursorAnim);
+ cursorIndex = _cursorAnim;
+ }
+ // '------
+
+ bool cursorChanged = _cursorNames[cursorIndex] != _cursorName;
+
+ if (((!_cursorNames[cursorIndex].empty() || _isCursorFromExe)) && cursorChanged) {
+ _cursorName = _cursorNames[cursorIndex];
+
+ // Clear the cursor sprite at that index
+ _vm->_draw->_cursorSprites->fillRect(cursorIndex * _vm->_draw->_cursorWidth, 0,
+ cursorIndex * _vm->_draw->_cursorWidth + _vm->_draw->_cursorWidth - 1,
+ _vm->_draw->_cursorHeight - 1, 0);
+
+ // If the cursor name is empty, that cursor will be drawn by the scripts
+ if (_cursorNames[cursorIndex].empty() || _cursorNames[cursorIndex] == "VIDE") { // "VIDE" is "empty" in french
+ for (int i = 0; i < 40; i++) {
+ _cursorNames[i].clear();
+ }
+
+ _isCursorFromExe = false;
+
+ // Make sure the cursors sprite is big enough and set to non-extern palette
+ resizeCursors(-1, -1, cursorIndex + 1, true);
+ _vm->_draw->_doCursorPalettes[cursorIndex] = false;
+
+ _cursorX = _vm->_global->_inter_mouseX;
+ _cursorY = _vm->_global->_inter_mouseY;
+ _showCursor &= ~1;
+ return;
+ }
+ else {
+ if (!loadCursorFromFile(cursorIndex)) {
+ _cursorX = _vm->_global->_inter_mouseX;
+ _cursorY = _vm->_global->_inter_mouseY;
+ return;
+ }
+
+ _isCursorFromExe = true;
+ }
+ }
+
+ if (cursorChanged || !_isCursorFromExe) {
+ hotspotX = 0;
+ hotspotY = 0;
+
+ if (_cursorHotspotXVar != -1) {
+ hotspotX = (uint16) VAR(_cursorIndex + _cursorHotspotXVar);
+ hotspotY = (uint16) VAR(_cursorIndex + _cursorHotspotYVar);
+ } else if (_cursorHotspotX != -1) {
+ hotspotX = _cursorHotspotX;
+ hotspotY = _cursorHotspotY;
+ } else if (_cursorHotspotsX != nullptr) {
+ hotspotX = _cursorHotspotsX[_cursorIndex];
+ hotspotY = _cursorHotspotsY[_cursorIndex];
+ }
+
+ newX = _vm->_global->_inter_mouseX - hotspotX;
+ newY = _vm->_global->_inter_mouseY - hotspotY;
+
+ _scummvmCursor->clear();
+ _scummvmCursor->blit(*_cursorSprites,
+ cursorIndex * _cursorWidth, 0,
+ (cursorIndex + 1) * _cursorWidth - 1,
+ _cursorHeight - 1, 0, 0);
+
+ uint32 keyColor = 0;
+ if (_doCursorPalettes && _cursorKeyColors && _doCursorPalettes[cursorIndex])
+ keyColor = _cursorKeyColors[cursorIndex];
+
+ CursorMan.replaceCursor(_scummvmCursor->getData(),
+ _cursorWidth, _cursorHeight, hotspotX, hotspotY, keyColor, false, &_vm->getPixelFormat());
+
+ if (_doCursorPalettes && _doCursorPalettes[cursorIndex]) {
+ CursorMan.replaceCursorPalette(_cursorPalettes + (cursorIndex * 256 * 3),
+ _cursorPaletteStarts[cursorIndex], _cursorPaletteCounts[cursorIndex]);
+ CursorMan.disableCursorPalette(false);
+ } else
+ CursorMan.disableCursorPalette(true);
+ }
+
+ if (_frontSurface != _backSurface) {
+ if (!_noInvalidated) {
+ int16 tmp = _cursorIndex;
+ _cursorIndex = -1;
+ blitInvalidated();
+ _cursorIndex = tmp;
+ } else {
+ _showCursor = 3;
+ _vm->_video->waitRetrace();
+ if (MIN(newY, _cursorY) < 50)
+ _vm->_util->delay(5);
+ }
+
+ if (!cursorChanged)
+ return;
+ }
+ } else {
+ blitCursor();
+ _cursorX = newX;
+ _cursorY = newY;
+ }
+
+ _showCursor &= ~1;
+}
+
+} // End of namespace Gob
\ No newline at end of file
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index eb0f5eba6e9..a559d9da63d 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -627,7 +627,7 @@ Common::Error GobEngine::initGameParts() {
_video = new Video_v6(this);
_inter = new Inter_v7(this);
_mult = new Mult_v2(this);
- _draw = new Draw_Playtoons(this);
+ _draw = new Draw_v7(this);
_map = new Map_v2(this);
_goblin = new Goblin_v7(this);
_scenery = new Scenery_v2(this);
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index f556d369384..5444b03d647 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -671,7 +671,7 @@ protected:
class Inter_v7 : public Inter_Playtoons {
public:
Inter_v7(GobEngine *vm);
- ~Inter_v7() override;
+ ~Inter_v7() override {};
protected:
void setupOpcodesDraw() override;
@@ -679,7 +679,7 @@ protected:
void setupOpcodesGob() override;
void o7_draw0x0C();
- void o7_loadCursorFromExec();
+ void o7_setCursorToLoadFromExec();
void o7_freeMult();
void o7_loadMultObject();
void o7_displayWarning();
@@ -722,16 +722,12 @@ private:
INIConfig _inis;
Databases _databases;
- Common::WinResources *_cursors;
Common::ArchiveMemberList _remainingFilesFromPreviousSearch;
Common::String _currentCDPath;
Common::String findFile(const Common::String &mask, const Common::String &previousFile);
void copyFile(const Common::String &sourceFile, const Common::String &destFile);
- bool loadCursorFile();
- void resizeCursors(int16 width, int16 height, int16 count, bool transparency);
-
bool setCurrentCDPath(const Common::FSNode &dir);
Common::Array<uint32> getAdibou2InstalledApplications();
};
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 930be9c5153..e382cbc33b4 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -52,18 +52,14 @@ namespace Gob {
#define OPCODEFUNC(i, x) _opcodesFunc[i]._OPCODEFUNC(OPCODEVER, x)
#define OPCODEGOB(i, x) _opcodesGob[i]._OPCODEGOB(OPCODEVER, x)
-Inter_v7::Inter_v7(GobEngine *vm) : Inter_Playtoons(vm), _cursors(nullptr) {
-}
-
-Inter_v7::~Inter_v7() {
- delete _cursors;
+Inter_v7::Inter_v7(GobEngine *vm) : Inter_Playtoons(vm) {
}
void Inter_v7::setupOpcodesDraw() {
Inter_Playtoons::setupOpcodesDraw();
OPCODEDRAW(0x0C, o7_draw0x0C);
- OPCODEDRAW(0x0D, o7_loadCursorFromExec);
+ OPCODEDRAW(0x0D, o7_setCursorToLoadFromExec);
OPCODEDRAW(0x15, o7_freeMult);
OPCODEDRAW(0x17, o7_loadMultObject);
OPCODEDRAW(0x44, o7_displayWarning);
@@ -114,110 +110,6 @@ void Inter_v7::o7_draw0x0C() {
WRITE_VAR(17, 0);
}
-void Inter_v7::resizeCursors(int16 width, int16 height, int16 count, bool transparency) {
- if (width <= 0)
- width = _vm->_draw->_cursorWidth;
- if (height <= 0)
- height = _vm->_draw->_cursorHeight;
-
- _vm->_draw->_transparentCursor = transparency;
-
- bool sameCursorDimensions = (_vm->_draw->_cursorWidth == width) && (_vm->_draw->_cursorHeight == height);
-
- // Cursors sprite already big enough
- if (sameCursorDimensions &&
- _vm->_draw->_cursorCount >= count &&
- _vm->_draw->_doCursorPalettes != nullptr)
- return;
-
- debugC(5, kDebugGraphics, "Resizing cursors: size %dx%d -> %dx%d, cursor count %d -> %d)",
- _vm->_draw->_cursorWidth,
- width,
- _vm->_draw->_cursorHeight,
- height,
- _vm->_draw->_cursorCount,
- count);
- SurfacePtr oldCursorsSprites = _vm->_draw->_cursorSprites;
- int oldCursorCount = _vm->_draw->_cursorCount;
- _vm->_draw->_cursorCount = count;
- _vm->_draw->_cursorWidth = width;
- _vm->_draw->_cursorHeight = height;
-
- _vm->_draw->freeSprite(Draw::kCursorSurface);
- _vm->_draw->_cursorSprites.reset();
- _vm->_draw->_cursorSpritesBack.reset();
- _vm->_draw->_scummvmCursor.reset();
-
- _vm->_draw->initSpriteSurf(Draw::kCursorSurface, width * count, height, 2);
-
- _vm->_draw->_cursorSpritesBack = _vm->_draw->_spritesArray[Draw::kCursorSurface];
- _vm->_draw->_cursorSprites = _vm->_draw->_cursorSpritesBack;
-
- if (sameCursorDimensions && oldCursorCount < count)
- _vm->_draw->_cursorSprites->blit(*oldCursorsSprites);
- oldCursorsSprites.reset();
-
- _vm->_draw->_scummvmCursor = _vm->_video->initSurfDesc(width, height, SCUMMVM_CURSOR);
-
- for (int i = sameCursorDimensions ? oldCursorCount : 0; i < count; i++) {
- _vm->_draw->_cursorAnimLow[i] = -1;
- _vm->_draw->_cursorAnimDelays[i] = 0;
- _vm->_draw->_cursorAnimHigh[i] = 0;
- }
- _vm->_draw->_cursorAnimLow[1] = 0;
-
- if (oldCursorCount < count || _vm->_draw->_doCursorPalettes == nullptr) {
- bool *oldDoCursorPalettes = _vm->_draw->_doCursorPalettes;
- byte *oldCursorPalettes = _vm->_draw->_cursorPalettes;
- byte *oldCursorKeyColors = _vm->_draw->_cursorKeyColors;
- uint16 *oldCursorPaletteStarts = _vm->_draw->_cursorPaletteStarts;
- uint16 *oldCursorPaletteCounts = _vm->_draw->_cursorPaletteCounts;
- int32 *oldCursorHotspotsX = _vm->_draw->_cursorHotspotsX;
- int32 *oldCursorHotspotsY = _vm->_draw->_cursorHotspotsY;
-
- _vm->_draw->_cursorPalettes = new byte[256 * 3 * count];
- _vm->_draw->_doCursorPalettes = new bool[count];
- _vm->_draw->_cursorKeyColors = new byte[count];
- _vm->_draw->_cursorPaletteStarts = new uint16[count];
- _vm->_draw->_cursorPaletteCounts = new uint16[count];
- _vm->_draw->_cursorHotspotsX = new int32[count];
- _vm->_draw->_cursorHotspotsY = new int32[count];
-
- memset(_vm->_draw->_cursorPalettes , 0, count * 256 * 3);
- memset(_vm->_draw->_doCursorPalettes , 0, count * sizeof(bool));
- memset(_vm->_draw->_cursorKeyColors , 0, count * sizeof(byte));
- memset(_vm->_draw->_cursorPaletteStarts, 0, count * sizeof(uint16));
- memset(_vm->_draw->_cursorPaletteCounts, 0, count * sizeof(uint16));
- memset(_vm->_draw->_cursorHotspotsX , 0, count * sizeof(int32));
- memset(_vm->_draw->_cursorHotspotsY , 0, count * sizeof(int32));
-
- if (sameCursorDimensions && oldCursorCount < count) {
- if (oldCursorPalettes != nullptr)
- memcpy(_vm->_draw->_cursorPalettes, oldCursorPalettes, oldCursorCount * 256 * 3);
- if (oldDoCursorPalettes != nullptr)
- memcpy(_vm->_draw->_doCursorPalettes, oldDoCursorPalettes, oldCursorCount * sizeof(bool));
- if (oldCursorKeyColors != nullptr)
- memcpy(_vm->_draw->_cursorKeyColors, oldCursorKeyColors, oldCursorCount * sizeof(byte));
- if (oldCursorPaletteStarts != nullptr)
- memcpy(_vm->_draw->_cursorPaletteStarts, oldCursorPaletteStarts, oldCursorCount * sizeof(uint16));
- if (oldCursorPaletteCounts != nullptr)
- memcpy(_vm->_draw->_cursorPaletteCounts, oldCursorPaletteCounts, oldCursorCount * sizeof(uint16));
- if (oldCursorHotspotsX != nullptr)
- memcpy(_vm->_draw->_cursorHotspotsX, oldCursorHotspotsX, oldCursorCount * sizeof(int32));
- if (oldCursorHotspotsY != nullptr)
- memcpy(_vm->_draw->_cursorHotspotsY, oldCursorHotspotsY, oldCursorCount * sizeof(int32));
- }
-
- delete[] oldDoCursorPalettes;
- delete[] oldCursorPalettes;
- delete[] oldCursorKeyColors;
- delete[] oldCursorPaletteStarts;
- delete[] oldCursorPaletteCounts;
- delete[] oldCursorHotspotsX;
- delete[] oldCursorHotspotsY;
- }
-}
-
void Inter_v7::o7_loadCursor(OpFuncParams ¶ms) {
int16 id = _vm->_game->_script->readInt16();
@@ -275,7 +167,7 @@ void Inter_v7::o7_loadCursor(OpFuncParams ¶ms) {
int16 cursorWidth = MAX(_vm->_draw->_cursorWidth, resource->getWidth());
int16 cursorHeight = MAX(_vm->_draw->_cursorHeight, resource->getHeight());
- resizeCursors(cursorWidth, cursorHeight, index + 1, true);
+ _vm->_draw->resizeCursors(cursorWidth, cursorHeight, index + 1, true);
if ((index * _vm->_draw->_cursorWidth) >= _vm->_draw->_cursorSprites->getWidth())
return;
@@ -291,57 +183,12 @@ void Inter_v7::o7_loadCursor(OpFuncParams ¶ms) {
delete resource;
}
-void Inter_v7::o7_loadCursorFromExec() {
+void Inter_v7::o7_setCursorToLoadFromExec() {
int16 cursorIndex = _vm->_game->_script->readValExpr();
Common::String cursorName = _vm->_game->_script->evalString();
+ debugC(1, kDebugGraphics, "o7_setCursorToLoadFromExec : index=%d, cursorName=%s", cursorIndex, cursorName.c_str());
- // Clear the cursor sprite at that index
- _vm->_draw->_cursorSprites->fillRect(cursorIndex * _vm->_draw->_cursorWidth, 0,
- cursorIndex * _vm->_draw->_cursorWidth + _vm->_draw->_cursorWidth - 1,
- _vm->_draw->_cursorHeight - 1, 0);
-
- // If the cursor name is empty, that cursor will be drawn by the scripts
- if (cursorName.empty() || cursorName == "VIDE") { // "VIDE" is "empty" in french
- // Make sure the cursors sprite is big enough and set to non-extern palette
- resizeCursors(-1, -1, cursorIndex + 1, true);
- _vm->_draw->_doCursorPalettes[cursorIndex] = false;
- return;
- }
-
- Graphics::WinCursorGroup *cursorGroup = nullptr;
- Graphics::Cursor *defaultCursor = nullptr;
-
- // Load the cursor file and cursor group
- if (loadCursorFile())
- cursorGroup = Graphics::WinCursorGroup::createCursorGroup(_cursors, Common::WinResourceID(cursorName));
-
- // If the requested cursor does not exist, create a default one
- const Graphics::Cursor *cursor = nullptr;
- if (!cursorGroup || cursorGroup->cursors.empty() || !cursorGroup->cursors[0].cursor) {
- defaultCursor = Graphics::makeDefaultWinCursor();
-
- cursor = defaultCursor;
- } else
- cursor = cursorGroup->cursors[0].cursor;
-
- // Make sure the cursors sprite it big enough
- resizeCursors(cursor->getWidth(), cursor->getHeight(), cursorIndex + 1, true);
-
- Surface cursorSurf(cursor->getWidth(), cursor->getHeight(), 1, cursor->getSurface());
-
- _vm->_draw->_cursorSprites->blit(cursorSurf, cursorIndex * _vm->_draw->_cursorWidth, 0);
-
- memcpy(_vm->_draw->_cursorPalettes + cursorIndex * 256 * 3, cursor->getPalette(), cursor->getPaletteCount() * 3);
-
- _vm->_draw->_doCursorPalettes [cursorIndex] = true;
- _vm->_draw->_cursorKeyColors [cursorIndex] = cursor->getKeyColor();
- _vm->_draw->_cursorPaletteStarts[cursorIndex] = cursor->getPaletteStartIndex();
- _vm->_draw->_cursorPaletteCounts[cursorIndex] = cursor->getPaletteCount();
- _vm->_draw->_cursorHotspotsX [cursorIndex] = cursor->getHotspotX();
- _vm->_draw->_cursorHotspotsY [cursorIndex] = cursor->getHotspotY();
-
- delete cursorGroup;
- delete defaultCursor;
+ _vm->_draw->_cursorNames[cursorIndex] = cursorName;
}
void Inter_v7::o7_freeMult() {
@@ -1537,26 +1384,4 @@ void Inter_v7::o7_gob0x201(OpGobParams ¶ms) {
WRITE_VAR(varIndex, 1);
}
-
-bool Inter_v7::loadCursorFile() {
- if (_cursors)
- return true;
-
- if (_vm->_dataIO->hasFile("cursor32.dll")) {
- _cursors = new Common::PEResources();
- if (_cursors->loadFromEXE("cursor32.dll"))
- return true;
- }
- else if (_vm->_dataIO->hasFile("cursor.dll")) {
- _cursors = new Common::NEResources();
- if (_cursors->loadFromEXE("cursor.dll"))
- return true;
- }
-
- delete _cursors;
- _cursors = nullptr;
-
- return false;
-}
-
} // End of namespace Gob
diff --git a/engines/gob/module.mk b/engines/gob/module.mk
index 381189b6de8..5d6ee08bc3d 100644
--- a/engines/gob/module.mk
+++ b/engines/gob/module.mk
@@ -15,6 +15,7 @@ MODULE_OBJS := \
draw.o \
draw_v1.o \
draw_v2.o \
+ draw_v7.o \
draw_bargon.o \
draw_fascin.o \
draw_playtoons.o \
Commit: 685277c2ecb8b9c375132194ba3fcc92f8628029
https://github.com/scummvm/scummvm/commit/685277c2ecb8b9c375132194ba3fcc92f8628029
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:34+01:00
Commit Message:
GOB: fix another parasite sprite issue in Adibou2
Some sprite cleanup was still missing.
Changed paths:
engines/gob/inter_v7.cpp
engines/gob/mult_v2.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index e382cbc33b4..511e6dfe8f3 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -221,7 +221,8 @@ void Inter_v7::o7_loadMultObject() {
if (((int32)*obj.pPosX == -1234) && ((int32)*obj.pPosY == -4321)) {
if (obj.videoSlot > 0) {
_vm->_mult->closeObjVideo(obj);
- }
+ } else
+ _vm->_draw->freeSprite(50 + objIndex);
objAnim.isStatic = 1;
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 8535b2ebcd0..3f4d97758d9 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -720,6 +720,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
if ((animData.animation < 0) && (animObj.videoSlot > 0)) {
_vm->_vidPlayer->closeVideo(animObj.videoSlot - 1);
animObj.videoSlot = 0;
+ animObj.animName[0] = 0;
}
return;
}
Commit: 31b759a28111c0a0e3d01b8416e8eeb1621d3f5f
https://github.com/scummvm/scummvm/commit/31b759a28111c0a0e3d01b8416e8eeb1621d3f5f
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:34+01:00
Commit Message:
GOB: GPLv2 -> GPLv3 in file headers added for Adibou
Changed paths:
engines/gob/goblin_v7.cpp
engines/gob/save/saveload_adibou1.cpp
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index df89921428f..973764f3af3 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -4,10 +4,10 @@
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -15,8 +15,7 @@
* GNU General Public License for more details.
*
* 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
diff --git a/engines/gob/save/saveload_adibou1.cpp b/engines/gob/save/saveload_adibou1.cpp
index 24f1a6ddeca..a255b89ea6e 100644
--- a/engines/gob/save/saveload_adibou1.cpp
+++ b/engines/gob/save/saveload_adibou1.cpp
@@ -4,10 +4,10 @@
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -15,8 +15,7 @@
* GNU General Public License for more details.
*
* 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
Commit: 2300f9c7e90d59e1effe394a0bc57b15074c812a
https://github.com/scummvm/scummvm/commit/2300f9c7e90d59e1effe394a0bc57b15074c812a
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:34+01:00
Commit Message:
GOB: reduce header dependency in Adibou2 changes
Changed paths:
engines/gob/draw.h
diff --git a/engines/gob/draw.h b/engines/gob/draw.h
index 7736d955828..1a87c9a4a3b 100644
--- a/engines/gob/draw.h
+++ b/engines/gob/draw.h
@@ -22,9 +22,12 @@
#ifndef GOB_DRAW_H
#define GOB_DRAW_H
-#include "common/winexe.h"
#include "gob/video.h"
+namespace Common {
+class WinResources;
+}
+
namespace Gob {
#define RENDERFLAG_NOINVALIDATE 0x0001
Commit: 2ec5b0185dcb9e8733109abaa5f720097df24140
https://github.com/scummvm/scummvm/commit/2ec5b0185dcb9e8733109abaa5f720097df24140
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: more comments on Map "oblique" coordinates used in Adibou2
Changed paths:
engines/gob/goblin_v2.cpp
engines/gob/goblin_v7.cpp
engines/gob/map.cpp
engines/gob/map.h
engines/gob/map_v2.cpp
engines/gob/mult_v2.cpp
diff --git a/engines/gob/goblin_v2.cpp b/engines/gob/goblin_v2.cpp
index 62cb231cbf1..37c8a35eba2 100644
--- a/engines/gob/goblin_v2.cpp
+++ b/engines/gob/goblin_v2.cpp
@@ -42,7 +42,7 @@ Goblin_v2::Goblin_v2(GobEngine *vm) : Goblin_v1(vm) {
}
void Goblin_v2::freeObjects() {
- _vm->_map->_mapUnknownBool = false;
+ _vm->_map->_usesObliqueCoordinates = false;
if (_gobsCount < 0)
return;
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index 973764f3af3..d2b3e982907 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -254,8 +254,8 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
int32 newX = 0;
int32 newY = 0;
- if (_vm->_map->_mapUnknownBool) {
- // Weird coordinates mapping
+ if (_vm->_map->_usesObliqueCoordinates) {
+ // Oblique coordinates to screen coordinates mapping
newX = (_vm->_map->getTilesWidth() / 2) * obj->pAnimData->destX +
(_vm->_map->getTilesWidth() / 2) * obj->pAnimData->destY -
(_vm->_map->getTilesWidth() * 39) / 2;
@@ -315,16 +315,21 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
}
/*
- * 0: (0, 0)
- * 1: (-1, -1)
- * 2: (0, -1)
- * 3: (1, -1)
- * 4: (1, 0)
- * 5: (1, 1)
- * 6: (0, 1)
- * 7: (-1, 1)
- * 8: (-1, 0)
- * 9: (0, 0)
+ * NOTE: conversion between direction index, coordinates in Map with _map->_usesObliqueCoordinates
+ * and screen coordinates
+ * -----------------------------------------------------
+ * | dir. index | Map obl. | screen |
+ * | 0 | ( 0, 0) | ( 0, 0) |
+ * | 1 | (-1, -1) | (-1, 0) -> left |
+ * | 2 | ( 0, -1) | (-1, -1) -> up-left |
+ * | 3 | ( 1, -1) | ( 0, -1) -> up |
+ * | 4 | ( 1, 0) | ( 1, -1) -> up-right |
+ * | 5 | ( 1, 1) | ( 1, 0) -> right |
+ * | 6 | ( 0, 1) | ( 1, 1) -> down-right |
+ * | 7 | (-1, 1) | ( 0, 1) -> down |
+ * | 8 | (-1, 0) | (-1, 1) -> down-left |
+ * | 9 | ( 0, 0) | ( 0, 0) |
+ * -----------------------------------------------------
*/
static int8 deltaXFromDirection[10] = {0, -1, 0, 1, 1, 1, 0, -1, -1, 0};
diff --git a/engines/gob/map.cpp b/engines/gob/map.cpp
index 49a7eeadf6a..84181662dc9 100644
--- a/engines/gob/map.cpp
+++ b/engines/gob/map.cpp
@@ -43,7 +43,7 @@ Map::Map(GobEngine *vm) : _vm(vm) {
_bigTiles = false;
- _mapUnknownBool = false;
+ _usesObliqueCoordinates = false;
_wayPointCount = 0;
_wayPoints = nullptr;
diff --git a/engines/gob/map.h b/engines/gob/map.h
index 7b609321fdb..f07af0d59d6 100644
--- a/engines/gob/map.h
+++ b/engines/gob/map.h
@@ -76,7 +76,7 @@ public:
int16 _destX;
int16 _destY;
- bool _mapUnknownBool;
+ bool _usesObliqueCoordinates;
ItemPos _itemPoses[40];
char _sourceFile[15];
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 8adb74566a4..435cf807dfc 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -81,11 +81,11 @@ void Map_v2::loadMapObjects(const char *avjFile) {
break;
}
case 65534:
- _tilesWidth = READ_VARO_UINT8(var);
- _tilesHeight = READ_VARO_UINT8(var + 1);
- _mapWidth = READ_VARO_UINT8(var + 2);
- _mapHeight = READ_VARO_UINT8(var + 3);
- _mapUnknownBool = READ_VARO_UINT8(var + 4) ? true : false;
+ _tilesWidth = READ_VARO_UINT8(var);
+ _tilesHeight = READ_VARO_UINT8(var + 1);
+ _mapWidth = READ_VARO_UINT8(var + 2);
+ _mapHeight = READ_VARO_UINT8(var + 3);
+ _usesObliqueCoordinates = READ_VARO_UINT8(var + 4) ? true : false;
break;
case 65535:
_passMap = (int8 *)_vm->_inter->_variables->getAddressOff8(var);
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index 3f4d97758d9..b42daae0e9d 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -832,7 +832,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
break;
case 10:
- if (_vm->_map->_mapUnknownBool) {
+ if (_vm->_map->_usesObliqueCoordinates) {
int8 deltaY = animObj.destY - animObj.goblinY;
if (deltaY == -1) {
*animObj.pPosX = *animObj.pPosX - _vm->_map->getTilesWidth();
@@ -841,7 +841,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
}
}
else {
- warning("Adibou2 newCycleAnim _mapUnknownBool == false stub");
+ warning("STUB: newCycleAnim: _map->_usesObliqueCoordinates == false");
}
@@ -894,7 +894,7 @@ void Mult_v2::animate() {
Mult_Object &animObj = _objects[i];
Mult_AnimData &animData = *(animObj.pAnimData);
- if (_vm->_map->_mapUnknownBool && !animData.isStatic && animData.order < 100) {
+ if (_vm->_map->_usesObliqueCoordinates && !animData.isStatic && animData.order < 100) {
animData.order = currentOrder;
animData.field_22 = 0;
animData.field_21 = 0;
Commit: 6a1e2d5d2100fa6c7931ea20997881d9eb718958
https://github.com/scummvm/scummvm/commit/6a1e2d5d2100fa6c7931ea20997881d9eb718958
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: misc format/style/typo fixes in Adibou2 changes
Changed paths:
engines/gob/draw.h
engines/gob/draw_v7.cpp
engines/gob/goblin.cpp
engines/gob/goblin_v7.cpp
engines/gob/hotspots.cpp
engines/gob/inter_playtoons.cpp
engines/gob/inter_v1.cpp
engines/gob/inter_v2.cpp
engines/gob/inter_v7.cpp
engines/gob/map_v2.cpp
engines/gob/mult.cpp
engines/gob/mult_v2.cpp
engines/gob/save/saveload.cpp
engines/gob/save/saveload_v7.cpp
engines/gob/scenery.cpp
diff --git a/engines/gob/draw.h b/engines/gob/draw.h
index 1a87c9a4a3b..3dbd126db10 100644
--- a/engines/gob/draw.h
+++ b/engines/gob/draw.h
@@ -308,7 +308,7 @@ public:
};
-class Draw_v7: public Draw_Playtoons {
+class Draw_v7 : public Draw_Playtoons {
public:
Draw_v7(GobEngine *vm);
~Draw_v7() override;
diff --git a/engines/gob/draw_v7.cpp b/engines/gob/draw_v7.cpp
index 05a23f1adde..e045657899d 100644
--- a/engines/gob/draw_v7.cpp
+++ b/engines/gob/draw_v7.cpp
@@ -22,6 +22,7 @@
#include "common/winexe_ne.h"
#include "common/winexe_pe.h"
#include "graphics/cursorman.h"
+#include "graphics/wincursor.h"
#include "gob/dataio.h"
#include "gob/draw.h"
@@ -32,7 +33,6 @@
#include "gob/resources.h"
#include "gob/scenery.h"
#include "gob/script.h"
-#include "graphics/wincursor.h"
namespace Gob {
@@ -51,8 +51,7 @@ bool Draw_v7::loadCursorFile() {
_cursors = new Common::PEResources();
if (_cursors->loadFromEXE("cursor32.dll"))
return true;
- }
- else if (_vm->_dataIO->hasFile("cursor.dll")) {
+ } else if (_vm->_dataIO->hasFile("cursor.dll")) {
_cursors = new Common::NEResources();
if (_cursors->loadFromEXE("cursor.dll"))
return true;
@@ -190,8 +189,7 @@ void Draw_v7::animateCursor(int16 cursor) {
_cursorY = _vm->_global->_inter_mouseY;
_showCursor &= ~1;
return;
- }
- else {
+ } else {
if (!loadCursorFromFile(cursorIndex)) {
_cursorX = _vm->_global->_inter_mouseX;
_cursorY = _vm->_global->_inter_mouseY;
@@ -207,8 +205,8 @@ void Draw_v7::animateCursor(int16 cursor) {
hotspotY = 0;
if (_cursorHotspotXVar != -1) {
- hotspotX = (uint16) VAR(_cursorIndex + _cursorHotspotXVar);
- hotspotY = (uint16) VAR(_cursorIndex + _cursorHotspotYVar);
+ hotspotX = (uint16)VAR(_cursorIndex + _cursorHotspotXVar);
+ hotspotY = (uint16)VAR(_cursorIndex + _cursorHotspotYVar);
} else if (_cursorHotspotX != -1) {
hotspotX = _cursorHotspotX;
hotspotY = _cursorHotspotY;
@@ -266,4 +264,4 @@ void Draw_v7::animateCursor(int16 cursor) {
_showCursor &= ~1;
}
-} // End of namespace Gob
\ No newline at end of file
+} // End of namespace Gob
diff --git a/engines/gob/goblin.cpp b/engines/gob/goblin.cpp
index 576fd1344aa..2d2c6502cb6 100644
--- a/engines/gob/goblin.cpp
+++ b/engines/gob/goblin.cpp
@@ -1918,7 +1918,7 @@ void Goblin::updateLayer2(Mult::Mult_AnimData *animData) {
}
void Goblin::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
- warning("Goblin::setGoblinState not implemented !");
+ warning("Goblin::setGoblinState not implemented");
}
} // End of namespace Gob
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index d2b3e982907..b1a9efbb245 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -162,7 +162,7 @@ void Goblin_v7::setGoblinState(Mult::Mult_Object *obj, int16 animState) {
case 21:
Common::strlcat(str, "COG", 128);
break;
- case 22:{
+ case 22: {
uint animIndex = _vm->_rnd.getRandomNumber(1);
switch (animIndex) {
case 0:
@@ -396,8 +396,7 @@ bool Goblin_v7::directionWalkable(int8 x, int8 y, int8 direction) {
nextY >= 0 &&
nextY < _vm->_map->getMapHeight()) {
return positionWalkable(_vm->_map, nextX, nextY);
- }
- else
+ } else
return false;
}
@@ -456,8 +455,7 @@ int32 Goblin_v7::findPath(int8 x, int8 y, int8 destX, int8 destY) {
int8 firstDirection = 0;
int8 var_1C = 0;
- while (true)
- {
+ while (true) {
int8 currentDirection = bestWalkableDirectionFromOriginAndDest(currentX, currentY, destX, destY);
if (currentDirection == 0)
return 0;
@@ -469,8 +467,7 @@ int32 Goblin_v7::findPath(int8 x, int8 y, int8 destX, int8 destY) {
if (var_1C > 0)
firstDirection = var_1C;
}
- }
- else {
+ } else {
currentDirection = -currentDirection;
if (var_8 == 0)
var_8 = 1;
@@ -508,10 +505,9 @@ int32 Goblin_v7::findPath(int8 x, int8 y, int8 destX, int8 destY) {
int32 Goblin_v7::computeObjNextDirection(Mult::Mult_Object &obj) {
Mult::Mult_AnimData animData = *obj.pAnimData;
if (animData.stateType == 1) {
- warning("Adibou2 computeObjNextDirection animData.stateType == 1 stub");
+ warning("STUB: Goblin_v7::computeObjNextDirection animData.stateType == 1");
return 0;
- }
- else {
+ } else {
updateGobDest(_vm->_map, obj);
int32 direction = findPath(obj.goblinX, obj.goblinY, obj.gobDestX, obj.gobDestY);
if (direction == 0) {
diff --git a/engines/gob/hotspots.cpp b/engines/gob/hotspots.cpp
index 38493705a18..bcc8100b3c5 100644
--- a/engines/gob/hotspots.cpp
+++ b/engines/gob/hotspots.cpp
@@ -2023,7 +2023,7 @@ void Hotspots::setCurrentHotspot(const uint16 *ids, uint16 id) const {
}
if (Hotspot::getState(id) == kStateFilled)
- WRITE_VAR(16, (int16) ids[id & 0xFFF]);
+ WRITE_VAR(16, (int16)ids[id & 0xFFF]);
else
WRITE_VAR(16, id & 0xFFF);
}
diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp
index 096440dd9a5..265aff845cc 100644
--- a/engines/gob/inter_playtoons.cpp
+++ b/engines/gob/inter_playtoons.cpp
@@ -494,8 +494,7 @@ Common::String Inter_Playtoons::getFile(const char *path, bool stripPath) {
else if (!strncmp(path, "<ALLCD>", 7))
path += 7;
- if (stripPath)
- {
+ if (stripPath) {
const char *backslash = strrchr(path, '\\');
if (backslash)
path = backslash + 1;
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index c0649dc36d8..31fb3414621 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -709,7 +709,7 @@ void Inter_v1::o1_callSub(OpFuncParams ¶ms) {
return;
}
- // Skipping the copy protection screen in Adibou2
+ // Skipping the copy protection screen in Adibou 1
if (!_vm->_copyProtection && (_vm->getGameType() == kGameTypeAdibou1) && (offset == 1746) &&
_vm->isCurrentTot("base.tot")) {
debugC(2, kDebugGameFlow, "Skipping copy protection screen");
@@ -1164,12 +1164,14 @@ void Inter_v1::o1_palLoad(OpFuncParams ¶ms) {
case 55:
// TODO case 55 implementation
+ warning("STUB: o1_palLoad case 55 not implemented");
_vm->_game->_script->skip(2);
_vm->_draw->_applyPal = false;
return;
case 56:
// TODO case 56 implementation
+ warning("STUB: o1_palLoad case 56 not implemented");
_vm->_game->_script->skip(2);
break;
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index 68294b9b203..691ca74f2bc 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -580,7 +580,7 @@ void Inter_v2::o2_totSub() {
uint8 flags = _vm->_game->_script->readByte();
- // Skipping the copy protection screen in Adibou2
+ // Skipping the copy protection screen in Adibou 1
if (!_vm->_copyProtection && (_vm->getGameType() == kGameTypeAdibou1) && totFile == "p_eleph") {
debugC(2, kDebugGameFlow, "Skipping copy protection screen");
_varStack.pushInt(1);
@@ -1592,16 +1592,14 @@ void Inter_v2::o2_playInfogrames(OpGobParams ¶ms) {
_vm->_sound->infogramesPlay();
}
-void Inter_v2::o2_gob0x0B(OpGobParams ¶ms)
-{
+void Inter_v2::o2_gob0x0B(OpGobParams ¶ms) {
_vm->_game->_script->skip(4);
- warning("Adibou1 stub: o2_gob0x0B");
+ warning("STUB: Adibou1 o2_gob0x0B");
}
-void Inter_v2::o2_gob1001(OpGobParams ¶ms)
-{
+void Inter_v2::o2_gob1001(OpGobParams ¶ms) {
_vm->_game->_script->skip(2);
- warning("Adibou1 stub: o2_gob1001");
+ warning("STUB: Adibou1 o2_gob1001");
}
void Inter_v2::o2_startInfogrames(OpGobParams ¶ms) {
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 511e6dfe8f3..6b4ac6e9714 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -378,8 +378,7 @@ void Inter_v7::copyFile(const Common::String &sourceFile, const Common::String &
mode1,
sourceFile.c_str(),
destFile.c_str());
- }
- else
+ } else
warning("Attempted to write to file \"%s\" while copying from \"%s\"",
destFile.c_str(),
sourceFile.c_str());
@@ -414,8 +413,7 @@ void Inter_v7::o7_deleteFile() {
debugC(2, kDebugFileIO, "Delete file matching pattern \"%s\" (%d matching file(s))", file.c_str(), files.size());
for (const Common::String &matchingFile : files)
debugC(5, kDebugFileIO, "Matching file: %s", matchingFile.c_str());
- }
- else {
+ } else {
files.push_back(file);
debugC(2, kDebugFileIO, "Delete file \"%s\"", file.c_str());
}
@@ -725,13 +723,10 @@ void Inter_v7::o7_findFile() {
SearchMan.listMatchingMembers(files, file_pattern);
Common::ArchiveMemberList filesWithoutDuplicates;
- for (Common::ArchiveMemberPtr file : files)
- {
+ for (Common::ArchiveMemberPtr file : files) {
bool found = false;
- for (Common::ArchiveMemberPtr fileWithoutDuplicates : filesWithoutDuplicates)
- {
- if (file->getName() == fileWithoutDuplicates->getName())
- {
+ for (Common::ArchiveMemberPtr fileWithoutDuplicates : filesWithoutDuplicates) {
+ if (file->getName() == fileWithoutDuplicates->getName()) {
found = true;
break;
}
@@ -749,8 +744,7 @@ void Inter_v7::o7_findFile() {
if (filesWithoutDuplicates.empty()) {
storeString("");
storeValue(0);
- }
- else {
+ } else {
Common::String file = files.front()->getName();
filesWithoutDuplicates.pop_front();
debugC(5, kDebugFileIO, "o7_findFile(%s): first match = %s",
@@ -1264,8 +1258,7 @@ void Inter_v7::o7_checkData(OpFuncParams ¶ms) {
// WORKAROUND: in script BE_CD.TOT of Adibou 2, o7_checkData() can be called in the "leave" callback of a hotspot.
// This corrupts the "current hotspot" variable, which is also VAR(16) (!), and lead to an infinite loop.
// We skip writing the file size into VAR(16) here as a workarond (the value is not used anyway).
- }
- else
+ } else
WRITE_VAR(16, (uint32) size);
}
diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp
index 435cf807dfc..363fa1592d4 100644
--- a/engines/gob/map_v2.cpp
+++ b/engines/gob/map_v2.cpp
@@ -59,7 +59,7 @@ void Map_v2::loadMapObjects(const char *avjFile) {
if (((uint16) id) >= 65520) {
switch ((uint16) id) {
case 65529:
- warning("Map_v2::loadMapObjects(): ID == 65529 unimplemented"); // TODO: unimplemented case
+ warning("STUB: Map_v2::loadMapObjects() ID == 65529 unimplemented"); // TODO: unimplemented case
break;
case 65530:
diff --git a/engines/gob/mult.cpp b/engines/gob/mult.cpp
index 02aca14d47c..77e02240f21 100644
--- a/engines/gob/mult.cpp
+++ b/engines/gob/mult.cpp
@@ -451,18 +451,17 @@ void Mult::doSoundAnim(bool &stop, int16 frame) {
}
int Mult::openObjVideo(const Common::String &file, VideoPlayer::Properties &properties, int animation) {
- if (animation < 0) {
- Mult_Object &object = _objects[-animation - 1];
- if (object.videoSlot > 0)
- _vm->_vidPlayer->closeVideo(object.videoSlot - 1);
-
- Common::strlcpy(object.animName, file.c_str(), 16);
- int slot = _vm->_vidPlayer->openVideo(false, file, properties);
- object.videoSlot = slot + 1;
- return slot;
- }
+ if (animation >= 0)
+ return -1;
+
+ Mult_Object &object = _objects[-animation - 1];
+ if (object.videoSlot > 0)
+ _vm->_vidPlayer->closeVideo(object.videoSlot - 1);
- return -1;
+ Common::strlcpy(object.animName, file.c_str(), 16);
+ int slot = _vm->_vidPlayer->openVideo(false, file, properties);
+ object.videoSlot = slot + 1;
+ return slot;
}
void Mult::closeObjVideo(Mult_Object &object) {
diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp
index b42daae0e9d..a4d708b45ae 100644
--- a/engines/gob/mult_v2.cpp
+++ b/engines/gob/mult_v2.cpp
@@ -733,28 +733,24 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
if (animData.animTypeBak == 1) {
if (animData.framesLeft != 0) {
--animData.framesLeft;
- }
- else {
+ } else {
_vm->_goblin->setGoblinState(&animObj, animData.isBusy);
animData.isBusy = 0;
animData.animTypeBak = 0;
animData.animType = 10;
}
-
}
}
return;
}
- if (animData.animType != 8)
- {
+ if (animData.animType != 8) {
animData.frame++;
if (_vm->getGameType() == kGameTypeAdibou2
&&
animData.animation < 0
&&
- animObj.videoSlot > 0)
- {
+ animObj.videoSlot > 0) {
// Workaround to improve audio sync of video objects in Adibou 2
// They easily get out of sync when the timing is done by hotspots::evaluate, which sometimes does not call animate()
// as often as needed for good sync (mouse events processing, in particular, can delay the call).
@@ -839,8 +835,7 @@ void Mult_v2::newCycleAnim(Mult_Object &animObj) {
} else if (deltaY == 1) {
*animObj.pPosX = *animObj.pPosX + _vm->_map->getTilesWidth();
}
- }
- else {
+ } else {
warning("STUB: newCycleAnim: _map->_usesObliqueCoordinates == false");
}
diff --git a/engines/gob/save/saveload.cpp b/engines/gob/save/saveload.cpp
index 835796c8ed1..2de5cc48c8e 100644
--- a/engines/gob/save/saveload.cpp
+++ b/engines/gob/save/saveload.cpp
@@ -141,7 +141,7 @@ bool SaveLoad::save(const char *fileName, int16 dataVar, int32 size, int32 offse
return true;
}
-bool SaveLoad::saveFromRaw(const char *fileName, byte *ptr, int32 size, int32 offset){
+bool SaveLoad::saveFromRaw(const char *fileName, byte *ptr, int32 size, int32 offset) {
debugC(3, kDebugSaveLoad, "Requested saving of save file \"%s\" - raw %p, %d, %d",
fileName, (void*) ptr, size, offset);
@@ -167,7 +167,7 @@ bool SaveLoad::saveFromRaw(const char *fileName, byte *ptr, int32 size, int32 of
return true;
}
-bool SaveLoad::copySaveGame(const char *fileNameSrc, const char *fileNameDest){
+bool SaveLoad::copySaveGame(const char *fileNameSrc, const char *fileNameDest) {
SaveHandler *handlerSrc = getHandler(fileNameSrc);
if (!handlerSrc) {
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index e360288b114..71c54811842 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -62,11 +62,11 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"DATA\\enviro06.inf", kSaveModeSave, nullptr, "environment" }, // Child 06
{"DATA\\enviro07.inf", kSaveModeSave, nullptr, "environment" }, // Child 07
{"DATA\\enviro08.inf", kSaveModeSave, nullptr, "environment" }, // Child 08
- {"DATA\\enviro09.inf", kSaveModeSave, nullptr, "environment" }, // Child 09
+ {"DATA\\enviro09.inf", kSaveModeSave, nullptr, "environment" }, // Child 09
{"DATA\\enviro10.inf", kSaveModeSave, nullptr, "environment" }, // Child 10
{"DATA\\enviro11.inf", kSaveModeSave, nullptr, "environment" }, // Child 11
{"DATA\\enviro12.inf", kSaveModeSave, nullptr, "environment" }, // Child 12
- {"DATA\\enviro13.inf", kSaveModeSave, nullptr, "environment" }, // Child 13
+ {"DATA\\enviro13.inf", kSaveModeSave, nullptr, "environment" }, // Child 13
{"DATA\\enviro14.inf", kSaveModeSave, nullptr, "environment" }, // Child 14
{"DATA\\enviro15.inf", kSaveModeSave, nullptr, "environment" }, // Child 15
{"DATA\\enviro16.inf", kSaveModeSave, nullptr, "environment" }, // Child 16
@@ -162,11 +162,11 @@ SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
{"DATA\\aide16.inf" , kSaveModeSave, nullptr, "construction game progress" },
// Adibou Applications 1-5
- {"DATA\\Gsa01_01.inf", kSaveModeSave, nullptr, "app progress" }, // Child 01
- {"DATA\\Gsa02_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa01_01.inf", kSaveModeSave, nullptr, "app progress" }, // Child 01
+ {"DATA\\Gsa02_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa03_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa04_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA\\Gsa05_01.inf", kSaveModeSave, nullptr, "app progress" },
{"DATA\\Gsa01_02.inf", kSaveModeSave, nullptr, "app progress" }, // Child 02
{"DATA\\Gsa02_02.inf", kSaveModeSave, nullptr, "app progress" },
{"DATA\\Gsa03_02.inf", kSaveModeSave, nullptr, "app progress" },
@@ -868,8 +868,7 @@ int32 SaveLoad_v7::SpriteHandler::getSize() {
return header.getSize();
}
-bool SaveLoad_v7::SpriteHandler::load(int16 dataVar, int32 size, int32 offset)
-{
+bool SaveLoad_v7::SpriteHandler::load(int16 dataVar, int32 size, int32 offset) {
if (!TempSpriteHandler::createFromSprite(dataVar, size, offset))
return false;
@@ -887,8 +886,7 @@ bool SaveLoad_v7::SpriteHandler::load(int16 dataVar, int32 size, int32 offset)
return TempSpriteHandler::load(dataVar, size, offset);
}
-bool SaveLoad_v7::SpriteHandler::save(int16 dataVar, int32 size, int32 offset)
-{
+bool SaveLoad_v7::SpriteHandler::save(int16 dataVar, int32 size, int32 offset) {
if (!TempSpriteHandler::save(dataVar, size, offset))
return false;
@@ -971,8 +969,7 @@ int32 SaveLoad_v7::DrawingOnFloppyDiskHandler::getSize() {
return -1;
return header.getSize();
- }
- else {
+ } else {
// Following parts are the full picture chunks
int32 size = -1;
SaveHeader header;
@@ -986,8 +983,7 @@ int32 SaveLoad_v7::DrawingOnFloppyDiskHandler::getSize() {
}
}
-bool SaveLoad_v7::DrawingOnFloppyDiskHandler::load(int16 dataVar, int32 size, int32 offset)
-{
+bool SaveLoad_v7::DrawingOnFloppyDiskHandler::load(int16 dataVar, int32 size, int32 offset) {
if (!TempSpriteHandler::createFromSprite(dataVar, size, offset))
return false;
@@ -1005,8 +1001,7 @@ bool SaveLoad_v7::DrawingOnFloppyDiskHandler::load(int16 dataVar, int32 size, in
return TempSpriteHandler::load(dataVar, size, offset);
}
-bool SaveLoad_v7::DrawingOnFloppyDiskHandler::save(int16 dataVar, int32 size, int32 offset)
-{
+bool SaveLoad_v7::DrawingOnFloppyDiskHandler::save(int16 dataVar, int32 size, int32 offset) {
if (!TempSpriteHandler::save(dataVar, size, offset))
return false;
@@ -1216,36 +1211,30 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
_saveFiles[index++].handler = _configHandler = new GameFileHandler(_vm, targetName, "cfg");
- for (uint32 i = 0; i < kChildrenCount; i++)
- {
+ for (uint32 i = 0; i < kChildrenCount; i++) {
_saveFiles[index++].handler = _adibou2EnvHandler[i] = new GameFileHandler(_vm,
targetName,
Common::String::format("env%02d", i + 1));
}
- for (uint32 i = 0; i < kChildrenCount; i++)
- {
+ for (uint32 i = 0; i < kChildrenCount; i++) {
_saveFiles[index++].handler = _adibou2WeatherHandler[i] = new SpriteHandler(_vm,
targetName,
Common::String::format("weather_%02d", i + 1));
}
- for (uint32 i = 0; i < kChildrenCount; i++)
- {
+ for (uint32 i = 0; i < kChildrenCount; i++) {
_saveFiles[index++].handler = _adibou2BreakoutGameProgressHandler[i] = new GameFileHandler(_vm,
targetName,
Common::String::format("breakout_%02d", i + 1));
}
- for (uint32 i = 0; i < kAdibou2NbrOfConstructionGameFiles; i++)
- {
+ for (uint32 i = 0; i < kAdibou2NbrOfConstructionGameFiles; i++) {
_saveFiles[index++].handler = _adibou2ConstructionGameTempFileHandler[i] = new FakeFileHandler(_vm);
}
- for (uint32 i = 0; i < kChildrenCount; i++)
- {
- for (uint32 j = 0; j < kAdibou2NbrOfConstructionGameFiles; j++)
- {
+ for (uint32 i = 0; i < kChildrenCount; i++) {
+ for (uint32 j = 0; j < kAdibou2NbrOfConstructionGameFiles; j++) {
const char *fileName = (j == 0)?"construc":((j == 1)?"ptreco":"aide");
_saveFiles[index++].handler = _adibou2ConstructionGameProgressHandler[i][j] = new GameFileHandler(_vm,
targetName,
@@ -1253,10 +1242,8 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
}
}
- for (uint32 i = 0; i < kChildrenCount; i++)
- {
- for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++)
- {
+ for (uint32 i = 0; i < kChildrenCount; i++) {
+ for (uint32 j = 0; j < kAdibou2NbrOfApplications; j++) {
Common::String ext = Common::String::format("gsa%02d_%02d", j + 1, i + 1);
_saveFiles[index++].handler = _adibou2AppProgressHandler[i][j] = new GameFileHandler(_vm,
targetName,
@@ -1264,8 +1251,7 @@ SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
}
}
- for (uint32 i = 0; i < kChildrenCount; i++)
- {
+ for (uint32 i = 0; i < kChildrenCount; i++) {
_saveFiles[index++].handler = _adibou2MemoHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("memo%02d", i + 1));
_saveFiles[index++].handler = _adibou2DiploHandler[i] = new GameFileHandler(_vm, targetName, Common::String::format("diplo%02d", i + 1));
}
@@ -1364,8 +1350,7 @@ SaveLoad_v7::~SaveLoad_v7() {
delete _debilHandler[i];
delete _childrenHandler;
- for (uint32 i = 0; i < kChildrenCount; i++)
- {
+ for (uint32 i = 0; i < kChildrenCount; i++) {
delete _adibou2EnvHandler[i];
delete _adibou2WeatherHandler[i];
delete _adibou2BreakoutGameProgressHandler[i];
@@ -1380,8 +1365,7 @@ SaveLoad_v7::~SaveLoad_v7() {
for (uint32 i = 0; i < kAdibou2NbrOfConstructionGameFiles; i++)
delete _adibou2ConstructionGameTempFileHandler[i];
- for (uint32 i = 0; i < kChildrenCount; i++)
- {
+ for (uint32 i = 0; i < kChildrenCount; i++) {
delete _faceHandler[i];
delete _adibou2MemoHandler[i];
delete _adibou2DiploHandler[i];
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index f3cc2da72b1..4504b3f95c3 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -723,8 +723,7 @@ void Scenery::updateAnimObjectVideo(int16 layer, int16 frame, int16 animation, i
}
}
}
- }
- else {
+ } else {
if (frame != (int16) _vm->_vidPlayer->getFrameCount(obj.videoSlot - 1) - 1) {
//getFrameCoords
}
Commit: 9f8622c38d0ce4feaf232bf526541bbfeb18ed23
https://github.com/scummvm/scummvm/commit/9f8622c38d0ce4feaf232bf526541bbfeb18ed23
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: add a few TODOs in Adibou2 changes
Changed paths:
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 6b4ac6e9714..a5a5ad12ba3 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -365,6 +365,7 @@ void Inter_v7::copyFile(const Common::String &sourceFile, const Common::String &
return;
int32 size = stream->size();
+ // TODO: avoid this allocation by implementing a Stream version of saveFromRaw (e.g. "saveFromStream")
byte *data = new byte[size];
stream->read(data, size);
@@ -597,6 +598,7 @@ void Inter_v7::o7_playVmdOrMusic() {
if (props.flags & 0x400) {
if (!_vm->_mult->_objects[props.startFrame].pAnimData->isStatic) {
if (_vm->_mult->_objects[props.startFrame].videoSlot > 0) {
+ // TODO: something more is needed here, but unclear what
//_vm->_vidPlayer->pauseVideo(_vm->_mult->_objects[props.startFrame].videoSlot - 1, true);
}
}
@@ -662,8 +664,10 @@ void Inter_v7::o7_playVmdOrMusic() {
return;
}
+ // TODO: conditions below for unblocking videos have been found partly from asm, partly by trial and errors.
+ // Reality may be more complex...
if (props.startFrame == -2 ||
- (props.startFrame == props.lastFrame && // /!\ Found partly from asm, partly by trial and errors. Reality may be more complex...
+ (props.startFrame == props.lastFrame &&
props.lastFrame != -1 &&
!(props.flags & VideoPlayer::kFlagOtherSurface))) {
props.startFrame = 0;
Commit: 5d519ed33b3a32c7a4d648e55e4f69d9b00a6a09
https://github.com/scummvm/scummvm/commit/5d519ed33b3a32c7a4d648e55e4f69d9b00a6a09
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: be more conservative about possible regressions in Adibou2 changes
Changed paths:
engines/gob/inter.h
engines/gob/inter_playtoons.cpp
engines/gob/inter_v1.cpp
engines/gob/inter_v5.cpp
engines/gob/inter_v7.cpp
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 5444b03d647..8a2caa5cb3d 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -651,8 +651,6 @@ protected:
void oPlaytoons_F_1B(OpFuncParams ¶ms);
void oPlaytoons_putPixel(OpFuncParams ¶ms);
void oPlaytoons_freeSprite(OpFuncParams ¶ms);
- void oPlaytoons_drawLine(OpFuncParams ¶ms);
- void oPlaytoons_invalidate(OpFuncParams ¶ms);
void oPlaytoons_checkData(OpFuncParams ¶ms);
void oPlaytoons_readData(OpFuncParams ¶ms);
@@ -711,6 +709,8 @@ protected:
void o7_loadCursor(OpFuncParams ¶ms);
void o7_printText(OpFuncParams ¶ms);
void o7_fillRect(OpFuncParams ¶ms);
+ void o7_drawLine(OpFuncParams ¶ms);
+ void o7_invalidate(OpFuncParams ¶ms);
void o7_checkData(OpFuncParams ¶ms);
void o7_readData(OpFuncParams ¶ms);
void o7_writeData(OpFuncParams ¶ms);
diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp
index 265aff845cc..8bc2944c11f 100644
--- a/engines/gob/inter_playtoons.cpp
+++ b/engines/gob/inter_playtoons.cpp
@@ -80,14 +80,14 @@ void Inter_Playtoons::setupOpcodesDraw() {
void Inter_Playtoons::setupOpcodesFunc() {
Inter_v6::setupOpcodesFunc();
+ // NOTE: consider backporting here changes done in Inter_v7
+ // in particular, o7_printText (0x0B), o7_drawLine (0x34) and o7_invalidate (0x36)
CLEAROPCODEFUNC(0x3D);
OPCODEFUNC(0x0B, oPlaytoons_printText);
OPCODEFUNC(0x1B, oPlaytoons_F_1B);
OPCODEFUNC(0x24, oPlaytoons_putPixel);
OPCODEFUNC(0x27, oPlaytoons_freeSprite);
- OPCODEFUNC(0x34, oPlaytoons_drawLine);
- OPCODEFUNC(0x36, oPlaytoons_invalidate);
OPCODEFUNC(0x3F, oPlaytoons_checkData);
OPCODEFUNC(0x4D, oPlaytoons_readData);
}
@@ -97,6 +97,7 @@ void Inter_Playtoons::setupOpcodesGob() {
void Inter_Playtoons::oPlaytoons_printText(OpFuncParams ¶ms) {
char buf[60];
+ int i;
int16 oldTransparency;
_vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
@@ -122,9 +123,8 @@ void Inter_Playtoons::oPlaytoons_printText(OpFuncParams ¶ms) {
// _vm->_draw->_frontColor += colMod;
oldTransparency = _vm->_draw->_transparency;
- int i = 0;
do {
- for (; (_vm->_game->_script->peekChar() != '.') &&
+ for (i = 0; (_vm->_game->_script->peekChar() != '.') &&
(_vm->_game->_script->peekByte() != 200); i++) {
buf[i] = _vm->_game->_script->readChar();
}
@@ -211,35 +211,6 @@ void Inter_Playtoons::oPlaytoons_freeSprite(OpFuncParams ¶ms) {
_vm->_draw->freeSprite(index);
}
-void Inter_Playtoons::oPlaytoons_drawLine(OpFuncParams ¶ms) {
- _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
-
- _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
- _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
- _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
- _vm->_draw->_spriteBottom = _vm->_game->_script->readValExpr();
-
- _vm->_game->_script->readExpr(99, 0);
- //unk_var is always set to 0 in Playtoons
- _vm->_draw->_frontColor = _vm->_game->_script->getResultInt() & 0xFFFF; // + unk_var;
- _vm->_draw->_pattern = _vm->_game->_script->getResultInt()>>16;
- _vm->_draw->spriteOperation(DRAW_DRAWLINE);
-}
-
-void Inter_Playtoons::oPlaytoons_invalidate(OpFuncParams ¶ms) {
- _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
- _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
- _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
- _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
-
- _vm->_game->_script->readExpr(99, 0);
- //unk_var is always set to 0 in Playtoons
- _vm->_draw->_frontColor = _vm->_game->_script->getResultInt() & 0xFFFF; // + unk_var;
- _vm->_draw->_pattern = _vm->_game->_script->getResultInt()>>16;
-
- _vm->_draw->spriteOperation(DRAW_INVALIDATE);
-}
-
void Inter_Playtoons::oPlaytoons_checkData(OpFuncParams ¶ms) {
Common::String file = getFile(_vm->_game->_script->evalString());
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 31fb3414621..6a8cc4900b1 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1274,6 +1274,9 @@ void Inter_v1::o1_keyFunc(OpFuncParams ¶ms) {
break;
case -1:
+ if (_vm->getGameType() != kGameTypeAdibou2)
+ break;
+ // fall through
case 1:
if (_vm->getGameType() != kGameTypeFascination && _vm->getGameType() != kGameTypeAdibou2)
_vm->_util->forceMouseUp(true);
diff --git a/engines/gob/inter_v5.cpp b/engines/gob/inter_v5.cpp
index de8f23611e2..380b341090c 100644
--- a/engines/gob/inter_v5.cpp
+++ b/engines/gob/inter_v5.cpp
@@ -103,7 +103,8 @@ void Inter_v5::o5_deleteFile() {
if (mode == SaveLoad::kSaveModeSave) {
if (!_vm->_saveLoad->deleteFile(file)) {
- warning("Cannot delete file \"%s\"", file);
+ GUI::MessageDialog dialog(_("Failed to delete file."));
+ dialog.runModal();
}
} else if (mode == SaveLoad::kSaveModeNone)
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index a5a5ad12ba3..1e7f037b695 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -94,6 +94,8 @@ void Inter_v7::setupOpcodesFunc() {
OPCODEFUNC(0x03, o7_loadCursor);
OPCODEFUNC(0x11, o7_printText);
OPCODEFUNC(0x33, o7_fillRect);
+ OPCODEFUNC(0x34, o7_drawLine);
+ OPCODEFUNC(0x36, o7_invalidate);
OPCODEFUNC(0x3F, o7_checkData);
OPCODEFUNC(0x4D, o7_readData);
OPCODEFUNC(0x4E, o7_writeData);
@@ -1187,6 +1189,35 @@ Common::Array<uint32> Inter_v7::getAdibou2InstalledApplications() {
return applicationNumbers;
}
+void Inter_v7::o7_drawLine(OpFuncParams ¶ms) {
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
+
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteBottom = _vm->_game->_script->readValExpr();
+
+ _vm->_game->_script->readExpr(99, 0);
+ //unk_var is always set to 0
+ _vm->_draw->_frontColor = _vm->_game->_script->getResultInt() & 0xFFFF; // + unk_var;
+ _vm->_draw->_pattern = _vm->_game->_script->getResultInt()>>16;
+ _vm->_draw->spriteOperation(DRAW_DRAWLINE);
+}
+
+void Inter_v7::o7_invalidate(OpFuncParams ¶ms) {
+ _vm->_draw->_destSurface = _vm->_game->_script->readInt16();
+ _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
+ _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
+ _vm->_draw->_spriteRight = _vm->_game->_script->readValExpr();
+
+ _vm->_game->_script->readExpr(99, 0);
+ //unk_var is always set to 0
+ _vm->_draw->_frontColor = _vm->_game->_script->getResultInt() & 0xFFFF; // + unk_var;
+ _vm->_draw->_pattern = _vm->_game->_script->getResultInt()>>16;
+
+ _vm->_draw->spriteOperation(DRAW_INVALIDATE);
+}
+
void Inter_v7::o7_checkData(OpFuncParams ¶ms) {
Common::String file = getFile(_vm->_game->_script->evalString());
Commit: bf652277aac994999b326a8669c661a559ac23bd
https://github.com/scummvm/scummvm/commit/bf652277aac994999b326a8669c661a559ac23bd
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: do not add anymore all subdirectories to the search path in Adibou2
Only "envir", "applis", and any directory containing an "intro_ap.stk" file (indicates an Adibou/Adi application directory).
Changed paths:
engines/gob/init_v7.cpp
diff --git a/engines/gob/init_v7.cpp b/engines/gob/init_v7.cpp
index 56fb6782cec..0e3968cffa8 100644
--- a/engines/gob/init_v7.cpp
+++ b/engines/gob/init_v7.cpp
@@ -34,8 +34,25 @@ Init_v7::~Init_v7() {
void Init_v7::initGame() {
const Common::FSNode gameDataDir(ConfMan.get("path"));
- // That way, an application can be added simply by copying it as a separate subdirectory, in the main game directory
- SearchMan.addSubDirectoryMatching(gameDataDir, "*", 0, 4, true);
+
+ // Add the environment directory
+ SearchMan.addSubDirectoryMatching(gameDataDir, "envir");
+
+ // Add the application list directory
+ SearchMan.addSubDirectoryMatching(gameDataDir, "applis");
+
+ // Add additional applications directories (e.g. "Read/Count 4-5 years").
+ // We rely on the presence of an "intro_ap.itk" to determinate whether a subdirectory contains an applcation.
+ Common::FSList subdirs;
+ gameDataDir.getChildren(subdirs, Common::FSNode::kListDirectoriesOnly);
+ for (const Common::FSNode &subdirNode : subdirs) {
+ Common::FSDirectory subdir(subdirNode);
+ if (subdir.hasFile("intro_ap.stk")) {
+ debugC(1, kDebugFileIO, "Found Adibou/Adi application subdirectory \"%s\", adding it to the search path", subdir.getFSNode().getName().c_str());
+ SearchMan.addSubDirectoryMatching(gameDataDir, subdir.getFSNode().getName(), 0, 4, true);
+ }
+ }
+
Init::initGame();
}
Commit: a71b1c9e94eef7f0137f22038df5f191a8298381
https://github.com/scummvm/scummvm/commit/a71b1c9e94eef7f0137f22038df5f191a8298381
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: allow more path separators in "file path -> save handler" mapping
'/' and ':' are now supported in addition to Window-style '\'
Changed paths:
engines/gob/save/saveload.cpp
engines/gob/save/saveload.h
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload.cpp b/engines/gob/save/saveload.cpp
index 2de5cc48c8e..e5cf9556331 100644
--- a/engines/gob/save/saveload.cpp
+++ b/engines/gob/save/saveload.cpp
@@ -33,14 +33,25 @@ SaveLoad::SaveLoad(GobEngine *vm) : _vm(vm) {
SaveLoad::~SaveLoad() {
}
-const char *SaveLoad::stripPath(const char *fileName) {
+const char *SaveLoad::stripPath(const char *fileName, char separator) {
const char *backSlash;
- if ((backSlash = strrchr(fileName, '\\')))
+ if ((backSlash = strrchr(fileName, separator)))
return backSlash + 1;
return fileName;
}
+
+Common::String SaveLoad::replacePathSeparators(const char *path, char newSeparator) {
+ Common::String result = path;
+ for (char &c : result) {
+ if (c != newSeparator && (c == '\\' || c == '/' || c == ':'))
+ c = newSeparator;
+ }
+
+ return result;
+}
+
Common::List<Common::String> SaveLoad::getFilesMatchingPattern(const char *pattern) const {
warning("SaveLoad::getFilesMatchingPattern not implemented");
return Common::List<Common::String>();
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 3ccd5364616..5c960b088c8 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -48,7 +48,10 @@ public:
virtual ~SaveLoad();
/** "foo\bar\quux.bla" => "quux.bla". */
- static const char *stripPath(const char *fileName);
+ static const char *stripPath(const char *fileName, char separator = '\\');
+
+ /** Changes all file separator characters (/,:,\) in path to newSeparator */
+ static Common::String replacePathSeparators(const char *path, char newSeparator);
/** Returns how to handle that file. */
virtual SaveMode getSaveMode(const char *fileName) const;
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 71c54811842..43037b937f0 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -28,794 +28,794 @@ namespace Gob {
SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
// Addy Junior Base
- {"DATA\\visage01.inf", kSaveModeSave, nullptr, "face" }, // Child 01
- {"DATA\\visage02.inf", kSaveModeSave, nullptr, "face" }, // Child 02
- {"DATA\\visage03.inf", kSaveModeSave, nullptr, "face" }, // Child 03
- {"DATA\\visage04.inf", kSaveModeSave, nullptr, "face" }, // Child 04
- {"DATA\\visage05.inf", kSaveModeSave, nullptr, "face" }, // Child 05
- {"DATA\\visage06.inf", kSaveModeSave, nullptr, "face" }, // Child 06
- {"DATA\\visage07.inf", kSaveModeSave, nullptr, "face" }, // Child 07
- {"DATA\\visage08.inf", kSaveModeSave, nullptr, "face" }, // Child 08
- {"DATA\\visage09.inf", kSaveModeSave, nullptr, "face" }, // Child 09
- {"DATA\\visage10.inf", kSaveModeSave, nullptr, "face" }, // Child 10
- {"DATA\\visage11.inf", kSaveModeSave, nullptr, "face" }, // Child 11
- {"DATA\\visage12.inf", kSaveModeSave, nullptr, "face" }, // Child 12
- {"DATA\\visage13.inf", kSaveModeSave, nullptr, "face" }, // Child 13
- {"DATA\\visage14.inf", kSaveModeSave, nullptr, "face" }, // Child 14
- {"DATA\\visage15.inf", kSaveModeSave, nullptr, "face" }, // Child 15
- {"DATA\\visage16.inf", kSaveModeSave, nullptr, "face" }, // Child 16
- {"DATA\\enfant.inf", kSaveModeSave, nullptr, "children" },
-
- {"TEMP\\debil.tmp", kSaveModeSave, nullptr, nullptr },
- {"DATA\\debil.tmp", kSaveModeSave, nullptr, nullptr },
- {"APPLIS\\debil.tmp", kSaveModeSave, nullptr, nullptr },
- {"ENVIR\\debil.tmp", kSaveModeSave, nullptr, nullptr },
-
-
- { "DATA\\config.inf", kSaveModeSave, nullptr, "configuration"},
+ {"DATA/visage01.inf", kSaveModeSave, nullptr, "face" }, // Child 01
+ {"DATA/visage02.inf", kSaveModeSave, nullptr, "face" }, // Child 02
+ {"DATA/visage03.inf", kSaveModeSave, nullptr, "face" }, // Child 03
+ {"DATA/visage04.inf", kSaveModeSave, nullptr, "face" }, // Child 04
+ {"DATA/visage05.inf", kSaveModeSave, nullptr, "face" }, // Child 05
+ {"DATA/visage06.inf", kSaveModeSave, nullptr, "face" }, // Child 06
+ {"DATA/visage07.inf", kSaveModeSave, nullptr, "face" }, // Child 07
+ {"DATA/visage08.inf", kSaveModeSave, nullptr, "face" }, // Child 08
+ {"DATA/visage09.inf", kSaveModeSave, nullptr, "face" }, // Child 09
+ {"DATA/visage10.inf", kSaveModeSave, nullptr, "face" }, // Child 10
+ {"DATA/visage11.inf", kSaveModeSave, nullptr, "face" }, // Child 11
+ {"DATA/visage12.inf", kSaveModeSave, nullptr, "face" }, // Child 12
+ {"DATA/visage13.inf", kSaveModeSave, nullptr, "face" }, // Child 13
+ {"DATA/visage14.inf", kSaveModeSave, nullptr, "face" }, // Child 14
+ {"DATA/visage15.inf", kSaveModeSave, nullptr, "face" }, // Child 15
+ {"DATA/visage16.inf", kSaveModeSave, nullptr, "face" }, // Child 16
+ {"DATA/enfant.inf", kSaveModeSave, nullptr, "children" },
+
+ {"TEMP/debil.tmp", kSaveModeSave, nullptr, nullptr },
+ {"DATA/debil.tmp", kSaveModeSave, nullptr, nullptr },
+ {"APPLIS/debil.tmp", kSaveModeSave, nullptr, nullptr },
+ {"ENVIR/debil.tmp", kSaveModeSave, nullptr, nullptr },
+
+
+ { "DATA/config.inf", kSaveModeSave, nullptr, "configuration"},
// Adibou environment (flowers, vegetables...)
- {"DATA\\enviro01.inf", kSaveModeSave, nullptr, "environment" }, // Child 01
- {"DATA\\enviro02.inf", kSaveModeSave, nullptr, "environment" }, // Child 02
- {"DATA\\enviro03.inf", kSaveModeSave, nullptr, "environment" }, // Child 03
- {"DATA\\enviro04.inf", kSaveModeSave, nullptr, "environment" }, // Child 04
- {"DATA\\enviro05.inf", kSaveModeSave, nullptr, "environment" }, // Child 05
- {"DATA\\enviro06.inf", kSaveModeSave, nullptr, "environment" }, // Child 06
- {"DATA\\enviro07.inf", kSaveModeSave, nullptr, "environment" }, // Child 07
- {"DATA\\enviro08.inf", kSaveModeSave, nullptr, "environment" }, // Child 08
- {"DATA\\enviro09.inf", kSaveModeSave, nullptr, "environment" }, // Child 09
- {"DATA\\enviro10.inf", kSaveModeSave, nullptr, "environment" }, // Child 10
- {"DATA\\enviro11.inf", kSaveModeSave, nullptr, "environment" }, // Child 11
- {"DATA\\enviro12.inf", kSaveModeSave, nullptr, "environment" }, // Child 12
- {"DATA\\enviro13.inf", kSaveModeSave, nullptr, "environment" }, // Child 13
- {"DATA\\enviro14.inf", kSaveModeSave, nullptr, "environment" }, // Child 14
- {"DATA\\enviro15.inf", kSaveModeSave, nullptr, "environment" }, // Child 15
- {"DATA\\enviro16.inf", kSaveModeSave, nullptr, "environment" }, // Child 16
+ {"DATA/enviro01.inf", kSaveModeSave, nullptr, "environment" }, // Child 01
+ {"DATA/enviro02.inf", kSaveModeSave, nullptr, "environment" }, // Child 02
+ {"DATA/enviro03.inf", kSaveModeSave, nullptr, "environment" }, // Child 03
+ {"DATA/enviro04.inf", kSaveModeSave, nullptr, "environment" }, // Child 04
+ {"DATA/enviro05.inf", kSaveModeSave, nullptr, "environment" }, // Child 05
+ {"DATA/enviro06.inf", kSaveModeSave, nullptr, "environment" }, // Child 06
+ {"DATA/enviro07.inf", kSaveModeSave, nullptr, "environment" }, // Child 07
+ {"DATA/enviro08.inf", kSaveModeSave, nullptr, "environment" }, // Child 08
+ {"DATA/enviro09.inf", kSaveModeSave, nullptr, "environment" }, // Child 09
+ {"DATA/enviro10.inf", kSaveModeSave, nullptr, "environment" }, // Child 10
+ {"DATA/enviro11.inf", kSaveModeSave, nullptr, "environment" }, // Child 11
+ {"DATA/enviro12.inf", kSaveModeSave, nullptr, "environment" }, // Child 12
+ {"DATA/enviro13.inf", kSaveModeSave, nullptr, "environment" }, // Child 13
+ {"DATA/enviro14.inf", kSaveModeSave, nullptr, "environment" }, // Child 14
+ {"DATA/enviro15.inf", kSaveModeSave, nullptr, "environment" }, // Child 15
+ {"DATA/enviro16.inf", kSaveModeSave, nullptr, "environment" }, // Child 16
// Adibou environment weather
- {"DATA\\temp01.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp02.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp03.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp04.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp05.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp06.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp07.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp08.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp09.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp10.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp11.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp12.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp13.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp14.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp15.csa" , kSaveModeSave, nullptr, "weather" },
- {"DATA\\temp16.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp01.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp02.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp03.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp04.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp05.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp06.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp07.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp08.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp09.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp10.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp11.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp12.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp13.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp14.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp15.csa" , kSaveModeSave, nullptr, "weather" },
+ {"DATA/temp16.csa" , kSaveModeSave, nullptr, "weather" },
// Adibou brekout game progress
- {"DATA\\brique01.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique02.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique03.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique04.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique05.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique06.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique07.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique08.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique09.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique10.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique11.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique12.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique13.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique14.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique15.inf" , kSaveModeSave, nullptr, "breakout game progress" },
- {"DATA\\brique16.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique01.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique02.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique03.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique04.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique05.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique06.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique07.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique08.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique09.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique10.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique11.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique12.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique13.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique14.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique15.inf" , kSaveModeSave, nullptr, "breakout game progress" },
+ {"DATA/brique16.inf" , kSaveModeSave, nullptr, "breakout game progress" },
// Adibou Playtoon-like minigame
{"construc.inf" , kSaveModeSave, nullptr, "construction game progress" },
{"ptrecord.inf" , kSaveModeSave, nullptr, "construction game progress" }, // PTRECORD = "Playtoons record" probably
{"aide.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr01.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 01
- {"DATA\\ptreco01.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide01.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr02.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 02
- {"DATA\\ptreco02.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide02.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr03.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 03
- {"DATA\\ptreco03.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide03.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr04.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 04
- {"DATA\\ptreco04.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide04.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr05.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 05
- {"DATA\\ptreco05.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide05.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr06.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 06
- {"DATA\\ptreco06.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide06.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr07.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 07
- {"DATA\\ptreco07.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide07.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr08.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 08
- {"DATA\\ptreco08.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide08.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr09.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 09
- {"DATA\\ptreco09.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide09.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr10.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 10
- {"DATA\\ptreco10.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide10.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr11.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 11
- {"DATA\\ptreco11.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide11.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr12.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 12
- {"DATA\\ptreco12.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide12.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr13.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 13
- {"DATA\\ptreco13.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide13.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr14.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 14
- {"DATA\\ptreco14.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide14.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr15.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 15
- {"DATA\\ptreco15.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide15.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\constr16.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 16
- {"DATA\\ptreco16.inf" , kSaveModeSave, nullptr, "construction game progress" },
- {"DATA\\aide16.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr01.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 01
+ {"DATA/ptreco01.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide01.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr02.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 02
+ {"DATA/ptreco02.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide02.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr03.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 03
+ {"DATA/ptreco03.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide03.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr04.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 04
+ {"DATA/ptreco04.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide04.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr05.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 05
+ {"DATA/ptreco05.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide05.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr06.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 06
+ {"DATA/ptreco06.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide06.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr07.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 07
+ {"DATA/ptreco07.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide07.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr08.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 08
+ {"DATA/ptreco08.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide08.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr09.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 09
+ {"DATA/ptreco09.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide09.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr10.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 10
+ {"DATA/ptreco10.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide10.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr11.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 11
+ {"DATA/ptreco11.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide11.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr12.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 12
+ {"DATA/ptreco12.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide12.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr13.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 13
+ {"DATA/ptreco13.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide13.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr14.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 14
+ {"DATA/ptreco14.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide14.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr15.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 15
+ {"DATA/ptreco15.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide15.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/constr16.inf" , kSaveModeSave, nullptr, "construction game progress" }, // Child 16
+ {"DATA/ptreco16.inf" , kSaveModeSave, nullptr, "construction game progress" },
+ {"DATA/aide16.inf" , kSaveModeSave, nullptr, "construction game progress" },
// Adibou Applications 1-5
- {"DATA\\Gsa01_01.inf", kSaveModeSave, nullptr, "app progress" }, // Child 01
- {"DATA\\Gsa02_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_01.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_02.inf", kSaveModeSave, nullptr, "app progress" }, // Child 02
- {"DATA\\Gsa02_02.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_02.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_02.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_02.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_03.inf", kSaveModeSave, nullptr, "app progress" }, // Child 03
- {"DATA\\Gsa02_03.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_03.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_03.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_03.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_04.inf", kSaveModeSave, nullptr, "app progress" }, // Child 04
- {"DATA\\Gsa02_04.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_04.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_04.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_04.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_05.inf", kSaveModeSave, nullptr, "app progress" }, // Child 05
- {"DATA\\Gsa02_05.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_05.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_05.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_05.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_06.inf", kSaveModeSave, nullptr, "app progress" }, // Child 06
- {"DATA\\Gsa02_06.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_06.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_06.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_06.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_07.inf", kSaveModeSave, nullptr, "app progress" }, // Child 07
- {"DATA\\Gsa02_07.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_07.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_07.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_07.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_08.inf", kSaveModeSave, nullptr, "app progress" }, // Child 08
- {"DATA\\Gsa02_08.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_08.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_08.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_08.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_09.inf", kSaveModeSave, nullptr, "app progress" }, // Child 09
- {"DATA\\Gsa02_09.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_09.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_09.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_09.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_10.inf", kSaveModeSave, nullptr, "app progress" }, // Child 10
- {"DATA\\Gsa02_10.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_10.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_10.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_10.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_11.inf", kSaveModeSave, nullptr, "app progress" }, // Child 11
- {"DATA\\Gsa02_11.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_11.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_11.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_11.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_12.inf", kSaveModeSave, nullptr, "app progress" }, // Child 12
- {"DATA\\Gsa02_12.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_12.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_12.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_12.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_13.inf", kSaveModeSave, nullptr, "app progress" }, // Child 13
- {"DATA\\Gsa02_13.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_13.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_13.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_13.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_14.inf", kSaveModeSave, nullptr, "app progress" }, // Child 14
- {"DATA\\Gsa02_14.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_14.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_14.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_14.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_15.inf", kSaveModeSave, nullptr, "app progress" }, // Child 15
- {"DATA\\Gsa02_15.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_15.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_15.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_15.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa01_16.inf", kSaveModeSave, nullptr, "app progress" }, // Child 16
- {"DATA\\Gsa02_16.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa03_16.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa04_16.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\Gsa05_16.inf", kSaveModeSave, nullptr, "app progress" },
- {"DATA\\memo_01.inf", kSaveModeSave, nullptr, "memo" }, // Child 01
- {"DATA\\memo_02.inf", kSaveModeSave, nullptr, "memo" }, // Child 02
- {"DATA\\memo_03.inf", kSaveModeSave, nullptr, "memo" }, // Child 03
- {"DATA\\memo_04.inf", kSaveModeSave, nullptr, "memo" }, // Child 04
- {"DATA\\memo_05.inf", kSaveModeSave, nullptr, "memo" }, // Child 05
- {"DATA\\memo_06.inf", kSaveModeSave, nullptr, "memo" }, // Child 06
- {"DATA\\memo_07.inf", kSaveModeSave, nullptr, "memo" }, // Child 07
- {"DATA\\memo_08.inf", kSaveModeSave, nullptr, "memo" }, // Child 08
- {"DATA\\memo_09.inf", kSaveModeSave, nullptr, "memo" }, // Child 09
- {"DATA\\memo_10.inf", kSaveModeSave, nullptr, "memo" }, // Child 10
- {"DATA\\memo_11.inf", kSaveModeSave, nullptr, "memo" }, // Child 11
- {"DATA\\memo_12.inf", kSaveModeSave, nullptr, "memo" }, // Child 12
- {"DATA\\memo_13.inf", kSaveModeSave, nullptr, "memo" }, // Child 13
- {"DATA\\memo_14.inf", kSaveModeSave, nullptr, "memo" }, // Child 14
- {"DATA\\memo_15.inf", kSaveModeSave, nullptr, "memo" }, // Child 15
- {"DATA\\memo_16.inf", kSaveModeSave, nullptr, "memo" }, // Child 16
- {"DATA\\diplo_01.inf", kSaveModeSave, nullptr, "diplo" }, // Child 01
- {"DATA\\diplo_02.inf", kSaveModeSave, nullptr, "diplo" }, // Child 02
- {"DATA\\diplo_03.inf", kSaveModeSave, nullptr, "diplo" }, // Child 03
- {"DATA\\diplo_04.inf", kSaveModeSave, nullptr, "diplo" }, // Child 04
- {"DATA\\diplo_05.inf", kSaveModeSave, nullptr, "diplo" }, // Child 05
- {"DATA\\diplo_06.inf", kSaveModeSave, nullptr, "diplo" }, // Child 06
- {"DATA\\diplo_07.inf", kSaveModeSave, nullptr, "diplo" }, // Child 07
- {"DATA\\diplo_08.inf", kSaveModeSave, nullptr, "diplo" }, // Child 08
- {"DATA\\diplo_09.inf", kSaveModeSave, nullptr, "diplo" }, // Child 09
- {"DATA\\diplo_10.inf", kSaveModeSave, nullptr, "diplo" }, // Child 10
- {"DATA\\diplo_11.inf", kSaveModeSave, nullptr, "diplo" }, // Child 11
- {"DATA\\diplo_12.inf", kSaveModeSave, nullptr, "diplo" }, // Child 12
- {"DATA\\diplo_13.inf", kSaveModeSave, nullptr, "diplo" }, // Child 13
- {"DATA\\diplo_14.inf", kSaveModeSave, nullptr, "diplo" }, // Child 14
- {"DATA\\diplo_15.inf", kSaveModeSave, nullptr, "diplo" }, // Child 15
- {"DATA\\diplo_16.inf", kSaveModeSave, nullptr, "diplo" }, // Child 16
- {"DATA\\appli_01.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\appli_02.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\appli_03.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\appli_04.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\appli_05.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\crite_01.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\crite_02.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\crite_03.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\crite_04.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\crite_05.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\exo_01.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\exo_02.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\exo_03.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\exo_04.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\exo_05.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\ico_01.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\ico_02.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\ico_03.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\ico_04.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\ico_05.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\applis.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\lance.inf", kSaveModeSave, nullptr, "app info" },
- {"DATA\\retour.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/Gsa01_01.inf", kSaveModeSave, nullptr, "app progress" }, // Child 01
+ {"DATA/Gsa02_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_01.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_02.inf", kSaveModeSave, nullptr, "app progress" }, // Child 02
+ {"DATA/Gsa02_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_02.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_03.inf", kSaveModeSave, nullptr, "app progress" }, // Child 03
+ {"DATA/Gsa02_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_03.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_04.inf", kSaveModeSave, nullptr, "app progress" }, // Child 04
+ {"DATA/Gsa02_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_04.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_05.inf", kSaveModeSave, nullptr, "app progress" }, // Child 05
+ {"DATA/Gsa02_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_05.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_06.inf", kSaveModeSave, nullptr, "app progress" }, // Child 06
+ {"DATA/Gsa02_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_06.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_07.inf", kSaveModeSave, nullptr, "app progress" }, // Child 07
+ {"DATA/Gsa02_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_07.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_08.inf", kSaveModeSave, nullptr, "app progress" }, // Child 08
+ {"DATA/Gsa02_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_08.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_09.inf", kSaveModeSave, nullptr, "app progress" }, // Child 09
+ {"DATA/Gsa02_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_09.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_10.inf", kSaveModeSave, nullptr, "app progress" }, // Child 10
+ {"DATA/Gsa02_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_10.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_11.inf", kSaveModeSave, nullptr, "app progress" }, // Child 11
+ {"DATA/Gsa02_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_11.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_12.inf", kSaveModeSave, nullptr, "app progress" }, // Child 12
+ {"DATA/Gsa02_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_12.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_13.inf", kSaveModeSave, nullptr, "app progress" }, // Child 13
+ {"DATA/Gsa02_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_13.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_14.inf", kSaveModeSave, nullptr, "app progress" }, // Child 14
+ {"DATA/Gsa02_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_14.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_15.inf", kSaveModeSave, nullptr, "app progress" }, // Child 15
+ {"DATA/Gsa02_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_15.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa01_16.inf", kSaveModeSave, nullptr, "app progress" }, // Child 16
+ {"DATA/Gsa02_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa03_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa04_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/Gsa05_16.inf", kSaveModeSave, nullptr, "app progress" },
+ {"DATA/memo_01.inf", kSaveModeSave, nullptr, "memo" }, // Child 01
+ {"DATA/memo_02.inf", kSaveModeSave, nullptr, "memo" }, // Child 02
+ {"DATA/memo_03.inf", kSaveModeSave, nullptr, "memo" }, // Child 03
+ {"DATA/memo_04.inf", kSaveModeSave, nullptr, "memo" }, // Child 04
+ {"DATA/memo_05.inf", kSaveModeSave, nullptr, "memo" }, // Child 05
+ {"DATA/memo_06.inf", kSaveModeSave, nullptr, "memo" }, // Child 06
+ {"DATA/memo_07.inf", kSaveModeSave, nullptr, "memo" }, // Child 07
+ {"DATA/memo_08.inf", kSaveModeSave, nullptr, "memo" }, // Child 08
+ {"DATA/memo_09.inf", kSaveModeSave, nullptr, "memo" }, // Child 09
+ {"DATA/memo_10.inf", kSaveModeSave, nullptr, "memo" }, // Child 10
+ {"DATA/memo_11.inf", kSaveModeSave, nullptr, "memo" }, // Child 11
+ {"DATA/memo_12.inf", kSaveModeSave, nullptr, "memo" }, // Child 12
+ {"DATA/memo_13.inf", kSaveModeSave, nullptr, "memo" }, // Child 13
+ {"DATA/memo_14.inf", kSaveModeSave, nullptr, "memo" }, // Child 14
+ {"DATA/memo_15.inf", kSaveModeSave, nullptr, "memo" }, // Child 15
+ {"DATA/memo_16.inf", kSaveModeSave, nullptr, "memo" }, // Child 16
+ {"DATA/diplo_01.inf", kSaveModeSave, nullptr, "diplo" }, // Child 01
+ {"DATA/diplo_02.inf", kSaveModeSave, nullptr, "diplo" }, // Child 02
+ {"DATA/diplo_03.inf", kSaveModeSave, nullptr, "diplo" }, // Child 03
+ {"DATA/diplo_04.inf", kSaveModeSave, nullptr, "diplo" }, // Child 04
+ {"DATA/diplo_05.inf", kSaveModeSave, nullptr, "diplo" }, // Child 05
+ {"DATA/diplo_06.inf", kSaveModeSave, nullptr, "diplo" }, // Child 06
+ {"DATA/diplo_07.inf", kSaveModeSave, nullptr, "diplo" }, // Child 07
+ {"DATA/diplo_08.inf", kSaveModeSave, nullptr, "diplo" }, // Child 08
+ {"DATA/diplo_09.inf", kSaveModeSave, nullptr, "diplo" }, // Child 09
+ {"DATA/diplo_10.inf", kSaveModeSave, nullptr, "diplo" }, // Child 10
+ {"DATA/diplo_11.inf", kSaveModeSave, nullptr, "diplo" }, // Child 11
+ {"DATA/diplo_12.inf", kSaveModeSave, nullptr, "diplo" }, // Child 12
+ {"DATA/diplo_13.inf", kSaveModeSave, nullptr, "diplo" }, // Child 13
+ {"DATA/diplo_14.inf", kSaveModeSave, nullptr, "diplo" }, // Child 14
+ {"DATA/diplo_15.inf", kSaveModeSave, nullptr, "diplo" }, // Child 15
+ {"DATA/diplo_16.inf", kSaveModeSave, nullptr, "diplo" }, // Child 16
+ {"DATA/appli_01.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/appli_02.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/appli_03.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/appli_04.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/appli_05.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/crite_01.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/crite_02.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/crite_03.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/crite_04.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/crite_05.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/exo_01.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/exo_02.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/exo_03.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/exo_04.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/exo_05.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/ico_01.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/ico_02.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/ico_03.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/ico_04.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/ico_05.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/applis.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/lance.inf", kSaveModeSave, nullptr, "app info" },
+ {"DATA/retour.inf", kSaveModeSave, nullptr, "app info" },
// Adibou2 saved drawings (up to 12)
// Child1
- {"DATA\\cart0101.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0201.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0301.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0401.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0501.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0601.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0701.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0801.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0901.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1001.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1101.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1201.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett01.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr01.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod01.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur01.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur01.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud01.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable01.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0101.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0201.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0301.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0401.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0501.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0601.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0701.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0801.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0901.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1001.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1101.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1201.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_01.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett01.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr01.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod01.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur01.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur01.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud01.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable01.inf", kSaveModeSave, nullptr, "poster" },
// Child2
- {"DATA\\cart0102.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0202.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0302.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0402.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0502.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0602.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0702.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0802.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0902.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1002.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1102.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1202.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett02.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr02.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod02.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur02.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur02.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud02.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable02.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0102.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0202.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0302.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0402.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0502.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0602.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0702.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0802.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0902.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1002.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1102.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1202.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_02.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett02.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr02.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod02.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur02.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur02.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud02.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable02.inf", kSaveModeSave, nullptr, "poster" },
// Child3
- {"DATA\\cart0103.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0203.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0303.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0403.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0503.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0603.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0703.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0803.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0903.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1003.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1103.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1203.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett03.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr03.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod03.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur03.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur03.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud03.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable03.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0103.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0203.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0303.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0403.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0503.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0603.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0703.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0803.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0903.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1003.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1103.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1203.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_03.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett03.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr03.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod03.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur03.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur03.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud03.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable03.inf", kSaveModeSave, nullptr, "poster" },
// Child4
- {"DATA\\cart0104.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0204.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0304.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0404.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0504.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0604.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0704.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0804.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0904.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1004.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1104.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1204.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett04.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr04.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod04.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur04.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur04.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud04.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable04.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0104.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0204.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0304.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0404.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0504.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0604.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0704.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0804.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0904.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1004.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1104.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1204.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_04.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett04.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr04.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod04.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur04.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur04.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud04.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable04.inf", kSaveModeSave, nullptr, "poster" },
// Child5
- {"DATA\\cart0105.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0205.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0305.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0405.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0505.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0605.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0705.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0805.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0905.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1005.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1105.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1205.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett05.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr05.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod05.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur05.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur05.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud05.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable05.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0105.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0205.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0305.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0405.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0505.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0605.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0705.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0805.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0905.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1005.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1105.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1205.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_05.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett05.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr05.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod05.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur05.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur05.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud05.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable05.inf", kSaveModeSave, nullptr, "poster" },
// Child6
- {"DATA\\cart0106.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0206.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0306.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0406.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0506.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0606.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0706.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0806.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0906.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1006.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1106.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1206.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett06.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr06.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod06.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur06.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur06.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud06.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable06.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0106.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0206.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0306.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0406.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0506.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0606.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0706.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0806.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0906.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1006.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1106.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1206.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_06.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett06.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr06.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod06.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur06.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur06.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud06.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable06.inf", kSaveModeSave, nullptr, "poster" },
// Child7
- {"DATA\\cart0107.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0207.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0307.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0407.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0507.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0607.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0707.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0807.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0907.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1007.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1107.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1207.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett07.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr07.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod07.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur07.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur07.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud07.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable07.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0107.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0207.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0307.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0407.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0507.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0607.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0707.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0807.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0907.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1007.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1107.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1207.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_07.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett07.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr07.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod07.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur07.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur07.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud07.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable07.inf", kSaveModeSave, nullptr, "poster" },
// Child8
- {"DATA\\cart0108.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0208.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0308.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0408.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0508.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0608.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0708.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0808.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0908.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1008.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1108.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1208.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett08.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr08.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod08.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur08.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur08.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud08.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable08.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0108.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0208.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0308.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0408.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0508.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0608.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0708.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0808.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0908.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1008.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1108.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1208.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_08.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett08.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr08.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod08.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur08.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur08.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud08.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable08.inf", kSaveModeSave, nullptr, "poster" },
// Child9
- {"DATA\\cart0109.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0209.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0309.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0409.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0509.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0609.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0709.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0809.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0909.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1009.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1109.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1209.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett09.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr09.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod09.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur09.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur09.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud09.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable09.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0109.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0209.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0309.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0409.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0509.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0609.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0709.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0809.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0909.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1009.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1109.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1209.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_09.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett09.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr09.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod09.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur09.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur09.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud09.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable09.inf", kSaveModeSave, nullptr, "poster" },
// Child10
- {"DATA\\cart0110.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0210.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0310.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0410.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0510.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0610.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0710.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0810.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0910.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1010.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1110.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1210.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett10.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr10.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod10.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur10.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur10.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud10.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable10.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0110.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0210.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0310.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0410.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0510.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0610.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0710.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0810.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0910.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1010.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1110.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1210.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_10.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett10.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr10.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod10.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur10.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur10.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud10.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable10.inf", kSaveModeSave, nullptr, "poster" },
// Child11
- {"DATA\\cart0111.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0211.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0311.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0411.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0511.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0611.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0711.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0811.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0911.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1011.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1111.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1211.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett11.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr11.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod11.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur11.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur11.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud11.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable11.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0111.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0211.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0311.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0411.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0511.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0611.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0711.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0811.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0911.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1011.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1111.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1211.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_11.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett11.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr11.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod11.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur11.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur11.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud11.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable11.inf", kSaveModeSave, nullptr, "poster" },
// Child12
- {"DATA\\cart0112.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0212.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0312.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0412.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0512.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0612.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0712.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0812.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0912.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1012.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1112.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1212.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett12.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr12.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod12.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur12.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur12.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud12.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable12.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0112.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0212.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0312.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0412.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0512.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0612.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0712.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0812.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0912.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1012.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1112.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1212.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_12.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett12.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr12.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod12.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur12.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur12.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud12.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable12.inf", kSaveModeSave, nullptr, "poster" },
// Child13
- {"DATA\\cart0113.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0213.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0313.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0413.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0513.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0613.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0713.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0813.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0913.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1013.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1113.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1213.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett13.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr13.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod13.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur13.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur13.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud13.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable13.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0113.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0213.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0313.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0413.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0513.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0613.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0713.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0813.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0913.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1013.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1113.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1213.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_13.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett13.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr13.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod13.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur13.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur13.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud13.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable13.inf", kSaveModeSave, nullptr, "poster" },
// Child14
- {"DATA\\cart0114.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0214.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0314.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0414.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0514.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0614.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0714.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0814.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0914.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1014.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1114.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1214.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett14.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr14.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod14.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur14.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur14.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud14.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable14.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0114.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0214.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0314.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0414.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0514.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0614.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0714.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0814.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0914.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1014.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1114.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1214.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_14.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett14.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr14.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod14.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur14.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur14.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud14.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable14.inf", kSaveModeSave, nullptr, "poster" },
// Child15
- {"DATA\\cart0115.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0215.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0315.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0415.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0515.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0615.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0715.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0815.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0915.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1015.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1115.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1215.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett15.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr15.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod15.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur15.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur15.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud15.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable15.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0115.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0215.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0315.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0415.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0515.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0615.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0715.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0815.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0915.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1015.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1115.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1215.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_15.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett15.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr15.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod15.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur15.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur15.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud15.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable15.inf", kSaveModeSave, nullptr, "poster" },
// Child16
- {"DATA\\cart0116.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0216.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0316.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0416.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0516.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0616.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0716.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0816.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart0916.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1016.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1116.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\cart1216.inf", kSaveModeSave, nullptr, "drawing" },
- {"DATA\\pal00_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal01_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal02_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal03_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal04_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal05_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal06_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal07_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal08_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal09_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal10_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\pal11_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
- {"DATA\\palett16.inf", kSaveModeSave, nullptr, "drawing palette" },
- {"DATA\\plettr16.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
- {"DATA\\pgatod16.inf", kSaveModeSave, nullptr, "photo of cake" },
- {"DATA\\pfleur16.inf", kSaveModeSave, nullptr, "photo of flowers" },
- {"DATA\\mfleur16.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mfleud16.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
- {"DATA\\mtable16.inf", kSaveModeSave, nullptr, "poster" },
+ {"DATA/cart0116.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0216.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0316.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0416.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0516.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0616.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0716.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0816.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart0916.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1016.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1116.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/cart1216.inf", kSaveModeSave, nullptr, "drawing" },
+ {"DATA/pal00_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal01_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal02_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal03_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal04_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal05_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal06_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal07_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal08_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal09_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal10_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/pal11_16.inf", kSaveModeSave, nullptr, "drawing thumbnail" },
+ {"DATA/palett16.inf", kSaveModeSave, nullptr, "drawing palette" },
+ {"DATA/plettr16.inf", kSaveModeSave, nullptr, "drawing in mailbox" },
+ {"DATA/pgatod16.inf", kSaveModeSave, nullptr, "photo of cake" },
+ {"DATA/pfleur16.inf", kSaveModeSave, nullptr, "photo of flowers" },
+ {"DATA/mfleur16.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mfleud16.inf", kSaveModeSave, nullptr, "photo of flowers (vase)" },
+ {"DATA/mtable16.inf", kSaveModeSave, nullptr, "poster" },
{"adibou.pal", kSaveModeSave, nullptr, "drawing on floppy disk" },
{"adibour.pal", kSaveModeSave, nullptr, "drawing on floppy disk (thumbnail)" },
{"test.dob", kSaveModeSave, nullptr, "test floppy disk file" },
- {"TEMP\\liste.$$$", kSaveModeSave, nullptr, "exercise list" },
+ {"TEMP/liste.$$$", kSaveModeSave, nullptr, "exercise list" },
// Addy 4 Base
{"config00.inf", kSaveModeSave, nullptr, nullptr },
@@ -1407,16 +1407,17 @@ SaveLoad_v7::~SaveLoad_v7() {
}
const SaveLoad_v7::SaveFile *SaveLoad_v7::getSaveFile(const char *fileName) const {
+ Common::String pathNormalized = replacePathSeparators(fileName, '/');
// First, search for full path match
for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
- if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
+ if (!scumm_stricmp(pathNormalized.c_str(), _saveFiles[i].sourceName))
return &_saveFiles[i];
// If no match has been found, search for a filename-only match, ignoring paths
- fileName = stripPath(fileName);
+ fileName = stripPath(pathNormalized.c_str(), '/');
for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
- if (!scumm_stricmp(fileName, stripPath(_saveFiles[i].sourceName)))
+ if (!scumm_stricmp(fileName, stripPath(_saveFiles[i].sourceName, '/')))
return &_saveFiles[i];
return nullptr;
@@ -1451,12 +1452,11 @@ SaveLoad::SaveMode SaveLoad_v7::getSaveMode(const char *fileName) const {
Common::List<Common::String> SaveLoad_v7::getFilesMatchingPattern(const char *pattern) const {
Common::List<Common::String> files;
- Common::String patternEscaped = pattern;
- Common::replace(patternEscaped, "\\", "\\\\");
+ Common::String patternNormalized = replacePathSeparators(pattern, '/');
for (const SaveFile &saveFile : _saveFiles) {
// Full path match only
- if (Common::matchString(saveFile.sourceName, patternEscaped.c_str(), true))
+ if (Common::matchString(saveFile.sourceName, patternNormalized.c_str(), true))
files.push_back(saveFile.sourceName);
}
Commit: 92f1d6993914bf29b610c599489ea69b8bdbdd10
https://github.com/scummvm/scummvm/commit/92f1d6993914bf29b610c599489ea69b8bdbdd10
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: restrict the Adibou2 "free bananas" workaround to versions confirmed without unwanted side effect
Changed paths:
engines/gob/detection/detection.h
engines/gob/detection/tables_adibou.h
engines/gob/gob.h
engines/gob/inter_v6.cpp
engines/gob/metaengine.cpp
diff --git a/engines/gob/detection/detection.h b/engines/gob/detection/detection.h
index 1d9c5d8b348..16e74bf5982 100644
--- a/engines/gob/detection/detection.h
+++ b/engines/gob/detection/detection.h
@@ -69,6 +69,10 @@ enum Features {
kFeaturesTrueColor = 1 << 7
};
+enum AdditionalGameFlags {
+ ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND = 1 << 0
+};
+
struct GOBGameDescription {
ADGameDescription desc;
diff --git a/engines/gob/detection/tables_adibou.h b/engines/gob/detection/tables_adibou.h
index 89b63a3a991..08ff23911c3 100644
--- a/engines/gob/detection/tables_adibou.h
+++ b/engines/gob/detection/tables_adibou.h
@@ -118,7 +118,7 @@
AD_ENTRY1s("intro.stk", "f2b797819aeedee557e904b0b5ccd82e", 8736454),
FR_FRA,
kPlatformDOS,
- ADGF_NO_FLAGS,
+ ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
GUIO0()
},
kGameTypeAdibou2,
@@ -132,7 +132,7 @@
AD_ENTRY1s("intro.stk", "7b1f1f6f6477f54401e95d913f75e333", 8736904),
FR_FRA,
kPlatformDOS,
- ADGF_NO_FLAGS,
+ ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
GUIO0()
},
kGameTypeAdibou2,
@@ -146,7 +146,7 @@
AD_ENTRY1s("intro.stk", "1e49c39a4a3ce6032a84b712539c2d63", 8738134),
FR_FRA,
kPlatformDOS,
- ADGF_NO_FLAGS,
+ ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
GUIO0()
},
kGameTypeAdibou2,
@@ -160,7 +160,7 @@
AD_ENTRY1s("intro.stk", "092707829555f27706920e4cacf1fada", 8737958),
FR_FRA,
kPlatformDOS,
- ADGF_NO_FLAGS,
+ ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
GUIO0()
},
kGameTypeAdibou2,
diff --git a/engines/gob/gob.h b/engines/gob/gob.h
index 7da4843d160..e05eb22a56f 100644
--- a/engines/gob/gob.h
+++ b/engines/gob/gob.h
@@ -168,6 +168,7 @@ public:
GobConsole *_console;
bool _resourceSizeWorkaround;
+ bool _enableAdibou2FreeBananasWorkaround;
Global *_global;
Util *_util;
diff --git a/engines/gob/inter_v6.cpp b/engines/gob/inter_v6.cpp
index 1db6017c7e7..3629ffb3a95 100644
--- a/engines/gob/inter_v6.cpp
+++ b/engines/gob/inter_v6.cpp
@@ -304,6 +304,8 @@ void Inter_v6::o6_assign(OpFuncParams ¶ms) {
&&
loopCount == 1
&&
+ _vm->_enableAdibou2FreeBananasWorkaround
+ &&
_vm->_game->_script->pos() == 18631 // same offset in all versions
&&
(dest == 40956 // bananas in v2.10, v2.11
diff --git a/engines/gob/metaengine.cpp b/engines/gob/metaengine.cpp
index b30defa0bda..82f417770c8 100644
--- a/engines/gob/metaengine.cpp
+++ b/engines/gob/metaengine.cpp
@@ -79,6 +79,8 @@ void GobEngine::initGame(const GOBGameDescription *gd) {
_features = gd->features;
_language = gd->desc.language;
_platform = gd->desc.platform;
+
+ _enableAdibou2FreeBananasWorkaround = gd->desc.flags & ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND;
}
} // End of namespace Gob
Commit: 1e5cb46b6e70e8222f869b32fa18fee996ced57e
https://github.com/scummvm/scummvm/commit/1e5cb46b6e70e8222f869b32fa18fee996ced57e
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: fix a missing indentation (Adibou2)
Changed paths:
engines/gob/save/saveload_v7.cpp
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
index 43037b937f0..0046b5d0610 100644
--- a/engines/gob/save/saveload_v7.cpp
+++ b/engines/gob/save/saveload_v7.cpp
@@ -1148,7 +1148,7 @@ bool SaveLoad_v7::GameFileHandler::save(int16 dataVar, int32 size, int32 offset)
}
bool SaveLoad_v7::GameFileHandler::loadToRaw(byte *ptr, int32 size, int32 offset) {
-Common::String fileName = _file.build();
+ Common::String fileName = _file.build();
if (fileName.empty())
return false;
Commit: 38b5431becd22a596c9f408d88851ceea41c8b7c
https://github.com/scummvm/scummvm/commit/38b5431becd22a596c9f408d88851ceea41c8b7c
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:35+01:00
Commit Message:
GOB: fix the prefix of an Adibou2 game flag (ADGF_ -> GF_)
Changed paths:
engines/gob/detection/detection.h
engines/gob/detection/tables_adibou.h
engines/gob/metaengine.cpp
diff --git a/engines/gob/detection/detection.h b/engines/gob/detection/detection.h
index 16e74bf5982..0fe31bac945 100644
--- a/engines/gob/detection/detection.h
+++ b/engines/gob/detection/detection.h
@@ -70,7 +70,7 @@ enum Features {
};
enum AdditionalGameFlags {
- ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND = 1 << 0
+ GF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND = 1 << 0
};
struct GOBGameDescription {
diff --git a/engines/gob/detection/tables_adibou.h b/engines/gob/detection/tables_adibou.h
index 08ff23911c3..ea6a1213f77 100644
--- a/engines/gob/detection/tables_adibou.h
+++ b/engines/gob/detection/tables_adibou.h
@@ -118,7 +118,7 @@
AD_ENTRY1s("intro.stk", "f2b797819aeedee557e904b0b5ccd82e", 8736454),
FR_FRA,
kPlatformDOS,
- ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
+ GF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
GUIO0()
},
kGameTypeAdibou2,
@@ -132,7 +132,7 @@
AD_ENTRY1s("intro.stk", "7b1f1f6f6477f54401e95d913f75e333", 8736904),
FR_FRA,
kPlatformDOS,
- ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
+ GF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
GUIO0()
},
kGameTypeAdibou2,
@@ -146,7 +146,7 @@
AD_ENTRY1s("intro.stk", "1e49c39a4a3ce6032a84b712539c2d63", 8738134),
FR_FRA,
kPlatformDOS,
- ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
+ GF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
GUIO0()
},
kGameTypeAdibou2,
@@ -160,7 +160,7 @@
AD_ENTRY1s("intro.stk", "092707829555f27706920e4cacf1fada", 8737958),
FR_FRA,
kPlatformDOS,
- ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
+ GF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND,
GUIO0()
},
kGameTypeAdibou2,
diff --git a/engines/gob/metaengine.cpp b/engines/gob/metaengine.cpp
index 82f417770c8..f3531b049cb 100644
--- a/engines/gob/metaengine.cpp
+++ b/engines/gob/metaengine.cpp
@@ -80,7 +80,7 @@ void GobEngine::initGame(const GOBGameDescription *gd) {
_language = gd->desc.language;
_platform = gd->desc.platform;
- _enableAdibou2FreeBananasWorkaround = gd->desc.flags & ADGF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND;
+ _enableAdibou2FreeBananasWorkaround = gd->desc.flags & GF_ENABLE_ADIBOU2_FREE_BANANAS_WORKAROUND;
}
} // End of namespace Gob
Commit: 493c7d8954d998e77161bb3efc0e89715649df31
https://github.com/scummvm/scummvm/commit/493c7d8954d998e77161bb3efc0e89715649df31
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:36+01:00
Commit Message:
GOB: update the list of files containing translatable strings
Changed paths:
engines/gob/POTFILES
diff --git a/engines/gob/POTFILES b/engines/gob/POTFILES
index ca7aa141779..ef032358de9 100644
--- a/engines/gob/POTFILES
+++ b/engines/gob/POTFILES
@@ -1,5 +1,6 @@
engines/gob/inter_playtoons.cpp
engines/gob/inter_v2.cpp
engines/gob/inter_v5.cpp
+engines/gob/inter_v7.cpp
engines/gob/inter_geisha.cpp
Commit: 50a6555ec385d41635ace2c0bb7220aa1aac9b1a
https://github.com/scummvm/scummvm/commit/50a6555ec385d41635ace2c0bb7220aa1aac9b1a
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2022-12-02T11:44:36+01:00
Commit Message:
GOB: misc format/style fixes in Adibou2 changes
Changed paths:
engines/gob/goblin_v7.cpp
engines/gob/inter_v1.cpp
engines/gob/inter_v7.cpp
diff --git a/engines/gob/goblin_v7.cpp b/engines/gob/goblin_v7.cpp
index b1a9efbb245..50958d32874 100644
--- a/engines/gob/goblin_v7.cpp
+++ b/engines/gob/goblin_v7.cpp
@@ -344,8 +344,7 @@ static void updateGobDest(Map *map, Mult::Mult_Object &obj) {
int8 newGobDestX = 0;
int32 var_8 = 1000;
int8 newGobDestY = 0;
- int32 direction = 2;
- for (;direction <= 8; direction += 2) {
+ for (int32 direction = 2; direction <= 8; direction += 2) {
int32 nbrOfStepsDir = 0;
int8 tempGobDestX = obj.gobDestX;
int8 tempGobDestY = obj.gobDestY;
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 6a8cc4900b1..c50b1101a82 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1220,7 +1220,7 @@ void Inter_v1::o1_palLoad(OpFuncParams ¶ms) {
_vm->_video->setFullPalette(_vm->_global->_pPaletteDesc);
else
_vm->_util->clearPalette();
- return ;
+ return;
}
_vm->_global->_pPaletteDesc->unused2 = _vm->_draw->_unusedPalette2;
diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 1e7f037b695..3b05e23b0af 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -982,9 +982,6 @@ void Inter_v7::o7_getDBString() {
void Inter_v7::o7_printText(OpFuncParams ¶ms) {
char buf[60];
- int i;
- int16 oldTransparency;
-
_vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr();
_vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr();
@@ -1012,8 +1009,8 @@ void Inter_v7::o7_printText(OpFuncParams ¶ms) {
// _vm->_draw->_backColor += colMod;
// _vm->_draw->_frontColor += colMod;
- oldTransparency = _vm->_draw->_transparency;
- i = 0;
+ int16 oldTransparency = _vm->_draw->_transparency;
+ int i = 0;
do {
for (; (_vm->_game->_script->peekChar() != '.') &&
(_vm->_game->_script->peekByte() != 200); i++) {
Commit: d2462684e1227dd019412235d2ffd63cce63d689
https://github.com/scummvm/scummvm/commit/d2462684e1227dd019412235d2ffd63cce63d689
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-12-02T11:47:13+01:00
Commit Message:
GOB: Added sdelamarre to credits
Changed paths:
engines/gob/credits.pl
diff --git a/engines/gob/credits.pl b/engines/gob/credits.pl
index f61711ec94e..fb841ca5009 100644
--- a/engines/gob/credits.pl
+++ b/engines/gob/credits.pl
@@ -1,6 +1,7 @@
begin_section("Gob");
add_person("Torbjörn Andersson", "eriktorbjorn", "");
add_person("Arnaud Boutonné", "Strangerke", "");
+ add_person("Simon Delamarre", "sdelamarre", "");
add_person("Sven Hesse", "DrMcCoy", "");
add_person("Eugene Sandulenko", "sev", "");
end_section();
Commit: 0b792ec80696bbe35a60e25f55a84c60bf830d11
https://github.com/scummvm/scummvm/commit/0b792ec80696bbe35a60e25f55a84c60bf830d11
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-12-02T11:49:17+01:00
Commit Message:
GOB: Added missing override keywords
Changed paths:
engines/gob/goblin.h
diff --git a/engines/gob/goblin.h b/engines/gob/goblin.h
index ac6f89c9f26..a42f8a90ce6 100644
--- a/engines/gob/goblin.h
+++ b/engines/gob/goblin.h
@@ -332,8 +332,8 @@ public:
Goblin_v7(GobEngine *vm);
~Goblin_v7() override {}
- void initiateMove(Mult::Mult_Object *obj);
- void setGoblinState(Mult::Mult_Object *obj, int16 animState);
+ void initiateMove(Mult::Mult_Object *obj) override;
+ void setGoblinState(Mult::Mult_Object *obj, int16 animState) override;
private:
int32 computeObjNextDirection(Mult::Mult_Object &obj);
Commit: 25d8019a90c7a85057b4bb067f764c149a0a1c75
https://github.com/scummvm/scummvm/commit/25d8019a90c7a85057b4bb067f764c149a0a1c75
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-12-02T11:49:49+01:00
Commit Message:
GOB: Fix warning
Changed paths:
engines/gob/save/saveload.cpp
diff --git a/engines/gob/save/saveload.cpp b/engines/gob/save/saveload.cpp
index e5cf9556331..11ab805e520 100644
--- a/engines/gob/save/saveload.cpp
+++ b/engines/gob/save/saveload.cpp
@@ -102,7 +102,7 @@ bool SaveLoad::load(const char *fileName, int16 dataVar, int32 size, int32 offse
bool SaveLoad::loadToRaw(const char *fileName, byte *ptr, int32 size, int32 offset) {
debugC(3, kDebugSaveLoad, "Requested loading of save file \"%s\" - raw %p, %d, %d",
- fileName, ptr, size, offset);
+ fileName, (void *)ptr, size, offset);
SaveHandler *handler = getHandler(fileName);
Commit: 8ec11f3aa54bb27415418699b828e6cfba35501a
https://github.com/scummvm/scummvm/commit/8ec11f3aa54bb27415418699b828e6cfba35501a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-12-02T11:50:51+01:00
Commit Message:
CREDITS: Update
Changed paths:
AUTHORS
doc/docportal/help/credits.rst
gui/credits.h
diff --git a/AUTHORS b/AUTHORS
index e48d6277911..a2f739f8a44 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -163,7 +163,7 @@ ScummVM Team
Scott Percival
Steven Hoefel
Tobia Tesan
- Misty De Méo
+ Misty De Meo
DM:
Arnaud Boutonne
@@ -206,6 +206,7 @@ ScummVM Team
Gob:
Torbjorn Andersson
Arnaud Boutonne
+ Simon Delamarre
Sven Hesse
Eugene Sandulenko
diff --git a/doc/docportal/help/credits.rst b/doc/docportal/help/credits.rst
index 071826cbd9e..6720512783d 100644
--- a/doc/docportal/help/credits.rst
+++ b/doc/docportal/help/credits.rst
@@ -500,6 +500,8 @@ Gob
-
* - Arnaud Boutonné
-
+ * - Simon Delamarre
+ -
* - Sven Hesse
-
* - Eugene Sandulenko
diff --git a/gui/credits.h b/gui/credits.h
index 169ee2b940c..0fa55b10d67 100644
--- a/gui/credits.h
+++ b/gui/credits.h
@@ -262,6 +262,7 @@ static const char *credits[] = {
"C1""Gob",
"C0""Torbj\303\266rn Andersson",
"C0""Arnaud Boutonn\303\251",
+"C0""Simon Delamarre",
"C0""Sven Hesse",
"C0""Eugene Sandulenko",
"",
More information about the Scummvm-git-logs
mailing list