Subversion Repositories Kolibri OS

Rev

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 ---