Subversion Repositories Kolibri OS

Rev

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

  1.  
  2. levels.level1   akode.LevelHeader       <level1.Width, level1.Height>, <8, 1>, AKODE_DIRECTION.SOUTH, 0FF00FFh, 000000h, BLOCK_BASE_SIZE * 5, 6, 1, level1.init, 0, level1.action
  3.  
  4. level1:
  5.  
  6. .Width  = 24
  7. .Height = 25
  8.  
  9. W equ level1.Wall
  10. w equ level1.OtherWall
  11. _ equ level1.PassableArea
  12. 0 equ level1.NotPassableArea
  13. % equ level1.WallWithCrazyWoodDoor
  14. I equ level1.IronDoor
  15. L equ level1.WallWithLever1
  16. q equ level1.WallWithLever2
  17. v equ level1.WallWithLever3
  18. e equ level1.WallWithLever4
  19. c equ level1.ColumnArea
  20. o equ level1.OgreArea
  21. P equ level1.PortalArea
  22.  
  23. .Grid:
  24. dd W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W
  25. dd W,_,_,W,W,_,_,W,_,W,_,W,_,_,_,_,W,W,W,W,W,W,W,W
  26. dd W,_,_,W,W,_,_,W,_,W,_,W,_,_,_,_,_,_,_,_,_,_,_,W
  27. dd W,_,_,_,_,_,_,W,_,W,_,W,_,_,_,_,_,_,_,_,_,_,_,W
  28. dd W,W,W,_,_,W,W,W,_,W,L,W,_,_,_,W,W,W,_,_,_,W,W,W
  29. dd W,_,_,_,_,_,_,W,_,_,_,W,_,_,_,W,0,W,_,_,_,W,0,W
  30. dd W,_,W,_,W,_,_,W,_,W,W,W,W,W,_,W,c,_,_,_,_,_,c,W
  31. dd W,_,W,_,W,_,_,W,_,W,W,W,W,W,_,W,_,_,_,c,_,_,_,W
  32. dd W,W,W,_,W,W,W,W,%,W,W,W,W,W,_,W,_,_,W,0,W,_,_,W
  33. dd W,_,W,_,W,_,_,_,_,_,_,_,W,W,_,W,_,_,W,W,W,_,_,W
  34. dd W,_,W,W,W,_,_,_,_,_,_,_,I,_,_,W,_,_,_,_,_,_,_,W
  35. dd W,_,_,_,W,_,_,_,_,_,_,_,W,W,W,W,W,W,W,W,W,%,W,W
  36. dd W,_,_,_,W,W,W,W,q,v,e,W,W,_,_,_,_,_,_,_,_,_,_,W
  37. dd W,_,_,_,_,_,_,_,_,_,_,_,W,_,W,W,W,W,W,W,W,W,W,W
  38. dd W,_,_,_,W,_,_,_,_,_,_,_,W,o,W,_,_,_,_,_,_,_,_,W
  39. dd W,_,_,_,W,W,W,W,W,W,W,W,W,0,W,W,W,W,_,_,_,_,_,W
  40. dd W,_,_,_,W,_,_,_,_,_,_,W,_,_,_,_,_,W,w,w,w,w,w,w
  41. dd W,_,_,_,_,_,_,_,_,_,_,W,_,_,_,_,_,_,_,_,_,_,_,w
  42. dd W,_,_,_,_,_,_,_,_,_,_,W,W,W,W,W,_,w,w,_,w,w,_,w
  43. dd W,_,_,_,_,_,_,_,_,_,_,_,_,_,_,w,_,w,_,_,_,w,_,w
  44. dd W,_,_,_,_,_,_,_,_,_,_,_,_,_,_,w,_,_,_,P,_,_,_,w
  45. dd W,_,_,_,_,_,_,_,_,_,_,_,_,_,_,w,_,w,_,_,_,w,_,w
  46. dd W,_,_,_,_,_,_,_,_,_,_,_,_,_,_,w,_,w,w,_,w,w,_,w
  47. dd W,_,_,_,_,_,_,_,_,_,_,_,_,_,_,w,_,_,_,_,_,_,_,w
  48. dd W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,w,w,w,w,w,w,w,w,w
  49.  
  50. restore W, w, _, 0, %, I, L, q, v, e, c, o, P
  51.  
  52. .Chest                  akode.Object            textures.Chest, <13, 2>, 1, 0
  53. .Column1                akode.Object            textures.Column1, <16, 5>, 1, 0
  54. .Column2                akode.Object            textures.Column2, <19, 8>, 1, 0
  55. .Column3                akode.Object            textures.Column3, <22, 5>, 1, 0
  56. .Ogre                   akode.Object            textures.Ogre, <13, 15>, 1, 0
  57. .Portal                 akode.Object            textures.Portal, <19, 20>, 1, 1
  58.  
  59. .Column4TextureDescPtr  dd textures.Column4
  60.  
  61. .Wall                   akode.GridCell          <textures.GreenStone1, 0>, \
  62.                                                 <textures.GreenStone1, 0>, \
  63.                                                 <textures.GreenStone1, 0>, \
  64.                                                 <textures.GreenStone1, 0>, \
  65.                                                 <0, 0>,                    \
  66.                                                 <0, 0>,                    \
  67.                                                 0, 0
  68.  
  69. .OtherWall              akode.GridCell          <textures.GreenStone2, 0>, \
  70.                                                 <textures.GreenStone2, 0>, \
  71.                                                 <textures.GreenStone2, 0>, \
  72.                                                 <textures.GreenStone2, 0>, \
  73.                                                 <0, 0>,                    \
  74.                                                 <0, 0>,                    \
  75.                                                 0, 0
  76.  
  77. .WallWithCrazyWoodDoor  akode.GridCell          <textures.GreenStone1, textures.CrazyWoodDoor>, \
  78.                                                 <textures.GreenStone1, textures.CrazyWoodDoor>, \
  79.                                                 <textures.GreenStone1, textures.CrazyWoodDoor>, \
  80.                                                 <textures.GreenStone1, textures.CrazyWoodDoor>, \
  81.                                                 <0, 0>,                                         \
  82.                                                 <0, 0>,                                         \
  83.                                                 0, 0
  84.  
  85. .IronDoor               akode.GridCell          <textures.IronDoor, 0>, \
  86.                                                 <textures.IronDoor, 0>, \
  87.                                                 <textures.IronDoor, 0>, \
  88.                                                 <textures.IronDoor, 0>, \
  89.                                                 <0, 0>,                 \
  90.                                                 <0, 0>,                 \
  91.                                                 0, 0
  92.  
  93. .WallWithLever1         akode.GridCell          <textures.GreenStone1, 0>,                      \
  94.                                                 <textures.GreenStone1, textures.RedLeverDown>,  \
  95.                                                 <textures.GreenStone1, 0>,                      \
  96.                                                 <textures.GreenStone1, textures.RedLeverUp>,    \
  97.                                                 <0, 0>,                                         \
  98.                                                 <0, 0>,                                         \
  99.                                                 0, 0
  100.  
  101. .WallWithLever2         akode.GridCell          <textures.GreenStone1, 0>,                      \
  102.                                                 <textures.GreenStone1, textures.RedLeverUp>,    \
  103.                                                 <textures.GreenStone1, 0>,                      \
  104.                                                 <textures.GreenStone1, textures.RedLeverDown>,  \
  105.                                                 <0, 0>,                                         \
  106.                                                 <0, 0>,                                         \
  107.                                                 0, 0
  108.  
  109. .WallWithLever3         akode.GridCell          <textures.GreenStone1, 0>,                      \
  110.                                                 <textures.GreenStone1, textures.RedLeverUp>,    \
  111.                                                 <textures.GreenStone1, 0>,                      \
  112.                                                 <textures.GreenStone1, textures.RedLeverDown>,  \
  113.                                                 <0, 0>,                                         \
  114.                                                 <0, 0>,                                         \
  115.                                                 0, 0
  116.  
  117. .WallWithLever4         akode.GridCell          <textures.GreenStone1, 0>,                      \
  118.                                                 <textures.GreenStone1, textures.RedLeverUp>,    \
  119.                                                 <textures.GreenStone1, 0>,                      \
  120.                                                 <textures.GreenStone1, textures.RedLeverDown>,  \
  121.                                                 <0, 0>,                                         \
  122.                                                 <0, 0>,                                         \
  123.                                                 0, 0
  124.  
  125. .PassableArea           akode.GridCell          <0, 0>,                     \
  126.                                                 <0, 0>,                     \
  127.                                                 <0, 0>,                     \
  128.                                                 <0, 0>,                     \
  129.                                                 <textures.YellowStone1, 0>, \
  130.                                                 <textures.YellowStone1, 0>, \
  131.                                                 1, 0
  132.  
  133. .NotPassableArea        akode.GridCell          <0, 0>,                     \
  134.                                                 <0, 0>,                     \
  135.                                                 <0, 0>,                     \
  136.                                                 <0, 0>,                     \
  137.                                                 <textures.YellowStone1, 0>, \
  138.                                                 <textures.YellowStone1, 0>, \
  139.                                                 0, 0
  140.  
  141. .ColumnArea             akode.GridCell          <0, 0>,                     \
  142.                                                 <0, 0>,                     \
  143.                                                 <0, 0>,                     \
  144.                                                 <0, 0>,                     \
  145.                                                 <textures.YellowStone1, 0>, \
  146.                                                 <textures.YellowStone1, 0>, \
  147.                                                 1, level1.columns
  148.  
  149. .OgreArea               akode.GridCell          <0, 0>,                     \
  150.                                                 <0, 0>,                     \
  151.                                                 <0, 0>,                     \
  152.                                                 <0, 0>,                     \
  153.                                                 <textures.YellowStone1, 0>, \
  154.                                                 <textures.YellowStone1, 0>, \
  155.                                                 1, level1.ogre
  156.  
  157. .PortalArea             akode.GridCell          <0, 0>,                     \
  158.                                                 <0, 0>,                     \
  159.                                                 <0, 0>,                     \
  160.                                                 <0, 0>,                     \
  161.                                                 <textures.PortalFloor, 0>,  \
  162.                                                 <textures.YellowStone1, 0>, \
  163.                                                 1, level1.portal
  164.  
  165. .CoinImagePtr           dd 0
  166. .Sun1ImagePtr           dd 0
  167. .Sun2ImagePtr           dd 0
  168. .Sun3ImagePtr           dd 0
  169.  
  170. proc level1.init
  171.         stdcall load_object_image, .coin_file_path
  172.         mov     [level1.CoinImagePtr], eax
  173.         stdcall load_object_image, .sun1_file_path
  174.         mov     [level1.Sun1ImagePtr], eax
  175.         stdcall load_object_image, .sun2_file_path
  176.         mov     [level1.Sun2ImagePtr], eax
  177.         stdcall load_object_image, .sun3_file_path
  178.         mov     [level1.Sun3ImagePtr], eax
  179.  
  180.         mov     eax, .message
  181.         ret
  182.  
  183. .coin_file_path db 'Resources/Textures/Objects/Coin.png', 0
  184. .sun1_file_path db 'Resources/Textures/Objects/Sun1.png', 0
  185. .sun2_file_path db 'Resources/Textures/Objects/Sun2.png', 0
  186. .sun3_file_path db 'Resources/Textures/Objects/Sun3.png', 0
  187.  
  188. .message                                        langstr0 ru, < \
  189. '‚ë - ¨áª â¥«ì ᮪஢¨é. ’ ª ­ ¦¨¢¥ ¯à¨¢¥«  ¢ á ¢    ', 10, \
  190. '«¥á­ãî ¯¥é¥àã, £¤¥, ¯® à á᪠§ ¬ ᥫï­, ¯ àã á⮫¥â¨©  ', 10, \
  191. '­ § ¤, ®¤¨­ ¯à ¢¨â¥«ì, á¯àïâ « á¢®î ª §­ã. ‚ ¯¥é¥à¥ ¢ë ', 10, \
  192. '­ è«¨... ¤¢¥àì. “ᨫ¨¥ - ¤¢¥àì ®âªàëâ ! ‚ë ¢®è«¨ ¢­ãâàì', 10, \
  193. '¨ ¤¢¥àì á £à®å®â®¬ § å«®¯­ã« áì. ‚®§¬®¦­®, íâ® ¢ è è ­á', 10, \
  194. '­ ©â¨ ­¥á¬¥â­ë¥ ¡®£ âá⢠ ¨«¨ ¯®£¨¡­ãâì...             '      >
  195.  
  196. endp
  197.  
  198. proc level1.action uses ebx ecx edx, action, cell_x, cell_y
  199.         mov     eax, [action]
  200.         mov     ebx, [cell_x]
  201.         mov     ecx, [cell_y]
  202.  
  203.         mov     edx, ecx
  204.         imul    edx, level1.Width
  205.         add     edx, ebx
  206.         lea     edx, [level1.Grid + edx * 4]
  207.  
  208.         cmp     ax, ACTION.DO_SOMETHING
  209.         jne     .check_next_action
  210.  
  211.         cmp     edx, level1.Grid + (7 * level1.Width + 8) * 4
  212.         jne     @f
  213.         cmp     dword [level1.Grid + (8 * level1.Width + 8) * 4], level1.WallWithCrazyWoodDoor
  214.         jne     .exit_no_message
  215.  
  216.         mov     eax, .message_door1_closed
  217.         jmp     .exit
  218. .message_door1_closed                           langstr0 ru, < \
  219. '‡ ¯¥àâ®. “ ¤¢¥à¨ ­¥â ­¨ àã窨, ­¨ § ¬®ç­®© ᪢ ¦¨­ë.   ', 10, \
  220. '‚¥à®ïâ­®, £¤¥-â® ¤®«¦¥­ ¡ëâì áªàëâë© ¬¥å ­¨§¬...       '      >
  221.  
  222. @@:     cmp     edx, level1.Grid + (10 * level1.Width + 21) * 4
  223.         jne     @f
  224.         cmp     dword [level1.Grid + (11 * level1.Width + 21) * 4], level1.WallWithCrazyWoodDoor
  225.         jne     .exit_no_message
  226.  
  227.         mov     eax, .message_door3_closed
  228.         jmp     .exit
  229. .message_door3_closed                           langstr0 ru, < \
  230. '’ ªãî ¤¢¥àì ¢ë 㦥 ¢¨¤¥«¨, ¨ ¢ ¯à®è«ë© à § ®­  â ª     ', 10, \
  231. '¯à®áâ® ­¥ ®âªàë« áì.                                   '      >
  232.  
  233. @@:     cmp     edx, level1.Grid + (5 * level1.Width + 10) * 4
  234.         jne     @f
  235.         cmp     dword [level1.Grid + (8 * level1.Width + 8) * 4], level1.WallWithCrazyWoodDoor
  236.         jne     .exit_no_message
  237.  
  238.         mov     [level1.WallWithLever1.WallTexture4.DescPtr2], textures.RedLeverDown
  239.         mov     dword [level1.Grid + (8 * level1.Width + 8) * 4], level1.PassableArea
  240.  
  241.         mov     eax, .message_door1_opens
  242.         jmp     .exit
  243. .message_door1_opens                            langstr0 ru, < \
  244. '‚ë á«ëè¨â¥ §¢ãª «¥¡ñ¤ª¨ ¨ áªà¥¦¥â è¥áâ¥àñ­®ª.          '      >
  245.  
  246. @@:     cmp     edx, level1.Grid + (11 * level1.Width + 8) * 4
  247.         jne     @f
  248.         mov     eax, [level1.WallWithLever2.WallTexture2.DescPtr2]
  249.         mov     ebx, [level1.WallWithLever2.WallTexture4.DescPtr2]
  250.         mov     [level1.WallWithLever2.WallTexture2.DescPtr2], ebx
  251.         mov     [level1.WallWithLever2.WallTexture4.DescPtr2], eax
  252.         jmp     .3levers
  253.  
  254. @@:     cmp     edx, level1.Grid + (11 * level1.Width + 9) * 4
  255.         jne     @f
  256.         mov     eax, [level1.WallWithLever3.WallTexture2.DescPtr2]
  257.         mov     ebx, [level1.WallWithLever3.WallTexture4.DescPtr2]
  258.         mov     [level1.WallWithLever3.WallTexture2.DescPtr2], ebx
  259.         mov     [level1.WallWithLever3.WallTexture4.DescPtr2], eax
  260.         jmp     .3levers
  261.  
  262. @@:     cmp     edx, level1.Grid + (11 * level1.Width + 10) * 4
  263.         jne     @f
  264.         mov     eax, [level1.WallWithLever4.WallTexture2.DescPtr2]
  265.         mov     ebx, [level1.WallWithLever4.WallTexture4.DescPtr2]
  266.         mov     [level1.WallWithLever4.WallTexture2.DescPtr2], ebx
  267.         mov     [level1.WallWithLever4.WallTexture4.DescPtr2], eax
  268.         jmp     .3levers
  269.  
  270. @@:     cmp     edx, level1.Grid + (10 * level1.Width + 11) * 4
  271.         jne     @f
  272.         cmp     dword [level1.Grid + (10 * level1.Width + 12) * 4], level1.IronDoor
  273.         jne     .exit_no_message
  274.         mov     eax, .message_door2_closed
  275.         jmp     .exit
  276.  
  277. @@:     jmp     .exit_no_message
  278.  
  279. .check_next_action:
  280.         cmp     ax, AKODE_ACTION.CELL_ENTER
  281.         jne     .exit_no_message
  282.  
  283.         cmp     edx, level1.Grid + (2 * level1.Width + 13) * 4
  284.         jne     @f
  285.         cmp     [level1.Chest.Visible], 1
  286.         jne     .exit_no_message
  287.  
  288.         stdcall add_object_to_inventory, 4, [level1.CoinImagePtr]
  289.         stdcall add_object_to_inventory, 1, [level1.Sun1ImagePtr]
  290.         stdcall add_object_to_inventory, 2, [level1.Sun2ImagePtr]
  291.         stdcall add_object_to_inventory, 3, [level1.Sun3ImagePtr]
  292.  
  293.         mov     [level1.Chest.Visible], 0
  294.         mov     eax, .message_chest
  295.         jmp     .exit
  296. .message_chest                                  langstr0 ru, < \
  297. '‚ë ­ è«¨ áã­¤ãª á ¡ à å«®¬: 1 §®«®â®© ¬®­¥âª®© ¨       ', 10, \
  298. '3-¬ï ¬®­¥â ¬¨ á ¨§®¡à ¦¥­¨¥¬ ᮫­æ  ¢ à §­ëå ä § å.    '      >
  299.  
  300. @@:     cmp     edx, level1.Grid + (14 * level1.Width + 13) * 4
  301.         jne     @f
  302.         cmp     [level1.Ogre.Visible], 1
  303.         jne     .exit_no_message
  304.         mov     eax, .message_ogre
  305.         jmp     .exit
  306.  
  307. .message_ogre                                   langstr0 ru, < \
  308. '- ‘⮩! Šã¤  íâ® âë? „ «ìè¥ å®¤  ­¥â.                  '      >
  309.  
  310. @@:
  311.  
  312. .exit_no_message:
  313.         xor     eax, eax
  314.  
  315. .exit:
  316.         ret
  317.  
  318. .3levers:
  319.         mov     eax, [level1.WallWithLever2.WallTexture2.DescPtr2]
  320.         mov     ebx, [level1.WallWithLever3.WallTexture2.DescPtr2]
  321.         mov     ecx, [level1.WallWithLever4.WallTexture2.DescPtr2]
  322.  
  323.         cmp     eax, textures.RedLeverDown
  324.         jne     @f
  325.         cmp     ebx, textures.RedLeverUp
  326.         jne     @f
  327.         cmp     ecx, textures.RedLeverDown
  328.         jne     @f
  329.         mov     dword [level1.Grid + (10 * level1.Width + 12) * 4], level1.PassableArea
  330.         mov     eax, .message_door2_opens
  331.         jmp     .exit
  332.  
  333. @@:
  334.         mov     eax, .message_3levers
  335.         jmp     .exit
  336.  
  337. .message_3levers                                langstr0 ru, < \
  338. '‚ë ¯¥à¥áâ ¢¨«¨ íâ®â àëç £ ¢ ¤à㣮¥ ¯®«®¦¥­¨¥.          '      >
  339. .message_door2_closed                           langstr0 ru, < \
  340. '•®âì ¢ë ¨ ¯®«­ë ᨫ, ­® ᤢ¨­ãâì íâã ¤¢¥àì å®âì ­      ', 10, \
  341. '¬¨««¨¬¥âà ã ¢ á ­¥ ¯®«ã稫®áì.                         '      >
  342. .message_door2_opens                            langstr0 ru, < \
  343. '„® ¢ á ¤®­ñááï ¬¥â ««¨ç¥áª¨© áªà¥¦¥â.                  '      >
  344. endp
  345.  
  346. proc level1.columns uses ebx ecx, action, cell_x, cell_y
  347.         mov     eax, [action]
  348.         cmp     ax, ACTION.USE_OBJECT
  349.         jne     .exit_no_message
  350.  
  351.         shr     eax, 16
  352.         mov     ebx, eax
  353.  
  354.         mov     eax, [cell_x]
  355.  
  356.         cmp     eax, 16
  357.         jne     @f
  358.         cmp     ebx, 1
  359.         jne     .exit_no_message
  360.         stdcall remove_object_from_inventory, 1
  361.         mov     eax, [level1.Column4TextureDescPtr]
  362.         mov     [level1.Column1.TextureDescPtr], eax
  363.         mov     [level1.Column1.DisableShading], 1
  364.         mov     eax, .message_activated
  365.         jmp     .exit
  366.  
  367. @@:     cmp     eax, 19
  368.         jne     @f
  369.         cmp     ebx, 2
  370.         jne     .exit_no_message
  371.         stdcall remove_object_from_inventory, 2
  372.         mov     eax, [level1.Column4TextureDescPtr]
  373.         mov     [level1.Column2.TextureDescPtr], eax
  374.         mov     [level1.Column2.DisableShading], 1
  375.         mov     eax, .message_activated
  376.         jmp     .exit
  377.  
  378. @@:     cmp     eax, 22
  379.         jne     @f
  380.         cmp     ebx, 3
  381.         jne     .exit_no_message
  382.         stdcall remove_object_from_inventory, 3
  383.         mov     eax, [level1.Column4TextureDescPtr]
  384.         mov     [level1.Column3.TextureDescPtr], eax
  385.         mov     [level1.Column3.DisableShading], 1
  386.         mov     eax, .message_activated
  387.         jmp     .exit
  388.  
  389. @@:
  390. .exit_no_message:
  391.         xor     eax, eax
  392.         ret
  393.  
  394. .exit:
  395.         mov     ecx, [level1.Column1.DisableShading]
  396.         and     ecx, [level1.Column2.DisableShading]
  397.         and     ecx, [level1.Column3.DisableShading]
  398.         jecxz   @f
  399.         mov     dword [level1.Grid + (11 * level1.Width + 21) * 4], level1.PassableArea
  400. @@:
  401.         ret
  402.  
  403. .message_activated                              langstr0 ru, < \
  404. 'Š®«®­­  ­ ç «  ᢥâ¨âìáï áâà ­­ë¬ ᢥ⮬,   ­ ¤¯¨áì    ', 10, \
  405. '¨á祧« .'                                                     >
  406. endp
  407.  
  408. proc level1.ogre action, cell_x, cell_y
  409.         mov     eax, [action]
  410.  
  411.         cmp     ax, ACTION.DO_SOMETHING
  412.         jne     @f
  413.         stdcall player_death
  414.         xor     eax, eax
  415.         jmp     .exit
  416.  
  417. @@:     cmp     ax, ACTION.USE_OBJECT
  418.         jne     .exit_default
  419.         shr     eax, 16
  420.         cmp     eax, 4
  421.         jne     .exit_default
  422.  
  423.         mov     dword [level1.Grid + (15 * level1.Width + 13) * 4], level1.PassableArea
  424.         mov     [level1.Ogre.Visible], 0
  425.         stdcall remove_object_from_inventory, 4
  426.         mov     eax, .message_ogre
  427.         jmp     .exit
  428.  
  429. .exit_default:
  430.         xor     eax, eax
  431.         dec     eax
  432. .exit:
  433.         ret
  434.  
  435. .message_ogre                                   langstr0 ru, < \
  436. '- Ž©! Œ®­¥âª ! € ­ã ¢¥à­¨áì!!!                         '      >
  437. endp
  438.  
  439. proc level1.portal action, cell_x, cell_y
  440.         mov     eax, [action]
  441.         cmp     ax, AKODE_ACTION.CELL_ENTER
  442.         jne     @f
  443.         stdcall game_over
  444. @@:
  445.         xor     eax, eax
  446.         ret
  447. endp