Subversion Repositories Kolibri OS

Rev

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

  1. ; --------------------------------------------------------------------------
  2. ; FILE: TGame.Asm
  3. ; DATE: September 28, 2008
  4. ; --------------------------------------------------------------------------
  5.  
  6. ; --------------------------------------------------------------------------
  7. ; WAIT
  8. ; --------------------------------------------------------------------------
  9. virtual at 0
  10. loc48:
  11.     .pTrekData PVOID ?
  12.     .dbl_TEMP DOUBLE ?
  13.     .dbl_ANUM DOUBLE ?
  14.     .dbl_AITEM2 DOUBLE ?
  15.     .dbl_ DOUBLE ?
  16.     .size = $
  17. end virtual
  18. ; --------------------------------------------------------------------------
  19. align PROC_ALIGN
  20. TGame_Wait:
  21.     mcBeginLocals loc48.size
  22.  
  23.     mcLoadGameDataPtr esi
  24.     mcStoreLocal loc48.pTrekData, esi
  25.  
  26.     mov     [esi + TREKDATA.IDIDIT], 0
  27.  
  28. .L10:
  29.     call    TCmdBuf_Scan
  30.  
  31.     fld     [ebx + TCmdBuf.cmdbuf_FNUM]
  32.     fstp    [esp + loc48.dbl_ANUM]
  33.  
  34.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
  35.     jne     .L20
  36.  
  37.     mov     ecx, 560
  38.     call    TGame_Prompt
  39.     jmp     .L10
  40.  
  41. .L20:
  42.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
  43.     jne     .L60
  44.  
  45.     fldz
  46.     fld     [esp + loc48.dbl_ANUM]
  47.     mc_CMP_ST0_ST1
  48.     jc      .done
  49.     jz      .done
  50.  
  51.     mcLoadLocal esi, loc48.pTrekData
  52.     fld     [esi + TREKDATA.REMTIME]
  53.     fld     [esp + loc48.dbl_ANUM]
  54.     mc_CMP_ST0_ST1
  55.     jnc     .verify
  56.  
  57.     cmp     [esi + TREKDATA.NENHERE], 0
  58.     je      .L30
  59.  
  60. .verify:
  61.     mcLoad8bitsToReg32 ecx, 158
  62.     call    TGame_JA
  63.     jnc     .done
  64.  
  65. .L30:
  66.     mcLoadLocal esi, loc48.pTrekData
  67.     inc     [esi + TREKDATA.RESTING]
  68.  
  69.     fld     [esp + loc48.dbl_ANUM]
  70.     fstp    [esp + loc48.dbl_AITEM2]
  71.  
  72. .L40:
  73.     fldz
  74.     fld     [esp + loc48.dbl_ANUM]
  75.     mc_CMP_ST0_ST1
  76.     jc      .stop_rest
  77.     jz      .stop_rest
  78.  
  79. .still_resting:
  80.     mcLoadLocal esi, loc48.pTrekData
  81.     cmp     [esi + TREKDATA.RESTING], 0
  82.     je      .L50
  83.  
  84.     fld     [esp + loc48.dbl_ANUM]
  85.     fstp    [esp + loc48.dbl_TEMP]
  86.  
  87.     cmp     [esi + TREKDATA.NENHERE], 0
  88.     je      .set_time
  89.  
  90.     call    TRandom_Ranf
  91.     fld1
  92.     faddp
  93.     fld     [esp + loc48.dbl_ANUM]
  94.     call    TCommon_FPU_Min
  95.     fstp    [esp + loc48.dbl_TEMP]
  96.  
  97. .set_time:
  98.     fld     [esp + loc48.dbl_TEMP]
  99.     mcLoadLocal edi, loc48.pTrekData
  100.     fstp    [edi + TREKDATA.TIME]
  101.  
  102.     fld     [esp + loc48.dbl_ANUM]
  103.     fld     [edi + TREKDATA.TIME]
  104.     mc_CMP_ST0_ST1
  105.     jnc     .check_tholian
  106.  
  107.     call    TAttack_Main
  108.  
  109. .check_tholian:
  110.     mcLoadLocal esi, loc48.pTrekData
  111.     cmp     [esi + TREKDATA.NENHERE], 0
  112.     jne     .call_events
  113.  
  114.     call    TEvents_MoveTholian
  115.  
  116. .call_events:
  117.     mcLoadLocal esi, loc48.pTrekData
  118.     cmp     [esi + TREKDATA.ALLDONE], 0
  119.     jne     .done
  120.  
  121.     call    TEvents_Main
  122.  
  123.     mcLoadLocal edi, loc48.pTrekData
  124.     mov     [edi + TREKDATA.IDIDIT], 1
  125.  
  126.     cmp     [edi + TREKDATA.ALLDONE], 0
  127.     jne     .done
  128.  
  129.     fld     [esp + loc48.dbl_ANUM]
  130.     fld     [esp + loc48.dbl_TEMP]
  131.     fsubp
  132.     fstp    [esp + loc48.dbl_ANUM]
  133.  
  134.     call    TArray_MyGalaxyPtr
  135.     cmp     dword [ebx], 1000
  136.     jne     .L40
  137.  
  138.     mcLoadLocal esi, loc48.pTrekData
  139.     mov     [esi + TREKDATA.RESTING], 0
  140.  
  141.     fldz
  142.     fstp    [esi + TREKDATA.TIME]
  143.     jmp     .L55
  144.  
  145. .stop_rest:
  146.     mcLoadLocal esi, loc48.pTrekData
  147.     mov     [esi + TREKDATA.RESTING], 0
  148.  
  149. .L50:
  150.     call    TConsole_SetGameMsgAttr
  151.     mcLoadLocal esi, loc48.pTrekData
  152.     fld     [esi + TREKDATA.REMTIME]
  153.     mov     cl, 2
  154.     call    TConsole_CramFloat
  155.     mov     ecx, 561
  156.     call    TConsole_Prout
  157.  
  158. .L55:
  159.     mcLoadLocal esi, loc48.pTrekData
  160.     cmp     [esi + TREKDATA.CONDIT], CONDITION_DOCKED
  161.     jne     .done
  162.     ;
  163.     ; Repair Death Ray!
  164.     ;
  165.     fld     [glb_dbl_9dot99]
  166.     fld     [esp + loc48.dbl_AITEM2]
  167.     fld     [esp + loc48.dbl_ANUM]
  168.     fsubp
  169.     mc_CMP_ST0_ST1
  170.     jc      .done
  171.  
  172.     fldz
  173.     mov     cl, DEV_DEATHRAY
  174.     call    TArray_SetDblDamage
  175.     jmp     .done
  176.  
  177. .L60:
  178.     call    TMove_BegPardon
  179.  
  180. .done:
  181.     mcEndLocals loc48.size
  182.     ret
  183.  
  184. ; --------------------------------------------------------------------------
  185. ; GAME
  186. ; --------------------------------------------------------------------------
  187. virtual at 0
  188. loc42:
  189.     .pTrekData PVOID ?
  190.     .nKILLTOT COUNT ?
  191.     .nDESTBAS COUNT ?
  192.     .size = $
  193. end virtual
  194. ; --------------------------------------------------------------------------
  195. align PROC_ALIGN
  196. TGame_Report:
  197.     mcBeginLocals loc42.size
  198.  
  199.     mcLoadGameDataPtr eax
  200.     mcStoreLocal loc42.pTrekData, eax
  201.  
  202.     call    TConsole_ScrollUp
  203.     call    TConsole_SetGameMsgAttr
  204.  
  205.     mov     ecx, 309
  206.     call    TConsole_Cram
  207.  
  208.     mcLoadLocal esi, loc42.pTrekData
  209.     mov     al, [esi + TREKDATA.LENGTH]
  210.     mcOnRegEqu al, 1, .short_game
  211.     mcOnRegEqu al, 2, .medium_game
  212.     mcOnRegEqu al, 4, .long_game
  213.  
  214. .assertion_failed:
  215.     ;int     3
  216.     jmp     .done
  217.  
  218. .short_game:
  219.     push    74
  220.     jmp     .print_length
  221.  
  222. .medium_game:
  223.     push    75
  224.     jmp     .print_length
  225.  
  226. .long_game:
  227.     push    76
  228.  
  229. .print_length:
  230.     pop     ecx
  231.     call    TConsole_Cram
  232.  
  233.     mov     al, CHAR_BLANK
  234.     call    TConsole_PutChar
  235.  
  236.     mcLoadLocal esi, loc42.pTrekData
  237.     movzx   eax, [esi + TREKDATA.SKILL]
  238.     cmp     al, 1
  239.     jb      .assertion_failed
  240.     cmp     al, 5
  241.     ja      .assertion_failed
  242.  
  243.     lea     ecx, [eax + 12]
  244.     call    TConsole_Cram
  245.  
  246.     mov     ecx, 310
  247.     call    TConsole_Prout
  248.  
  249.     mcLoadLocal esi, loc42.pTrekData
  250.     cmp     [esi + TREKDATA.IDIDIT], 0
  251.     je      .L110
  252.  
  253.     mov     ecx, 311
  254.     call    TConsole_Cram
  255.  
  256.     mcLoadLocal esi, loc42.pTrekData
  257.     add     esi, TREKDATA.PASSWD
  258.     mcZeroBits eax
  259.  
  260. .get_char:
  261.     lodsb
  262.     mcOnRegZero eax, .end_of_password
  263.  
  264.     call    TConsole_PutChar
  265.     jmp     .get_char
  266.  
  267. .end_of_password:
  268.     mov     ecx, 312
  269.     call    TConsole_Prout
  270.  
  271. .L110:
  272.     mcLoadLocal esi, loc42.pTrekData
  273.     mov     al, [esi + TREKDATA.KILLK]
  274.     add     al, [esi + TREKDATA.KILLC]
  275.     add     al, [esi + TREKDATA.NSCKILL]
  276.  
  277.     movzx   eax, al
  278.     mcStoreLocal loc42.nKILLTOT, eax
  279.     call    TConsole_CramInt
  280.  
  281.     mov     ecx, 313
  282.     call    TConsole_Cram
  283.  
  284.     mcLoad8bitsToReg32 ecx, 204
  285.     mcLoadLocal esi, loc42.pTrekData
  286.     movzx   eax, [esi + TREKDATA.INKLING]
  287.     call    TConsole_CramSinglePlural
  288.  
  289.     mov     ecx, 314
  290.     mcZeroBits eax
  291.     cmp     [esp + loc42.nKILLTOT], 1
  292.     sete    al
  293.     add     ecx, eax
  294.     call    TConsole_Cram
  295.  
  296.     mcLoad8bitsToReg32 ecx, 205
  297.     mcLoadLocal esi, loc42.pTrekData
  298.     movzx   eax, [esi + TREKDATA.KILLC]
  299.     call    TConsole_CramSinglePlural
  300.  
  301.     mov     al, '.'
  302.     call    TConsole_PutChar
  303.     call    TConsole_ScrollUp
  304.  
  305.     mcLoadLocal esi, loc42.pTrekData
  306.     cmp     [esi + TREKDATA.SKILL], 2
  307.     jbe     .L200
  308.  
  309.     mov     ecx, 316
  310.     call    TConsole_Cram
  311.  
  312.     mcLoadLocal esi, loc42.pTrekData
  313.     cmp     [esi + TREKDATA.NSCREM], 1
  314.     jne     .scom_news
  315.  
  316.     mov     ecx, 317
  317.     call    TConsole_Cram
  318.  
  319. .scom_news:
  320.     mov     ecx, 318
  321.     call    TConsole_Prout
  322.  
  323. .L200:
  324.     mcLoadLocal esi, loc42.pTrekData
  325.     mov     al, [esi + TREKDATA.INBASE]
  326.     sub     al, [esi + TREKDATA.REMBASE]
  327.     movzx   eax, al
  328.     mcStoreLocal loc42.nDESTBAS, eax
  329.     mcOnRegZero eax, .L210
  330.  
  331.     mov     ecx, 319
  332.     call    TConsole_CramSinglePlural
  333.     mov     ecx, 320
  334.     call    TConsole_Cram
  335.  
  336. .L210:
  337.     mcLoadLocal esi, loc42.pTrekData
  338.     mov     ecx, 319
  339.     movzx   eax, [esi + TREKDATA.REMBASE]
  340.     call    TConsole_CramSinglePlural
  341.  
  342.     cmp     [esp + loc42.nDESTBAS], 0
  343.     je      .end_of_bases
  344.  
  345.     mov     ecx, 321
  346.     call    TConsole_Cram
  347.  
  348. .end_of_bases:
  349.     mov     al, '.'
  350.     call    TConsole_PutChar
  351.     call    TConsole_ScrollUp
  352.  
  353.     mcLoadLocal esi, loc42.pTrekData
  354.     cmp     [esi + TREKDATA.ICSOS], 0
  355.     je      .L240
  356.  
  357.     fld     [esi + TREKDATA.FUTURE5]
  358.     fld     [glb_dbl_1E38]
  359.     mc_CMP_ST0_ST1
  360.     jc      .L240
  361.     jz      .L240
  362.  
  363.     cmp     [esi + TREKDATA.REMCOM], 0
  364.     je      .L240
  365.     cmp     [esi + TREKDATA.REMBASE], 0
  366.     je      .L240
  367.     cmp     [esi + TREKDATA.BATX], 0
  368.     je      .L240
  369.     cmp     [esi + TREKDATA.BATY], 0
  370.     je      .L240
  371.  
  372.     mov     al, [esi + TREKDATA.BATX]
  373.     mov     dl, [esi + TREKDATA.BATY]
  374.     call    TArray_GetGalaxyValue
  375.     mcLoad8bitsToReg32 eax, 100
  376.     xchg    eax, ecx
  377.     mcZeroBits edx
  378.     div     ecx
  379.     cmp     edx, 10
  380.     jb      .L240
  381.  
  382.     mov     al, [esi + TREKDATA.BATX]
  383.     mov     dl, [esi + TREKDATA.BATY]
  384.     movzx   ecx, [esi + TREKDATA.REMCOM]
  385.     lea     edi, [esi + TREKDATA.CY]
  386.     add     esi, TREKDATA.CX
  387.  
  388. .find_commander:
  389.     cmp     al, [esi]
  390.     jne     .next_commander
  391.     cmp     dl, [edi]
  392.     je      .L221
  393.  
  394. .next_commander:
  395.     inc     esi
  396.     inc     edi
  397.     loop    .find_commander
  398.     jmp     .L240
  399.  
  400. .L221:
  401.     mov     ecx, 322
  402.     call    TConsole_Cram
  403.  
  404.     mcLoadLocal esi, loc42.pTrekData
  405.     mov     al, [esi + TREKDATA.BATX]
  406.     mov     dl, [esi + TREKDATA.BATY]
  407.     mov     cl, 1
  408.     call    TConsole_CramLoc
  409.  
  410.     mov     ecx, 323
  411.     call    TConsole_Prout
  412.  
  413.     mov     ecx, 324
  414.     call    TConsole_Cram
  415.  
  416.     mov     cl, 1
  417.     mcLoadLocal esi, loc42.pTrekData
  418.     fld     [esi + TREKDATA.FUTURE5]
  419.     call    TConsole_CramFloat
  420.  
  421.     mov     al, '.'
  422.     call    TConsole_PutChar
  423.     call    TConsole_ScrollUp
  424.  
  425. .L240:
  426.     mcLoadLocal esi, loc42.pTrekData
  427.     cmp     [esi + TREKDATA.ISSOS], 0
  428.     je      .L245
  429.     cmp     [esi + TREKDATA.ISATB], 1
  430.     jne     .L245
  431.  
  432.     mov     ecx, 322
  433.     call    TConsole_Cram
  434.  
  435.     mcLoadLocal esi, loc42.pTrekData
  436.     mov     al, [esi + TREKDATA.ISX]
  437.     mov     dl, [esi + TREKDATA.ISY]
  438.     mov     cl, 1
  439.     call    TConsole_CramLoc
  440.  
  441.     mov     ecx, 325
  442.     call    TConsole_Prout
  443.  
  444.     mov     ecx, 324
  445.     call    TConsole_Cram
  446.  
  447.     mov     cl, 1
  448.     mcLoadLocal esi, loc42.pTrekData
  449.     fld     [esi + TREKDATA.FUTURE7]
  450.     call    TConsole_CramFloat
  451.  
  452.     mov     al, '.'
  453.     call    TConsole_PutChar
  454.     call    TConsole_ScrollUp
  455.  
  456. .L245:
  457.     mcLoadLocal esi, loc42.pTrekData
  458.     cmp     [esi + TREKDATA.ISUBDAM], 0
  459.     je      .L249
  460.  
  461.     mov     ecx, 328
  462.     call    TConsole_Cram
  463.  
  464.     mov     cl, DEV_SUBSPACE_RADIO
  465.     call    TArray_GetDblDamage
  466.     fldz
  467.     mcZeroBits eax
  468.     mc_CMP_ST0_ST1
  469.     setz    al
  470.     lea     ecx, [eax + 326]
  471.     call    TConsole_Cram
  472.  
  473.     mov     ecx, 329
  474.     call    TConsole_Prout
  475.     mov     ecx, 330
  476.     call    TConsole_Prout
  477.  
  478. .L249:
  479.     mcLoadLocal esi, loc42.pTrekData
  480.     cmp     [esi + TREKDATA.CASUAL], 0
  481.     je      .L250
  482.  
  483.     movzx   eax, [esi + TREKDATA.CASUAL]
  484.     call    TConsole_CramInt
  485.  
  486.     mov     ecx, 331
  487.     call    TConsole_Prout
  488.  
  489. .L250:
  490.     mcLoadLocal esi, loc42.pTrekData
  491.     cmp     [esi + TREKDATA.NHELP], 0
  492.     je      .L260
  493.  
  494.     movzx   eax, [esi + TREKDATA.NHELP]
  495.     mov     ecx, 332
  496.     call    TConsole_CramSinglePlural
  497.  
  498.     mov     ecx, 333
  499.     call    TConsole_Cram
  500.     call    TConsole_ScrollUp
  501.  
  502. .L260:
  503.     call    TConsole_ScrollUp
  504.  
  505. .done:
  506.     mcEndLocals loc42.size
  507.     ret
  508.  
  509. ; --------------------------------------------------------------------------
  510. ; Input:
  511. ;   EAX = value in range [1..8]
  512. ; Output:
  513. ;   CF=TRUE if value is in range
  514. ; --------------------------------------------------------------------------
  515. align PROC_ALIGN
  516. TGame_IsValidQuadrant:
  517.     cmp     eax, 1
  518.     jb      .failed
  519.     cmp     eax, 8
  520.     ja      .failed
  521.  
  522.     stc
  523.     ret
  524.  
  525. .failed:
  526.     clc
  527.     ret
  528.  
  529. ; --------------------------------------------------------------------------
  530. ; GETFN
  531. ; --------------------------------------------------------------------------
  532. ; Input:
  533. ;   ESI = PCHAR - buffer to store the name into
  534. ; --------------------------------------------------------------------------
  535. virtual at 0
  536. loc88:
  537.     .pszBuffer PCHAR ?
  538.     .nAskThreeTimes COUNT ?
  539.     .size = $
  540. end virtual
  541. ; --------------------------------------------------------------------------
  542. align PROC_ALIGN
  543. TGame_GetFileName:
  544.     mcBeginLocals loc88.size
  545.     mcStoreLocal loc88.pszBuffer, esi
  546.  
  547.     mcLoad8bitsToReg32 eax, 3
  548.     mcStoreLocal loc88.nAskThreeTimes, eax
  549.  
  550. .L40:
  551.     call    TCmdBuf_Scan
  552.     mov     al, [ebx + TCmdBuf.cmdbuf_KEY]
  553.     mcOnRegEqu al, CMD_TOKEN_EOL, .L75
  554.     mcOnRegNotEqu al, CMD_TOKEN_ALPHA, .L100
  555.  
  556.     call    TCmdBuf_AnsiStrLen
  557.     cmp     ecx, 27
  558.     ja      .too_long
  559.  
  560.     mcLoadLocal edi, loc88.pszBuffer
  561.     call    TString_AnsiCopy
  562.  
  563.     dec     edi
  564.     mov     esi, str_TRK
  565.     call    TString_AnsiCopy
  566.     jmp     .done
  567.  
  568. .too_long:
  569.     mov     ecx, 668
  570.     call    TConsole_ProutGameMsg
  571.     jmp     .ask
  572.  
  573. .L75:
  574.     dec     [esp + loc88.nAskThreeTimes]
  575.     jz      .L100
  576.  
  577. .ask:
  578.     mov     ecx, 665
  579.     call    TGame_Prompt
  580.     jmp     .L40
  581.  
  582. .L100:
  583.     mcLoadLocal esi, loc88.pszBuffer
  584.     mov     byte [esi], 0
  585.  
  586. .done:
  587.     mcEndLocals loc88.size
  588.     ret
  589.  
  590. ; --------------------------------------------------------------------------
  591. ; SCORE
  592. ; --------------------------------------------------------------------------
  593. virtual at 0
  594. loc57:
  595.     .pTrekData PVOID ?
  596.     .dbl_TIMUSED DOUBLE ?
  597.     .dbl_PERDATE DOUBLE ?
  598.     .dbl_ITHPERD DOUBLE ?
  599.     .dbl_pad_1 DOUBLE ?
  600.     .nISCORE INT32 ?
  601.     .nIWON INT32 ?
  602.     .nIDIED INT32 ?
  603.     .nKLSHIP INT32 ?
  604.     .size = $
  605. end virtual
  606. ; --------------------------------------------------------------------------
  607. align PROC_ALIGN
  608. TGame_Score:
  609.     mcBeginLocals loc57.size
  610.  
  611.     mcLoadGameDataPtr esi
  612.     mcStoreLocal loc57.pTrekData, esi
  613.  
  614.     fld     [esi + TREKDATA.DATE]
  615.     fld     [esi + TREKDATA.INDATE]
  616.     fsubp
  617.     fstp    [esp + loc57.dbl_TIMUSED]
  618.  
  619.     fld     [esp + loc57.dbl_TIMUSED]
  620.     fldz
  621.     mc_CMP_ST0_ST1
  622.     jz      .recalc_time_used
  623.  
  624.     cmp     [esi + TREKDATA.REMKL], 0
  625.     je      .calc_per_date
  626.  
  627. .recalc_time_used:
  628.     fld     [esp + loc57.dbl_TIMUSED]
  629.     fld     [glb_dbl_5]
  630.     call    TCommon_FPU_Max
  631.     fstp    [esp + loc57.dbl_TIMUSED]
  632.  
  633. .calc_per_date:
  634.     mov     al, [esi + TREKDATA.KILLC]
  635.     add     al, [esi + TREKDATA.KILLK]
  636.     add     al, [esi + TREKDATA.NSCKILL]
  637.     call    TCommon_LoadByteIntoFPU
  638.     fld     [esp + loc57.dbl_TIMUSED]
  639.     fdivp
  640.     fld     st
  641.     fstp    [esp + loc57.dbl_PERDATE]
  642.     fstp    [glb_dbl_KlingonsPerDate]
  643.  
  644.     fld     [esp + loc57.dbl_PERDATE]
  645.     fld     [glb_dbl_500]
  646.     fmulp
  647.     fld     [glb_dbl_0dot5]
  648.     faddp
  649.     fstp    [esp + loc57.dbl_ITHPERD]
  650.  
  651.     mcZeroBits eax
  652.     mcStoreLocal loc57.nIWON, eax
  653.  
  654.     cmp     [esi + TREKDATA.GAMEWON], 0
  655.     je      .check_ship
  656.  
  657.     movzx   eax, [esi + TREKDATA.SKILL]
  658.     imul    eax, 100
  659.     mcStoreLocal loc57.nIWON, eax
  660.  
  661. .check_ship:
  662.     mov     al, [esi + TREKDATA.SHIP]
  663.     mcOnRegEqu al, CHAR_ENTERPRISE, .killed_zero_ships
  664.     mcOnRegEqu al, CHAR_FQUEENE, .killed_one_ship
  665.     mcOnRegZero al, .killed_two_ships
  666.  
  667.     ;int     3
  668.     jmp     .done
  669.  
  670. .killed_zero_ships:
  671.     push    0
  672.     jmp     .store_killed_ships
  673.  
  674. .killed_one_ship:
  675.     push    1
  676.     jmp     .store_killed_ships
  677.  
  678. .killed_two_ships:
  679.     push    2
  680.  
  681. .store_killed_ships:
  682.     pop     edx
  683.     mcStoreLocal loc57.nKLSHIP, edx
  684.  
  685.     mcZeroBits eax
  686.     cmp     [esi + TREKDATA.ALIVE], 0
  687.     jne     .I_died
  688.  
  689.     add     eax, 200
  690.  
  691. .I_died:
  692.     mcStoreLocal loc57.nIDIED, eax
  693.  
  694.     cmp     [esi + TREKDATA.GAMEWON], 0
  695.     jne     .calc_total_score
  696.  
  697.     mov     [esi + TREKDATA.NROMREM], 0
  698.  
  699. .calc_total_score:
  700.     movzx   eax, [esi + TREKDATA.KILLK]
  701.     imul    eax, 10
  702.     mcStoreLocal loc57.nISCORE, eax
  703.  
  704.     movzx   eax, [esi + TREKDATA.KILLC]
  705.     imul    eax, 50
  706.     add     [esp + loc57.nISCORE], eax
  707.  
  708.     fld     [esp + loc57.dbl_ITHPERD]
  709.     call    TCommon_FP_Truncate
  710.     add     [esp + loc57.nISCORE], eax
  711.  
  712.     mcLoadLocal eax, loc57.nIWON
  713.     add     [esp + loc57.nISCORE], eax
  714.  
  715.     mcLoadLocal eax, loc57.nIDIED
  716.     sub     [esp + loc57.nISCORE], eax
  717.  
  718.     movzx   eax, [esi + TREKDATA.BASEKL]
  719.     imul    eax, 100
  720.     sub     [esp + loc57.nISCORE], eax
  721.  
  722.     mcLoadLocal eax, loc57.nKLSHIP
  723.     imul    eax, 100
  724.     sub     [esp + loc57.nISCORE], eax
  725.  
  726.     movzx   eax, [esi + TREKDATA.NHELP]
  727.     imul    eax, 45
  728.     sub     [esp + loc57.nISCORE], eax
  729.  
  730.     movzx   eax, [esi + TREKDATA.STARKL]
  731.     imul    eax, 5
  732.     sub     [esp + loc57.nISCORE], eax
  733.  
  734.     movzx   eax, [esi + TREKDATA.CASUAL]
  735.     sub     [esp + loc57.nISCORE], eax
  736.  
  737.     movzx   eax, [esi + TREKDATA.NROMKL]
  738.     imul    eax, 20
  739.     add     [esp + loc57.nISCORE], eax
  740.  
  741.     movzx   eax, [esi + TREKDATA.NSCKILL]
  742.     imul    eax, 200
  743.     add     [esp + loc57.nISCORE], eax
  744.  
  745.     movzx   eax, [esi + TREKDATA.NPLANKL]
  746.     imul    eax, 10
  747.     sub     [esp + loc57.nISCORE], eax
  748.  
  749.     movzx   eax, [esi + TREKDATA.NROMREM]
  750.     add     [esp + loc57.nISCORE], eax
  751.     ;
  752.     ; Report all that...
  753.     ;
  754.     mov     cl, ATTR_REPORT_TEXT
  755.     call    TConsole_SetAttr
  756.     call    TConsole_ScrollUp
  757.     mov     ecx, 632
  758.     call    TConsole_Prout
  759.     call    TConsole_ScrollUp
  760.  
  761.     mcLoadLocal esi, loc57.pTrekData
  762.     cmp     [esi + TREKDATA.NROMKL], 0
  763.     je      .L1
  764.  
  765.     movzx   eax, [esi + TREKDATA.NROMKL]
  766.     mov     cl, 6
  767.     call    TConsole_CramIntWidth
  768.  
  769.     mov     ecx, 633
  770.     call    TConsole_Cram
  771.  
  772.     mcLoadLocal esi, loc57.pTrekData
  773.     movzx   eax, [esi + TREKDATA.NROMKL]
  774.     imul    eax, 20
  775.     mov     cl, 10
  776.     call    TConsole_CramIntWidth
  777.     call    TConsole_ScrollUp
  778.  
  779. .L1:
  780.     mcLoadLocal esi, loc57.pTrekData
  781.     cmp     [esi + TREKDATA.NROMREM], 0
  782.     je      .L5
  783.  
  784.     movzx   eax, [esi + TREKDATA.NROMREM]
  785.     mov     cl, 6
  786.     call    TConsole_CramIntWidth
  787.  
  788.     mov     ecx, 634
  789.     call    TConsole_Cram
  790.  
  791.     mcLoadLocal esi, loc57.pTrekData
  792.     movzx   eax, [esi + TREKDATA.NROMREM]
  793.     mov     cl, 10
  794.     call    TConsole_CramIntWidth
  795.     call    TConsole_ScrollUp
  796.  
  797. .L5:
  798.     mcLoadLocal esi, loc57.pTrekData
  799.     cmp     [esi + TREKDATA.KILLK], 0
  800.     je      .L10
  801.  
  802.     movzx   eax, [esi + TREKDATA.KILLK]
  803.     mov     cl, 6
  804.     call    TConsole_CramIntWidth
  805.  
  806.     mov     ecx, 635
  807.     call    TConsole_Cram
  808.  
  809.     mcLoadLocal esi, loc57.pTrekData
  810.     movzx   eax, [esi + TREKDATA.KILLK]
  811.     imul    eax, 10
  812.     mov     cl, 10
  813.     call    TConsole_CramIntWidth
  814.     call    TConsole_ScrollUp
  815.  
  816. .L10:
  817.     mcLoadLocal esi, loc57.pTrekData
  818.     cmp     [esi + TREKDATA.KILLC], 0
  819.     je      .L12
  820.  
  821.     movzx   eax, [esi + TREKDATA.KILLC]
  822.     mov     cl, 6
  823.     call    TConsole_CramIntWidth
  824.  
  825.     mov     ecx, 636
  826.     call    TConsole_Cram
  827.  
  828.     mcLoadLocal esi, loc57.pTrekData
  829.     movzx   eax, [esi + TREKDATA.KILLC]
  830.     imul    eax, 50
  831.     mov     cl, 10
  832.     call    TConsole_CramIntWidth
  833.     call    TConsole_ScrollUp
  834.  
  835. .L12:
  836.     mcLoadLocal esi, loc57.pTrekData
  837.     cmp     [esi + TREKDATA.NSCKILL], 0
  838.     je      .L15
  839.  
  840.     movzx   eax, [esi + TREKDATA.NSCKILL]
  841.     mov     cl, 6
  842.     call    TConsole_CramIntWidth
  843.  
  844.     mov     ecx, 637
  845.     call    TConsole_Prout
  846.  
  847. .L15:
  848.     fld     [esp + loc57.dbl_ITHPERD]
  849.     fldz
  850.     mc_CMP_ST0_ST1
  851.     jz      .L20
  852.  
  853.     fld     [esp + loc57.dbl_PERDATE]
  854.     mov     cl, 2
  855.     mov     dl, 6
  856.     call    TConsole_CramFloatWidth
  857.  
  858.     mov     ecx, 638
  859.     call    TConsole_Cram
  860.  
  861.     fld     [esp + loc57.dbl_ITHPERD]
  862.     call    TCommon_FP_Truncate
  863.     mov     cl, 10
  864.     call    TConsole_CramIntWidth
  865.     call    TConsole_ScrollUp
  866.  
  867. .L20:
  868.     mcLoadLocal esi, loc57.pTrekData
  869.     cmp     [esi + TREKDATA.STARKL], 0
  870.     je      .L30
  871.  
  872.     movzx   eax, [esi + TREKDATA.STARKL]
  873.     mov     cl, 6
  874.     call    TConsole_CramIntWidth
  875.  
  876.     mov     ecx, 639
  877.     call    TConsole_Cram
  878.  
  879.     mcLoadLocal esi, loc57.pTrekData
  880.     movzx   eax, [esi + TREKDATA.STARKL]
  881.     imul    eax, 5
  882.     mov     cl, 10
  883.     neg     eax
  884.     call    TConsole_CramIntWidth
  885.     call    TConsole_ScrollUp
  886.  
  887. .L30:
  888.     mcLoadLocal esi, loc57.pTrekData
  889.     cmp     [esi + TREKDATA.NPLANKL], 0
  890.     je      .L32
  891.  
  892.     movzx   eax, [esi + TREKDATA.NPLANKL]
  893.     mov     cl, 6
  894.     call    TConsole_CramIntWidth
  895.  
  896.     mov     ecx, 640
  897.     call    TConsole_Cram
  898.  
  899.     mcLoadLocal esi, loc57.pTrekData
  900.     movzx   eax, [esi + TREKDATA.NPLANKL]
  901.     imul    eax, 10
  902.     mov     cl, 10
  903.     neg     eax
  904.     call    TConsole_CramIntWidth
  905.     call    TConsole_ScrollUp
  906.  
  907. .L32:
  908.     mcLoadLocal esi, loc57.pTrekData
  909.     cmp     [esi + TREKDATA.BASEKL], 0
  910.     je      .L35
  911.  
  912.     movzx   eax, [esi + TREKDATA.BASEKL]
  913.     mov     cl, 6
  914.     call    TConsole_CramIntWidth
  915.  
  916.     mov     ecx, 641
  917.     call    TConsole_Cram
  918.  
  919.     mcLoadLocal esi, loc57.pTrekData
  920.     movzx   eax, [esi + TREKDATA.BASEKL]
  921.     imul    eax, 100
  922.     mov     cl, 10
  923.     neg     eax
  924.     call    TConsole_CramIntWidth
  925.     call    TConsole_ScrollUp
  926.  
  927. .L35:
  928.     mcLoadLocal esi, loc57.pTrekData
  929.     cmp     [esi + TREKDATA.NHELP], 0
  930.     je      .L40
  931.  
  932.     movzx   eax, [esi + TREKDATA.NHELP]
  933.     mov     cl, 6
  934.     call    TConsole_CramIntWidth
  935.  
  936.     mov     ecx, 642
  937.     call    TConsole_Cram
  938.  
  939.     mcLoadLocal esi, loc57.pTrekData
  940.     movzx   eax, [esi + TREKDATA.NHELP]
  941.     imul    eax, 45
  942.     mov     cl, 10
  943.     neg     eax
  944.     call    TConsole_CramIntWidth
  945.     call    TConsole_ScrollUp
  946.  
  947. .L40:
  948.     mcLoadLocal esi, loc57.pTrekData
  949.     cmp     [esi + TREKDATA.CASUAL], 0
  950.     je      .L45
  951.  
  952.     movzx   eax, [esi + TREKDATA.CASUAL]
  953.     mov     cl, 6
  954.     call    TConsole_CramIntWidth
  955.  
  956.     mov     ecx, 643
  957.     call    TConsole_Cram
  958.  
  959.     mcLoadLocal esi, loc57.pTrekData
  960.     movzx   eax, [esi + TREKDATA.CASUAL]
  961.     mov     cl, 10
  962.     neg     eax
  963.     call    TConsole_CramIntWidth
  964.     call    TConsole_ScrollUp
  965.  
  966. .L45:
  967.     cmp     [esp + loc57.nKLSHIP], 0
  968.     je      .L50
  969.  
  970.     mov     cl, 6
  971.     mcLoadLocal eax, loc57.nKLSHIP
  972.     call    TConsole_CramIntWidth
  973.  
  974.     mov     ecx, 644
  975.     call    TConsole_Cram
  976.  
  977.     mcLoadLocal eax, loc57.nKLSHIP
  978.     imul    eax, 100
  979.     mov     cl, 10
  980.     neg     eax
  981.     call    TConsole_CramIntWidth
  982.     call    TConsole_ScrollUp
  983.  
  984. .L50:
  985.     mcLoadLocal esi, loc57.pTrekData
  986.     cmp     [esi + TREKDATA.ALIVE], 0
  987.     jne     .L60
  988.  
  989.     mov     ecx, 645
  990.     call    TConsole_Prout
  991.  
  992. .L60:
  993.     mcLoadLocal esi, loc57.pTrekData
  994.     cmp     [esi + TREKDATA.GAMEWON], 0
  995.     je      .L70
  996.  
  997.     mov     ecx, 646
  998.     call    TConsole_Cram
  999.  
  1000.     movzx   ecx, [esi + TREKDATA.SKILL]
  1001.     add     ecx, 646
  1002.     call    TConsole_Cram
  1003.  
  1004.     mcLoadLocal eax, loc57.nIWON
  1005.     mov     cl, 25
  1006.     call    TConsole_CramIntWidth
  1007.     call    TConsole_ScrollUp
  1008.  
  1009. .L70:
  1010.     call    TConsole_ScrollUp
  1011.  
  1012.     mov     ecx, 652
  1013.     call    TConsole_Cram
  1014.  
  1015.     mcLoadLocal eax, loc57.nISCORE
  1016.     mov     [glb_Score], eax
  1017.     mov     cl, 10
  1018.     call    TConsole_CramIntWidth
  1019.     call    TConsole_ScrollUp
  1020.  
  1021. .done:
  1022.     mcEndLocals loc57.size
  1023.     ret
  1024.  
  1025. ; --------------------------------------------------------------------------
  1026. ; Input:
  1027. ;   ECX = index of the message table
  1028. ; --------------------------------------------------------------------------
  1029. align PROC_ALIGN
  1030. TGame_Prompt:
  1031.     push    ebx
  1032.  
  1033.     push    ecx
  1034.     mov     cl, ATTR_PROMPT_TEXT
  1035.     call    TConsole_SetAttr
  1036.     pop     ecx
  1037.  
  1038.     call    TConsole_Cram
  1039.     call    TConsole_RefreshCaretLine
  1040.     lock    dec [glb_GameThreadBusy]
  1041.  
  1042. .check_if_cmd_complete:
  1043.     mcZeroBits eax
  1044.     lock    add [glb_GameThreadBusy], eax
  1045.     jnz     .done
  1046.  
  1047.     invoke  Sleep, eax
  1048.     jmp     .check_if_cmd_complete
  1049.  
  1050. .done:
  1051.     pop     ebx
  1052.     ret
  1053.  
  1054. ; --------------------------------------------------------------------------
  1055. ; JA
  1056. ; --------------------------------------------------------------------------
  1057. ; Input:
  1058. ;   ECX = prompt text index
  1059. ; Output:
  1060. ;   CF=1 if user answered "YES"
  1061. ; --------------------------------------------------------------------------
  1062. virtual at 0
  1063. loc27:
  1064.     .nMsgIndex INDEX ?
  1065.     .size = $
  1066. end virtual
  1067. ; --------------------------------------------------------------------------
  1068. align PROC_ALIGN
  1069. TGame_JA:
  1070.     mcBeginLocals loc27.size
  1071.     mcStoreLocal loc27.nMsgIndex, ecx
  1072.  
  1073. .ask:
  1074.     mcLoadLocal ecx, loc27.nMsgIndex
  1075.     call    TGame_Prompt
  1076.  
  1077.     call    TCmdBuf_Scan
  1078.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
  1079.     je      .ask
  1080.  
  1081.     mcLoad8bitsToReg32 ecx, 159
  1082.     call    TCmdBuf_Crop
  1083.     jc      .return_yes
  1084.  
  1085.     mcLoad8bitsToReg32 ecx, 122
  1086.     call    TCmdBuf_Crop
  1087.     jc      .return_no
  1088.  
  1089.     call    TConsole_SetGameMsgAttr
  1090.     call    TConsole_ScrollUp
  1091.     mcLoad8bitsToReg32 ecx, 160
  1092.     call    TConsole_Prout
  1093.     call    TConsole_ScrollUp
  1094.     jmp     .ask
  1095.  
  1096. .return_yes:
  1097.     mcEndLocals loc27.size
  1098.     stc
  1099.     ret
  1100.  
  1101. .return_no:
  1102.     mcEndLocals loc27.size
  1103.     clc
  1104.     ret
  1105.  
  1106. ; --------------------------------------------------------------------------
  1107. ; FREEZE
  1108. ; --------------------------------------------------------------------------
  1109. ; glb_bEmExit = 0 means normal freezing
  1110. ; glb_bEmExit = 1 means freezing into EMSAVE.TRK
  1111. ; --------------------------------------------------------------------------
  1112. virtual at 0
  1113. loc89:
  1114.     .strFileName CHARS 32
  1115.     .hFile HANDLE ?
  1116.     .dwSize COUNT ?
  1117.     .size = $
  1118. end virtual
  1119. ; --------------------------------------------------------------------------
  1120. align PROC_ALIGN
  1121. TGame_Freeze:
  1122.     mcBeginLocals loc89.size
  1123.  
  1124.     mcLoadGameDataPtr edi
  1125.     mov     [edi + TREKDATA.IDIDIT], 0
  1126.  
  1127.     cmp     [glb_bEmExit], 1
  1128.     je      .emergency_exit
  1129.  
  1130. .ask_fname:
  1131.     mcLoadLocalRef esi, loc89.strFileName
  1132.     call    TGame_GetFileName
  1133.  
  1134.     cmp     byte [esp], 0
  1135.     je      .L920
  1136.  
  1137.     invoke  GetFileAttributes, esp
  1138.     mcOnRegEqu eax, -1, .save
  1139.  
  1140.     mov     cl, ATTR_PROMPT_TEXT
  1141.     call    TConsole_SetAttr
  1142.  
  1143.     mov     ecx, 669
  1144.     call    TConsole_Cram
  1145.  
  1146.     mov     esi, esp
  1147.     call    TConsole_CramAnsi
  1148.  
  1149.     mov     ecx, 670
  1150.     call    TGame_JA
  1151.     jnc     .ask_fname
  1152.     jmp     .save
  1153.  
  1154. .emergency_exit:
  1155.     mov     esi, str_EmSaveGame
  1156.     mov     edi, esp
  1157.     call    TString_AnsiCopy
  1158.  
  1159. .save:
  1160.     mcZeroBits eax
  1161.     mcStoreLocal loc89.dwSize, eax
  1162.  
  1163.     mov     esi, esp
  1164.     invoke  CreateFileAnsi, esi, GENERIC_WRITE, 0, 0,\
  1165.             CREATE_ALWAYS, FILE_FLAG_SEQ_SCAN, 0
  1166.  
  1167.     mcStoreLocal loc89.hFile, eax
  1168.     mcOnRegEqu eax, -1, .L920
  1169.  
  1170.     mov     esi, [glb_pCommon]
  1171.     mov     ecx, TCommon.size
  1172.     mcLoadLocal ebx, loc89.hFile
  1173.     mcLoadLocalRef edi, loc89.dwSize
  1174.     invoke  WriteFile, ebx, esi, ecx, edi, 0
  1175.  
  1176.     invoke  CloseHandle, ebx
  1177.  
  1178.     mov     ecx, TCommon.size
  1179.     cmp     [edi], ecx
  1180.     jne     .L920
  1181.  
  1182. .file_stored:
  1183.     mcLoadGameDataPtr edi
  1184.     inc     [edi + TREKDATA.IDIDIT]
  1185.  
  1186.     mov     ecx, 666
  1187.     call    TConsole_ProutGameMsg
  1188.     jmp     .done
  1189.  
  1190. .L920:
  1191.     mov     ecx, 667
  1192.     call    TConsole_ProutGameMsg
  1193.  
  1194. .done:
  1195.     mcEndLocals loc89.size
  1196.     ret
  1197.  
  1198. ; --------------------------------------------------------------------------
  1199. align PROC_ALIGN
  1200. TGame_Prelim:
  1201.     mcLoad8bitsToReg32 ecx, 92
  1202.     call    TConsole_ProutGameMsg
  1203.     dec     ecx
  1204.     call    TConsole_Prout
  1205.  
  1206.     mcLoad1 ecx
  1207.     call    TConsole_Prout
  1208.  
  1209.     mcLoad8bitsToReg32 ecx, 91
  1210.     call    TConsole_Prout
  1211.     inc     ecx
  1212.     call    TConsole_Prout
  1213.     dec     ecx
  1214.     call    TConsole_Prout
  1215.  
  1216.     mov     ecx, 654
  1217.     call    TConsole_Prout
  1218.     inc     ecx
  1219.     call    TConsole_Prout
  1220.     inc     ecx
  1221.     call    TConsole_Prout
  1222.  
  1223.     mcLoad8bitsToReg32 ecx, 91
  1224.     call    TConsole_Prout
  1225.  
  1226.     mov     ecx, 657
  1227.     call    TConsole_Prout
  1228.     inc     ecx
  1229.     call    TConsole_Prout
  1230.  
  1231.     mcLoad8bitsToReg32 ecx, 91
  1232.     call    TConsole_Prout
  1233.  
  1234.     mov     ecx, 659
  1235.     call    TConsole_Prout
  1236.     inc     ecx
  1237.     call    TConsole_Prout
  1238.     inc     ecx
  1239.     call    TConsole_Prout
  1240.     inc     ecx
  1241.     call    TConsole_Prout
  1242.  
  1243.     mcLoad8bitsToReg32 ecx, 91
  1244.     call    TConsole_Prout
  1245.     call    TConsole_Prout
  1246.  
  1247.     mov     ecx, 663
  1248.     call    TConsole_Prout
  1249.     mcLoad8bitsToReg32 ecx, 92
  1250.     call    TConsole_Prout
  1251.  
  1252.     mov     cl, 5
  1253.     call    TConsole_Skip
  1254.     ret
  1255.  
  1256. ; --------------------------------------------------------------------------
  1257. ; ESI = points to file name
  1258. ; --------------------------------------------------------------------------
  1259. align PROC_ALIGN
  1260. TGame_CutTheExtension:
  1261.     mov     edi, esi
  1262.     mov     al, '.'
  1263.     mcLoadNeg1 ecx
  1264.     repne   scasb
  1265.     dec     edi
  1266.     mov     byte [edi], 0
  1267.     ret
  1268.  
  1269. ; --------------------------------------------------------------------------
  1270. virtual at 0
  1271. loc101:
  1272.     .fileInfo rb WIN32_FIND_DATA.size
  1273.     .hFind HANDLE ?
  1274.     .nFilesPerLine COUNT ?
  1275.     .size = $
  1276. end virtual
  1277. ; --------------------------------------------------------------------------
  1278. align PROC_ALIGN
  1279. TGame_ListFrozenGames:
  1280.     mcBeginLocals loc101.size
  1281.  
  1282.     invoke  FindFirstFile, str_FileMask, esp
  1283.     mcStoreLocal loc101.hFind, eax
  1284.     mcOnRegEqu eax, -1, .done
  1285.  
  1286.     mov     cl, ATTR_SCAN_SCALE
  1287.     call    TConsole_SetAttr
  1288.     call    TConsole_ScrollUp
  1289.     mov     ecx, 709
  1290.     call    TConsole_Prout
  1291.     call    TConsole_ScrollUp
  1292.     mov     [esp + loc101.nFilesPerLine], 4
  1293.  
  1294. .list_that_file:
  1295.     mov     eax, [esp + WIN32_FIND_DATA.dwAttr]
  1296.     test    eax, FILE_ATTR_DIR
  1297.     jnz     .next
  1298.  
  1299.     mov     cl, 2
  1300.     call    TConsole_RepeatBlank
  1301.  
  1302.     lea     esi, [esp + WIN32_FIND_DATA.strName]
  1303.     call    TGame_CutTheExtension
  1304.     call    TConsole_CramWide
  1305.  
  1306.     dec     [esp + loc101.nFilesPerLine]
  1307.     jnz     .next
  1308.  
  1309.     mov     [esp + loc101.nFilesPerLine], 4
  1310.     call    TConsole_ScrollUp
  1311.  
  1312. .next:
  1313.     mcLoadLocal edx, loc101.hFind
  1314.     invoke  FindNextFile, edx, esp
  1315.     mcOnRegNotZero eax, .list_that_file
  1316.  
  1317.     call    TConsole_ScrollUp
  1318.  
  1319.     cmp     [esp + loc101.nFilesPerLine], 4
  1320.     je      .done
  1321.  
  1322.     call    TConsole_ScrollUp
  1323.  
  1324. .done:
  1325.     mcEndLocals loc101.size
  1326.     ret
  1327.  
  1328. ; --------------------------------------------------------------------------
  1329. ; THAW
  1330. ; --------------------------------------------------------------------------
  1331. virtual at 0
  1332. loc87:
  1333.     .fileName CHARS 32
  1334.     .hFile HANDLE ?
  1335.     .dwSize COUNT ?
  1336.     .size = $
  1337. end virtual
  1338. ; --------------------------------------------------------------------------
  1339. align PROC_ALIGN
  1340. TGame_Thaw:
  1341.     mcBeginLocals loc87.size
  1342.  
  1343.     mcLoadGameDataPtr edi
  1344.     mov     [edi + TREKDATA.IDIDIT], 0
  1345.  
  1346. .ask_fname:
  1347.     mov     esi, esp
  1348.     call    TGame_GetFileName
  1349.  
  1350.     cmp     byte [esp], 0
  1351.     je      .L800
  1352.  
  1353.     invoke  GetFileAttributes, esp
  1354.     mcOnRegEqu eax, -1, .no_such_file
  1355.  
  1356.     mov     esi, esp
  1357.     invoke  CreateFileAnsi, esi, GENERIC_READ, 0, 0,\
  1358.             OPEN_EXISTING, FILE_FLAG_SEQ_SCAN, 0
  1359.  
  1360.     mcStoreLocal loc87.hFile, eax
  1361.     mcOnRegEqu eax, -1, .L800
  1362.  
  1363.     mov     esi, [glb_pCommon]
  1364.     mov     ecx, TCommon.size
  1365.     mcLoadLocal ebx, loc87.hFile
  1366.     mcLoadLocalRef edi, loc87.dwSize
  1367.     mov     dword [edi], 0
  1368.     invoke  ReadFile, ebx, esi, ecx, edi, 0
  1369.  
  1370.     invoke  CloseHandle, ebx
  1371.  
  1372.     mov     ecx, TCommon.size
  1373.     cmp     [edi], ecx
  1374.     jne     .L800
  1375.  
  1376.     mov     ecx, 671
  1377.     call    TConsole_ProutGameMsg
  1378.     jmp     .done
  1379.  
  1380. .no_such_file:
  1381.     mov     esi, esp
  1382.     mov     edi, str_CmdListGames
  1383.     call    TString_AnsiEqual
  1384.     jc      .list_all_files
  1385.  
  1386.     mov     ecx, 673
  1387.     call    TConsole_ProutGameMsg
  1388.     jmp     .ask_fname
  1389.  
  1390. .list_all_files:
  1391.     call    TGame_ListFrozenGames
  1392.     jmp     .ask_fname
  1393.  
  1394. .L800:
  1395.     ;
  1396.     ; Game was not loaded
  1397.     ;
  1398.     mcLoadGameDataPtr edi
  1399.     add     edi, TREKDATA.PASSWD
  1400.     mov     byte [edi], 0
  1401.  
  1402.     mov     ecx, 672
  1403.     call    TConsole_ProutGameMsg
  1404.  
  1405. .done:
  1406.     mcEndLocals loc87.size
  1407.     ret
  1408.  
  1409. ; --------------------------------------------------------------------------
  1410. ; Input:
  1411. ;   ESI = token for hashing and initializing the RNG
  1412. ; --------------------------------------------------------------------------
  1413. align PROC_ALIGN
  1414. TGame_InitTournament:
  1415.     mcZeroBits eax
  1416.     mcZeroBits edx
  1417.  
  1418. .next_char:
  1419.     mov     dl, [esi]
  1420.     inc     esi
  1421.     mcOnRegZero edx, .seed_RNG_with_EAX
  1422.  
  1423.     shl     eax, 5
  1424.     xor     al, dl
  1425.     jmp     .next_char
  1426.  
  1427. .seed_RNG_with_EAX:
  1428.     call    TRandom_Seed
  1429.  
  1430.     mcLoadGameDataPtr ebx
  1431.     mcLoadNeg1 eax
  1432.     mcStoreMember TREKDATA.THINGX, al
  1433.     mcStoreMember TREKDATA.THINGY, al
  1434.     ret
  1435.  
  1436. ; --------------------------------------------------------------------------
  1437. ; Output:
  1438. ;   ECX = TRUE if FROZEN game is selected
  1439. ; --------------------------------------------------------------------------
  1440. virtual at 0
  1441. loc10:
  1442.     .bFrozen BOOL ?
  1443.     .pszToken PCHAR ?
  1444.     .size = $
  1445. end virtual
  1446. ; --------------------------------------------------------------------------
  1447. align PROC_ALIGN
  1448. TGame_Choose:
  1449.     mcBeginLocals loc10.size
  1450.  
  1451.     mcZeroBits eax
  1452.     mcLoadGameDataPtr edi
  1453.     mov     ecx, TREKDATA.size
  1454.     rep     stosb
  1455.  
  1456. .L5:
  1457.     mcZeroBits eax
  1458.     mcStoreLocal loc10.bFrozen, eax
  1459.  
  1460.     mcLoad8bitsToReg32 ecx, 3
  1461.     call    TGame_Prompt
  1462.  
  1463.     call    TCmdBuf_Scan
  1464.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
  1465.     je      .L5
  1466.  
  1467.     mcLoad8bitsToReg32 ecx, 10
  1468.     call    TCmdBuf_Crop
  1469.     jc      .L9
  1470.  
  1471.     mcLoad8bitsToReg32 ecx, 11
  1472.     call    TCmdBuf_Crop
  1473.     jc      .L100
  1474.  
  1475.     mcLoad8bitsToReg32 ecx, 12
  1476.     call    TCmdBuf_Crop
  1477.     jc      .L200
  1478.     jmp     .L5
  1479.  
  1480. .L9:
  1481.     mcZeroBits eax
  1482.     mcLoadGameDataPtr ebx
  1483.     mcStoreMember TREKDATA.SKILL, al
  1484.     mcStoreMember TREKDATA.LENGTH, al
  1485.  
  1486. .L10:
  1487.     call    TCmdBuf_Scan
  1488.     mcStoreLocal loc10.pszToken, esi
  1489.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_ALPHA
  1490.     jne     .L20
  1491.     ;
  1492.     ; Check for different kinds of games
  1493.     ;
  1494.     mcZeroBits eax
  1495.     mov     ebx, [glb_pGameData]
  1496.     mcStoreMember TREKDATA.KSTUF5, al
  1497.  
  1498.     mcLoad8bitsToReg32 ecx, 74
  1499.     call    TCmdBuf_Crop
  1500.     jnc     .check_medium
  1501.  
  1502.     mov     [ebx + TREKDATA.LENGTH], 1
  1503.  
  1504. .check_medium:
  1505.     mcLoad8bitsToReg32 ecx, 75
  1506.     call    TCmdBuf_Crop
  1507.     jnc     .check_long
  1508.  
  1509.     mov     [ebx + TREKDATA.LENGTH], 2
  1510.  
  1511. .check_long:
  1512.     mcLoad8bitsToReg32 ecx, 76
  1513.     call    TCmdBuf_Crop
  1514.     jnc     .check_novice
  1515.  
  1516.     mov     [ebx + TREKDATA.LENGTH], 4
  1517.  
  1518. .check_novice:
  1519.     mcLoad8bitsToReg32 ecx, 13
  1520.     call    TCmdBuf_Crop
  1521.     jnc     .check_fair
  1522.  
  1523.     mov     [ebx + TREKDATA.SKILL], 1
  1524.  
  1525. .check_fair:
  1526.     mcLoad8bitsToReg32 ecx, 14
  1527.     call    TCmdBuf_Crop
  1528.     jnc     .check_good
  1529.  
  1530.     mov     [ebx + TREKDATA.SKILL], 2
  1531.  
  1532. .check_good:
  1533.     mcLoad8bitsToReg32 ecx, 15
  1534.     call    TCmdBuf_Crop
  1535.     jnc     .check_expert
  1536.  
  1537.     mov     [ebx + TREKDATA.SKILL], 3
  1538.  
  1539. .check_expert:
  1540.     mcLoad8bitsToReg32 ecx, 16
  1541.     call    TCmdBuf_Crop
  1542.     jnc     .check_emeritus
  1543.  
  1544.     mov     [ebx + TREKDATA.SKILL], 4
  1545.     mov     [ebx + TREKDATA.KSTUF5], 1
  1546.  
  1547. .check_emeritus:
  1548.     mcLoad8bitsToReg32 ecx, 17
  1549.     call    TCmdBuf_Crop
  1550.     jnc     .check_both_entered
  1551.  
  1552.     mov     [ebx + TREKDATA.SKILL], 5
  1553.     mov     [ebx + TREKDATA.KSTUF5], 2
  1554.  
  1555. .check_both_entered:
  1556.     cmp     [ebx + TREKDATA.LENGTH], 0
  1557.     je      .L10
  1558.     cmp     [ebx + TREKDATA.SKILL], 0
  1559.     je      .L10
  1560.     jmp     .L30
  1561.  
  1562. .L20:
  1563.     mov     ebx, [glb_pGameData]
  1564.     cmp     [ebx + TREKDATA.LENGTH], 0
  1565.     jne     .L25
  1566.  
  1567.     mcLoad8bitsToReg32 ecx, 4
  1568.     call    TGame_Prompt
  1569.     jmp     .L10
  1570.  
  1571. .L25:
  1572.     cmp     [ebx + TREKDATA.SKILL], 0
  1573.     jne     .L30
  1574.  
  1575.     mcLoad8bitsToReg32 ecx, 5
  1576.     call    TGame_Prompt
  1577.     jmp     .L10
  1578.  
  1579. .L30:
  1580.     ;
  1581.     ; Read in secret password
  1582.     ;
  1583.     call    TCmdBuf_Scan
  1584.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
  1585.     jne     .L40
  1586.  
  1587. .ask_password:
  1588.     mcLoad8bitsToReg32 ecx, 6
  1589.     call    TGame_Prompt
  1590.     jmp     .L30
  1591.  
  1592. .L40:
  1593.     call    TCmdBuf_AnsiStrLen
  1594.     cmp     ecx, 8
  1595.     ja      .ask_password
  1596.  
  1597.     mov     edi, [glb_pGameData]
  1598.     push    edi
  1599.     add     edi, TREKDATA.PASSWD
  1600.     inc     ecx
  1601.     rep     movsb
  1602.     pop     edi
  1603.     ;
  1604.     ; Use parameters to generate initial game values
  1605.     ;
  1606.     mov     al, [edi + TREKDATA.SKILL]
  1607.     call    TCommon_LoadByteIntoFPU
  1608.     fld     [glb_dbl_0dot5]
  1609.     fmulp
  1610.     fstp    [edi + TREKDATA.DAMFAC]
  1611.  
  1612.     mcLoad8bitsToReg32 edx, 3
  1613.     call    TRandom_IRan
  1614.     add     eax, 2
  1615.     mov     [edi + TREKDATA.REMBASE], al
  1616.  
  1617.     mcLoad8bitsToReg32 edx, 6
  1618.     call    TRandom_IRan
  1619.     add     eax, 5
  1620.     mov     [edi + TREKDATA.INPLAN], al
  1621.  
  1622.     call    TRandom_Ranf
  1623.     fld     [glb_dbl_2]
  1624.     faddp
  1625.     mov     al, [edi + TREKDATA.SKILL]
  1626.     call    TCommon_LoadByteIntoFPU
  1627.     fmulp
  1628.     call    TCommon_FP_Truncate
  1629.     mov     [edi + TREKDATA.NROMREM], al
  1630.  
  1631.     movzx   eax, [edi + TREKDATA.SKILL]
  1632.     mcZeroBits edx
  1633.     mcLoad8bitsToReg32 ecx, 3
  1634.     div     ecx
  1635.     mov     [edi + TREKDATA.NSCREM], al
  1636.  
  1637.     mov     al, [edi + TREKDATA.LENGTH]
  1638.     call    TCommon_LoadByteIntoFPU
  1639.     fld     [glb_dbl_7]
  1640.     fmulp
  1641.     fld     st
  1642.     fstp    [edi + TREKDATA.REMTIME]
  1643.     fstp    [edi + TREKDATA.INTIME]
  1644.  
  1645.     call    TRandom_Ranf
  1646.     fld     st
  1647.     faddp                           ; 2*RANF(0)
  1648.  
  1649.     mov     al, [edi + TREKDATA.SKILL]
  1650.     call    TCommon_LoadByteIntoFPU
  1651.     fsubrp                          ; SKILL - 2*RANF(0)
  1652.  
  1653.     fld1
  1654.     faddp                           ; SKILL - 2*RAND(0) + 1.0
  1655.  
  1656.     fild    [glb_FPU_Int32]
  1657.     fmulp                           ; (SKILL - 2*RANF(0) + 1.0)*SKILL
  1658.  
  1659.     fld     [glb_dbl_0dot1]
  1660.     fmulp                           ; (SKILL - 2*RANF(0) + 1.0)*SKILL*0.1
  1661.  
  1662.     fld     [glb_dbl_0dot15]
  1663.     faddp                           ; RATE = ... + 0.15
  1664.  
  1665.     fld     st
  1666.     faddp
  1667.     fld     [edi + TREKDATA.INTIME]
  1668.     fmulp
  1669.     call    TCommon_FP_Truncate
  1670.     mov     [edi + TREKDATA.REMKL], al
  1671.     mov     [edi + TREKDATA.INKLING], al
  1672.  
  1673.     call    TCommon_LoadByteIntoFPU
  1674.     call    TRandom_Ranf
  1675.     fmulp
  1676.     fld     [glb_dbl_0dot0625]
  1677.     fmulp
  1678.     call    TCommon_FP_Truncate
  1679.     add     al, [edi + TREKDATA.SKILL]
  1680.  
  1681.     cmp     al, 10
  1682.     jbe     .store_commander_count
  1683.  
  1684.     mov     al, 10
  1685.  
  1686. .store_commander_count:
  1687.     mov     [edi + TREKDATA.INCOM], al
  1688.     mov     [edi + TREKDATA.REMCOM], al
  1689.  
  1690.     shl     al, 2
  1691.     add     al, [edi + TREKDATA.INKLING]
  1692.     call    TCommon_LoadByteIntoFPU
  1693.     fld     [edi + TREKDATA.INTIME]
  1694.     fmulp
  1695.     fld     st
  1696.     fstp    [edi + TREKDATA.REMRES]
  1697.     fstp    [edi + TREKDATA.INRESOR]
  1698.  
  1699.     cmp     [edi + TREKDATA.INKLING], 50
  1700.     jbe     .store_initial_base_count
  1701.  
  1702.     inc     [edi + TREKDATA.REMBASE]
  1703.  
  1704. .store_initial_base_count:
  1705.     mov     al, [edi + TREKDATA.REMBASE]
  1706.     mov     [edi + TREKDATA.INBASE], al
  1707.     jmp     .done
  1708.  
  1709. .L100:
  1710.     ;
  1711.     ; Process a tournament request
  1712.     ;
  1713.     call    TCmdBuf_Scan
  1714.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
  1715.     je      .ask_tnumber
  1716.  
  1717.     call    TGame_InitTournament
  1718.     jmp     .L9
  1719.  
  1720. .ask_tnumber:
  1721.     mcLoad8bitsToReg32 ecx, 7
  1722.     call    TGame_Prompt
  1723.     jmp     .L100
  1724.  
  1725. .L200:
  1726.     ;
  1727.     ; Frozen game requested
  1728.     ;
  1729.     call    TGame_Thaw
  1730.     mov     esi, [glb_pGameData]
  1731.     cmp     [esi + TREKDATA.PASSWD], 0
  1732.     je      .L5
  1733.     ;
  1734.     ; Game loaded
  1735.     ;
  1736.     inc     [esp + loc10.bFrozen]
  1737.     mov     ebx, [glb_pGameData]
  1738.     mcZeroBits eax
  1739.     mov     [ebx + TREKDATA.THINGX], al
  1740.     mov     [ebx + TREKDATA.THINGY], al
  1741.  
  1742.     lea     esi, [ebx + TREKDATA.QUAD]
  1743.     mcLoad8bitsToReg32 ecx, 100
  1744.  
  1745. .erase_things:
  1746.     cmp     byte [esi], CHAR_THING
  1747.     jne     .no_thing
  1748.  
  1749.     mov     byte [esi], CHAR_COSMOS
  1750.  
  1751. .no_thing:
  1752.     inc     esi
  1753.     loop    .erase_things
  1754.  
  1755.     mov     [ebx + TREKDATA.IDIDIT], 1
  1756.     call    TGame_Report
  1757.  
  1758. .done:
  1759.     mcLoadLocal ecx, loc10.bFrozen
  1760.     mcEndLocals loc10.size
  1761.     ret
  1762.  
  1763. ; --------------------------------------------------------------------------
  1764. align PROC_ALIGN
  1765. TGame_ListAllCommands:
  1766.     call    TConsole_SetGameMsgAttr
  1767.     call    TConsole_ScrollUp
  1768.     mcLoad8bitsToReg32 ecx, 8
  1769.     call    TConsole_Prout
  1770.  
  1771.     mcLoad8bitsToReg32 edx, 8
  1772.     mcLoad8bitsToReg32 ecx, 76
  1773.  
  1774. .next:
  1775.     inc     ecx
  1776.     push    edx
  1777.     call    TConsole_Prout
  1778.     pop     edx
  1779.     dec     edx
  1780.     jnz     .next
  1781.  
  1782.     call    TConsole_ScrollUp
  1783.     ret
  1784.  
  1785. ; --------------------------------------------------------------------------
  1786. virtual at 0
  1787. loc99:
  1788.     .OldSectX BYTE ?
  1789.     .OldSectY BYTE ?
  1790.     .NewSectX BYTE ?
  1791.     .NewSectY BYTE ?
  1792.     .CharEnemy BYTE ?
  1793.     .__align_1 BYTE ?
  1794.     .__align_2 BYTE ?
  1795.     .__align_3 BYTE ?
  1796.     .size = $
  1797. end virtual
  1798. ; --------------------------------------------------------------------------
  1799. align PROC_ALIGN
  1800. TGame_DbgMoveEnemy:
  1801.     mcBeginLocals loc99.size
  1802.  
  1803.     mov     ecx, 714
  1804.     call    TGame_Prompt
  1805.  
  1806.     call    TCmdBuf_Scan
  1807.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
  1808.     jne     .done
  1809.  
  1810.     mov     eax, [ebx + TCmdBuf.cmdbuf_INUM]
  1811.     mcStoreLocal loc99.OldSectX, al
  1812.  
  1813.     call    TCmdBuf_Scan
  1814.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
  1815.     jne     .done
  1816.  
  1817.     mov     eax, [ebx + TCmdBuf.cmdbuf_INUM]
  1818.     mcStoreLocal loc99.OldSectY, al
  1819.  
  1820.     call    TCmdBuf_Scan
  1821.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
  1822.     jne     .done
  1823.  
  1824.     mov     eax, [ebx + TCmdBuf.cmdbuf_INUM]
  1825.     mcStoreLocal loc99.NewSectX, al
  1826.  
  1827.     call    TCmdBuf_Scan
  1828.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
  1829.     jne     .done
  1830.  
  1831.     mov     eax, [ebx + TCmdBuf.cmdbuf_INUM]
  1832.     mcStoreLocal loc99.NewSectY, al
  1833.  
  1834.     movzx   eax, [esp + loc99.NewSectX]
  1835.     call    TPhotons_IsValidSector
  1836.     jnc     .done
  1837.  
  1838.     movzx   eax, [esp + loc99.NewSectY]
  1839.     call    TPhotons_IsValidSector
  1840.     jnc     .done
  1841.  
  1842.     mcLoadGameDataPtr ebx
  1843.     mcZeroBits ecx
  1844.     mcLoadMember cl, TREKDATA.NENHERE
  1845.     jecxz   .done
  1846.  
  1847.     mcLoadMemberRef esi, TREKDATA.KX
  1848.     mcLoadMemberRef edi, TREKDATA.KY
  1849.  
  1850.     mcLoadLocal al, loc99.OldSectX
  1851.     mcLoadLocal dl, loc99.OldSectY
  1852.  
  1853. .check_sector:
  1854.     cmp     al, [esi]
  1855.     jne     .next
  1856.  
  1857.     cmp     dl, [edi]
  1858.     je      .move_klingon
  1859.  
  1860. .next:
  1861.     inc     esi
  1862.     inc     edi
  1863.     loop    .check_sector
  1864.     jmp     .done
  1865.  
  1866. .move_klingon:
  1867.     mcLoadLocal al, loc99.NewSectX
  1868.     mcLoadLocal dl, loc99.NewSectY
  1869.  
  1870.     mov     [esi], al
  1871.     mov     [edi], dl
  1872.  
  1873.     mcLoadLocal al, loc99.OldSectX
  1874.     mcLoadLocal dl, loc99.OldSectY
  1875.     call    TArray_QuadPtr
  1876.  
  1877.     mov     al, [ebx]
  1878.     mov     byte [ebx], CHAR_COSMOS
  1879.     mcStoreLocal loc99.CharEnemy, al
  1880.  
  1881.     mcLoadLocal al, loc99.NewSectX
  1882.     mcLoadLocal dl, loc99.NewSectY
  1883.     call    TArray_QuadPtr
  1884.     mcLoadLocal al, loc99.CharEnemy
  1885.     mov     [ebx], al
  1886.  
  1887.     call    TCommon_SortKlingons
  1888.  
  1889. .done:
  1890.     mcEndLocals loc99.size
  1891.     ret
  1892.  
  1893. ; --------------------------------------------------------------------------
  1894. virtual at 0
  1895. loc98:
  1896.     .ShipQuadX BYTE ?
  1897.     .ShipQuadY BYTE ?
  1898.     .__align_1 BYTE ?
  1899.     .__align_2 BYTE ?
  1900.     .size = $
  1901. end virtual
  1902. ; --------------------------------------------------------------------------
  1903. align PROC_ALIGN
  1904. TGame_DbgMoveShip:
  1905.     mcBeginLocals loc98.size
  1906.  
  1907.     mov     ecx, 168
  1908.     call    TGame_Prompt
  1909.  
  1910.     call    TCmdBuf_Scan
  1911.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
  1912.     jne     .done
  1913.  
  1914.     mov     eax, [ebx + TCmdBuf.cmdbuf_INUM]
  1915.     call    TGame_IsValidQuadrant
  1916.     jnc     .done
  1917.     mcStoreLocal loc98.ShipQuadX, al
  1918.  
  1919.     call    TCmdBuf_Scan
  1920.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_REAL
  1921.     jne     .done
  1922.  
  1923.     mov     eax, [ebx + TCmdBuf.cmdbuf_INUM]
  1924.     call    TGame_IsValidQuadrant
  1925.     jnc     .done
  1926.     mcStoreLocal loc98.ShipQuadY, al
  1927.  
  1928.     mcLoadGameDataPtr esi
  1929.     cmp     al, [esi + TREKDATA.QUADY]
  1930.     jne     .move_ship
  1931.  
  1932.     mov     al, [esi + TREKDATA.QUADX]
  1933.     cmp     [esp + loc98.ShipQuadX], al
  1934.     je      .done
  1935.  
  1936. .move_ship:
  1937.     mcLoadLocal al, loc98.ShipQuadX
  1938.     mcLoadLocal dl, loc98.ShipQuadY
  1939.  
  1940.     mov     [esi + TREKDATA.QUADX], al
  1941.     mov     [esi + TREKDATA.QUADY], dl
  1942.  
  1943.     call    TCommon_NewQuad
  1944.  
  1945. .done:
  1946.     mcEndLocals loc98.size
  1947.     ret
  1948.  
  1949. ; --------------------------------------------------------------------------
  1950. ; PROGRAM STARTRK from original FORTRAN source
  1951. ; --------------------------------------------------------------------------
  1952. align PROC_ALIGN
  1953. TGame_Thread:
  1954.     mcProlog
  1955.     call    TGame_Prelim
  1956.  
  1957. .L10:
  1958.     call    TGame_Choose
  1959.     mcOnRegNotZero ecx, .L15
  1960.  
  1961.     call    TCommon_Setup
  1962.  
  1963. .L15:
  1964.     mov     [glb_MOVED], 0
  1965.  
  1966. .L20:
  1967.     mov     esi, [glb_pGameData]
  1968.     cmp     [esi + TREKDATA.ALLDONE], 0
  1969.     jne     .L9999
  1970.  
  1971. .reset_before_cmd:
  1972.     mcZeroBits eax
  1973.     mov     [esi + TREKDATA.JUSTIN], al
  1974.     mov     [esi + TREKDATA.KDIDIT], al
  1975.  
  1976.     fldz
  1977.     fstp    [esi + TREKDATA.TIME]
  1978.  
  1979.     mcLoad8bitsToReg32 ecx, 2
  1980.     call    TGame_Prompt
  1981.  
  1982.     call    TCmdBuf_Scan
  1983.     cmp     [ebx + TCmdBuf.cmdbuf_KEY], CMD_TOKEN_EOL
  1984.     je      .L20
  1985.  
  1986.     mcLoad8bitsToReg32 ecx, 18
  1987.     call    TCmdBuf_Crop
  1988.     jc      .L100
  1989.  
  1990.     mcLoad8bitsToReg32 ecx, 26
  1991.     call    TCmdBuf_Crop
  1992.     jc      .L200
  1993.  
  1994.     mcLoad8bitsToReg32 ecx, 20
  1995.     call    TCmdBuf_Crop
  1996.     jc      .L300
  1997.  
  1998.     mcLoad8bitsToReg32 ecx, 24
  1999.     call    TCmdBuf_Crop
  2000.     jc      .L400
  2001.  
  2002.     mcLoad8bitsToReg32 ecx, 19
  2003.     call    TCmdBuf_Crop
  2004.     jc      .L500
  2005.  
  2006.     mcLoad8bitsToReg32 ecx, 28
  2007.     call    TCmdBuf_Crop
  2008.     jc      .L600
  2009.  
  2010.     mcLoad8bitsToReg32 ecx, 32
  2011.     call    TCmdBuf_Crop
  2012.     jc      .L700
  2013.  
  2014.     mcLoad8bitsToReg32 ecx, 34
  2015.     call    TCmdBuf_Crop
  2016.     jc      .L800
  2017.  
  2018.     mcLoad8bitsToReg32 ecx, 30
  2019.     call    TCmdBuf_Crop
  2020.     jc      .L900
  2021.  
  2022.     mcLoad8bitsToReg32 ecx, 23
  2023.     call    TCmdBuf_Crop
  2024.     jc      .L1000
  2025.  
  2026.     mcLoad8bitsToReg32 ecx, 31
  2027.     call    TCmdBuf_Crop
  2028.     jc      .L1100
  2029.  
  2030.     mcLoad8bitsToReg32 ecx, 27
  2031.     call    TCmdBuf_Crop
  2032.     jc      .L1200
  2033.  
  2034.     mcLoad8bitsToReg32 ecx, 22
  2035.     call    TCmdBuf_Crop
  2036.     jc      .L1300
  2037.  
  2038.     mcLoad8bitsToReg32 ecx, 36
  2039.     call    TCmdBuf_Crop
  2040.     jc      .L1400
  2041.  
  2042.     mcLoad8bitsToReg32 ecx, 37
  2043.     call    TCmdBuf_Crop
  2044.     jc      .L1450
  2045.  
  2046.     mcLoad8bitsToReg32 ecx, 38
  2047.     call    TCmdBuf_Crop
  2048.     jc      .L1500
  2049.  
  2050.     mcLoad8bitsToReg32 ecx, 39
  2051.     call    TCmdBuf_Crop
  2052.     jc      .L1550
  2053.  
  2054.     mcLoad8bitsToReg32 ecx, 40
  2055.     call    TCmdBuf_Crop
  2056.     jc      .L1600
  2057.  
  2058.     mcLoad8bitsToReg32 ecx, 41
  2059.     call    TCmdBuf_Crop
  2060.     jc      .L1650
  2061.  
  2062.     mcLoad8bitsToReg32 ecx, 42
  2063.     call    TCmdBuf_Crop
  2064.     jc      .L1670
  2065.  
  2066.     mcLoad8bitsToReg32 ecx, 43
  2067.     call    TCmdBuf_Crop
  2068.     jc      .L1680
  2069.  
  2070.     mcLoad8bitsToReg32 ecx, 45
  2071.     call    TCmdBuf_Crop
  2072.     jc      .L1685
  2073.  
  2074.     mcLoad8bitsToReg32 ecx, 46
  2075.     call    TCmdBuf_Crop
  2076.     jc      .L1690
  2077.     ;
  2078.     ; Non-abbreviated commands (checking)
  2079.     ;
  2080.     mcLoad8bitsToReg32 ecx, 21
  2081.     call    TCmdBuf_Crop
  2082.     jc      .L1700
  2083.  
  2084.     mcLoad8bitsToReg32 ecx, 33
  2085.     call    TCmdBuf_Crop
  2086.     jc      .L9000
  2087.  
  2088.     mcLoad8bitsToReg32 ecx, 25
  2089.     call    TCmdBuf_Crop
  2090.     jc      .L1900
  2091.  
  2092.     mcLoad8bitsToReg32 ecx, 29
  2093.     call    TCmdBuf_Crop
  2094.     jc      .L2000
  2095.  
  2096.     mcLoad8bitsToReg32 ecx, 35
  2097.     call    TCmdBuf_Crop
  2098.     jc      .L2100
  2099.  
  2100.     mcLoad8bitsToReg32 ecx, 44
  2101.     call    TCmdBuf_Crop
  2102.     jc      .L2200
  2103.  
  2104.     mov     ecx, 708
  2105.     call    TCmdBuf_Crop
  2106.     jc      .L2300
  2107.     ;
  2108.     ; Get help, mon!
  2109.     ;
  2110.     call    TGame_ListAllCommands
  2111.     jmp     .L20
  2112.  
  2113. .L100:
  2114.     call    TSrScan_Main
  2115.     jmp     .L20
  2116.  
  2117. .L200:
  2118.     call    TLrScan_Main
  2119.     jmp     .L20
  2120.  
  2121. .L300:
  2122.     call    TPhasers_Main
  2123.  
  2124. .L305:
  2125.     mcLoadGameDataPtr esi
  2126.     cmp     [esi + TREKDATA.IDIDIT], 0
  2127.     je      .L20
  2128.  
  2129. .L310:
  2130.     call    TAttack_Main
  2131.  
  2132. .L320:
  2133.     mcLoadGameDataPtr esi
  2134.     cmp     [esi + TREKDATA.KDIDIT], 0
  2135.     jne     .L2500
  2136.     jmp     .L15
  2137.  
  2138. .L400:
  2139.     call    TPhotons_Main
  2140.  
  2141. .L410:
  2142.     mcLoadGameDataPtr esi
  2143.     cmp     [esi + TREKDATA.IDIDIT], 0
  2144.     je      .L20
  2145.  
  2146.     mov     [glb_MOVED], 0
  2147.     jmp     .L2500
  2148.  
  2149. .L500:
  2150.     cmp     [glb_MOVED], 0
  2151.     je      .L510
  2152.  
  2153. .L505:
  2154.     mov     [glb_MOVED], 2
  2155.  
  2156. .L510:
  2157.     call    TMove_Warp
  2158.  
  2159. .L520:
  2160.     mcLoadGameDataPtr esi
  2161.     cmp     [esi + TREKDATA.IDIDIT], 0
  2162.     jne     .L521
  2163.  
  2164.     cmp     [glb_MOVED], 2
  2165.     jne     .L521
  2166.  
  2167.     dec     [glb_MOVED]
  2168.  
  2169. .L521:
  2170.     cmp     [esi + TREKDATA.IDIDIT], 0
  2171.     je      .L20
  2172.  
  2173.     cmp     [glb_MOVED], 2
  2174.     jne     .L522
  2175.  
  2176.     cmp     [esi + TREKDATA.JUSTIN], 0
  2177.     jne     .L522
  2178.  
  2179.     call    TAttack_Main
  2180.  
  2181. .L522:
  2182.     mov     [glb_MOVED], 1
  2183.     jmp     .L2500
  2184.  
  2185. .L600:
  2186.     call    TShields_Main
  2187.     mcLoadGameDataPtr esi
  2188.     cmp     [esi + TREKDATA.IDIDIT], 0
  2189.     je      .L20
  2190.  
  2191.     call    TAttack_Main
  2192.     mcLoadGameDataPtr esi
  2193.     mov     [esi + TREKDATA.SHLDCHG], 0
  2194.     jmp     .L320
  2195.  
  2196. .L700:
  2197.     call    TDock_Main
  2198.     jmp     .L305
  2199.  
  2200. .L800:
  2201.     call    TDock_DamageReport
  2202.     jmp     .L20
  2203.  
  2204. .L900:
  2205.     call    TChart_Main
  2206.     jmp     .L20
  2207.  
  2208. .L1000:
  2209.     cmp     [glb_MOVED], 0
  2210.     jne     .L505
  2211.  
  2212.     call    TImpulse_Main
  2213.     jmp     .L520
  2214.  
  2215. .L1100:
  2216.     call    TGame_Wait
  2217.     jmp     .L410
  2218.  
  2219. .L1200:
  2220.     call    TChart_SetWarp
  2221.     jmp     .L20
  2222.  
  2223. .L1300:
  2224.     call    TSrScan_Status
  2225.     jmp     .L20
  2226.  
  2227. .L1400:
  2228.     call    TPlanet_Sensor
  2229.  
  2230. .skip_before_prompt:
  2231.     call    TConsole_ScrollUp
  2232.     jmp     .L20
  2233.  
  2234. .L1450:
  2235.     call    TPlanet_Orbit
  2236.     jmp     .L410
  2237.  
  2238. .L1500:
  2239.     call    TPlanet_Beam
  2240.     jmp     .L20
  2241.  
  2242. .L1550:
  2243.     call    TPlanet_Mine
  2244.     jmp     .L410
  2245.  
  2246. .L1600:
  2247.     call    TPlanet_Crystal
  2248.     jmp     .L20
  2249.  
  2250. .L1650:
  2251.     call    TPlanet_Galileo
  2252.     jmp     .L410
  2253.  
  2254. .L1670:
  2255.     call    TPlanet_Main
  2256.     jmp     .skip_before_prompt
  2257.  
  2258. .L1680:
  2259.     call    TSrScan_Request
  2260.     jmp     .L20
  2261.  
  2262. .L1685:
  2263.     inc     [glb_bEmExit]
  2264.     call    TGame_Freeze
  2265.     jmp     .quit_now_fast
  2266.  
  2267. .L1690:
  2268.     mcLoadGameDataPtr edi
  2269.     mov     [edi + TREKDATA.IDIDIT], 0
  2270.  
  2271.     call    TGame_Report
  2272.     jmp     .L20
  2273.     ;
  2274.     ; Non-abbreviated commands (executing)
  2275.     ;
  2276. .L1700:
  2277.     mov     cl, 21
  2278.     call    TCmdBuf_VerifyToken
  2279.     jnc     .L20
  2280.  
  2281.     call    TDock_Help
  2282.     jmp     .L20
  2283.  
  2284. .L9000:
  2285.     mov     cl, 33
  2286.     call    TCmdBuf_VerifyToken
  2287.     jnc     .L20
  2288.     jmp     .L9001
  2289.  
  2290. .L1900:
  2291.     mov     cl, 25
  2292.     call    TCmdBuf_VerifyToken
  2293.     jnc     .L20
  2294.  
  2295.     call    TDock_Abandon
  2296.     jmp     .L20
  2297.  
  2298. .L2000:
  2299.     mov     cl, 29
  2300.     call    TCmdBuf_VerifyToken
  2301.     jnc     .L20
  2302.  
  2303.     call    TApp_SelfDestruct
  2304.     jmp     .L20
  2305.  
  2306. .L2100:
  2307.     mov     cl, 35
  2308.     call    TCmdBuf_VerifyToken
  2309.     jnc     .L20
  2310.  
  2311.     call    TGame_Freeze
  2312.  
  2313.     mcLoadGameDataPtr esi
  2314.     cmp     [esi + TREKDATA.IDIDIT], 1
  2315.     je      .L9999
  2316.     jmp     .L20
  2317.  
  2318. .L2200:
  2319.     mov     cl, 44
  2320.     call    TCmdBuf_VerifyToken
  2321.     jnc     .L20
  2322.  
  2323.     call    TPlanet_DeathRay
  2324.     jmp     .L305
  2325.  
  2326. .L2300:
  2327.     mov     ecx, 708
  2328.     call    TCmdBuf_VerifyToken_ECX
  2329.     jnc     .L20
  2330.  
  2331.     call    TLrScan_Log
  2332.     jmp     .L20
  2333.  
  2334. .L2500:
  2335.     ;
  2336.     ; After command which may use time invoke events module
  2337.     ;
  2338.     mcLoadGameDataPtr esi
  2339.     cmp     [esi + TREKDATA.ALLDONE], 0
  2340.     jne     .L9999
  2341.  
  2342.     fld     [esi + TREKDATA.TIME]
  2343.     fldz
  2344.     mc_CMP_ST0_ST1
  2345.     jz      .L2501
  2346.  
  2347.     call    TEvents_Main
  2348.  
  2349.     mcLoadGameDataPtr esi
  2350.     cmp     [esi + TREKDATA.ALLDONE], 0
  2351.     jne     .L9999
  2352.  
  2353. .L2501:
  2354.     call    TArray_MyGalaxyPtr
  2355.     cmp     dword [ebx], 1000
  2356.     jne     .L2510
  2357.  
  2358.     mov     al, 16
  2359.     mcZeroBits ecx
  2360.     call    TNova_AutomaticOverride
  2361.  
  2362.     mcZeroBits eax
  2363.     mov     [glb_MOVED], al
  2364.     jmp     .L2500
  2365.  
  2366. .L2510:
  2367.     mcLoadGameDataPtr esi
  2368.     cmp     [esi + TREKDATA.NENHERE], 0
  2369.     jne     .L2511
  2370.  
  2371.     call    TEvents_MoveTholian
  2372.  
  2373. .L2511:
  2374.     mcLoadGameDataPtr esi
  2375.     cmp     [esi + TREKDATA.KDIDIT], 1
  2376.     je      .L15
  2377.     cmp     [esi + TREKDATA.NENHERE], 0
  2378.     je      .L15
  2379.  
  2380.     cmp     [glb_MOVED], 0
  2381.     je      .L310
  2382.     cmp     [esi + TREKDATA.JUSTIN], 1
  2383.     je      .L310
  2384.     jmp     .L20
  2385.  
  2386. .L9001:
  2387.     call    TGame_Score
  2388.  
  2389. .L9999:
  2390.     call    TConsole_ScrollUp
  2391.     call    TConsole_ScrollUp
  2392.     call    TPlanet_Stars
  2393.     call    TConsole_ScrollUp
  2394.  
  2395.     mov     ecx, 474
  2396.     call    TGame_JA
  2397.     jnc      .end_game
  2398.  
  2399.     mov     cl, 40
  2400.     call    TConsole_Skip
  2401.     jmp     .L10
  2402.  
  2403. .end_game:
  2404.     call    TConsole_ScrollUp
  2405.     mov     ecx, 475
  2406.     call    TConsole_ProutGameMsg
  2407.     mov     ecx, 476
  2408.     call    TConsole_Prout
  2409.     call    TConsole_ScrollUp
  2410.  
  2411.     mov     ecx, 653
  2412.     call    TGame_Prompt
  2413.  
  2414. .quit_now_fast:
  2415.     invoke  PostMessage, [glb_MainWnd], WM_CLOSE, 0, 0
  2416.  
  2417.     mcEpilog
  2418.     ret     4
  2419.  
  2420. ; --- EOF ---
  2421.