Changelog
Revision 1126
Author glx
Date 18/05/2010 22:49:10
Message -Add: C-ified Script_LoadFromFile() (and another file is gone)
Changed files: (view/hide)
/trunk/decompiled/cs__15C2.c
 
1   /* $Id$ */
2  
3   #include "types.h"
4   #include "libemu.h"
5   #include "decompiled.h"
6  
7   /**
8   * Decompiled function emu_Script_LoadFromFile()
9   *
10   * @name emu_Script_LoadFromFile
11   * @implements 15C2:00AC:0015:2FBF ()
12   * @implements 15C2:00BC:0005:9D87
13   * @implements 15C2:00BE:0003:9C13
14   * @implements 15C2:00C1:000A:D449
15   * @implements 15C2:00CB:000A:E8D9
16   * @implements 15C2:00D5:001E:CD33
17   * @implements 15C2:00F3:0024:0D45
18   * @implements 15C2:00F5:0022:2546
19   * @implements 15C2:0117:0009:B6AB
20   * @implements 15C2:0120:000B:4489
21   * @implements 15C2:012B:0012:38D0
22   * @implements 15C2:013D:0049:3C82
23   * @implements 15C2:0186:000F:92A6
24   * @implements 15C2:0195:002B:0050
25   * @implements 15C2:01A2:001E:BBAE
26   * @implements 15C2:01C0:0011:8F23
27   * @implements 15C2:01C3:000E:D267
28   * @implements 15C2:01D1:0020:DCD5
29   * @implements 15C2:01F1:002D:3393
30   * @implements 15C2:021E:000F:92A6
31   * @implements 15C2:022D:003E:C2E2
32   * @implements 15C2:023B:0030:B965
33   * @implements 15C2:026B:0007:ED2C
34   * @implements 15C2:0272:0015:F826
35   * @implements 15C2:0287:002E:175A
36   * @implements 15C2:0299:001C:84E5
37   * @implements 15C2:02B5:0020:DC54
38   * @implements 15C2:02D5:002D:33F5
39   * @implements 15C2:0302:000F:92A6
40   * @implements 15C2:0311:002D:06F2
41   * @implements 15C2:031F:001F:C809
42   * @implements 15C2:033E:0016:43F5
43   * @implements 15C2:0354:000A:297F
44   * @implements 15C2:035E:000E:EEEB
45   * @implements 15C2:036A:0002:CB3A
46   * @implements 15C2:036C:000A:2971
47   * @implements 15C2:0376:0012:54A3
48   * @implements 15C2:0382:0006:46FE
49   * @implements 15C2:0388:0007:0D24
50   * @implements 15C2:0389:0006:0D96
51   * @implements 15C2:038F:0006:F7CE
52   *
53   * Called From: B4B8:22C7:001F:5CD7
54   */
55   void emu_Script_LoadFromFile()
56   {
57   l__00AC:
58   emu_push(emu_bp);
59   emu_bp = emu_sp;
60   emu_subw(&emu_sp, 0x8);
61   emu_push(emu_si);
62   emu_push(emu_di);
63   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0xA);
64   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, 0xC));
65   if (emu_ax != 0) goto l__00C1;
66   l__00BC:
67   emu_xorw(&emu_ax, emu_ax);
68   l__00BE:
69   goto l__038F;
70   l__00C1:
71   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x6);
72   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, 0x8));
73   if (emu_ax != 0) goto l__00CB;
74   goto l__00BC;
75   l__00CB:
76   emu_push(emu_get_memory16(emu_ss, emu_bp, 0xC));
77   emu_push(emu_get_memory16(emu_ss, emu_bp, 0xA));
78   emu_push(emu_cs);
79   emu_push(0x00D5); emu_Script_ClearInfo();
80   l__00D5:
81   emu_pop(&emu_cx);
82   emu_pop(&emu_cx);
83   emu_get_memory16(emu_ss, emu_bp, -0x6) = 0x0;
84   emu_get_memory16(emu_ss, emu_bp, -0x8) = 0x0;
85   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
86   emu_push(emu_es);
87   emu_push(emu_bx);
88   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x12);
89   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, 0x14));
90   if (emu_ax != 0) goto l__00F3;
91   emu_ax = 0x1;
92   goto l__00F5;
93   l__00F3:
94   emu_xorw(&emu_ax, emu_ax);
95   l__00F5:
96   emu_pop(&emu_bx);
97   emu_pop(&emu_es);
98   emu_get_memory16(emu_es, emu_bx, 0x14) = emu_ax;
99   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
100   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x10);
101   emu_dx = emu_get_memory16(emu_ss, emu_bp, 0xE);
102   emu_get_memory16(emu_es, emu_bx, 0x12) = emu_ax;
103   emu_get_memory16(emu_es, emu_bx, 0x10) = emu_dx;
104   emu_push(emu_get_memory16(emu_ss, emu_bp, 0x8));
105   emu_push(emu_get_memory16(emu_ss, emu_bp, 0x6));
106   emu_push(emu_cs); emu_push(0x0117); emu_cs = 0x1FB5; emu_File_Exists();
107   l__0117:
108   emu_pop(&emu_cx);
109   emu_pop(&emu_cx);
110   emu_orw(&emu_ax, emu_ax);
111   if (emu_ax != 0) goto l__0120;
112   goto l__0389;
113   l__0120:
114   emu_push(emu_get_memory16(emu_ss, emu_bp, 0x8));
115   emu_push(emu_get_memory16(emu_ss, emu_bp, 0x6));
116   emu_push(emu_cs); emu_push(0x012B); emu_cs = 0x34B1; overlay(0x34B1, 0); emu_ChunkFile_Open();
117   l__012B:
118   emu_pop(&emu_cx);
119   emu_pop(&emu_cx);
120   emu_si = emu_ax;
121   emu_ax = 0x5458;
122   emu_dx = 0x4554;
123   emu_push(emu_ax);
124   emu_push(emu_dx);
125   emu_push(emu_si);
126   emu_push(emu_cs); emu_push(0x013D); emu_cs = 0x34B1; overlay(0x34B1, 0); emu_ChunkFile_Seek();
127   l__013D:
128   emu_addw(&emu_sp, 0x6);
129   emu_get_memory16(emu_ss, emu_bp, -0x2) = emu_dx;
130   emu_get_memory16(emu_ss, emu_bp, -0x4) = emu_ax;
131   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x2);
132   emu_dx = emu_get_memory16(emu_ss, emu_bp, -0x4);
133   emu_addw(&emu_get_memory16(emu_ss, emu_bp, -0x8), emu_dx);
134   emu_adcw(&emu_get_memory16(emu_ss, emu_bp, -0x6), emu_ax);
135   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x4);
136   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, -0x2));
137   if (emu_ax == 0) goto l__01C3;
138   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x12);
139   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, 0x14));
140   if (emu_ax == 0) goto l__0186;
141   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
142   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x14);
143   emu_dx = emu_get_memory16(emu_ss, emu_bp, 0x12);
144   emu_get_memory16(emu_es, emu_bx, 0x2) = emu_ax;
145   emu_get_memory16(emu_es, emu_bx, 0x0) = emu_dx;
146   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x14);
147   emu_dx = emu_get_memory16(emu_ss, emu_bp, 0x12);
148   emu_addw(&emu_dx, emu_get_memory16(emu_ss, emu_bp, -0x4));
149   emu_adcw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, -0x2));
150   emu_get_memory16(emu_ss, emu_bp, 0x14) = emu_ax;
151   emu_get_memory16(emu_ss, emu_bp, 0x12) = emu_dx;
152   goto l__01A2;
153   l__0186:
154   emu_ax = 0x30;
155   emu_push(emu_ax);
156   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x2));
157   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x4));
158   emu_push(emu_cs); emu_push(0x0195); emu_cs = 0x23E1; f__23E1_0004_0014_2BC0();
159   l__0195:
160   emu_addw(&emu_sp, 0x6);
161   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
162   emu_get_memory16(emu_es, emu_bx, 0x2) = emu_dx;
163   emu_get_memory16(emu_es, emu_bx, 0x0) = emu_ax;
164   l__01A2:
165   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x2));
166   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x4));
167   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
168   emu_push(emu_get_memory16(emu_es, emu_bx, 0x2));
169   emu_push(emu_get_memory16(emu_es, emu_bx, 0x0));
170   emu_ax = 0x5458;
171   emu_dx = 0x4554;
172   emu_push(emu_ax);
173   emu_push(emu_dx);
174   emu_push(emu_si);
175   emu_push(emu_cs); emu_push(0x01C0); emu_cs = 0x34B1; overlay(0x34B1, 0); emu_ChunkFile_Read();
176   l__01C0:
177   emu_addw(&emu_sp, 0xE);
178   l__01C3:
179   emu_ax = 0x5244;
180   emu_dx = 0x524F;
181   emu_push(emu_ax);
182   emu_push(emu_dx);
183   emu_push(emu_si);
184   emu_push(emu_cs); emu_push(0x01D1); emu_cs = 0x34B1; overlay(0x34B1, 0); emu_ChunkFile_Seek();
185   l__01D1:
186   emu_addw(&emu_sp, 0x6);
187   emu_get_memory16(emu_ss, emu_bp, -0x2) = emu_dx;
188   emu_get_memory16(emu_ss, emu_bp, -0x4) = emu_ax;
189   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x2);
190   emu_dx = emu_get_memory16(emu_ss, emu_bp, -0x4);
191   emu_addw(&emu_get_memory16(emu_ss, emu_bp, -0x8), emu_dx);
192   emu_adcw(&emu_get_memory16(emu_ss, emu_bp, -0x6), emu_ax);
193   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x4);
194   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, -0x2));
195   if (emu_ax != 0) goto l__01F1;
196   goto l__036C;
197   l__01F1:
198   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x12);
199   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, 0x14));
200   if (emu_ax == 0) goto l__021E;
201   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
202   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x14);
203   emu_dx = emu_get_memory16(emu_ss, emu_bp, 0x12);
204   emu_get_memory16(emu_es, emu_bx, 0xA) = emu_ax;
205   emu_get_memory16(emu_es, emu_bx, 0x8) = emu_dx;
206   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x14);
207   emu_dx = emu_get_memory16(emu_ss, emu_bp, 0x12);
208   emu_addw(&emu_dx, emu_get_memory16(emu_ss, emu_bp, -0x4));
209   emu_adcw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, -0x2));
210   emu_get_memory16(emu_ss, emu_bp, 0x14) = emu_ax;
211   emu_get_memory16(emu_ss, emu_bp, 0x12) = emu_dx;
212   goto l__023B;
213   l__021E:
214   emu_ax = 0x30;
215   emu_push(emu_ax);
216   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x2));
217   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x4));
218   emu_push(emu_cs); emu_push(0x022D); emu_cs = 0x23E1; f__23E1_0004_0014_2BC0();
219   l__022D:
220   emu_addw(&emu_sp, 0x6);
221   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
222   emu_get_memory16(emu_es, emu_bx, 0xA) = emu_dx;
223   emu_get_memory16(emu_es, emu_bx, 0x8) = emu_ax;
224   l__023B:
225   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x2);
226   emu_dx = emu_get_memory16(emu_ss, emu_bp, -0x4);
227   emu_shrw(&emu_ax, 0x1);
228   emu_rcrw(&emu_dx, 0x1);
229   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
230   emu_get_memory16(emu_es, emu_bx, 0xC) = emu_dx;
231   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x2));
232   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x4));
233   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
234   emu_push(emu_get_memory16(emu_es, emu_bx, 0xA));
235   emu_push(emu_get_memory16(emu_es, emu_bx, 0x8));
236   emu_ax = 0x5244;
237   emu_dx = 0x524F;
238   emu_push(emu_ax);
239   emu_push(emu_dx);
240   emu_push(emu_si);
241   emu_push(emu_cs); emu_push(0x026B); emu_cs = 0x34B1; overlay(0x34B1, 0); emu_ChunkFile_Read();
242   l__026B:
243   emu_addw(&emu_sp, 0xE);
244   emu_xorw(&emu_di, emu_di);
245   goto l__0299;
246   l__0272:
247   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
248   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_es, emu_bx, 0x8));
249   emu_ax = emu_di;
250   emu_shlw(&emu_ax, 0x1);
251   emu_addw(&emu_bx, emu_ax);
252   emu_push(emu_get_memory16(emu_es, emu_bx, 0x0));
253   emu_push(emu_cs); emu_push(0x0287); emu_cs = 0x2BC0; emu_Tools_Swapw();
254   l__0287:
255   emu_pop(&emu_cx);
256   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
257   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_es, emu_bx, 0x8));
258   emu_dx = emu_di;
259   emu_shlw(&emu_dx, 0x1);
260   emu_addw(&emu_bx, emu_dx);
261   emu_get_memory16(emu_es, emu_bx, 0x0) = emu_ax;
262   emu_incw(&emu_di);
263   l__0299:
264   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x2);
265   emu_dx = emu_get_memory16(emu_ss, emu_bp, -0x4);
266   emu_shrw(&emu_ax, 0x1);
267   emu_rcrw(&emu_dx, 0x1);
268   emu_cmpw(&emu_dx, emu_di);
269   if ((int16)emu_dx > (int16)emu_di) goto l__0272;
270   emu_ax = 0x4154;
271   emu_dx = 0x4144;
272   emu_push(emu_ax);
273   emu_push(emu_dx);
274   emu_push(emu_si);
275   emu_push(emu_cs); emu_push(0x02B5); emu_cs = 0x34B1; overlay(0x34B1, 0); emu_ChunkFile_Seek();
276   l__02B5:
277   emu_addw(&emu_sp, 0x6);
278   emu_get_memory16(emu_ss, emu_bp, -0x2) = emu_dx;
279   emu_get_memory16(emu_ss, emu_bp, -0x4) = emu_ax;
280   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x2);
281   emu_dx = emu_get_memory16(emu_ss, emu_bp, -0x4);
282   emu_addw(&emu_get_memory16(emu_ss, emu_bp, -0x8), emu_dx);
283   emu_adcw(&emu_get_memory16(emu_ss, emu_bp, -0x6), emu_ax);
284   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x4);
285   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, -0x2));
286   if (emu_ax != 0) goto l__02D5;
287   goto l__0354;
288   l__02D5:
289   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x12);
290   emu_orw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, 0x14));
291   if (emu_ax == 0) goto l__0302;
292   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
293   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x14);
294   emu_dx = emu_get_memory16(emu_ss, emu_bp, 0x12);
295   emu_get_memory16(emu_es, emu_bx, 0x6) = emu_ax;
296   emu_get_memory16(emu_es, emu_bx, 0x4) = emu_dx;
297   emu_ax = emu_get_memory16(emu_ss, emu_bp, 0x14);
298   emu_dx = emu_get_memory16(emu_ss, emu_bp, 0x12);
299   emu_addw(&emu_dx, emu_get_memory16(emu_ss, emu_bp, -0x4));
300   emu_adcw(&emu_ax, emu_get_memory16(emu_ss, emu_bp, -0x2));
301   emu_get_memory16(emu_ss, emu_bp, 0x14) = emu_ax;
302   emu_get_memory16(emu_ss, emu_bp, 0x12) = emu_dx;
303   goto l__031F;
304   l__0302:
305   emu_ax = 0x30;
306   emu_push(emu_ax);
307   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x2));
308   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x4));
309   emu_push(emu_cs); emu_push(0x0311); emu_cs = 0x23E1; f__23E1_0004_0014_2BC0();
310   l__0311:
311   emu_addw(&emu_sp, 0x6);
312   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
313   emu_get_memory16(emu_es, emu_bx, 0x6) = emu_dx;
314   emu_get_memory16(emu_es, emu_bx, 0x4) = emu_ax;
315   l__031F:
316   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x2));
317   emu_push(emu_get_memory16(emu_ss, emu_bp, -0x4));
318   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
319   emu_push(emu_get_memory16(emu_es, emu_bx, 0x6));
320   emu_push(emu_get_memory16(emu_es, emu_bx, 0x4));
321   emu_ax = 0x4154;
322   emu_dx = 0x4144;
323   emu_push(emu_ax);
324   emu_push(emu_dx);
325   emu_push(emu_si);
326   emu_push(emu_cs); emu_push(0x033E); emu_cs = 0x34B1; overlay(0x34B1, 0); emu_ChunkFile_Read();
327   l__033E:
328   emu_addw(&emu_sp, 0xE);
329   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x2);
330   emu_dx = emu_get_memory16(emu_ss, emu_bp, -0x4);
331   emu_shrw(&emu_ax, 0x1);
332   emu_rcrw(&emu_dx, 0x1);
333   emu_lfp(&emu_es, &emu_bx, &emu_get_memory16(emu_ss, emu_bp, 0xA));
334   emu_get_memory16(emu_es, emu_bx, 0xE) = emu_dx;
335   goto l__036A;
336   l__0354:
337   emu_push(emu_get_memory16(emu_ss, emu_bp, 0xC));
338   emu_push(emu_get_memory16(emu_ss, emu_bp, 0xA));
339   emu_push(emu_cs);
340   emu_push(0x035E); emu_Script_ClearInfo();
341   l__035E:
342   emu_pop(&emu_cx);
343   emu_pop(&emu_cx);
344   emu_get_memory16(emu_ss, emu_bp, -0x6) = 0x0;
345   emu_get_memory16(emu_ss, emu_bp, -0x8) = 0x0;
346   l__036A:
347   goto l__0382;
348   l__036C:
349   emu_push(emu_get_memory16(emu_ss, emu_bp, 0xC));
350   emu_push(emu_get_memory16(emu_ss, emu_bp, 0xA));
351   emu_push(emu_cs);
352   emu_push(0x0376); emu_Script_ClearInfo();
353   l__0376:
354   emu_pop(&emu_cx);
355   emu_pop(&emu_cx);
356   emu_get_memory16(emu_ss, emu_bp, -0x6) = 0x0;
357   emu_get_memory16(emu_ss, emu_bp, -0x8) = 0x0;
358   l__0382:
359   emu_push(emu_si);
360   emu_push(emu_cs); emu_push(0x0388); emu_cs = 0x34B1; overlay(0x34B1, 0); emu_ChunkFile_Close();
361   l__0388:
362   emu_pop(&emu_cx);
363   l__0389:
364   emu_ax = emu_get_memory16(emu_ss, emu_bp, -0x8);
365   goto l__00BE;
366   l__038F:
367   emu_pop(&emu_di);
368   emu_pop(&emu_si);
369   emu_sp = emu_bp;
370   emu_pop(&emu_bp);
371  
372   /* Return from this function */
373   emu_pop(&emu_ip);
374   emu_pop(&emu_cs);
375   return;
376   }
 
/trunk/decompiled/decompiled.h
 
155 155 extern void emu_GUI_Options();
156 156 extern void f__2BA5_00A2_0052_DEE3();
157 157 extern void f__B4CD_00A5_0016_24FA();
158   extern void emu_Script_LoadFromFile();
159 158 extern void f__2B1E_00B0_002A_9AED();
160 159 extern void f__259E_00B1_001C_4051();
161 160 extern void f__2AE1_00B7_0014_51EF();
 
/trunk/src/function_names.txt
 
107 107 1423:07C5:0016:E9C2 emu_Unit_LaunchHouseMissle # (position), launch the house missle
108 108 1423:0C74:0015:3419 emu_Structure_AI_PickNextToBuild # (structure_csip), pick the next unit/structure to build
109 109
110   15C2:00AC:0015:2FBF emu_Script_LoadFromFile # (filename_csip, info_csip, functions_csip, text_csip)
111  
112 110 167E:02D8:000C:4C9F emu_Tools_Index_GetStructureOrUnit # (encoded), gets the structure or unit corresponding to the given encoded index
113 111
114 112 1A34:3491:0032:AFF8 emu_Structure_GetLinkedUnit # (structure_csip)
 
/trunk/src/script/script.c
 
7 7 #include "../global.h"
8 8 #include "script.h"
9 9 #include "../file.h"
  10 #include "../os/endian.h"
10 11
11 12 typedef uint16 (*ScriptFunction)(ScriptEngine *script);
12 13
  14 extern void f__23E1_0004_0014_2BC0();
13 15 extern void f__23E1_01C2_0011_24E8();
14 16
15 17 /**
 
 
525 525 /**
526 526 * Clears the given scriptInfo.
527 527 *
528   * @param scriptInfo The scriptInfo to load in the script.
  528 * @param scriptInfo The scriptInfo to clear.
529 529 */
530 530 void Script_ClearInfo(ScriptInfo *scriptInfo)
531 531 {
532 532 if (scriptInfo == NULL) return;
533 533
534   if (scriptInfo->variable_14 != 0) {
  534 if (scriptInfo->isAllocated != 0) {
535 535 if (scriptInfo->text.csip != 0x0) {
536 536 emu_push(scriptInfo->text.s.cs); emu_push(scriptInfo->text.s.ip);
537 537 emu_push(emu_cs); emu_push(0x003E); emu_cs = 0x23E1; f__23E1_01C2_0011_24E8();
 
 
555 555 scriptInfo->offsets.csip = 0x0;
556 556 scriptInfo->start.csip = 0x0;
557 557 }
  558
  559 /**
  560 * Clears the given scriptInfo.
  561 *
  562 * @param filename The name of the file to load.
  563 * @param scriptInfo The scriptInfo to load in the script.
  564 * @param functions Pointer to the functions to call via script.
  565 * @param data Pointer to preallocated space to load data.
  566 */
  567 uint16 Script_LoadFromFile(const char *filename, ScriptInfo *scriptInfo, csip32 functions, csip32 data)
  568 {
  569 uint32 total = 0;
  570 uint32 length = 0;
  571 uint8 index;
  572 int16 i;
  573
  574 if (scriptInfo == NULL) return 0;
  575 if (filename == NULL) return 0;
  576
  577 Script_ClearInfo(scriptInfo);
  578
  579 scriptInfo->isAllocated = (data.csip == 0x0) ? 1 : 0;
  580
  581 scriptInfo->functions = functions;
  582
  583 if (!File_Exists(filename)) return 0;
  584
  585 index = ChunkFile_Open(filename);
  586
  587 length = ChunkFile_Seek(index, HTOBE32('TEXT'));
  588 total += length;
  589
  590 if (length != 0) {
  591 if (data.csip != 0) {
  592 scriptInfo->text = data;
  593 data.csip += length;
  594 } else {
  595 emu_push(0x30);
  596 emu_push(length >> 16); emu_push(length & 0xFFFF);
  597 emu_push(emu_cs); emu_push(0x0195); emu_cs = 0x23E1; f__23E1_0004_0014_2BC0();
  598 emu_sp += 6;
  599
  600 scriptInfo->text.s.cs = emu_dx;
  601 scriptInfo->text.s.ip = emu_ax;
  602 }
  603
  604 ChunkFile_Read(index, HTOBE32('TEXT'), (void *)emu_get_memorycsip(scriptInfo->text), length);
  605 }
  606
  607 length = ChunkFile_Seek(index, HTOBE32('ORDR'));
  608 total += length;
  609
  610 if (length == 0) {
  611 Script_ClearInfo(scriptInfo);
  612 ChunkFile_Close(index);
  613 return 0;
  614 }
  615
  616 if (data.csip != 0x0) {
  617 scriptInfo->offsets = data;
  618 data.csip += length;
  619 } else {
  620 emu_push(0x30);
  621 emu_push(length >> 16); emu_push(length & 0xFFFF);
  622 emu_push(emu_cs); emu_push(0x0195); emu_cs = 0x23E1; f__23E1_0004_0014_2BC0();
  623 emu_sp += 6;
  624
  625 scriptInfo->offsets.s.cs = emu_dx;
  626 scriptInfo->offsets.s.ip = emu_ax;
  627 }
  628
  629 scriptInfo->offsetsCount = (length >> 1) & 0xFFFF;
  630 ChunkFile_Read(index, HTOBE32('ORDR'), (void *)emu_get_memorycsip(scriptInfo->offsets), length);
  631
  632 for(i = 0; (int16)((length >> 1) & 0xFFFF) > i; i++) {
  633 emu_get_memory16(scriptInfo->offsets.s.cs, scriptInfo->offsets.s.ip, 2 * i) = HTOBE16(emu_get_memory16(scriptInfo->offsets.s.cs, scriptInfo->offsets.s.ip, 2 * i));
  634 }
  635
  636 length = ChunkFile_Seek(index, HTOBE32('DATA'));
  637 total += length;
  638
  639 if (length == 0) {
  640 Script_ClearInfo(scriptInfo);
  641 ChunkFile_Close(index);
  642 return 0;
  643 }
  644
  645 if (data.csip != 0x0) {
  646 scriptInfo->start = data;
  647 data.csip += length;
  648 } else {
  649 emu_push(0x30);
  650 emu_push(length >> 16); emu_push(length & 0xFFFF);
  651 emu_push(emu_cs); emu_push(0x0195); emu_cs = 0x23E1; f__23E1_0004_0014_2BC0();
  652 emu_sp += 6;
  653
  654 scriptInfo->start.s.cs = emu_dx;
  655 scriptInfo->start.s.ip = emu_ax;
  656 }
  657
  658 scriptInfo->startCount = (length >> 1) & 0xFFFF;
  659 ChunkFile_Read(index, HTOBE32('DATA'), (void *)emu_get_memorycsip(scriptInfo->start), length);
  660
  661
  662 ChunkFile_Close(index);
  663
  664 return total & 0xFFFF;
  665 }
 
/trunk/src/script/script.h
 
34 34 /* 0000(4) */ PACK csip32 text; /*!< ?? Pointer to TEXT section of the scripts. */
35 35 /* 0004(4) */ PACK csip32 start; /*!< Pointer to the begin of the scripts. */
36 36 /* 0008(4) */ PACK csip32 offsets; /*!< Pointer to an array of offsets of where to start with a script for a typeID. */
37   /* 000C() */ PACK uint8 unknown_000C[0x0004];
  37 /* 000C() */ PACK uint16 offsetsCount; /*!< Number of words in offsets array. */
  38 /* 000E() */ PACK uint16 startCount; /*!< Number of words in start. */
38 39 /* 0010(4) */ PACK csip32 functions; /*!< Pointer to an array of functions pointers which scripts with this scriptInfo can call. */
39   /* 0014() */ PACK uint16 variable_14; /*!< ?? */
  40 /* 0014() */ PACK uint16 isAllocated; /*!< Memory has been allocated on load. */
40 41 } GCC_PACKED ScriptInfo;
41 42 MSVC_PACKED_END
42 43 assert_compile(sizeof(ScriptInfo) == 0x16);
 
 
49 49 extern bool Script_Run(ScriptEngine *script);
50 50 extern void Script_Unknown044C(ScriptEngine *script, uint16 type);
51 51 extern void Script_ClearInfo(ScriptInfo *scriptInfo);
  52 extern uint16 Script_LoadFromFile(const char *filename, ScriptInfo *scriptInfo, csip32 functions, csip32 data);
52 53
53 54 /* General Script Functions */
54 55 extern uint16 Script_General_Delay(ScriptEngine *script);
 
 
147 147 extern void emu_Script_Reset();
148 148 extern void emu_Script_Load();
149 149 extern void emu_Script_ClearInfo();
  150 extern void emu_Script_LoadFromFile();
150 151
151 152 #endif /* SCRIPT_H */
 
/trunk/src/script/emu_script.c
 
80 80
81 81 Script_ClearInfo(scriptInfo);
82 82 }
  83
  84 /**
  85 * Emulator wrapper around Script_LoadFromFile()
  86 *
  87 * @name emu_Script_LoadFromFile
  88 * @implements 15C2:00AC:0015:2FBF ()
  89 */
  90 void emu_Script_LoadFromFile()
  91 {
  92 csip32 filename;
  93 csip32 sicsip;
  94 csip32 functions;
  95 csip32 data;
  96 ScriptInfo *scriptInfo;
  97
  98 /* Pop the return CS:IP. */
  99 emu_pop(&emu_ip);
  100 emu_pop(&emu_cs);
  101
  102 filename = emu_get_csip32(emu_ss, emu_sp, 0x0);
  103 sicsip = emu_get_csip32(emu_ss, emu_sp, 0x4);
  104 functions = emu_get_csip32(emu_ss, emu_sp, 0x8);
  105 data = emu_get_csip32(emu_ss, emu_sp, 0xC);
  106
  107 emu_ax = 0;
  108 if (filename.csip == 0x0) return;
  109 if (sicsip.csip == 0x0) return;
  110 scriptInfo = ScriptInfo_Get_ByMemory(sicsip);
  111
  112 emu_ax = Script_LoadFromFile((char *)emu_get_memorycsip(filename), scriptInfo, functions, data);
  113 }
 
/trunk/projects/opendune.vcproj
 
429 429 </FileConfiguration>
430 430 </File>
431 431 <File
432   RelativePath="..\decompiled\cs__15C2.c"
433   >
434   <FileConfiguration
435   Name="Debug|Win32"
436   >
437   <Tool
438   Name="VCCLCompilerTool"
439   ObjectFile="$(IntDir)\decompiled\"
440   />
441   </FileConfiguration>
442   <FileConfiguration
443   Name="Release|Win32"
444   >
445   <Tool
446   Name="VCCLCompilerTool"
447   ObjectFile="$(IntDir)\decompiled\"
448   />
449   </FileConfiguration>
450   </File>
451   <File
452 432 RelativePath="..\decompiled\cs__167E.c"
453 433 >
454 434 <FileConfiguration
 
<<   1 2 ... 1123 1124 1125 1126 1127 1128 1129 1131   >>