MultiMapSystem
Author: MetalRain
Added: 9. huhtikuuta 2011 kello 23.47
Edited: 15. huhtikuuta 2011 kello 22.19
Category: Kartat
Description
Valtzun multimapsystem, mahdollistaa monen kartan välillä saumattoman vaihdon.
Code
Select all1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | //----------------------------------------//
// MultiMapSystem by Valtzu (9.7.2007) //
//----------------------------------------//
//Esimerkki
SCREEN 800,600
// Ladataan kartat muistiin
map1 = LoadMapToMem("Media\cdm2.til","Media\tileset.bmp")
map2 = LoadMapToMem("Media\testmap.til","Media\tileset.bmp")
// Ladataan ukko
ukko = LoadObject ("Media\guy.bmp",72)
AddText "Arrows to move, space to change map"
Repeat
If KeyHit(cbkeyspace) Or kartta=0 Then
kumpiKartta = Not kumpiKartta // 0=>1,1=>0
// Vaihdetaan karttaa
If kumpiKartta Then kartta=UseMap(map1,kartta) Else kartta=UseMap(map2,kartta)
// Kartta sisältää animoituja tilejä, joten karttaobjekti pitää animoida
PlayObject kartta,0,0,1
// Jokaisen kartan vaihdon jälkeen pitää asettaa törmäykset uudestaan
SetupCollision ukko, kartta, 1, 4, 2
EndIf
// Ukon ohjaus
If LeftKey() Then TurnObject ukko,5
If RightKey() Then TurnObject ukko,-5
If UpKey() Then MoveObject ukko,2
If DownKey() Then MoveObject ukko,-2
UpdateGame
CloneCameraPosition ukko
DrawScreen
Forever
// ---- Funktiot ---- //
// Tämä funktio lataa kartan muistiin. Parametreina tilemapin tiedostopolku
// ja tilesetin tiedostopolku tai valmiiksi LoadImagella ladattu kuva
Function LoadMapToMem(_tilemap$,_tileset$)
If Int(_tileset)=0 Then tileset=LoadImage(_tileset) Else tileset=Int(_tileset)
f=OpenToRead(_tilemap)
tmpMem=MakeMEMBlock(8)
PokeByte tmpMem,0, 23
PokeByte tmpMem,1, 40
PokeByte tmpMem,2, 179
PokeByte tmpMem,3,192
PokeByte tmpMem,4,243
PokeByte tmpMem,5,13
PokeByte tmpMem,6,56
PokeByte tmpMem,7,139
For i = 0 To 3
a=ReadByte(f)
If a <> PeekByte(tmpMem,i*2) And a <> PeekByte(tmpMem,i*2+1) Then virhe=1:Exit
Next i
versio# = ReadFloat(f)
If virhe Or versio <= 0.0 Or versio > 2.0 Then MakeError("Error! Invalid tilemap.")
For i=1 To 128
a=ReadInt(f)
Next i
maskr=ReadByte(f):maskg=ReadByte(f):maskb=ReadByte(f)
For i=1 To 297
a=ReadByte(f)
Next i
tileja=ReadInt(f)
tileleveys=ReadInt(f)
tilekorkeus=ReadInt(f)
mapleveys=ReadInt(f)
mapkorkeus=ReadInt(f)
mapMem=MakeMEMBlock(27+(mapleveys*mapkorkeus*2*4)+(tileja*8))
PokeInt mapMem,0, tileja
PokeInt mapMem,4, tileleveys
PokeInt mapMem,8, tilekorkeus
PokeInt mapMem,12,mapleveys
PokeInt mapMem,16,mapkorkeus
PokeInt mapMem,20,tileset
PokeByte tmpMem,0, 254
PokeByte tmpMem,1, 45
PokeByte tmpMem,2, 12
PokeByte tmpMem,3,166
offset=24
For kerros=0 To 3
If ReadByte(f) <> PeekByte(tmpMem,0) Or ReadByte(f) <> PeekByte(tmpMem,1) Or ReadByte(f) <> PeekByte(tmpMem,2) Or ReadByte(f) <> PeekByte(tmpMem,3) Then MakeError("Error! Invalid tilemap.")
For y=1 To mapkorkeus
For x=1 To mapleveys
PokeShort mapMem,offset,ReadInt(f):offset+2
Next x
Next y
For i=0 To 3
PokeByte tmpMem,i,PeekByte(tmpMem,i)-1
Next i
Next kerros
If ReadByte(f) <> PeekByte(tmpMem,0) Or ReadByte(f) <> PeekByte(tmpMem,1) Or ReadByte(f) <> PeekByte(tmpMem,2) Or ReadByte(f) <> PeekByte(tmpMem,3) Then MakeError("Error! Invalid tilemap.")
For tile=1 To tileja
PokeInt mapMem,offset,ReadInt(f):offset+4
PokeInt mapMem,offset,ReadInt(f):offset+4
Next tile
PokeByte mapMem,offset,maskr:offset+1
PokeByte mapMem,offset,maskg:offset+1
PokeByte mapMem,offset,maskb:offset+1
CloseFile f
DeleteMEMBlock tmpMem
Return mapMem
End Function
// UseMap()-funktio asettaa LoadMapToMem()-funktiolla ladatun kartan käyttöön.
// Toiseksi parametriksi syötetään viimeksi käytetty karttaobjekti
Function UseMap(mapMem,oldMap=0)
If oldMap Then DeleteObject oldMap
tileja=PeekInt(mapMem,0)
tileleveys=PeekInt(mapMem,4)
tilekorkeus=PeekInt(mapMem,8)
mapleveys=PeekInt(mapMem,12)
mapkorkeus=PeekInt(mapMem,16)
tileset=PeekInt(mapMem,20)
objMap=MakeMap(mapleveys,mapkorkeus,tileleveys,tilekorkeus)
offset=24
For kerros=0 To 3
kerros2=kerros
If kerros = 1 Then kerros2 = 2
If kerros = 2 Then kerros2 = 1
For y=1 To mapkorkeus
For x=1 To mapleveys
EditMap objMap,kerros2,x,y,Int(PeekShort(mapMem,offset)):offset+2
Next x
Next y
Next kerros
For tile=1 To tileja
pituus=PeekInt(mapMem,offset):offset+4
hitaus=PeekInt(mapMem,offset):offset+4
SetTile tile,pituus,hitaus
Next tile
PaintObject objMap,tileset
r=PeekByte(mapMem,offset):offset+1
g=PeekByte(mapMem,offset):offset+1
b=PeekByte(mapMem,offset):offset+1
MaskObject objMap,r,g,b
ObjectOrder objMap,-1
Return objMap
End Function
// Poistaa LoadMapToMem()-funktiolla ladatun kartan muistista.
// Tämän käyttö ei ole välttämätöntä
Function DeleteMapFromMem(mapMem)
DeleteMEMBlock mapMem
End Function
|
Comments
No comments. You can be first!
Leave a comment
You must be logged in to comment.