Subversion Repositories Kolibri OS

Rev

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

  1. ; --------------------------------------------------------------------------
  2. ; FILE: TNova.Asm
  3. ; DATE: October 18, 2008
  4. ; --------------------------------------------------------------------------
  5.  
  6. ; --------------------------------------------------------------------------
  7. ; NOVA
  8. ; --------------------------------------------------------------------------
  9. ; Input:
  10. ;   AL = X sector of nova
  11. ;   DL = Y sector of nova
  12. ; --------------------------------------------------------------------------
  13. virtual at 0
  14. loc54:
  15.     .pTrekData PVOID ?
  16.     .arr_HitsX BYTES 12
  17.     .arr_HitsY BYTES 12
  18.     .bIHURT BOOL ?
  19.     .nBot INT32 ?
  20.     .nTop INT32 ?
  21.     .nTop2 INT32 ?
  22.     .nKOUNT INT32 ?
  23.     .nII INT32 ?
  24.     .nJJ INT32 ?
  25.     .nJ INT32 ?
  26.     .nMM INT32 ?
  27.     .nNN INT32 ?
  28.     .nLL INT32 ?
  29.     .nIX BYTE ?
  30.     .nICX BYTE ?
  31.     .nIY BYTE ?
  32.     .nICY BYTE ?
  33.     .chIQUAD BYTE ?
  34.     .chIQUAD1 BYTE ?
  35.     .nNewCX BYTE ?
  36.     .nNewCY BYTE ?
  37.     .arr_DblCourse DOUBLES 9
  38.     .dbl_HIT DOUBLE ?
  39.     .size = $
  40. end virtual
  41. ; --------------------------------------------------------------------------
  42. align PROC_ALIGN
  43. TNova_Main:
  44.     mcBeginLocals loc54.size
  45.  
  46.     mcLoadGameDataPtr esi
  47.     mcStoreLocal loc54.pTrekData, esi
  48.  
  49.     mcStoreLocal loc54.nIX, al
  50.     mcStoreLocal loc54.nIY, dl
  51.  
  52.     fld     [glb_dbl_0dot05]
  53.     call    TRandom_Ranf
  54.     mc_CMP_ST0_ST1
  55.     jc      .do_supernova
  56.  
  57.     mcLoadLocal al, loc54.nIX
  58.     mcLoadLocal dl, loc54.nIY
  59.     call    TArray_QuadPtr
  60.     mov     byte [ebx], CHAR_COSMOS
  61.  
  62.     call    TConsole_SetGameMsgAttr
  63.     mov     cl, 2
  64.     mov     bl, CHAR_ASTERISK
  65.     mcLoadLocal al, loc54.nIX
  66.     mcLoadLocal dl, loc54.nIY
  67.     call    TConsole_CramEnemyAt
  68.     mov     ecx, 613
  69.     call    TConsole_Prout
  70.  
  71.     call    TArray_MyGalaxyPtr
  72.     dec     dword [ebx]
  73.     ;
  74.     ; IF (IPHWHO != 1) STARKL++
  75.     ;
  76.     mcLoadLocal esi, loc54.pTrekData
  77.     cmp     [esi + TREKDATA.IPHWHO], 1
  78.     je      .setup_stack
  79.  
  80.     inc     [esi + TREKDATA.STARKL]
  81.  
  82. .setup_stack:
  83.     mcZeroBits eax
  84.     mcStoreLocal loc54.nKOUNT, eax
  85.     mcStoreLocal loc54.nICX, al
  86.     mcStoreLocal loc54.nICY, al
  87.     inc     eax
  88.     mcStoreLocal loc54.nBot, eax
  89.     mcStoreLocal loc54.nTop, eax
  90.     mcStoreLocal loc54.nTop2, eax
  91.     ;
  92.     ; Also setup COURSE array
  93.     ;
  94.     mcLoadLocalRef edi, loc54.arr_DblCourse
  95.     fld     [glb_dbl_10dot5]
  96.     fstp    tbyte [edi]
  97.     fld     [glb_dbl_12]
  98.     fstp    tbyte [edi + 10]
  99.     fld     [glb_dbl_1dot5]
  100.     fstp    tbyte [edi + 20]
  101.     fld     [glb_dbl_9]
  102.     fstp    tbyte [edi + 30]
  103.     fldz
  104.     fstp    tbyte [edi + 40]
  105.     fld     [glb_dbl_3]
  106.     fstp    tbyte [edi + 50]
  107.     fld     [glb_dbl_7dot5]
  108.     fstp    tbyte [edi + 60]
  109.     fld     [glb_dbl_6]
  110.     fstp    tbyte [edi + 70]
  111.     fld     [glb_dbl_4dot5]
  112.     fstp    tbyte [edi + 80]
  113.     ;
  114.     ; HITS (BOT,1) = IX
  115.     ; HITS (BOT,2) = IY
  116.     ;
  117.     mcLoadLocalRef esi, loc54.arr_HitsX
  118.     mcLoadLocalRef edi, loc54.arr_HitsY
  119.     mcLoadLocal al, loc54.nIX
  120.     mcLoadLocal dl, loc54.nIY
  121.     mov     [esi], al
  122.     mov     [edi], dl
  123.  
  124. .L78:
  125.     ;
  126.     ; DO 90 MM=BOT,TOP
  127.     ;
  128.     mcLoadLocal eax, loc54.nBot
  129.     mcStoreLocal loc54.nMM, eax
  130.  
  131. .MM_incremented:
  132.     ;
  133.     ; DO 90 NN=1,3
  134.     ;
  135.     mcLoad1 eax
  136.     mcStoreLocal loc54.nNN, eax
  137.  
  138. .NN_incremented:
  139.     ;
  140.     ; DO 90 J=1,3
  141.     ;
  142.     mcLoad1 eax
  143.     mcStoreLocal loc54.nJ, eax
  144.  
  145. .J_incremented:
  146.     ;
  147.     ; IF (J*NN == 4) GOTO 90
  148.     ;
  149.     mcLoadLocal ecx, loc54.nJ
  150.     imul    ecx, [esp + loc54.nNN]
  151.     mcOnRegEqu ecx, 4, .next_J
  152.     ;
  153.     ; II = HITS (MM,1) + NN - 2
  154.     ; JJ = HITS (MM,2) + J - 2
  155.     ;
  156.     mcLoadLocalRef esi, loc54.arr_HitsX
  157.     mcLoadLocalRef edi, loc54.arr_HitsY
  158.     mcLoadLocal ecx, loc54.nMM
  159.     dec     ecx
  160.     movzx   eax, byte [esi + ecx]
  161.     movzx   edx, byte [edi + ecx]
  162.     add     eax, [esp + loc54.nNN]
  163.     add     edx, [esp + loc54.nJ]
  164.     sub     eax, 2
  165.     sub     edx, 2
  166.     mcStoreLocal loc54.nII, eax
  167.     mcStoreLocal loc54.nJJ, edx
  168.     ;
  169.     ; Validate sector II,JJ
  170.     ;
  171.     call    TPhotons_IsValidSector
  172.     jnc     .next_J
  173.  
  174.     mov     eax, edx
  175.     call    TPhotons_IsValidSector
  176.     jnc     .next_J
  177.     ;
  178.     ; IQUAD = QUAD (II,JJ)
  179.     ;
  180.     mcLoadLocal eax, loc54.nII
  181.     mcLoadLocal edx, loc54.nJJ
  182.     call    TArray_QuadPtr
  183.     mov     cl, [ebx]
  184.     mcStoreLocal loc54.chIQUAD, cl
  185.     ;
  186.     ; Space, black hole, "thing", tholian or its web are not affected
  187.     ;
  188.     mcOnRegEqu cl, CHAR_COSMOS, .next_J
  189.     mcOnRegEqu cl, CHAR_THING, .next_J
  190.     mcOnRegEqu cl, CHAR_THOLIAN, .next_J
  191.     mcOnRegEqu cl, CHAR_WEB, .next_J
  192.     mcOnRegEqu cl, CHAR_BLACK_HOLE, .next_J
  193.     ;
  194.     ; IF (IQUAD != '*') GOTO 80
  195.     ;
  196.     mcOnRegNotEqu cl, CHAR_ASTERISK, .L80
  197.     ;
  198.     ; Another star affected by nova
  199.     ;
  200.     fld     [glb_dbl_0dot05]
  201.     call    TRandom_Ranf
  202.     mc_CMP_ST0_ST1
  203.     jc      .do_secondary_supernova
  204.     ;
  205.     ; TOP2++
  206.     ; HITS (TOP2,1) = II
  207.     ; HITS (TOP2,2) = JJ
  208.     ;
  209.     inc     [esp + loc54.nTop2]
  210.     mov     ecx, [esp + loc54.nTop2]
  211.     dec     ecx
  212.     mcLoadLocalRef esi, loc54.arr_HitsX
  213.     mcLoadLocalRef edi, loc54.arr_HitsY
  214.     mcLoadLocal eax, loc54.nII
  215.     mcLoadLocal edx, loc54.nJJ
  216.     mov     [esi + ecx], al
  217.     mov     [edi + ecx], dl
  218.     ;
  219.     ; Decrease star count in the quadrant
  220.     ;
  221.     call    TArray_MyGalaxyPtr
  222.     dec     dword [ebx]
  223.     ;
  224.     ; IF (IPHWHO != 1) STARKL++
  225.     ;
  226.     mcLoadLocal esi, loc54.pTrekData
  227.     cmp     [esi + TREKDATA.IPHWHO], 1
  228.     je      .next_nova_msg
  229.  
  230.     inc     [esi + TREKDATA.STARKL]
  231.  
  232. .next_nova_msg:
  233.     call    TConsole_SetGameMsgAttr
  234.     mov     cl, 2
  235.     mov     bl, CHAR_ASTERISK
  236.     mcLoadLocal eax, loc54.nII
  237.     mcLoadLocal edx, loc54.nJJ
  238.     call    TConsole_CramEnemyAt
  239.     mov     ecx, 613
  240.     call    TConsole_Cram
  241.     jmp     .L8905
  242.  
  243. .L80:
  244.     cmp     [esp + loc54.chIQUAD], CHAR_PLANET
  245.     jne     .L8002
  246.     ;
  247.     ; Planet destroyed by nova
  248.     ;
  249.     call    TArray_MyNewStufPtr
  250.     dec     byte [ebx]
  251.     ;
  252.     ; IF (IPHWHO != 1) NPLANKL++
  253.     ;
  254.     mcLoadLocal esi, loc54.pTrekData
  255.     cmp     [esi + TREKDATA.IPHWHO], 1
  256.     je      .planet_killed_msg
  257.  
  258.     inc     [esi + TREKDATA.NPLANKL]
  259.  
  260. .planet_killed_msg:
  261.     call    TConsole_SetGameMsgAttr
  262.     mov     cl, 2
  263.     mov     bl, CHAR_PLANET
  264.     mcLoadLocal eax, loc54.nII
  265.     mcLoadLocal edx, loc54.nJJ
  266.     call    TConsole_CramEnemyAt
  267.     mov     ecx, 306
  268.     call    TConsole_Cram
  269.  
  270.     mcLoadLocal esi, loc54.pTrekData
  271.     movzx   ecx, [esi + TREKDATA.IPLANET]
  272.     call    TArray_PlanetPtr
  273.     mcZeroBits eax
  274.     stosd
  275.     stosb
  276.  
  277.     mov     [esi + TREKDATA.IPLANET], al
  278.     mov     [esi + TREKDATA.PLNETX], al
  279.     mov     [esi + TREKDATA.PLNETY], al
  280.  
  281.     cmp     [esi + TREKDATA.LANDED], 1
  282.     jne     .L8905
  283.  
  284.     mov     al, 16
  285.     call    TFinish_Main
  286.     jmp     .done
  287.  
  288. .L8002:
  289.     cmp     [esp + loc54.chIQUAD], CHAR_STARBASE
  290.     jne     .L82
  291.     ;
  292.     ; Nova destroys starbase
  293.     ;
  294.     call    TArray_MyGalaxyPtr
  295.     sub     dword [ebx], 10
  296.  
  297.     mcLoadLocal esi, loc54.pTrekData
  298.     mov     al, [esi + TREKDATA.QUADX]
  299.     mov     dl, [esi + TREKDATA.QUADY]
  300.     call    TEvents_RemoveThisBase
  301.  
  302.     mcLoadLocal esi, loc54.pTrekData
  303.     dec     [esi + TREKDATA.REMBASE]
  304.     mov     [esi + TREKDATA.BASEX], 0
  305.     mov     [esi + TREKDATA.BASEY], 0
  306.     ;
  307.     ; IF (IPHWHO != 1) BASEKL++
  308.     ;
  309.     mcLoadLocal esi, loc54.pTrekData
  310.     cmp     [esi + TREKDATA.IPHWHO], 1
  311.     je      .base_killed_msg
  312.  
  313.     inc     [esi + TREKDATA.BASEKL]
  314.  
  315. .base_killed_msg:
  316.     mov     [esi + TREKDATA.CONDIT], 0
  317.     call    TCommon_NewCondition
  318.     call    TConsole_SetGameMsgAttr
  319.     mov     cl, 2
  320.     mov     bl, CHAR_STARBASE
  321.     mcLoadLocal eax, loc54.nII
  322.     mcLoadLocal edx, loc54.nJJ
  323.     call    TConsole_CramEnemyAt
  324.     mov     ecx, 306
  325.     call    TConsole_Cram
  326.     jmp     .L8905
  327.     ;
  328.     ; HIT = 800.0 + 800.0*RANF(0)
  329.     ;
  330. .L82:
  331.     call    TRandom_Ranf
  332.     fld     [glb_dbl_800]
  333.     fmulp
  334.     fld     [glb_dbl_800]
  335.     faddp
  336.     fstp    [esp + loc54.dbl_HIT]
  337.  
  338.     mcLoadLocal esi, loc54.pTrekData
  339.     mov     al, [esi + TREKDATA.SHIP]
  340.     cmp     [esp + loc54.chIQUAD], al
  341.     jne     .L87
  342.     ;
  343.     ; Starship hit by nova!
  344.     ;
  345.     call    TConsole_SetGameMsgAttr
  346.     call    TConsole_Cram3Asterisks
  347.     call    TConsole_CramShip
  348.     mov     ecx, 614
  349.     call    TConsole_Cram
  350.  
  351.     mcLoadLocal esi, loc54.pTrekData
  352.     mov     [esi + TREKDATA.KSHOT], 0
  353.  
  354.     mcLoadLocalRef esi, loc54.dbl_HIT
  355.     mcLoadLocalRef edi, loc54.bIHURT
  356.     mcZeroBits ecx
  357.     call    TAttack_Zap
  358.  
  359.     mcLoadLocal esi, loc54.pTrekData
  360.     fldz
  361.     fld     [esi + TREKDATA.ENERGY]
  362.     mc_CMP_ST0_ST1
  363.     jnc     .L86
  364.  
  365.     mov     al, 7
  366.     call    TFinish_Main
  367.     jmp     .done
  368.  
  369. .L86:
  370.     ;
  371.     ; Nova kicks starship away
  372.     ;
  373.     mcLoadLocal ecx, loc54.nMM
  374.     dec     ecx
  375.     mcLoadLocalRef ebx, loc54.arr_HitsX
  376.     mcLoadLocalRef edx, loc54.arr_HitsY
  377.     mov     al, [ebx + ecx]
  378.     mov     dl, [edx + ecx]
  379.  
  380.     mov     cl, [esi + TREKDATA.SECTX]
  381.     sub     cl, al
  382.     add     [esp + loc54.nICX], cl
  383.  
  384.     mov     cl, [esi + TREKDATA.SECTY]
  385.     sub     cl, al
  386.     add     [esp + loc54.nICY], cl
  387.  
  388.     inc     [esp + loc54.nKOUNT]
  389.     jmp     .next_J
  390.  
  391. .L87:
  392.     ;
  393.     ; Enemy ship hit by nova!
  394.     ;
  395.     cmp     [esp + loc54.chIQUAD], CHAR_KLINGON
  396.     je      .L88
  397.     ;
  398.     ; Find enemy index in KX,KY arrays
  399.     ;
  400.     mcLoadLocal eax, loc54.nII
  401.     mcLoadLocal edx, loc54.nJJ
  402.     mcLoadLocal esi, loc54.pTrekData
  403.     movzx   ecx, [esi + TREKDATA.NENHERE]
  404.     lea     edi, [esi + TREKDATA.KY]
  405.     add     esi, TREKDATA.KX
  406.     mcZeroBits ebx
  407.  
  408. .find_enemy_ship:
  409.     inc     ebx
  410.     cmp     [esi], al
  411.     jne     .next_ship
  412.     cmp     [edi], dl
  413.     jne     .next_ship
  414.  
  415.     mcStoreLocal loc54.nLL, ebx
  416.     jmp     .hit_the_enemy
  417.  
  418. .next_ship:
  419.     inc     esi
  420.     inc     edi
  421.     loop    .find_enemy_ship
  422.  
  423.     ;int     3
  424.     jmp     .next_J
  425.  
  426. .hit_the_enemy:
  427.     ;
  428.     ; KPOWER (LL) -= HIT
  429.     ;
  430.     mcLoadLocal esi, loc54.pTrekData
  431.     lea     ebx, [esi + TREKDATA.KPOWER]
  432.     mcLoadLocal ecx, loc54.nLL
  433.     dec     ecx
  434.     imul    ecx, 10
  435.     fld     tbyte [ebx + ecx]
  436.     fld     [esp + loc54.dbl_HIT]
  437.     fsubp
  438.     fstp    tbyte [ebx + ecx]
  439.  
  440.     fldz
  441.     fld     tbyte [ebx + ecx]
  442.     mc_CMP_ST0_ST1
  443.     jc      .L88
  444.     ;
  445.     ; NEWCX = II + II - HITS (MM,1)
  446.     ; NEWCY = JJ + JJ - HITS (MM,2)
  447.     ;
  448.     mcLoadLocalRef esi, loc54.arr_HitsX
  449.     mcLoadLocalRef edi, loc54.arr_HitsY
  450.     mcLoadLocal ecx, loc54.nMM
  451.     dec     ecx
  452.     mcLoadLocal eax, loc54.nII
  453.     mcLoadLocal edx, loc54.nJJ
  454.     add     eax, eax
  455.     add     edx, edx
  456.     sub     al, [esi + ecx]
  457.     sub     dl, [edi + ecx]
  458.     mcStoreLocal loc54.nNewCX, al
  459.     mcStoreLocal loc54.nNewCY, dl
  460.  
  461.     call    TConsole_SetGameMsgAttr
  462.     mov     cl, 2
  463.     mcLoadLocal bl, loc54.chIQUAD
  464.     mcLoadLocal eax, loc54.nII
  465.     mcLoadLocal edx, loc54.nJJ
  466.     call    TConsole_CramEnemyAt
  467.     mov     ecx, 615
  468.     call    TConsole_Cram
  469.  
  470.     movzx   eax, [esp + loc54.nNewCX]
  471.     call    TPhotons_IsValidSector
  472.     jnc     .L8703
  473.  
  474.     movzx   eax, [esp + loc54.nNewCY]
  475.     call    TPhotons_IsValidSector
  476.     jnc     .L8703
  477.     ;
  478.     ; IQUAD1 = QUAD (NEWCX,NEWCY)
  479.     ;
  480.     mcLoadLocal al, loc54.nNewCX
  481.     mcLoadLocal dl, loc54.nNewCY
  482.     call    TArray_QuadPtr
  483.     mov     cl, [ebx]
  484.     mcStoreLocal loc54.chIQUAD1, cl
  485.  
  486.     mcOnRegNotEqu cl, CHAR_BLACK_HOLE, .L87025
  487.     ;
  488.     ; Enemy displaced into black hole!
  489.     ;
  490.     mov     ecx, 616
  491.     call    TConsole_Prout
  492.     jmp     .L88
  493.  
  494. .L87025:
  495.     mcOnRegNotEqu cl, CHAR_COSMOS, .L8703
  496.  
  497.     mov     ecx, 617
  498.     call    TConsole_Cram
  499.  
  500.     mov     cl, 2
  501.     mcLoadLocal al, loc54.nNewCX
  502.     mcLoadLocal dl, loc54.nNewCY
  503.     call    TConsole_CramLoc
  504.  
  505.     mcLoadLocal eax, loc54.nII
  506.     mcLoadLocal edx, loc54.nJJ
  507.     call    TArray_QuadPtr
  508.     mov     byte [ebx], CHAR_COSMOS
  509.  
  510.     mcLoadLocal al, loc54.nNewCX
  511.     mcLoadLocal dl, loc54.nNewCY
  512.     call    TArray_QuadPtr
  513.     mcLoadLocal cl, loc54.chIQUAD
  514.     mov     [ebx], cl
  515.  
  516.     mcLoadLocal al, loc54.nNewCX
  517.     mcLoadLocal dl, loc54.nNewCY
  518.     mcLoadLocal ecx, loc54.nLL
  519.     dec     ecx
  520.     mcLoadLocal esi, loc54.pTrekData
  521.     lea     edi, [esi + TREKDATA.KY]
  522.     add     esi, TREKDATA.KX
  523.     mov     [esi + ecx], al
  524.     mov     [edi + ecx], dl
  525.  
  526.     imul    ecx, 10
  527.     mcLoadLocal esi, loc54.pTrekData
  528.     lea     edi, [esi + TREKDATA.KDIST]
  529.     sub     al, [esi + TREKDATA.SECTX]
  530.     sub     dl, [esi + TREKDATA.SECTY]
  531.     movsx   eax, al
  532.     movsx   edx, dl
  533.     imul    eax, eax
  534.     imul    edx, edx
  535.     add     eax, edx
  536.     call    TCommon_FPU_Load_EAX
  537.     fsqrt
  538.     fstp    tbyte [edi + ecx]
  539.  
  540. .L8703:
  541.     call    TConsole_ScrollUp
  542.     jmp     .next_J
  543.  
  544. .L88:
  545.     mcLoadLocal eax, loc54.nII
  546.     mcLoadLocal edx, loc54.nJJ
  547.     call    TPhasers_DeadKlingon
  548.     jmp     .next_J
  549.  
  550. .L8905:
  551.     call    TConsole_ScrollUp
  552.     mcLoadLocal eax, loc54.nII
  553.     mcLoadLocal edx, loc54.nJJ
  554.     call    TArray_QuadPtr
  555.     mov     byte [ebx], CHAR_COSMOS
  556.  
  557. .next_J:
  558.     inc     [esp + loc54.nJ]
  559.     cmp     [esp + loc54.nJ], 3
  560.     jbe     .J_incremented
  561.  
  562.     inc     [esp + loc54.nNN]
  563.     cmp     [esp + loc54.nNN], 3
  564.     jbe     .NN_incremented
  565.  
  566.     inc     [esp + loc54.nMM]
  567.     mov     eax, [esp + loc54.nTop]
  568.     cmp     [esp + loc54.nMM], eax
  569.     jbe     .MM_incremented
  570.     ;
  571.     ; Check if more stars affected by nova
  572.     ;
  573.     mov     eax, [esp + loc54.nTop]
  574.     cmp     [esp + loc54.nTop2], eax
  575.     je      .L93
  576.  
  577.     inc     eax
  578.     mcStoreLocal loc54.nBot, eax
  579.     mov     eax, [esp + loc54.nTop2]
  580.     mcStoreLocal loc54.nTop, eax
  581.     jmp     .L78
  582.  
  583. .L93:
  584.     cmp     [esp + loc54.nKOUNT], 0
  585.     je      .done
  586.     ;
  587.     ; Starship affected by nova - kick it away
  588.     ;
  589.     mcLoadLocal esi, loc54.pTrekData
  590.     fild    [esp + loc54.nKOUNT]
  591.     fld     [glb_dbl_0dot1]
  592.     fmulp
  593.     fstp    [esi + TREKDATA.DIST]
  594.  
  595.     cmp     [esp + loc54.nICX], 0
  596.     je      .L9301
  597.  
  598.     mcLoad1 eax
  599.     movsx   ecx, [esp + loc54.nICX]
  600.     call    TAttack_ISign
  601.     mcStoreLocal loc54.nICX, al
  602.  
  603. .L9301:
  604.     cmp     [esp + loc54.nICY], 0
  605.     je      .L9302
  606.  
  607.     mcLoad1 eax
  608.     movsx   ecx, [esp + loc54.nICY]
  609.     call    TAttack_ISign
  610.     mcStoreLocal loc54.nICY, al
  611.  
  612. .L9302:
  613.     ;
  614.     ; INDEX = 3*(ICX+1) + ICY + 2
  615.     ;
  616.     movsx   ecx, [esp + loc54.nICX]
  617.     inc     ecx
  618.     imul    ecx, 3
  619.     movsx   eax, [esp + loc54.nICY]
  620.     add     ecx, eax
  621.     add     ecx, 2
  622.  
  623.     cmp     ecx, 1
  624.     jb      .assertion_failed
  625.     cmp     ecx, 9
  626.     ja      .assertion_failed
  627.  
  628.     dec     ecx
  629.     imul    ecx, 10
  630.     mcLoadLocalRef ebx, loc54.arr_DblCourse
  631.     fld     tbyte [ebx + ecx]
  632.     fstp    [esi + TREKDATA.DIREC]
  633.  
  634.     fld     [esi + TREKDATA.DIREC]
  635.     fldz
  636.     mc_CMP_ST0_ST1
  637.     jnz     .check_distance
  638.  
  639.     fldz
  640.     fstp    [esi + TREKDATA.DIST]
  641.  
  642. .check_distance:
  643.     fld     [esi + TREKDATA.DIST]
  644.     fldz
  645.     mc_CMP_ST0_ST1
  646.     jz      .done
  647.  
  648.     fld     [esi + TREKDATA.DIST]
  649.     fld     [glb_dbl_12]
  650.     fmulp
  651.     fstp    [esi + TREKDATA.TIME]
  652.  
  653.     call    TConsole_ScrollUp
  654.     call    TConsole_SetGameMsgAttr
  655.     mov     ecx, 618
  656.     call    TConsole_Cram
  657.     call    TConsole_CramShip
  658.  
  659.     call    TMove_Move
  660.     jmp     .done
  661.  
  662. .do_secondary_supernova:
  663.     mcLoadLocal eax, loc54.nII
  664.     mcLoadLocal edx, loc54.nJJ
  665.     jmp     .call_snova
  666.  
  667. .assertion_failed:
  668.     ;int     3
  669.     jmp     .done
  670.  
  671. .do_supernova:
  672.     mcLoadLocal al, loc54.nIX
  673.     mcLoadLocal dl, loc54.nIY
  674.  
  675. .call_snova:
  676.     call    TNova_SuperNova
  677.  
  678. .done:
  679.     mcEndLocals loc54.size
  680.     ret
  681.  
  682. ; --------------------------------------------------------------------------
  683. ; SNOVA
  684. ; --------------------------------------------------------------------------
  685. ; Input:
  686. ;   AL = X sector of supernova
  687. ;   DL = Y sector of supernova
  688. ; --------------------------------------------------------------------------
  689. virtual at 0
  690. loc55:
  691.     .pTrekData PVOID ?
  692.     .pChart PINT32 ?
  693.     .pGalaxy PINT32 ?
  694.     .iNSX INDEX ?
  695.     .iNSY INDEX ?
  696.     .iNUM INDEX ?
  697.     .iNQX INDEX ?
  698.     .iNQY INDEX ?
  699.     .nInputSectorX BYTE ?
  700.     .nInputSectorY BYTE ?
  701.     .__pad_1 BYTE ?
  702.     .__pad_2 BYTE ?
  703.     .nKLDEAD COUNT ?
  704.     .nCOMDEAD COUNT ?
  705.     .nISCDEAD COUNT ?
  706.     .nRMDEAD COUNT ?
  707.     .nNPDEAD COUNT ?
  708.     .size = $
  709. end virtual
  710. ; --------------------------------------------------------------------------
  711. align PROC_ALIGN
  712. TNova_SuperNova:
  713.     mcBeginLocals loc55.size
  714.  
  715.     mcLoadGameDataPtr esi
  716.     mcStoreLocal loc55.pTrekData, esi
  717.  
  718.     movzx   eax, al
  719.     movzx   edx, dl
  720.     mcStoreLocal loc55.iNSX, eax
  721.     mcStoreLocal loc55.iNSY, edx
  722.  
  723.     mcStoreLocal loc55.nInputSectorX, al
  724.     mcStoreLocal loc55.nInputSectorY, dl
  725.  
  726.     test    eax, edx
  727.     jnz     .L50
  728.  
  729.     mov     edx, [esi + TREKDATA.INSTAR]
  730.     call    TRandom_IRan
  731.     inc     eax
  732.     mcStoreLocal loc55.iNUM, eax
  733.  
  734.     mcLoad1 eax
  735.     mcStoreLocal loc55.iNQX, eax
  736.  
  737. ._NQX_incremented:
  738.     mcLoad1 eax
  739.     mcStoreLocal loc55.iNQY, eax
  740.  
  741. ._NQY_incremented:
  742.     mcLoadLocal eax, loc55.iNQX
  743.     mcLoadLocal edx, loc55.iNQY
  744.     call    TArray_GetGalaxyValue
  745.     mcOnRegEqu ecx, 1000, .done
  746.  
  747.     mov     eax, ecx
  748.     mcZeroBits edx
  749.     mcLoad8bitsToReg32 ecx, 10
  750.     div     ecx
  751.     sub     [esp + loc55.iNUM], edx
  752.     js      .L20
  753.     jz      .L20
  754.  
  755. .next_quad:
  756.     inc     [esp + loc55.iNQY]
  757.     cmp     [esp + loc55.iNQY], 8
  758.     jbe     ._NQY_incremented
  759.  
  760.     inc     [esp + loc55.iNQX]
  761.     cmp     [esp + loc55.iNQX], 8
  762.     jbe     ._NQX_incremented
  763.  
  764.     jmp     .done
  765.  
  766. .L20:
  767.     mcLoadLocal eax, loc55.iNQX
  768.     mcLoadLocal edx, loc55.iNQY
  769.     call    TArray_GetGalaxyValue
  770.     mcOnRegEqu ecx, 1000, .done
  771.  
  772.     mcLoadLocal esi, loc55.pTrekData
  773.     mcLoadLocal eax, loc55.iNQX
  774.     cmp     al, [esi + TREKDATA.QUADX]
  775.     jne     .L70
  776.  
  777.     mcLoadLocal eax, loc55.iNQY
  778.     cmp     al, [esi + TREKDATA.QUADY]
  779.     jne     .L70
  780.     ;
  781.     ; The supernova is in this quadrant!
  782.     ;
  783.     cmp     [esi + TREKDATA.JUSTIN], 0
  784.     jne     .L70
  785.  
  786.     call    TArray_MyGalaxyPtr
  787.     mov     eax, [ebx]
  788.     mcZeroBits edx
  789.     mcLoad8bitsToReg32 ecx, 10
  790.     div     ecx
  791.     mcOnRegZero edx, .done
  792.     call    TRandom_IRan
  793.     inc     eax
  794.     mcStoreLocal loc55.iNUM, eax
  795.  
  796.     mcLoadLocal esi, loc55.pTrekData
  797.     add     esi, TREKDATA.QUAD
  798.     mcLoad8bitsToReg32 ecx, 100
  799.     mcZeroBits edx
  800.  
  801. .find_star:
  802.     lodsb
  803.     mcOnRegNotEqu al, CHAR_ASTERISK, .next_star
  804.  
  805.     dec     [esp + loc55.iNUM]
  806.     jz      .L50
  807.  
  808. .next_star:
  809.     inc     edx
  810.     loop    .find_star
  811.     jmp     .done
  812.  
  813. .L50:
  814.     call    TConsole_ScrollUp
  815.     call    TMove_RedAlert
  816.     call    TConsole_SetGameMsgAttr
  817.     mov     ecx, 619
  818.     call    TConsole_Cram
  819.  
  820.     mov     cl, 2
  821.     mcLoadLocal eax, loc55.iNSX
  822.     mcLoadLocal edx, loc55.iNSY
  823.     call    TConsole_CramLoc
  824.     call    TConsole_ScrollUp
  825.  
  826.     mcLoadLocal esi, loc55.pTrekData
  827.     movzx   eax, [esi + TREKDATA.QUADX]
  828.     movzx   edx, [esi + TREKDATA.QUADY]
  829.     mcStoreLocal loc55.iNQX, eax
  830.     mcStoreLocal loc55.iNQY, edx
  831.     ;
  832.     ; Supernova adjacent to ship ends game!
  833.     ;
  834.     movzx   eax, [esi + TREKDATA.SECTX]
  835.     sub     eax, [esp + loc55.iNSX]
  836.     imul    eax, eax
  837.  
  838.     movzx   ecx, [esi + TREKDATA.SECTY]
  839.     sub     ecx, [esp + loc55.iNSY]
  840.     imul    ecx, ecx
  841.  
  842.     add     eax, ecx
  843.     cmp     ecx, 2
  844.     ja      .L80
  845.  
  846.     mov     ecx, 620
  847.     call    TConsole_ProutGameMsg
  848.     call    TPlanet_Stars
  849.  
  850.     mcLoadLocal edi, loc55.pTrekData
  851.     mov     [edi + TREKDATA.ALLDONE], 1
  852.     jmp     .L80
  853.  
  854. .L70:
  855.     mov     cl, DEV_SUBSPACE_RADIO
  856.     call    TArray_IsDamaged
  857.     jc      .L80
  858.  
  859.     call    TConsole_ScrollUp
  860.     call    TConsole_SetGameMsgAttr
  861.     mov     ecx, 621
  862.     call    TConsole_Cram
  863.  
  864.     mcLoadLocal esi, loc55.pTrekData
  865.     mov     cl, 1
  866.     fld     [esi + TREKDATA.DATE]
  867.     call    TConsole_CramFloat
  868.     call    TConsole_ScrollUp
  869.  
  870.     mov     ecx, 622
  871.     call    TConsole_Cram
  872.  
  873.     mov     cl, 1
  874.     mcLoadLocal eax, loc55.iNQX
  875.     mcLoadLocal edx, loc55.iNQY
  876.     call    TConsole_CramLoc
  877.  
  878.     mov     ecx, 623
  879.     call    TConsole_Prout
  880.  
  881. .L80:
  882.     ;
  883.     ; A wave of total destruction in the quadrant!!
  884.     ;
  885.     mcLoadLocal eax, loc55.iNQX
  886.     mcLoadLocal edx, loc55.iNQY
  887.     call    TArray_GetGalaxyValue
  888.     mcStoreLocal loc55.iNUM, ecx
  889.  
  890.     mcLoad8bitsToReg32 eax, 100
  891.     xchg    eax, ecx
  892.     mcZeroBits edx
  893.     div     ecx
  894.     mcStoreLocal loc55.nKLDEAD, eax
  895.  
  896.     mcZeroBits eax
  897.     mcStoreLocal loc55.nCOMDEAD, eax
  898.     mcStoreLocal loc55.nISCDEAD, eax
  899.  
  900.     mcLoadLocal esi, loc55.pTrekData
  901.     mcLoadLocal eax, loc55.iNQX
  902.     cmp     al, [esi + TREKDATA.ISX]
  903.     jne     .L85
  904.  
  905.     mcLoadLocal eax, loc55.iNQY
  906.     cmp     al, [esi + TREKDATA.ISY]
  907.     jne     .L85
  908.  
  909.     mcZeroBits eax
  910.     mov     [esi + TREKDATA.NSCREM], al
  911.     mov     [esi + TREKDATA.ISX], al
  912.     mov     [esi + TREKDATA.ISY], al
  913.     mov     [esi + TREKDATA.ISATB], al
  914.     mov     [esi + TREKDATA.ISCATE], al
  915.     inc     [esp + loc55.nISCDEAD]
  916.  
  917.     fld     [glb_dbl_1E38]
  918.     fld     st
  919.     fstp    [esi + TREKDATA.FUTURE6]
  920.     fstp    [esi + TREKDATA.FUTURE7]
  921.  
  922. .L85:
  923.     cmp     [esp + loc55.nKLDEAD], 0
  924.     je      .L100
  925.  
  926.     mcLoadLocal eax, loc55.nKLDEAD
  927.     sub     [esi + TREKDATA.REMKL], al
  928.  
  929.     cmp     [esi + TREKDATA.REMCOM], 0
  930.     je      .L100
  931.  
  932.     mcLoadLocal eax, loc55.iNQX
  933.     mcLoadLocal edx, loc55.iNQY
  934.     call    TPhasers_RemoveCommander
  935.     jnc     .L100
  936.  
  937.     dec     [esp + loc55.nKLDEAD]
  938.     inc     [esp + loc55.nCOMDEAD]
  939.  
  940.     mcLoadLocal esi, loc55.pTrekData
  941.     cmp     [esi + TREKDATA.REMCOM], 0
  942.     jne     .L100
  943.  
  944.     fld     [glb_dbl_1E38]
  945.     fstp    [esi + TREKDATA.FUTURE2]
  946.  
  947. .L100:
  948.     ;
  949.     ; Destroy Romulans and planets
  950.     ;
  951.     mcLoadLocal eax, loc55.iNQX
  952.     mcLoadLocal edx, loc55.iNQY
  953.     call    TArray_NewStufPtr
  954.     movzx   ecx, byte [ebx]
  955.     mcStoreLocal loc55.iNUM, ecx
  956.     mcZeroBits eax
  957.     mov     [ebx], al
  958.     ;
  959.     ; NRMDEAD = NUM/10
  960.     ;
  961.     mov     eax, ecx
  962.     mcZeroBits edx
  963.     mcLoad8bitsToReg32 ecx, 10
  964.     div     ecx
  965.     mcStoreLocal loc55.nRMDEAD, eax
  966.     mcStoreLocal loc55.nNPDEAD, edx
  967.  
  968.     mcLoadLocal esi, loc55.pTrekData
  969.     sub     [esi + TREKDATA.NROMREM], al
  970.  
  971.     cmp     [esp + loc55.nNPDEAD], 0
  972.     je      .L109
  973.     ;
  974.     ; Remove planet in quadrant NQX,NQY
  975.     ;
  976.     mcLoadLocal eax, loc55.iNQX
  977.     mcLoadLocal edx, loc55.iNQY
  978.     call    TArray_FindPlanet
  979.     jecxz   .L109
  980.  
  981.     mov     edi, esi
  982.     mcZeroBits eax
  983.     stosd
  984.     stosb
  985.  
  986. .L109:
  987.     ;
  988.     ; Destroy base (if any) in quadrant NQX,NQY
  989.     ;
  990.     mcLoadLocal esi, loc55.pTrekData
  991.     cmp     [esi + TREKDATA.REMBASE], 0
  992.     je      .L120
  993.  
  994.     mcLoadLocal eax, loc55.iNQX
  995.     mcLoadLocal edx, loc55.iNQY
  996.     call    TEvents_RemoveThisBase
  997.     jnc     .L120
  998.  
  999.     mcLoadLocal esi, loc55.pTrekData
  1000.     dec     [esi + TREKDATA.REMBASE]
  1001.  
  1002. .L120:
  1003.     ;
  1004.     ; If starship caused supernova, tally up the destruction
  1005.     ;
  1006.     cmp     [esp + loc55.iNSX], 0
  1007.     je      .L130
  1008.  
  1009.     mcLoadLocal eax, loc55.iNQX
  1010.     mcLoadLocal edx, loc55.iNQY
  1011.     call    TArray_GetGalaxyValue
  1012.     mov     eax, ecx
  1013.     mcZeroBits edx
  1014.     mcLoad8bitsToReg32 ecx, 100
  1015.     div     ecx
  1016.     mcStoreLocal loc55.iNUM, edx
  1017.  
  1018.     mcLoadLocal eax, loc55.nKLDEAD
  1019.     mcLoadLocal edx, loc55.nCOMDEAD
  1020.     mcLoadLocal ecx, loc55.nRMDEAD
  1021.     mcLoadLocal ebx, loc55.nISCDEAD
  1022.  
  1023.     mcLoadLocal esi, loc55.pTrekData
  1024.     add     [esi + TREKDATA.KILLK], al
  1025.     add     [esi + TREKDATA.KILLC], dl
  1026.     add     [esi + TREKDATA.NROMKL], cl
  1027.     add     [esi + TREKDATA.NSCKILL], bl
  1028.  
  1029.     cmp     [esi + TREKDATA.IPHWHO], 1
  1030.     je      .L130
  1031.  
  1032.     mcZeroBits edx
  1033.     mcLoad8bitsToReg32 ecx, 10
  1034.     mcLoadLocal eax, loc55.iNUM
  1035.     div     ecx
  1036.  
  1037.     add     [esi + TREKDATA.BASEKL], al
  1038.     add     [esi + TREKDATA.STARKL], dl
  1039.  
  1040.     mcLoadLocal eax, loc55.nNPDEAD
  1041.     add     [esi + TREKDATA.NPLANKL], al
  1042.  
  1043. .L130:
  1044.     ;
  1045.     ; Mark supernova in galaxy and in star chart
  1046.     ;
  1047.     mcLoadLocal eax, loc55.iNQX
  1048.     mcLoadLocal edx, loc55.iNQY
  1049.     call    TArray_StarChartPtr
  1050.     mcStoreLocal loc55.pChart, ebx
  1051.  
  1052.     mcLoadLocal eax, loc55.iNQX
  1053.     mcLoadLocal edx, loc55.iNQY
  1054.     call    TArray_GalaxyPtr
  1055.     mcStoreLocal loc55.pGalaxy, ebx
  1056.  
  1057.     mcLoadLocal esi, loc55.pChart
  1058.     cmp     dword [esi], 0
  1059.     jle     .L131
  1060.  
  1061.     mov     cl, DEV_SUBSPACE_RADIO
  1062.     call    TArray_IsDamaged
  1063.     jnc     .L131
  1064.  
  1065.     mcLoadLocal esi, loc55.pGalaxy
  1066.     mov     eax, [esi]
  1067.     add     eax, 1000
  1068.     mcLoadLocal edi, loc55.pChart
  1069.     mov     [edi], eax
  1070.  
  1071. .L131:
  1072.     mov     cl, DEV_SUBSPACE_RADIO
  1073.     call    TArray_IsDamaged
  1074.     jnc     .mark_chart
  1075.  
  1076.     mcLoadLocal esi, loc55.pTrekData
  1077.     mcLoadLocal eax, loc55.iNQX
  1078.     cmp     [esi + TREKDATA.QUADX], al
  1079.     jne     .L132
  1080.  
  1081.     mcLoadLocal eax, loc55.iNQY
  1082.     cmp     [esi + TREKDATA.QUADY], al
  1083.     jne     .L132
  1084.  
  1085. .mark_chart:
  1086.     mcLoadLocal edi, loc55.pChart
  1087.     mov     dword [edi], 1
  1088.  
  1089. .L132:
  1090.     mcLoadLocal edi, loc55.pGalaxy
  1091.     mov     dword [edi], 1000
  1092.     ;
  1093.     ; If supernova destroys last klingons, give special message
  1094.     ;
  1095.     mcLoadLocal esi, loc55.pTrekData
  1096.     cmp     [esi + TREKDATA.REMKL], 0
  1097.     jne     .L140
  1098.  
  1099.     mcLoadLocal eax, loc55.iNQX
  1100.     cmp     [esi + TREKDATA.QUADX], al
  1101.     jne     .win_by_supernova
  1102.  
  1103.     mcLoadLocal eax, loc55.iNQY
  1104.     cmp     [esi + TREKDATA.QUADY], al
  1105.     je      .L140
  1106.  
  1107. .win_by_supernova:
  1108.     call    TConsole_ScrollUp
  1109.     call    TConsole_ScrollUp
  1110.     mov     ecx, 624
  1111.     call    TConsole_ProutGameMsg
  1112.  
  1113.     mov     ecx, 625
  1114.     call    TConsole_Cram
  1115.  
  1116.     mov     cl, 1
  1117.     mcLoadLocal eax, loc55.iNQX
  1118.     mcLoadLocal edx, loc55.iNQY
  1119.     call    TConsole_CramLoc
  1120.  
  1121.     mov     ecx, 626
  1122.     call    TConsole_Prout
  1123.  
  1124.     mov     al, 1
  1125.     call    TFinish_Main
  1126.     jmp     .done
  1127.  
  1128. .L140:
  1129.     mcLoadLocal esi, loc55.pTrekData
  1130.     cmp     [esi + TREKDATA.ALLDONE], 0
  1131.     je      .done
  1132.  
  1133.     mov     al, 8
  1134.     call    TFinish_Main
  1135.  
  1136. .done:
  1137.     mcEndLocals loc55.size
  1138.     ret
  1139.  
  1140. ; --------------------------------------------------------------------------
  1141. ; AUTOVER, GRAB
  1142. ; --------------------------------------------------------------------------
  1143. ; Input:
  1144. ;   AL = finishing code if game will end (II in original source)
  1145. ;   CL =0 if AUTOVER called, =1 if GRAB called (IGRAB in original source)
  1146. ; --------------------------------------------------------------------------
  1147. virtual at 0
  1148. loc53:
  1149.     .pTrekData PVOID ?
  1150.     .bIGRAB BYTE ?
  1151.     .bII BYTE ?
  1152.     .pad_1 BYTE ?
  1153.     .pad_2 BYTE ?
  1154.     .dbl_POWER DOUBLE ?
  1155.     .dbl_DISTREQ DOUBLE ?
  1156.     .dbl_DISTMAX DOUBLE ?
  1157.     .pad_11 BYTE ?
  1158.     .pad_22 BYTE ?
  1159.     .size = $
  1160. end virtual
  1161. ; --------------------------------------------------------------------------
  1162. align PROC_ALIGN
  1163. TNova_AutomaticOverride:
  1164.     mcBeginLocals loc53.size
  1165.  
  1166.     mcStoreLocal loc53.bIGRAB, cl
  1167.     mcStoreLocal loc53.bII, al
  1168.  
  1169.     mcLoadGameDataPtr esi
  1170.     mcStoreLocal loc53.pTrekData, esi
  1171.  
  1172.     cmp     [esi + TREKDATA.LANDED], 1
  1173.     jne     .L45
  1174.  
  1175.     mov     cl, DEV_TRANSPORTER
  1176.     call    TArray_IsDamaged
  1177.     jc      .L25
  1178.  
  1179.     mov     ecx, 600
  1180.     call    TConsole_ProutGameMsg
  1181.  
  1182.     mcLoadLocal esi, loc53.pTrekData
  1183.     cmp     [esi + TREKDATA.SHLDUP], 0
  1184.     je      .L20
  1185.  
  1186.     mov     ecx, 601
  1187.     call    TConsole_Prout
  1188.     jmp     .L25
  1189.  
  1190. .L20:
  1191.     mov     ecx, 602
  1192.     call    TConsole_Cram
  1193.     invoke  Sleep, 1200
  1194.  
  1195.     call    TRandom_Ranf
  1196.     fld     [glb_dbl_0dot5]
  1197.     mc_CMP_ST0_ST1
  1198.     jc      .L30
  1199.  
  1200.     mov     ecx, 573
  1201.     call    TConsole_Prout
  1202.  
  1203. .L25:
  1204.     mcLoadLocal al, loc53.bII
  1205.  
  1206. .finished:
  1207.     call    TFinish_Main
  1208.     jmp     .done
  1209.  
  1210. .L30:
  1211.     mov     ecx, 574
  1212.     call    TConsole_Prout
  1213.  
  1214.     mcLoadLocal esi, loc53.pTrekData
  1215.     cmp     [esi + TREKDATA.IMINE], 0
  1216.     je      .L45
  1217.  
  1218.     mov     [esi + TREKDATA.IMINE], 0
  1219.  
  1220.     mov     ecx, 603
  1221.     call    TConsole_Cram
  1222.  
  1223.     call    TRandom_Ranf
  1224.     fld     [glb_dbl_DOCKFAC]
  1225.     mc_CMP_ST0_ST1
  1226.     jc      .L40
  1227.  
  1228.     mov     ecx, 604
  1229.     call    TConsole_Prout
  1230.     jmp     .L45
  1231.  
  1232. .L40:
  1233.     mov     ecx, 605
  1234.     call    TConsole_Prout
  1235.  
  1236.     mcLoadLocal esi, loc53.pTrekData
  1237.     mov     [esi + TREKDATA.ICRYSTL], 1
  1238.  
  1239. .L45:
  1240.     cmp     [esp + loc53.bIGRAB], 0
  1241.     jne     .done
  1242.  
  1243.     mcLoadLocal esi, loc53.pTrekData
  1244.     cmp     [esi + TREKDATA.ICRAFT], 0
  1245.     je      .try_override
  1246.  
  1247.     mov     al, 17
  1248.     jmp     .finished
  1249.  
  1250. .try_override:
  1251.     call    TConsole_ScrollUp
  1252.  
  1253.     mcLoadLocal esi, loc53.pTrekData
  1254.     cmp     [esi + TREKDATA.JUSTIN], 0
  1255.     je      .L50
  1256.  
  1257. .L47:
  1258.     call    TMove_RedAlert
  1259.     call    TConsole_SetGameMsgAttr
  1260.  
  1261.     mov     ecx, 606
  1262.     call    TConsole_Cram
  1263.     call    TConsole_CramShip
  1264.  
  1265.     mov     ecx, 607
  1266.     call    TConsole_Prout
  1267.     mov     ecx, 608
  1268.     call    TConsole_Prout
  1269.     call    TConsole_ScrollUp
  1270.  
  1271. .L50:
  1272.     call    TConsole_SetGameMsgAttr
  1273.     mov     ecx, 609
  1274.     call    TConsole_Cram
  1275.     call    TConsole_CramShip
  1276.     call    TConsole_ScrollUp
  1277.  
  1278.     mov     ecx, 610
  1279.     call    TConsole_Prout
  1280.     ;
  1281.     ; STARCH (QUADX,QUADY) = 1
  1282.     ;
  1283.     mcLoad1 ecx
  1284.     mcLoadLocal esi, loc53.pTrekData
  1285.     mov     al, [esi + TREKDATA.QUADX]
  1286.     mov     dl, [esi + TREKDATA.QUADY]
  1287.     call    TArray_SetStarChartValue
  1288.     ;
  1289.     ; Try to use warp engines...
  1290.     ;
  1291.     mov     cl, DEV_WARP_ENGINES
  1292.     call    TArray_IsDamaged
  1293.     jnc     .L100
  1294.  
  1295.     call    TConsole_ScrollUp
  1296.     mov     ecx, 150
  1297.     call    TConsole_ProutGameMsg
  1298.     mov     al, 8
  1299.     jmp     .finished
  1300.  
  1301. .L100:
  1302.     call    TRandom_Ranf
  1303.     fld     [glb_dbl_2]
  1304.     fmulp
  1305.     fld     [glb_dbl_6]
  1306.     faddp
  1307.     mcLoadLocal esi, loc53.pTrekData
  1308.     fstp    [esi + TREKDATA.WARPFAC]
  1309.  
  1310.     fld     [esi + TREKDATA.WARPFAC]
  1311.     fld     st
  1312.     fmulp
  1313.     fstp    [esi + TREKDATA.WFACSQ]
  1314.  
  1315.     call    TConsole_SetGameMsgAttr
  1316.     mov     ecx, 611
  1317.     call    TConsole_Cram
  1318.  
  1319.     mov     cl, 1
  1320.     mcLoadLocal esi, loc53.pTrekData
  1321.     fld     [esi + TREKDATA.WARPFAC]
  1322.     call    TConsole_CramFloat
  1323.     call    TConsole_ScrollUp
  1324.  
  1325.     mcLoadLocal esi, loc53.pTrekData
  1326.     fld     [esi + TREKDATA.ENERGY]
  1327.     fld     [glb_dbl_0dot75]
  1328.     fmulp
  1329.     fstp    [esp + loc53.dbl_POWER]
  1330.  
  1331.     fld     [esi + TREKDATA.WARPFAC]
  1332.     fld     st
  1333.     fld     st
  1334.     fmulp
  1335.     fmulp
  1336.  
  1337.     mov     al, [esi + TREKDATA.SHLDUP]
  1338.     call    TCommon_LoadByteIntoFPU
  1339.     fmulp
  1340.  
  1341.     fld     [esp + loc53.dbl_POWER]
  1342.     fdivrp
  1343.     fstp    [esp + loc53.dbl_DISTMAX]
  1344.  
  1345.     call    TRandom_Ranf
  1346.     fld     [glb_dbl_2]
  1347.     fmulp
  1348.     fld     [glb_dbl_1dot4142]
  1349.     faddp
  1350.     fstp    [esp + loc53.dbl_DISTREQ]
  1351.  
  1352.     fld     [esp + loc53.dbl_DISTREQ]
  1353.     fld     [esp + loc53.dbl_DISTMAX]
  1354.     call    TCommon_FPU_Min
  1355.     mcLoadLocal esi, loc53.pTrekData
  1356.     fstp    [esi + TREKDATA.DIST]
  1357.  
  1358.     fld     [esi + TREKDATA.DIST]
  1359.     fld     [glb_dbl_Ten]
  1360.     fmulp
  1361.     fld     [esi + TREKDATA.WFACSQ]
  1362.     fdivp
  1363.     fstp    [esi + TREKDATA.TIME]
  1364.  
  1365.     call    TRandom_Ranf
  1366.     fld     [glb_dbl_12]
  1367.     fmulp
  1368.     mcLoadLocal esi, loc53.pTrekData
  1369.     fstp    [esi + TREKDATA.DIREC]
  1370.  
  1371.     mcZeroBits eax
  1372.     mov     [esi + TREKDATA.JUSTIN], al
  1373.     mov     [esi + TREKDATA.INORBIT], al
  1374.  
  1375.     invoke  Sleep, 1000
  1376.     call    TMove_WarpX
  1377.  
  1378.     mcLoadLocal esi, loc53.pTrekData
  1379.     cmp     [esi + TREKDATA.ALLDONE], 0
  1380.     jne     .done
  1381.  
  1382.     cmp     [esi + TREKDATA.JUSTIN], 0
  1383.     jne     .L200
  1384.  
  1385.     call    TConsole_ScrollUp
  1386.     call    TConsole_SetGameMsgAttr
  1387.     call    TConsole_Cram3Asterisks
  1388.     call    TConsole_CramShip
  1389.     mov     ecx, 612
  1390.     call    TConsole_Prout
  1391.     mov     al, 8
  1392.     jmp     .finished
  1393.  
  1394. .L200:
  1395.     call    TArray_MyGalaxyPtr
  1396.     cmp     dword [ebx], 1000
  1397.     je      .L47
  1398.  
  1399.     mcLoadLocal esi, loc53.pTrekData
  1400.     cmp     [esi + TREKDATA.REMKL], 0
  1401.     jne     .done
  1402.  
  1403.     mov     al, 1
  1404.     jmp     .finished
  1405.  
  1406. .done:
  1407.     mcEndLocals loc53.size
  1408.     ret
  1409.  
  1410. ; --- EOF ---
  1411.