Login Register
Frontpage Code library Pastebin

MultiMapSystem

Author: MetalRain
Added: 9.4.2011 23:47
Edited: 15.4.2011 22:19
Category: Kartat

Description

Valtzun multimapsystem, mahdollistaa monen kartan välillä saumattoman vaihdon.

Code

Select all
  1
  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.