1
0
Fork 0
vt100-games/LadderTP/LADFIELD.PAS

76 lines
2.2 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ LoadMap loads one of the playfields/maps into memory and also }
{ returns the coordinates of the initial Lad, and an array of }
{ coordinates where the dispensers are. }
PROCEDURE LoadMap(VAR lad : XYtype; VAR dispensers : DispenserPointerType; VAR numDispensers : INTEGER);
VAR
x, y : INTEGER;
newDispenser : DispenserPointerType;
dispenserPtr : DispenserPointerType;
rock1Ptr,rock2Ptr : RockPointerType;
BEGIN
{ get rid of anay previous rock dispensers }
WHILE dispensers <> NIL DO BEGIN
dispenserPtr := dispensers^.next;
DISPOSE(dispensers);
dispensers := dispenserPtr;
END;
IF m.Level > NumLevels THEN BEGIN
ClrScr;
WriteLN('Level ', m.Level, ' out of range');
CursOn;
Halt;
END;
WITH levels[m.Level] DO BEGIN
m.Name := Name;
m.InitialBonusTime := InitialBonusTime;
m.NumRocks := rocks;
{ dispose of any previous rocks }
WHILE m.Rocks <> NIL DO BEGIN
rock1Ptr := m.Rocks^.Next;
Dispose(m.Rocks);
m.Rocks := rock1Ptr;
END;
{ allocate new rocks }
FOR x := 1 TO Rocks DO BEGIN
rock1Ptr := m.Rocks;
New(rock2Ptr);
m.Rocks := rock2Ptr;
m.Rocks^.Next := rock1Ptr;
END;
m.AnyRocksPending := TRUE;
END;
{ Prepare the field to be loaded with a new level }
FOR y := 1 TO LevelRows DO
FOR x := 1 TO LevelCols DO
m.Field[y][x] := ' ';
dispensers := NIL;
numDispensers := 0;
FOR y := 1 TO LevelRows DO
FOR x := 1 TO LevelCols DO
CASE levels[m.Level].layout[y][x] OF
'p':
BEGIN
{ The lad will be put there by the rendered, so no need to have }
{ it on the map }
lad.x := x;
lad.y := y;
END;
'V':
BEGIN
m.Field[y][x] := 'V';
NEW(newDispenser);
newDispenser^.xy.x := x;
newDispenser^.xy.y := y;
newDispenser^.next := dispensers;
dispensers := newDispenser;
numDispensers := Succ(numDispensers);
END;
'.': { TODO - handle the rubber balls }
m.Field[y][x] := '.'
ELSE
m.Field[y][x] := levels[m.Level].layout[y][x];
END;
END;