annotate maps.pas @ 0:62966dd383ed default tip

initial
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 08 Dec 2013 19:39:15 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
1 { Map scrolling and display routines. }
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
2
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
3 {$Q+R+}
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
4
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
5 UNIT Maps;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
6
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
7 INTERFACE
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
8 USES Global;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
9
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
10 VAR xMapShift, yMapShift: INTEGER;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
11 PROCEDURE Refresh;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
12 PROCEDURE CenterMap(x,y:INTEGER);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
13 PROCEDURE ReLight(px,py: INTEGER);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
14 PROCEDURE ShowPlayer(x,y: INTEGER);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
15 PROCEDURE Demolish(m: pMap);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
16 FUNCTION FreeToMove(m: pMap): BOOLEAN;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
17
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
18 IMPLEMENTATION
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
19
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
20 USES Console, Items, Light;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
21
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
22 FUNCTION FreeToMove(m: pMap): BOOLEAN;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
23 BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
24 FreeToMove:=FALSE;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
25
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
26 IF m=NIL THEN Exit;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
27 IF m^.crt<>NIL THEN Exit;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
28 IF m^.ter^.mov>=100 THEN Exit;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
29
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
30 FreeToMove:=TRUE;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
31 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
32
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
33 PROCEDURE ShowMap(x,y:INTEGER);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
34 VAR a:BYTE;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
35 c:CHAR;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
36 m:pMap;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
37 BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
38 IF NOT InMap(x,y) THEN BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
39 PutChr(x-xMapShift,y-yMapShift,' ',$07);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
40 Exit;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
41 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
42 m:=GetMap(x,y);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
43
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
44 IF (x-xMapShift<0) OR (x-xMapShift>49) OR (y-yMapShift<0) OR (y-yMapShift>24) THEN Exit;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
45
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
46 a:=m^.ter^.atr;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
47 c:=m^.ter^.chr;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
48
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
49 IF (TILE_SMARTDOOR IN m^.ter^.flg) THEN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
50 IF (x=0) OR (x=MAPXSIZE) OR
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
51 (GetMap(x-1,y)^.ter^.mov>=100) OR
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
52 (GetMap(x+1,y)^.ter^.mov>=100) THEN c:='-';
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
53
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
54 IF (m^.ter^.vis<30) AND (y>0)AND
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
55 (GetMap(x,y-1)^.ter^.vis>=30) THEN BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
56 CASE a OF
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
57 15: a:=7;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
58 13: a:=14;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
59 8: a:=8;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
60 7: a:=8;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
61 ELSE a:=a AND $F7;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
62 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
63 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
64
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
65
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
66 IF NOT(MAP_EXPLORED IN m^.flg) THEN c:=' ';
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
67
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
68 IF NOT(MAP_VISIBLE IN m^.flg) THEN a:=shadecolor ELSE BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
69 IF (m^.slt<>NIL)
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
70 {AND (TILE_ITEM IN m^.ter^.flg)}
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
71 THEN GetItemLooks(a,c,@(m^.slt));
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
72 IF (m^.crt<>NIL) THEN BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
73 a:=m^.crt^.def^.atr;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
74 c:=m^.crt^.def^.chr;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
75 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
76 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
77
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
78
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
79 PutChr(x-xMapShift,y-yMapShift,c,a);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
80 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
81
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
82 PROCEDURE Demolish(m: pMap);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
83 BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
84 IF m^.ter^.dst=0 THEN Exit;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
85 IF (m^.ter^.drp>0) AND (m^.slt=NIL) THEN BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
86 m^.slt:=GenerateItem(m^.ter^.drp);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
87 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
88 m^.ter:=FindTile(m^.ter^.dst);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
89 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
90
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
91 PROCEDURE Refresh;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
92 VAR x,y: INTEGER;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
93 BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
94 FOR y:=0 TO 24 DO
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
95 FOR x:=0 TO 49 DO ShowMap(x+xMapShift,y+yMapShift);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
96 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
97
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
98 PROCEDURE CenterMap(x,y:INTEGER);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
99 BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
100 xMapShift:=x-25;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
101 yMapShift:=y-12;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
102 Refresh;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
103 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
104
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
105 PROCEDURE ShowPlayer(x,y: INTEGER);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
106 BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
107 IF NOT InMap(x,y) THEN Exit;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
108 IF (x-xMapShift<MARGIN) OR (x-xMapShift>49-MARGIN) OR (y-yMapShift<MARGIN) OR (y-yMapShift>24-MARGIN) THEN CenterMap(x,y);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
109 Cursor(x-xMapShift,y-yMapShift);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
110 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
111
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
112 PROCEDURE ReLight(px,py: INTEGER);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
113 BEGIN
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
114 ApplyFov(px,py);
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
115 Refresh;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
116 END;
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
117
62966dd383ed initial
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
118 END.