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