- -- GLOBAL VARIABLE DEFINITIONS
- global gMap
- global gCharacterManager
- -- PROPERTY DEFINITIONS
- property pUsername
- property spriteNum
- property pSprite
- property pMovementQueue
- property pWalking
- property pSteps
- -- Creates a new parent/child object.
- on new(me, username)
- me.pUsername = username
- me.pMovementQueue = []
- me.pWalking = FALSE
- return(me)
- end new
- -- Finds a blank sprite channel on the score.
- on findSpriteChannel(me)
- position = 500
- i = 0
- repeat while true
- if (sprite(position + i).member.type = #empty) then
- emptySprite = position + i
- exit repeat
- end if
- i = i + 1
- end repeat
- channel(emptySprite).makeScriptedSprite(member("BlankSprite", "Characters"), point(-100, -100))
- me.spriteNum = emptySprite
- me.pSprite = sprite(me.spriteNum)
- me.pSprite.bgColor = color(5)
- me.pSprite.ink = 36
- me.pSprite.scriptInstanceList.add(me)
- end findSpriteChannel
- -- Removes the sprite from the score.
- on deleteSprite(me)
- me.pSprite.scriptInstanceList = []
- me.pSprite.visible = FALSE
- channel(me.SpriteNum).removeScriptedSprite()
- end deleteSprite
- -- Removes the bitmaps from the "Characters" cast library.
- on deleteBitmaps(me)
- position = me.spriteNum - 500
- position = position * 12
- position = position + 2
- repeat with i = 1 to 12
- member(position + (i - 1), "Characters").erase()
- end repeat
- end deleteBitmaps
- -- Resets the bitmaps in the "Characters" cast library.
- on resetBitmaps(me)
- directions = ["N", "S", "E", "W"]
- position = me.spriteNum - 500
- position = position * 12
- position = position + 2
- repeat with frame = 1 to 3
- repeat with direction = 1 to 4
- member(position, "Characters").erase()
- new(#bitmap, member(position, "Characters"))
- member(position, "Characters").name = me.pUsername & "-" & directions[direction] & "-" & frame
- member(position, "Characters").image = member("BlankSprite", "Characters").image
- position = position + 1
- end repeat
- end repeat
- end resetBitmaps
- -- Draws the character's bitmaps.
- -- The appearance is based on the drawList passed.
- on renderBitmaps(me, drawList)
- directions = ["N", "S", "E", "W"]
- hair = drawList[1]
- gender = drawList[2]
- me.resetBitmaps()
- repeat with frame = 1 to 3
- repeat with direction = 1 to 4
- characterMember = me.pUsername & "-" & directions[direction] & "-" & frame
- hairMember = "Hair-" & hair & "-" & directions[direction] & "-" & frame
- bodyMember = gender & "-Default-" & directions[direction] & "-" & frame
- case (directions[direction]) of
- "N":
- member(characterMember, "Characters").image.copyPixels(member(bodyMember, "Character Angles").image, member(bodyMember, "Character Angles").rect, member(bodyMember, "Character Angles").rect, [#ink: 36, #blendLevel: 255, #bgcolor: 5, #color: 255])
- member(characterMember, "Characters").image.copyPixels(member(hairMember, "Character Angles").image, member(hairMember, "Character Angles").rect, member(hairMember, "Character Angles").rect, [#ink: 36, #blendLevel: 255, #bgcolor: 5, #color: 255])
- "S":
- member(characterMember, "Characters").image.copyPixels(member(bodyMember, "Character Angles").image, member(bodyMember, "Character Angles").rect, member(bodyMember, "Character Angles").rect, [#ink: 36, #blendLevel: 255, #bgcolor: 5, #color: 255])
- member(characterMember, "Characters").image.copyPixels(member(hairMember, "Character Angles").image, member(hairMember, "Character Angles").rect, member(hairMember, "Character Angles").rect, [#ink: 36, #blendLevel: 255, #bgcolor: 5, #color: 255])
- "E":
- member(characterMember, "Characters").image.copyPixels(member(bodyMember, "Character Angles").image, member(bodyMember, "Character Angles").rect, member(bodyMember, "Character Angles").rect, [#ink: 36, #blendLevel: 255, #bgcolor: 5, #color: 255])
- member(characterMember, "Characters").image.copyPixels(member(hairMember, "Character Angles").image, member(hairMember, "Character Angles").rect, member(hairMember, "Character Angles").rect, [#ink: 36, #blendLevel: 255, #bgcolor: 5, #color: 255])
- "W":
- member(characterMember, "Characters").image.copyPixels(member(bodyMember, "Character Angles").image, member(bodyMember, "Character Angles").rect, member(bodyMember, "Character Angles").rect, [#ink: 36, #blendLevel: 255, #bgcolor: 5, #color: 255])
- member(characterMember, "Characters").image.copyPixels(member(hairMember, "Character Angles").image, member(hairMember, "Character Angles").rect, member(hairMember, "Character Angles").rect, [#ink: 36, #blendLevel: 255, #bgcolor: 5, #color: 255])
- end case
- end repeat
- end repeat
- end renderBitmaps
- -- Draws the character onto the stage.
- on drawCharacter(me, drawList)
- me.renderBitmaps(drawList)
- facing = drawList[4]
- location = drawList[5]
- position = convertPos(#XYToLoc, location[1], location[2])
- case (facing) of:
- #north: me.pSprite.member = member(me.pUsername & "-N-2", "Characters")
- #south: me.pSprite.member = member(me.pUsername & "-S-2", "Characters")
- #east: me.pSprite.member = member(me.pUsername & "-E-2", "Characters")
- #west: me.pSprite.member = member(me.pUsername & "-W-2", "Characters")
- end case
- me.pSprite.locH = (position.locH - 16)
- me.pSprite.locV = (position.locV - 32)
- me.pSprite.visible = true
- end drawCharacter
- -- Moves the sprite.
- -- Direction is based on the current facing
- on walkSprite(me)
- if (me.pSteps = 0) then me.pSteps = 8
- me.pWalking = true
- dontDraw = false
- case (me.pSteps) of
- 8: form = 1
- 7: form = 1
- 6: form = 2
- 5: form = 2
- 4: form = 3
- 3: form = 3
- 2: form = 2
- 1: form = 2
- otherwise: dontDraw = true
- end case
- case (me.pMovementQueue[1]) of
- #north:
- if not(dontDraw) then
- me.pSprite.member = member(me.pUsername & "-N-" & form, "Characters")
- end if
- me.pSprite.locV = me.pSprite.locV - 4
- #south:
- if not(dontDraw) then
- me.pSprite.member = member(me.pUsername & "-S-" & form, "Characters")
- end if
- me.pSprite.locV = me.pSprite.locV + 4
- #east:
- if not(dontDraw) then
- me.pSprite.member = member(me.pUsername & "-E-" & form, "Characters")
- end if
- me.pSprite.locH = me.pSprite.locH + 4
- #west:
- if not(dontDraw) then
- me.pSprite.member = member(me.pUsername & "-W-" & form, "Characters")
- end if
- me.pSprite.locH = me.pSprite.locH - 4
- end case
- me.pSteps = me.pSteps - 1
- if (me.pSteps = 0) then
- -- Removes movement from the movement queue.
- me.pMovementQueue.deleteAt(1)
- if (me.pUsername = gCharacterManager.getUsername()) then
- position = convertPos(#LocToXY, me.pSprite.locH, me.pSprite.locV)
- gCharacterManager.setMapLocation([position.x, position.y])
- end if
- me.pWalking = FALSE
- end if
- end walkSprite
- -- Moves the sprite directly to a location on the stage.
- on moveSprite(me, x, y)
- position = convertPos(#XYToLoc, x, y)
- me.pSprite.locH = position.locH
- me.pSprite.locV = position.locV
- end moveSprite
- -- Adds a movement command to the movement queue.
- -- The movement queue is stored as a linear list.
- on addMovement(me, movement)
- me.pMovementQueue.add(movement)
- end addMovement
- -- Repeats itself if the movement queue is not completed.
- -- This ensures that all movement is completed correctly.
- on exitFrame(me)
- count = me.pMovementQueue.count
- if (count > 0) then
- me.pWalking = TRUE
- me.walkSprite()
- end if
- end exitFrame
- -- A function used for left mouse clicks on the character sprite.
- on mouseUp(me)
- _player.alert(me.pUsername)
- end mouseUp
