Skip to content

Commit 8457797

Browse files
committed
Add levelIndex to lookup FileIndex & FileLavelIndex from LavelNumber
1 parent df9e0ea commit 8457797

File tree

3 files changed

+62
-10
lines changed

3 files changed

+62
-10
lines changed

game.js

+10-6
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function createGame(gameCavas, onGameLoaded)
112112
//--------
113113

114114
game.levelIndexProvider = new LevelIndexProvider(game);
115-
game.levelIndexProvider.load();
115+
//game.levelIndexProvider.load();
116116

117117

118118
game.levelIndex = 0;
@@ -125,12 +125,16 @@ function createGame(gameCavas, onGameLoaded)
125125
{
126126
var levelInfo = game.codeGenerator.reverseCode(hash);
127127

128-
128+
game.levelIndex = levelInfo.levelIndex;
129+
game.version = levelInfo.lemmingsVersion;
129130
}
130131
else
131132
{
132-
game.levelId = Number.parseInt(hash);
133-
if (isNaN(game.levelId)) game.levelId=0;
133+
var levelPos = Number.parseInt(hash);
134+
if (!isNaN(levelPos))
135+
{
136+
game.levelIndex = levelPos;
137+
}
134138
}
135139

136140
game.fileLoader = new FileLoader();
@@ -145,7 +149,7 @@ function createGame(gameCavas, onGameLoaded)
145149

146150

147151
game.levelHandler = new LevelHandler(game);
148-
game.levelHandler.load(onLevelLoaded, game.levelId);
152+
game.levelHandler.load(onLevelLoaded, game.levelIndex);
149153

150154
game.eventHandler = new EventHandler(game);
151155

@@ -156,7 +160,7 @@ function createGame(gameCavas, onGameLoaded)
156160
game.levelDrawer.load(onLevelDrawn);
157161
game.viewX = game.levelHandler.screenPositionX;
158162

159-
for (var i=0; i<10; i++)
163+
for (var i = 0; i < 10; i++)
160164
{
161165
game.skills[i] = game.levelHandler.skills[i];
162166
}

levelHandler.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,17 @@ function LevelHandler(gameObject)
5757
/// Load a Level
5858
this.load = function(onLoadDoneCallback, levelId)
5959
{
60+
var levelPos = self.game.levelIndexProvider.LevelFileFromLevelIndex(levelId);
61+
6062
self.dfr = new DatFileReader(self.game);
61-
self.dfr.read("lemmings/LEVEL00"+ Math.floor(levelId / 100) +".DAT", onLevelLoadDone);
63+
self.dfr.read("lemmings/LEVEL00"+ levelPos.fileId +".DAT", onLevelLoadDone);
6264

6365

6466
function onLevelLoadDone()
6567
{
6668
console.log("Levels in file: "+ self.dfr.getPartCount());
6769

68-
var fr = self.dfr.getPart(levelId % 100);
70+
var fr = self.dfr.getPart(levelPos.fileLevelIndex);
6971

7072
fr.setOffset(0);
7173

levelIndexProvider.js

+48-2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ function LevelIndexProvider(gameObject)
4444
});
4545
}
4646

47+
this.levelSection = ['fun', 'tricky', 'taxing', 'mayhem'];
4748

4849
this.levelIndex = new Array(4);
4950

@@ -59,11 +60,56 @@ function LevelIndexProvider(gameObject)
5960
57, 59, 61, 63, 3, 65, 67, 69, 71, 73,
6061
75, 77, 79, 81, 83, 85, 87, 89, 35, 111];
6162

62-
this.levelIndex[2] = [ 91, 93, 95, 97, 99, 101, 103, 105, 107, 109,
63+
this.levelIndex[3] = [ 91, 93, 95, 97, 99, 101, 103, 105, 107, 109,
6364
112, 113, 115, 117, 119, 121, 123, 125, 127, 150,
6465
129, 9, 131, 133, 135, 137, 139, 141, 143, 145 ];
6566

66-
this.CodeBase = "AJHLDHBBCJ";
6767

68+
//- class LevelFile
69+
function LevelFile()
70+
{
71+
this.fileId = 0; //- name of "LEVEL__.DAT" file
72+
this.fileLevelIndex = 0; //- level in "LEVEL__.DAT" file
73+
this.levelIndex = 0; //- the levelindex (0 : "Just Dig", 1: "Only floaters can survive", 2 ...)
74+
this.levelSectionIndex = 0; //- Value from [this.levelSection]
75+
this.version = self.game.VERSION.LEMMINGS;
76+
77+
this.useOddTable = false;
78+
this.oddIndex = -1;
79+
}
80+
81+
82+
this.LevelFileFromLevelIndex = function(levelIndex, gameVersion)
83+
{
84+
var ret = new LevelFile();
85+
86+
var l = self.levelIndex.length;
87+
88+
//- read index [levelIndex] from this.levelIndex -> read/indexed over all subarrays
89+
var levelPos = -1;
90+
var offset = 0;
91+
for (var i=0; i<l; i++)
92+
{
93+
var sectIndex = levelIndex - offset;
94+
if ((sectIndex >= 0) && (sectIndex < self.levelIndex[i].length))
95+
{
96+
levelPos = self.levelIndex[i][sectIndex];
97+
break;
98+
}
99+
offset += self.levelIndex[i].length;
100+
}
101+
102+
//- need to decrement
103+
levelPos--;
104+
if (levelPos < 0) return null;
105+
106+
ret.useOddTable = ((levelPos & 0x01) > 0);
107+
ret.fileId = (levelPos >>> 4);
108+
ret.fileLevelIndex = (levelPos >>> 1) & 0x07;
109+
ret.levelIndex = levelIndex;
110+
ret.oddIndex = (levelPos -1); // ????
111+
112+
return ret;
113+
}
68114

69115
}

0 commit comments

Comments
 (0)