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: TCommon.Asm
3
; DATE: October 4, 2008
4
; --------------------------------------------------------------------------
5
 
6
; --------------------------------------------------------------------------
7
align PROC_ALIGN
8
TCommon_AbsEAX:
9
    add     eax, 0
10
    js      .flip_negative
11
    ret
12
 
13
.flip_negative:
14
    neg     eax
15
    ret
16
 
17
; --------------------------------------------------------------------------
18
; Input:
19
;   ST(0) = DOUBLE value B
20
;   ST(1) = DOUBLE value A
21
; Output:
22
;   ST(0) = A with a sign of B
23
; --------------------------------------------------------------------------
24
align PROC_ALIGN
25
TCommon_FPU_SignAB:
26
    mcZeroBits eax
27
    fldz
28
    mc_CMP_ST0_ST1
29
    adc     eax, eax                ; EAX=1 if B is positive
30
 
31
    fabs
32
    mcOnRegZero eax, .negative
33
    ret
34
 
35
.negative:
36
    fchs
37
    ret
38
 
39
; --------------------------------------------------------------------------
40
; Input:
41
;   ST(0) = DOUBLE value #1
42
;   ST(1) = DOUBLE value #2
43
; Output:
44
;   ST(0) = maximum of two values
45
; --------------------------------------------------------------------------
46
align PROC_ALIGN
47
TCommon_FPU_Max:
48
    mcBeginLocals 16
49
 
50
    fld     st
51
    fstp    tbyte [esp]
52
 
53
    fcomip  st, st1
54
    jc      .done
55
 
56
    fstp    [glb_dbl_FpuPopper]
57
    fld     tbyte [esp]
58
 
59
.done:
60
    mcEndLocals 16
61
    ret
62
 
63
; --------------------------------------------------------------------------
64
; Input:
65
;   ST(0) = DOUBLE value #1
66
;   ST(1) = DOUBLE value #2
67
; Output:
68
;   ST(0) = minimum of two values
69
; --------------------------------------------------------------------------
70
align PROC_ALIGN
71
TCommon_FPU_Min:
72
    mcBeginLocals 16
73
 
74
    fld     st
75
    fstp    tbyte [esp]
76
 
77
    fcomip  st, st1
78
    jnc     .done
79
 
80
    fstp    [glb_dbl_FpuPopper]
81
    fld     tbyte [esp]
82
 
83
.done:
84
    mcEndLocals 16
85
    ret
86
 
87
; --------------------------------------------------------------------------
88
align PROC_ALIGN
89
TCommon_Allocate:
90
    mcAllocatePages TCommon.size
91
    mov     [glb_pCommon], eax
92
 
93
    add     eax, TCommon.GAMEDB
94
    mov     [glb_pGameData], eax
95
    ret
96
 
97
; --------------------------------------------------------------------------
98
; EXPRAN
99
; --------------------------------------------------------------------------
100
; Input:
101
;   ST(0) = AVERAGE
102
; Output:
103
;   ST(0) = -AVERAGE * LOG (RANF(0))
104
; --------------------------------------------------------------------------
105
align PROC_ALIGN
106
TCommon_ExpRan:
107
    fchs
108
    fld1
109
    call    TRandom_Ranf
110
    fyl2x
111
    fldln2
112
    fmulp
113
    fmulp
114
    ret
115
 
116
; --------------------------------------------------------------------------
117
; Input:
118
;   AL = byte lo load
119
; Output:
120
;   ST(0) = DOUBLE loaded for processing
121
; --------------------------------------------------------------------------
122
align PROC_ALIGN
123
TCommon_LoadByteIntoFPU:
124
    movzx   eax, al
125
    mov     [glb_FPU_Int32], eax
126
    fild    [glb_FPU_Int32]
127
    ret
128
 
129
; --------------------------------------------------------------------------
130
; Input:
131
;   EAX = value lo load
132
; Output:
133
;   ST(0) = DOUBLE loaded for processing
134
; --------------------------------------------------------------------------
135
align PROC_ALIGN
136
TCommon_FPU_Load_EAX:
137
    mov     [glb_FPU_Int32], eax
138
    fild    [glb_FPU_Int32]
139
    ret
140
 
141
; --------------------------------------------------------------------------
142
; Input:
143
;   ST(0) = DOUBLE value
144
; Output:
145
;   EAX = truncated Int32 value
146
; --------------------------------------------------------------------------
147
align PROC_ALIGN
148
TCommon_FP_Truncate:
149
    fisttp  [glb_FPU_Int32]
150
    mov     eax, [glb_FPU_Int32]
151
    ret
152
 
153
; --------------------------------------------------------------------------
154
; Input:
155
;   ESI = points to DOUBLE X value
156
;   EDI = points to DOUBLE Y value
157
; Output:
158
;   ST(0) = result X**Y
159
; --------------------------------------------------------------------------
160
align PROC_ALIGN
161
TCommon_X_exp_Y:
162
    fld     tbyte [edi]
163
    fld     tbyte [esi]
164
 
165
    fyl2x
166
 
167
    fld     st
168
    frndint
169
 
170
    fsub    st1, st
171
    fxch
172
    f2xm1
173
    fld1
174
    faddp
175
 
176
    fscale
177
    fxch
178
    mcFpuPop
179
    ret
180
 
181
; --------------------------------------------------------------------------
182
virtual at 0
183
loc12:
184
    .nQuadrants COUNT ?
185
    .nStars COUNT ?
186
    .pQuadrant PINT32 ?
187
    .size = $
188
end virtual
189
; --------------------------------------------------------------------------
190
align PROC_ALIGN
191
TCommon_AllocateStars:
192
    mcBeginLocals loc12.size
193
 
194
    mcLoad8bitsToReg32 eax, 64
195
    mcStoreLocal loc12.nQuadrants, eax
196
 
197
    mcLoadGameDataPtr edx
198
    lea     edi, [edx + TREKDATA.GALAXY]
199
    mcStoreLocal loc12.pQuadrant, edi
200
 
201
    mcZeroBits ecx
202
    mcStoreLocal loc12.nStars, ecx
203
 
204
.stars_for_quadrant:
205
    mcLoad8bitsToReg32 edx, 9
206
    call    TRandom_IRan
207
    inc     eax
208
 
209
    add     [esp + loc12.nStars], eax
210
    mcLoadLocal edi, loc12.pQuadrant
211
    mov     [edi], eax
212
    add     [esp + loc12.pQuadrant], 4
213
 
214
    dec     [esp + loc12.nQuadrants]
215
    jnz     .stars_for_quadrant
216
 
217
    mcLoadLocal eax, loc12.nStars
218
    mcLoadGameDataPtr ebx
219
    mcStoreMember TREKDATA.INSTAR, eax
220
 
221
    mcEndLocals loc12.size
222
    ret
223
 
224
; --------------------------------------------------------------------------
225
virtual at 0
226
loc13:
227
    .base_IX INT32 ?
228
    .base_IY INT32 ?
229
    .base_DISTQ_max INT32 ?
230
    .loop_I INT32 ?
231
    .loop_J INT32 ?
232
    .loop_LIM INT32 ?
233
    .loop_INBASE INT32 ?
234
    .pBaseQX PINT32 ?
235
    .pBaseQY PINT32 ?
236
    .pGalaxyCell PINT32 ?
237
    .size = $
238
end virtual
239
; --------------------------------------------------------------------------
240
align PROC_ALIGN
241
TCommon_AllocateBases:
242
    mcBeginLocals loc13.size
243
 
244
    mcLoadGameDataPtr esi
245
    movzx   eax, [esi + TREKDATA.INBASE]
246
    mcStoreLocal loc13.loop_INBASE, eax
247
 
248
    sub     eax, 6
249
    neg     eax
250
    imul    eax, 6
251
    mcStoreLocal loc13.base_DISTQ_max, eax
252
 
253
    lea     edx, [esi + TREKDATA.BASEQX]
254
    lea     ecx, [esi + TREKDATA.BASEQY]
255
    mcStoreLocal loc13.pBaseQX, edx
256
    mcStoreLocal loc13.pBaseQY, ecx
257
 
258
    mcLoad1 eax
259
    mcStoreLocal loc13.loop_I, eax
260
 
261
.L6:
262
    call    TRandom_IRan8
263
    mcStoreLocal loc13.base_IX, eax
264
    mcStoreLocal loc13.base_IY, edx
265
 
266
    call    TArray_GalaxyPtr
267
    mcStoreLocal loc13.pGalaxyCell, ebx
268
 
269
    cmp     dword [ebx], 10
270
    jae     .L6
271
 
272
    cmp     [esp + loc13.loop_I], 1
273
    je      .L8
274
 
275
    mcLoadLocal ecx, loc13.loop_I
276
    dec     ecx
277
    mcStoreLocal loc13.loop_LIM, ecx
278
    ;
279
    ; Check distances to already set up bases
280
    ;
281
    mcLoad1 eax
282
    mcStoreLocal loc13.loop_J, eax
283
 
284
.calculate_distance:
285
    mcLoadLocal ecx, loc13.loop_J
286
    dec     ecx
287
 
288
    mcLoadLocal esi, loc13.pBaseQX
289
    mcLoadLocal edi, loc13.pBaseQY
290
 
291
    mcLoadLocal edx, loc13.base_IX
292
    mcLoadLocal eax, loc13.base_IY
293
 
294
    sub     dl, [esi + ecx]
295
    sub     al, [edi + ecx]
296
 
297
    movsx   ecx, dl
298
    imul    ecx, ecx
299
 
300
    movsx   edx, al
301
    imul    edx, edx
302
 
303
    add     edx, ecx
304
    cmp     edx, [esp + loc13.base_DISTQ_max]
305
    jae     .L8
306
 
307
    fld     [glb_dbl_0dot75]
308
    call    TRandom_Ranf
309
    mc_CMP_ST0_ST1
310
    jc      .L6
311
 
312
    inc     [esp + loc13.loop_J]
313
    mcLoadLocal ecx, loc13.loop_J
314
    cmp     ecx, [esp + loc13.loop_LIM]
315
    jbe     .calculate_distance
316
 
317
.L8:
318
    mcLoadLocal esi, loc13.pBaseQX
319
    mcLoadLocal edi, loc13.pBaseQY
320
 
321
    mcLoadLocal eax, loc13.base_IX
322
    mcLoadLocal edx, loc13.base_IY
323
 
324
    mcLoadLocal ecx, loc13.loop_I
325
    dec     ecx
326
 
327
    mov     [esi + ecx], al
328
    mov     [edi + ecx], dl
329
 
330
    mcLoad8bitsToReg32 ecx, -1
331
    call    TArray_SetStarChartValue
332
 
333
    mcLoadLocal edi, loc13.pGalaxyCell
334
    add     dword [edi], 10
335
    ;
336
    ; Next base...
337
    ;
338
    inc     [esp + loc13.loop_I]
339
    mcLoadLocal ecx, loc13.loop_I
340
    cmp     ecx, [esp + loc13.loop_INBASE]
341
    jbe     .L6
342
 
343
    mcEndLocals loc13.size
344
    ret
345
 
346
; --------------------------------------------------------------------------
347
virtual at 0
348
loc14:
349
    .nKREM COUNT ?
350
    .nKLUMP COUNT ?
351
    .nKLUMPER COUNT ?
352
    .nNUM COUNT ?
353
    .size = $
354
end virtual
355
; --------------------------------------------------------------------------
356
align PROC_ALIGN
357
TCommon_AllocateKlingons:
358
    mcBeginLocals loc14.size
359
 
360
    mcLoadGameDataPtr esi
361
    mcZeroBits eax
362
    mov     al, [esi + TREKDATA.INKLING]
363
    sub     al, [esi + TREKDATA.INCOM]
364
    sub     al, [esi + TREKDATA.NSCREM]
365
    mcStoreLocal loc14.nKREM, eax
366
 
367
    movzx   edx, [esi + TREKDATA.SKILL]
368
    movzx   ecx, [esi + TREKDATA.LENGTH]
369
    sub     ecx, 9
370
    neg     ecx
371
    imul    ecx, edx
372
    mov     [glb_FPU_Int32], ecx
373
    fild    [glb_FPU_Int32]
374
    fld     [glb_dbl_DOCKFAC]
375
    fmulp
376
    fld1
377
    faddp
378
    call    TCommon_FP_Truncate
379
 
380
    cmp     eax, 9
381
    jbe     .store_KLUMPER
382
 
383
    mcLoad8bitsToReg32 eax, 9
384
 
385
.store_KLUMPER:
386
    mcStoreLocal loc14.nKLUMPER, eax
387
 
388
.L10:
389
    call    TRandom_Ranf
390
    fld     st
391
    fmulp
392
    fld1
393
    fsubrp
394
    fild    [esp + loc14.nKLUMPER]
395
    fmulp
396
    call    TCommon_FP_Truncate
397
 
398
    cmp     eax, [esp + loc14.nKREM]
399
    jbe     .store_KLUMP
400
 
401
    mcLoadLocal eax, loc14.nKREM
402
 
403
.store_KLUMP:
404
    mcStoreLocal loc14.nKLUMP, eax
405
 
406
    imul    eax, 100
407
    mcStoreLocal loc14.nNUM, eax
408
 
409
.L15:
410
    call    TRandom_IRan8
411
    call    TArray_GalaxyPtr
412
 
413
    mov     eax, [ebx]
414
    add     eax, [esp + loc14.nNUM]
415
    cmp     eax, 999
416
    ja      .L15
417
 
418
    mcLoadLocal ecx, loc14.nNUM
419
    add     [ebx], ecx
420
 
421
    mcLoadLocal edx, loc14.nKLUMP
422
    sub     [esp + loc14.nKREM], edx
423
 
424
    cmp     [esp + loc14.nKREM], 0
425
    jne     .L10
426
 
427
    mcEndLocals loc14.size
428
    ret
429
 
430
; --------------------------------------------------------------------------
431
virtual at 0
432
loc15:
433
    .loop_INCOM COUNT ?
434
    .loop_IY INT32 ?
435
    .loop_IX INT32 ?
436
    .loop_I COUNT ?
437
    .loop_JJ COUNT ?
438
    .loop_IM1 COUNT ?
439
    .pCX PBYTE ?
440
    .pCY PBYTE ?
441
    .pGalaxyCell PINT32 ?
442
    .size = $
443
end virtual
444
; --------------------------------------------------------------------------
445
align PROC_ALIGN
446
TCommon_AllocateCommanders:
447
    mcBeginLocals loc15.size
448
 
449
    mcLoadGameDataPtr ebx
450
 
451
    lea     esi, [ebx + TREKDATA.CX]
452
    lea     edi, [ebx + TREKDATA.CY]
453
    mcStoreLocal loc15.pCX, esi
454
    mcStoreLocal loc15.pCY, edi
455
 
456
    movzx   ecx, [ebx + TREKDATA.INCOM]
457
    mcStoreLocal loc15.loop_INCOM, ecx
458
 
459
    mcLoad1 eax
460
    mcStoreLocal loc15.loop_I, eax
461
 
462
.L16:
463
    call    TRandom_IRan8
464
    mcStoreLocal loc15.loop_IY, edx
465
    mcStoreLocal loc15.loop_IX, eax
466
 
467
    call    TArray_GalaxyPtr
468
    mcStoreLocal loc15.pGalaxyCell, ebx
469
 
470
    cmp     dword [ebx], 99
471
    jae     .check_if_quad_full
472
 
473
    fld     [glb_dbl_0dot75]
474
    call    TRandom_Ranf
475
    mc_CMP_ST0_ST1
476
    jc      .L16
477
 
478
.check_if_quad_full:
479
    mcLoadLocal esi, loc15.pGalaxyCell
480
    cmp     dword [esi], 899
481
    ja      .L16
482
 
483
    cmp     [esp + loc15.loop_I], 1
484
    je      .L17
485
    ;
486
    ; Verify that quadrant IX,IY does not contain commander already
487
    ;
488
    mcLoadLocal ecx, loc15.loop_I
489
    dec     ecx
490
 
491
    mcLoadLocal esi, loc15.pCX
492
    mcLoadLocal edi, loc15.pCY
493
    mcZeroBits ebx
494
    mcZeroBits eax
495
    mcZeroBits edx
496
 
497
.check_cx_cy:
498
    mov     al, [esi + ebx]
499
    mov     dl, [edi + ebx]
500
 
501
    cmp     eax, [esp + loc15.loop_IX]
502
    jne     .next
503
 
504
    cmp     edx, [esp + loc15.loop_IY]
505
    je      .L16
506
 
507
.next:
508
    inc     ebx
509
    loop    .check_cx_cy
510
 
511
.L17:
512
    mcLoadLocal edi, loc15.pGalaxyCell
513
    add     dword [edi], 100
514
 
515
    mcLoadLocal ecx, loc15.loop_I
516
    dec     ecx
517
 
518
    mcLoadLocal esi, loc15.pCX
519
    mcLoadLocal edi, loc15.pCY
520
 
521
    mcLoadLocal eax, loc15.loop_IX
522
    mcLoadLocal edx, loc15.loop_IY
523
 
524
    mov     [esi + ecx], al
525
    mov     [edi + ecx], dl
526
 
527
    inc     [esp + loc15.loop_I]
528
    mcLoadLocal ecx, loc15.loop_I
529
    cmp     ecx, [esp + loc15.loop_INCOM]
530
    jbe     .L16
531
 
532
    mcEndLocals loc15.size
533
    ret
534
 
535
; --------------------------------------------------------------------------
536
virtual at 0
537
loc16:
538
    .loop_INPLAN COUNT ?
539
    .pPlanet PTPlanet ?
540
    .size = $
541
end virtual
542
; --------------------------------------------------------------------------
543
align PROC_ALIGN
544
TCommon_AllocatePlanets:
545
    mcBeginLocals loc16.size
546
 
547
    mcLoadGameDataPtr esi
548
    movzx   ecx, [esi + TREKDATA.INPLAN]
549
    add     esi, TREKDATA.PLNETS
550
    mcStoreLocal loc16.loop_INPLAN, ecx
551
    mcStoreLocal loc16.pPlanet, esi
552
 
553
.L19:
554
    call    TRandom_IRan8
555
    call    TArray_NewStufPtr
556
 
557
    cmp     byte [ebx], 0
558
    jne     .L19
559
 
560
    inc     byte [ebx]
561
    mcLoadLocal ebx, loc16.pPlanet
562
 
563
    mov     [ebx + TPlanet.planet_X], al
564
    mov     [ebx + TPlanet.planet_Y], dl
565
 
566
    mcLoad8bitsToReg32 edx, 3
567
    call    TRandom_IRan
568
    inc     eax
569
    mov     [ebx + TPlanet.planet_CLASS], al
570
 
571
    call    TRandom_Ranf
572
    fld     [glb_dbl_1dot2]
573
    fmulp
574
    call    TCommon_FP_Truncate
575
    mov     [ebx + TPlanet.planet_DILITHIUM], al
576
 
577
    add     [esp + loc16.pPlanet], TPlanet.size
578
    dec     [esp + loc16.loop_INPLAN]
579
    jnz     .L19
580
 
581
    mcEndLocals loc16.size
582
    ret
583
 
584
; --------------------------------------------------------------------------
585
align PROC_ALIGN
586
TCommon_AllocateRomulans:
587
    mcLoadGameDataPtr esi
588
    movzx   ecx, [esi + TREKDATA.NROMREM]
589
 
590
.L21:
591
    push    ecx
592
 
593
    call    TRandom_IRan8
594
    call    TArray_NewStufPtr
595
    add     byte [ebx], 10
596
 
597
    pop     ecx
598
    loop    .L21
599
    ret
600
 
601
; --------------------------------------------------------------------------
602
align PROC_ALIGN
603
TCommon_AllocateSuperCommander:
604
    mcLoadGameDataPtr esi
605
    cmp     [esi + TREKDATA.NSCREM], 0
606
    je      .done
607
 
608
.L22:
609
    call    TRandom_IRan8
610
    call    TArray_GalaxyPtr
611
 
612
    cmp     dword [ebx], 899
613
    ja      .L22
614
 
615
    mcLoadGameDataPtr edi
616
    mov     [edi + TREKDATA.ISX], al
617
    mov     [edi + TREKDATA.ISY], dl
618
    add     dword [ebx], 100
619
 
620
.done:
621
    ret
622
 
623
; --------------------------------------------------------------------------
624
align PROC_ALIGN
625
TCommon_AllocateThing:
626
    call    TRandom_Ranf
627
    fld     [glb_dbl_0dot04]
628
    mc_CMP_ST0_ST1
629
    jc      .no_thing
630
 
631
    mcLoadGameDataPtr esi
632
    cmp     [esi + TREKDATA.THINGX], -1
633
    je      .no_thing
634
 
635
    call    TRandom_IRan8
636
    mcLoadGameDataPtr ebx
637
    mcStoreMember TREKDATA.THINGX, al
638
    mcStoreMember TREKDATA.THINGY, dl
639
    jmp     .done
640
 
641
.no_thing:
642
    mcZeroBits eax
643
    mcLoadGameDataPtr ebx
644
    mcStoreMember TREKDATA.THINGX, al
645
    mcStoreMember TREKDATA.THINGY, al
646
 
647
.done:
648
    ret
649
 
650
; --------------------------------------------------------------------------
651
; Input:
652
;   AL = X sector coordinate
653
;   DL = Y sector coordinate
654
;   CH = value to check
655
;   CL = replacement value
656
; NOTE:
657
;   All registers are saved
658
; --------------------------------------------------------------------------
659
align PROC_ALIGN
660
TCommon_ReserveSector:
661
    push    ebx
662
 
663
    call    TArray_QuadPtr
664
    cmp     [ebx], ch
665
    jne     .done
666
 
667
    mov     [ebx], cl
668
 
669
.done:
670
    pop     ebx
671
    ret
672
 
673
; --------------------------------------------------------------------------
674
; Input:
675
;   AL = object character
676
; Output:
677
;   AL = X sector coordinate
678
;   DL = Y sector coordinate
679
; --------------------------------------------------------------------------
680
align PROC_ALIGN
681
TCommon_DropIn:
682
    mcBeginLocals 4
683
    mov     [esp], eax
684
 
685
.try_sector:
686
    call    TRandom_IRan10
687
    call    TArray_QuadPtr
688
 
689
    cmp     byte [ebx], CHAR_COSMOS
690
    jne     .try_sector
691
 
692
    mov     ecx, [esp]
693
    mov     [ebx], cl
694
 
695
    mcEndLocals 4
696
    ret
697
 
698
; --------------------------------------------------------------------------
699
; RESETD
700
; --------------------------------------------------------------------------
701
align PROC_ALIGN
702
TCommon_ResetDist:
703
    call    TCommon_NewCondition
704
 
705
    mcLoadGameDataPtr ebx
706
    cmp     [ebx + TREKDATA.NENHERE], 0
707
    je      .done
708
 
709
    mcZeroBits ecx
710
    mcLoadMemberRef esi, TREKDATA.KX
711
    mcLoadMemberRef edi, TREKDATA.KY
712
 
713
.calc_dist:
714
    movzx   eax, [ebx + TREKDATA.SECTX]
715
    movzx   edx, byte [esi + ecx]
716
    sub     eax, edx
717
    imul    eax, eax
718
    push    eax
719
 
720
    movzx   eax, [ebx + TREKDATA.SECTY]
721
    movzx   edx, byte [edi + ecx]
722
    sub     eax, edx
723
    imul    eax, eax
724
    pop     edx
725
    add     eax, edx
726
 
727
    call    TCommon_FPU_Load_EAX
728
    fsqrt
729
    inc     ecx
730
    call    TArray_SetDblKDist
731
 
732
    cmp     cl, [ebx + TREKDATA.NENHERE]
733
    jbe     .calc_dist
734
 
735
.done:
736
    ret
737
 
738
; --------------------------------------------------------------------------
739
; SORTKL
740
; --------------------------------------------------------------------------
741
virtual at 0
742
loc30:
743
    .nEnemies COUNT ?
744
    .pKPower PDOUBLE ?
745
    .pKDist PDOUBLE ?
746
    .bSwitch BOOL ?
747
    .pKX PBYTE ?
748
    .pKY PBYTE ?
749
    .size = $
750
end virtual
751
; --------------------------------------------------------------------------
752
align PROC_ALIGN
753
TCommon_SortKlingons:
754
    mcBeginLocals loc30.size
755
 
756
    mcLoadGameDataPtr esi
757
    cmp     [esi + TREKDATA.NENHERE], 1
758
    jbe     .done
759
 
760
    lea     eax, [esi + TREKDATA.KDIST]
761
    lea     ecx, [esi + TREKDATA.KPOWER]
762
    lea     edx, [esi + TREKDATA.KX]
763
    lea     ebx, [esi + TREKDATA.KY]
764
 
765
    mcStoreLocal loc30.pKDist, eax
766
    mcStoreLocal loc30.pKPower, ecx
767
    mcStoreLocal loc30.pKX, edx
768
    mcStoreLocal loc30.pKY, ebx
769
 
770
    movzx   ecx, [esi + TREKDATA.NENHERE]
771
    dec     ecx
772
    mcStoreLocal loc30.nEnemies, ecx
773
 
774
.L10:
775
    mcZeroBits eax
776
    mcStoreLocal loc30.bSwitch, eax
777
 
778
    mcZeroBits ecx
779
    mcZeroBits edx
780
 
781
.check_distance:
782
    mcLoadLocal esi, loc30.pKDist
783
    fld     tbyte [esi + edx + 10]
784
    fld     tbyte [esi + edx]
785
    mc_CMP_ST0_ST1
786
    jc      .L20
787
    jz      .L20
788
    ;
789
    ; Swap items from all arrays
790
    ;
791
    fld     tbyte [esi + edx + 10]
792
    fld     tbyte [esi + edx]
793
    fstp    tbyte [esi + edx + 10]
794
    fstp    tbyte [esi + edx]
795
 
796
    mcLoadLocal esi, loc30.pKPower
797
    fld     tbyte [esi + edx + 10]
798
    fld     tbyte [esi + edx]
799
    fstp    tbyte [esi + edx + 10]
800
    fstp    tbyte [esi + edx]
801
 
802
    mcLoadLocal esi, loc30.pKX
803
    mov     al, [esi + ecx]
804
    xchg    al, [esi + ecx + 1]
805
    mov     [esi + ecx], al
806
 
807
    mcLoadLocal esi, loc30.pKY
808
    mov     al, [esi + ecx]
809
    xchg    al, [esi + ecx + 1]
810
    mov     [esi + ecx], al
811
 
812
    inc     [esp + loc30.bSwitch]
813
 
814
.L20:
815
    inc     ecx
816
    add     edx, 10
817
    cmp     ecx, [esp + loc30.nEnemies]
818
    jb      .check_distance
819
 
820
    cmp     [esp + loc30.bSwitch], 0
821
    jne     .L10
822
 
823
.done:
824
    mcEndLocals loc30.size
825
    ret
826
 
827
; --------------------------------------------------------------------------
828
; NEWCOND
829
; --------------------------------------------------------------------------
830
align PROC_ALIGN
831
TCommon_NewCondition:
832
    mcLoadGameDataPtr ebx
833
    cmp     [ebx + TREKDATA.CONDIT], CONDITION_DOCKED
834
    je      .done
835
    mov     [ebx + TREKDATA.CONDIT], CONDITION_GREEN
836
 
837
    fld     [glb_dbl_1000]
838
    fld     [ebx + TREKDATA.ENERGY]
839
    mc_CMP_ST0_ST1
840
    jnc     .check_enemies
841
 
842
    mov     [ebx + TREKDATA.CONDIT], CONDITION_YELLOW
843
 
844
.check_enemies:
845
    call    TArray_MyGalaxyPtr
846
    cmp     dword [ebx], 99
847
    ja      .condition_red
848
 
849
    call    TArray_MyNewStufPtr
850
    cmp     byte [ebx], 9
851
    ja      .condition_red
852
 
853
.done:
854
    ret
855
 
856
.condition_red:
857
    mcLoadGameDataPtr ebx
858
    mov     [ebx + TREKDATA.CONDIT], CONDITION_RED
859
    ret
860
 
861
; --------------------------------------------------------------------------
862
align PROC_ALIGN
863
TCommon_DropBlackHole:
864
    call    TRandom_Ranf
865
    fld     [glb_dbl_0dot89]
866
    mc_CMP_ST0_ST1
867
    jc      .drop
868
    ret
869
 
870
.drop:
871
    mov     al, CHAR_BLACK_HOLE
872
    call    TCommon_DropIn
873
    ret
874
 
875
; --------------------------------------------------------------------------
876
; NEWQUAD
877
; --------------------------------------------------------------------------
878
virtual at 0
879
loc23:
880
    .pTrekData PVOID ?
881
    .nQUADNUM INT32 ?
882
    .nPLAN INT32 ?
883
    .nI INT32 ?
884
    .nIX INT32 ?
885
    .nIY INT32 ?
886
    .nSKILL INT32 ?
887
    .pKX PBYTE ?
888
    .pKY PBYTE ?
889
    .nKLHERE COUNT ?
890
    .nNENHERE COUNT ?
891
    .pKPOWER PDOUBLE ?
892
    .nQuadValue INT32 ?
893
    .size = $
894
end virtual
895
; --------------------------------------------------------------------------
896
align PROC_ALIGN
897
TCommon_NewQuad:
898
    mcBeginLocals loc23.size
899
    mcLoadGameDataPtr ebx
900
    mcStoreLocal loc23.pTrekData, ebx
901
 
902
    mcZeroBits eax
903
    dec     eax
904
    mcStoreMember TREKDATA.LANDED, al
905
 
906
    inc     eax
907
    mcStoreMember TREKDATA.BASEX, al
908
    mcStoreMember TREKDATA.BASEY, al
909
    mcStoreMember TREKDATA.KLHERE, al
910
    mcStoreMember TREKDATA.COMHERE, al
911
    mcStoreMember TREKDATA.PLNETX, al
912
    mcStoreMember TREKDATA.PLNETY, al
913
    mcStoreMember TREKDATA.ISHERE, al
914
    mcStoreMember TREKDATA.IRHERE, al
915
    mcStoreMember TREKDATA.IPLANET, al
916
    mcStoreMember TREKDATA.NENHERE, al
917
    mcStoreMember TREKDATA.NEUTZ, al
918
    mcStoreMember TREKDATA.INORBIT, al
919
    mcStoreMember TREKDATA.IENTESC, al
920
    mcStoreMember TREKDATA.ITHERE, al
921
 
922
    inc     eax
923
    mcStoreMember TREKDATA.JUSTIN, al
924
    dec     eax
925
 
926
    cmp     [ebx + TREKDATA.ISCATE], al
927
    je      .L5
928
 
929
    mcStoreMember TREKDATA.ISCATE, al
930
    inc     [ebx + TREKDATA.IENTESC]
931
 
932
.L5:
933
    call    TArray_MyGalaxyPtr
934
    mov     eax, [ebx]
935
    mcStoreLocal loc23.nQUADNUM, eax
936
 
937
    cmp     eax, 999
938
    ja      .L70
939
 
940
    mcLoad8bitsToReg32 ecx, 100
941
    mcZeroBits edx
942
    div     ecx
943
    mcLoadLocal ebx, loc23.pTrekData
944
    mcStoreMember TREKDATA.KLHERE, al
945
 
946
    call    TArray_MyNewStufPtr
947
    movzx   eax, byte [ebx]
948
    mcLoad8bitsToReg32 ecx, 10
949
    mcZeroBits edx
950
    div     ecx
951
    mcLoadLocal ebx, loc23.pTrekData
952
    mcStoreMember TREKDATA.IRHERE, al
953
    mcStoreLocal loc23.nPLAN, edx
954
 
955
    mcLoadMember cl, TREKDATA.KLHERE
956
    add     cl, al
957
    mcStoreMember TREKDATA.NENHERE, cl
958
 
959
    lea     edi, [ebx + TREKDATA.QUAD]
960
    mcLoad8bitsToReg32 ecx, 100
961
    mov     al, CHAR_COSMOS
962
    rep     stosb
963
 
964
    mcLoadMember al, TREKDATA.SECTX
965
    mcLoadMember dl, TREKDATA.SECTY
966
    mcLoadMember cl, TREKDATA.SHIP
967
    call    TArray_QuadPtr
968
    mov     [ebx], cl
969
 
970
    fld     [glb_dbl_0dot08]
971
    call    TRandom_Ranf
972
    mc_CMP_ST0_ST1
973
    jc      .L17
974
 
975
    mcLoadLocal ebx, loc23.pTrekData
976
    mcLoadMemberRef esi, TREKDATA.PASSWD
977
    mov     edi, str_THOLIANX
978
    call    TString_AnsiEqual
979
    jnc     .L23
980
 
981
.L17:
982
    call    TRandom_TholianSect
983
    mcLoadLocal ebx, loc23.pTrekData
984
    mcStoreMember TREKDATA.ITHX, al
985
 
986
    call    TRandom_TholianSect
987
    mcLoadLocal ebx, loc23.pTrekData
988
    mcStoreMember TREKDATA.ITHY, al
989
 
990
    mov     dl, al
991
    mcLoadMember al, TREKDATA.ITHX
992
    call    TArray_QuadPtr
993
    cmp     byte [ebx], CHAR_COSMOS
994
    jne     .L17
995
 
996
    mov     byte [ebx], CHAR_THOLIAN
997
    mcLoadLocal edi, loc23.pTrekData
998
    inc     [edi + TREKDATA.ITHERE]
999
 
1000
    mov     cl, CHAR_WEB
1001
    mov     ch, CHAR_COSMOS
1002
    mov     al, 1
1003
    mov     dl, al
1004
    call    TCommon_ReserveSector
1005
 
1006
    mov     dl, 10
1007
    call    TCommon_ReserveSector
1008
 
1009
    mov     al, 10
1010
    call    TCommon_ReserveSector
1011
 
1012
    mov     dl, 1
1013
    call    TCommon_ReserveSector
1014
 
1015
.L23:
1016
    ;
1017
    ; Klingons!
1018
    ;
1019
    mcLoadLocal ebx, loc23.pTrekData
1020
    movzx   ecx, [ebx + TREKDATA.KLHERE]
1021
    mcStoreLocal loc23.nKLHERE, ecx
1022
 
1023
    imul    eax, ecx, 100
1024
    mcStoreLocal loc23.nQuadValue, eax
1025
 
1026
    mcLoadMemberRef esi, TREKDATA.KX
1027
    mcLoadMemberRef edi, TREKDATA.KY
1028
    mcLoad1 eax
1029
    mcStoreLocal loc23.pKX, esi
1030
    mcStoreLocal loc23.pKY, edi
1031
    mcStoreLocal loc23.nI, eax
1032
 
1033
    mcLoadMemberRef esi, TREKDATA.KPOWER
1034
    mcStoreLocal loc23.pKPOWER, esi
1035
 
1036
    movzx   eax, [ebx + TREKDATA.SKILL]
1037
    mcStoreLocal loc23.nSKILL, eax
1038
 
1039
    cmp     [esp + loc23.nQUADNUM], 100
1040
    jb      .L34
1041
 
1042
    mcLoadLocal eax, loc23.nQuadValue
1043
    sub     [esp + loc23.nQUADNUM], eax
1044
 
1045
.put_klingon:
1046
    mov     al, CHAR_KLINGON
1047
    call    TCommon_DropIn
1048
    mcLoadLocal esi, loc23.pKX
1049
    mcLoadLocal edi, loc23.pKY
1050
    mcLoadLocal ecx, loc23.nI
1051
    dec     ecx
1052
    mov     [esi + ecx], al
1053
    mov     [edi + ecx], dl
1054
    mcStoreLocal loc23.nIX, eax
1055
    mcStoreLocal loc23.nIY, edx
1056
 
1057
    call    TRandom_Ranf
1058
    fld     [glb_dbl_150]
1059
    fmulp
1060
    mcLoadLocal eax, loc23.nSKILL
1061
    imul    eax, 25
1062
    add     eax, 300
1063
    call    TCommon_FPU_Load_EAX
1064
    faddp
1065
 
1066
    mcLoadLocal edi, loc23.pKPOWER
1067
    mcLoadLocal ecx, loc23.nI
1068
    dec     ecx
1069
    imul    ecx, 10
1070
    fstp    tbyte [edi + ecx]
1071
 
1072
    inc     [esp + loc23.nI]
1073
    mcLoadLocal edx, loc23.nI
1074
    cmp     edx, [esp + loc23.nKLHERE]
1075
    jbe     .put_klingon
1076
    ;
1077
    ; Commander!
1078
    ;
1079
    mcLoadLocal ebx, loc23.pTrekData
1080
    cmp     [ebx + TREKDATA.REMCOM], 0
1081
    je      .L32
1082
 
1083
    mcLoadMember al, TREKDATA.QUADX
1084
    mcLoadMember dl, TREKDATA.QUADY
1085
    call    TArray_FindCommander
1086
    jecxz   .L32
1087
 
1088
    mcLoadLocal eax, loc23.nIX
1089
    mcLoadLocal edx, loc23.nIY
1090
    call    TArray_QuadPtr
1091
    mov     byte [ebx], CHAR_COMMANDER
1092
 
1093
    mcLoadLocal eax, loc23.nSKILL
1094
    imul    eax, 50
1095
    add     eax, 950
1096
    call    TCommon_FPU_Load_EAX
1097
    call    TRandom_Ranf
1098
    fld     [glb_dbl_400]
1099
    fmulp
1100
    faddp
1101
    mcLoadLocal ecx, loc23.nKLHERE
1102
    call    TArray_SetDblKPower
1103
 
1104
    mcLoadLocal ebx, loc23.pTrekData
1105
    inc     [ebx + TREKDATA.COMHERE]
1106
 
1107
.L32:
1108
    ;
1109
    ; Super-Commander!!
1110
    ;
1111
    mcLoadLocal ebx, loc23.pTrekData
1112
 
1113
    mcLoadMember al, TREKDATA.QUADX
1114
    cmp     al, [ebx + TREKDATA.ISX]
1115
    jne     .L34
1116
 
1117
    mcLoadMember dl, TREKDATA.QUADY
1118
    cmp     dl, [ebx + TREKDATA.ISY]
1119
    jne     .L34
1120
    ;
1121
    ; He's here!!
1122
    ;
1123
    mcLoadLocal eax, loc23.nKLHERE
1124
    mcStoreLocal loc23.nI, eax
1125
 
1126
    cmp     [ebx + TREKDATA.COMHERE], 0
1127
    je      .L33
1128
 
1129
    dec     [esp + loc23.nI]
1130
    mcLoadLocal esi, loc23.pKX
1131
    mcLoadLocal edi, loc23.pKY
1132
    mcLoadLocal ecx, loc23.nI
1133
    dec     ecx
1134
    movzx   eax, byte [esi + ecx]
1135
    movzx   edx, byte [edi + ecx]
1136
    mcStoreLocal loc23.nIX, eax
1137
    mcStoreLocal loc23.nIY, edx
1138
 
1139
.L33:
1140
    mcLoadLocal eax, loc23.nIX
1141
    mcLoadLocal edx, loc23.nIY
1142
    call    TArray_QuadPtr
1143
    mov     byte [ebx], CHAR_SCOM
1144
 
1145
    mcLoadLocal eax, loc23.nSKILL
1146
    imul    eax, 125
1147
    add     eax, 1175
1148
    call    TCommon_FPU_Load_EAX
1149
    call    TRandom_Ranf
1150
    fld     [glb_dbl_400]
1151
    fmulp
1152
    faddp
1153
    mcLoadLocal ecx, loc23.nI
1154
    call    TArray_SetDblKPower
1155
 
1156
    mcLoadLocal ebx, loc23.pTrekData
1157
    inc     [ebx + TREKDATA.ISCATE]
1158
    inc     [ebx + TREKDATA.ISHERE]
1159
 
1160
.L34:
1161
    ;
1162
    ; Romulans!
1163
    ;
1164
    mcLoadLocal ebx, loc23.pTrekData
1165
    cmp     [ebx + TREKDATA.IRHERE], 0
1166
    je      .L37
1167
 
1168
    movzx   eax, [ebx + TREKDATA.KLHERE]
1169
    inc     eax
1170
    mcStoreLocal loc23.nI, eax
1171
 
1172
    movzx   eax, [ebx + TREKDATA.NENHERE]
1173
    mcStoreLocal loc23.nNENHERE, eax
1174
 
1175
.drop_a_romulan:
1176
    mov     al, CHAR_ROMULAN
1177
    call    TCommon_DropIn
1178
 
1179
    mcLoadLocal ecx, loc23.nI
1180
    dec     ecx
1181
    mcLoadLocal esi, loc23.pKX
1182
    mcLoadLocal edi, loc23.pKY
1183
    mov     [esi + ecx], al
1184
    mov     [edi + ecx], dl
1185
 
1186
    mcLoadLocal eax, loc23.nSKILL
1187
    imul    eax, 50
1188
    add     eax, 450
1189
    call    TCommon_FPU_Load_EAX
1190
    call    TRandom_Ranf
1191
    fld     [glb_dbl_400]
1192
    fmulp
1193
    faddp
1194
 
1195
    mcLoadLocal ecx, loc23.nI
1196
    call    TArray_SetDblKPower
1197
 
1198
    inc     [esp + loc23.nI]
1199
    mcLoadLocal edx, loc23.nI
1200
    cmp     edx, [esp + loc23.nNENHERE]
1201
    jbe     .drop_a_romulan
1202
 
1203
.L37:
1204
    call    TCommon_ResetDist
1205
    call    TCommon_SortKlingons
1206
    ;
1207
    ; Starbase
1208
    ;
1209
    cmp     [esp + loc23.nQUADNUM], 10
1210
    jb      .L50
1211
 
1212
    sub     [esp + loc23.nQUADNUM], 10
1213
    mov     al, CHAR_STARBASE
1214
    call    TCommon_DropIn
1215
    mcLoadLocal ebx, loc23.pTrekData
1216
    mcStoreMember TREKDATA.BASEX, al
1217
    mcStoreMember TREKDATA.BASEY, dl
1218
 
1219
.L50:
1220
    ;
1221
    ; Planet
1222
    ;
1223
    cmp     [esp + loc23.nPLAN], 0
1224
    je      .L54
1225
 
1226
    mcLoadLocal ebx, loc23.pTrekData
1227
    mcLoadMember al, TREKDATA.QUADX
1228
    mcLoadMember dl, TREKDATA.QUADY
1229
    call    TArray_FindPlanet
1230
    mcStoreMember TREKDATA.IPLANET, cl
1231
    jecxz   .L54
1232
 
1233
    mov     al, CHAR_PLANET
1234
    call    TCommon_DropIn
1235
    mcLoadLocal ebx, loc23.pTrekData
1236
    mcStoreMember TREKDATA.PLNETX, al
1237
    mcStoreMember TREKDATA.PLNETY, dl
1238
 
1239
.L54:
1240
    ;
1241
    ; Stars like dust!..
1242
    ;
1243
    call    TCommon_NewCondition
1244
    cmp     [esp + loc23.nQUADNUM], 0
1245
    je      .L62
1246
 
1247
    mcLoadLocal ecx, loc23.nQUADNUM
1248
 
1249
.drop_star:
1250
    push    ecx
1251
    mov     al, CHAR_ASTERISK
1252
    call    TCommon_DropIn
1253
    pop     ecx
1254
    loop    .drop_star
1255
 
1256
.L62:
1257
    ;
1258
    ; Check for Neutral Zone
1259
    ;
1260
    mcLoadLocal ebx, loc23.pTrekData
1261
    mcZeroBits eax
1262
    cmp     [ebx + TREKDATA.IRHERE], al
1263
    je      .L66
1264
    cmp     [ebx + TREKDATA.KLHERE], al
1265
    jne     .L66
1266
    cmp     [ebx + TREKDATA.BASEX], al
1267
    jne     .L66
1268
 
1269
    mov     cl, DEV_SUBSPACE_RADIO
1270
    call    TArray_IsDamaged
1271
    jc      .L64
1272
 
1273
    call    TConsole_ScrollUp
1274
    call    TConsole_SetCrewMsgAttr
1275
    mcLoad8bitsToReg32 ecx, 85
1276
    call    TConsole_Prout
1277
    mcLoad8bitsToReg32 ecx, 86
1278
    call    TConsole_Prout
1279
    call    TConsole_ScrollUp
1280
    mcLoad8bitsToReg32 ecx, 87
1281
    call    TConsole_Prout
1282
    mcLoad8bitsToReg32 ecx, 88
1283
    call    TConsole_Prout
1284
    call    TConsole_ScrollUp
1285
 
1286
.L64:
1287
    mcLoadLocal ebx, loc23.pTrekData
1288
    inc     [ebx + TREKDATA.NEUTZ]
1289
 
1290
.L66:
1291
    ;
1292
    ; Check for THING!!
1293
    ;
1294
    mcLoadLocal ebx, loc23.pTrekData
1295
    cmp     [ebx + TREKDATA.SHUTUP], 0
1296
    jne     .L67
1297
 
1298
    mcLoadMember al, TREKDATA.THINGX
1299
    cmp     al, [ebx + TREKDATA.QUADX]
1300
    jne     .L67
1301
 
1302
    mcLoadMember al, TREKDATA.THINGY
1303
    cmp     al, [ebx + TREKDATA.QUADY]
1304
    jne     .L67
1305
 
1306
    mov     al, CHAR_THING
1307
    call    TCommon_DropIn
1308
 
1309
    mcLoadLocal ebx, loc23.pTrekData
1310
    mcZeroBits eax
1311
    mcStoreMember TREKDATA.THINGX, al
1312
    mcStoreMember TREKDATA.THINGY, al
1313
 
1314
    mov     cl, DEV_SR_SENSORS
1315
    call    TArray_IsDamaged
1316
    jc      .L67
1317
 
1318
    call    TConsole_ScrollUp
1319
    call    TConsole_SetCrewMsgAttr
1320
    mcLoad8bitsToReg32 ecx, 89
1321
    call    TConsole_Prout
1322
    mcLoad8bitsToReg32 ecx, 90
1323
    call    TConsole_Prout
1324
 
1325
.L67:
1326
    call    TCommon_DropBlackHole
1327
    call    TCommon_DropBlackHole
1328
    call    TCommon_DropBlackHole
1329
 
1330
    mcLoadLocal ebx, loc23.pTrekData
1331
    cmp     [ebx + TREKDATA.ITHERE], 0
1332
    je      .done
1333
 
1334
    mov     ch, CHAR_WEB
1335
    mov     cl, CHAR_COSMOS
1336
    mov     al, 1
1337
    mov     dl, al
1338
    call    TCommon_ReserveSector
1339
 
1340
    mov     dl, 10
1341
    call    TCommon_ReserveSector
1342
 
1343
    mov     al, 10
1344
    call    TCommon_ReserveSector
1345
 
1346
    mov     dl, 1
1347
    call    TCommon_ReserveSector
1348
    jmp     .done
1349
 
1350
.L70:
1351
    ;
1352
    ; Quadrant contains supernova
1353
    ;
1354
    mcLoadLocal edi, loc23.pTrekData
1355
    add     edi, TREKDATA.QUAD
1356
    mcLoad8bitsToReg32 ecx, 100
1357
    mov     al, CHAR_COSMOS
1358
    rep     stosb
1359
 
1360
.done:
1361
    mcEndLocals loc23.size
1362
    ret
1363
 
1364
; --------------------------------------------------------------------------
1365
virtual at 0
1366
loc22:
1367
    .pBaseX PBYTE ?
1368
    .pBaseY PBYTE ?
1369
    .nBases COUNT ?
1370
    .iBase INDEX ?
1371
    .size = $
1372
end virtual
1373
; --------------------------------------------------------------------------
1374
align PROC_ALIGN
1375
TCommon_PrintBaseQuads:
1376
    mcBeginLocals loc22.size
1377
 
1378
    mcLoadGameDataPtr ebx
1379
    mcLoadMemberRef esi, TREKDATA.BASEQX
1380
    mcLoadMemberRef edi, TREKDATA.BASEQY
1381
    movzx   ecx, [ebx + TREKDATA.INBASE]
1382
    mcLoad1 eax
1383
 
1384
    mcStoreLocal loc22.pBaseX, esi
1385
    mcStoreLocal loc22.pBaseY, edi
1386
    mcStoreLocal loc22.nBases, ecx
1387
    mcStoreLocal loc22.iBase, eax
1388
 
1389
.print_location:
1390
    mcLoadLocal esi, loc22.pBaseX
1391
    mcLoadLocal edi, loc22.pBaseY
1392
    mcLoadLocal ecx, loc22.iBase
1393
 
1394
    dec     ecx
1395
    mov     al, [esi + ecx]
1396
    mov     dl, [edi + ecx]
1397
    mcZeroBits ecx
1398
    call    TConsole_CramLoc
1399
 
1400
    mcLoadLocal ecx, loc22.iBase
1401
    cmp     ecx, [esp + loc22.nBases]
1402
    je      .done
1403
 
1404
    mcLoad8bitsToReg32 ecx, 53
1405
    call    TConsole_Cram
1406
 
1407
    inc     [esp + loc22.iBase]
1408
    jmp     .print_location
1409
 
1410
.done:
1411
    mcEndLocals loc22.size
1412
    ret
1413
 
1414
; --------------------------------------------------------------------------
1415
align PROC_ALIGN
1416
TCommon_InitialMsg:
1417
    call    TConsole_SetGameMsgAttr
1418
    call    TConsole_ScrollUp
1419
 
1420
    mcLoad8bitsToReg32 ecx, 47
1421
    call    TConsole_Cram
1422
    mov     cl, 1
1423
    mcLoadGameDataPtr esi
1424
    fld     [esi + TREKDATA.DATE]
1425
    push    esi
1426
    call    TConsole_CramFloat
1427
    call    TConsole_ScrollUp
1428
    pop     esi
1429
 
1430
    movzx   eax, [esi + TREKDATA.INKLING]
1431
    movzx   ecx, [esi + TREKDATA.NSCREM]
1432
    sub     eax, ecx
1433
    mov     cl, 5
1434
    push    esi
1435
    call    TConsole_CramIntWidth
1436
    mcLoad8bitsToReg32 ecx, 48
1437
    call    TConsole_Prout
1438
    inc     ecx
1439
    call    TConsole_Prout
1440
    pop     esi
1441
 
1442
    cmp     [esi + TREKDATA.NSCREM], 0
1443
    je      .L25
1444
 
1445
    mcLoad8bitsToReg32 ecx, 50
1446
    push    esi
1447
    call    TConsole_Prout
1448
    pop     esi
1449
 
1450
.L25:
1451
    fld     [esi + TREKDATA.INTIME]
1452
    call    TCommon_FP_Truncate
1453
    mov     cl, 5
1454
    push    esi
1455
    call    TConsole_CramIntWidth
1456
    mcLoad8bitsToReg32 ecx, 51
1457
    call    TConsole_Prout
1458
    pop     esi
1459
 
1460
    movzx   eax, [esi + TREKDATA.INBASE]
1461
    mov     cl, 5
1462
    push    esi
1463
    call    TConsole_CramIntWidth
1464
    mcLoad8bitsToReg32 ecx, 52
1465
    call    TConsole_Cram
1466
    call    TCommon_PrintBaseQuads
1467
    call    TConsole_ScrollUp
1468
    call    TConsole_ScrollUp
1469
 
1470
    mcLoad8bitsToReg32 ecx, 54
1471
    call    TConsole_Cram
1472
    pop     esi
1473
 
1474
    mov     cl, 1
1475
    mov     al, [esi + TREKDATA.QUADX]
1476
    mov     dl, [esi + TREKDATA.QUADY]
1477
    push    esi
1478
    call    TConsole_CramLoc
1479
 
1480
    mov     al, ','
1481
    call    TConsole_PutChar
1482
    pop     esi
1483
 
1484
    mov     cl, 2
1485
    mov     al, [esi + TREKDATA.SECTX]
1486
    mov     dl, [esi + TREKDATA.SECTY]
1487
    push    esi
1488
    call    TConsole_CramLoc
1489
    call    TConsole_ScrollUp
1490
 
1491
    mcLoad8bitsToReg32 ecx, 55
1492
    call    TConsole_Cram
1493
    pop     esi
1494
 
1495
    cmp     [esi + TREKDATA.NSCREM], 0
1496
    je      .done
1497
 
1498
    mcLoad8bitsToReg32 ecx, 56
1499
    call    TConsole_Cram
1500
 
1501
.done:
1502
    call    TConsole_ScrollUp
1503
    call    TConsole_ScrollUp
1504
    ret
1505
 
1506
; --------------------------------------------------------------------------
1507
; Subroutine SETUP from original source
1508
; --------------------------------------------------------------------------
1509
virtual at 0
1510
loc11:
1511
    .dbl_IDATE DOUBLE ?
1512
    .dbl_Reserved DOUBLE ?
1513
    .size = $
1514
end virtual
1515
; --------------------------------------------------------------------------
1516
align PROC_ALIGN
1517
TCommon_Setup:
1518
    mcBeginLocals loc11.size
1519
    mcLoadGameDataPtr ebx
1520
 
1521
    mcStoreMember TREKDATA.SHIP, CHAR_ENTERPRISE
1522
 
1523
    fld     [glb_dbl_5000]
1524
    fld     st
1525
    fstp    [ebx + TREKDATA.INENRG]
1526
    fstp    [ebx + TREKDATA.ENERGY]
1527
 
1528
    fld     [glb_dbl_2500]
1529
    fld     st
1530
    fstp    [ebx + TREKDATA.INSHLD]
1531
    fstp    [ebx + TREKDATA.SHLD]
1532
 
1533
    fld     [glb_dbl_4]
1534
    fld     st
1535
    fstp    [ebx + TREKDATA.INLSR]
1536
    fstp    [ebx + TREKDATA.LSUPRES]
1537
 
1538
    mcStoreMember TREKDATA.INTORPS, 10
1539
    mcStoreMember TREKDATA.TORPS, 10
1540
    mcStoreMember TREKDATA.NPTUBES, 3
1541
 
1542
    fld     [glb_dbl_5]
1543
    fld     [glb_dbl_25]
1544
    fstp    [ebx + TREKDATA.WFACSQ]
1545
    fstp    [ebx + TREKDATA.WARPFAC]
1546
 
1547
    call    TRandom_Ranf
1548
    fld     [glb_dbl_31]
1549
    fmulp
1550
    fld     [glb_dbl_20]
1551
    faddp
1552
    fld     [glb_dbl_100]
1553
    fmulp
1554
    fld     st
1555
    fld     st
1556
    fstp    [ebx + TREKDATA.DATE]
1557
    fstp    [ebx + TREKDATA.INDATE]
1558
    fstp    [ebx + TREKDATA.DOCKDATE]
1559
 
1560
    call    TRandom_IRan8
1561
    mcStoreMember TREKDATA.QUADX, al
1562
    mcStoreMember TREKDATA.QUADY, dl
1563
 
1564
    call    TRandom_IRan10
1565
    mcStoreMember TREKDATA.SECTX, al
1566
    mcStoreMember TREKDATA.SECTY, dl
1567
 
1568
    mcStoreMember TREKDATA.ISCRAFT, 1
1569
    mcStoreMember TREKDATA.ALIVE, 1
1570
    mcStoreMember TREKDATA.LANDED, -1
1571
 
1572
    fld     [glb_dbl_0dot05]
1573
    fstp    [ebx + TREKDATA.CRYPROB]
1574
    ;
1575
    ; Events
1576
    ;
1577
    fld     [ebx + TREKDATA.INTIME]
1578
    fld     [glb_dbl_0dot5]
1579
    fmulp
1580
    call    TCommon_ExpRan
1581
    fld     [ebx + TREKDATA.DATE]
1582
    faddp
1583
    fstp    [ebx + TREKDATA.FUTURE1]
1584
 
1585
    fld     [ebx + TREKDATA.INTIME]
1586
    fld     [glb_dbl_1dot5]
1587
    fmulp
1588
    movzx   ecx, [ebx + TREKDATA.REMCOM]
1589
    mov     [glb_FPU_Int32], ecx
1590
    fild    [glb_FPU_Int32]
1591
    fdivp
1592
    call    TCommon_ExpRan
1593
    fld     [ebx + TREKDATA.DATE]
1594
    faddp
1595
    fstp    [ebx + TREKDATA.FUTURE2]
1596
 
1597
    fld     [ebx + TREKDATA.INTIME]
1598
    fld     [glb_dbl_0dot5]
1599
    fmulp
1600
    call    TCommon_ExpRan
1601
    fld     [ebx + TREKDATA.DATE]
1602
    faddp
1603
    fstp    [ebx + TREKDATA.FUTURE3]
1604
 
1605
    fld     [ebx + TREKDATA.INTIME]
1606
    fld     [glb_dbl_0dot3]
1607
    fmulp
1608
    call    TCommon_ExpRan
1609
    fld     [ebx + TREKDATA.DATE]
1610
    faddp
1611
    fstp    [ebx + TREKDATA.FUTURE4]
1612
 
1613
    fld     [glb_dbl_1E38]
1614
    fld     st
1615
    fld     st
1616
    fstp    [ebx + TREKDATA.FUTURE5]
1617
    fstp    [ebx + TREKDATA.FUTURE6]
1618
    fstp    [ebx + TREKDATA.FUTURE7]
1619
 
1620
    cmp     [ebx + TREKDATA.NSCREM], 0
1621
    je      .allocate_objects
1622
 
1623
    fld     [ebx + TREKDATA.DATE]
1624
    fld     [glb_dbl_0dot2777]
1625
    faddp
1626
    fstp    [ebx + TREKDATA.FUTURE6]
1627
 
1628
.allocate_objects:
1629
    call    TCommon_AllocateStars
1630
    call    TCommon_AllocateBases
1631
    call    TCommon_AllocateKlingons
1632
    call    TCommon_AllocateCommanders
1633
    call    TCommon_AllocatePlanets
1634
    call    TCommon_AllocateRomulans
1635
    call    TCommon_AllocateSuperCommander
1636
    call    TCommon_AllocateThing
1637
 
1638
    call    TCommon_InitialMsg
1639
    call    TCommon_NewQuad
1640
 
1641
    mcEndLocals loc11.size
1642
    ret
1643
 
1644
; --- EOF ---