Files
gtav-src/script/dev_ng/shared/include/public/wizard_arcade_drawing.sch
T
2025-09-29 00:52:08 +02:00

2116 lines
83 KiB
XML
Executable File

USING "wizard_arcade_using.sch"
FUNC BOOL GET_UV_FOR_BACKGROUND_TILE(TWS_BACKGROUND_TILE_TYPE eType, VECTOR_2D &vU,VECTOR_2D &vV)
SWITCH eType
CASE TWS_BG_TL_1_INTRO
CASE TWS_BG_TL_1_BASE
CASE TWS_BG_TL_1_CAVE
CASE TWS_BG_TL_1_CLIFF
CASE TWS_BG_TL_1_SPIDER
CASE TWS_BG_TL_2_INTRO
CASE TWS_BG_TL_2_BIG_TREE
CASE TWS_BG_TL_2_TREES
CASE TWS_BG_TL_2_DEAD_BODIES
CASE TWS_BG_TL_3_INTRO
CASE TWS_BG_TL_3_BIG_WINDOW
CASE TWS_BG_TL_3_WINDOWS_OPEN
CASE TWS_BG_TL_3_STATUES
CASE TWS_BG_TL_3_DOOR_STAIRS
CASE TWS_BG_TL_3_OUTRO
CASE TWS_BG_TL_4_INTRO
CASE TWS_BG_TL_4_INTRO_NPC
CASE TWS_BG_TL_4_BIG_TREE
CASE TWS_BG_TL_4_BIG_MUSHROOM
CASE TWS_BG_TL_4_OPEN_BACK
CASE TWS_BG_TL_4_TREES
vU.x = 0.0015625
vU.y = 0.0
vV.x = 1.0-vU.x
vV.y = 1.0
RETURN TRUE
CASE TWS_BG_TL_1_GEN_1
CASE TWS_BG_TL_1_GEN_2
CASE TWS_BG_TL_2_GEN_1
CASE TWS_BG_TL_2_GEN_2
CASE TWS_BG_TL_2_GEN_3
CASE TWS_BG_TL_3_GEN_1
CASE TWS_BG_TL_3_GEN_2
CASE TWS_BG_TL_4_GEN_1
CASE TWS_BG_TL_4_GEN_2
CASE TWS_BG_TL_4_GEN_3
vU.x = 0.003125
vU.y = 0.0
vV.x = 1.0-vU.x
vV.y = 1.0
RETURN TRUE
CASE TWS_BG_TL_1_BOSS
CASE TWS_BG_TL_2_BOSS
CASE TWS_BG_TL_4_BOSS
CASE TWS_BG_TL_3_FINAL
RETURN FALSE
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC TWS_DRAW_BACKGROUND()
INT i
FLOAT fTilePosX, fShake = 0.0
TEXT_LABEL_31 tl23BackgroundSprite
TEXT_LABEL_31 tl23BackgroundDictionary
SWITCH sTWSData.eCurrentLevel
CASE TWS_FOREST_INTRO
CASE TWS_FOREST
CASE TWS_SWAMP
tl23BackgroundDictionary = "MPWizardsSleeveBackgrounds12"
BREAK
CASE TWS_CAVES
CASE TWS_CASTLE
CASE TWS_CASTLE_OUTRO
tl23BackgroundDictionary = "MPWizardsSleeveBackgrounds34"
BREAK
ENDSWITCH
VECTOR_2D vU
VECTOR_2D vV
// Background
SWITCH sTWSData.eCurrentLevel
CASE TWS_FOREST_INTRO
tl23BackgroundSprite = "forest_start_npc"
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FOREST
CASE TWS_SWAMP
CASE TWS_CAVES
// Midground
FOR i = 0 TO iCurrentFarBackgroundTileToAdd - 1
SWITCH sFarBackgroundTilesData[i].eType
CASE TWS_FBG_TL_FOREST_1
tl23BackgroundSprite = "forest_bg_tile1"
BREAK
CASE TWS_FBG_TL_FOREST_2
tl23BackgroundSprite = "forest_bg_tile2 - castle"
BREAK
CASE TWS_FBG_TL_SWAMP
tl23BackgroundSprite = "swamp_bg_tile"
BREAK
CASE TWS_FBG_TL_CAVES
tl23BackgroundSprite = "cave_bg_tile"
BREAK
ENDSWITCH
FLOAT fPlayerX
IF (sPlayerData.vSpritePos.x >= sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos OR (sTWSData.eLevelStage >= TWS_LEVEL_BOSS_FIGHT AND sPlayerData.iLifes > 0)) AND sTWSData.eCurrentLevel != TWS_FOREST_INTRO
fPlayerX = sFarBackgroundTilesData[i].fSpritePos + TWS_GET_OFFSET_TO_PLAYER(0.5, 0.0, cfBASE_SCREEN_WIDTH/4)
ELIF sPlayerData.ePlayerState = TWS_INTRO OR sPlayerData.vSpritePos.x <= cfBASE_SCREEN_WIDTH/2 OR sTWSData.eCurrentLevel = TWS_FOREST_INTRO
fPlayerX = sFarBackgroundTilesData[i].fSpritePos
ELIF sTWSData.bLockedScreen
fPlayerX = sFarBackgroundTilesData[i].fSpritePos + TWS_GET_OFFSET_TO_PLAYER(0.5, sTWSData.fLockedScreenPos, DEFAULT, DEFAULT,- cfBASE_SCREEN_WIDTH/4)
ELSE
fPlayerX = sFarBackgroundTilesData[i].fSpritePos + TWS_GET_OFFSET_TO_PLAYER(0.5, DEFAULT, DEFAULT, DEFAULT, - cfBASE_SCREEN_WIDTH/4)
ENDIF
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(fPlayerX, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ENDFOR
BREAK
CASE TWS_CASTLE
CASE TWS_CASTLE_OUTRO
IF sEnemyData[sTWSData.iBossEnemyIndex].eEnemyState = TWS_ENEMY_EXPLODING
OR sEnemyData[sTWSData.iBossEnemyIndex].eEnemyState = TWS_ENEMY_DYING
sTWSData.iAnimatedBackgroundSpriteAnim = (sTWSData.iAnimatedBackgroundSpriteAnim + sTWSData.iGlobalDefaultUpdateFrames) % 2
tl23BackgroundSprite = "wizard_dying_bg_0000"
tl23BackgroundSprite += sTWSData.iAnimatedBackgroundSpriteAnim
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ELIF sEnemyData[sTWSData.iBossEnemyIndex].eEnemyState = TWS_ENEMY_DYING_2
tl23BackgroundSprite = "wizard_bg_flash"
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ELSE
IF sTWSData.iAnimatedBackgroundSpriteAnim < 10
tl23BackgroundSprite = "castle_sky_glow_0000"
ELSE
tl23BackgroundSprite = "castle_sky_glow_000"
ENDIF
tl23BackgroundSprite += sTWSData.iAnimatedBackgroundSpriteAnim
fTilePosX = cfBASE_SCREEN_WIDTH/2 - cfGAME_SCREEN_WIDTH/2
FOR i = 0 TO ciTWS_ANIMATED_BACKGROUND_TILES-1
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(fTilePosX, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfTWS_ANIMATED_BACKGROUND_TILE_WIDTH, cfTWS_BACKGROUND_TILE_HEIGHT), 0, sTWSData.rgbaSprite)
fTilePosX += cfTWS_ANIMATED_BACKGROUND_TILE_WIDTH
ENDFOR
sTWSData.iAnimatedBackgroundSpriteAnim = (sTWSData.iAnimatedBackgroundSpriteAnim + sTWSData.iGlobalDefaultUpdateFrames) % ciTWS_ANIMATED_BACKGROUND_FRAMES
ENDIF
BREAK
ENDSWITCH
IF TWS_IS_CAMERA_SHAKE_ACTIVE()
fShake = SIN(TO_FLOAT(GET_GAME_TIMER()*10))*20
ENDIF
// Midground
FOR i = 0 TO iCurrentBackgroundTileToAdd - 1
SWITCH sBackgroundTilesData[i].eType
CASE TWS_BG_TL_1_INTRO
tl23BackgroundSprite = "cave_rooms1"
BREAK
CASE TWS_BG_TL_1_BASE
tl23BackgroundSprite = "cave_rooms2"
BREAK
CASE TWS_BG_TL_1_CAVE
tl23BackgroundSprite = "cave_rooms3"
BREAK
CASE TWS_BG_TL_1_CLIFF
tl23BackgroundSprite = "cave_rooms4"
BREAK
CASE TWS_BG_TL_1_SPIDER
tl23BackgroundSprite = "cave_rooms5"
BREAK
CASE TWS_BG_TL_1_BOSS
tl23BackgroundSprite = "cave_rooms6 - boss"
BREAK
CASE TWS_BG_TL_1_GEN_1
tl23BackgroundSprite = "cave_tile_1"
BREAK
CASE TWS_BG_TL_1_GEN_2
tl23BackgroundSprite = "cave_tile_2"
BREAK
CASE TWS_BG_TL_2_INTRO
tl23BackgroundSprite = "swamp_room1"
BREAK
CASE TWS_BG_TL_2_BIG_TREE
tl23BackgroundSprite = "swamp_room2"
BREAK
CASE TWS_BG_TL_2_TREES
tl23BackgroundSprite = "swamp_room3"
BREAK
CASE TWS_BG_TL_2_DEAD_BODIES
tl23BackgroundSprite = "swamp_room4"
BREAK
CASE TWS_BG_TL_2_BOSS
tl23BackgroundSprite = "swamp_room5-boss"
BREAK
CASE TWS_BG_TL_2_GEN_1
tl23BackgroundSprite = "swamp_generic1"
BREAK
CASE TWS_BG_TL_2_GEN_2
tl23BackgroundSprite = "swamp_generic2"
BREAK
CASE TWS_BG_TL_2_GEN_3
tl23BackgroundSprite = "swamp_generic3"
BREAK
CASE TWS_BG_TL_3_INTRO
tl23BackgroundSprite = "castle_rooms1"
BREAK
CASE TWS_BG_TL_3_WINDOWS_OPEN
tl23BackgroundSprite = "castle_rooms2"
BREAK
CASE TWS_BG_TL_3_STATUES
tl23BackgroundSprite = "castle_rooms3"
BREAK
CASE TWS_BG_TL_3_BIG_WINDOW
tl23BackgroundSprite = "castle_rooms4"
BREAK
CASE TWS_BG_TL_3_DOOR_STAIRS
tl23BackgroundSprite = "castle_rooms5"
BREAK
CASE TWS_BG_TL_3_OUTRO
tl23BackgroundSprite = "castle_rooms6"
BREAK
CASE TWS_BG_TL_3_GEN_1
tl23BackgroundSprite = "castle_generic_parts1"
BREAK
CASE TWS_BG_TL_3_GEN_2
tl23BackgroundSprite = "castle_generic_parts2"
BREAK
CASE TWS_BG_TL_3_FINAL
EXIT
CASE TWS_BG_TL_4_INTRO
tl23BackgroundSprite = "forest_rooms1"
BREAK
CASE TWS_BG_TL_4_INTRO_NPC
tl23BackgroundSprite = "forest_start_npc"
BREAK
CASE TWS_BG_TL_4_BIG_TREE
tl23BackgroundSprite = "forest_rooms2"
BREAK
CASE TWS_BG_TL_4_BIG_MUSHROOM
tl23BackgroundSprite = "forest_rooms3"
BREAK
CASE TWS_BG_TL_4_OPEN_BACK
tl23BackgroundSprite = "forest_rooms4"
BREAK
CASE TWS_BG_TL_4_TREES
tl23BackgroundSprite = "forest_rooms5"
BREAK
CASE TWS_BG_TL_4_GEN_1
tl23BackgroundSprite = "forest_generic1"
BREAK
CASE TWS_BG_TL_4_GEN_2
tl23BackgroundSprite = "forest_generic2"
BREAK
CASE TWS_BG_TL_4_GEN_3
tl23BackgroundSprite = "forest_generic3"
BREAK
CASE TWS_BG_TL_4_BOSS
tl23BackgroundSprite = "forest_rooms6"
BREAK
ENDSWITCH
FLOAT fPlayerX
IF (sPlayerData.vSpritePos.x >= sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos OR (sTWSData.eLevelStage >= TWS_LEVEL_BOSS_FIGHT AND sPlayerData.iLifes > 0)) AND sTWSData.eCurrentLevel != TWS_FOREST_INTRO
fPlayerX = sBackgroundTilesData[i].fSpritePos + TWS_GET_OFFSET_TO_PLAYER(1.0, sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos)
ELIF sPlayerData.ePlayerState = TWS_INTRO OR sPlayerData.vSpritePos.x <= cfBASE_SCREEN_WIDTH/2 OR sTWSData.eCurrentLevel = TWS_FOREST_INTRO
fPlayerX = sBackgroundTilesData[i].fSpritePos
ELIF sTWSData.bLockedScreen
fPlayerX = sBackgroundTilesData[i].fSpritePos + TWS_GET_OFFSET_TO_PLAYER(1.0, sTWSData.fLockedScreenPos)
ELSE
fPlayerX = sBackgroundTilesData[i].fSpritePos + TWS_GET_OFFSET_TO_PLAYER()
ENDIF
IF ABSF(sBackgroundTilesData[i].fSpritePos - sPlayerData.vSpritePos.x) < cfGAME_SCREEN_WIDTH*2
IF GET_UV_FOR_BACKGROUND_TILE(sBackgroundTilesData[i].eType, vU,vV)
ARCADE_DRAW_PIXELSPACE_SPRITE_WITH_UV(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(fPlayerX, cfBASE_SCREEN_HEIGHT/2+fShake), INIT_VECTOR_2D(sBackgroundTilesData[i].fSpriteWidth, cfTWS_BACKGROUND_TILE_HEIGHT),vU,vV, 0, sTWSData.rgbaSprite)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(fPlayerX, cfBASE_SCREEN_HEIGHT/2+fShake), INIT_VECTOR_2D(sBackgroundTilesData[i].fSpriteWidth, cfTWS_BACKGROUND_TILE_HEIGHT), 0, sTWSData.rgbaSprite)
ENDIF
ENDIF
IF sBackgroundTilesData[i].eType = TWS_BG_TL_1_CLIFF
tl23BackgroundSprite = "cave_rooms4_bridge"
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(fPlayerX, cfTWS_SC_BRIDGE_OFFSET+fShake), INIT_VECTOR_2D(cfTWS_SC_BRIDGE_WIDTH, cfTWS_SC_BRIDGE_HEIGHT), 0, sTWSData.rgbaSprite)
ENDIF
ENDFOR
ENDPROC
PROC TWS_DRAW_FOREGROUND()
TEXT_LABEL_31 tl23BackgroundSprite
TEXT_LABEL_31 tl23BackgroundDictionary
SWITCH sTWSData.eCurrentLevel
CASE TWS_FOREST_INTRO
CASE TWS_FOREST
CASE TWS_SWAMP
tl23BackgroundDictionary = "MPWizardsSleeveBackgrounds12"
BREAK
CASE TWS_CAVES
CASE TWS_CASTLE
CASE TWS_CASTLE_OUTRO
tl23BackgroundDictionary = "MPWizardsSleeveBackgrounds34"
BREAK
ENDSWITCH
FLOAT fShake = 0.0
IF TWS_IS_CAMERA_SHAKE_ACTIVE()
fShake = SIN(TO_FLOAT(GET_GAME_TIMER()*15))
ENDIF
// Foreground
INT i
FOR i = 0 TO iCurrentForegroundTileToAdd - 1
SWITCH sForegroundTilesData[i].eType
CASE TWS_FG_TL_1_INTRO
tl23BackgroundSprite = "cave_foreground1 - start"
BREAK
CASE TWS_FG_TL_1_COL1
tl23BackgroundSprite = "cave_foreground2"
BREAK
CASE TWS_FG_TL_1_COL2
tl23BackgroundSprite = "cave_foreground3"
BREAK
CASE TWS_FG_TL_1_STALAGMITE1
tl23BackgroundSprite = "cave_foreground4"
BREAK
CASE TWS_FG_TL_1_STALAGMITE2
tl23BackgroundSprite = "cave_foreground5"
BREAK
CASE TWS_FG_TL_1_STALAGMITE3
tl23BackgroundSprite = "cave_foreground6"
BREAK
CASE TWS_FG_TL_1_BOSS
tl23BackgroundSprite = "cave_foreground7 - boss"
BREAK
CASE TWS_FG_TL_2_GRASS
tl23BackgroundSprite = "swamp_fore_grass"
BREAK
CASE TWS_FG_TL_2_PIKE
tl23BackgroundSprite = "swamp_fore_pike"
BREAK
CASE TWS_FG_TL_2_ROOT
tl23BackgroundSprite = "swamp_fore_rootskulls"
BREAK
CASE TWS_FG_TL_2_VINES_1
tl23BackgroundSprite = "swamp_fore_topvines_1"
BREAK
CASE TWS_FG_TL_2_VINES_2
tl23BackgroundSprite = "swamp_fore_topvines_2"
BREAK
CASE TWS_FG_TL_2_VINES_3
tl23BackgroundSprite = "swamp_fore_topvines_3"
BREAK
CASE TWS_FG_TL_3_INTRO
tl23BackgroundSprite = "castle_foreground_enterance"
BREAK
CASE TWS_FG_TL_3_GARGOYLE_1
tl23BackgroundSprite = "castle_foregrounds1"
BREAK
CASE TWS_FG_TL_3_GARGOYLE_2
tl23BackgroundSprite = "castle_foregrounds2"
BREAK
CASE TWS_FG_TL_3_COLUMN
tl23BackgroundSprite = "castle_foregrounds3"
BREAK
CASE TWS_FG_TL_3_CANDLES_1
tl23BackgroundSprite = "castle_foregrounds4"
BREAK
CASE TWS_FG_TL_3_CANDLES_2
tl23BackgroundSprite = "castle_foregrounds5"
BREAK
CASE TWS_FG_TL_4_BLUE_FLOWERS
tl23BackgroundSprite = "forest_foreground1"
BREAK
CASE TWS_FG_TL_4_YELLOW_FLOWERS
tl23BackgroundSprite = "forest_foreground2"
BREAK
CASE TWS_FG_TL_4_MUSHROOMS
tl23BackgroundSprite = "forest_foreground3"
BREAK
CASE TWS_FG_TL_4_SHORT_GRASS
tl23BackgroundSprite = "forest_foreground4"
BREAK
CASE TWS_FG_TL_4_TALL_GRASS
tl23BackgroundSprite = "forest_foreground5"
BREAK
ENDSWITCH
FLOAT fPlayerX
IF sPlayerData.vSpritePos.x >= sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos OR sTWSData.eLevelStage >= TWS_LEVEL_BOSS_FIGHT AND sPlayerData.iLifes > 0
fPlayerX = sForegroundTilesData[i].vSpritePos.X + TWS_GET_OFFSET_TO_PLAYER(2.0, sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos)
ELIF sPlayerData.ePlayerState = TWS_INTRO
fPlayerX = sForegroundTilesData[i].vSpritePos.X*2.0
ELIF sTWSData.bLockedScreen
fPlayerX = sForegroundTilesData[i].vSpritePos.X + TWS_GET_OFFSET_TO_PLAYER(2.0, sTWSData.fLockedScreenPos)
ELSE
fPlayerX = sForegroundTilesData[i].vSpritePos.X + TWS_GET_OFFSET_TO_PLAYER(2.0)
ENDIF
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23BackgroundDictionary, tl23BackgroundSprite, INIT_VECTOR_2D(fPlayerX, sForegroundTilesData[i].vSpritePos.Y+fShake), MULTIPLY_VECTOR_2D(sForegroundTilesData[i].vSpriteSize, cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
ENDFOR
ENDPROC
PROC TWS_DRAW_FADE()
// Fade
IF sTWSData.eLevelStage = TWS_LEVEL_LEADERBOARD OR sTWSData.eLevelStage = TWS_LEVEL_DEAD
IF sTWSData.rgbaFade.iA < 100
sTWSData.rgbaFade.iA += 4
ENDIF
ELSE
IF TWS_IS_SCREEN_FADING_IN()
sTWSData.rgbaFade.iA -= 4
CDEBUG3LN(DEBUG_MINIGAME, "[TWS_ARCADE] [GD] : FADE: ",sTWSData.rgbaFade.iA)
ELIF TWS_IS_SCREEN_FADING_OUT()
sTWSData.rgbaFade.iA += 4
CDEBUG3LN(DEBUG_MINIGAME, "[TWS_ARCADE] [GD] : FADE: ",sTWSData.rgbaFade.iA)
ENDIF
ENDIF
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaFade)
ENDPROC
PROC TWS_DRAW_INTEGER(INT iValue, INT iDigits, VECTOR_2D vCenter, RGBA_COLOUR_STRUCT rgba, VECTOR_2D vSize, VECTOR_2D vSeparation, STRING sTextureName, STRING sDictionary)
VECTOR_2D vCharCenter = vCenter
BOOL bZero = (iValue = 0)
INT iChar
IF iDigits = 0
INT currentValue
currentValue = iValue
WHILE currentValue > 0 OR bZero
bZero = FALSE
vCharCenter.x = vCenter.x + vSeparation.x * (iDigits-1)/2.0 - vSeparation.x * iChar
TEXT_LABEL_63 tlTextureName = sTextureName
tlTextureName += currentValue % 10
currentValue /= 10
ARCADE_DRAW_PIXELSPACE_SPRITE(sDictionary, tlTextureName, vCharCenter, vSize, 0.0, rgba)
iChar++
ENDWHILE
ELSE
REPEAT iDigits iChar
vCharCenter.x = vCenter.x + vSeparation.x * (iDigits-1)/2.0 - vSeparation.x * iChar
TEXT_LABEL_63 tlTextureName = sTextureName
tlTextureName += (iValue / ROUND(POW(10.0,to_float(iChar)))) % 10
ARCADE_DRAW_PIXELSPACE_SPRITE(sDictionary, tlTextureName,vCharCenter,vSize,0.0, rgba)
ENDREPEAT
ENDIF
ENDPROC
PROC TWS_DRAW_HUD()
TEXT_LABEL_23 tl23Sprite
VECTOR_2D vScreenCenter = INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2)
VECTOR_2D vLeftCorner = SUBTRACT_VECTOR_2D(vScreenCenter, INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH/2, cfGAME_SCREEN_HEIGHT/2))
VECTOR_2D vMidTop = SUBTRACT_VECTOR_2D(vScreenCenter, INIT_VECTOR_2D(0, cfGAME_SCREEN_HEIGHT/2))
VECTOR_2D vRightCorner = SUBTRACT_VECTOR_2D(vScreenCenter, INIT_VECTOR_2D(-cfGAME_SCREEN_WIDTH/2, cfGAME_SCREEN_HEIGHT/2))
TWS_DRAW_FADE()
IF sTWSData.eLevelStage = TWS_LEVEL_DEAD
// Game over
IF sHUDData[TWS_HUD_GAMEOVER].bActive
tl23Sprite = "gameth_over"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, sHUDData[TWS_HUD_GAMEOVER].vSpritePos, MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_START_WIDTH, cfTWS_HUD_START_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
ENDIF
ELIF NOT sTWSData.bHUDIsHidden
// Portrait
vScreenCenter = SUBTRACT_VECTOR_2D(vScreenCenter, INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH/2, cfGAME_SCREEN_HEIGHT/2))
IF sTWSData.bIsHardCoreMode
tl23Sprite = "grog_"
ELSE
tl23Sprite = ""
ENDIF
tl23Sprite += "portrait_state"
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_"
IF sPlayerData.fHealth < 0.35
tl23Sprite += "3"
ELIF sPlayerData.fHealth < 0.65
tl23Sprite += "2"
ELSE
tl23Sprite += "1"
ENDIF
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vLeftCorner,INIT_VECTOR_2D(cfTWS_HUD_PORTRAIT_X, cfTWS_HUD_PORTRAIT_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_PORTRAIT_WIDTH, cfTWS_HUD_PORTRAIT_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
// Meter Frames
tl23Sprite = "meter_fill_hp"
FLOAT fBarSize = cfTWS_HUD_BAR_WIDTH * sPlayerData.fHealth
FLOAT fOffset = (cfTWS_HUD_BAR_WIDTH - fBarSize)/2
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vLeftCorner, INIT_VECTOR_2D(cfTWS_HUD_HP_X - fOffset*cfTWS_RESCALE_FACTOR, cfTWS_HUD_HP_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(fBarSize, cfTWS_HUD_BAR_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
tl23Sprite = "meter_fill_mp"
fBarSize = cfTWS_HUD_BAR_WIDTH * sPlayerData.fMagic
fOffset = (cfTWS_HUD_BAR_WIDTH - fBarSize)/2
IF sTWSData.bIsHardCoreMode OR (sPlayerData.fMagic < 1.0 OR sPlayerData.iLevel >= 3 OR (sPlayerData.iLevel < 3 AND sPlayerData.fMagic >= 1.0 AND SIN(GET_GAME_TIMER()/0.8) > 0))
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vLeftCorner, INIT_VECTOR_2D(cfTWS_HUD_MP_X - fOffset*cfTWS_RESCALE_FACTOR, cfTWS_HUD_MP_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(fBarSize, cfTWS_HUD_BAR_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
ENDIF
// Hi (letters)
tl23Sprite = "hi_score"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vRightCorner, INIT_VECTOR_2D(cfTWS_HUD_HI_X, cfTWS_HUD_HI_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_HI_WIDTH, cfTWS_HUD_HI_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
// Score
TWS_DRAW_INTEGER(sPlayerData.iScore, 9, INIT_VECTOR_2D(cfTWS_HUD_SCORE_X, cfTWS_HUD_SCORE_Y), sTWSData.rgbaSprite, INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH, cfTWS_HUD_SCORE_HEIGHT), INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH*0.8, cfTWS_HUD_SCORE_HEIGHT*1.1), "hud_numbers_", "MPWizardsSleeveHUDAndScreen")
// Hi Score
TWS_DRAW_INTEGER(sPlayerData.iHighestScore, 9, INIT_VECTOR_2D(cfTWS_HUD_HI_SCORE_X, cfTWS_HUD_HI_SCORE_Y), sTWSData.rgbaSprite, INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH, cfTWS_HUD_SCORE_HEIGHT), INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH*0.8, cfTWS_HUD_SCORE_HEIGHT*1.1), "hud_numbers_", "MPWizardsSleeveHUDAndScreen")
IF sTWSData.bIsHardCoreMode
tl23Sprite = "grog_meters_frames"
ELSE
tl23Sprite = "meter_frames"
ENDIF
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vLeftCorner,INIT_VECTOR_2D(cfTWS_HUD_METER_X, cfTWS_HUD_METER_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_METER_WIDTH, cfTWS_HUD_METER_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
tl23Sprite = "hud_numbers_"
tl23Sprite += sPlayerData.iLifes
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vLeftCorner,INIT_VECTOR_2D(cfTWS_HUD_LIFES_NUMBER_1_X, cfTWS_HUD_LIFES_NUMBER_1_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_SMALL_NUMBER_WIDTH, cfTWS_HUD_SMALL_NUMBER_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
tl23Sprite = "hud_numbers_"
tl23Sprite += sPlayerData.iLevel
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vLeftCorner,INIT_VECTOR_2D(cfTWS_HUD_LEVEL_NUMBER_1_X, cfTWS_HUD_LEVEL_NUMBER_1_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_SMALL_NUMBER_WIDTH, cfTWS_HUD_SMALL_NUMBER_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
// Boss Health
IF sTWSData.eLevelStage = TWS_LEVEL_BOSS_FIGHT
tl23Sprite = "boss_health_frame"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vMidTop, INIT_VECTOR_2D(cfTWS_HUD_BOSS_METER_X*cfTWS_RESCALE_FACTOR, cfTWS_HUD_BOSS_METER_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_BOSS_METER_WIDTH, cfTWS_HUD_BOSS_METER_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
tl23Sprite = "meter_fill_hp"
fBarSize = cfTWS_HUD_BOSS_BAR_WIDTH * sEnemyData[sTWSData.iBossEnemyIndex].fHealth
fOffset = (cfTWS_HUD_BOSS_BAR_WIDTH - fBarSize)/2
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, ADD_VECTOR_2D(vMidTop, INIT_VECTOR_2D(cfTWS_HUD_BOSS_HP_X - fOffset*cfTWS_RESCALE_FACTOR, cfTWS_HUD_BOSS_HP_Y)), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(fBarSize, cfTWS_HUD_BOSS_BAR_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
ENDIF
// GO Arrow
IF sHUDData[TWS_HUD_GO_ARROW].bActive AND sHUDData[TWS_HUD_GO_ARROW].bRendering
tl23Sprite = "GO_arrow"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/12*9, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfTWS_HUD_GO_ARROW_WIDTH, cfTWS_HUD_GO_ARROW_HEIGHT), 0, sTWSData.rgbaSprite)
ENDIF
// Level start
IF sHUDData[TWS_HUD_START].bActive
tl23Sprite = "text_stage_start"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, sHUDData[TWS_HUD_START].vSpritePos, MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_START_WIDTH, cfTWS_HUD_START_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
ENDIF
// Level end
IF sHUDData[TWS_HUD_END].bActive
tl23Sprite = "text_stage_complete"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, sHUDData[TWS_HUD_END].vSpritePos, MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_END_WIDTH, cfTWS_HUD_END_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
tl23Sprite = "score_totals1"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, INIT_VECTOR_2D(cfTWS_HUD_HEALTH_SCORE_X, cfTWS_HUD_HEALTH_SCORE_Y), INIT_VECTOR_2D(cfTWS_HUD_SCORE_FINAL_WIDTH, cfTWS_HUD_SCORE_FINAL_HEIGHT), 0, sTWSData.rgbaSprite)
IF sTWSData.iHealthPoints > 0
TWS_DRAW_INTEGER(sTWSData.iHealthPoints, 9, INIT_VECTOR_2D(cfTWS_HUD_HEALTH_SCORE_NUMBER_X, cfTWS_HUD_HEALTH_SCORE_NUMBER_Y), sTWSData.rgbaSprite, INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH, cfTWS_HUD_SCORE_HEIGHT), INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH*0.8, cfTWS_HUD_SCORE_HEIGHT*1.1), "hud_numbers_", "MPWizardsSleeveHUDAndScreen")
ELSE
TWS_DRAW_INTEGER(0, 9, INIT_VECTOR_2D(cfTWS_HUD_HEALTH_SCORE_NUMBER_X, cfTWS_HUD_HEALTH_SCORE_NUMBER_Y), sTWSData.rgbaSprite, INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH, cfTWS_HUD_SCORE_HEIGHT), INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH*0.8, cfTWS_HUD_SCORE_HEIGHT*1.1), "hud_numbers_", "MPWizardsSleeveHUDAndScreen")
ENDIF
tl23Sprite = "score_totals2"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, INIT_VECTOR_2D(cfTWS_HUD_LIVES_SCORE_X, cfTWS_HUD_LIVES_SCORE_Y), INIT_VECTOR_2D(cfTWS_HUD_SCORE_FINAL_WIDTH, cfTWS_HUD_SCORE_FINAL_HEIGHT), 0, sTWSData.rgbaSprite)
IF sTWSData.iLivesPoints > 0
TWS_DRAW_INTEGER(sTWSData.iLivesPoints, 9, INIT_VECTOR_2D(cfTWS_HUD_LIVES_SCORE_NUMBER_X, cfTWS_HUD_LIVES_SCORE_NUMBER_Y), sTWSData.rgbaSprite, INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH, cfTWS_HUD_SCORE_HEIGHT), INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH*0.8, cfTWS_HUD_SCORE_HEIGHT*1.1), "hud_numbers_", "MPWizardsSleeveHUDAndScreen")
ELSE
TWS_DRAW_INTEGER(0, 9, INIT_VECTOR_2D(cfTWS_HUD_LIVES_SCORE_NUMBER_X, cfTWS_HUD_LIVES_SCORE_NUMBER_Y), sTWSData.rgbaSprite, INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH, cfTWS_HUD_SCORE_HEIGHT), INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH*0.8, cfTWS_HUD_SCORE_HEIGHT*1.1), "hud_numbers_", "MPWizardsSleeveHUDAndScreen")
ENDIF
tl23Sprite = "score_totals3"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, INIT_VECTOR_2D(cfTWS_HUD_TOTAL_SCORE_X, cfTWS_HUD_TOTAL_SCORE_Y), INIT_VECTOR_2D(cfTWS_HUD_SCORE_FINAL_WIDTH, cfTWS_HUD_SCORE_FINAL_HEIGHT), 0, sTWSData.rgbaSprite)
TWS_DRAW_INTEGER(sPlayerData.iScore, 9, INIT_VECTOR_2D(cfTWS_HUD_TOTAL_SCORE_NUMBER_X, cfTWS_HUD_TOTAL_SCORE_NUMBER_Y), sTWSData.rgbaSprite, INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH, cfTWS_HUD_SCORE_HEIGHT), INIT_VECTOR_2D(cfTWS_HUD_SCORE_WIDTH*0.8, cfTWS_HUD_SCORE_HEIGHT*1.1), "hud_numbers_", "MPWizardsSleeveHUDAndScreen")
ENDIF
ENDIF
// Dialogue Frame
IF sHUDData[TWS_HUD_DIALOGUE_FRAME].bRendering
tl23Sprite = "dialog_frame"
tl23Sprite += (sHUDData[TWS_HUD_DIALOGUE_FRAME].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, sHUDData[TWS_HUD_DIALOGUE_FRAME].vSpritePos, MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_DIALOGUE_FRAME_WIDTH, cfTWS_HUD_DIALOGUE_FRAME_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
IF sHUDData[TWS_HUD_DIALOGUE_FRAME].iSpriteBlastAnimFrame >= ciTWS_DIALOGUE_FRAME_ANIM_FRAMES -1 AND sHUDData[TWS_HUD_DIALOGUE_FRAME].bActive
IF sTWSData.iCurrentDialogue > 9
tl23Sprite = "DIALOG_TEXT_000"
tl23Sprite += sTWSData.iCurrentDialogue
ELSE
tl23Sprite = "DIALOG_TEXT_0000"
tl23Sprite += sTWSData.iCurrentDialogue
ENDIF
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, sHUDData[TWS_HUD_DIALOGUE_FRAME].vSpritePos, MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_DIALOGUE_FRAME_WIDTH, cfTWS_HUD_DIALOGUE_FRAME_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
ENDIF
ENDIF
// CHEST
IF sPlayerData.ePlayerState = TWS_EVOLVING_3
tl23Sprite = "chest_rip_lvl"
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "-"
tl23Sprite += (sPlayerData.iLevel+1)
tl23Sprite += "_"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen2", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ENDIF
ENDPROC
PROC TWS_DRAW_TRAP(INT i)
TEXT_LABEL_23 tl23Sprite
FLOAT fFactor = cfTWS_RESCALE_FACTOR
FLOAT fShake = 0.0
IF TWS_IS_CAMERA_SHAKE_ACTIVE()
fShake = SIN(TO_FLOAT(GET_GAME_TIMER()*10))*20
ENDIF
IF sTrapsData[i].bIsActive
SWITCH sTrapsData[i].eType
CASE TWS_TRAP_STALAGTITE
IF sTrapsData[i].vSpritePos2.y < sTrapsData[i].vSpritePos.y - sTrapsData[i].vSpriteSize.y
tl23Sprite = "fx_item_small_shadow"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl23Sprite, INIT_VECTOR_2D(sTrapsData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER() ,sTrapsData[i].vSpritePos.y + fShake), INIT_VECTOR_2D(cfTWS_FX_SHADOW_SMALL_WIDTH*fFactor, cfTWS_FX_SHADOW_SMALL_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
tl23Sprite = "cave_stalactite1"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveBackgrounds34", tl23Sprite, INIT_VECTOR_2D(sTrapsData[i].vSpritePos2.x + TWS_GET_OFFSET_TO_PLAYER() ,sTrapsData[i].vSpritePos2.y + fShake), MULTIPLY_VECTOR_2D(sTrapsData[i].vSpriteSize, fFactor), 0, sTWSData.rgbaSprite)
ELSE
tl23Sprite = "cave_stalactite2"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveBackgrounds34", tl23Sprite, INIT_VECTOR_2D(sTrapsData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER() ,sTrapsData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(sTrapsData[i].vSpriteSize, fFactor), 0, sTWSData.rgbaSprite)
ENDIF
BREAK
CASE TWS_TRAP_HOLE
tl23Sprite = "cave_hole"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveBackgrounds34", tl23Sprite, INIT_VECTOR_2D(sTrapsData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER() ,sTrapsData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(sTrapsData[i].vSpriteSize, fFactor), 0, sTWSData.rgbaSprite)
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC TWS_DRAW_ITEM(INT i)
TEXT_LABEL_23 tl23Sprite
FLOAT fFactor = cfTWS_RESCALE_FACTOR
FLOAT fShake = 0.0
IF TWS_IS_CAMERA_SHAKE_ACTIVE()
fShake = SIN(TO_FLOAT(GET_GAME_TIMER()*10))*20
ENDIF
IF sItemData[i].bIsActive
IF NOT sItemData[i].bIsHit
IF sItemData[i].eItemType != TWS_ITEM_GOLD_1
AND sItemData[i].eItemType != TWS_ITEM_GOLD_2
AND sItemData[i].eItemType != TWS_ITEM_GOLD_3
AND sItemData[i].eItemType != TWS_ITEM_GOLD_4
tl23Sprite = "fx_item_small_shadow"
IF sItemData[i].bFalling
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl23Sprite, INIT_VECTOR_2D(sItemData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER() ,sItemData[i].vSpriteFallPos.y + (sItemData[i].vSpriteSize.y)) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_SMALL_WIDTH*fFactor, cfTWS_FX_SHADOW_SMALL_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl23Sprite, INIT_VECTOR_2D(sItemData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER() ,sItemData[i].vSpritePos.y + (sItemData[i].vSpriteSize.y)) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_SMALL_WIDTH*fFactor, cfTWS_FX_SHADOW_SMALL_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ENDIF
ENDIF
SWITCH sItemData[i].eItemType
CASE TWS_ITEM_HP_SMA
tl23Sprite = "item_hp_small"
BREAK
CASE TWS_ITEM_HP_MED
tl23Sprite = "item_hp_medium"
BREAK
CASE TWS_ITEM_HP_LAR
tl23Sprite = "item_hp_large"
BREAK
CASE TWS_ITEM_MP_SMA
tl23Sprite = "item_mp_small"
BREAK
CASE TWS_ITEM_MP_MED
tl23Sprite = "item_mp_medium"
BREAK
CASE TWS_ITEM_MP_LAR
tl23Sprite = "item_mp_large"
BREAK
CASE TWS_ITEM_GOLD_1
tl23Sprite = "item_gold_1"
BREAK
CASE TWS_ITEM_GOLD_2
tl23Sprite = "item_gold_2"
BREAK
CASE TWS_ITEM_GOLD_3
tl23Sprite = "item_gold_3"
BREAK
CASE TWS_ITEM_GOLD_4
tl23Sprite = "item_gold_4"
BREAK
CASE TWS_ITEM_1UP
tl23Sprite = "item_1up"
BREAK
ENDSWITCH
IF ABSF(sItemData[i].vSpritePos.X - sPlayerData.vSpritePos.x) < cfBASE_SCREEN_WIDTH
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl23Sprite, INIT_VECTOR_2D(sItemData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER() ,sItemData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(sItemData[i].vSpriteSize, fFactor), 0, sTWSData.rgbaSprite)
ENDIF
ENDIF
ENDIF
ENDPROC
PROC TWS_DRAW_PLAYER()
TEXT_LABEL_23 tl23Sprite
TEXT_LABEL_23 tl23Dictionary
FLOAT fFactor = cfTWS_RESCALE_FACTOR
VECTOR_2D fOffset
IF sPlayerData.bIsInvincible AND SIN(GET_GAME_TIMER()/0.8) > 0.0
EXIT
ENDIF
fOffset = sPlayerData.vSpriteOffset
IF sTWSData.bIsHardCoreMode
tl23Sprite = "grog_s"
tl23Dictionary = "MPWizardsSleeveGrog"
ELSE
tl23Sprite = "thog_s"
IF sPlayerData.iLevel = 1
OR sPlayerData.iLevel = 2
tl23Dictionary = "MPWizardsSleeveThog12"
ELIF sPlayerData.iLevel = 3
tl23Dictionary = "MPWizardsSleeveThog3NPC"
ENDIF
ENDIF
// Player
SWITCH sPlayerData.ePlayerState
CASE TWS_IDLE
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_idle"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_INTRO
CASE TWS_WALK
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_walk_"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_EVOLVING
CASE TWS_EVOLVING_6
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_levelup_"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_EVOLVING_2
CASE TWS_EVOLVING_5
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_levelup_4"
BREAK
CASE TWS_EVOLVING_3
CASE TWS_EVOLVING_4
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_levelup_4"
BREAK
CASE TWS_SUPERATTACK
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_levelup_"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_ATTACK
CASE TWS_ATTACK_DOUBLE
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_attack_"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_ATTACK_LOW
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_kick"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_CHARGE
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_dash"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_JUMP_ATTACK
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_jump_attack_"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_JUMP_ATTACK_DESCEND
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_jump_attack_3"
BREAK
CASE TWS_JUMP_START
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_jump_1"
BREAK
CASE TWS_JUMP_ASCEND
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_jump_2"
BREAK
CASE TWS_JUMP_CREST
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_jump_3"
BREAK
CASE TWS_JUMP_DESCEND
CASE TWS_FALL_INFINITE
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_jump_4"
BREAK
CASE TWS_JUMP_END
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_jump_5"
BREAK
CASE TWS_FALL_HOLE_1
IF sTWSData.bIsHardCoreMode
tl23Sprite = "grog_no_hole_state"
ELSE
tl23Sprite = "no_hole_state"
ENDIF
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
CASE TWS_FALL_HOLE_2
EXIT
CASE TWS_STUN
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_hurt_stun"
IF SIN(GET_GAME_TIMER()/0.3) > 0.0
fOffset.x -= cfTWS_ENEMY_HIT_OFFSET
ELSE
fOffset.x += cfTWS_ENEMY_HIT_OFFSET
ENDIF
BREAK
CASE TWS_FALL
CASE TWS_FALL_HIGH
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_hurt_fall_1"
BREAK
CASE TWS_FALL_2
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_hurt_fall_2"
BREAK
CASE TWS_FLAT
CASE TWS_DEAD
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_hurt_flat_1"
BREAK
CASE TWS_GETTING_UP
tl23Sprite += sPlayerData.iLevel
tl23Sprite += "_hurt_getup_"
tl23Sprite += (sPlayerData.iSpriteAnimFrame + 1)
BREAK
ENDSWITCH
// Shadow
//
IF sPlayerData.ePlayerState != TWS_FALL_INFINITE AND sPlayerData.ePlayerState != TWS_FALL_HOLE_1 AND sPlayerData.ePlayerState != TWS_FALL_HOLE_2
IF sPlayerData.ePlayerState = TWS_INTRO OR sPlayerData.vSpritePos.x < sBackgroundTilesData[0].fSpritePos
IF sPlayerData.bIsJumping
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(sPlayerData.vSpritePos.x + TWS_GET_PLAYER_SHADOW_X_OFFSET(), sPlayerData.vInitialJumpPos.y + (sPlayerData.vSpriteSize.y) + fOffset.y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(sPlayerData.vSpritePos.x + TWS_GET_PLAYER_SHADOW_X_OFFSET(), sPlayerData.vSpritePos.y + (sPlayerData.vSpriteSize.y) + fOffset.y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ENDIF
ELIF sPlayerData.vSpritePos.x >= sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos OR sTWSData.eLevelStage >= TWS_LEVEL_BOSS_FIGHT AND sPlayerData.iLifes > 0
FLOAT fShadowPosX = cfBASE_SCREEN_WIDTH/2 + (sPlayerData.vSpritePos.x - sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos)
IF sPlayerData.bIsJumping
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fShadowPosX + TWS_GET_PLAYER_SHADOW_X_OFFSET() , sPlayerData.vInitialJumpPos.y + (sPlayerData.vSpriteSize.y) + fOffset.y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fShadowPosX + TWS_GET_PLAYER_SHADOW_X_OFFSET() , sPlayerData.vSpritePos.y + (sPlayerData.vSpriteSize.y) + fOffset.y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ENDIF
ELIF sTWSData.bLockedScreen
FLOAT fShadowPosX = cfBASE_SCREEN_WIDTH/2 + (sPlayerData.vSpritePos.x - sTWSData.fLockedScreenPos)
IF sPlayerData.bIsJumping
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fShadowPosX + TWS_GET_PLAYER_SHADOW_X_OFFSET(), sPlayerData.vInitialJumpPos.y + (sPlayerData.vSpriteSize.y) + fOffset.y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fShadowPosX + TWS_GET_PLAYER_SHADOW_X_OFFSET() , sPlayerData.vSpritePos.y + (sPlayerData.vSpriteSize.y) + fOffset.Y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ENDIF
ELSE
IF sPlayerData.bIsJumping
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2 + TWS_GET_PLAYER_SHADOW_X_OFFSET(), sPlayerData.vInitialJumpPos.y + (sPlayerData.vSpriteSize.y) + fOffset.Y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2 + TWS_GET_PLAYER_SHADOW_X_OFFSET(), sPlayerData.vSpritePos.y + (sPlayerData.vSpriteSize.y) + fOffset.Y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ENDIF
ENDIF
ENDIF
// Character
//
FLOAT fPlayerX
IF sPlayerData.ePlayerState != TWS_INTRO AND sPlayerData.vSpritePos.x > cfBASE_SCREEN_WIDTH/2
AND sPlayerData.vSpritePos.x < sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos
AND sTWSData.eLevelStage < TWS_LEVEL_BOSS_FIGHT
IF sTWSData.bLockedScreen
fPlayerX = cfBASE_SCREEN_WIDTH/2 + (sPlayerData.vSpritePos.x - sTWSData.fLockedScreenPos)
ELSE
fPlayerX = cfBASE_SCREEN_WIDTH/2
ENDIF
ELIF sPlayerData.vSpritePos.x >= sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos OR sTWSData.eLevelStage >= TWS_LEVEL_BOSS_FIGHT AND sPlayerData.iLifes > 0
fPlayerX = cfBASE_SCREEN_WIDTH/2 + (sPlayerData.vSpritePos.x - sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos)
ELSE
fPlayerX = sPlayerData.vSpritePos.x
ENDIF
// CDEBUG3LN(DEBUG_MINIGAME, "[TWS_ARCADE] [GD] : Rendering Player: ",fPlayerX)
IF sPlayerData.bFacingLeft
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23Dictionary, tl23Sprite, INIT_VECTOR_2D(fPlayerX - fOffset.X, sPlayerData.vSpritePos.y + fOffset.Y), INIT_VECTOR_2D(-sPlayerData.vSpriteSize.X*fFactor, sPlayerData.vSpriteSize.Y*fFactor), 0, sTWSData.rgbaSprite)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23Dictionary, tl23Sprite, INIT_VECTOR_2D(fPlayerX + fOffset.X, sPlayerData.vSpritePos.y + fOffset.Y), INIT_VECTOR_2D(sPlayerData.vSpriteSize.X*fFactor, sPlayerData.vSpriteSize.Y*fFactor), 0, sTWSData.rgbaSprite)
ENDIF
ENDPROC
PROC TWS_DRAW_FX(INT i)
TEXT_LABEL_63 tl31Sprite
FLOAT fShake, fFactor = cfTWS_RESCALE_FACTOR
IF TWS_IS_CAMERA_SHAKE_ACTIVE()
fShake = SIN(TO_FLOAT(GET_GAME_TIMER()*10))*20
ENDIF
IF sFXData[i].bActive
SWITCH sFXData[i].eType
CASE TWS_FX_SWORD_LIGHTNING
tl31Sprite = "fx_sword_lightning"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y - 20.0 + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_SWORD_LIGHTNING_WIDTH, cfTWS_FX_SWORD_LIGHTNING_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_SUPERATTACK_EXPLOSION
tl31Sprite = "fx_magic_explosion"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_SUPERATTACK_WIDTH, cfTWS_FX_SUPERATTACK_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_PICKUP
tl31Sprite = "fx_pickup"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER() ,sFXData[i].vSpritePos.y), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_ITEM_WIDTH, cfTWS_FX_ITEM_HEIGHT), fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_MAGIC_COLUMN
tl31Sprite = "fx_pillar"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_WIZARD_PILLAR_WIDTH, cfTWS_FX_WIZARD_PILLAR_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_MAGIC_FIRE
tl31Sprite = "fx_flames"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_WIZARD_FIRE_WIDTH, cfTWS_FX_WIZARD_FIRE_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_SWORD
tl31Sprite = "forest_boss_slamblade"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_KNIGHT_SWORD_WIDTH, cfTWS_FX_KNIGHT_SWORD_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_SWORD_DROP
tl31Sprite = "forest_boss_sword_drop"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveEnemies1a", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_BOSS_KNIGHT_SWORD_WIDTH, cfTWS_BOSS_KNIGHT_SWORD_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_TRAP_SPEAR
tl31Sprite = "castle_trap_spear"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveBackgrounds34", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_TRAP_SPEAR_WIDTH, cfTWS_TRAP_SPEAR_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_GROG_BUBBLE
tl31Sprite = "grog_bubble"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveGrog", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_GROG_WIDTH, cfTWS_FX_GROG_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_HELP
IF SIN(GET_GAME_TIMER()/0.9) > 0.0
tl31Sprite = "help"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_HELP_WIDTH, cfTWS_FX_HELP_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
ENDIF
BREAK
CASE TWS_FX_COD_DROP
tl31Sprite = "forest_boss_cod_peice"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveEnemies1a", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_BOSS_KNIGHT_COD_WIDTH, cfTWS_BOSS_KNIGHT_COD_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_SMALL_HIT
tl31Sprite = "fx_hit_small_"
IF sPlayerData.iLevel = 2
tl31Sprite += "blue"
ENDIF
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_SMALL_HIT_WIDTH, cfTWS_FX_SMALL_HIT_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_LARGE_HIT
tl31Sprite = "fx_hit_large"
IF sPlayerData.iLevel = 2
tl31Sprite += "_blue"
ELIF sPlayerData.iLevel = 3
tl31Sprite += "_green"
ENDIF
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_LARGE_HIT_WIDTH, cfTWS_FX_LARGE_HIT_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_VENOM_HIT
tl31Sprite = "fx_blood_1_"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_VENOM_HIT_WIDTH, cfTWS_FX_VENOM_HIT_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_BLOOD_HIT
tl31Sprite = "fx_blood_red_"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_VENOM_HIT_WIDTH, cfTWS_FX_VENOM_HIT_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_CLOTHES
IF SIN(GET_GAME_TIMER()/0.4) > 0.0
tl31Sprite = "ripped_clothes"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_RIPPED_CLOTHES_WIDTH, cfTWS_FX_RIPPED_CLOTHES_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
ENDIF
BREAK
CASE TWS_FX_BOSS_SPIDER_SPIT
tl31Sprite = "fx_boss_spray_green"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_BOSS_SPIDER_SPIT_WIDTH, cfTWS_FX_BOSS_SPIDER_SPIT_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_ARROW_LEFT
tl31Sprite = "crossbow_arrow_1"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveEnemies1b", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_GRUNT_CROSSBOW_ARROW_WIDTH, cfTWS_GRUNT_CROSSBOW_ARROW_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_ARROW_RIGHT
tl31Sprite = "crossbow_arrow_1"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveEnemies1b", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(-cfTWS_GRUNT_CROSSBOW_ARROW_WIDTH, cfTWS_GRUNT_CROSSBOW_ARROW_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_FIREBALL_LEFT
tl31Sprite = "castle_castergrunt_fx_bolt"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_GRUNT_CASTER_FIREBALL_WIDTH, cfTWS_GRUNT_CASTER_FIREBALL_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_FIREBALL_RIGHT
tl31Sprite = "castle_castergrunt_fx_bolt"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(-cfTWS_GRUNT_CASTER_FIREBALL_WIDTH, cfTWS_GRUNT_CASTER_FIREBALL_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_COINS_LEFT
tl31Sprite = "forest_leprechaun_fx_coin_spread"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_LEPRECHAUN_COINS_WIDTH, cfTWS_LEPRECHAUN_COINS_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_COINS_RIGHT
tl31Sprite = "forest_leprechaun_fx_coin_spread"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(-cfTWS_LEPRECHAUN_COINS_WIDTH, cfTWS_LEPRECHAUN_COINS_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_FX_VENOM_PUDDLE
tl31Sprite = "cave_boss_poison_puddle_"
tl31Sprite += (sFXData[i].iSpriteBlastAnimFrame + 1)
CDEBUG3LN(DEBUG_MINIGAME, "[TWS_ARCADE] [GD] : Rendering FX: ",tl31Sprite)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", tl31Sprite, INIT_VECTOR_2D(sFXData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(), sFXData[i].vSpritePos.y + fShake), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_FX_BOSS_SPIDER_VENOM_WIDTH, cfTWS_FX_BOSS_SPIDER_VENOM_HEIGHT),fFactor), 0, sTWSData.rgbaSprite)
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC TWS_DRAW_NPC(INT i)
FLOAT fFactor = cfTWS_RESCALE_FACTOR
FLOAT fEnemyPosX
TEXT_LABEL_31 tl23Sprite
IF sNPCData[i].bIsActive
SWITCH sNPCData[i].eNPCType
CASE TWS_NPC_TWINS
tl23Sprite = "npc_swamp_2girls"
BREAK
CASE TWS_NPC_WOMAN
tl23Sprite = "npc_forest_girl"
BREAK
CASE TWS_NPC_VILLAGER
tl23Sprite = "npc_forest_villager"
BREAK
ENDSWITCH
IF sPlayerData.vSpritePos.x >= sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos OR sTWSData.eLevelStage >= TWS_LEVEL_BOSS_FIGHT AND sPlayerData.iLifes > 0
IF sNPCData[i].eNPCType = TWS_NPC_VILLAGER
fEnemyPosX = sNPCData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(1.0, sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fEnemyPosX, sNPCData[i].vSpritePos.y + sNPCData[i].vSpriteSize.Y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELSE
fEnemyPosX = sNPCData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(1.0, sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos + 50)
ENDIF
ELSE
fEnemyPosX = sNPCData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER()
IF sNPCData[i].eNPCType = TWS_NPC_VILLAGER
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fEnemyPosX, sNPCData[i].vSpritePos.y + sNPCData[i].vSpriteSize.Y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ENDIF
ENDIF
IF sNPCData[i].fHealth > 0.0
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveThog3NPC", tl23Sprite, INIT_VECTOR_2D(fEnemyPosX, sNPCData[i].vSpritePos.y), INIT_VECTOR_2D(sNPCData[i].vSpriteSize.X*fFactor, sNPCData[i].vSpriteSize.Y*fFactor), 0, sTWSData.rgbaSprite)
ENDIF
ENDIF
ENDPROC
PROC TWS_DRAW_ENEMY(INT i)
BOOL bFacingRight
FLOAT fFactor = cfTWS_RESCALE_FACTOR
FLOAT fEnemyPosX
VECTOR_2D vOffset
TEXT_LABEL_63 tl23Sprite, t123enemyType
TEXT_LABEL_63 tl23Dictionary
IF sEnemyData[i].bIsActive
vOffset = sEnemyData[i].vSpriteOffset
bFacingRight = FALSE
IF sEnemyData[i].vSpritePos.x < sPlayerData.vSpritePos.x AND sEnemyData[i].bIsActive
AND NOT (sEnemyData[i].eEnemyState = TWS_ENEMY_DEAD
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING
OR sEnemyData[i].eEnemyState = TWS_ENEMY_FLAT
OR sEnemyData[i].eEnemyState = TWS_ENEMY_FALL
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING_1
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING_2
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING_3
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING_4
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING_5
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING_6
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING_7
OR sEnemyData[i].eEnemyState = TWS_ENEMY_DYING_8
OR sEnemyData[i].eEnemyState = TWS_ENEMY_EXPLODING
OR sEnemyData[i].eEnemyType = TWS_ENEMY_SNAKE)
bFacingRight = TRUE
ENDIF
SWITCH sEnemyData[i].eEnemyType
CASE TWS_ENEMY_GRUNT
t123enemyType = "cave_grunt_"
tl23Dictionary = "MPWizardsSleeveEnemies3b"
BREAK
CASE TWS_ENEMY_GRUNT_SWORD
t123enemyType = "forest_swordgrunt_"
tl23Dictionary = "MPWizardsSleeveEnemies1b"
BREAK
CASE TWS_ENEMY_GRUNT_FIRESWORD
t123enemyType = "castle_swordgrunt_"
tl23Dictionary = "MPWizardsSleeveEnemies4b"
BREAK
CASE TWS_ENEMY_GRUNT_FIRESPEAR
t123enemyType = "castle_speargrunt_"
tl23Dictionary = "MPWizardsSleeveEnemies4b"
BREAK
CASE TWS_ENEMY_GRUNT_SPEAR
t123enemyType = "forest_speargrunt_"
tl23Dictionary = "MPWizardsSleeveEnemies1b"
BREAK
CASE TWS_ENEMY_GRUNT_CROSSBOW
t123enemyType = "forest_crossbowgrunt_"
tl23Dictionary = "MPWizardsSleeveEnemies1b"
BREAK
CASE TWS_ENEMY_GRUNT_CASTER
t123enemyType = "castle_castergrunt_"
tl23Dictionary = "MPWizardsSleeveEnemies4b"
BREAK
CASE TWS_ENEMY_BRUTE
t123enemyType = "cave_brute_"
tl23Dictionary = "MPWizardsSleeveEnemies3b"
BREAK
CASE TWS_ENEMY_BOULDER
t123enemyType = "castle_boulder"
tl23Dictionary = "MPWizardsSleeveEnemies4b"
BREAK
CASE TWS_ENEMY_BRUTE_AXE
t123enemyType = "swamp_brute_"
tl23Dictionary = "MPWizardsSleeveEnemies2"
BREAK
CASE TWS_ENEMY_BOSS_SPIDER
t123enemyType = "cave_boss_"
tl23Dictionary = "MPWizardsSleeveEnemies3a"
BREAK
CASE TWS_ENEMY_BOSS_AMAZON
t123enemyType = "swamp_boss_"
tl23Dictionary = "MPWizardsSleeveEnemies2"
BREAK
CASE TWS_ENEMY_BOSS_KNIGHT
CASE TWS_ENEMY_KNIGHT
t123enemyType = "forest_boss_"
tl23Dictionary = "MPWizardsSleeveEnemies1a"
BREAK
CASE TWS_ENEMY_BOSS_WIZARD
CASE TWS_ENEMY_FAKE_WIZARD
CASE TWS_ENEMY_DIALOGUE_WIZARD
t123enemyType = "boss_wizard_"
tl23Dictionary = "MPWizardsSleeveEnemies4a"
BREAK
CASE TWS_ENEMY_BAT
t123enemyType = "cave_bat_"
tl23Dictionary = "MPWizardsSleeveEnemies3a"
BREAK
CASE TWS_ENEMY_FAIRY
t123enemyType = "forest_fairy_"
tl23Dictionary = "MPWizardsSleeveEnemies1b"
BREAK
CASE TWS_ENEMY_LEPRECHAUN
t123enemyType = "forest_leprechaun_"
tl23Dictionary = "MPWizardsSleeveEnemies1b"
BREAK
CASE TWS_ENEMY_SPIDER
t123enemyType = "cave_spider_"
tl23Dictionary = "MPWizardsSleeveEnemies3a"
BREAK
CASE TWS_ENEMY_SLIME
t123enemyType = "swamp_slime_"
tl23Dictionary = "MPWizardsSleeveEnemies2"
BREAK
CASE TWS_ENEMY_SNAKE
t123enemyType = "swamp_snake_"
tl23Dictionary = "MPWizardsSleeveEnemies2"
BREAK
ENDSWITCH
SWITCH sEnemyData[i].eEnemyState
CASE TWS_ENEMY_INACTIVE
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_KNIGHT
OR sEnemyData[i].eEnemyType = TWS_ENEMY_KNIGHT
tl23Sprite = t123enemyType
tl23Sprite += "knee1"
ELSE
IF sEnemyData[i].eEnemyType = TWS_ENEMY_FAKE_WIZARD
tl23Sprite = "boss_wizard_doppelganger_idle"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_GRUNT_CASTER
tl23Sprite = "castle_castergrunt_idle-walk"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_SNAKE
tl23Sprite = "swamp_snake_idle-walk"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "idle"
ENDIF
IF sEnemyData[i].eEnemyType != TWS_ENEMY_BAT
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
ENDIF
BREAK
CASE TWS_ENEMY_IDLE
IF sEnemyData[i].eEnemyType = TWS_ENEMY_FAKE_WIZARD
tl23Sprite = "boss_wizard_doppelganger_idle"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_GRUNT_CASTER
tl23Sprite = "castle_castergrunt_idle-walk"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_SNAKE
tl23Sprite = "swamp_snake_idle-walk"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "idle"
ENDIF
IF sEnemyData[i].eEnemyType != TWS_ENEMY_BAT
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
CASE TWS_ENEMY_ATTACK
CASE TWS_ENEMY_ATTACK_LOAD
CASE TWS_ENEMY_ATTACK_HIT
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_KNIGHT
OR sEnemyData[i].eEnemyType = TWS_ENEMY_KNIGHT
tl23Sprite = t123enemyType
tl23Sprite += "slash"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
tl23Sprite = t123enemyType
tl23Sprite += "attack_thrust"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
IF sEnemyData[i].eEnemyState = TWS_ENEMY_ATTACK_HIT
bFacingRight = !sEnemyData[i].bIsMoving
ENDIF
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "attack"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
CASE TWS_ENEMY_SPECIAL_ATTACK
CASE TWS_ENEMY_SPECIAL_ATTACK_3
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
tl23Sprite = t123enemyType
tl23Sprite += "jumpattack-divekick"
bFacingRight = !sEnemyData[i].bIsMoving
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_WIZARD
tl23Sprite = t123enemyType
tl23Sprite += "attack"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "slam"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
CASE TWS_ENEMY_SPECIAL_ATTACK_2
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
tl23Sprite = t123enemyType
tl23Sprite += "attack_stab"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_WIZARD
tl23Sprite = t123enemyType
tl23Sprite += "attack"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELSE
tl23Sprite = "forest_boss_slam11"
ENDIF
BREAK
CASE TWS_ENEMY_ATTACK_WAIT
tl23Sprite = t123enemyType
tl23Sprite += "attack5"
BREAK
CASE TWS_ENEMY_TELEPORT_IN
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
tl23Sprite = t123enemyType
tl23Sprite += "jumpattack-jump_upward"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "teleport_in"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
CASE TWS_ENEMY_TELEPORT_OUT
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
tl23Sprite = t123enemyType
tl23Sprite += "jumpattack-jump_downward"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "teleport_out"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
CASE TWS_ENEMY_SPIT_1
CASE TWS_ENEMY_SPIT_2
CASE TWS_ENEMY_SPIT_3
tl23Sprite = t123enemyType
tl23Sprite += "spit"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
BREAK
CASE TWS_ENEMY_GO_UP
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_SPIDER
tl23Sprite = t123enemyType
tl23Sprite += "climb1-in air"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_KNIGHT
OR sEnemyData[i].eEnemyType = TWS_ENEMY_KNIGHT
tl23Sprite = t123enemyType
tl23Sprite += "knee"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
tl23Sprite = t123enemyType
tl23Sprite += "jumpattack-jump_upward"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "spawn"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
CASE TWS_ENEMY_FALL_OVER_1
CASE TWS_ENEMY_FALL_OVER_2
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_KNIGHT
OR sEnemyData[i].eEnemyType = TWS_ENEMY_KNIGHT
tl23Sprite = t123enemyType
tl23Sprite += "hurt"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "climb1-in air"
ENDIF
BREAK
CASE TWS_ENEMY_LANDING
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
tl23Sprite = t123enemyType
tl23Sprite += "jumpattack-land"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "climb2-land"
ENDIF
BREAK
CASE TWS_ENEMY_FALL
IF sEnemyData[i].eEnemyType = TWS_ENEMY_LEPRECHAUN
tl23Sprite = t123enemyType
tl23Sprite += "hurt"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_SNAKE
tl23Sprite = t123enemyType
tl23Sprite += "kill"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "hurt_fall"
ENDIF
BREAK
CASE TWS_ENEMY_FLAT
tl23Sprite = t123enemyType
tl23Sprite += "hurt_flat"
BREAK
CASE TWS_ENEMY_GETTING_UP
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_KNIGHT
OR sEnemyData[i].eEnemyType = TWS_ENEMY_KNIGHT
tl23Sprite = t123enemyType
tl23Sprite += "hurt"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "hurt_getup_"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
CASE TWS_ENEMY_STUN
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_SPIDER
OR sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_WIZARD
OR sEnemyData[i].eEnemyType = TWS_ENEMY_GRUNT_CASTER
OR sEnemyData[i].eEnemyType = TWS_ENEMY_SLIME
tl23Sprite = t123enemyType
tl23Sprite += "hurt"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BRUTE_AXE
tl23Sprite = t123enemyType
tl23Sprite += "stun"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_KNIGHT
OR sEnemyData[i].eEnemyType = TWS_ENEMY_KNIGHT
tl23Sprite = t123enemyType
tl23Sprite += "hurt1"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "hurt_stun"
ENDIF
IF SIN(GET_GAME_TIMER()/0.3) > 0.0
vOffset.x -= cfTWS_ENEMY_HIT_OFFSET
ELSE
vOffset.x += cfTWS_ENEMY_HIT_OFFSET
ENDIF
BREAK
CASE TWS_ENEMY_EXPLODING
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_WIZARD
tl23Sprite = t123enemyType
tl23Sprite += "dying"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "hurt"
ENDIF
BREAK
CASE TWS_ENEMY_DYING
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_WIZARD
tl23Sprite = t123enemyType
tl23Sprite += "death"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_LEPRECHAUN
OR sEnemyData[i].eEnemyType = TWS_ENEMY_GRUNT_CASTER
OR sEnemyData[i].eEnemyType = TWS_ENEMY_SLIME
tl23Sprite = t123enemyType
tl23Sprite += "kill"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ElIF sEnemyData[i].eEnemyType = TWS_ENEMY_SNAKE
tl23Sprite = t123enemyType
tl23Sprite += "kill"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "dead"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
CASE TWS_ENEMY_DYING_1
CASE TWS_ENEMY_DYING_2
CASE TWS_ENEMY_DYING_3
CASE TWS_ENEMY_DYING_4
CASE TWS_ENEMY_DYING_5
CASE TWS_ENEMY_DYING_6
CASE TWS_ENEMY_DYING_7
CASE TWS_ENEMY_DYING_8
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_WIZARD
tl23Sprite = "boss_wizard_death15"
ELSE
tl23Sprite = t123enemyType
tl23Sprite += "kill"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
vOffset = TWS_GET_KNIGHT_DEATH_OFFSET(sEnemyData[i].eEnemyState)
ENDIF
BREAK
CASE TWS_ENEMY_DEAD
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BAT
tl23Sprite = "cave_bat_die"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_FAIRY
tl23Sprite = "forest_fairy_kill"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_SPIDER
tl23Sprite = t123enemyType
tl23Sprite += "hurt_dead"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_KNIGHT
OR sEnemyData[i].eEnemyType = TWS_ENEMY_KNIGHT
tl23Sprite = "forest_boss_kill12"
vOffset = TWS_GET_KNIGHT_DEATH_OFFSET(sEnemyData[i].eEnemyState)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
tl23Sprite = "swamp_boss_hurt_flat"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_SPIDER
tl23Sprite = "cave_boss_dead"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_WIZARD
tl23Sprite = "boss_wizard_death17"
ENDIF
BREAK
CASE TWS_ENEMY_GLIDE_DOWN
tl23Sprite = t123enemyType
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BAT
tl23Sprite += "glide_down"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_SLIME
tl23Sprite += "jumpattack6"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_FAIRY
tl23Sprite += "idle"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_SPIDER
tl23Sprite += "climb1-in air"
ELSE
tl23Sprite += "web"
ENDIF
BREAK
CASE TWS_ENEMY_WALK
tl23Sprite = t123enemyType
IF sEnemyData[i].eEnemyType = TWS_ENEMY_BAT
tl23Sprite += "fly"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_FAIRY
tl23Sprite += "attack"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_SPIDER
tl23Sprite += "climb1-in air"
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_GRUNT_CASTER
tl23Sprite += "idle-walk"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_SNAKE
tl23Sprite += "idle-walk"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_SLIME
tl23Sprite += "jumpattack"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELIF sEnemyData[i].eEnemyType = TWS_ENEMY_BOULDER
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ELSE
tl23Sprite += "walk"
tl23Sprite += (sEnemyData[i].iSpriteAnimFrame + 1)
ENDIF
BREAK
ENDSWITCH
IF TWS_SHOULD_ENEMY_BE_DRAWN(i)
AND (sEnemyData[i].fHealth > 0.0
OR (sEnemyData[i].fHealth <= 0.0 AND SIN(GET_GAME_TIMER()/0.5) > 0)
OR (sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_SPIDER
OR sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_AMAZON
OR sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_KNIGHT
OR sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_WIZARD
OR sEnemyData[i].eEnemyType = TWS_ENEMY_SPIDER))
// Calculate X
IF sPlayerData.vSpritePos.x >= sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos OR sTWSData.eLevelStage >= TWS_LEVEL_BOSS_FIGHT AND sPlayerData.iLifes > 0
fEnemyPosX = sEnemyData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER(1.0, sBackgroundTilesData[iCurrentBackgroundTileToAdd-1].fSpritePos + 50)
ELSE
fEnemyPosX = sEnemyData[i].vSpritePos.x + TWS_GET_OFFSET_TO_PLAYER()
ENDIF
// Spider web
IF (sEnemyData[i].eEnemyType = TWS_ENEMY_BOSS_SPIDER OR sEnemyData[i].eEnemyType = TWS_ENEMY_SPIDER)
AND (sEnemyData[i].eEnemyState = TWS_ENEMY_GLIDE_DOWN
OR sEnemyData[i].eEnemyState = TWS_ENEMY_GO_UP
OR sEnemyData[i].eEnemyState = TWS_ENEMY_FALL_OVER_1
OR sEnemyData[i].eEnemyState = TWS_ENEMY_FALL_OVER_2
OR sEnemyData[i].eEnemyState = TWS_ENEMY_LANDING)
INT w, iNumWebTiles = ROUND(sEnemyData[i].vSpritePos.y / cfTWS_WEB_HEIGHT)
FOR w = 0 TO iNumWebTiles
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "web_line", INIT_VECTOR_2D(fEnemyPosX, w * cfTWS_WEB_HEIGHT), INIT_VECTOR_2D(cfTWS_WEB_WIDTH*fFactor, cfTWS_WEB_HEIGHT*fFactor), 0, sTWSData.rgbaSprite)
ENDFOR
ENDIF
//Shadow
IF sEnemyData[i].fHealth > 0.0 AND sEnemyData[i].vShadowOffset.y != -1.0
IF sEnemyData[i].vShadowOffset.y != 0.0
IF sEnemyData[i].iEnemySize >= 2
FLOAT fDistance = sEnemyData[i].vShadowOffset.y - sEnemyData[i].vSpritePos.y
fDistance = 1/(CLAMP(fDistance, TWS_GET_ENEMY_SHADOW_Y_POSITION(sEnemyData[i].eEnemyType), 600)/600)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fEnemyPosX + TWS_GET_ENEMY_SHADOW_X_OFFSET(i,bFacingRight), sEnemyData[i].vShadowOffset.y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor*fDistance, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor*fDistance), 0, sTWSData.rgbaBlackTransparent)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fEnemyPosX + TWS_GET_ENEMY_SHADOW_X_OFFSET(i,bFacingRight), sEnemyData[i].vShadowOffset.y) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_MED_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ENDIF
ELSE
IF sEnemyData[i].iEnemySize > 2
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fEnemyPosX + TWS_GET_ENEMY_SHADOW_X_OFFSET(i,bFacingRight), sEnemyData[i].vSpritePos.y + TWS_GET_ENEMY_SHADOW_Y_POSITION(sEnemyData[i].eEnemyType)) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_EXTRA_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_EXTRA_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELIF sEnemyData[i].iEnemySize = 2
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_amazon_shadow", INIT_VECTOR_2D(fEnemyPosX + TWS_GET_ENEMY_SHADOW_X_OFFSET(i,bFacingRight), sEnemyData[i].vSpritePos.y + TWS_GET_ENEMY_SHADOW_Y_POSITION(sEnemyData[i].eEnemyType)) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_AMAZON_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELIF sEnemyData[i].iEnemySize = 1
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_player-enemy_shadow", INIT_VECTOR_2D(fEnemyPosX + TWS_GET_ENEMY_SHADOW_X_OFFSET(i,bFacingRight), sEnemyData[i].vSpritePos.y + TWS_GET_ENEMY_SHADOW_Y_POSITION(sEnemyData[i].eEnemyType)) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_LARGE_WIDTH*fFactor, cfTWS_FX_SHADOW_LARGE_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveItemsAndFX", "fx_item_medium_shadow", INIT_VECTOR_2D(fEnemyPosX + TWS_GET_ENEMY_SHADOW_X_OFFSET(i,bFacingRight), sEnemyData[i].vSpritePos.y + TWS_GET_ENEMY_SHADOW_Y_POSITION(sEnemyData[i].eEnemyType)) , INIT_VECTOR_2D(cfTWS_FX_SHADOW_MED_WIDTH*fFactor, cfTWS_FX_SHADOW_MED_HEIGHT*fFactor), 0, sTWSData.rgbaBlackTransparent)
ENDIF
ENDIF
ENDIF
IF bFacingRight
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23Dictionary, tl23Sprite, ADD_VECTOR_2D(INIT_VECTOR_2D(-vOffset.x, vOffset.y), INIT_VECTOR_2D(fEnemyPosX, sEnemyData[i].vSpritePos.y)), INIT_VECTOR_2D(-sEnemyData[i].vSpriteSize.X*fFactor, sEnemyData[i].vSpriteSize.Y*fFactor), 0, sTWSData.rgbaSprite)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE(tl23Dictionary, tl23Sprite, ADD_VECTOR_2D(vOffset, INIT_VECTOR_2D(fEnemyPosX, sEnemyData[i].vSpritePos.y)), INIT_VECTOR_2D(sEnemyData[i].vSpriteSize.X*fFactor, sEnemyData[i].vSpriteSize.Y*fFactor), 0, sTWSData.rgbaSprite)
ENDIF
ENDIF
ENDIF
ENDPROC
PROC TWS_DRAW_TITLE_ANIM()
TEXT_LABEL_23 tl23Sprite
SWITCH sTWSData.sCutsceneData.eTitleCutsceneStage
CASE TWS_TITLE_ANIM_STRIKE_1
tl23Sprite = "lightning_strike1_"
tl23Sprite += (sTWSData.sCutsceneData.iSpriteCutsceneAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntro", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_TITLE_ANIM_STRIKE_1_PAUSE
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
BREAK
CASE TWS_TITLE_ANIM_STRIKE_2
tl23Sprite = "lightning_strike2_"
tl23Sprite += (sTWSData.sCutsceneData.iSpriteCutsceneAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntro", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
BREAK
CASE TWS_TITLE_ANIM_STRIKE_2_PAUSE
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
BREAK
CASE TWS_TITLE_ANIM_FINAL_STRIKE
tl23Sprite = "lightning_strike3_"
tl23Sprite += (sTWSData.sCutsceneData.iSpriteCutsceneAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntro", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
BREAK
ENDSWITCH
ENDPROC
PROC TWS_DRAW_TITLE_BACKGROUND()
INT i
TEXT_LABEL_31 tl23Sprite
tl23Sprite = "title_bg_scroll"
FOR i = 0 TO 1
IF sTWSData.fMenuBackgroundPosX[i] < -cfTWS_MENU_BACKGROUND_TILE_WIDTH/2
sTWSData.fMenuBackgroundPosX[i] = cfTWS_MENU_BACKGROUND_TILE_WIDTH + cfTWS_MENU_BACKGROUND_TILE_WIDTH/2 - 4
ENDIF
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntroMenu", tl23Sprite, INIT_VECTOR_2D(sTWSData.fMenuBackgroundPosX[i], cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfTWS_MENU_BACKGROUND_TILE_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
sTWSData.fMenuBackgroundPosX[i] -= 4.0
ENDFOR
ENDPROC
PROC TWS_DRAW_TITLE_SCREEN()
TEXT_LABEL_31 tl23Sprite
TWS_DRAW_TITLE_BACKGROUND()
IF sTWSData.eTitleStage = TWS_TITLE_PRESS_START
TWS_DRAW_FADE()
IF SIN(GET_GAME_TIMER()/2.0) > 0.0
tl23Sprite = "Wizards_ruin_Title_Screen1"
ELSE
tl23Sprite = "Wizards_ruin_Title_Screen2"
ENDIF
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntroMenu", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ELSE
tl23Sprite = "Wizards_ruin_Title_Screen1"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntroMenu", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
IF sTWSData.eTitleStage != TWS_TITLE_OPTION_BLINKING OR SIN(GET_GAME_TIMER()/0.4) > 0.0
tl23Sprite = "option_scroll_"
IF sTWSData.iMenuOptionSpriteAnim < 9
tl23Sprite += "0"
ENDIF
tl23Sprite += (sTWSData.iMenuOptionSpriteAnim + 1)
IF NOT sTWSData.bNormalModeIsCompleted AND sTWSData.iMenuOptionSpriteAnim > 8 AND sTWSData.iMenuOptionSpriteAnim < 14
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntroMenu", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/5*4), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_TITLE_OPTION_WIDTH, cfTWS_HUD_TITLE_OPTION_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaBlackTransparent)
ELSE
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntroMenu", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/5*4), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_TITLE_OPTION_WIDTH, cfTWS_HUD_TITLE_OPTION_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
ENDIF
ELSE
tl23Sprite = "select_arrows"
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntroMenu", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/5*4), MULTIPLY_VECTOR_2D(INIT_VECTOR_2D(cfTWS_HUD_TITLE_ARROWS_WIDTH, cfTWS_HUD_TITLE_ARROWS_HEIGHT), cfTWS_RESCALE_FACTOR), 0, sTWSData.rgbaSprite)
ENDIF
TWS_DRAW_FADE()
ENDIF
ENDPROC
PROC TWS_DRAW_CUTSCENE()
IF NOT IS_STRING_EMPTY(sTWSData.sCutsceneData.sCutsceneName)
TEXT_LABEL_31 tl23Sprite = sTWSData.sCutsceneData.sCutsceneName
tl23Sprite += (sTWSData.sCutsceneData.iSpriteCutsceneAnimFrame + 1)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ENDIF
ENDPROC
PROC TWS_DRAW_MAP_SCREEN()
TEXT_LABEL_23 tl23Sprite = TWS_GET_MAP_SCREEN_TEXTURE()
IF NOT IS_STRING_EMPTY(tl23Sprite)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveHUDAndScreen", tl23Sprite, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ENDIF
ENDPROC
PROC TWS_DRAW_FRONT_FX()
ARCADE_GAMES_POSTFX_DRAW()
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2 - cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2 + cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveFacade", "facade", INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ENDPROC
PROC TWS_UPDATE_DRAW_CALLS_INDEXES()
INT i
// For each element check if the contiguous are lower and higher
FOR i = 0 TO ciTWS_MAX_DRAW_CALLS-1
IF i = 0
// WHILE sTWSData.sDrawCalls[i].fZIndex > sTWSData.sDrawCalls[i+1].fZIndex
IF sTWSData.sDrawCalls[i].fZIndex > sTWSData.sDrawCalls[i+1].fZIndex
TWS_SWAP_DRAW_CALLS(i, i+1)
ENDIF
ELIF i = ciTWS_MAX_DRAW_CALLS-1
// WHILE sTWSData.sDrawCalls[i].fZIndex < sTWSData.sDrawCalls[i-1].fZIndex
IF sTWSData.sDrawCalls[i].fZIndex < sTWSData.sDrawCalls[i-1].fZIndex
TWS_SWAP_DRAW_CALLS(i, i-1)
ENDIF
ELSE
IF sTWSData.sDrawCalls[i].fZIndex < sTWSData.sDrawCalls[i-1].fZIndex
TWS_SWAP_DRAW_CALLS(i, i-1)
ELIF sTWSData.sDrawCalls[i].fZIndex > sTWSData.sDrawCalls[i+1].fZIndex
TWS_SWAP_DRAW_CALLS(i, i+1)
ENDIF
ENDIF
ENDFOR
ENDPROC
PROC TWS_DRAW_ENTITIES()
INT i
// For each element check if the contiguous are lower and higher
FOR i = 0 TO ciTWS_MAX_DRAW_CALLS-1
SWITCH sTWSData.sDrawCalls[i].eType
CASE TWS_ENTITY_ENEMY
TWS_DRAW_ENEMY(sTWSData.sDrawCalls[i].iIndex)
BREAK
CASE TWS_ENTITY_PLAYER
TWS_DRAW_PLAYER()
BREAK
CASE TWS_ENTITY_FX
TWS_DRAW_FX(sTWSData.sDrawCalls[i].iIndex)
BREAK
CASE TWS_ENTITY_TRAP
TWS_DRAW_TRAP(sTWSData.sDrawCalls[i].iIndex)
BREAK
CASE TWS_ENTITY_ITEM
TWS_DRAW_ITEM(sTWSData.sDrawCalls[i].iIndex)
BREAK
CASE TWS_ENTITY_NPC
TWS_DRAW_NPC(sTWSData.sDrawCalls[i].iIndex)
BREAK
ENDSWITCH
ENDFOR
ENDPROC
PROC TWS_DRAW_FIB_WARNING()
ARCADE_DRAW_PIXELSPACE_SPRITE("MPWizardsSleeveIntro", "ARCADE_FIB_SCREEN", INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_HEIGHT), 0, sTWSData.rgbaSprite)
ENDPROC
PROC TWS_DRAW_CLIENT_STATE(TWS_ARCADE_CLIENT_STATE eStateToDraw = TWS_ARCADE_CLIENT_STATE_PLAYING)
SWITCH eStateToDraw
CASE TWS_ARCADE_CLIENT_STATE_FIB_WARNING
// Draw black and grey background
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
TWS_DRAW_FIB_WARNING()
TWS_DRAW_FADE()
BREAK
CASE TWS_ARCADE_CLIENT_STATE_PIXTRO_LOGO
BREAK
CASE TWS_ARCADE_CLIENT_STATE_TITLE_ANIM
// Draw black and grey background
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
TWS_DRAW_TITLE_ANIM()
BREAK
CASE TWS_ARCADE_CLIENT_STATE_TITLE_SCREEN
// Draw black and grey background
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
TWS_DRAW_TITLE_SCREEN()
BREAK
CASE TWS_ARCADE_CLIENT_STATE_MAP_SCREEN
// Draw black and grey background
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
TWS_DRAW_MAP_SCREEN()
TWS_DRAW_FADE()
BREAK
CASE TWS_ARCADE_CLIENT_STATE_INTRO_CUTSCENE
CASE TWS_ARCADE_CLIENT_STATE_OUTRO_CUTSCENE
// Draw black and grey background
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
TWS_DRAW_CUTSCENE()
TWS_DRAW_FADE()
BREAK
CASE TWS_ARCADE_CLIENT_STATE_PLAYING
TWS_UPDATE_DRAW_CALLS_INDEXES()
// Draw black and grey background
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
TWS_DRAW_BACKGROUND()
TWS_DRAW_ENTITIES()
TWS_DRAW_FOREGROUND()
TWS_DRAW_HUD()
BREAK
CASE TWS_ARCADE_CLIENT_STATE_LEADERBOARD
// Draw black and grey background
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
TWS_DRAW_TITLE_BACKGROUND()
ARCADE_GAMES_LEADERBOARD_DRAW()
TWS_DRAW_FADE()
BREAK
DEFAULT
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sTWSData.rgbaBlack)
BREAK
ENDSWITCH
TWS_DRAW_FRONT_FX()
ENDPROC