Line 0
Link Here
|
|
|
1 |
--- runlevels.c.orig |
2 |
+++ runlevels.c |
3 |
@@ -672,6 +672,20 @@ |
4 |
} |
5 |
} /* DiggerHalfStep() */ |
6 |
|
7 |
+typedef struct |
8 |
+{ |
9 |
+ unsigned char x, y, id, type; |
10 |
+} TMerk; |
11 |
+ |
12 |
+void Merke(unsigned char type, int x, int y, int *merkidx, TMerk *merk) |
13 |
+{ |
14 |
+ merk[*merkidx].x = x; |
15 |
+ merk[*merkidx].y = y; |
16 |
+ merk[*merkidx].id = field[x][y].id & 7; |
17 |
+ merk[*merkidx].type = type; |
18 |
+ *merkidx++; |
19 |
+} |
20 |
+ |
21 |
void StoneDiamondStep() |
22 |
{ |
23 |
|
24 |
@@ -680,24 +694,10 @@ |
25 |
#define SF_LEFTDOWN 2 |
26 |
#define SF_CHANGER 3 |
27 |
|
28 |
- typedef struct |
29 |
- { |
30 |
- unsigned char x, y, id, type; |
31 |
- } TMerk; |
32 |
- |
33 |
TMerk merk[140], ghosts_todie[17]; |
34 |
int i, x, y, dx, dy, merkidx, ghosts_todie_idx; |
35 |
Bool digger_todie = False; |
36 |
- |
37 |
- void Merke(unsigned char type) |
38 |
- { |
39 |
- merk[merkidx].x = x; |
40 |
- merk[merkidx].y = y; |
41 |
- merk[merkidx].id = field[x][y].id & 7; |
42 |
- merk[merkidx].type = type; |
43 |
- merkidx++; |
44 |
- } |
45 |
- |
46 |
+ |
47 |
/* Schritt 1 (nur markieren) : */ |
48 |
merkidx = 0; ghosts_todie_idx = 0; |
49 |
|
50 |
@@ -708,19 +708,19 @@ |
51 |
(field[x][y].id == ID_IVDIAMOND)) |
52 |
{ |
53 |
if (field[x][y+1].id == ID_NOTHING) |
54 |
- Merke(SF_DOWN); |
55 |
+ Merke(SF_DOWN, x, y, &merkidx, merk); |
56 |
else |
57 |
if ((field[x][y+1].id == ID_STONE) || |
58 |
(field[x][y+1].id == ID_DIAMOND)) |
59 |
{ |
60 |
if ((field[x-1][y].id == ID_NOTHING) && |
61 |
(field[x-1][y+1].id == ID_NOTHING)) |
62 |
- Merke(SF_LEFTDOWN); |
63 |
+ Merke(SF_LEFTDOWN, x, y, &merkidx, merk); |
64 |
else |
65 |
if ((field[x+1][y].id == ID_NOTHING) && |
66 |
(field[x+1][y+1].id == ID_NOTHING)) |
67 |
{ |
68 |
- Merke(SF_RIGHTDOWN); |
69 |
+ Merke(SF_RIGHTDOWN, x, y, &merkidx, &merk); |
70 |
field[x+1][y+1].id = ID_FSTODMD; |
71 |
} |
72 |
} |
73 |
@@ -729,7 +729,7 @@ |
74 |
(field[x][y].id == ID_IVSTONE)) && |
75 |
(field[x][y+1].id == ID_CHANGER) && |
76 |
(field[x][y+2].id == ID_NOTHING)) |
77 |
- Merke(SF_CHANGER); |
78 |
+ Merke(SF_CHANGER, x, y, &merkidx, &merk); |
79 |
} |
80 |
merk[merkidx].x = 0; |
81 |
merk[merkidx].y = 0; |
82 |
@@ -1573,6 +1573,50 @@ |
83 |
|
84 |
/*---------------------------------------------------------------------------*/ |
85 |
|
86 |
+void Save_Ghost(int flags, int *id, int *d, unsigned char *file_daten) |
87 |
+{ |
88 |
+ switch (flags & F_GHOST_TYPEMASK) |
89 |
+ { |
90 |
+ case F_GHOST_TYPE180: |
91 |
+ *id = 3; |
92 |
+ break; |
93 |
+ case F_GHOST_TYPEL: |
94 |
+ *id = 7; |
95 |
+ break; |
96 |
+ case F_GHOST_TYPER: |
97 |
+ *id = 15; |
98 |
+ break; |
99 |
+ case F_GHOST_TYPELR: |
100 |
+ *id = 11; |
101 |
+ break; |
102 |
+ } |
103 |
+ switch (flags & F_GHOST_MOVEMASK) |
104 |
+ { |
105 |
+ case F_GHOST_DOWN: |
106 |
+ *d = 0; |
107 |
+ break; |
108 |
+ case F_GHOST_UP: |
109 |
+ *d = 1; |
110 |
+ break; |
111 |
+ case F_GHOST_RIGHT: |
112 |
+ *d = 2; |
113 |
+ break; |
114 |
+ case F_GHOST_LEFT: |
115 |
+ *d = 3; |
116 |
+ break; |
117 |
+ } |
118 |
+ if (number_ghosts < MAX_GHOSTS) |
119 |
+ { |
120 |
+ if (number_ghosts & 1) |
121 |
+ file_daten[0x94 + number_ghosts/2] = |
122 |
+ (file_daten[0x94 + number_ghosts/2] & 0xf0) | (*d); |
123 |
+ else |
124 |
+ file_daten[0x94 + number_ghosts/2] = |
125 |
+ (file_daten[0x94 + number_ghosts/2] & 0x0f) | (*d << 4); |
126 |
+ number_ghosts++; |
127 |
+ } |
128 |
+} |
129 |
+ |
130 |
void Edit_SaveLevel(int level_number) |
131 |
{ |
132 |
/* char filename[256]; */ |
133 |
@@ -1580,50 +1624,6 @@ |
134 |
int x, y, id, flags, i, d; |
135 |
FILE *filehandle; |
136 |
|
137 |
- void Save_Ghost() |
138 |
- { |
139 |
- switch (flags & F_GHOST_TYPEMASK) |
140 |
- { |
141 |
- case F_GHOST_TYPE180: |
142 |
- id = 3; |
143 |
- break; |
144 |
- case F_GHOST_TYPEL: |
145 |
- id = 7; |
146 |
- break; |
147 |
- case F_GHOST_TYPER: |
148 |
- id = 15; |
149 |
- break; |
150 |
- case F_GHOST_TYPELR: |
151 |
- id = 11; |
152 |
- break; |
153 |
- } |
154 |
- switch (flags & F_GHOST_MOVEMASK) |
155 |
- { |
156 |
- case F_GHOST_DOWN: |
157 |
- d = 0; |
158 |
- break; |
159 |
- case F_GHOST_UP: |
160 |
- d = 1; |
161 |
- break; |
162 |
- case F_GHOST_RIGHT: |
163 |
- d = 2; |
164 |
- break; |
165 |
- case F_GHOST_LEFT: |
166 |
- d = 3; |
167 |
- break; |
168 |
- } |
169 |
- if (number_ghosts < MAX_GHOSTS) |
170 |
- { |
171 |
- if (number_ghosts & 1) |
172 |
- file_daten[0x94 + number_ghosts/2] = |
173 |
- (file_daten[0x94 + number_ghosts/2] & 0xf0) | (d); |
174 |
- else |
175 |
- file_daten[0x94 + number_ghosts/2] = |
176 |
- (file_daten[0x94 + number_ghosts/2] & 0x0f) | (d << 4); |
177 |
- number_ghosts++; |
178 |
- } |
179 |
- } |
180 |
- |
181 |
bzero(file_daten, sizeof(file_daten)); |
182 |
number_ghosts = 0; |
183 |
c = file_daten; |
184 |
@@ -1637,7 +1637,7 @@ |
185 |
diggerposy = y; |
186 |
} |
187 |
if (id == ID_GHOST) |
188 |
- Save_Ghost(); |
189 |
+ Save_Ghost(flags, &id, &d, file_daten); |
190 |
*c = (*c & 0x0f) | (id << 4); |
191 |
|
192 |
/* ------------------------------------------------------------------ */ |
193 |
@@ -1650,7 +1650,7 @@ |
194 |
diggerposy = y; |
195 |
} |
196 |
if (id == ID_GHOST) |
197 |
- Save_Ghost(); |
198 |
+ Save_Ghost(flags, &id, &d, file_daten); |
199 |
*c = (*c & 0xf0) | id; |
200 |
} |
201 |
c += 3; |