Subversion Repositories Kolibri OS

Rev

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

  1. ; --------------------------------------------------------------------------
  2. ; FILE: TDock.Asm
  3. ; DATE: October 25, 2008
  4. ; --------------------------------------------------------------------------
  5.  
  6. ; --------------------------------------------------------------------------
  7. ; ABANDON
  8. ; --------------------------------------------------------------------------
  9. virtual at 0
  10. loc86:
  11.     .pTrekData PVOID ?
  12.     .nAttempts COUNT ?
  13.     .dbl_ShuttleDamage DOUBLE ?
  14.     .dbl_padding DOUBLE ?
  15.     .nBaseSectorX INT32 ?
  16.     .nBaseSectorY INT32 ?
  17.     .nFQSectorX INT32 ?
  18.     .nFQSectorY INT32 ?
  19.     .size = $
  20. end virtual
  21. ; --------------------------------------------------------------------------
  22. align PROC_ALIGN
  23. TDock_Abandon:
  24.     mcBeginLocals loc86.size
  25.  
  26.     mcLoadGameDataPtr esi
  27.     mcStoreLocal loc86.pTrekData, esi
  28.  
  29.     mov     cl, DEV_SHUTTLE_CRAFT
  30.     call    TArray_GetDblDamage
  31.     fstp    [esp + loc86.dbl_ShuttleDamage]
  32.  
  33.     fld     [esp + loc86.dbl_ShuttleDamage]
  34.     fldz
  35.     mc_CMP_ST0_ST1
  36.     jc      .L10
  37.     jz      .L15
  38.  
  39.     fld     [esp + loc86.dbl_ShuttleDamage]
  40.     fld1
  41.     fchs
  42.     mc_CMP_ST0_ST1
  43.     jz      .L6
  44.  
  45.     mov     ecx, 443
  46.     call    TConsole_ProutGameMsg
  47.     jmp     .done
  48.  
  49. .L6:
  50.     mov     ecx, 444
  51.     call    TConsole_ProutGameMsg
  52.     jmp     .done
  53.  
  54. .L10:
  55.     mov     ecx, 445
  56.     call    TConsole_ProutGameMsg
  57.     jmp     .done
  58.  
  59. .L15:
  60.     mcLoadLocal esi, loc86.pTrekData
  61.     cmp     [esi + TREKDATA.LANDED], 1
  62.     jne     .check1
  63.  
  64. .must_be_aboard:
  65.     mov     ecx, 675
  66.     call    TConsole_ProutGameMsg
  67.     jmp     .done
  68.  
  69. .check1:
  70.     cmp     [esi + TREKDATA.ICRAFT], 1
  71.     je      .must_be_aboard
  72.  
  73.     cmp     [esi + TREKDATA.ISCRAFT], 1
  74.     je      .L17
  75.  
  76.     mov     ecx, 674
  77.     call    TConsole_ProutGameMsg
  78.     jmp     .done
  79.  
  80. .L17:
  81.     call    TConsole_ScrollUp
  82.     mov     cl, ATTR_COND_RED
  83.     call    TConsole_SetAttr
  84.     mov     ecx, 676
  85.     call    TConsole_Prout
  86.     inc     ecx
  87.     call    TConsole_Prout
  88.     call    TConsole_ScrollUp
  89.  
  90.     invoke  Sleep, 800
  91.  
  92.     mov     ecx, 678
  93.     call    TConsole_ProutGameMsg
  94.     inc     ecx
  95.     call    TConsole_Prout
  96.     inc     ecx
  97.     call    TConsole_Prout
  98.  
  99.     mcLoadLocal esi, loc86.pTrekData
  100.     cmp     [esi + TREKDATA.REMBASE], 0
  101.     je      .finished
  102.  
  103.     invoke  Sleep, 800
  104.  
  105.     call    TConsole_ScrollUp
  106.     mov     ecx, 681
  107.     call    TConsole_Prout
  108.     inc     ecx
  109.     call    TConsole_Prout
  110.     inc     ecx
  111.     call    TConsole_Prout
  112.     inc     ecx
  113.     call    TConsole_Prout
  114.     inc     ecx
  115.     call    TConsole_Prout
  116.  
  117.     mcLoadLocal esi, loc86.pTrekData
  118.     mcZeroBits eax
  119.     mov     [esi + TREKDATA.ICRYSTL], al
  120.     mov     [esi + TREKDATA.IMINE], al
  121.     mov     [esi + TREKDATA.ISCATE], al
  122.  
  123.     movzx   edx, [esi + TREKDATA.REMBASE]
  124.     call    TRandom_IRan
  125.     mov     ecx, eax
  126.  
  127.     mcLoadLocal ebx, loc86.pTrekData
  128.     mcLoadMemberRef esi, TREKDATA.BASEQX
  129.     mcLoadMemberRef edi, TREKDATA.BASEQY
  130.     mov     al, [esi + ecx]
  131.     mov     dl, [edi + ecx]
  132.     mcStoreMember TREKDATA.QUADX, al
  133.     mcStoreMember TREKDATA.QUADY, dl
  134.  
  135. .L40:
  136.     mov     al, 5
  137.     mcStoreMember TREKDATA.SECTX, al
  138.     mcStoreMember TREKDATA.SECTY, al
  139.  
  140.     call    TCommon_NewQuad
  141.  
  142.     mov     al, 5
  143.     mov     dl, al
  144.     call    TArray_QuadPtr
  145.     mov     byte [ebx], CHAR_COSMOS
  146.     ;
  147.     ; Three attempts to put F.Q. beside the base
  148.     ;
  149.     mcLoad8bitsToReg32 eax, 3
  150.     mcStoreLocal loc86.nAttempts, eax
  151.  
  152.     mcLoadLocal esi, loc86.pTrekData
  153.     movzx   eax, [esi + TREKDATA.BASEX]
  154.     movzx   edx, [esi + TREKDATA.BASEY]
  155.     mcStoreLocal loc86.nBaseSectorX, eax
  156.     mcStoreLocal loc86.nBaseSectorY, edx
  157.  
  158. .attempt:
  159.     mcLoad8bitsToReg32 edx, 3
  160.     call    TRandom_IRan
  161.     dec     eax
  162.     add     eax, [esp + loc86.nBaseSectorX]
  163.     mcStoreLocal loc86.nFQSectorX, eax
  164.     call    TPhotons_IsValidSector
  165.     jnc     .next_attempt
  166.  
  167.     mcLoad8bitsToReg32 edx, 3
  168.     call    TRandom_IRan
  169.     dec     eax
  170.     add     eax, [esp + loc86.nBaseSectorY]
  171.     mcStoreLocal loc86.nFQSectorY, eax
  172.     call    TPhotons_IsValidSector
  173.     jnc     .next_attempt
  174.  
  175.     mcLoadLocal eax, loc86.nFQSectorX
  176.     mcLoadLocal edx, loc86.nFQSectorY
  177.     call    TArray_QuadPtr
  178.     cmp     byte [ebx], CHAR_COSMOS
  179.     je      .L60
  180.  
  181. .next_attempt:
  182.     dec     [esp + loc86.nAttempts]
  183.     jnz     .attempt
  184.     jmp     .L40
  185.  
  186. .L60:
  187.     mov     byte [ebx], CHAR_FQUEENE
  188.     mcLoadLocal esi, loc86.pTrekData
  189.     mov     [esi + TREKDATA.SHIP], CHAR_FQUEENE
  190.     mov     [esi + TREKDATA.CONDIT], CONDITION_DOCKED
  191.  
  192.     mcLoadLocal eax, loc86.nFQSectorX
  193.     mcLoadLocal edx, loc86.nFQSectorY
  194.     mov     [esi + TREKDATA.SECTX], al
  195.     mov     [esi + TREKDATA.SECTY], dl
  196.  
  197.     lea     edi, [esi + TREKDATA.DAMAGE]
  198.     mcLoad8bitsToReg32 ecx, 14
  199.  
  200. .clear_damages:
  201.     fldz
  202.     fstp    tbyte [edi]
  203.     add     edi, 10
  204.     loop    .clear_damages
  205.  
  206.     fld     [glb_dbl_3000]
  207.     fld     st
  208.     fstp    [esi + TREKDATA.INENRG]
  209.     fstp    [esi + TREKDATA.ENERGY]
  210.  
  211.     fld     [glb_dbl_1250]
  212.     fld     st
  213.     fstp    [esi + TREKDATA.INSHLD]
  214.     fstp    [esi + TREKDATA.SHLD]
  215.  
  216.     mov     al, 6
  217.     mov     [esi + TREKDATA.INTORPS], al
  218.     mov     [esi + TREKDATA.TORPS], al
  219.  
  220.     fld     [glb_dbl_3]
  221.     fld     st
  222.     fstp    [esi + TREKDATA.INLSR]
  223.     fstp    [esi + TREKDATA.LSUPRES]
  224.  
  225.     mov     [esi + TREKDATA.SHLDUP], 0
  226.  
  227.     fld     [glb_dbl_5]
  228.     fstp    [esi + TREKDATA.WARPFAC]
  229.  
  230.     fld     [glb_dbl_25]
  231.     fstp    [esi + TREKDATA.WFACSQ]
  232.     jmp     .done
  233.  
  234. .finished:
  235.     mov     al, 9
  236.     call    TFinish_Main
  237.  
  238. .done:
  239.     mcEndLocals loc86.size
  240.     ret
  241.  
  242. ; --------------------------------------------------------------------------
  243. ; DREPORT
  244. ; --------------------------------------------------------------------------
  245. virtual at 0
  246. loc38:
  247.     .nJDAM INT32 ?
  248.     .pDAMAGE PDOUBLE ?
  249.     .nL INDEX ?
  250.     .size = $
  251. end virtual
  252. ; --------------------------------------------------------------------------
  253. align PROC_ALIGN
  254. TDock_DamageReport:
  255.     mcBeginLocals loc38.size
  256.  
  257.     mcZeroBits eax
  258.     mcStoreLocal loc38.nJDAM, eax
  259.  
  260.     inc     eax
  261.     mcStoreLocal loc38.nL, eax
  262.  
  263.     mcLoadGameDataPtr esi
  264.     add     esi, TREKDATA.DAMAGE
  265.     mcStoreLocal loc38.pDAMAGE, esi
  266.  
  267. .check_device:
  268.     fldz
  269.     mcLoadLocal ebx, loc38.pDAMAGE
  270.     fld     tbyte [ebx]
  271.     mc_CMP_ST0_ST1
  272.     jc      .L20
  273.     jz      .L20
  274.  
  275.     cmp     [esp + loc38.nJDAM], 0
  276.     jne     .L10
  277.  
  278.     mov     cl, ATTR_SCAN_SCALE
  279.     call    TConsole_SetAttr
  280.     call    TConsole_ScrollUp
  281.     mov     ecx, 270
  282.     call    TConsole_Prout
  283.     mov     ecx, 271
  284.     call    TConsole_Prout
  285.     inc     [esp + loc38.nJDAM]
  286.  
  287. .L10:
  288.     mov     cl, 2
  289.     call    TConsole_RepeatBlank
  290.  
  291.     mov     cl, ATTR_REPORT_TEXT
  292.     call    TConsole_SetAttr
  293.  
  294.     mov     dl, 22
  295.     mcLoadLocal ecx, loc38.nL
  296.     add     ecx, 59
  297.     call    TConsole_CramString
  298.  
  299.     mov     cl, ATTR_REPORT_VALUE
  300.     call    TConsole_SetAttr
  301.  
  302.     cmp     [esp + loc38.nL], 14
  303.     je      .deathray
  304.  
  305.     mcLoadLocal esi, loc38.pDAMAGE
  306.     fld     tbyte [esi]
  307.     fld     [glb_dbl_0dot005]
  308.     faddp
  309.     mov     cl, 2
  310.     mov     dl, 5
  311.     call    TConsole_CramFloatWidth
  312.     jmp     .docked_value
  313.  
  314. .deathray:
  315.     mov     ecx, 269
  316.     call    TConsole_Cram
  317.  
  318. .docked_value:
  319.     mcLoadLocal esi, loc38.pDAMAGE
  320.     fld     tbyte [esi]
  321.     fld     [glb_dbl_DOCKFAC]
  322.     fmulp
  323.     fld     [glb_dbl_0dot005]
  324.     faddp
  325.     mov     cl, 2
  326.     mov     dl, 10
  327.     call    TConsole_CramFloatWidth
  328.     call    TConsole_ScrollUp
  329.  
  330. .L20:
  331.     ;
  332.     ; Next device
  333.     ;
  334.     add     [esp + loc38.pDAMAGE], 10
  335.     inc     [esp + loc38.nL]
  336.     cmp     [esp + loc38.nL], 14
  337.     jbe     .check_device
  338.  
  339.     cmp     [esp + loc38.nJDAM], 0
  340.     jne     .done
  341.  
  342.     call    TConsole_ScrollUp
  343.     call    TConsole_SetGameMsgAttr
  344.     mov     ecx, 268
  345.     call    TConsole_Prout
  346.  
  347. .done:
  348.     call    TConsole_ScrollUp
  349.     mcEndLocals loc38.size
  350.     ret
  351.  
  352. ; --------------------------------------------------------------------------
  353. ; This function will check if sufficient time passed between dockings to
  354. ; prevent the cheating by docking a few times in a row and getting
  355. ; additional photon tubes, quantum charges, etc.
  356. ; --------------------------------------------------------------------------
  357. ; Returns CF=1 if additional devices are allowed.
  358. ; --------------------------------------------------------------------------
  359. align PROC_ALIGN
  360. TDock_IsTime4Goodies:
  361.     mcLoadGameDataPtr esi
  362.  
  363.     fld     [esi + TREKDATA.DATE]
  364.     fld     [esi + TREKDATA.DOCKDATE]
  365.     fsubp
  366.     fld     [glb_dbl_0dot8]
  367.     mc_CMP_ST0_ST1
  368.  
  369.     ret
  370.  
  371. ; --------------------------------------------------------------------------
  372. ; Check if enhanced torpedoes available
  373. ; --------------------------------------------------------------------------
  374. align PROC_ALIGN
  375. TDock_GetQuantumCharges:
  376.     call    TDock_IsTime4Goodies
  377.     jnc     .done
  378.  
  379.     mcLoadGameDataPtr esi
  380.  
  381.     cmp     [esi + TREKDATA.QTORPS], 1
  382.     je      .done
  383.     cmp     [esi + TREKDATA.SKILL], 5
  384.     jb      .done
  385.  
  386.     mcLoad8bitsToReg32 edx, 100
  387.     call    TRandom_IRan
  388.     inc     eax
  389.     cmp     eax, 25
  390.     ja      .done
  391.  
  392.     mcLoadGameDataPtr edi
  393.     inc     [edi + TREKDATA.QTORPS]
  394.  
  395.     mcZeroBits ecx
  396.     cmp     [edi + TREKDATA.SHIP], CHAR_ENTERPRISE
  397.     sete    cl
  398.     mov     al, 8
  399.     shl     al, cl
  400.     mov     [edi + TREKDATA.TORPS], al
  401.  
  402. .report:
  403.     call    TConsole_SetCrewMsgAttr
  404.     mov     ecx, 707
  405.     call    TConsole_Prout
  406.  
  407. .done:
  408.     ret
  409.  
  410. ; --------------------------------------------------------------------------
  411. ; Check if additional photon tubes were installed
  412. ; --------------------------------------------------------------------------
  413. align PROC_ALIGN
  414. TDock_InstallTubes:
  415.     mcBeginLocals 4
  416.  
  417.     mcLoadGameDataPtr esi
  418.     cmp     [esi + TREKDATA.SKILL], 5
  419.     jb      .done
  420.  
  421.     cmp     [esi + TREKDATA.NPTUBES], 3
  422.     ja      .done
  423.  
  424.     mcLoad8bitsToReg32 edx, 100
  425.     call    TRandom_IRan
  426.     inc     eax
  427.     cmp     eax, 20
  428.     ja      .done
  429.  
  430.     call    TRandom_Ranf
  431.     fld     [glb_dbl_3]
  432.     fmulp
  433.     call    TCommon_FP_Truncate
  434.     inc     eax
  435.     mov     [esp], eax
  436.  
  437.     mcLoadGameDataPtr edi
  438.     add     [edi + TREKDATA.NPTUBES], al
  439.  
  440.     call    TConsole_SetCrewMsgAttr
  441.     mov     ecx, 701
  442.     call    TConsole_Cram
  443.  
  444.     mov     eax, [esp]
  445.     call    TConsole_CramInt
  446.  
  447.     mov     ecx, 702
  448.     call    TConsole_Cram
  449.  
  450.     cmp     dword [esp], 1
  451.     je      .skip
  452.  
  453.     mov     al, 'S'
  454.     call    TConsole_PutChar
  455.  
  456. .skip:
  457.     mov     ecx, 703
  458.     call    TConsole_Prout
  459.  
  460. .done:
  461.     mcEndLocals 4
  462.     ret
  463.  
  464. ; --------------------------------------------------------------------------
  465. ; DOCK
  466. ; --------------------------------------------------------------------------
  467. align PROC_ALIGN
  468. TDock_Main:
  469.     call    TConsole_SetGameMsgAttr
  470.  
  471.     mcLoadGameDataPtr esi
  472.     mov     [esi + TREKDATA.IDIDIT], 0
  473.  
  474.     cmp     [esi + TREKDATA.CONDIT], CONDITION_DOCKED
  475.     je      .L30
  476.  
  477.     cmp     [esi + TREKDATA.INORBIT], 0
  478.     jne     .L40
  479.  
  480.     cmp     [esi + TREKDATA.BASEX], 0
  481.     je      .L5
  482.  
  483.     mov     al, [esi + TREKDATA.SECTX]
  484.     mov     dl, [esi + TREKDATA.SECTY]
  485.     sub     al, [esi + TREKDATA.BASEX]
  486.     sub     dl, [esi + TREKDATA.BASEY]
  487.     movsx   eax, al
  488.     movsx   edx, dl
  489.  
  490.     call    TCommon_AbsEAX
  491.     cmp     eax, 1
  492.     ja      .L5
  493.  
  494.     mov     eax, edx
  495.     call    TCommon_AbsEAX
  496.     cmp     eax, 1
  497.     jbe     .L10
  498.  
  499. .L5:
  500.     call    TConsole_CramShip
  501.     mov     ecx, 264
  502.     jmp     .msg_end
  503.  
  504. .L10:
  505.     mcLoadGameDataPtr edi
  506.     mov     [edi + TREKDATA.CONDIT], CONDITION_DOCKED
  507.  
  508.     mov     ecx, 265
  509.     call    TConsole_Prout
  510.  
  511.     call    TDock_InstallTubes
  512.     call    TDock_GetQuantumCharges
  513.  
  514.     mcLoadGameDataPtr edi
  515.     inc     [edi + TREKDATA.IDIDIT]
  516.  
  517.     fld     [edi + TREKDATA.INSHLD]
  518.     fstp    [edi + TREKDATA.SHLD]
  519.  
  520.     fld     [edi + TREKDATA.INLSR]
  521.     fstp    [edi + TREKDATA.LSUPRES]
  522.  
  523.     cmp     [edi + TREKDATA.QTORPS], 1
  524.     je      .check_power
  525.  
  526.     mov     al, [edi + TREKDATA.INTORPS]
  527.     mov     [edi + TREKDATA.TORPS], al
  528.  
  529. .check_power:
  530.     fld     [edi + TREKDATA.INENRG]
  531.     fld     [edi + TREKDATA.ENERGY]
  532.     mc_CMP_ST0_ST1
  533.     jc      .refuel
  534.     ret
  535.  
  536. .refuel:
  537.     fld     [edi + TREKDATA.INENRG]
  538.     fstp    [edi + TREKDATA.ENERGY]
  539.     ret
  540.  
  541. .L30:
  542.     mov     ecx, 266
  543.     jmp     .msg_end
  544.  
  545. .L40:
  546.     mov     ecx, 267
  547.  
  548. .msg_end:
  549.     call    TConsole_Prout
  550.  
  551.     mcLoadGameDataPtr esi
  552.     fld     [esi + TREKDATA.DATE]
  553.     fstp    [esi + TREKDATA.DOCKDATE]
  554.     ret
  555.  
  556. ; --------------------------------------------------------------------------
  557. ; HELP
  558. ; --------------------------------------------------------------------------
  559. virtual at 0
  560. loc49:
  561.     .pTrekData PVOID ?
  562.     .dbl_DIST DOUBLE ?
  563.     .dbl_XDIST DOUBLE ?
  564.     .dbl_TEMP1 DOUBLE ?
  565.     .dbl_TEMP2 DOUBLE ?
  566.     .dbl_PROBF DOUBLE ?
  567.     .nIX BYTE ?
  568.     .nIY BYTE ?
  569.     .nLINE INDEX ?
  570.     .nL INDEX ?
  571.     .nLL INDEX ?
  572.     .nSUM INT32 ?
  573.     .size = $
  574. end virtual
  575. ; --------------------------------------------------------------------------
  576. align PROC_ALIGN
  577. TDock_Help:
  578.     mcBeginLocals loc49.size
  579.  
  580.     mcLoadGameDataPtr esi
  581.     mcStoreLocal loc49.pTrekData, esi
  582.  
  583.     cmp     [esi + TREKDATA.CONDIT], CONDITION_DOCKED
  584.     jne     .L10
  585.  
  586.     call    TConsole_SetCrewMsgAttr
  587.     mov     ecx, 562
  588.     call    TConsole_Prout
  589.     jmp     .done
  590.  
  591. .L10:
  592.     mov     cl, DEV_SUBSPACE_RADIO
  593.     call    TArray_IsDamaged
  594.     jnc     .L20
  595.  
  596.     mov     ecx, 563
  597.     call    TConsole_ProutGameMsg
  598.     jmp     .done
  599.  
  600. .L20:
  601.     mcLoadLocal esi, loc49.pTrekData
  602.     cmp     [esi + TREKDATA.REMBASE], 0
  603.     jne     .L30
  604.  
  605.     call    TConsole_SetCrewMsgAttr
  606.     mov     ecx, 564
  607.     call    TConsole_Prout
  608.     jmp     .done
  609.  
  610. .L30:
  611.     cmp     [esi + TREKDATA.LANDED], 1
  612.     jne     .L31
  613.  
  614.     call    TConsole_SetGameMsgAttr
  615.     mov     ecx, 565
  616.     call    TConsole_Cram
  617.     call    TConsole_CramShip
  618.     mov     al, '.'
  619.     call    TConsole_PutChar
  620.     call    TConsole_ScrollUp
  621.     jmp     .done
  622.  
  623. .L31:
  624.     cmp     [esi + TREKDATA.ISCRAFT], 0
  625.     jne     .L32
  626.  
  627.     mov     ecx, 407
  628.     call    TConsole_ProutGameMsg
  629.     jmp     .done
  630.  
  631. .L32:
  632.     inc     [esi + TREKDATA.NHELP]
  633.     cmp     [esi + TREKDATA.BASEX], 0
  634.     je      .L40
  635.  
  636.     mov     al, [esi + TREKDATA.BASEX]
  637.     sub     al, [esi + TREKDATA.SECTX]
  638.     movzx   eax, al
  639.     imul    eax, eax
  640.  
  641.     mov     dl, [esi + TREKDATA.BASEY]
  642.     sub     dl, [esi + TREKDATA.SECTY]
  643.     movzx   edx, dl
  644.     imul    edx, edx
  645.  
  646.     add     eax, edx
  647.     call    TCommon_FPU_Load_EAX
  648.     fsqrt
  649.     fstp    [esp + loc49.dbl_DIST]
  650.     jmp     .L60
  651.  
  652. .L40:
  653.     fld     [glb_dbl_1000]
  654.     fstp    [esp + loc49.dbl_DIST]
  655.  
  656.     movzx   ecx, [esi + TREKDATA.REMBASE]
  657.     lea     edi, [esi + TREKDATA.BASEQX]
  658.     lea     ebx, [esi + TREKDATA.BASEQY]
  659.     mcZeroBits edx
  660.  
  661. .check_base_distance:
  662.     mov     al, [edi]
  663.     sub     al, [esi + TREKDATA.QUADX]
  664.     movsx   eax, al
  665.     imul    eax, eax
  666.     mcStoreLocal loc49.nSUM, eax
  667.  
  668.     mov     al, [ebx]
  669.     sub     al, [esi + TREKDATA.QUADY]
  670.     movsx   eax, al
  671.     imul    eax, eax
  672.     add     eax, [esp + loc49.nSUM]
  673.  
  674.     call    TCommon_FPU_Load_EAX
  675.     fsqrt
  676.     fld     [glb_dbl_Ten]
  677.     fmulp
  678.     fld     st
  679.     fstp    [esp + loc49.dbl_XDIST]
  680.  
  681.     fld     [esp + loc49.dbl_DIST]
  682.     mc_CMP_ST0_ST1
  683.     jc      .next_base
  684.  
  685.     fld     [esp + loc49.dbl_XDIST]
  686.     fstp    [esp + loc49.dbl_DIST]
  687.     mcStoreLocal loc49.nLINE, edx
  688.  
  689. .next_base:
  690.     inc     edi
  691.     inc     ebx
  692.     inc     edx
  693.     loop    .check_base_distance
  694.  
  695.     lea     edi, [esi + TREKDATA.BASEQX]
  696.     lea     ebx, [esi + TREKDATA.BASEQY]
  697.     mcLoadLocal ecx, loc49.nLINE
  698.  
  699.     mov     al, [edi + ecx]
  700.     mov     dl, [ebx + ecx]
  701.     mov     [esi + TREKDATA.QUADX], al
  702.     mov     [esi + TREKDATA.QUADY], dl
  703.  
  704.     inc     [esi + TREKDATA.SHUTUP]
  705.     push    esi
  706.     call    TCommon_NewQuad
  707.     pop     esi
  708.     dec     [esi + TREKDATA.SHUTUP]
  709.  
  710. .L60:
  711.     mov     al, [esi + TREKDATA.SECTX]
  712.     mov     dl, [esi + TREKDATA.SECTY]
  713.     call    TArray_QuadPtr
  714.     mov     byte [ebx], CHAR_COSMOS
  715.  
  716.     call    TConsole_SetGameMsgAttr
  717.     mov     ecx, 199
  718.     call    TConsole_Cram
  719.  
  720.     mov     cl, 1
  721.     mcLoadLocal esi, loc49.pTrekData
  722.     mov     al, [esi + TREKDATA.QUADX]
  723.     mov     dl, [esi + TREKDATA.QUADY]
  724.     call    TConsole_CramLoc
  725.     mov     ecx, 566
  726.     call    TConsole_Cram
  727.     call    TConsole_CramShip
  728.     mov     ecx, 567
  729.     call    TConsole_Prout
  730.  
  731.     mov     esi, glb_dbl_0dot98
  732.     mcLoadLocalRef edi, loc49.dbl_DIST
  733.     call    TCommon_X_exp_Y
  734.     fld1
  735.     fsubrp
  736.     fstp    [esp + loc49.dbl_TEMP1]
  737.  
  738.     fld1
  739.     fld     [glb_dbl_3]
  740.     fdivp
  741.     fstp    [esp + loc49.dbl_TEMP2]
  742.  
  743.     mcLoadLocalRef esi, loc49.dbl_TEMP1
  744.     mcLoadLocalRef edi, loc49.dbl_TEMP2
  745.     call    TCommon_X_exp_Y
  746.     fstp    [esp + loc49.dbl_PROBF]
  747.  
  748.     mcLoad1 eax
  749.     mcStoreLocal loc49.nL, eax
  750.     call    TConsole_SetGameMsgAttr
  751.  
  752. .attempt:
  753.     mov     ecx, 567
  754.     add     ecx, [esp + loc49.nL]
  755.     call    TConsole_Cram
  756.  
  757.     mov     ecx, 571
  758.     call    TConsole_Cram
  759.     call    TConsole_CramShip
  760.     mov     ecx, 572
  761.     call    TConsole_Cram
  762.     invoke  Sleep, 1200
  763.  
  764.     call    TRandom_Ranf
  765.     fld     [esp + loc49.dbl_PROBF]
  766.     mc_CMP_ST0_ST1
  767.     jc      .L90
  768.  
  769. .L70:
  770.     mov     ecx, 573
  771.     call    TConsole_Prout
  772.  
  773.     inc     [esp + loc49.nL]
  774.     cmp     [esp + loc49.nL], 3
  775.     jbe     .attempt
  776.  
  777.     mov     al, 11
  778.     call    TFinish_Main
  779.     jmp     .done
  780.  
  781. .L90:
  782.     mcLoad1 eax
  783.     mcStoreLocal loc49.nLL, eax
  784.  
  785.     mcLoadLocal esi, loc49.pTrekData
  786.  
  787. .find_adjacent_pos:
  788.     call    TRandom_Ranf
  789.     fld     [glb_dbl_3]
  790.     fmulp
  791.     call    TCommon_FP_Truncate
  792.     add     al, [esi + TREKDATA.BASEX]
  793.     dec     eax
  794.     call    TPhotons_IsValidSector
  795.     jnc     .next_adjacent_try
  796.     mcStoreLocal loc49.nIX, al
  797.  
  798.     call    TRandom_Ranf
  799.     fld     [glb_dbl_3]
  800.     fmulp
  801.     call    TCommon_FP_Truncate
  802.     add     al, [esi + TREKDATA.BASEY]
  803.     dec     eax
  804.     call    TPhotons_IsValidSector
  805.     jnc     .next_adjacent_try
  806.     mcStoreLocal loc49.nIY, al
  807.  
  808.     mcLoadLocal al, loc49.nIX
  809.     mcLoadLocal dl, loc49.nIY
  810.     call    TArray_QuadPtr
  811.     cmp     byte [ebx], CHAR_COSMOS
  812.     je      .L110
  813.  
  814. .next_adjacent_try:
  815.     inc     [esp + loc49.nLL]
  816.     cmp     [esp + loc49.nLL], 5
  817.     jbe     .find_adjacent_pos
  818.     jmp     .L70
  819.  
  820. .L110:
  821.     push    ebx
  822.     mov     ecx, 574
  823.     call    TConsole_Prout
  824.     pop     ebx
  825.  
  826.     mcLoadLocal esi, loc49.pTrekData
  827.     mcLoadLocal al, loc49.nIX
  828.     mcLoadLocal dl, loc49.nIY
  829.     mov     [esi + TREKDATA.SECTX], al
  830.     mov     [esi + TREKDATA.SECTY], dl
  831.  
  832.     mov     al, [esi + TREKDATA.SHIP]
  833.     mov     byte [ebx], al
  834.  
  835.     call    TCommon_ResetDist
  836.     call    TCommon_SortKlingons
  837.     call    TDock_Main
  838.  
  839.     call    TConsole_ScrollUp
  840.     call    TConsole_SetCrewMsgAttr
  841.     mov     ecx, 575
  842.     call    TConsole_Prout
  843.  
  844. .done:
  845.     mcEndLocals loc49.size
  846.     ret
  847.  
  848. ; --- EOF ---
  849.