Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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