Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1812 | yogev_ezra | 1 | ; -------------------------------------------------------------------------- |
2 | ; FILE: TGame.Asm |
||
3 | ; DATE: September 28, 2008 |
||
4 | ; -------------------------------------------------------------------------- |
||
5 | |||
6 | ; -------------------------------------------------------------------------- |
||
7 | ; WAIT |
||
8 | ; -------------------------------------------------------------------------- |
||
9 | virtual at 0 |
||
10 | loc48: |
||
11 | .pTrekData PVOID ? |
||
12 | .dbl_TEMP DOUBLE ? |
||
13 | .dbl_ANUM DOUBLE ? |
||
14 | .dbl_AITEM2 DOUBLE ? |
||
15 | .dbl_ DOUBLE ? |
||
16 | .size = $ |
||
17 | end virtual |
||
18 | ; -------------------------------------------------------------------------- |
||
19 | align PROC_ALIGN |
||
20 | TGame_Wait: |
||
21 | mcBeginLocals loc48.size |
||
22 | |||
23 | mcLoadGameDataPtr esi |
||
24 | mcStoreLocal loc48.pTrekData, esi |
||
25 | |||
26 | mov [esi + TREKDATA.IDIDIT], 0 |
||
27 | |||
28 | .L10: |
||
29 | call TCmdBuf_Scan |
||
30 | |||
31 | fld [ebx + TCmdBuf.cmdbuf_FNUM] |
||
32 | fstp [esp + loc48.dbl_ANUM] |
||
33 | |||
34 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL |
||
35 | jne .L20 |
||
36 | |||
37 | mov ecx, 560 |
||
38 | call TGame_Prompt |
||
39 | jmp .L10 |
||
40 | |||
41 | .L20: |
||
42 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL |
||
43 | jne .L60 |
||
44 | |||
45 | fldz |
||
46 | fld [esp + loc48.dbl_ANUM] |
||
47 | mc_CMP_ST0_ST1 |
||
48 | jc .done |
||
49 | jz .done |
||
50 | |||
51 | mcLoadLocal esi, loc48.pTrekData |
||
52 | fld [esi + TREKDATA.REMTIME] |
||
53 | fld [esp + loc48.dbl_ANUM] |
||
54 | mc_CMP_ST0_ST1 |
||
55 | jnc .verify |
||
56 | |||
57 | cmp [esi + TREKDATA.NENHERE], 0 |
||
58 | je .L30 |
||
59 | |||
60 | .verify: |
||
61 | mcLoad8bitsToReg32 ecx, 158 |
||
62 | call TGame_JA |
||
63 | jnc .done |
||
64 | |||
65 | .L30: |
||
66 | mcLoadLocal esi, loc48.pTrekData |
||
67 | inc [esi + TREKDATA.RESTING] |
||
68 | |||
69 | fld [esp + loc48.dbl_ANUM] |
||
70 | fstp [esp + loc48.dbl_AITEM2] |
||
71 | |||
72 | .L40: |
||
73 | fldz |
||
74 | fld [esp + loc48.dbl_ANUM] |
||
75 | mc_CMP_ST0_ST1 |
||
76 | jc .stop_rest |
||
77 | jz .stop_rest |
||
78 | |||
79 | .still_resting: |
||
80 | mcLoadLocal esi, loc48.pTrekData |
||
81 | cmp [esi + TREKDATA.RESTING], 0 |
||
82 | je .L50 |
||
83 | |||
84 | fld [esp + loc48.dbl_ANUM] |
||
85 | fstp [esp + loc48.dbl_TEMP] |
||
86 | |||
87 | cmp [esi + TREKDATA.NENHERE], 0 |
||
88 | je .set_time |
||
89 | |||
90 | call TRandom_Ranf |
||
91 | fld1 |
||
92 | faddp |
||
93 | fld [esp + loc48.dbl_ANUM] |
||
94 | call TCommon_FPU_Min |
||
95 | fstp [esp + loc48.dbl_TEMP] |
||
96 | |||
97 | .set_time: |
||
98 | fld [esp + loc48.dbl_TEMP] |
||
99 | mcLoadLocal edi, loc48.pTrekData |
||
100 | fstp [edi + TREKDATA.TIME] |
||
101 | |||
102 | fld [esp + loc48.dbl_ANUM] |
||
103 | fld [edi + TREKDATA.TIME] |
||
104 | mc_CMP_ST0_ST1 |
||
105 | jnc .check_tholian |
||
106 | |||
107 | call TAttack_Main |
||
108 | |||
109 | .check_tholian: |
||
110 | mcLoadLocal esi, loc48.pTrekData |
||
111 | cmp [esi + TREKDATA.NENHERE], 0 |
||
112 | jne .call_events |
||
113 | |||
114 | call TEvents_MoveTholian |
||
115 | |||
116 | .call_events: |
||
117 | mcLoadLocal esi, loc48.pTrekData |
||
118 | cmp [esi + TREKDATA.ALLDONE], 0 |
||
119 | jne .done |
||
120 | |||
121 | call TEvents_Main |
||
122 | |||
123 | mcLoadLocal edi, loc48.pTrekData |
||
124 | mov [edi + TREKDATA.IDIDIT], 1 |
||
125 | |||
126 | cmp [edi + TREKDATA.ALLDONE], 0 |
||
127 | jne .done |
||
128 | |||
129 | fld [esp + loc48.dbl_ANUM] |
||
130 | fld [esp + loc48.dbl_TEMP] |
||
131 | fsubp |
||
132 | fstp [esp + loc48.dbl_ANUM] |
||
133 | |||
134 | call TArray_MyGalaxyPtr |
||
135 | cmp dword [ebx], 1000 |
||
136 | jne .L40 |
||
137 | |||
138 | mcLoadLocal esi, loc48.pTrekData |
||
139 | mov [esi + TREKDATA.RESTING], 0 |
||
140 | |||
141 | fldz |
||
142 | fstp [esi + TREKDATA.TIME] |
||
143 | jmp .L55 |
||
144 | |||
145 | .stop_rest: |
||
146 | mcLoadLocal esi, loc48.pTrekData |
||
147 | mov [esi + TREKDATA.RESTING], 0 |
||
148 | |||
149 | .L50: |
||
150 | call TConsole_SetGameMsgAttr |
||
151 | mcLoadLocal esi, loc48.pTrekData |
||
152 | fld [esi + TREKDATA.REMTIME] |
||
153 | mov cl, 2 |
||
154 | call TConsole_CramFloat |
||
155 | mov ecx, 561 |
||
156 | call TConsole_Prout |
||
157 | |||
158 | .L55: |
||
159 | mcLoadLocal esi, loc48.pTrekData |
||
160 | cmp [esi + TREKDATA.CONDIT], CONDITION_DOCKED |
||
161 | jne .done |
||
162 | ; |
||
163 | ; Repair Death Ray! |
||
164 | ; |
||
165 | fld [glb_dbl_9dot99] |
||
166 | fld [esp + loc48.dbl_AITEM2] |
||
167 | fld [esp + loc48.dbl_ANUM] |
||
168 | fsubp |
||
169 | mc_CMP_ST0_ST1 |
||
170 | jc .done |
||
171 | |||
172 | fldz |
||
173 | mov cl, DEV_DEATHRAY |
||
174 | call TArray_SetDblDamage |
||
175 | jmp .done |
||
176 | |||
177 | .L60: |
||
178 | call TMove_BegPardon |
||
179 | |||
180 | .done: |
||
181 | mcEndLocals loc48.size |
||
182 | ret |
||
183 | |||
184 | ; -------------------------------------------------------------------------- |
||
185 | ; GAME |
||
186 | ; -------------------------------------------------------------------------- |
||
187 | virtual at 0 |
||
188 | loc42: |
||
189 | .pTrekData PVOID ? |
||
190 | .nKILLTOT COUNT ? |
||
191 | .nDESTBAS COUNT ? |
||
192 | .size = $ |
||
193 | end virtual |
||
194 | ; -------------------------------------------------------------------------- |
||
195 | align PROC_ALIGN |
||
196 | TGame_Report: |
||
197 | mcBeginLocals loc42.size |
||
198 | |||
199 | mcLoadGameDataPtr eax |
||
200 | mcStoreLocal loc42.pTrekData, eax |
||
201 | |||
202 | call TConsole_ScrollUp |
||
203 | call TConsole_SetGameMsgAttr |
||
204 | |||
205 | mov ecx, 309 |
||
206 | call TConsole_Cram |
||
207 | |||
208 | mcLoadLocal esi, loc42.pTrekData |
||
209 | mov al, [esi + TREKDATA.LENGTH] |
||
210 | mcOnRegEqu al, 1, .short_game |
||
211 | mcOnRegEqu al, 2, .medium_game |
||
212 | mcOnRegEqu al, 4, .long_game |
||
213 | |||
214 | .assertion_failed: |
||
215 | ;int 3 |
||
216 | jmp .done |
||
217 | |||
218 | .short_game: |
||
219 | push 74 |
||
220 | jmp .print_length |
||
221 | |||
222 | .medium_game: |
||
223 | push 75 |
||
224 | jmp .print_length |
||
225 | |||
226 | .long_game: |
||
227 | push 76 |
||
228 | |||
229 | .print_length: |
||
230 | pop ecx |
||
231 | call TConsole_Cram |
||
232 | |||
233 | mov al, CHAR_BLANK |
||
234 | call TConsole_PutChar |
||
235 | |||
236 | mcLoadLocal esi, loc42.pTrekData |
||
237 | movzx eax, [esi + TREKDATA.SKILL] |
||
238 | cmp al, 1 |
||
239 | jb .assertion_failed |
||
240 | cmp al, 5 |
||
241 | ja .assertion_failed |
||
242 | |||
243 | lea ecx, [eax + 12] |
||
244 | call TConsole_Cram |
||
245 | |||
246 | mov ecx, 310 |
||
247 | call TConsole_Prout |
||
248 | |||
249 | mcLoadLocal esi, loc42.pTrekData |
||
250 | cmp [esi + TREKDATA.IDIDIT], 0 |
||
251 | je .L110 |
||
252 | |||
253 | mov ecx, 311 |
||
254 | call TConsole_Cram |
||
255 | |||
256 | mcLoadLocal esi, loc42.pTrekData |
||
257 | add esi, TREKDATA.PASSWD |
||
258 | mcZeroBits eax |
||
259 | |||
260 | .get_char: |
||
261 | lodsb |
||
262 | mcOnRegZero eax, .end_of_password |
||
263 | |||
264 | call TConsole_PutChar |
||
265 | jmp .get_char |
||
266 | |||
267 | .end_of_password: |
||
268 | mov ecx, 312 |
||
269 | call TConsole_Prout |
||
270 | |||
271 | .L110: |
||
272 | mcLoadLocal esi, loc42.pTrekData |
||
273 | mov al, [esi + TREKDATA.KILLK] |
||
274 | add al, [esi + TREKDATA.KILLC] |
||
275 | add al, [esi + TREKDATA.NSCKILL] |
||
276 | |||
277 | movzx eax, al |
||
278 | mcStoreLocal loc42.nKILLTOT, eax |
||
279 | call TConsole_CramInt |
||
280 | |||
281 | mov ecx, 313 |
||
282 | call TConsole_Cram |
||
283 | |||
284 | mcLoad8bitsToReg32 ecx, 204 |
||
285 | mcLoadLocal esi, loc42.pTrekData |
||
286 | movzx eax, [esi + TREKDATA.INKLING] |
||
287 | call TConsole_CramSinglePlural |
||
288 | |||
289 | mov ecx, 314 |
||
290 | mcZeroBits eax |
||
291 | cmp [esp + loc42.nKILLTOT], 1 |
||
292 | sete al |
||
293 | add ecx, eax |
||
294 | call TConsole_Cram |
||
295 | |||
296 | mcLoad8bitsToReg32 ecx, 205 |
||
297 | mcLoadLocal esi, loc42.pTrekData |
||
298 | movzx eax, [esi + TREKDATA.KILLC] |
||
299 | call TConsole_CramSinglePlural |
||
300 | |||
301 | mov al, '.' |
||
302 | call TConsole_PutChar |
||
303 | call TConsole_ScrollUp |
||
304 | |||
305 | mcLoadLocal esi, loc42.pTrekData |
||
306 | cmp [esi + TREKDATA.SKILL], 2 |
||
307 | jbe .L200 |
||
308 | |||
309 | mov ecx, 316 |
||
310 | call TConsole_Cram |
||
311 | |||
312 | mcLoadLocal esi, loc42.pTrekData |
||
313 | cmp [esi + TREKDATA.NSCREM], 1 |
||
314 | jne .scom_news |
||
315 | |||
316 | mov ecx, 317 |
||
317 | call TConsole_Cram |
||
318 | |||
319 | .scom_news: |
||
320 | mov ecx, 318 |
||
321 | call TConsole_Prout |
||
322 | |||
323 | .L200: |
||
324 | mcLoadLocal esi, loc42.pTrekData |
||
325 | mov al, [esi + TREKDATA.INBASE] |
||
326 | sub al, [esi + TREKDATA.REMBASE] |
||
327 | movzx eax, al |
||
328 | mcStoreLocal loc42.nDESTBAS, eax |
||
329 | mcOnRegZero eax, .L210 |
||
330 | |||
331 | mov ecx, 319 |
||
332 | call TConsole_CramSinglePlural |
||
333 | mov ecx, 320 |
||
334 | call TConsole_Cram |
||
335 | |||
336 | .L210: |
||
337 | mcLoadLocal esi, loc42.pTrekData |
||
338 | mov ecx, 319 |
||
339 | movzx eax, [esi + TREKDATA.REMBASE] |
||
340 | call TConsole_CramSinglePlural |
||
341 | |||
342 | cmp [esp + loc42.nDESTBAS], 0 |
||
343 | je .end_of_bases |
||
344 | |||
345 | mov ecx, 321 |
||
346 | call TConsole_Cram |
||
347 | |||
348 | .end_of_bases: |
||
349 | mov al, '.' |
||
350 | call TConsole_PutChar |
||
351 | call TConsole_ScrollUp |
||
352 | |||
353 | mcLoadLocal esi, loc42.pTrekData |
||
354 | cmp [esi + TREKDATA.ICSOS], 0 |
||
355 | je .L240 |
||
356 | |||
357 | fld [esi + TREKDATA.FUTURE5] |
||
358 | fld [glb_dbl_1E38] |
||
359 | mc_CMP_ST0_ST1 |
||
360 | jc .L240 |
||
361 | jz .L240 |
||
362 | |||
363 | cmp [esi + TREKDATA.REMCOM], 0 |
||
364 | je .L240 |
||
365 | cmp [esi + TREKDATA.REMBASE], 0 |
||
366 | je .L240 |
||
367 | cmp [esi + TREKDATA.BATX], 0 |
||
368 | je .L240 |
||
369 | cmp [esi + TREKDATA.BATY], 0 |
||
370 | je .L240 |
||
371 | |||
372 | mov al, [esi + TREKDATA.BATX] |
||
373 | mov dl, [esi + TREKDATA.BATY] |
||
374 | call TArray_GetGalaxyValue |
||
375 | mcLoad8bitsToReg32 eax, 100 |
||
376 | xchg eax, ecx |
||
377 | mcZeroBits edx |
||
378 | div ecx |
||
379 | cmp edx, 10 |
||
380 | jb .L240 |
||
381 | |||
382 | mov al, [esi + TREKDATA.BATX] |
||
383 | mov dl, [esi + TREKDATA.BATY] |
||
384 | movzx ecx, [esi + TREKDATA.REMCOM] |
||
385 | lea edi, [esi + TREKDATA.CY] |
||
386 | add esi, TREKDATA.CX |
||
387 | |||
388 | .find_commander: |
||
389 | cmp al, [esi] |
||
390 | jne .next_commander |
||
391 | cmp dl, [edi] |
||
392 | je .L221 |
||
393 | |||
394 | .next_commander: |
||
395 | inc esi |
||
396 | inc edi |
||
397 | loop .find_commander |
||
398 | jmp .L240 |
||
399 | |||
400 | .L221: |
||
401 | mov ecx, 322 |
||
402 | call TConsole_Cram |
||
403 | |||
404 | mcLoadLocal esi, loc42.pTrekData |
||
405 | mov al, [esi + TREKDATA.BATX] |
||
406 | mov dl, [esi + TREKDATA.BATY] |
||
407 | mov cl, 1 |
||
408 | call TConsole_CramLoc |
||
409 | |||
410 | mov ecx, 323 |
||
411 | call TConsole_Prout |
||
412 | |||
413 | mov ecx, 324 |
||
414 | call TConsole_Cram |
||
415 | |||
416 | mov cl, 1 |
||
417 | mcLoadLocal esi, loc42.pTrekData |
||
418 | fld [esi + TREKDATA.FUTURE5] |
||
419 | call TConsole_CramFloat |
||
420 | |||
421 | mov al, '.' |
||
422 | call TConsole_PutChar |
||
423 | call TConsole_ScrollUp |
||
424 | |||
425 | .L240: |
||
426 | mcLoadLocal esi, loc42.pTrekData |
||
427 | cmp [esi + TREKDATA.ISSOS], 0 |
||
428 | je .L245 |
||
429 | cmp [esi + TREKDATA.ISATB], 1 |
||
430 | jne .L245 |
||
431 | |||
432 | mov ecx, 322 |
||
433 | call TConsole_Cram |
||
434 | |||
435 | mcLoadLocal esi, loc42.pTrekData |
||
436 | mov al, [esi + TREKDATA.ISX] |
||
437 | mov dl, [esi + TREKDATA.ISY] |
||
438 | mov cl, 1 |
||
439 | call TConsole_CramLoc |
||
440 | |||
441 | mov ecx, 325 |
||
442 | call TConsole_Prout |
||
443 | |||
444 | mov ecx, 324 |
||
445 | call TConsole_Cram |
||
446 | |||
447 | mov cl, 1 |
||
448 | mcLoadLocal esi, loc42.pTrekData |
||
449 | fld [esi + TREKDATA.FUTURE7] |
||
450 | call TConsole_CramFloat |
||
451 | |||
452 | mov al, '.' |
||
453 | call TConsole_PutChar |
||
454 | call TConsole_ScrollUp |
||
455 | |||
456 | .L245: |
||
457 | mcLoadLocal esi, loc42.pTrekData |
||
458 | cmp [esi + TREKDATA.ISUBDAM], 0 |
||
459 | je .L249 |
||
460 | |||
461 | mov ecx, 328 |
||
462 | call TConsole_Cram |
||
463 | |||
464 | mov cl, DEV_SUBSPACE_RADIO |
||
465 | call TArray_GetDblDamage |
||
466 | fldz |
||
467 | mcZeroBits eax |
||
468 | mc_CMP_ST0_ST1 |
||
469 | setz al |
||
470 | lea ecx, [eax + 326] |
||
471 | call TConsole_Cram |
||
472 | |||
473 | mov ecx, 329 |
||
474 | call TConsole_Prout |
||
475 | mov ecx, 330 |
||
476 | call TConsole_Prout |
||
477 | |||
478 | .L249: |
||
479 | mcLoadLocal esi, loc42.pTrekData |
||
480 | cmp [esi + TREKDATA.CASUAL], 0 |
||
481 | je .L250 |
||
482 | |||
483 | movzx eax, [esi + TREKDATA.CASUAL] |
||
484 | call TConsole_CramInt |
||
485 | |||
486 | mov ecx, 331 |
||
487 | call TConsole_Prout |
||
488 | |||
489 | .L250: |
||
490 | mcLoadLocal esi, loc42.pTrekData |
||
491 | cmp [esi + TREKDATA.NHELP], 0 |
||
492 | je .L260 |
||
493 | |||
494 | movzx eax, [esi + TREKDATA.NHELP] |
||
495 | mov ecx, 332 |
||
496 | call TConsole_CramSinglePlural |
||
497 | |||
498 | mov ecx, 333 |
||
499 | call TConsole_Cram |
||
500 | call TConsole_ScrollUp |
||
501 | |||
502 | .L260: |
||
503 | call TConsole_ScrollUp |
||
504 | |||
505 | .done: |
||
506 | mcEndLocals loc42.size |
||
507 | ret |
||
508 | |||
509 | ; -------------------------------------------------------------------------- |
||
510 | ; Input: |
||
511 | ; EAX = value in range [1..8] |
||
512 | ; Output: |
||
513 | ; CF=TRUE if value is in range |
||
514 | ; -------------------------------------------------------------------------- |
||
515 | align PROC_ALIGN |
||
516 | TGame_IsValidQuadrant: |
||
517 | cmp eax, 1 |
||
518 | jb .failed |
||
519 | cmp eax, 8 |
||
520 | ja .failed |
||
521 | |||
522 | stc |
||
523 | ret |
||
524 | |||
525 | .failed: |
||
526 | clc |
||
527 | ret |
||
528 | |||
529 | ; -------------------------------------------------------------------------- |
||
530 | ; GETFN |
||
531 | ; -------------------------------------------------------------------------- |
||
532 | ; Input: |
||
533 | ; ESI = PCHAR - buffer to store the name into |
||
534 | ; -------------------------------------------------------------------------- |
||
535 | virtual at 0 |
||
536 | loc88: |
||
537 | .pszBuffer PCHAR ? |
||
538 | .nAskThreeTimes COUNT ? |
||
539 | .size = $ |
||
540 | end virtual |
||
541 | ; -------------------------------------------------------------------------- |
||
542 | align PROC_ALIGN |
||
543 | TGame_GetFileName: |
||
544 | mcBeginLocals loc88.size |
||
545 | mcStoreLocal loc88.pszBuffer, esi |
||
546 | |||
547 | mcLoad8bitsToReg32 eax, 3 |
||
548 | mcStoreLocal loc88.nAskThreeTimes, eax |
||
549 | |||
550 | .L40: |
||
551 | call TCmdBuf_Scan |
||
552 | mov al, [ebx + TCmdBuf.cmdbuf_KEY] |
||
553 | mcOnRegEqu al, CMD_TOKEN_EOL, .L75 |
||
554 | mcOnRegNotEqu al, CMD_TOKEN_ALPHA, .L100 |
||
555 | |||
556 | call TCmdBuf_AnsiStrLen |
||
557 | cmp ecx, 27 |
||
558 | ja .too_long |
||
559 | |||
560 | mcLoadLocal edi, loc88.pszBuffer |
||
561 | call TString_AnsiCopy |
||
562 | |||
563 | dec edi |
||
564 | mov esi, str_TRK |
||
565 | call TString_AnsiCopy |
||
566 | jmp .done |
||
567 | |||
568 | .too_long: |
||
569 | mov ecx, 668 |
||
570 | call TConsole_ProutGameMsg |
||
571 | jmp .ask |
||
572 | |||
573 | .L75: |
||
574 | dec [esp + loc88.nAskThreeTimes] |
||
575 | jz .L100 |
||
576 | |||
577 | .ask: |
||
578 | mov ecx, 665 |
||
579 | call TGame_Prompt |
||
580 | jmp .L40 |
||
581 | |||
582 | .L100: |
||
583 | mcLoadLocal esi, loc88.pszBuffer |
||
584 | mov byte [esi], 0 |
||
585 | |||
586 | .done: |
||
587 | mcEndLocals loc88.size |
||
588 | ret |
||
589 | |||
590 | ; -------------------------------------------------------------------------- |
||
591 | ; SCORE |
||
592 | ; -------------------------------------------------------------------------- |
||
593 | virtual at 0 |
||
594 | loc57: |
||
595 | .pTrekData PVOID ? |
||
596 | .dbl_TIMUSED DOUBLE ? |
||
597 | .dbl_PERDATE DOUBLE ? |
||
598 | .dbl_ITHPERD DOUBLE ? |
||
599 | .dbl_pad_1 DOUBLE ? |
||
600 | .nISCORE INT32 ? |
||
601 | .nIWON INT32 ? |
||
602 | .nIDIED INT32 ? |
||
603 | .nKLSHIP INT32 ? |
||
604 | .size = $ |
||
605 | end virtual |
||
606 | ; -------------------------------------------------------------------------- |
||
607 | align PROC_ALIGN |
||
608 | TGame_Score: |
||
609 | mcBeginLocals loc57.size |
||
610 | |||
611 | mcLoadGameDataPtr esi |
||
612 | mcStoreLocal loc57.pTrekData, esi |
||
613 | |||
614 | fld [esi + TREKDATA.DATE] |
||
615 | fld [esi + TREKDATA.INDATE] |
||
616 | fsubp |
||
617 | fstp [esp + loc57.dbl_TIMUSED] |
||
618 | |||
619 | fld [esp + loc57.dbl_TIMUSED] |
||
620 | fldz |
||
621 | mc_CMP_ST0_ST1 |
||
622 | jz .recalc_time_used |
||
623 | |||
624 | cmp [esi + TREKDATA.REMKL], 0 |
||
625 | je .calc_per_date |
||
626 | |||
627 | .recalc_time_used: |
||
628 | fld [esp + loc57.dbl_TIMUSED] |
||
629 | fld [glb_dbl_5] |
||
630 | call TCommon_FPU_Max |
||
631 | fstp [esp + loc57.dbl_TIMUSED] |
||
632 | |||
633 | .calc_per_date: |
||
634 | mov al, [esi + TREKDATA.KILLC] |
||
635 | add al, [esi + TREKDATA.KILLK] |
||
636 | add al, [esi + TREKDATA.NSCKILL] |
||
637 | call TCommon_LoadByteIntoFPU |
||
638 | fld [esp + loc57.dbl_TIMUSED] |
||
639 | fdivp |
||
640 | fld st |
||
641 | fstp [esp + loc57.dbl_PERDATE] |
||
642 | fstp [glb_dbl_KlingonsPerDate] |
||
643 | |||
644 | fld [esp + loc57.dbl_PERDATE] |
||
645 | fld [glb_dbl_500] |
||
646 | fmulp |
||
647 | fld [glb_dbl_0dot5] |
||
648 | faddp |
||
649 | fstp [esp + loc57.dbl_ITHPERD] |
||
650 | |||
651 | mcZeroBits eax |
||
652 | mcStoreLocal loc57.nIWON, eax |
||
653 | |||
654 | cmp [esi + TREKDATA.GAMEWON], 0 |
||
655 | je .check_ship |
||
656 | |||
657 | movzx eax, [esi + TREKDATA.SKILL] |
||
658 | imul eax, 100 |
||
659 | mcStoreLocal loc57.nIWON, eax |
||
660 | |||
661 | .check_ship: |
||
662 | mov al, [esi + TREKDATA.SHIP] |
||
663 | mcOnRegEqu al, CHAR_ENTERPRISE, .killed_zero_ships |
||
664 | mcOnRegEqu al, CHAR_FQUEENE, .killed_one_ship |
||
665 | mcOnRegZero al, .killed_two_ships |
||
666 | |||
667 | ;int 3 |
||
668 | jmp .done |
||
669 | |||
670 | .killed_zero_ships: |
||
671 | push 0 |
||
672 | jmp .store_killed_ships |
||
673 | |||
674 | .killed_one_ship: |
||
675 | push 1 |
||
676 | jmp .store_killed_ships |
||
677 | |||
678 | .killed_two_ships: |
||
679 | push 2 |
||
680 | |||
681 | .store_killed_ships: |
||
682 | pop edx |
||
683 | mcStoreLocal loc57.nKLSHIP, edx |
||
684 | |||
685 | mcZeroBits eax |
||
686 | cmp [esi + TREKDATA.ALIVE], 0 |
||
687 | jne .I_died |
||
688 | |||
689 | add eax, 200 |
||
690 | |||
691 | .I_died: |
||
692 | mcStoreLocal loc57.nIDIED, eax |
||
693 | |||
694 | cmp [esi + TREKDATA.GAMEWON], 0 |
||
695 | jne .calc_total_score |
||
696 | |||
697 | mov [esi + TREKDATA.NROMREM], 0 |
||
698 | |||
699 | .calc_total_score: |
||
700 | movzx eax, [esi + TREKDATA.KILLK] |
||
701 | imul eax, 10 |
||
702 | mcStoreLocal loc57.nISCORE, eax |
||
703 | |||
704 | movzx eax, [esi + TREKDATA.KILLC] |
||
705 | imul eax, 50 |
||
706 | add [esp + loc57.nISCORE], eax |
||
707 | |||
708 | fld [esp + loc57.dbl_ITHPERD] |
||
709 | call TCommon_FP_Truncate |
||
710 | add [esp + loc57.nISCORE], eax |
||
711 | |||
712 | mcLoadLocal eax, loc57.nIWON |
||
713 | add [esp + loc57.nISCORE], eax |
||
714 | |||
715 | mcLoadLocal eax, loc57.nIDIED |
||
716 | sub [esp + loc57.nISCORE], eax |
||
717 | |||
718 | movzx eax, [esi + TREKDATA.BASEKL] |
||
719 | imul eax, 100 |
||
720 | sub [esp + loc57.nISCORE], eax |
||
721 | |||
722 | mcLoadLocal eax, loc57.nKLSHIP |
||
723 | imul eax, 100 |
||
724 | sub [esp + loc57.nISCORE], eax |
||
725 | |||
726 | movzx eax, [esi + TREKDATA.NHELP] |
||
727 | imul eax, 45 |
||
728 | sub [esp + loc57.nISCORE], eax |
||
729 | |||
730 | movzx eax, [esi + TREKDATA.STARKL] |
||
731 | imul eax, 5 |
||
732 | sub [esp + loc57.nISCORE], eax |
||
733 | |||
734 | movzx eax, [esi + TREKDATA.CASUAL] |
||
735 | sub [esp + loc57.nISCORE], eax |
||
736 | |||
737 | movzx eax, [esi + TREKDATA.NROMKL] |
||
738 | imul eax, 20 |
||
739 | add [esp + loc57.nISCORE], eax |
||
740 | |||
741 | movzx eax, [esi + TREKDATA.NSCKILL] |
||
742 | imul eax, 200 |
||
743 | add [esp + loc57.nISCORE], eax |
||
744 | |||
745 | movzx eax, [esi + TREKDATA.NPLANKL] |
||
746 | imul eax, 10 |
||
747 | sub [esp + loc57.nISCORE], eax |
||
748 | |||
749 | movzx eax, [esi + TREKDATA.NROMREM] |
||
750 | add [esp + loc57.nISCORE], eax |
||
751 | ; |
||
752 | ; Report all that... |
||
753 | ; |
||
754 | mov cl, ATTR_REPORT_TEXT |
||
755 | call TConsole_SetAttr |
||
756 | call TConsole_ScrollUp |
||
757 | mov ecx, 632 |
||
758 | call TConsole_Prout |
||
759 | call TConsole_ScrollUp |
||
760 | |||
761 | mcLoadLocal esi, loc57.pTrekData |
||
762 | cmp [esi + TREKDATA.NROMKL], 0 |
||
763 | je .L1 |
||
764 | |||
765 | movzx eax, [esi + TREKDATA.NROMKL] |
||
766 | mov cl, 6 |
||
767 | call TConsole_CramIntWidth |
||
768 | |||
769 | mov ecx, 633 |
||
770 | call TConsole_Cram |
||
771 | |||
772 | mcLoadLocal esi, loc57.pTrekData |
||
773 | movzx eax, [esi + TREKDATA.NROMKL] |
||
774 | imul eax, 20 |
||
775 | mov cl, 10 |
||
776 | call TConsole_CramIntWidth |
||
777 | call TConsole_ScrollUp |
||
778 | |||
779 | .L1: |
||
780 | mcLoadLocal esi, loc57.pTrekData |
||
781 | cmp [esi + TREKDATA.NROMREM], 0 |
||
782 | je .L5 |
||
783 | |||
784 | movzx eax, [esi + TREKDATA.NROMREM] |
||
785 | mov cl, 6 |
||
786 | call TConsole_CramIntWidth |
||
787 | |||
788 | mov ecx, 634 |
||
789 | call TConsole_Cram |
||
790 | |||
791 | mcLoadLocal esi, loc57.pTrekData |
||
792 | movzx eax, [esi + TREKDATA.NROMREM] |
||
793 | mov cl, 10 |
||
794 | call TConsole_CramIntWidth |
||
795 | call TConsole_ScrollUp |
||
796 | |||
797 | .L5: |
||
798 | mcLoadLocal esi, loc57.pTrekData |
||
799 | cmp [esi + TREKDATA.KILLK], 0 |
||
800 | je .L10 |
||
801 | |||
802 | movzx eax, [esi + TREKDATA.KILLK] |
||
803 | mov cl, 6 |
||
804 | call TConsole_CramIntWidth |
||
805 | |||
806 | mov ecx, 635 |
||
807 | call TConsole_Cram |
||
808 | |||
809 | mcLoadLocal esi, loc57.pTrekData |
||
810 | movzx eax, [esi + TREKDATA.KILLK] |
||
811 | imul eax, 10 |
||
812 | mov cl, 10 |
||
813 | call TConsole_CramIntWidth |
||
814 | call TConsole_ScrollUp |
||
815 | |||
816 | .L10: |
||
817 | mcLoadLocal esi, loc57.pTrekData |
||
818 | cmp [esi + TREKDATA.KILLC], 0 |
||
819 | je .L12 |
||
820 | |||
821 | movzx eax, [esi + TREKDATA.KILLC] |
||
822 | mov cl, 6 |
||
823 | call TConsole_CramIntWidth |
||
824 | |||
825 | mov ecx, 636 |
||
826 | call TConsole_Cram |
||
827 | |||
828 | mcLoadLocal esi, loc57.pTrekData |
||
829 | movzx eax, [esi + TREKDATA.KILLC] |
||
830 | imul eax, 50 |
||
831 | mov cl, 10 |
||
832 | call TConsole_CramIntWidth |
||
833 | call TConsole_ScrollUp |
||
834 | |||
835 | .L12: |
||
836 | mcLoadLocal esi, loc57.pTrekData |
||
837 | cmp [esi + TREKDATA.NSCKILL], 0 |
||
838 | je .L15 |
||
839 | |||
840 | movzx eax, [esi + TREKDATA.NSCKILL] |
||
841 | mov cl, 6 |
||
842 | call TConsole_CramIntWidth |
||
843 | |||
844 | mov ecx, 637 |
||
845 | call TConsole_Prout |
||
846 | |||
847 | .L15: |
||
848 | fld [esp + loc57.dbl_ITHPERD] |
||
849 | fldz |
||
850 | mc_CMP_ST0_ST1 |
||
851 | jz .L20 |
||
852 | |||
853 | fld [esp + loc57.dbl_PERDATE] |
||
854 | mov cl, 2 |
||
855 | mov dl, 6 |
||
856 | call TConsole_CramFloatWidth |
||
857 | |||
858 | mov ecx, 638 |
||
859 | call TConsole_Cram |
||
860 | |||
861 | fld [esp + loc57.dbl_ITHPERD] |
||
862 | call TCommon_FP_Truncate |
||
863 | mov cl, 10 |
||
864 | call TConsole_CramIntWidth |
||
865 | call TConsole_ScrollUp |
||
866 | |||
867 | .L20: |
||
868 | mcLoadLocal esi, loc57.pTrekData |
||
869 | cmp [esi + TREKDATA.STARKL], 0 |
||
870 | je .L30 |
||
871 | |||
872 | movzx eax, [esi + TREKDATA.STARKL] |
||
873 | mov cl, 6 |
||
874 | call TConsole_CramIntWidth |
||
875 | |||
876 | mov ecx, 639 |
||
877 | call TConsole_Cram |
||
878 | |||
879 | mcLoadLocal esi, loc57.pTrekData |
||
880 | movzx eax, [esi + TREKDATA.STARKL] |
||
881 | imul eax, 5 |
||
882 | mov cl, 10 |
||
883 | neg eax |
||
884 | call TConsole_CramIntWidth |
||
885 | call TConsole_ScrollUp |
||
886 | |||
887 | .L30: |
||
888 | mcLoadLocal esi, loc57.pTrekData |
||
889 | cmp [esi + TREKDATA.NPLANKL], 0 |
||
890 | je .L32 |
||
891 | |||
892 | movzx eax, [esi + TREKDATA.NPLANKL] |
||
893 | mov cl, 6 |
||
894 | call TConsole_CramIntWidth |
||
895 | |||
896 | mov ecx, 640 |
||
897 | call TConsole_Cram |
||
898 | |||
899 | mcLoadLocal esi, loc57.pTrekData |
||
900 | movzx eax, [esi + TREKDATA.NPLANKL] |
||
901 | imul eax, 10 |
||
902 | mov cl, 10 |
||
903 | neg eax |
||
904 | call TConsole_CramIntWidth |
||
905 | call TConsole_ScrollUp |
||
906 | |||
907 | .L32: |
||
908 | mcLoadLocal esi, loc57.pTrekData |
||
909 | cmp [esi + TREKDATA.BASEKL], 0 |
||
910 | je .L35 |
||
911 | |||
912 | movzx eax, [esi + TREKDATA.BASEKL] |
||
913 | mov cl, 6 |
||
914 | call TConsole_CramIntWidth |
||
915 | |||
916 | mov ecx, 641 |
||
917 | call TConsole_Cram |
||
918 | |||
919 | mcLoadLocal esi, loc57.pTrekData |
||
920 | movzx eax, [esi + TREKDATA.BASEKL] |
||
921 | imul eax, 100 |
||
922 | mov cl, 10 |
||
923 | neg eax |
||
924 | call TConsole_CramIntWidth |
||
925 | call TConsole_ScrollUp |
||
926 | |||
927 | .L35: |
||
928 | mcLoadLocal esi, loc57.pTrekData |
||
929 | cmp [esi + TREKDATA.NHELP], 0 |
||
930 | je .L40 |
||
931 | |||
932 | movzx eax, [esi + TREKDATA.NHELP] |
||
933 | mov cl, 6 |
||
934 | call TConsole_CramIntWidth |
||
935 | |||
936 | mov ecx, 642 |
||
937 | call TConsole_Cram |
||
938 | |||
939 | mcLoadLocal esi, loc57.pTrekData |
||
940 | movzx eax, [esi + TREKDATA.NHELP] |
||
941 | imul eax, 45 |
||
942 | mov cl, 10 |
||
943 | neg eax |
||
944 | call TConsole_CramIntWidth |
||
945 | call TConsole_ScrollUp |
||
946 | |||
947 | .L40: |
||
948 | mcLoadLocal esi, loc57.pTrekData |
||
949 | cmp [esi + TREKDATA.CASUAL], 0 |
||
950 | je .L45 |
||
951 | |||
952 | movzx eax, [esi + TREKDATA.CASUAL] |
||
953 | mov cl, 6 |
||
954 | call TConsole_CramIntWidth |
||
955 | |||
956 | mov ecx, 643 |
||
957 | call TConsole_Cram |
||
958 | |||
959 | mcLoadLocal esi, loc57.pTrekData |
||
960 | movzx eax, [esi + TREKDATA.CASUAL] |
||
961 | mov cl, 10 |
||
962 | neg eax |
||
963 | call TConsole_CramIntWidth |
||
964 | call TConsole_ScrollUp |
||
965 | |||
966 | .L45: |
||
967 | cmp [esp + loc57.nKLSHIP], 0 |
||
968 | je .L50 |
||
969 | |||
970 | mov cl, 6 |
||
971 | mcLoadLocal eax, loc57.nKLSHIP |
||
972 | call TConsole_CramIntWidth |
||
973 | |||
974 | mov ecx, 644 |
||
975 | call TConsole_Cram |
||
976 | |||
977 | mcLoadLocal eax, loc57.nKLSHIP |
||
978 | imul eax, 100 |
||
979 | mov cl, 10 |
||
980 | neg eax |
||
981 | call TConsole_CramIntWidth |
||
982 | call TConsole_ScrollUp |
||
983 | |||
984 | .L50: |
||
985 | mcLoadLocal esi, loc57.pTrekData |
||
986 | cmp [esi + TREKDATA.ALIVE], 0 |
||
987 | jne .L60 |
||
988 | |||
989 | mov ecx, 645 |
||
990 | call TConsole_Prout |
||
991 | |||
992 | .L60: |
||
993 | mcLoadLocal esi, loc57.pTrekData |
||
994 | cmp [esi + TREKDATA.GAMEWON], 0 |
||
995 | je .L70 |
||
996 | |||
997 | mov ecx, 646 |
||
998 | call TConsole_Cram |
||
999 | |||
1000 | movzx ecx, [esi + TREKDATA.SKILL] |
||
1001 | add ecx, 646 |
||
1002 | call TConsole_Cram |
||
1003 | |||
1004 | mcLoadLocal eax, loc57.nIWON |
||
1005 | mov cl, 25 |
||
1006 | call TConsole_CramIntWidth |
||
1007 | call TConsole_ScrollUp |
||
1008 | |||
1009 | .L70: |
||
1010 | call TConsole_ScrollUp |
||
1011 | |||
1012 | mov ecx, 652 |
||
1013 | call TConsole_Cram |
||
1014 | |||
1015 | mcLoadLocal eax, loc57.nISCORE |
||
1016 | mov [glb_Score], eax |
||
1017 | mov cl, 10 |
||
1018 | call TConsole_CramIntWidth |
||
1019 | call TConsole_ScrollUp |
||
1020 | |||
1021 | .done: |
||
1022 | mcEndLocals loc57.size |
||
1023 | ret |
||
1024 | |||
1025 | ; -------------------------------------------------------------------------- |
||
1026 | ; Input: |
||
1027 | ; ECX = index of the message table |
||
1028 | ; -------------------------------------------------------------------------- |
||
1029 | align PROC_ALIGN |
||
1030 | TGame_Prompt: |
||
1031 | push ebx |
||
1032 | |||
1033 | push ecx |
||
1034 | mov cl, ATTR_PROMPT_TEXT |
||
1035 | call TConsole_SetAttr |
||
1036 | pop ecx |
||
1037 | |||
1038 | call TConsole_Cram |
||
1039 | call TConsole_RefreshCaretLine |
||
1040 | lock dec [glb_GameThreadBusy] |
||
1041 | |||
1042 | .check_if_cmd_complete: |
||
1043 | mcZeroBits eax |
||
1044 | lock add [glb_GameThreadBusy], eax |
||
1045 | jnz .done |
||
1046 | |||
1047 | invoke Sleep, eax |
||
1048 | jmp .check_if_cmd_complete |
||
1049 | |||
1050 | .done: |
||
1051 | pop ebx |
||
1052 | ret |
||
1053 | |||
1054 | ; -------------------------------------------------------------------------- |
||
1055 | ; JA |
||
1056 | ; -------------------------------------------------------------------------- |
||
1057 | ; Input: |
||
1058 | ; ECX = prompt text index |
||
1059 | ; Output: |
||
1060 | ; CF=1 if user answered "YES" |
||
1061 | ; -------------------------------------------------------------------------- |
||
1062 | virtual at 0 |
||
1063 | loc27: |
||
1064 | .nMsgIndex INDEX ? |
||
1065 | .size = $ |
||
1066 | end virtual |
||
1067 | ; -------------------------------------------------------------------------- |
||
1068 | align PROC_ALIGN |
||
1069 | TGame_JA: |
||
1070 | mcBeginLocals loc27.size |
||
1071 | mcStoreLocal loc27.nMsgIndex, ecx |
||
1072 | |||
1073 | .ask: |
||
1074 | mcLoadLocal ecx, loc27.nMsgIndex |
||
1075 | call TGame_Prompt |
||
1076 | |||
1077 | call TCmdBuf_Scan |
||
1078 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL |
||
1079 | je .ask |
||
1080 | |||
1081 | mcLoad8bitsToReg32 ecx, 159 |
||
1082 | call TCmdBuf_Crop |
||
1083 | jc .return_yes |
||
1084 | |||
1085 | mcLoad8bitsToReg32 ecx, 122 |
||
1086 | call TCmdBuf_Crop |
||
1087 | jc .return_no |
||
1088 | |||
1089 | call TConsole_SetGameMsgAttr |
||
1090 | call TConsole_ScrollUp |
||
1091 | mcLoad8bitsToReg32 ecx, 160 |
||
1092 | call TConsole_Prout |
||
1093 | call TConsole_ScrollUp |
||
1094 | jmp .ask |
||
1095 | |||
1096 | .return_yes: |
||
1097 | mcEndLocals loc27.size |
||
1098 | stc |
||
1099 | ret |
||
1100 | |||
1101 | .return_no: |
||
1102 | mcEndLocals loc27.size |
||
1103 | clc |
||
1104 | ret |
||
1105 | |||
1106 | ; -------------------------------------------------------------------------- |
||
1107 | ; FREEZE |
||
1108 | ; -------------------------------------------------------------------------- |
||
1109 | ; glb_bEmExit = 0 means normal freezing |
||
1110 | ; glb_bEmExit = 1 means freezing into EMSAVE.TRK |
||
1111 | ; -------------------------------------------------------------------------- |
||
1112 | virtual at 0 |
||
1113 | loc89: |
||
1114 | .strFileName CHARS 32 |
||
1115 | .hFile HANDLE ? |
||
1116 | .dwSize COUNT ? |
||
1117 | .size = $ |
||
1118 | end virtual |
||
1119 | ; -------------------------------------------------------------------------- |
||
1120 | align PROC_ALIGN |
||
1121 | TGame_Freeze: |
||
1122 | mcBeginLocals loc89.size |
||
1123 | |||
1124 | mcLoadGameDataPtr edi |
||
1125 | mov [edi + TREKDATA.IDIDIT], 0 |
||
1126 | |||
1127 | cmp [glb_bEmExit], 1 |
||
1128 | je .emergency_exit |
||
1129 | |||
1130 | .ask_fname: |
||
1131 | mcLoadLocalRef esi, loc89.strFileName |
||
1132 | call TGame_GetFileName |
||
1133 | |||
1134 | cmp byte [esp], 0 |
||
1135 | je .L920 |
||
1136 | |||
1137 | invoke GetFileAttributes, esp |
||
1138 | mcOnRegEqu eax, -1, .save |
||
1139 | |||
1140 | mov cl, ATTR_PROMPT_TEXT |
||
1141 | call TConsole_SetAttr |
||
1142 | |||
1143 | mov ecx, 669 |
||
1144 | call TConsole_Cram |
||
1145 | |||
1146 | mov esi, esp |
||
1147 | call TConsole_CramAnsi |
||
1148 | |||
1149 | mov ecx, 670 |
||
1150 | call TGame_JA |
||
1151 | jnc .ask_fname |
||
1152 | jmp .save |
||
1153 | |||
1154 | .emergency_exit: |
||
1155 | mov esi, str_EmSaveGame |
||
1156 | mov edi, esp |
||
1157 | call TString_AnsiCopy |
||
1158 | |||
1159 | .save: |
||
1160 | mcZeroBits eax |
||
1161 | mcStoreLocal loc89.dwSize, eax |
||
1162 | |||
1163 | mov esi, esp |
||
1164 | invoke CreateFileAnsi, esi, GENERIC_WRITE, 0, 0,\ |
||
1165 | CREATE_ALWAYS, FILE_FLAG_SEQ_SCAN, 0 |
||
1166 | |||
1167 | mcStoreLocal loc89.hFile, eax |
||
1168 | mcOnRegEqu eax, -1, .L920 |
||
1169 | |||
1170 | mov esi, [glb_pCommon] |
||
1171 | mov ecx, TCommon.size |
||
1172 | mcLoadLocal ebx, loc89.hFile |
||
1173 | mcLoadLocalRef edi, loc89.dwSize |
||
1174 | invoke WriteFile, ebx, esi, ecx, edi, 0 |
||
1175 | |||
1176 | invoke CloseHandle, ebx |
||
1177 | |||
1178 | mov ecx, TCommon.size |
||
1179 | cmp [edi], ecx |
||
1180 | jne .L920 |
||
1181 | |||
1182 | .file_stored: |
||
1183 | mcLoadGameDataPtr edi |
||
1184 | inc [edi + TREKDATA.IDIDIT] |
||
1185 | |||
1186 | mov ecx, 666 |
||
1187 | call TConsole_ProutGameMsg |
||
1188 | jmp .done |
||
1189 | |||
1190 | .L920: |
||
1191 | mov ecx, 667 |
||
1192 | call TConsole_ProutGameMsg |
||
1193 | |||
1194 | .done: |
||
1195 | mcEndLocals loc89.size |
||
1196 | ret |
||
1197 | |||
1198 | ; -------------------------------------------------------------------------- |
||
1199 | align PROC_ALIGN |
||
1200 | TGame_Prelim: |
||
1201 | mcLoad8bitsToReg32 ecx, 92 |
||
1202 | call TConsole_ProutGameMsg |
||
1203 | dec ecx |
||
1204 | call TConsole_Prout |
||
1205 | |||
1206 | mcLoad1 ecx |
||
1207 | call TConsole_Prout |
||
1208 | |||
1209 | mcLoad8bitsToReg32 ecx, 91 |
||
1210 | call TConsole_Prout |
||
1211 | inc ecx |
||
1212 | call TConsole_Prout |
||
1213 | dec ecx |
||
1214 | call TConsole_Prout |
||
1215 | |||
1216 | mov ecx, 654 |
||
1217 | call TConsole_Prout |
||
1218 | inc ecx |
||
1219 | call TConsole_Prout |
||
1220 | inc ecx |
||
1221 | call TConsole_Prout |
||
1222 | |||
1223 | mcLoad8bitsToReg32 ecx, 91 |
||
1224 | call TConsole_Prout |
||
1225 | |||
1226 | mov ecx, 657 |
||
1227 | call TConsole_Prout |
||
1228 | inc ecx |
||
1229 | call TConsole_Prout |
||
1230 | |||
1231 | mcLoad8bitsToReg32 ecx, 91 |
||
1232 | call TConsole_Prout |
||
1233 | |||
1234 | mov ecx, 659 |
||
1235 | call TConsole_Prout |
||
1236 | inc ecx |
||
1237 | call TConsole_Prout |
||
1238 | inc ecx |
||
1239 | call TConsole_Prout |
||
1240 | inc ecx |
||
1241 | call TConsole_Prout |
||
1242 | |||
1243 | mcLoad8bitsToReg32 ecx, 91 |
||
1244 | call TConsole_Prout |
||
1245 | call TConsole_Prout |
||
1246 | |||
1247 | mov ecx, 663 |
||
1248 | call TConsole_Prout |
||
1249 | mcLoad8bitsToReg32 ecx, 92 |
||
1250 | call TConsole_Prout |
||
1251 | |||
1252 | mov cl, 5 |
||
1253 | call TConsole_Skip |
||
1254 | ret |
||
1255 | |||
1256 | ; -------------------------------------------------------------------------- |
||
1257 | ; ESI = points to file name |
||
1258 | ; -------------------------------------------------------------------------- |
||
1259 | align PROC_ALIGN |
||
1260 | TGame_CutTheExtension: |
||
1261 | mov edi, esi |
||
1262 | mov al, '.' |
||
1263 | mcLoadNeg1 ecx |
||
1264 | repne scasb |
||
1265 | dec edi |
||
1266 | mov byte [edi], 0 |
||
1267 | ret |
||
1268 | |||
1269 | ; -------------------------------------------------------------------------- |
||
1270 | virtual at 0 |
||
1271 | loc101: |
||
1272 | .fileInfo rb WIN32_FIND_DATA.size |
||
1273 | .hFind HANDLE ? |
||
1274 | .nFilesPerLine COUNT ? |
||
1275 | .size = $ |
||
1276 | end virtual |
||
1277 | ; -------------------------------------------------------------------------- |
||
1278 | align PROC_ALIGN |
||
1279 | TGame_ListFrozenGames: |
||
1280 | mcBeginLocals loc101.size |
||
1281 | |||
1282 | invoke FindFirstFile, str_FileMask, esp |
||
1283 | mcStoreLocal loc101.hFind, eax |
||
1284 | mcOnRegEqu eax, -1, .done |
||
1285 | |||
1286 | mov cl, ATTR_SCAN_SCALE |
||
1287 | call TConsole_SetAttr |
||
1288 | call TConsole_ScrollUp |
||
1289 | mov ecx, 709 |
||
1290 | call TConsole_Prout |
||
1291 | call TConsole_ScrollUp |
||
1292 | mov [esp + loc101.nFilesPerLine], 4 |
||
1293 | |||
1294 | .list_that_file: |
||
1295 | mov eax, [esp + WIN32_FIND_DATA.dwAttr] |
||
1296 | test eax, FILE_ATTR_DIR |
||
1297 | jnz .next |
||
1298 | |||
1299 | mov cl, 2 |
||
1300 | call TConsole_RepeatBlank |
||
1301 | |||
1302 | lea esi, [esp + WIN32_FIND_DATA.strName] |
||
1303 | call TGame_CutTheExtension |
||
1304 | call TConsole_CramWide |
||
1305 | |||
1306 | dec [esp + loc101.nFilesPerLine] |
||
1307 | jnz .next |
||
1308 | |||
1309 | mov [esp + loc101.nFilesPerLine], 4 |
||
1310 | call TConsole_ScrollUp |
||
1311 | |||
1312 | .next: |
||
1313 | mcLoadLocal edx, loc101.hFind |
||
1314 | invoke FindNextFile, edx, esp |
||
1315 | mcOnRegNotZero eax, .list_that_file |
||
1316 | |||
1317 | call TConsole_ScrollUp |
||
1318 | |||
1319 | cmp [esp + loc101.nFilesPerLine], 4 |
||
1320 | je .done |
||
1321 | |||
1322 | call TConsole_ScrollUp |
||
1323 | |||
1324 | .done: |
||
1325 | mcEndLocals loc101.size |
||
1326 | ret |
||
1327 | |||
1328 | ; -------------------------------------------------------------------------- |
||
1329 | ; THAW |
||
1330 | ; -------------------------------------------------------------------------- |
||
1331 | virtual at 0 |
||
1332 | loc87: |
||
1333 | .fileName CHARS 32 |
||
1334 | .hFile HANDLE ? |
||
1335 | .dwSize COUNT ? |
||
1336 | .size = $ |
||
1337 | end virtual |
||
1338 | ; -------------------------------------------------------------------------- |
||
1339 | align PROC_ALIGN |
||
1340 | TGame_Thaw: |
||
1341 | mcBeginLocals loc87.size |
||
1342 | |||
1343 | mcLoadGameDataPtr edi |
||
1344 | mov [edi + TREKDATA.IDIDIT], 0 |
||
1345 | |||
1346 | .ask_fname: |
||
1347 | mov esi, esp |
||
1348 | call TGame_GetFileName |
||
1349 | |||
1350 | cmp byte [esp], 0 |
||
1351 | je .L800 |
||
1352 | |||
1353 | invoke GetFileAttributes, esp |
||
1354 | mcOnRegEqu eax, -1, .no_such_file |
||
1355 | |||
1356 | mov esi, esp |
||
1357 | invoke CreateFileAnsi, esi, GENERIC_READ, 0, 0,\ |
||
1358 | OPEN_EXISTING, FILE_FLAG_SEQ_SCAN, 0 |
||
1359 | |||
1360 | mcStoreLocal loc87.hFile, eax |
||
1361 | mcOnRegEqu eax, -1, .L800 |
||
1362 | |||
1363 | mov esi, [glb_pCommon] |
||
1364 | mov ecx, TCommon.size |
||
1365 | mcLoadLocal ebx, loc87.hFile |
||
1366 | mcLoadLocalRef edi, loc87.dwSize |
||
1367 | mov dword [edi], 0 |
||
1368 | invoke ReadFile, ebx, esi, ecx, edi, 0 |
||
1369 | |||
1370 | invoke CloseHandle, ebx |
||
1371 | |||
1372 | mov ecx, TCommon.size |
||
1373 | cmp [edi], ecx |
||
1374 | jne .L800 |
||
1375 | |||
1376 | mov ecx, 671 |
||
1377 | call TConsole_ProutGameMsg |
||
1378 | jmp .done |
||
1379 | |||
1380 | .no_such_file: |
||
1381 | mov esi, esp |
||
1382 | mov edi, str_CmdListGames |
||
1383 | call TString_AnsiEqual |
||
1384 | jc .list_all_files |
||
1385 | |||
1386 | mov ecx, 673 |
||
1387 | call TConsole_ProutGameMsg |
||
1388 | jmp .ask_fname |
||
1389 | |||
1390 | .list_all_files: |
||
1391 | call TGame_ListFrozenGames |
||
1392 | jmp .ask_fname |
||
1393 | |||
1394 | .L800: |
||
1395 | ; |
||
1396 | ; Game was not loaded |
||
1397 | ; |
||
1398 | mcLoadGameDataPtr edi |
||
1399 | add edi, TREKDATA.PASSWD |
||
1400 | mov byte [edi], 0 |
||
1401 | |||
1402 | mov ecx, 672 |
||
1403 | call TConsole_ProutGameMsg |
||
1404 | |||
1405 | .done: |
||
1406 | mcEndLocals loc87.size |
||
1407 | ret |
||
1408 | |||
1409 | ; -------------------------------------------------------------------------- |
||
1410 | ; Input: |
||
1411 | ; ESI = token for hashing and initializing the RNG |
||
1412 | ; -------------------------------------------------------------------------- |
||
1413 | align PROC_ALIGN |
||
1414 | TGame_InitTournament: |
||
1415 | mcZeroBits eax |
||
1416 | mcZeroBits edx |
||
1417 | |||
1418 | .next_char: |
||
1419 | mov dl, [esi] |
||
1420 | inc esi |
||
1421 | mcOnRegZero edx, .seed_RNG_with_EAX |
||
1422 | |||
1423 | shl eax, 5 |
||
1424 | xor al, dl |
||
1425 | jmp .next_char |
||
1426 | |||
1427 | .seed_RNG_with_EAX: |
||
1428 | call TRandom_Seed |
||
1429 | |||
1430 | mcLoadGameDataPtr ebx |
||
1431 | mcLoadNeg1 eax |
||
1432 | mcStoreMember TREKDATA.THINGX, al |
||
1433 | mcStoreMember TREKDATA.THINGY, al |
||
1434 | ret |
||
1435 | |||
1436 | ; -------------------------------------------------------------------------- |
||
1437 | ; Output: |
||
1438 | ; ECX = TRUE if FROZEN game is selected |
||
1439 | ; -------------------------------------------------------------------------- |
||
1440 | virtual at 0 |
||
1441 | loc10: |
||
1442 | .bFrozen BOOL ? |
||
1443 | .pszToken PCHAR ? |
||
1444 | .size = $ |
||
1445 | end virtual |
||
1446 | ; -------------------------------------------------------------------------- |
||
1447 | align PROC_ALIGN |
||
1448 | TGame_Choose: |
||
1449 | mcBeginLocals loc10.size |
||
1450 | |||
1451 | mcZeroBits eax |
||
1452 | mcLoadGameDataPtr edi |
||
1453 | mov ecx, TREKDATA.size |
||
1454 | rep stosb |
||
1455 | |||
1456 | .L5: |
||
1457 | mcZeroBits eax |
||
1458 | mcStoreLocal loc10.bFrozen, eax |
||
1459 | |||
1460 | mcLoad8bitsToReg32 ecx, 3 |
||
1461 | call TGame_Prompt |
||
1462 | |||
1463 | call TCmdBuf_Scan |
||
1464 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL |
||
1465 | je .L5 |
||
1466 | |||
1467 | mcLoad8bitsToReg32 ecx, 10 |
||
1468 | call TCmdBuf_Crop |
||
1469 | jc .L9 |
||
1470 | |||
1471 | mcLoad8bitsToReg32 ecx, 11 |
||
1472 | call TCmdBuf_Crop |
||
1473 | jc .L100 |
||
1474 | |||
1475 | mcLoad8bitsToReg32 ecx, 12 |
||
1476 | call TCmdBuf_Crop |
||
1477 | jc .L200 |
||
1478 | jmp .L5 |
||
1479 | |||
1480 | .L9: |
||
1481 | mcZeroBits eax |
||
1482 | mcLoadGameDataPtr ebx |
||
1483 | mcStoreMember TREKDATA.SKILL, al |
||
1484 | mcStoreMember TREKDATA.LENGTH, al |
||
1485 | |||
1486 | .L10: |
||
1487 | call TCmdBuf_Scan |
||
1488 | mcStoreLocal loc10.pszToken, esi |
||
1489 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_ALPHA |
||
1490 | jne .L20 |
||
1491 | ; |
||
1492 | ; Check for different kinds of games |
||
1493 | ; |
||
1494 | mcZeroBits eax |
||
1495 | mov ebx, [glb_pGameData] |
||
1496 | mcStoreMember TREKDATA.KSTUF5, al |
||
1497 | |||
1498 | mcLoad8bitsToReg32 ecx, 74 |
||
1499 | call TCmdBuf_Crop |
||
1500 | jnc .check_medium |
||
1501 | |||
1502 | mov [ebx + TREKDATA.LENGTH], 1 |
||
1503 | |||
1504 | .check_medium: |
||
1505 | mcLoad8bitsToReg32 ecx, 75 |
||
1506 | call TCmdBuf_Crop |
||
1507 | jnc .check_long |
||
1508 | |||
1509 | mov [ebx + TREKDATA.LENGTH], 2 |
||
1510 | |||
1511 | .check_long: |
||
1512 | mcLoad8bitsToReg32 ecx, 76 |
||
1513 | call TCmdBuf_Crop |
||
1514 | jnc .check_novice |
||
1515 | |||
1516 | mov [ebx + TREKDATA.LENGTH], 4 |
||
1517 | |||
1518 | .check_novice: |
||
1519 | mcLoad8bitsToReg32 ecx, 13 |
||
1520 | call TCmdBuf_Crop |
||
1521 | jnc .check_fair |
||
1522 | |||
1523 | mov [ebx + TREKDATA.SKILL], 1 |
||
1524 | |||
1525 | .check_fair: |
||
1526 | mcLoad8bitsToReg32 ecx, 14 |
||
1527 | call TCmdBuf_Crop |
||
1528 | jnc .check_good |
||
1529 | |||
1530 | mov [ebx + TREKDATA.SKILL], 2 |
||
1531 | |||
1532 | .check_good: |
||
1533 | mcLoad8bitsToReg32 ecx, 15 |
||
1534 | call TCmdBuf_Crop |
||
1535 | jnc .check_expert |
||
1536 | |||
1537 | mov [ebx + TREKDATA.SKILL], 3 |
||
1538 | |||
1539 | .check_expert: |
||
1540 | mcLoad8bitsToReg32 ecx, 16 |
||
1541 | call TCmdBuf_Crop |
||
1542 | jnc .check_emeritus |
||
1543 | |||
1544 | mov [ebx + TREKDATA.SKILL], 4 |
||
1545 | mov [ebx + TREKDATA.KSTUF5], 1 |
||
1546 | |||
1547 | .check_emeritus: |
||
1548 | mcLoad8bitsToReg32 ecx, 17 |
||
1549 | call TCmdBuf_Crop |
||
1550 | jnc .check_both_entered |
||
1551 | |||
1552 | mov [ebx + TREKDATA.SKILL], 5 |
||
1553 | mov [ebx + TREKDATA.KSTUF5], 2 |
||
1554 | |||
1555 | .check_both_entered: |
||
1556 | cmp [ebx + TREKDATA.LENGTH], 0 |
||
1557 | je .L10 |
||
1558 | cmp [ebx + TREKDATA.SKILL], 0 |
||
1559 | je .L10 |
||
1560 | jmp .L30 |
||
1561 | |||
1562 | .L20: |
||
1563 | mov ebx, [glb_pGameData] |
||
1564 | cmp [ebx + TREKDATA.LENGTH], 0 |
||
1565 | jne .L25 |
||
1566 | |||
1567 | mcLoad8bitsToReg32 ecx, 4 |
||
1568 | call TGame_Prompt |
||
1569 | jmp .L10 |
||
1570 | |||
1571 | .L25: |
||
1572 | cmp [ebx + TREKDATA.SKILL], 0 |
||
1573 | jne .L30 |
||
1574 | |||
1575 | mcLoad8bitsToReg32 ecx, 5 |
||
1576 | call TGame_Prompt |
||
1577 | jmp .L10 |
||
1578 | |||
1579 | .L30: |
||
1580 | ; |
||
1581 | ; Read in secret password |
||
1582 | ; |
||
1583 | call TCmdBuf_Scan |
||
1584 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL |
||
1585 | jne .L40 |
||
1586 | |||
1587 | .ask_password: |
||
1588 | mcLoad8bitsToReg32 ecx, 6 |
||
1589 | call TGame_Prompt |
||
1590 | jmp .L30 |
||
1591 | |||
1592 | .L40: |
||
1593 | call TCmdBuf_AnsiStrLen |
||
1594 | cmp ecx, 8 |
||
1595 | ja .ask_password |
||
1596 | |||
1597 | mov edi, [glb_pGameData] |
||
1598 | push edi |
||
1599 | add edi, TREKDATA.PASSWD |
||
1600 | inc ecx |
||
1601 | rep movsb |
||
1602 | pop edi |
||
1603 | ; |
||
1604 | ; Use parameters to generate initial game values |
||
1605 | ; |
||
1606 | mov al, [edi + TREKDATA.SKILL] |
||
1607 | call TCommon_LoadByteIntoFPU |
||
1608 | fld [glb_dbl_0dot5] |
||
1609 | fmulp |
||
1610 | fstp [edi + TREKDATA.DAMFAC] |
||
1611 | |||
1612 | mcLoad8bitsToReg32 edx, 3 |
||
1613 | call TRandom_IRan |
||
1614 | add eax, 2 |
||
1615 | mov [edi + TREKDATA.REMBASE], al |
||
1616 | |||
1617 | mcLoad8bitsToReg32 edx, 6 |
||
1618 | call TRandom_IRan |
||
1619 | add eax, 5 |
||
1620 | mov [edi + TREKDATA.INPLAN], al |
||
1621 | |||
1622 | call TRandom_Ranf |
||
1623 | fld [glb_dbl_2] |
||
1624 | faddp |
||
1625 | mov al, [edi + TREKDATA.SKILL] |
||
1626 | call TCommon_LoadByteIntoFPU |
||
1627 | fmulp |
||
1628 | call TCommon_FP_Truncate |
||
1629 | mov [edi + TREKDATA.NROMREM], al |
||
1630 | |||
1631 | movzx eax, [edi + TREKDATA.SKILL] |
||
1632 | mcZeroBits edx |
||
1633 | mcLoad8bitsToReg32 ecx, 3 |
||
1634 | div ecx |
||
1635 | mov [edi + TREKDATA.NSCREM], al |
||
1636 | |||
1637 | mov al, [edi + TREKDATA.LENGTH] |
||
1638 | call TCommon_LoadByteIntoFPU |
||
1639 | fld [glb_dbl_7] |
||
1640 | fmulp |
||
1641 | fld st |
||
1642 | fstp [edi + TREKDATA.REMTIME] |
||
1643 | fstp [edi + TREKDATA.INTIME] |
||
1644 | |||
1645 | call TRandom_Ranf |
||
1646 | fld st |
||
1647 | faddp ; 2*RANF(0) |
||
1648 | |||
1649 | mov al, [edi + TREKDATA.SKILL] |
||
1650 | call TCommon_LoadByteIntoFPU |
||
1651 | fsubrp ; SKILL - 2*RANF(0) |
||
1652 | |||
1653 | fld1 |
||
1654 | faddp ; SKILL - 2*RAND(0) + 1.0 |
||
1655 | |||
1656 | fild [glb_FPU_Int32] |
||
1657 | fmulp ; (SKILL - 2*RANF(0) + 1.0)*SKILL |
||
1658 | |||
1659 | fld [glb_dbl_0dot1] |
||
1660 | fmulp ; (SKILL - 2*RANF(0) + 1.0)*SKILL*0.1 |
||
1661 | |||
1662 | fld [glb_dbl_0dot15] |
||
1663 | faddp ; RATE = ... + 0.15 |
||
1664 | |||
1665 | fld st |
||
1666 | faddp |
||
1667 | fld [edi + TREKDATA.INTIME] |
||
1668 | fmulp |
||
1669 | call TCommon_FP_Truncate |
||
1670 | mov [edi + TREKDATA.REMKL], al |
||
1671 | mov [edi + TREKDATA.INKLING], al |
||
1672 | |||
1673 | call TCommon_LoadByteIntoFPU |
||
1674 | call TRandom_Ranf |
||
1675 | fmulp |
||
1676 | fld [glb_dbl_0dot0625] |
||
1677 | fmulp |
||
1678 | call TCommon_FP_Truncate |
||
1679 | add al, [edi + TREKDATA.SKILL] |
||
1680 | |||
1681 | cmp al, 10 |
||
1682 | jbe .store_commander_count |
||
1683 | |||
1684 | mov al, 10 |
||
1685 | |||
1686 | .store_commander_count: |
||
1687 | mov [edi + TREKDATA.INCOM], al |
||
1688 | mov [edi + TREKDATA.REMCOM], al |
||
1689 | |||
1690 | shl al, 2 |
||
1691 | add al, [edi + TREKDATA.INKLING] |
||
1692 | call TCommon_LoadByteIntoFPU |
||
1693 | fld [edi + TREKDATA.INTIME] |
||
1694 | fmulp |
||
1695 | fld st |
||
1696 | fstp [edi + TREKDATA.REMRES] |
||
1697 | fstp [edi + TREKDATA.INRESOR] |
||
1698 | |||
1699 | cmp [edi + TREKDATA.INKLING], 50 |
||
1700 | jbe .store_initial_base_count |
||
1701 | |||
1702 | inc [edi + TREKDATA.REMBASE] |
||
1703 | |||
1704 | .store_initial_base_count: |
||
1705 | mov al, [edi + TREKDATA.REMBASE] |
||
1706 | mov [edi + TREKDATA.INBASE], al |
||
1707 | jmp .done |
||
1708 | |||
1709 | .L100: |
||
1710 | ; |
||
1711 | ; Process a tournament request |
||
1712 | ; |
||
1713 | call TCmdBuf_Scan |
||
1714 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL |
||
1715 | je .ask_tnumber |
||
1716 | |||
1717 | call TGame_InitTournament |
||
1718 | jmp .L9 |
||
1719 | |||
1720 | .ask_tnumber: |
||
1721 | mcLoad8bitsToReg32 ecx, 7 |
||
1722 | call TGame_Prompt |
||
1723 | jmp .L100 |
||
1724 | |||
1725 | .L200: |
||
1726 | ; |
||
1727 | ; Frozen game requested |
||
1728 | ; |
||
1729 | call TGame_Thaw |
||
1730 | mov esi, [glb_pGameData] |
||
1731 | cmp [esi + TREKDATA.PASSWD], 0 |
||
1732 | je .L5 |
||
1733 | ; |
||
1734 | ; Game loaded |
||
1735 | ; |
||
1736 | inc [esp + loc10.bFrozen] |
||
1737 | mov ebx, [glb_pGameData] |
||
1738 | mcZeroBits eax |
||
1739 | mov [ebx + TREKDATA.THINGX], al |
||
1740 | mov [ebx + TREKDATA.THINGY], al |
||
1741 | |||
1742 | lea esi, [ebx + TREKDATA.QUAD] |
||
1743 | mcLoad8bitsToReg32 ecx, 100 |
||
1744 | |||
1745 | .erase_things: |
||
1746 | cmp byte [esi], CHAR_THING |
||
1747 | jne .no_thing |
||
1748 | |||
1749 | mov byte [esi], CHAR_COSMOS |
||
1750 | |||
1751 | .no_thing: |
||
1752 | inc esi |
||
1753 | loop .erase_things |
||
1754 | |||
1755 | mov [ebx + TREKDATA.IDIDIT], 1 |
||
1756 | call TGame_Report |
||
1757 | |||
1758 | .done: |
||
1759 | mcLoadLocal ecx, loc10.bFrozen |
||
1760 | mcEndLocals loc10.size |
||
1761 | ret |
||
1762 | |||
1763 | ; -------------------------------------------------------------------------- |
||
1764 | align PROC_ALIGN |
||
1765 | TGame_ListAllCommands: |
||
1766 | call TConsole_SetGameMsgAttr |
||
1767 | call TConsole_ScrollUp |
||
1768 | mcLoad8bitsToReg32 ecx, 8 |
||
1769 | call TConsole_Prout |
||
1770 | |||
1771 | mcLoad8bitsToReg32 edx, 8 |
||
1772 | mcLoad8bitsToReg32 ecx, 76 |
||
1773 | |||
1774 | .next: |
||
1775 | inc ecx |
||
1776 | push edx |
||
1777 | call TConsole_Prout |
||
1778 | pop edx |
||
1779 | dec edx |
||
1780 | jnz .next |
||
1781 | |||
1782 | call TConsole_ScrollUp |
||
1783 | ret |
||
1784 | |||
1785 | ; -------------------------------------------------------------------------- |
||
1786 | virtual at 0 |
||
1787 | loc99: |
||
1788 | .OldSectX BYTE ? |
||
1789 | .OldSectY BYTE ? |
||
1790 | .NewSectX BYTE ? |
||
1791 | .NewSectY BYTE ? |
||
1792 | .CharEnemy BYTE ? |
||
1793 | .__align_1 BYTE ? |
||
1794 | .__align_2 BYTE ? |
||
1795 | .__align_3 BYTE ? |
||
1796 | .size = $ |
||
1797 | end virtual |
||
1798 | ; -------------------------------------------------------------------------- |
||
1799 | align PROC_ALIGN |
||
1800 | TGame_DbgMoveEnemy: |
||
1801 | mcBeginLocals loc99.size |
||
1802 | |||
1803 | mov ecx, 714 |
||
1804 | call TGame_Prompt |
||
1805 | |||
1806 | call TCmdBuf_Scan |
||
1807 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL |
||
1808 | jne .done |
||
1809 | |||
1810 | mov eax, [ebx + TCmdBuf.cmdbuf_INUM] |
||
1811 | mcStoreLocal loc99.OldSectX, al |
||
1812 | |||
1813 | call TCmdBuf_Scan |
||
1814 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL |
||
1815 | jne .done |
||
1816 | |||
1817 | mov eax, [ebx + TCmdBuf.cmdbuf_INUM] |
||
1818 | mcStoreLocal loc99.OldSectY, al |
||
1819 | |||
1820 | call TCmdBuf_Scan |
||
1821 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL |
||
1822 | jne .done |
||
1823 | |||
1824 | mov eax, [ebx + TCmdBuf.cmdbuf_INUM] |
||
1825 | mcStoreLocal loc99.NewSectX, al |
||
1826 | |||
1827 | call TCmdBuf_Scan |
||
1828 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL |
||
1829 | jne .done |
||
1830 | |||
1831 | mov eax, [ebx + TCmdBuf.cmdbuf_INUM] |
||
1832 | mcStoreLocal loc99.NewSectY, al |
||
1833 | |||
1834 | movzx eax, [esp + loc99.NewSectX] |
||
1835 | call TPhotons_IsValidSector |
||
1836 | jnc .done |
||
1837 | |||
1838 | movzx eax, [esp + loc99.NewSectY] |
||
1839 | call TPhotons_IsValidSector |
||
1840 | jnc .done |
||
1841 | |||
1842 | mcLoadGameDataPtr ebx |
||
1843 | mcZeroBits ecx |
||
1844 | mcLoadMember cl, TREKDATA.NENHERE |
||
1845 | jecxz .done |
||
1846 | |||
1847 | mcLoadMemberRef esi, TREKDATA.KX |
||
1848 | mcLoadMemberRef edi, TREKDATA.KY |
||
1849 | |||
1850 | mcLoadLocal al, loc99.OldSectX |
||
1851 | mcLoadLocal dl, loc99.OldSectY |
||
1852 | |||
1853 | .check_sector: |
||
1854 | cmp al, [esi] |
||
1855 | jne .next |
||
1856 | |||
1857 | cmp dl, [edi] |
||
1858 | je .move_klingon |
||
1859 | |||
1860 | .next: |
||
1861 | inc esi |
||
1862 | inc edi |
||
1863 | loop .check_sector |
||
1864 | jmp .done |
||
1865 | |||
1866 | .move_klingon: |
||
1867 | mcLoadLocal al, loc99.NewSectX |
||
1868 | mcLoadLocal dl, loc99.NewSectY |
||
1869 | |||
1870 | mov [esi], al |
||
1871 | mov [edi], dl |
||
1872 | |||
1873 | mcLoadLocal al, loc99.OldSectX |
||
1874 | mcLoadLocal dl, loc99.OldSectY |
||
1875 | call TArray_QuadPtr |
||
1876 | |||
1877 | mov al, [ebx] |
||
1878 | mov byte [ebx], CHAR_COSMOS |
||
1879 | mcStoreLocal loc99.CharEnemy, al |
||
1880 | |||
1881 | mcLoadLocal al, loc99.NewSectX |
||
1882 | mcLoadLocal dl, loc99.NewSectY |
||
1883 | call TArray_QuadPtr |
||
1884 | mcLoadLocal al, loc99.CharEnemy |
||
1885 | mov [ebx], al |
||
1886 | |||
1887 | call TCommon_SortKlingons |
||
1888 | |||
1889 | .done: |
||
1890 | mcEndLocals loc99.size |
||
1891 | ret |
||
1892 | |||
1893 | ; -------------------------------------------------------------------------- |
||
1894 | virtual at 0 |
||
1895 | loc98: |
||
1896 | .ShipQuadX BYTE ? |
||
1897 | .ShipQuadY BYTE ? |
||
1898 | .__align_1 BYTE ? |
||
1899 | .__align_2 BYTE ? |
||
1900 | .size = $ |
||
1901 | end virtual |
||
1902 | ; -------------------------------------------------------------------------- |
||
1903 | align PROC_ALIGN |
||
1904 | TGame_DbgMoveShip: |
||
1905 | mcBeginLocals loc98.size |
||
1906 | |||
1907 | mov ecx, 168 |
||
1908 | call TGame_Prompt |
||
1909 | |||
1910 | call TCmdBuf_Scan |
||
1911 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL |
||
1912 | jne .done |
||
1913 | |||
1914 | mov eax, [ebx + TCmdBuf.cmdbuf_INUM] |
||
1915 | call TGame_IsValidQuadrant |
||
1916 | jnc .done |
||
1917 | mcStoreLocal loc98.ShipQuadX, al |
||
1918 | |||
1919 | call TCmdBuf_Scan |
||
1920 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL |
||
1921 | jne .done |
||
1922 | |||
1923 | mov eax, [ebx + TCmdBuf.cmdbuf_INUM] |
||
1924 | call TGame_IsValidQuadrant |
||
1925 | jnc .done |
||
1926 | mcStoreLocal loc98.ShipQuadY, al |
||
1927 | |||
1928 | mcLoadGameDataPtr esi |
||
1929 | cmp al, [esi + TREKDATA.QUADY] |
||
1930 | jne .move_ship |
||
1931 | |||
1932 | mov al, [esi + TREKDATA.QUADX] |
||
1933 | cmp [esp + loc98.ShipQuadX], al |
||
1934 | je .done |
||
1935 | |||
1936 | .move_ship: |
||
1937 | mcLoadLocal al, loc98.ShipQuadX |
||
1938 | mcLoadLocal dl, loc98.ShipQuadY |
||
1939 | |||
1940 | mov [esi + TREKDATA.QUADX], al |
||
1941 | mov [esi + TREKDATA.QUADY], dl |
||
1942 | |||
1943 | call TCommon_NewQuad |
||
1944 | |||
1945 | .done: |
||
1946 | mcEndLocals loc98.size |
||
1947 | ret |
||
1948 | |||
1949 | ; -------------------------------------------------------------------------- |
||
1950 | ; PROGRAM STARTRK from original FORTRAN source |
||
1951 | ; -------------------------------------------------------------------------- |
||
1952 | align PROC_ALIGN |
||
1953 | TGame_Thread: |
||
1954 | mcProlog |
||
1955 | call TGame_Prelim |
||
1956 | |||
1957 | .L10: |
||
1958 | call TGame_Choose |
||
1959 | mcOnRegNotZero ecx, .L15 |
||
1960 | |||
1961 | call TCommon_Setup |
||
1962 | |||
1963 | .L15: |
||
1964 | mov [glb_MOVED], 0 |
||
1965 | |||
1966 | .L20: |
||
1967 | mov esi, [glb_pGameData] |
||
1968 | cmp [esi + TREKDATA.ALLDONE], 0 |
||
1969 | jne .L9999 |
||
1970 | |||
1971 | .reset_before_cmd: |
||
1972 | mcZeroBits eax |
||
1973 | mov [esi + TREKDATA.JUSTIN], al |
||
1974 | mov [esi + TREKDATA.KDIDIT], al |
||
1975 | |||
1976 | fldz |
||
1977 | fstp [esi + TREKDATA.TIME] |
||
1978 | |||
1979 | mcLoad8bitsToReg32 ecx, 2 |
||
1980 | call TGame_Prompt |
||
1981 | |||
1982 | call TCmdBuf_Scan |
||
1983 | cmp [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL |
||
1984 | je .L20 |
||
1985 | |||
1986 | mcLoad8bitsToReg32 ecx, 18 |
||
1987 | call TCmdBuf_Crop |
||
1988 | jc .L100 |
||
1989 | |||
1990 | mcLoad8bitsToReg32 ecx, 26 |
||
1991 | call TCmdBuf_Crop |
||
1992 | jc .L200 |
||
1993 | |||
1994 | mcLoad8bitsToReg32 ecx, 20 |
||
1995 | call TCmdBuf_Crop |
||
1996 | jc .L300 |
||
1997 | |||
1998 | mcLoad8bitsToReg32 ecx, 24 |
||
1999 | call TCmdBuf_Crop |
||
2000 | jc .L400 |
||
2001 | |||
2002 | mcLoad8bitsToReg32 ecx, 19 |
||
2003 | call TCmdBuf_Crop |
||
2004 | jc .L500 |
||
2005 | |||
2006 | mcLoad8bitsToReg32 ecx, 28 |
||
2007 | call TCmdBuf_Crop |
||
2008 | jc .L600 |
||
2009 | |||
2010 | mcLoad8bitsToReg32 ecx, 32 |
||
2011 | call TCmdBuf_Crop |
||
2012 | jc .L700 |
||
2013 | |||
2014 | mcLoad8bitsToReg32 ecx, 34 |
||
2015 | call TCmdBuf_Crop |
||
2016 | jc .L800 |
||
2017 | |||
2018 | mcLoad8bitsToReg32 ecx, 30 |
||
2019 | call TCmdBuf_Crop |
||
2020 | jc .L900 |
||
2021 | |||
2022 | mcLoad8bitsToReg32 ecx, 23 |
||
2023 | call TCmdBuf_Crop |
||
2024 | jc .L1000 |
||
2025 | |||
2026 | mcLoad8bitsToReg32 ecx, 31 |
||
2027 | call TCmdBuf_Crop |
||
2028 | jc .L1100 |
||
2029 | |||
2030 | mcLoad8bitsToReg32 ecx, 27 |
||
2031 | call TCmdBuf_Crop |
||
2032 | jc .L1200 |
||
2033 | |||
2034 | mcLoad8bitsToReg32 ecx, 22 |
||
2035 | call TCmdBuf_Crop |
||
2036 | jc .L1300 |
||
2037 | |||
2038 | mcLoad8bitsToReg32 ecx, 36 |
||
2039 | call TCmdBuf_Crop |
||
2040 | jc .L1400 |
||
2041 | |||
2042 | mcLoad8bitsToReg32 ecx, 37 |
||
2043 | call TCmdBuf_Crop |
||
2044 | jc .L1450 |
||
2045 | |||
2046 | mcLoad8bitsToReg32 ecx, 38 |
||
2047 | call TCmdBuf_Crop |
||
2048 | jc .L1500 |
||
2049 | |||
2050 | mcLoad8bitsToReg32 ecx, 39 |
||
2051 | call TCmdBuf_Crop |
||
2052 | jc .L1550 |
||
2053 | |||
2054 | mcLoad8bitsToReg32 ecx, 40 |
||
2055 | call TCmdBuf_Crop |
||
2056 | jc .L1600 |
||
2057 | |||
2058 | mcLoad8bitsToReg32 ecx, 41 |
||
2059 | call TCmdBuf_Crop |
||
2060 | jc .L1650 |
||
2061 | |||
2062 | mcLoad8bitsToReg32 ecx, 42 |
||
2063 | call TCmdBuf_Crop |
||
2064 | jc .L1670 |
||
2065 | |||
2066 | mcLoad8bitsToReg32 ecx, 43 |
||
2067 | call TCmdBuf_Crop |
||
2068 | jc .L1680 |
||
2069 | |||
2070 | mcLoad8bitsToReg32 ecx, 45 |
||
2071 | call TCmdBuf_Crop |
||
2072 | jc .L1685 |
||
2073 | |||
2074 | mcLoad8bitsToReg32 ecx, 46 |
||
2075 | call TCmdBuf_Crop |
||
2076 | jc .L1690 |
||
2077 | ; |
||
2078 | ; Non-abbreviated commands (checking) |
||
2079 | ; |
||
2080 | mcLoad8bitsToReg32 ecx, 21 |
||
2081 | call TCmdBuf_Crop |
||
2082 | jc .L1700 |
||
2083 | |||
2084 | mcLoad8bitsToReg32 ecx, 33 |
||
2085 | call TCmdBuf_Crop |
||
2086 | jc .L9000 |
||
2087 | |||
2088 | mcLoad8bitsToReg32 ecx, 25 |
||
2089 | call TCmdBuf_Crop |
||
2090 | jc .L1900 |
||
2091 | |||
2092 | mcLoad8bitsToReg32 ecx, 29 |
||
2093 | call TCmdBuf_Crop |
||
2094 | jc .L2000 |
||
2095 | |||
2096 | mcLoad8bitsToReg32 ecx, 35 |
||
2097 | call TCmdBuf_Crop |
||
2098 | jc .L2100 |
||
2099 | |||
2100 | mcLoad8bitsToReg32 ecx, 44 |
||
2101 | call TCmdBuf_Crop |
||
2102 | jc .L2200 |
||
2103 | |||
2104 | mov ecx, 708 |
||
2105 | call TCmdBuf_Crop |
||
2106 | jc .L2300 |
||
2107 | ; |
||
2108 | ; Get help, mon! |
||
2109 | ; |
||
2110 | call TGame_ListAllCommands |
||
2111 | jmp .L20 |
||
2112 | |||
2113 | .L100: |
||
2114 | call TSrScan_Main |
||
2115 | jmp .L20 |
||
2116 | |||
2117 | .L200: |
||
2118 | call TLrScan_Main |
||
2119 | jmp .L20 |
||
2120 | |||
2121 | .L300: |
||
2122 | call TPhasers_Main |
||
2123 | |||
2124 | .L305: |
||
2125 | mcLoadGameDataPtr esi |
||
2126 | cmp [esi + TREKDATA.IDIDIT], 0 |
||
2127 | je .L20 |
||
2128 | |||
2129 | .L310: |
||
2130 | call TAttack_Main |
||
2131 | |||
2132 | .L320: |
||
2133 | mcLoadGameDataPtr esi |
||
2134 | cmp [esi + TREKDATA.KDIDIT], 0 |
||
2135 | jne .L2500 |
||
2136 | jmp .L15 |
||
2137 | |||
2138 | .L400: |
||
2139 | call TPhotons_Main |
||
2140 | |||
2141 | .L410: |
||
2142 | mcLoadGameDataPtr esi |
||
2143 | cmp [esi + TREKDATA.IDIDIT], 0 |
||
2144 | je .L20 |
||
2145 | |||
2146 | mov [glb_MOVED], 0 |
||
2147 | jmp .L2500 |
||
2148 | |||
2149 | .L500: |
||
2150 | cmp [glb_MOVED], 0 |
||
2151 | je .L510 |
||
2152 | |||
2153 | .L505: |
||
2154 | mov [glb_MOVED], 2 |
||
2155 | |||
2156 | .L510: |
||
2157 | call TMove_Warp |
||
2158 | |||
2159 | .L520: |
||
2160 | mcLoadGameDataPtr esi |
||
2161 | cmp [esi + TREKDATA.IDIDIT], 0 |
||
2162 | jne .L521 |
||
2163 | |||
2164 | cmp [glb_MOVED], 2 |
||
2165 | jne .L521 |
||
2166 | |||
2167 | dec [glb_MOVED] |
||
2168 | |||
2169 | .L521: |
||
2170 | cmp [esi + TREKDATA.IDIDIT], 0 |
||
2171 | je .L20 |
||
2172 | |||
2173 | cmp [glb_MOVED], 2 |
||
2174 | jne .L522 |
||
2175 | |||
2176 | cmp [esi + TREKDATA.JUSTIN], 0 |
||
2177 | jne .L522 |
||
2178 | |||
2179 | call TAttack_Main |
||
2180 | |||
2181 | .L522: |
||
2182 | mov [glb_MOVED], 1 |
||
2183 | jmp .L2500 |
||
2184 | |||
2185 | .L600: |
||
2186 | call TShields_Main |
||
2187 | mcLoadGameDataPtr esi |
||
2188 | cmp [esi + TREKDATA.IDIDIT], 0 |
||
2189 | je .L20 |
||
2190 | |||
2191 | call TAttack_Main |
||
2192 | mcLoadGameDataPtr esi |
||
2193 | mov [esi + TREKDATA.SHLDCHG], 0 |
||
2194 | jmp .L320 |
||
2195 | |||
2196 | .L700: |
||
2197 | call TDock_Main |
||
2198 | jmp .L305 |
||
2199 | |||
2200 | .L800: |
||
2201 | call TDock_DamageReport |
||
2202 | jmp .L20 |
||
2203 | |||
2204 | .L900: |
||
2205 | call TChart_Main |
||
2206 | jmp .L20 |
||
2207 | |||
2208 | .L1000: |
||
2209 | cmp [glb_MOVED], 0 |
||
2210 | jne .L505 |
||
2211 | |||
2212 | call TImpulse_Main |
||
2213 | jmp .L520 |
||
2214 | |||
2215 | .L1100: |
||
2216 | call TGame_Wait |
||
2217 | jmp .L410 |
||
2218 | |||
2219 | .L1200: |
||
2220 | call TChart_SetWarp |
||
2221 | jmp .L20 |
||
2222 | |||
2223 | .L1300: |
||
2224 | call TSrScan_Status |
||
2225 | jmp .L20 |
||
2226 | |||
2227 | .L1400: |
||
2228 | call TPlanet_Sensor |
||
2229 | |||
2230 | .skip_before_prompt: |
||
2231 | call TConsole_ScrollUp |
||
2232 | jmp .L20 |
||
2233 | |||
2234 | .L1450: |
||
2235 | call TPlanet_Orbit |
||
2236 | jmp .L410 |
||
2237 | |||
2238 | .L1500: |
||
2239 | call TPlanet_Beam |
||
2240 | jmp .L20 |
||
2241 | |||
2242 | .L1550: |
||
2243 | call TPlanet_Mine |
||
2244 | jmp .L410 |
||
2245 | |||
2246 | .L1600: |
||
2247 | call TPlanet_Crystal |
||
2248 | jmp .L20 |
||
2249 | |||
2250 | .L1650: |
||
2251 | call TPlanet_Galileo |
||
2252 | jmp .L410 |
||
2253 | |||
2254 | .L1670: |
||
2255 | call TPlanet_Main |
||
2256 | jmp .skip_before_prompt |
||
2257 | |||
2258 | .L1680: |
||
2259 | call TSrScan_Request |
||
2260 | jmp .L20 |
||
2261 | |||
2262 | .L1685: |
||
2263 | inc [glb_bEmExit] |
||
2264 | call TGame_Freeze |
||
2265 | jmp .quit_now_fast |
||
2266 | |||
2267 | .L1690: |
||
2268 | mcLoadGameDataPtr edi |
||
2269 | mov [edi + TREKDATA.IDIDIT], 0 |
||
2270 | |||
2271 | call TGame_Report |
||
2272 | jmp .L20 |
||
2273 | ; |
||
2274 | ; Non-abbreviated commands (executing) |
||
2275 | ; |
||
2276 | .L1700: |
||
2277 | mov cl, 21 |
||
2278 | call TCmdBuf_VerifyToken |
||
2279 | jnc .L20 |
||
2280 | |||
2281 | call TDock_Help |
||
2282 | jmp .L20 |
||
2283 | |||
2284 | .L9000: |
||
2285 | mov cl, 33 |
||
2286 | call TCmdBuf_VerifyToken |
||
2287 | jnc .L20 |
||
2288 | jmp .L9001 |
||
2289 | |||
2290 | .L1900: |
||
2291 | mov cl, 25 |
||
2292 | call TCmdBuf_VerifyToken |
||
2293 | jnc .L20 |
||
2294 | |||
2295 | call TDock_Abandon |
||
2296 | jmp .L20 |
||
2297 | |||
2298 | .L2000: |
||
2299 | mov cl, 29 |
||
2300 | call TCmdBuf_VerifyToken |
||
2301 | jnc .L20 |
||
2302 | |||
2303 | call TApp_SelfDestruct |
||
2304 | jmp .L20 |
||
2305 | |||
2306 | .L2100: |
||
2307 | mov cl, 35 |
||
2308 | call TCmdBuf_VerifyToken |
||
2309 | jnc .L20 |
||
2310 | |||
2311 | call TGame_Freeze |
||
2312 | |||
2313 | mcLoadGameDataPtr esi |
||
2314 | cmp [esi + TREKDATA.IDIDIT], 1 |
||
2315 | je .L9999 |
||
2316 | jmp .L20 |
||
2317 | |||
2318 | .L2200: |
||
2319 | mov cl, 44 |
||
2320 | call TCmdBuf_VerifyToken |
||
2321 | jnc .L20 |
||
2322 | |||
2323 | call TPlanet_DeathRay |
||
2324 | jmp .L305 |
||
2325 | |||
2326 | .L2300: |
||
2327 | mov ecx, 708 |
||
2328 | call TCmdBuf_VerifyToken_ECX |
||
2329 | jnc .L20 |
||
2330 | |||
2331 | call TLrScan_Log |
||
2332 | jmp .L20 |
||
2333 | |||
2334 | .L2500: |
||
2335 | ; |
||
2336 | ; After command which may use time invoke events module |
||
2337 | ; |
||
2338 | mcLoadGameDataPtr esi |
||
2339 | cmp [esi + TREKDATA.ALLDONE], 0 |
||
2340 | jne .L9999 |
||
2341 | |||
2342 | fld [esi + TREKDATA.TIME] |
||
2343 | fldz |
||
2344 | mc_CMP_ST0_ST1 |
||
2345 | jz .L2501 |
||
2346 | |||
2347 | call TEvents_Main |
||
2348 | |||
2349 | mcLoadGameDataPtr esi |
||
2350 | cmp [esi + TREKDATA.ALLDONE], 0 |
||
2351 | jne .L9999 |
||
2352 | |||
2353 | .L2501: |
||
2354 | call TArray_MyGalaxyPtr |
||
2355 | cmp dword [ebx], 1000 |
||
2356 | jne .L2510 |
||
2357 | |||
2358 | mov al, 16 |
||
2359 | mcZeroBits ecx |
||
2360 | call TNova_AutomaticOverride |
||
2361 | |||
2362 | mcZeroBits eax |
||
2363 | mov [glb_MOVED], al |
||
2364 | jmp .L2500 |
||
2365 | |||
2366 | .L2510: |
||
2367 | mcLoadGameDataPtr esi |
||
2368 | cmp [esi + TREKDATA.NENHERE], 0 |
||
2369 | jne .L2511 |
||
2370 | |||
2371 | call TEvents_MoveTholian |
||
2372 | |||
2373 | .L2511: |
||
2374 | mcLoadGameDataPtr esi |
||
2375 | cmp [esi + TREKDATA.KDIDIT], 1 |
||
2376 | je .L15 |
||
2377 | cmp [esi + TREKDATA.NENHERE], 0 |
||
2378 | je .L15 |
||
2379 | |||
2380 | cmp [glb_MOVED], 0 |
||
2381 | je .L310 |
||
2382 | cmp [esi + TREKDATA.JUSTIN], 1 |
||
2383 | je .L310 |
||
2384 | jmp .L20 |
||
2385 | |||
2386 | .L9001: |
||
2387 | call TGame_Score |
||
2388 | |||
2389 | .L9999: |
||
2390 | call TConsole_ScrollUp |
||
2391 | call TConsole_ScrollUp |
||
2392 | call TPlanet_Stars |
||
2393 | call TConsole_ScrollUp |
||
2394 | |||
2395 | mov ecx, 474 |
||
2396 | call TGame_JA |
||
2397 | jnc .end_game |
||
2398 | |||
2399 | mov cl, 40 |
||
2400 | call TConsole_Skip |
||
2401 | jmp .L10 |
||
2402 | |||
2403 | .end_game: |
||
2404 | call TConsole_ScrollUp |
||
2405 | mov ecx, 475 |
||
2406 | call TConsole_ProutGameMsg |
||
2407 | mov ecx, 476 |
||
2408 | call TConsole_Prout |
||
2409 | call TConsole_ScrollUp |
||
2410 | |||
2411 | mov ecx, 653 |
||
2412 | call TGame_Prompt |
||
2413 | |||
2414 | .quit_now_fast: |
||
2415 | invoke PostMessage, [glb_MainWnd], WM_CLOSE, 0, 0 |
||
2416 | |||
2417 | mcEpilog |
||
2418 | ret 4 |
||
2419 | |||
2420 | ; --- EOF --- |