8
8
* modify it under the terms of the GNU General Public License
9
9
* as published by the Free Software Foundation; either version 2
10
10
* of the License, or (at your option) any later version.
12
12
* This program is distributed in the hope that it will be useful,
13
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
15
* GNU General Public License for more details.
17
17
* You should have received a copy of the GNU General Public License
18
18
* along with this program; if not, write to the Free Software
19
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
454
455
loadFile("ctable02.c", _loadTempBuf);
455
456
DataTokenizer t(_loadTempBuf, _fileLoadSize);
456
457
while (t.findNextToken(kDataTokenDw)) {
457
_spriteAnimationsTable[entry].numParts = t.getNextInteger();
458
if (_spriteAnimationsTable[entry].numParts < 1) {
458
_spriteAnimationsTable[entry]._numParts = t.getNextInteger();
459
if (_spriteAnimationsTable[entry]._numParts < 1) {
461
_spriteAnimationsTable[entry].rotateFlag = t.getNextInteger();
462
_spriteAnimationsTable[entry]._rotateFlag = t.getNextInteger();
462
463
int num = t.getNextInteger();
467
_spriteAnimationsTable[entry].firstFrameIndex = i;
468
_spriteAnimationsTable[entry]._firstFrameIndex = i;
468
469
while (start != 999) {
469
470
start = t.getNextInteger();
470
471
if (start == 9999) { // end marker in the demo version
570
574
const int x = t.getNextInteger();
571
575
const int y = t.getNextInteger();
572
576
Data *d = &_dataTable[_dataCount];
573
d->sourceOffset = y * 320 + x;
574
d->xSize = t.getNextInteger();
575
d->ySize = t.getNextInteger();
576
d->xDest = t.getNextInteger();
577
d->yDest = t.getNextInteger();
577
d->_sourceOffset = y * 320 + x;
578
d->_xSize = t.getNextInteger();
579
d->_ySize = t.getNextInteger();
580
d->_xDest = t.getNextInteger();
581
d->_yDest = t.getNextInteger();
638
d->animCurrentCounter = d->animInitCounter = anim;
642
d->_animCurrentCounter = d->_animInitCounter = anim;
639
643
while (_staticData3Table[anim + 1] != 999) {
642
d->animLastCounter = anim;
646
d->_animLastCounter = anim;
644
d->animLastCounter = 0;
648
d->_animLastCounter = 0;
646
d->getFlag = t.getNextInteger();
647
d->inventoryNum = t.getNextInteger();
648
d->flagNum = t.getNextInteger();
649
d->flagValue = t.getNextInteger();
650
d->selectable = t.getNextInteger();
651
d->standX = t.getNextInteger();
652
d->standY = t.getNextInteger();
650
d->_getFlag = t.getNextInteger();
651
d->_inventoryNum = t.getNextInteger();
652
d->_flagNum = t.getNextInteger();
653
d->_flagValue = t.getNextInteger();
654
d->_selectable = t.getNextInteger();
655
d->_standX = t.getNextInteger();
656
d->_standY = t.getNextInteger();
657
d->_drawFlag = false;
661
665
t.findNextToken(kDataTokenDw);
662
666
_gameDebug = t.getNextInteger() != 0;
663
667
_displayGameHints = t.getNextInteger() != 0;
664
// forces game hints feature
665
// _displayGameHints = true;
666
668
_locationObjectsCount = 0;
667
669
if (t.findIndex(_locationNum)) {
668
670
while (t.findNextToken(kDataTokenDw)) {
669
671
int i = t.getNextInteger();
673
675
assert(_locationObjectsCount < kLocationObjectsTableSize);
674
676
LocationObject *d = &_locationObjectsTable[_locationObjectsCount++];
676
d->yPos = t.getNextInteger();
677
d->xSize = t.getNextInteger();
678
d->ySize = t.getNextInteger();
679
d->standX = t.getNextInteger();
680
d->standY = t.getNextInteger();
681
d->textNum = t.getNextInteger();
682
d->cursorNum = t.getNextInteger();
683
d->locationNum = t.getNextInteger();
684
if (d->locationNum > 0) {
685
d->toX = t.getNextInteger();
686
d->toY = t.getNextInteger();
687
d->toX2 = t.getNextInteger();
688
d->toY2 = t.getNextInteger();
689
d->toWalkX2 = t.getNextInteger();
690
d->toWalkY2 = t.getNextInteger();
678
d->_yPos = t.getNextInteger();
679
d->_xSize = t.getNextInteger();
680
d->_ySize = t.getNextInteger();
681
d->_standX = t.getNextInteger();
682
d->_standY = t.getNextInteger();
683
d->_textNum = t.getNextInteger();
684
d->_cursorNum = t.getNextInteger();
685
d->_locationNum = t.getNextInteger();
686
if (d->_locationNum > 0) {
687
d->_toX = t.getNextInteger();
688
d->_toY = t.getNextInteger();
689
d->_toX2 = t.getNextInteger();
690
d->_toY2 = t.getNextInteger();
691
d->_toWalkX2 = t.getNextInteger();
692
d->_toWalkY2 = t.getNextInteger();
725
727
int keyD = t.getNextInteger();
726
728
int keyE = t.getNextInteger();
727
729
Action *action = &_actionsTable[_actionsCount++];
728
action->key = keyE * 1000000 + keyD * 100000 + keyA * 10000 + keyB * 1000 + keyC;
729
action->testFlag1Num = t.getNextInteger();
730
action->testFlag1Value = t.getNextInteger();
731
action->testFlag2Num = t.getNextInteger();
732
action->testFlag2Value = t.getNextInteger();
733
action->speech = t.getNextInteger();
734
action->flipX = t.getNextInteger();
735
action->index = t.getNextInteger();
736
action->delay = t.getNextInteger();
737
action->setFlagNum = t.getNextInteger();
738
assert(action->setFlagNum >= 0 && action->setFlagNum < kFlagsTableSize);
739
action->setFlagValue = t.getNextInteger();
740
action->fxNum = t.getNextInteger();
741
action->fxDelay = t.getNextInteger();
730
action->_key = keyE * 1000000 + keyD * 100000 + keyA * 10000 + keyB * 1000 + keyC;
731
action->_testFlag1Num = t.getNextInteger();
732
action->_testFlag1Value = t.getNextInteger();
733
action->_testFlag2Num = t.getNextInteger();
734
action->_testFlag2Value = t.getNextInteger();
735
action->_speech = t.getNextInteger();
736
action->_flipX = t.getNextInteger();
737
action->_index = t.getNextInteger();
738
action->_delay = t.getNextInteger();
739
action->_setFlagNum = t.getNextInteger();
740
assert(action->_setFlagNum >= 0 && action->_setFlagNum < kFlagsTableSize);
741
action->_setFlagValue = t.getNextInteger();
742
action->_fxNum = t.getNextInteger();
743
action->_fxDelay = t.getNextInteger();
756
758
assert(_charPosCount < 4);
757
759
CharPos *charPos = &_charPosTable[_charPosCount++];
759
charPos->yPos = t.getNextInteger();
760
charPos->xSize = t.getNextInteger();
761
charPos->ySize = t.getNextInteger();
762
charPos->xWalkTo = t.getNextInteger();
763
charPos->yWalkTo = t.getNextInteger();
764
charPos->flagNum = t.getNextInteger();
765
charPos->flagValue = t.getNextInteger();
766
charPos->direction = t.getNextInteger();
767
charPos->name = t.getNextInteger();
768
charPos->description = t.getNextInteger();
761
charPos->_yPos = t.getNextInteger();
762
charPos->_xSize = t.getNextInteger();
763
charPos->_ySize = t.getNextInteger();
764
charPos->_xWalkTo = t.getNextInteger();
765
charPos->_yWalkTo = t.getNextInteger();
766
charPos->_flagNum = t.getNextInteger();
767
charPos->_flagValue = t.getNextInteger();
768
charPos->_direction = t.getNextInteger();
769
charPos->_name = t.getNextInteger();
770
charPos->_description = t.getNextInteger();
770
772
int quitLoop = 0;
771
773
size_t count = 0;
834
836
_spritesCount = _sprC02LookupTable2[_locationNum];
835
837
for (int i = 0; i < kMaxCharacters; ++i) {
836
838
memset(&_spritesTable[i], 0, sizeof(Sprite));
837
_spritesTable[i].state = -1;
838
_spritesTable[i].stateIndex = -1;
839
_spritesTable[i]._state = -1;
840
_spritesTable[i]._stateIndex = -1;
842
844
void TuckerEngine::unloadSprC02_01() {
843
845
for (int i = 1; i < kSprC02TableSize; ++i) {
844
846
free(_sprC02Table[i]);
847
_sprC02Table[i] = nullptr;
849
_sprC02Table[0] = nullptr;
850
852
void TuckerEngine::loadFx() {
851
853
loadFile("fx.c", _loadTempBuf);
852
854
DataTokenizer t(_loadTempBuf, _fileLoadSize);
853
t.findIndex(_locationNum);
854
t.findNextToken(kDataTokenDw);
855
_locationSoundsCount = t.getNextInteger();
857
for (int i = 0; i < _locationSoundsCount; ++i) {
858
LocationSound *s = &_locationSoundsTable[i];
860
s->num = t.getNextInteger();
861
s->volume = t.getNextInteger();
862
s->type = t.getNextInteger();
867
_currentFxVolume = s->volume;
868
_currentFxDist = t.getNextInteger();
869
_currentFxScale = t.getNextInteger();
874
s->startFxSpriteState = t.getNextInteger();
875
s->startFxSpriteNum = t.getNextInteger();
876
s->updateType = t.getNextInteger();
878
s->flagNum = t.getNextInteger();
879
s->flagValueStartFx = t.getNextInteger();
880
s->stopFxSpriteState = t.getNextInteger();
881
s->stopFxSpriteNum = t.getNextInteger();
882
s->flagValueStopFx = t.getNextInteger();
890
t.findNextToken(kDataTokenDw);
891
int count = t.getNextInteger();
892
_locationMusicsCount = 0;
893
for (int i = 0; i < count; ++i) {
894
int flagNum = t.getNextInteger();
895
int flagValue = t.getNextInteger();
896
if (flagValue == _flagsTable[flagNum]) {
897
LocationMusic *m = &_locationMusicsTable[_locationMusicsCount++];
899
m->num = t.getNextInteger();
900
m->volume = t.getNextInteger();
901
m->flag = t.getNextInteger();
903
for (int j = 0; j < 3; ++j) {
855
if (t.findIndex(_locationNum)) {
856
t.findNextToken(kDataTokenDw);
857
_locationSoundsCount = t.getNextInteger();
859
for (int i = 0; i < _locationSoundsCount; ++i) {
860
LocationSound *s = &_locationSoundsTable[i];
862
s->_num = t.getNextInteger();
863
s->_volume = t.getNextInteger();
864
s->_type = t.getNextInteger();
869
_currentFxVolume = s->_volume;
870
_currentFxDist = t.getNextInteger();
871
_currentFxScale = t.getNextInteger();
876
s->_startFxSpriteState = t.getNextInteger();
877
s->_startFxSpriteNum = t.getNextInteger();
878
s->_updateType = t.getNextInteger();
880
s->_flagNum = t.getNextInteger();
881
s->_flagValueStartFx = t.getNextInteger();
882
s->_stopFxSpriteState = t.getNextInteger();
883
s->_stopFxSpriteNum = t.getNextInteger();
884
s->_flagValueStopFx = t.getNextInteger();
892
t.findNextToken(kDataTokenDw);
893
int count = t.getNextInteger();
894
_locationMusicsCount = 0;
895
for (int i = 0; i < count; ++i) {
896
int flagNum = t.getNextInteger();
897
int flagValue = t.getNextInteger();
898
if (flagValue == _flagsTable[flagNum]) {
899
LocationMusic *m = &_locationMusicsTable[_locationMusicsCount++];
901
m->_num = t.getNextInteger();
902
m->_volume = t.getNextInteger();
903
m->_flag = t.getNextInteger();
905
for (int j = 0; j < 3; ++j) {
911
error("loadFx() - Index not found for location %d", _locationNum);