V-MapLoad.asm
上传用户:santakups8
上传日期:2021-03-23
资源大小:544k
文件大小:8k
源码类别:

模拟服务器

开发平台:

Asm

  1. ;EasyCodeName=Module1,1
  2. ;-----------------------------------------------------------------------------------
  3. ;    VeMU
  4. ;    Its a package that allows the user to set his own server of the game
  5. ;    "MuOnline", this is not an emulator since i am not "emulating"
  6. ;    what the actual games does, i am "creating" a method for set a Server
  7. ;    of this Game.
  8. ;
  9. ;    Copyright (C) 2010  Felipe Ya馿z
  10. ;
  11. ;    This program is free software: you can redistribute it and/or modify
  12. ;    it under the terms of the GNU General Public License as published by
  13. ;    the Free Software Foundation, either version 3 of the License, or
  14. ;    (at your option) any later version.
  15. ;
  16. ;    This program is distributed in the hope that it will be useful,
  17. ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. ;    GNU General Public License for more details.
  20. ;
  21. ;    You should have received a copy of the GNU General Public License
  22. ;    along with this program.  If not, see http://www.gnu.org/licenses/.
  23. ;-----------------------------------------------------------------------------------
  24. ;-----------------------------------------------------------------------------------
  25. ;                        -----------------
  26. ;                             Coded     /
  27. ;                              By      /
  28. ;                           -={FeN$x)=-
  29. ;                         /  Felipe Y.  
  30. ;                        /               
  31. ;                        -----------------
  32. ; Programming Lang: ASM
  33. ; Country: Chile
  34. ;              My respect for all those who lost their lifes
  35. ;              In the earthquake of my country...
  36. ;              Let god take their spirits home...
  37. ;-----------------------------------------------------------------------------------
  38. ;////////////////////////////////////////////////////////////////////////////////////
  39. ;                       VeMU Project
  40. ;                        Map Load !
  41. ;////////////////////////////////////////////////////////////////////////////////////
  42. .const
  43. .data?
  44. .Data
  45. ;////////////////////////////////////////////////
  46. ;Aligned strings to 26 bytes dont edit the ",0"
  47. ;////////////////////////////////////////////////
  48. MapNames DB "./Data/Maps/terrain1.att", 0, 0
  49.          DB "./Data/Maps/terrain2.att", 0, 0
  50.          DB "./Data/Maps/terrain3.att", 0, 0
  51.          DB "./Data/Maps/terrain4.att", 0, 0
  52.          DB "./Data/Maps/terrain5.att", 0, 0
  53.          DB "./Data/Maps/terrain6.att", 0, 0
  54.          DB "./Data/Maps/terrain7.att", 0, 0
  55.          DB "./Data/Maps/terrain8.att", 0, 0
  56.          DB "./Data/Maps/terrain9.att", 0, 0
  57.          DB "./Data/Maps/terrain10.att", 0
  58.          DB "./Data/Maps/terrain11.att", 0
  59.          DB "./Data/Maps/terrain12.att", 0 ;Loaded 8 times (BC for normal levels)
  60.          DB "./Data/Maps/terrain19.att", 0 ;Loaded 7 times i dont know what is
  61.          DB "./Data/Maps/terrain25.att", 0
  62.          DB "./Data/Maps/terrain31.att", 0
  63.          DB "./Data/Maps/terrain32.att", 0
  64.          DB "./Data/Maps/terrain33.att", 0
  65.          DB "./Data/Maps/terrain34.att", 0
  66.          DB "./Data/Maps/terrain35.att", 0
  67.          DB "./Data/Maps/terrain36.att", 0
  68.          DB "./Data/Maps/terrain37.att", 0
  69.          DB "./Data/Maps/terrain38.att", 0
  70.          DB "./Data/Maps/terrain39.att", 0
  71.          DB "./Data/Maps/terrain40.att", 0
  72.          DB "./Data/Maps/terrain41.att", 0
  73.          DB "./Data/Maps/terrain42.att", 0
  74.          DB "./Data/Maps/terrain43.att", 0
  75.          DB "./Data/Maps/terrain46.att", 0 ;Load 8 times (BC floors for master level i think)
  76.          DB "./Data/Maps/terrain52.att", 0 ;Elbeland
  77.          DB "./Data/Maps/terrain57.att", 0
  78. .Code
  79. ;////////////////////////////////////////////////////////////
  80. ;Main procedure for loading maps that will make a loop
  81. ;between the maps list (MapNames space) and load them.
  82. ;Also the inputed maps like Terrain12, 19, etc
  83. ;Got RealoadTime variable depending how many floors
  84. ;they have.
  85. ;////////////////////////////////////////////////////////////
  86. V_CMap_LoadAll Proc
  87. Local MapCounter:DWord
  88. Local MapStringCounter:Dword
  89. Local Reloadtimes:DWord
  90. Local StringPos:Dword
  91.  Mov MapCounter, 0
  92.  Mov MapStringCounter, 0
  93.  .Repeat
  94.   lea ecx, MapNames
  95.   mov eax, ALIGN_MAP_STRINGS ;Aligment bytes for MapStrings
  96.   Mov Edx, MapStringCounter
  97.   IMul Edx, Eax ;MapNumber * Aling String
  98.   add edx, ecx
  99.   mov StringPos, edx
  100.   invoke szCmp, $CTA0("./Data/Maps/terrain12.att"), edx
  101.   .if (eax != 0)
  102.     Mov Reloadtimes, 8 ;Load 8 floors
  103.     jmp ReadMap
  104.   .endif
  105.   mov edx, StringPos
  106.   invoke szCmp, $CTA0("./Data/Maps/terrain19.att"), edx
  107.   .if (eax != 0)
  108.     Mov Reloadtimes, 7 ;Load 7 floors
  109.     jmp ReadMap
  110.   .endif
  111.   mov edx, StringPos
  112.   invoke szCmp, $CTA0("./Data/Maps/terrain25.att"), edx
  113.   .if (eax != 0)
  114.     Mov Reloadtimes, 6 ;Load 6 floors
  115.     jmp ReadMap
  116.   .endif
  117.   mov edx, StringPos
  118.   invoke szCmp, $CTA0("./Data/Maps/terrain46.att"), edx
  119.   .if (eax != 0)
  120.     Mov Reloadtimes, 8 ;Load 8 floors
  121.     jmp ReadMap
  122.   .endif
  123.   mov edx, StringPos
  124.   invoke szCmp, $CTA0("./Data/Maps/terrain57.att"), edx
  125.   .if (eax != 0)
  126.     Mov Reloadtimes, 3 ;Load 3 floors
  127.     jmp ReadMap
  128.   .else
  129.     Mov Reloadtimes, 0
  130.   .endif
  131. ReadMap:
  132.   .Repeat
  133.       mov edx, StringPos
  134.       pObj MapCounter, SizeOf MapClass, pMapObjSpace
  135.       mov ecx, eax
  136.     Invoke V_CMap_LoadTerrain, edx ;Load the terrain
  137.       mov edx, StringPos
  138.       .if (eax == 1) && (Reloadtimes != 0)
  139.          RGB 255, 64, 64
  140.          mov edx, StringPos
  141.          Invoke vprint, $CTA0("CMapLoad:] MAP {%s} Floor {%d} Sucessfully loaded"), Eax, 2, edx, Reloadtimes
  142.          sub Reloadtimes, 1
  143.       .elseif (eax == 1) && (Reloadtimes == 0)
  144.          RGB 255, 64, 64
  145.          mov edx, StringPos
  146.          Invoke vprint, $CTA0("CMapLoad:] MAP {%s} Successfully loaded"), Eax, 1, edx
  147.       .else
  148.       .endif
  149.       add MapCounter, 1
  150.   .Until (Reloadtimes == 0)
  151.   add MapStringCounter, 1
  152.  .Until (MapCounter == MAPLIMIT)
  153.  Ret
  154. V_CMap_LoadAll EndP
  155. ;////////////////////////////////////////////////////////////
  156. ;Procedure that will read into the inputed
  157. ;Terrain name and take the information into
  158. ;PATHDIMENSION struct.
  159. ;////////////////////////////////////////////////////////////
  160. V_CMap_LoadTerrain Proc szMapName:DWord
  161. Local MyStruct:DWord
  162. Local Header:DWord
  163. Local hHandle:HANDLE
  164.  Mov MyStruct, Ecx
  165.  Assume Ecx:Ptr MapClass
  166.  Mov hHandle, fopen(szMapName)
  167.  Mov Ecx, MyStruct
  168.  Mov Eax, fread(hHandle, Addr [Ecx].gWidth, 1) ;EAX = Bytes readed but i dont care to check them
  169.  Mov Ecx, MyStruct
  170.  Mov Eax, fread(hHandle, addr [Ecx].gHeight, 1) ;EAX = Bytes readed but i dont care to check them
  171.  Mov Ecx, MyStruct
  172.  .If ([Ecx].gWidth > 255) || ([ecx].gHeight > 255) ;If Width or Height exceeded
  173.   RGB 255, 64, 64
  174.   Mov Edx, Eax
  175.   Invoke vprint, $CTA0("CMapLoad:] MAP {%s} INVALID_WIDTH or INVALID_HEIGHT"), Edx, 1, szMapName
  176.     xor eax, eax
  177.     Jmp EndProcedure
  178.  .EndIf
  179.  .If ([Ecx].pMapAttr != 0)
  180.   Invoke HeapFree, V_ProcessHeapHandle, HEAP_NO_SERIALIZE, addr [Ecx].pMapAttr
  181.  .EndIf
  182.  fastalloc MAPWIDTH * MAPHEIGHT, 1 ;allocate space for Map Attribute
  183.  Mov Ecx, MyStruct
  184.  Mov [Ecx].pMapAttr, Eax ;Save the pointer of allocated space
  185.  Mov Eax, fread(hHandle, [Ecx].pMapAttr, 100h) ;EAX = Bytes readed but i dont care to check them
  186.  fclose (hHandle)
  187.  Mov Ecx, MyStruct
  188. ;-----------------------------------------------------
  189. ;Set path dimensions !
  190. ;-----------------------------------------------------
  191.  Mov Eax, [Ecx].pPath ;pointer to PATHDIMENSION struct
  192.  Assume Eax:Ptr PATHDIMENSION
  193.  Mov [Eax].vWidth, MAPWIDTH ;Set the max cords
  194.  Mov [Eax].vHeight, MAPHEIGHT ;Set the max cords
  195.  Push Eax ; save eax
  196.  fastalloc MAPWIDTH * MAPHEIGHT, 1 ;allocate space for HitMap buffer
  197.  Mov Edx, Eax
  198.  Pop Eax ; return eax
  199.  Mov [Eax].pHitMap, Edx ;Save the pointer to allocated data
  200. EndProcedure:
  201.  mov eax, 1
  202. Assume Eax:Nothing
  203. Assume Ecx:Nothing
  204.  Ret
  205. V_CMap_LoadTerrain EndP