7428 lines
302 KiB
XML
Executable File
7428 lines
302 KiB
XML
Executable File
USING "camhedz_arcade_drawing.sch"
|
|
USING "net_arcade_cabinet.sch"
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Updates the values used for animating sprite sequences
|
|
PROC CMHDZ_UPDATE_ANIM_FRAMES()
|
|
|
|
INT p, i
|
|
FOR p = 0 TO ciCMHDZ_MAX_PLAYERS - 1
|
|
|
|
//Blast Slow anim update
|
|
FOR i = 0 TO ciCMHDZ_MAX_PROJECTILES - 1
|
|
sCMHDZData.sPlayerData[p].sBulletData[i].iSlowFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sPlayerData[p].sBulletData[i].iSlowUpdateFrames = FLOOR(sCMHDZData.sPlayerData[p].sBulletData[i].iSlowFrameTimeCounter / cfCMHDZ_SLOW_ANIM_FRAME_TIME)
|
|
sCMHDZData.sPlayerData[p].sBulletData[i].iSlowFrameTimeCounter -= ROUND(cfCMHDZ_SLOW_ANIM_FRAME_TIME * sCMHDZData.sPlayerData[p].sBulletData[i].iSlowUpdateFrames)
|
|
ENDFOR
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_PLAYER_THROWN_PROJECTILES - 1
|
|
sCMHDZData.sPlayerData[p].sThrownProjectile[i].iSlowFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sPlayerData[p].sThrownProjectile[i].iSlowUpdateFrames = FLOOR(sCMHDZData.sPlayerData[p].sThrownProjectile[i].iSlowFrameTimeCounter / cfCMHDZ_DEFAULT_ANIM_FRAME_TIME)
|
|
sCMHDZData.sPlayerData[p].sThrownProjectile[i].iSlowFrameTimeCounter -= ROUND(cfCMHDZ_DEFAULT_ANIM_FRAME_TIME * sCMHDZData.sPlayerData[p].sThrownProjectile[i].iSlowUpdateFrames)
|
|
ENDFOR
|
|
ENDFOR
|
|
|
|
// Enemies
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES -1
|
|
|
|
//Slow anim update
|
|
sCMHDZData.sEnemyData[i].iSlowFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sEnemyData[i].iSlowUpdateFrames = FLOOR(sCMHDZData.sEnemyData[i].iSlowFrameTimeCounter / cfCMHDZ_SLOW_ANIM_FRAME_TIME)
|
|
sCMHDZData.sEnemyData[i].iSlowFrameTimeCounter -= ROUND(cfCMHDZ_SLOW_ANIM_FRAME_TIME * sCMHDZData.sEnemyData[i].iSlowUpdateFrames)
|
|
|
|
//Default anim update
|
|
sCMHDZData.sEnemyData[i].iDefaultFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sEnemyData[i].iDefaultUpdateFrames = FLOOR(sCMHDZData.sEnemyData[i].iDefaultFrameTimeCounter / cfCMHDZ_DEFAULT_ANIM_FRAME_TIME)
|
|
sCMHDZData.sEnemyData[i].iDefaultFrameTimeCounter -= ROUND(cfCMHDZ_DEFAULT_ANIM_FRAME_TIME * sCMHDZData.sEnemyData[i].iDefaultUpdateFrames)
|
|
|
|
ENDFOR
|
|
|
|
// FOR i = 0 TO ciCMHDZ_MAX_HOSTAGES -1
|
|
//
|
|
// //Slow anim update
|
|
// sCMHDZData.sHostageData[i].iSlowFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
// sCMHDZData.sHostageData[i].iSlowUpdateFrames = FLOOR(sCMHDZData.sHostageData[i].iSlowFrameTimeCounter / cfCMHDZ_SLOW_ANIM_FRAME_TIME)
|
|
// sCMHDZData.sHostageData[i].iSlowFrameTimeCounter -= ROUND(cfCMHDZ_SLOW_ANIM_FRAME_TIME * sCMHDZData.sHostageData[i].iSlowUpdateFrames)
|
|
//
|
|
// //Default anim update
|
|
// sCMHDZData.sHostageData[i].iDefaultFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
// sCMHDZData.sHostageData[i].iDefaultUpdateFrames = FLOOR(sCMHDZData.sHostageData[i].iDefaultFrameTimeCounter / cfCMHDZ_DEFAULT_ANIM_FRAME_TIME)
|
|
// sCMHDZData.sHostageData[i].iDefaultFrameTimeCounter -= ROUND(cfCMHDZ_DEFAULT_ANIM_FRAME_TIME * sCMHDZData.sHostageData[i].iDefaultUpdateFrames)
|
|
//
|
|
// ENDFOR
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_FX -1
|
|
|
|
//Slow anim update
|
|
sCMHDZData.sFXData[i].iSlowFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sFXData[i].iSlowUpdateFrames = FLOOR(sCMHDZData.sFXData[i].iSlowFrameTimeCounter / cfCMHDZ_SLOW_ANIM_FRAME_TIME)
|
|
sCMHDZData.sFXData[i].iSlowFrameTimeCounter -= ROUND(cfCMHDZ_SLOW_ANIM_FRAME_TIME * sCMHDZData.sFXData[i].iSlowUpdateFrames)
|
|
|
|
// Medium
|
|
sCMHDZData.sFXData[i].iMedFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sFXData[i].iMedUpdateFrames = FLOOR(sCMHDZData.sFXData[i].iMedFrameTimeCounter / cfCMHDZ_DEFAULT_ANIM_FRAME_TIME)
|
|
sCMHDZData.sFXData[i].iMedFrameTimeCounter -= ROUND(cfCMHDZ_DEFAULT_ANIM_FRAME_TIME * sCMHDZData.sFXData[i].iMedUpdateFrames)
|
|
|
|
ENDFOR
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_COVER - 1
|
|
IF CMHDZ_COVER_DATA_IS_BITMASK_SET(i, CMHDZ_COVER_DATA_BITS_IS_ANIMATED)
|
|
AND sCMHDZData.sCoverData[i].iHitCount > 0
|
|
//Slow anim update
|
|
sCMHDZData.sCoverData[i].iSlowFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sCoverData[i].iSlowUpdateFrames = FLOOR(sCMHDZData.sCoverData[i].iSlowFrameTimeCounter / cfCMHDZ_SLOW_ANIM_FRAME_TIME)
|
|
sCMHDZData.sCoverData[i].iSlowFrameTimeCounter -= ROUND(cfCMHDZ_SLOW_ANIM_FRAME_TIME * sCMHDZData.sCoverData[i].iSlowUpdateFrames)
|
|
|
|
//Default anim update
|
|
sCMHDZData.sCoverData[i].iDefaultFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sCoverData[i].iDefaultUpdateFrames = FLOOR(sCMHDZData.sCoverData[i].iDefaultFrameTimeCounter / cfCMHDZ_DEFAULT_ANIM_FRAME_TIME)
|
|
sCMHDZData.sCoverData[i].iDefaultFrameTimeCounter -= ROUND(cfCMHDZ_DEFAULT_ANIM_FRAME_TIME * sCMHDZData.sCoverData[i].iDefaultUpdateFrames)
|
|
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMY_PROJECTILES - 1
|
|
sCMHDZData.sEnemyProjectiles[i].iSlowFrameTimeCounter += ROUND(GET_FRAME_TIME() * 1000)
|
|
sCMHDZData.sEnemyProjectiles[i].iSlowUpdateFrames = FLOOR(sCMHDZData.sEnemyProjectiles[i].iSlowFrameTimeCounter / cfCMHDZ_SLOW_ANIM_FRAME_TIME)
|
|
sCMHDZData.sEnemyProjectiles[i].iSlowFrameTimeCounter -= ROUND(cfCMHDZ_SLOW_ANIM_FRAME_TIME * sCMHDZData.sEnemyProjectiles[i].iSlowUpdateFrames)
|
|
ENDFOR
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_TRIGGER_TITLE_MUSIC()
|
|
IF NOT IS_BIT_SET(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_STARTED_TITLE))
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_TRIGGER_TITLE_MUSIC] Called.")
|
|
//DEBUG_PRINTCALLSTACK()
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_TITLE)
|
|
SET_BIT(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_STARTED_TITLE))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE eNewState)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, " ")
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] {DSW} CMHDZ_SET_LOCAL_STATE - State changed from ",
|
|
//CMHDZ_ARCADE_CLIENT_STATE_TO_STRING(sCMHDZData.eClientState), " to ", CMHDZ_ARCADE_CLIENT_STATE_TO_STRING(eNewState))
|
|
//DEBUG_PRINTCALLSTACK()
|
|
sCMHDZData.eClientState = eNewState
|
|
|
|
// IF eNewState = CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU // relaced by CMHDZ_AUDIO_EFFECT_PLAYER_START
|
|
// CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SELECT_STAGE)
|
|
// ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC CMHDZ_RESET_ALL_ENEMY_THROWN_PROJECTLES()
|
|
INT i
|
|
REPEAT ciCMHDZ_MAX_ENEMY_PROJECTILES i
|
|
CMHDZ_RESET_ENEMY_THROWN_PROJECTILE(i)
|
|
ENDREPEAT
|
|
|
|
sCMHDZData.iNumberOfThrownEnemyProjectiles = 0
|
|
ENDPROC
|
|
|
|
PROC RESET_ENEMIES()
|
|
INT i = 0
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES -1
|
|
CMHDZ_RESET_ENEMY(i)
|
|
sCMHDZData.sEnemyData[i].iEnemyType = CMHDZ_ENEMY_INVALID
|
|
ENDFOR
|
|
ENDPROC
|
|
|
|
|
|
PROC CMHDZ_RESET_ALL_COVER()
|
|
INT i
|
|
FOR i = 0 TO ciCMHDZ_MAX_COVER -1
|
|
CMHDZ_RESET_COVER(i)
|
|
sCMHDZData.sCoverData[i].eType = CMHDZ_ASSET_INVALID
|
|
ENDFOR
|
|
sCMHDZData.iNumberOfProps = 0
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
PROC CMHDZ_CLEANUP_VARIABLES()
|
|
|
|
sCMHDZData.sPlayerData[0].fHealth = 1.0
|
|
// sCMHDZData.sPlayerData[0].iWeapon = 0
|
|
// sCMHDZData.sPlayerData[0].iAmmo = ciCMHDZ_PLAYER_START_AMMO
|
|
CMHDZ_RESET_ALL_PLAYER_THROWN_PROJECTILES(0)
|
|
CMHDZ_INIT_PLAYER_WEAPON()
|
|
|
|
sCMHDZData.sPlayerData[0].fHitCountdown = 0.0
|
|
|
|
//sCMHDZData.iCurrentScreen = 1
|
|
////sCMHDZData.fOverallLevelProgression = 0.0 // Trialing keeping this the same.
|
|
|
|
sCMHDZData.iCurrentActiveEnemies[0] = 0
|
|
sCMHDZData.iCurrentActiveEnemies[1] = 0
|
|
sCMHDZData.iCurrentActiveEnemies[2] = 0
|
|
|
|
sCMHDZData.bFadingOut = FALSE
|
|
|
|
sCMHDZData.eLevelState = CMHDZ_FADING_IN
|
|
|
|
CMHDZ_RESET_ALL_COVER()
|
|
|
|
RESET_ENEMIES()
|
|
CMHDZ_RESET_ITEMS()
|
|
|
|
CMHDZ_RESET_ALL_ENEMY_THROWN_PROJECTLES()
|
|
|
|
|
|
sCMHDZData.iNumberOfEnemies = 0
|
|
sCMHDZData.iTotalNumberOfEnemies = 0
|
|
sCMHDZData.iTotalNumberOfEnemiesSpawned = 0
|
|
|
|
//CMHDZ_RESET_HOSTAGES()
|
|
|
|
INT i
|
|
FOR i = 0 TO ciCMHDZ_MAX_BACKGROUND_ELEMS - 1
|
|
CMHDZ_BACKGROUND_DATA_SET_RENDERING(i, FALSE)
|
|
ENDFOR
|
|
sCMHDZData.iNumberOfBackgroundElements = 0
|
|
|
|
CMHDZ_RESET_ITEMS()
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_FX - 1
|
|
sCMHDZData.sFXData[i].bActive = FALSE
|
|
ENDFOR
|
|
|
|
// Reinit boss structure
|
|
sCMHDZData.sBossData.rgbaColor = sCMHDZData.rgbaWhite
|
|
CMHDZ_CHANGE_BOSS_STATE(CMHDZ_BOSS_STATE_INACTIVE)
|
|
sCMHDZData.sBossData.iActiveLane = ciCMHDZ_LANE_FOREGROUND
|
|
sCMHDZData.sBossData.bShotThisFrame = FALSE
|
|
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_1)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_2)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_ANIM_FINISHED_ONCE)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_REVERSE)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_TAKING_DAMAGE)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_NONE)
|
|
|
|
sCMHDZData.sBossData.fAnimTimer = 0.0
|
|
sCMHDZData.sBossData.fHealth = cfBOSS_MaxHealth
|
|
|
|
//sCMHDZData.vV_ScanMod = INIT_VECTOR_2D(1.0,1.0)
|
|
|
|
CMHDZ_RESET_LOCAL_PLAYER_SCORE_FOR_CURRENT_LEVEL()
|
|
ENDPROC
|
|
|
|
FUNC BOOL CMHDZ_CHECK_FOR_MENU_PROGRESS_BUTTON(BOOL bAllowAccept = TRUE)
|
|
BOOL bShouldReturn = FALSE
|
|
|
|
// bShouldReturn = IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
//
|
|
// IF bAllowAccept
|
|
// bShouldReturn = (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
// OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_ATTACK)
|
|
// OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT))
|
|
// ENDIF
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
bShouldReturn = IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
#IF IS_DEBUG_BUILD
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_BACK)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_ESCAPE)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_DELETE)
|
|
#ENDIF
|
|
|
|
IF (bAllowAccept
|
|
AND !bShouldReturn)
|
|
bShouldReturn = (IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_ATTACK)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT))
|
|
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ][BAZ] CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU - bAllowAccept")
|
|
ENDIF
|
|
|
|
ELSE
|
|
bShouldReturn = IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
|
|
IF (bAllowAccept
|
|
AND !bShouldReturn)
|
|
bShouldReturn = (IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_ATTACK)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT))
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
RETURN bShouldReturn
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU(BOOL bReturnToTitle = TRUE, BOOL bAllowAccept = FALSE, BOOL bIsLeaderboard = FALSE, BOOL bUseTimeOut = FALSE)
|
|
BOOL bShouldReturn
|
|
BOOL bTimeExpired
|
|
IF bUseTimeOut
|
|
IF sCMHDZData.iReturnToMenuTimeout = 0
|
|
sCMHDZData.iReturnToMenuTimeout = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
bTimeExpired = (bUseTimeOut AND (GET_GAME_TIMER() - sCMHDZData.iReturnToMenuTimeout > 10000))
|
|
IF NOT bIsLeaderboard
|
|
// bShouldReturn = IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
//
|
|
// IF bAllowAccept
|
|
// bShouldReturn = (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
// OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_ATTACK)
|
|
// OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT))
|
|
// ENDIF
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
bShouldReturn = IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
#IF IS_DEBUG_BUILD
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_BACK)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_ESCAPE)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_DELETE)
|
|
#ENDIF
|
|
|
|
IF (bAllowAccept
|
|
AND !bShouldReturn)
|
|
bShouldReturn = (IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_ATTACK)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT))
|
|
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ][BAZ] CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU - bAllowAccept")
|
|
ENDIF
|
|
|
|
ELSE
|
|
bShouldReturn = IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
|
|
IF (bAllowAccept
|
|
AND !bShouldReturn)
|
|
bShouldReturn = (IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_ATTACK)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT))
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//#IF IS_DEBUG_BUILD
|
|
ELSE
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
bShouldReturn = IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
#IF IS_DEBUG_BUILD
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_BACK)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_ESCAPE)
|
|
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_DELETE)
|
|
#ENDIF
|
|
IF (bAllowAccept
|
|
AND !bShouldReturn)
|
|
bShouldReturn = (IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_ATTACK)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT))
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
bShouldReturn = IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
|
|
IF (bAllowAccept
|
|
AND !bShouldReturn)
|
|
bShouldReturn = (IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_ATTACK)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT))
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
//#ENDIF
|
|
ENDIF
|
|
|
|
IF bShouldReturn
|
|
OR bTimeExpired
|
|
#IF IS_DEBUG_BUILD
|
|
IF bTimeExpired
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU] {dsw} Time expired - bReturnToTitle: ", bReturnToTitle, " bAllowAccept: ", bAllowAccept, " bIsLeaderboard: ",bIsLeaderboard, " bUseTimeOut: ",bUseTimeOut)
|
|
DEBUG_PRINTCALLSTACK()
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_MENU_BACK)
|
|
|
|
|
|
CMHDZ_CLEANUP_VARIABLES()
|
|
|
|
// No penalty for chekcing each stage at this point.
|
|
INT i
|
|
REPEAT ENUM_TO_INT(CMHDZ_MAX_LEVELS) i
|
|
CMHDZ_CANCEL_MUSIC_EVENT(CMHDZ_GET_MUSIC_EVENT_FOR_LEVEL(INT_TO_ENUM(CMHDZ_LEVELS, i)))
|
|
ENDREPEAT
|
|
|
|
CMHDZ_TRIGGER_TITLE_MUSIC()
|
|
|
|
IF bReturnToTitle
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN)
|
|
//CMHDZ_START_MOVIE_FORCE(sCMHDZData.bmIdCmhdzIntro, "CMHDZ_Intro_Static")
|
|
// SET_BINK_MOVIE_TIME(sCMHDZData.bmIdCmhdzIntro, 99.0)
|
|
// DRAW_BINK_MOVIE(sCMHDZData.bmIdCmhdzIntro, cfSCREEN_CENTER, cfSCREEN_CENTER, fRatioWidth, fRatioHeight, 0.0, 255,255,255,255)
|
|
sCMHDZData.iReturnToMenuTimeout = 0
|
|
ELSE
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU)
|
|
//sCMHDZData.fSyncOffsetY = 600 // Offset to correct
|
|
sCMHDZData.iReturnToMenuTimeout = 0
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC CMHDZ_INIT_GOTO_LEADERBOARD()
|
|
INT i
|
|
FOR i = 0 TO ciCMHDZ_MAX_BACKGROUND_ELEMS - 1
|
|
CMHDZ_BACKGROUND_DATA_SET_RENDERING(i, FALSE)
|
|
ENDFOR
|
|
|
|
// Grab a random frame.
|
|
sCMHDZData.eCurrentLevel = INT_TO_ENUM(CMHDZ_LEVELS, GET_RANDOM_INT_IN_RANGE(0, 5))
|
|
|
|
CMHDZ_RESET_ALL_COVER()
|
|
|
|
sCMHDZData.iNumberOfBackgroundElements = 0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PROCESS_CLIENT_STATE_INIT_LEVEL] {DSW} Called. Level: ", CMHDZ_LEVELS_TO_STRING(CMHDZ_GET_CURRENT_LEVEL()))
|
|
#ENDIF
|
|
|
|
//-- Need to still draw the menu during this frame
|
|
CMHDZ_DRAW_MENU_BACKGROUND()
|
|
TWS_DRAW_FRONT_FX()
|
|
//CMHDZ_DRAW_CLIENT_STATE_MENU()
|
|
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
TEXT_LABEL_31 tl31TextDict = CMHDZ_GET_TEXTURE_DICTIONARY_FOR_LEVEL(sCMHDZData.eCurrentLevel)
|
|
REQUEST_STREAMED_TEXTURE_DICT(tl31TextDict)
|
|
IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED(tl31TextDict)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {dsw} CMHDZ_PROCESS_CLIENT_STATE_INIT_LEVEL - Loading ", tl31TextDict)
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Reset Counter Variables
|
|
CMHDZ_CLEANUP_VARIABLES()
|
|
CMHDZ_INIT_COVER_POINTS(sCMHDZData.eCurrentLevel)
|
|
CMHDZ_INIT_PLAYERS()
|
|
CMHDZ_INIT_BACKGROUND(sCMHDZData.eCurrentLevel)
|
|
CMHDZ_INIT_ITEMS()
|
|
CMHDZ_INIT_PLAY_VARIABLES()
|
|
CMHDZ_INIT_BOSS_STRUCT()
|
|
CMHDZ_INIT_SOUND()
|
|
|
|
sCMHDZData.iLocalLevelRunningTime = GET_GAME_TIMER()
|
|
sCMHDZData.iLevelBitset[ENUM_TO_INT(sCMHDZData.eCurrentLevel)] = 0
|
|
i = 0 // reset
|
|
REPEAT ciCMHDZ_MAX_LANES i
|
|
sCMHDZData.iCurrentActiveEnemies[i] = 0
|
|
sCMHDZData.iTimeSinceEnemyActive[i] = 0
|
|
ENDREPEAT
|
|
|
|
sCMHDZData.iResultsScreenTimer = 0
|
|
sCMHDZData.iResultsScreenTimeout = 0
|
|
sCMHDZData.iReturnToMenuTimeout = 0
|
|
|
|
sCMHDZData.iTotalNumberOfEnemiesKilledForScreen = 0
|
|
|
|
// New progression trackers#
|
|
sCMHDZData.fOverallLevelProgression = 0.0
|
|
sCMHDZData.iStaticScreenPhase = 0
|
|
|
|
ARCADE_GAMES_HELP_TEXT_CLEAR()
|
|
|
|
CMHDZ_INIT_BACKGROUND(CMHDZ_LEVEL_SCRAPYARD)
|
|
CMHDZ_INIT_COVER_POINTS(CMHDZ_LEVEL_SCRAPYARD)
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_ACTIVATE_ITEM(INT iIndex)
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ACTIVATE_ITEM] {DSW} Called. Item: ", iIndex, " Type: ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[iIndex].eItemType), " Pos: ", sCMHDZData.sItemData[iIndex].vSpritePos.x, ", ", sCMHDZData.sItemData[iIndex].vSpritePos.y)
|
|
#ENDIF
|
|
// INT iInClip
|
|
// INT iTotal
|
|
// INT iRand
|
|
// CMHDZ_PLAYER_WEAPON_DATA weaponData
|
|
SWITCH sCMHDZData.sItemData[iIndex].eItemType
|
|
|
|
CASE CMHDZ_ITEM_NAIL_GUN_AMMO
|
|
// sCMHDZData.sPlayerData[0].iWeapon = 1
|
|
// sCMHDZData.sPlayerData[0].iAmmo = 1000
|
|
CMHDZ_SET_PLAYER_SPECIAL_WEAPON(CMHDZ_PLAYER_WEAPON_NAILGUN)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_NAILGUN_RELOAD_SINGLE)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_Rnd)
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_RIFLE_AMMO
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_RIFLE_RELOAD_SINGLE)
|
|
CMHDZ_SET_PLAYER_SPECIAL_WEAPON(CMHDZ_PLAYER_WEAPON_RIFLE)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_AR)
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_SHOTGUN_AMMO
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SHOTGUN_RELOAD_SINGLE)
|
|
CMHDZ_SET_PLAYER_SPECIAL_WEAPON(CMHDZ_PLAYER_WEAPON_SHOTGUN)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_SG)
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_HEALTH
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PICKUP_HEALTH)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Health)
|
|
sCMHDZData.sPlayerData[0].fHealth = CLAMP(sCMHDZData.sPlayerData[0].fHealth + 0.5, 0.0, 1.0)
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_SHIELD
|
|
//CMHDZ_PLAY_SOUND_NO_POSITION(CMHDZ_AUDIO_EFFECT_PICKUP_SHIELD)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Invulnerable)
|
|
CMHDZ_SET_PLAYER_BIT(CMHDZ_PLAYER_BIT_INVULNERABILE)
|
|
|
|
sCMHDZData.sPlayerData[0].iInvulnerableTimer = GET_GAME_TIMER()
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
|
|
sCMHDZData.fPowerRunTimer = 0.0
|
|
|
|
//CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE)
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_BUFF
|
|
//CMHDZ_PLAY_SOUND_NO_POSITION(CMHDZ_AUDIO_EFFECT_PICKUP_BUFF)
|
|
CMHDZ_SET_PLAYER_BIT(CMHDZ_PLAYER_BIT_QUAD_DAMAGE)
|
|
//CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Damage)
|
|
sCMHDZData.fPowerRunTimer = 0.0
|
|
sCMHDZData.sPlayerData[0].iQuadDamageTimer = GET_GAME_TIMER()
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_CASH
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PICKUP_CASH)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Cash)
|
|
CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE(CMHDZ_SCORE_TYPE_CASH)
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_MOLOTOV
|
|
sCMHDZData.sPlayerData[0].projectileType = CMHDZ_PROJECTILE_MOLOTOV
|
|
sCMHDZData.sPlayerData[0].iThrownProjectilesAmmo = ciCMHDZ_ITEM_MOLOTOV_AMMO_COUNT
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_MV)
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_BRICK
|
|
sCMHDZData.sPlayerData[0].projectileType = CMHDZ_PROJECTILE_BRICK
|
|
sCMHDZData.sPlayerData[0].iThrownProjectilesAmmo = ciCMHDZ_ITEM_BRICK_AMMO_COUNT
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_NAILBOMB
|
|
sCMHDZData.sPlayerData[0].projectileType = CMHDZ_PROJECTILE_NAILBOMB
|
|
sCMHDZData.sPlayerData[0].iThrownProjectilesAmmo = ciCMHDZ_ITEM_NAILBOMB_AMMO_COUNT
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_DIRECTOR_Weapon_NB)
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_DYNAMITE
|
|
sCMHDZData.sPlayerData[0].projectileType = CMHDZ_PROJECTILE_DYNAMITE
|
|
sCMHDZData.sPlayerData[0].iThrownProjectilesAmmo = ciCMHDZ_ITEM_DYNAMITE_AMMO_COUNT
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
|
|
CASE CMHDZ_ITEM_VIDEOTAPE
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PICKUP_TAPE)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Tape)
|
|
CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE(CMHDZ_SCORE_TYPE_TAPE)
|
|
sCMHDZData.sItemData[iIndex].bRendering = FALSE
|
|
sCMHDZData.sItemData[iIndex].iRenderAfterWarpCount = 0
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Activate item
|
|
SWITCH sCMHDZData.sItemData[iIndex].eItemType
|
|
CASE CMHDZ_ITEM_BUFF
|
|
CASE CMHDZ_ITEM_SHIELD
|
|
sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_SCAN_LINE].bShow = TRUE
|
|
sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_FLICKERING].bShow = TRUE
|
|
INIT_RGBA_STRUCT(sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_SCAN_LINE].rgbaColor,255,255,255,20)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_MUSIC_TRANSITION)
|
|
CMHDZ_INCREASE_POWERUPS_COLLECTED_FOR_CURRENT_LEVEL()
|
|
ENDPROC
|
|
|
|
FUNC BOOL CMHDZ_CHECK_FOR_HEADSHOT(VECTOR_2D vSpriteTL, VECTOR_2D vBullet, INT iLane)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_CHECK_FOR_HEADSHOT] ")
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_CHECK_FOR_HEADSHOT] Lane: ", iLane)
|
|
// IF sCMHDZData.sPlayerData[0].weaponType != CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
//
|
|
// IF CMHDZ_GET_PLAYER_CURRENT_WEAPON() = CMHDZ_PLAYER_WEAPON_NAILGUN
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
|
|
FLOAT fAbsfDist = ABSF(vBullet.Y - vSpriteTL.y)
|
|
FLOAT fYMin, fYMax
|
|
|
|
SWITCH iLane
|
|
CASE ciCMHDZ_LANE_BACKGROUND // Back of screen
|
|
fYMin = cfCMHDZ_HEADSHOT_BACKGROUND_MIN_Y
|
|
fYMax = cfCMHDZ_HEADSHOT_BACKGROUND_MAX_Y
|
|
BREAK
|
|
|
|
CASE ciCMHDZ_LANE_MIDDLE // Middle of screen
|
|
fYMin = cfCMHDZ_HEADSHOT_MIDGROUND_MIN_Y
|
|
fYMax = cfCMHDZ_HEADSHOT_MIDGROUND_MAX_Y
|
|
BREAK
|
|
|
|
CASE ciCMHDZ_LANE_FOREGROUND // Front of screen
|
|
fYMin = cfCMHDZ_HEADSHOT_FOREGROUND_MIN_Y
|
|
fYMax = cfCMHDZ_HEADSHOT_FOREGROUND_MAX_Y
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
fAbsfDist = ABSF(vBullet.Y - vSpriteTL.y)
|
|
IF fAbsfDist >= fYMin
|
|
AND fAbsfDist <= fYMax
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_CHECK_FOR_HEADSHOT] HEADSHOT!")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_CHECK_FOR_HEADSHOT] No Headshot - Diff: ", fAbsfDist, " Min: ", fYMin, " Max : ", fYMax)
|
|
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_PLAY_AUDIO_FOR_SHOT_COVER(INT iCover)
|
|
CMHDZ_ASSET_TYPES eType = sCMHDZData.sCoverData[iCover].eType
|
|
VECTOR_2D vPos = sCMHDZData.sCoverData[iCover].vSpritePos
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_PLAY_AUDIO_FOR_SHOT_COVER] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER] {dsw} Cover ", iCover, " Type: ", CMHDZ_ASSET_TYPES_TO_STRING(sCMHDZData.sCoverData[iCover].eType))
|
|
#ENDIF
|
|
|
|
SWITCH eType
|
|
|
|
CASE CMHDZ_ASSET_GRASS
|
|
CASE CMHDZ_ASSET_BUSH_1
|
|
CASE CMHDZ_ASSET_BUSH_2
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_BUSHES, vPos)
|
|
BREAK
|
|
|
|
CASE CMHDZ_ASSET_MEATGRINDER_1
|
|
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_1
|
|
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_2
|
|
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_3
|
|
CASE CMHDZ_ASSET_SCRAPYARD_MD_VAN_4
|
|
CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_1
|
|
CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_2
|
|
CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_3
|
|
CASE CMHDZ_ASSET_SCRAPYARD_MD_CAR_4
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_METAL, vPos)
|
|
BREAK
|
|
|
|
CASE CMHDZ_ASSET_ROCK_SMALL
|
|
CASE CMHDZ_ASSET_ROCK_LARGE
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_ROCK, vPos)
|
|
BREAK
|
|
|
|
CASE CMHDZ_ASSET_BODYBAG_1
|
|
CASE CMHDZ_ASSET_BODYBAG_2
|
|
CASE CMHDZ_ASSET_BODYBAG_3
|
|
CASE CMHDZ_ASSET_BODYBAG_FLOOR_1
|
|
CASE CMHDZ_ASSET_BODYBAG_FLOOR_2
|
|
CASE CMHDZ_ASSET_BODYBAG_FLOOR_3
|
|
CASE CMHDZ_ASSET_BODYBAG_FLOOR_4
|
|
CASE CMHDZ_ASSET_PIG
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_BODY, vPos)
|
|
BREAK
|
|
|
|
DEFAULT
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_GENERIC, vPos)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
FUNC INT CMHDZ_GET_NUMBER_OF_PICKUPS_PLACED_INSIDE_PIGS_FOR_CURRENT_SCREEN()
|
|
INT i
|
|
INT iCount
|
|
FOR i = 0 TO ciCMHDZ_MAX_COVER - 1
|
|
IF sCMHDZData.sCoverData[i].eType = CMHDZ_ASSET_PIG
|
|
IF CMHDZ_IS_POSITION_ON_SCREEN(sCMHDZData.sCoverData[i].vSpritePos)
|
|
IF CMHDZ_COVER_DATA_IS_BITMASK_SET(i, CMHDZ_COVER_DATA_BITS_SPAWNED_PICKUP)
|
|
iCount++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
RETURN iCount
|
|
ENDFUNC
|
|
PROC CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER( INT iCover, INT iPlayer, INT iProjectile, BOOL &bProcessedThisFrame )
|
|
IF bProcessedThisFrame
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sCoverData[iCover].iCoverLane = ciCMHDZ_LANE_FOREGROUND
|
|
EXIT
|
|
ENDIF
|
|
|
|
INT iRandom
|
|
INT iPlaced
|
|
VECTOR_2D vPickupLoc
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHitObject = TRUE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].iTimeOfHit = GET_GAME_TIMER()
|
|
sCMHDZData.sCoverData[iCover].iHitCount++
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER] {dsw} Cover ", iCover, " Shot. Hit count: ", sCMHDZData.sCoverData[iCover].iHitCount, " Lane: ", sCMHDZData.sCoverData[iCover].iCoverLane, " Type: ", CMHDZ_ASSET_TYPES_TO_STRING(sCMHDZData.sCoverData[iCover].eType), " Special? ", CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER))
|
|
#ENDIF
|
|
|
|
IF CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_EXP_GENERIC, sCMHDZData.sCoverData[iCover].vSpritePos)
|
|
|
|
TWS_CREATE_FX(sCMHDZData.sCoverData[iCover].vSpritePos, CMHDZ_FX_EXPLOSION, sCMHDZData.sCoverData[iCover].iCoverLane)
|
|
|
|
//-- When we explode a TNT barrel, replace it with another at same spot, but don't render until after it's warped around again
|
|
IF sCMHDZData.sCoverData[iCover].eType = CMHDZ_ASSET_SPECIAL_TNT_BARREL_1
|
|
// OR sCMHDZData.sCoverData[iCover].eType = CMHDZ_ASSET_SPECIAL_TNT_CRATE
|
|
CMHDZ_ADD_COVER_TO_LIST(sCMHDZData.sCoverData[iCover].vSpritePos, CMHDZ_ASSET_SPECIAL_TNT_BARREL_1, sCMHDZData.sCoverData[iCover].iCoverLane, DEFAULT)
|
|
ENDIF
|
|
|
|
CMHDZ_KILL_ALL_ENEMIES_IN_RANGE(sCMHDZData.sCoverData[iCover].vSpritePos, 400)
|
|
CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE(CMHDZ_SCORE_TYPE_SCENERY)
|
|
|
|
ELIF CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_IS_ANIMATED)
|
|
|
|
|
|
IF sCMHDZData.sCoverData[iCover].eType = CMHDZ_ASSET_PIG
|
|
IF NOT CMHDZ_COVER_DATA_IS_BITMASK_SET(iCover, CMHDZ_COVER_DATA_BITS_SPAWNED_PICKUP)
|
|
IF sCMHDZData.sCoverData[iCover].iHitCount > 0
|
|
// sCMHDZData.sCoverData[iCover].bSpawnedPickup = TRUE
|
|
vPickupLoc = sCMHDZData.sCoverData[iCover].vSpritePos
|
|
// vPickupLoc.x += cfCMHDZ_PICKUP_COFFIN_OFFSET_X
|
|
// vPickupLoc.y += cfCMHDZ_PICKUP_COFFIN_OFFSET_Y
|
|
vPickupLoc.x -= 12.0
|
|
vPickupLoc.y += 36.0
|
|
|
|
|
|
// N.B Pickups in foreground lane (i.e. those in coffins / outhouses) wil not warp, and will vanish when off screne
|
|
|
|
iRandom = GET_RANDOM_INT_IN_RANGE(0, 6)
|
|
|
|
//-- If we're stopping on screen 8 in the Slaughterhouse level, want to force either a NAILGUN gun pickup or a health
|
|
//-- pickup
|
|
IF CMHDZ_GET_CURRENT_LEVEL() = CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
IF CMHDZ_IS_LEVEL_STOPPED()
|
|
OR CMHDZ_IS_MOVING_LEVEL_ABOUT_TO_STOP()
|
|
iPlaced = CMHDZ_GET_NUMBER_OF_PICKUPS_PLACED_INSIDE_PIGS_FOR_CURRENT_SCREEN()
|
|
IF iPlaced = 0
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER] Graveyard level - stopped - haven't placed any pickups inside coffin forcing NAILGUN gun")
|
|
iRandom = 8
|
|
ELIF iPlaced = 1
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER] Graveyard level - stopped - placed 1 pickupinside coffin forcing health")
|
|
iRandom = 5
|
|
ELSE
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER] Placed too many inside coffin - iPlaced: ", iPlaced)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH iRandom
|
|
CASE 0 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_RIFLE_AMMO, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
CASE 1 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_SHOTGUN_AMMO, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
CASE 2 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_HEALTH, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
CASE 3 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_BUFF, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
CASE 4 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_SHIELD, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
CASE 5 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_NAIL_GUN_AMMO, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
//CASE 2 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_REVOLVER_AMMO, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
//CASE 6 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_CASH, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
//CASE 6 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_MOLOTOV, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
//CASE 7 CMHDZ_ADD_ITEM_TO_LIST(vPickupLoc, CMHDZ_ITEM_NAILBOMB, ciCMHDZ_LANE_FOREGROUND, DEFAULT, 0.75) BREAK
|
|
ENDSWITCH
|
|
|
|
// Director dialogue
|
|
CMHDZ_HANDLE_DIRECTOR_ONE_OFF_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Props_Destroyed)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER] Spawned ammo inside outhouse ", iCover)
|
|
CMHDZ_COVER_DATA_SET_BIT_BY_BOOL(iCover, CMHDZ_COVER_DATA_BITS_SPAWNED_PICKUP)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
CMHDZ_PLAY_AUDIO_FOR_SHOT_COVER(iCover)
|
|
|
|
bProcessedThisFrame = TRUE
|
|
ENDPROC
|
|
|
|
FUNC INT CMHDZ_GET_AMOUNT_ENEMY_HAS_BEEN_DAMAGED(INT iEnemy, BOOL bHeadshot)
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_GET_AMOUNT_ENEMY_HAS_BEEN_DAMAGED] {dsw} ")
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_GET_AMOUNT_ENEMY_HAS_BEEN_DAMAGED] {dsw} Enemy ", iEnemy, " Shot at least once. Lane: ", sCMHDZData.sEnemyData[iEnemy].iEnemyLane, " Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType), " Headshot? ", bHeadshot)
|
|
#ENDIF
|
|
|
|
INT iBaseDamage
|
|
INT iRand
|
|
IF bHeadshot
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_GET_AMOUNT_ENEMY_HAS_BEEN_DAMAGED] {dsw} was headshot. Damage: ", CMHDZ_GET_ENEMY_START_HEALTH_FOR_TYPE())
|
|
RETURN CMHDZ_GET_ENEMY_START_HEALTH_FOR_TYPE()
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sEnemyData[iEnemy].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_GET_AMOUNT_ENEMY_HAS_BEEN_DAMAGED] {dsw} Foreground enemy. Damage: ", CMHDZ_GET_ENEMY_START_HEALTH_FOR_TYPE())
|
|
RETURN CMHDZ_GET_ENEMY_START_HEALTH_FOR_TYPE()
|
|
ENDIF
|
|
|
|
CMHDZ_PLAYER_WEAPON weapon = CMHDZ_GET_PLAYER_CURRENT_WEAPON()
|
|
CMHDZ_PLAYER_WEAPON_DATA data = CMHDZ_GET_PLAYER_WEAPON_DATA(weapon)
|
|
iBaseDamage = data.iMinDamagePerShot
|
|
|
|
IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_QUAD_DAMAGE)
|
|
iBaseDamage *= 4
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[0].weaponType = CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT
|
|
iRand = GET_RANDOM_INT_IN_RANGE(0, 4)
|
|
iBaseDamage += iRand
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_GET_AMOUNT_ENEMY_HAS_BEEN_DAMAGED] {dsw} Player has pistol. Damage: ", iBaseDamage)
|
|
RETURN iBaseDamage
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_GET_AMOUNT_ENEMY_HAS_BEEN_DAMAGED] {dsw} Player has weapon: ", CMHDZ_PLAYER_WEAPON_TO_STRING(weapon), " Returning: ", data.iMinDamagePerShot)
|
|
#ENDIF
|
|
|
|
RETURN data.iMinDamagePerShot
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY(INT iEnemy, INT iPlayer, INT iProjectile, VECTOR_2D vSpriteTopLeft, VECTOR_2D vBulletPos )
|
|
|
|
// Don't count it if they're already dying.
|
|
IF sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_DYING
|
|
OR sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_DYING_HEADSHOT
|
|
OR sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_DYING_BURNING
|
|
EXIT
|
|
ENDIF
|
|
|
|
// Don't process if it's the RAT.
|
|
IF sCMHDZData.sEnemyData[iEnemy].iEnemyType = CMHDZ_RARE_ENEMY_RAT
|
|
EXIT
|
|
ENDIF
|
|
|
|
BOOL bHeadshot
|
|
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_SHOT_AT_LEAST_ONCE)
|
|
CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(iEnemy, CMHDZ_ENEMY_DATA_BITS_SHOT_AT_LEAST_ONCE, TRUE)
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY] {dsw} Enemy ", iEnemy, " Shot at least once. Lane: ", sCMHDZData.sEnemyData[iEnemy].iEnemyLane, " Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType))
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
|
|
bHeadshot = CMHDZ_CHECK_FOR_HEADSHOT( vSpriteTopLeft, vBulletPos, sCMHDZData.sEnemyData[iEnemy].iEnemyLane )
|
|
sCMHDZData.sEnemyData[iEnemy].iHealth -= CMHDZ_GET_AMOUNT_ENEMY_HAS_BEEN_DAMAGED(iEnemy, bHeadshot)
|
|
IF sCMHDZData.sEnemyData[iEnemy].iHealth > 0
|
|
IF !bHeadshot
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_BODY, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
|
|
ELSE
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_HEADSHOT, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
|
|
ENDIF
|
|
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_IS_BONUS)
|
|
CMHDZ_PLAY_ENEMY_TYPE_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[iEnemy].iEnemyType, CMHDZ_AUDIO_EFFECT_ENEMY_INJURED, sCMHDZData.sEnemyData[iEnemy].vSpritePos, sCMHDZData.sEnemyData[iEnemy].iEnemyVoiceID)
|
|
ELSE
|
|
CMHDZ_PLAY_BONUS_PAIN_AUDIO(iEnemy)
|
|
ENDIF
|
|
|
|
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sPlayerData[iPlayer].eReticuleBits, CMHDZ_RETICLE_BITS_HIT_TARGET)
|
|
CMHDZ_INCREASE_ENEMY_HIT_COUNT_FOR_CURRENT_LEVEL(sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit)
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Enemy ", iEnemy, " Has been injured. New Health: ", sCMHDZData.sEnemyData[iEnemy].iHealth, " Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType))
|
|
#ENDIF
|
|
ELSE
|
|
|
|
IF bHeadshot
|
|
// AND NOT CMHDZ_IS_BEAR(iEnemy)
|
|
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT)
|
|
CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE( CMHDZ_SCORE_TYPE_ENEMY_HEADSHOT )
|
|
CMHDZ_INCREASE_ENEMY_HEADSHOT_COUNT_FOR_CURRENT_LEVEL()
|
|
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_AT_LEAST_ONE_HEADSHOT)
|
|
CMHDZ_INCREASE_ENEMY_HIT_COUNT_FOR_CURRENT_LEVEL(sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_SHOOT_HEADSHOT)
|
|
ELSE
|
|
CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE( CMHDZ_SCORE_TYPE_ENEMY )
|
|
CMHDZ_INCREASE_ENEMY_HIT_COUNT_FOR_CURRENT_LEVEL(sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit)
|
|
ENDIF
|
|
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_BODY, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_ENEMY_A_DEAD, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
|
|
|
|
// Bonus enemies run a different logic
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_IS_BONUS)
|
|
IF sCMHDZData.sEnemyData[iEnemy].eState != CMHDZ_ENEMY_STATE_DYING_BURNING
|
|
//CMHDZ_PLAY_ENEMY_TYPE_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[iEnemy].iEnemyType, CMHDZ_AUDIO_EFFECT_ENEMY_DEAD, sCMHDZData.sEnemyData[iEnemy].vSpritePos, sCMHDZData.sEnemyData[iEnemy].iEnemyVoiceID)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_ENEMY_DEAD, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
|
|
// ELSE // Is on fire
|
|
// CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_ENEMY_ON_FIRE, sCMHDZData.sEnemyData[iEnemy].vSpritePos)
|
|
ENDIF
|
|
ELSE
|
|
CMHDZ_PLAY_BONUS_DEATH_AUDIO(iEnemy)
|
|
ENDIF
|
|
|
|
sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_DYING
|
|
|
|
IF bHeadshot
|
|
// High velocity weapons only cause the head explosions.
|
|
// IF sCMHDZData.sPlayerData[0].activeWeapon = CMHDZ_PLAYER_WEAPON_RIFLE
|
|
// OR sCMHDZData.sPlayerData[0].activeWeapon = CMHDZ_PLAYER_WEAPON_SHOTGUN
|
|
sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_DYING_HEADSHOT
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill_Headshot)
|
|
// ENDIF
|
|
ENDIF
|
|
|
|
sCMHDZData.sEnemyData[iEnemy].fAnimTimer = 0.0
|
|
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sPlayerData[iPlayer].eReticuleBits, CMHDZ_RETICLE_BITS_DESTROYED_TARGET)
|
|
ENDIF
|
|
|
|
// Moving call to consider Hit count.
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit = TRUE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].iTimeOfHit = GET_GAME_TIMER()
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_BOSS(CMHDZ_BOSS_DATA &sBossData, INT iPlayer, INT iProjectile, VECTOR_2D vSpriteTopLeft, VECTOR_2D vBulletPos )
|
|
|
|
BOOL bHeadshot
|
|
UNUSED_PARAMETER(bHeadshot)
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit = TRUE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].iTimeOfHit = GET_GAME_TIMER()
|
|
|
|
bHeadshot = CMHDZ_CHECK_FOR_HEADSHOT( vSpriteTopLeft, vBulletPos, sBossData.iActiveLane )
|
|
//sBossData.fHealth -= CMHDZ_GET_AMOUNT_BOSS_HAS_BEEN_DAMAGED(sBossData, bHeadshot)
|
|
|
|
IF sCMHDZData.sBossData.fHealth > 0
|
|
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sPlayerData[iPlayer].eReticuleBits, CMHDZ_RETICLE_BITS_HIT_TARGET)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Enemy ", iEnemy, " Has been injured. New Health: ", sCMHDZData.sEnemyData[iEnemy].iHealth, " Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType))
|
|
#ENDIF
|
|
ELSE
|
|
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sPlayerData[iPlayer].eReticuleBits, CMHDZ_RETICLE_BITS_DESTROYED_TARGET)
|
|
ENDIF
|
|
|
|
CMHDZ_INCREASE_ENEMY_HIT_COUNT_FOR_CURRENT_LEVEL((sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit
|
|
OR sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHitObject)) // Unfir to penalise enemy accuracy on this one.
|
|
|
|
CMHDZ_HANDLE_BEARSY_DAMAGE(sBossData, bHeadshot)
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ITEM( INT iItem, INT iPlayer, INT iProjectile,BOOL &bProcessedThisFrame )
|
|
IF bProcessedThisFrame
|
|
EXIT
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ITEM] {dsw} Hit item", iItem, " Type: ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[iItem].eItemType))
|
|
#ENDIF
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHitObject = TRUE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].iTimeOfHit = GET_GAME_TIMER()
|
|
CMHDZ_INCREASE_ENEMY_HIT_COUNT_FOR_CURRENT_LEVEL((sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit
|
|
OR sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHitObject)) // Unfir to penalise enemy accuracy on this one.
|
|
|
|
sCMHDZData.sItemData[iItem].bShot = TRUE
|
|
|
|
CMHDZ_ACTIVATE_ITEM(iItem)
|
|
|
|
bProcessedThisFrame = TRUE
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_THROWN_WEAPON( INT iWeapon, INT iPlayer, INT iProjectile , BOOL &bProcessedThisFrame)
|
|
|
|
IF bProcessedThisFrame
|
|
EXIT
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] [CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_THROWN_WEAPON] {dsw} Hit thrown weapon ", iWeapon, " Type: ", CMHDZ_PROJECTILE_TYPES_TO_STRING(sCMHDZData.sEnemyProjectiles[iWeapon].eType))
|
|
#ENDIF
|
|
|
|
// Unfir to penalise enemy accuracy on this one.
|
|
CMHDZ_INCREASE_ENEMY_HIT_COUNT_FOR_CURRENT_LEVEL((sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit
|
|
OR sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHitObject)) // Unfir to penalise enemy accuracy on this one.
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit = TRUE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].iTimeOfHit = GET_GAME_TIMER()
|
|
sCMHDZData.sEnemyProjectiles[iWeapon].eState = CMHDZ_PROJECTILE_STATE_IMPACT
|
|
SET_CONTROL_SHAKE(FRONTEND_CONTROL, 100, 20)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_EXP_DYNAMITE, sCMHDZData.sEnemyProjectiles[iWeapon].vSpritePos)
|
|
|
|
//CMHDZ_KILL_ALL_ENEMIES_IN_AREA(sCMHDZData.sEnemyProjectiles[iWeapon].vSpritePos, INIT_VECTOR_2D(cfCMHDZ_SPRITE_GANG_THROWN_EXPLOSION_LARGE_WIDTH, cfCMHDZ_SPRITE_GANG_THROWN_EXPLOSION_LARGE_HEIGHT), 2.0)
|
|
SWITCH sCMHDZData.sEnemyProjectiles[iWeapon].eType
|
|
CASE CMHDZ_PROJECTILE_DYNAMITE
|
|
TWS_CREATE_FX(sCMHDZData.sEnemyProjectiles[iWeapon].vSpritePos, CMHDZ_FX_ENEMY_TNT_EXP, 1)
|
|
CMHDZ_KILL_ALL_ENEMIES_IN_RANGE(sCMHDZData.sEnemyProjectiles[iWeapon].vSpritePos, 1500)
|
|
BREAK
|
|
|
|
// Stopped bearsy projectile midair.
|
|
CASE CMHDZ_PROJECTILE_JOWL
|
|
CASE CMHDZ_PROJECTILE_LEG
|
|
CASE CMHDZ_PROJECTILE_TROTTER
|
|
CASE CMHDZ_PROJECTILE_BONE
|
|
TWS_CREATE_FX(sCMHDZData.sEnemyProjectiles[iWeapon].vSpritePos, CMHDZ_FX_BLOOD_SPLAT, ciCMHDZ_LANE_FOREGROUND)
|
|
TWS_CREATE_FX(sCMHDZData.sEnemyProjectiles[iWeapon].vSpritePos, CMHDZ_FX_BEARSY_FOREGROUND_PAIN_BLOOD, ciCMHDZ_LANE_FOREGROUND)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
bProcessedThisFrame = TRUE
|
|
ENDPROC
|
|
|
|
|
|
PROC HANDLE_PLAYER_BULLET_COLLISION(INT iPlayer, INT iProjectile)
|
|
|
|
IF NOT sCMHDZData.sPlayerData[iPlayer].bHasJustShot
|
|
EXIT
|
|
ENDIF
|
|
|
|
INT i
|
|
CMHDZ_PLAYER_WEAPON_DATA weaponData
|
|
weaponData = CMHDZ_GET_PLAYER_WEAPON_DATA(CMHDZ_GET_PLAYER_CURRENT_WEAPON())
|
|
|
|
FLOAT fSpreadModifier = weaponData.fSpreadModifier
|
|
|
|
INT iMaxEnemyImpacts = weaponData.iMaxEnemyImpacts
|
|
|
|
FLOAT fDistance, fDistanceX, fDistanceY, x1, x2, y1, y2 // Top-left & Bottom-right corners of collision
|
|
VECTOR_2D vBulletPos = INIT_VECTOR_2D(sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.X, sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.Y)
|
|
|
|
INT iEnemyHit[ciCMHDZ_MAX_ENEMY_SHOT_AT_ONCE]
|
|
INT iCurrentNumberOfEnemyHit = 0
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMY_SHOT_AT_ONCE -1
|
|
iEnemyHit[i] = -1
|
|
ENDFOR
|
|
|
|
INT iCoverHit = -1
|
|
INT iItemHit = -1
|
|
INT iThrownHit = -1
|
|
BOOL bBossHit
|
|
|
|
FLOAT fModifier
|
|
FLOAT fWidth
|
|
FLOAT fHeight
|
|
FOR i = 0 TO ciCMHDZ_MAX_COVER -1
|
|
IF CMHDZ_DRAW_COVER_PROCESS_CHECK(i, sCMHDZData.sCoverData[i].iCoverLane, CMHDZ_COVER_DATA_IS_BITMASK_SET(i, CMHDZ_COVER_DATA_BITS_IS_FAR_BG))
|
|
fModifier = CMHDZ_COVER_UTIL_GET_SIZE_MODIFIER_FOR_COLLISION_CHECK(sCMHDZData.sCoverData[i].eType)
|
|
fWidth = sCMHDZData.sCoverData[i].fCoverWidth * fModifier
|
|
fHeight = sCMHDZData.sCoverData[i].fCoverHeight * fModifier
|
|
|
|
IF fWidth <= 0.0
|
|
SCRIPT_ASSERT("[BAZ][HANDLE_PLAYER_BULLET_COLLISION] Width is returning 0.0 for cover so will never get hit. Check object initialisation.")
|
|
ENDIF
|
|
|
|
x1 = sCMHDZData.sCoverData[i].vSpritePos.x - (fWidth/2)
|
|
y1 = sCMHDZData.sCoverData[i].vSpritePos.y - (fHeight/2)
|
|
|
|
x2 = sCMHDZData.sCoverData[i].vSpritePos.x + (fWidth/2)
|
|
y2 = sCMHDZData.sCoverData[i].vSpritePos.y + (fHeight/2)
|
|
|
|
IF (sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.X > x1 AND sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.X < x2
|
|
AND sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.Y > y1 AND sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.Y < y2)
|
|
IF iCoverHit = -1
|
|
OR sCMHDZData.sCoverData[i].iCoverLane > sCMHDZData.sCoverData[iCoverHit].iCoverLane
|
|
OR (CMHDZ_COVER_DATA_IS_BITMASK_SET(i, CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER) AND NOT CMHDZ_COVER_DATA_IS_BITMASK_SET(iCoverHit, CMHDZ_COVER_DATA_BITS_IS_SPECIAL_COVER))
|
|
OR (CMHDZ_COVER_DATA_IS_BITMASK_SET(i, CMHDZ_COVER_DATA_BITS_IS_ANIMATED) AND NOT CMHDZ_COVER_DATA_IS_BITMASK_SET(iCoverHit, CMHDZ_COVER_DATA_BITS_IS_ANIMATED))
|
|
iCoverHit = i
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
BOOL bBulletHitEnemyCoordCheck
|
|
FLOAT fSpreadDistanceX
|
|
FLOAT fSpreadDistanceY
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES -1
|
|
|
|
bBulletHitEnemyCoordCheck = FALSE
|
|
IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
|
|
OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_STUNNED
|
|
IF sCMHDZData.sEnemyData[i].iHealth > 0
|
|
|
|
x1 = sCMHDZData.sEnemyData[i].vSpritePos.x - (sCMHDZData.sEnemyData[i].vSize.x/2)
|
|
y1 = sCMHDZData.sEnemyData[i].vSpritePos.y - (sCMHDZData.sEnemyData[i].vSize.y/2)
|
|
|
|
x2 = sCMHDZData.sEnemyData[i].vSpritePos.x + (sCMHDZData.sEnemyData[i].vSize.x/2)
|
|
y2 = sCMHDZData.sEnemyData[i].vSpritePos.y + (sCMHDZData.sEnemyData[i].vSize.y/2)
|
|
|
|
IF sCMHDZData.sEnemyData[i].iEnemyType = CMHDZ_FOREGROUND_ENEMY_T5_2
|
|
x1 -= (160.0)
|
|
y1 -= (100.0)
|
|
x2 += (160.0)
|
|
y2 += (100.0)
|
|
ENDIF
|
|
|
|
IF fSpreadModifier = 1.0
|
|
OR sCMHDZData.sEnemyData[i].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
|
|
IF sCMHDZData.sEnemyData[i].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
|
|
x1 -= (fSpreadModifier/2.0)
|
|
x2 += (fSpreadModifier/2.0)
|
|
ENDIF
|
|
|
|
IF (vBulletPos.X > x1 AND vBulletPos.X < x2
|
|
AND vBulletPos.Y > y1 AND vBulletPos.Y < y2)
|
|
bBulletHitEnemyCoordCheck = TRUE
|
|
ENDIF
|
|
ELSE
|
|
// Size up if enemy is in the foreground.
|
|
// IF sCMHDZData.sEnemyData[i].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
|
|
// fSpreadModifier *= 1.5
|
|
// ENDIF
|
|
|
|
fSpreadDistanceX = sCMHDZData.sEnemyData[i].vSpritePos.x - vBulletPos.X
|
|
fSpreadDistanceY = sCMHDZData.sEnemyData[i].vSpritePos.Y - vBulletPos.Y
|
|
IF ((fSpreadDistanceX * fSpreadDistanceX) + (fSpreadDistanceY * fSpreadDistanceY ) < (fSpreadModifier * fSpreadModifier))
|
|
bBulletHitEnemyCoordCheck = TRUE
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Potential Enemy SPREAD hit: ",i, " fSpreadModifier: ", fSpreadModifier, " Current weapon: ", CMHDZ_PLAYER_WEAPON_TO_STRING(CMHDZ_GET_PLAYER_CURRENT_WEAPON()))
|
|
ENDIF
|
|
// Rest modifier
|
|
fSpreadModifier = weaponData.fSpreadModifier
|
|
ENDIF
|
|
|
|
IF bBulletHitEnemyCoordCheck
|
|
IF iMaxEnemyImpacts = 1
|
|
AND iCurrentNumberOfEnemyHit < ciCMHDZ_MAX_ENEMY_SHOT_AT_ONCE
|
|
IF iEnemyHit[iCurrentNumberOfEnemyHit] = -1
|
|
OR sCMHDZData.sEnemyData[i].iEnemyLane > sCMHDZData.sEnemyData[iEnemyHit[iCurrentNumberOfEnemyHit]].iEnemyLane
|
|
iEnemyHit[iCurrentNumberOfEnemyHit] = i
|
|
iCurrentNumberOfEnemyHit++
|
|
ENDIF
|
|
ELSE
|
|
IF iCurrentNumberOfEnemyHit < iMaxEnemyImpacts
|
|
IF iEnemyHit[iCurrentNumberOfEnemyHit] = -1
|
|
iEnemyHit[iCurrentNumberOfEnemyHit] = i
|
|
iCurrentNumberOfEnemyHit++
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Potential Enemy hit: ",i, " Lane: ", sCMHDZData.sEnemyData[i].iEnemyLane, " Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Potential Enemy hit: ",i, " Bullet: ",vBulletPos.x, ", ", vBulletPos.y, " Point1: ", x1, ", ", y1, " Point2: ",x2, ", ", y2)
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Number of Potential Enemy hits: ", iCurrentNumberOfEnemyHit, " Max with weapon: ", iMaxEnemyImpacts, " Weapon: ", CMHDZ_PLAYER_WEAPON_TO_STRING(CMHDZ_GET_PLAYER_CURRENT_WEAPON()))
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_ITEMS -1
|
|
|
|
IF NOT sCMHDZData.sItemData[i].bShot
|
|
IF sCMHDZData.sItemData[i].bRendering
|
|
fDistanceX = sCMHDZData.sPlayerData[iPlayer].vSpriteFinalReticlePos.x - sCMHDZData.sItemData[i].vSpritePos.x
|
|
fDistanceY = sCMHDZData.sPlayerData[iPlayer].vSpriteFinalReticlePos.y - sCMHDZData.sItemData[i].vSpritePos.y
|
|
fDistance = SQRT(fDistanceX * fDistanceX + fDistanceY * fDistanceY)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Checking item: ", i, " Type: ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[i].eItemType), " Pos: ", sCMHDZData.sItemData[i].vSpritePos.x, ", ", sCMHDZData.sItemData[i].vSpritePos.y, " Rendering: ", sCMHDZData.sItemData[i].bRendering, " Dist from bullet : ", fDistance)
|
|
#ENDIF
|
|
|
|
IF fDistance < 60
|
|
IF iItemHit = -1
|
|
OR sCMHDZData.sItemData[i].iLane > sCMHDZData.sItemData[iItemHit].iLane
|
|
// CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ITEM(i,iPlayer, iProjectile )
|
|
iItemHit = i
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Potential Item hit: ",i, " Lane: ", sCMHDZData.sItemData[i].iLane, " Type: ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[i].eItemType))
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Not checking item as bShot Item: ",i, " Lane: ", sCMHDZData.sItemData[i].iLane, " Type: ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[i].eItemType), " Pos: ", sCMHDZData.sItemData[i].vSpritePos.x, ", ", sCMHDZData.sItemData[i].vSpritePos.y)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
VECTOR_2D v2ProjSize
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMY_PROJECTILES -1
|
|
IF sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_DYNAMITE
|
|
OR sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_JOWL
|
|
OR sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_LEG
|
|
OR sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_TROTTER
|
|
OR sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_BONE
|
|
IF sCMHDZData.sEnemyProjectiles[i].eState = CMHDZ_PROJECTILE_STATE_AIRBORNE
|
|
SWITCH sCMHDZData.sEnemyProjectiles[i].iSpriteAnimFrame
|
|
CASE 0 v2ProjSize = INIT_VECTOR_2D(ciCMHDZ_DYNAMITE_SMALL_WIDTH, ciCMHDZ_DYNAMITE_SMALL_HEIGHT) BREAK
|
|
CASE 1 v2ProjSize = INIT_VECTOR_2D(ciCMHDZ_DYNAMITE_SMALL_WIDTH, ciCMHDZ_DYNAMITE_SMALL_HEIGHT) BREAK
|
|
CASE 2 v2ProjSize = INIT_VECTOR_2D(ciCMHDZ_DYNAMITE_MEDIUM_WIDTH, ciCMHDZ_DYNAMITE_MEDIUM_HEIGHT) BREAK
|
|
CASE 3 v2ProjSize = INIT_VECTOR_2D(ciCMHDZ_DYNAMITE_MEDIUM_WIDTH, ciCMHDZ_DYNAMITE_MEDIUM_HEIGHT) BREAK
|
|
CASE 4 v2ProjSize = INIT_VECTOR_2D(ciCMHDZ_DYNAMITE_LARGE_WIDTH, ciCMHDZ_DYNAMITE_LARGE_HEIGHT) BREAK
|
|
CASE 5 v2ProjSize = INIT_VECTOR_2D(ciCMHDZ_DYNAMITE_LARGE_WIDTH, ciCMHDZ_DYNAMITE_LARGE_HEIGHT) BREAK
|
|
ENDSWITCH
|
|
|
|
x1 = sCMHDZData.sEnemyProjectiles[i].vSpritePos.x - (v2ProjSize.x/2)
|
|
y1 = sCMHDZData.sEnemyProjectiles[i].vSpritePos.y - (v2ProjSize.y/2)
|
|
|
|
x2 = sCMHDZData.sEnemyProjectiles[i].vSpritePos.x + (v2ProjSize.x/2)
|
|
y2 = sCMHDZData.sEnemyProjectiles[i].vSpritePos.y + (v2ProjSize.y/2)
|
|
|
|
// Increase size can be a bit too hard to hit
|
|
IF sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_DYNAMITE
|
|
x1 -= (120.0 + fSpreadModifier)
|
|
y1 -= (120.0 + fSpreadModifier)
|
|
x2 += (120.0 + fSpreadModifier)
|
|
y2 += (120.0 + fSpreadModifier)
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_JOWL
|
|
OR sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_LEG
|
|
OR sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_TROTTER
|
|
OR sCMHDZData.sEnemyProjectiles[i].eType = CMHDZ_PROJECTILE_BONE
|
|
x1 -= (180.0 + fSpreadModifier)
|
|
y1 -= (180.0 + fSpreadModifier)
|
|
x2 += (180.0 + fSpreadModifier)
|
|
y2 += (180.0 + fSpreadModifier)
|
|
ENDIF
|
|
|
|
IF (vBulletPos.X > x1 AND sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.X < x2
|
|
AND vBulletPos.Y > y1 AND sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.Y < y2)
|
|
IF iThrownHit = -1
|
|
// CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_THROWN_WEAPON(i, iPlayer, iProjectile)
|
|
iThrownHit = i
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Potential thrown weapon hit: ",i, " Lane: ", sCMHDZData.sEnemyProjectiles[i].iLane, " Type: ", CMHDZ_PROJECTILE_TYPES_TO_STRING(sCMHDZData.sEnemyProjectiles[i].eType))
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
// Hit bearsy
|
|
VECTOR_2D v2BearsySize
|
|
v2BearsySize = sCMHDZData.sBossData.vScale
|
|
x1 = sCMHDZData.sBossData.vSpritePos.x - (v2BearsySize.x/1.5)
|
|
y1 = sCMHDZData.sBossData.vSpritePos.y - (v2BearsySize.y/1.5)
|
|
|
|
x2 = sCMHDZData.sBossData.vSpritePos.x + (v2BearsySize.x/1.5)
|
|
y2 = sCMHDZData.sBossData.vSpritePos.y + (v2BearsySize.y/1.5)
|
|
|
|
IF fSpreadModifier = 1.0
|
|
OR sCMHDZData.sBossData.iActiveLane = ciCMHDZ_LANE_FOREGROUND
|
|
|
|
IF sCMHDZData.sEnemyData[i].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
|
|
x1 -= (fSpreadModifier/2.0)
|
|
x2 += (fSpreadModifier/2.0)
|
|
y1 -= (fSpreadModifier/2.0)
|
|
y2 += (fSpreadModifier/2.0)
|
|
ENDIF
|
|
|
|
IF (vBulletPos.X > x1 AND vBulletPos.X < x2
|
|
AND vBulletPos.Y > y1 AND vBulletPos.Y < y2)
|
|
bBulletHitEnemyCoordCheck = TRUE
|
|
ENDIF
|
|
ELSE
|
|
// Size up if enemy is in the foreground.
|
|
// IF sCMHDZData.sBossData.iActiveLane = ciCMHDZ_LANE_FOREGROUND
|
|
// fSpreadModifier *= 2.0
|
|
// ENDIF
|
|
|
|
fSpreadDistanceX = sCMHDZData.sBossData.vSpritePos.x - vBulletPos.X
|
|
fSpreadDistanceY = sCMHDZData.sBossData.vSpritePos.Y - vBulletPos.Y
|
|
IF ((fSpreadDistanceX * fSpreadDistanceX) + (fSpreadDistanceY * fSpreadDistanceY ) < (fSpreadModifier * fSpreadModifier))
|
|
bBulletHitEnemyCoordCheck = TRUE
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[HANDLE_PLAYER_BULLET_COLLISION] {dsw} Potential Enemy SPREAD hit: ",i, " fSpreadModifier: ", fSpreadModifier, " Current weapon: ", CMHDZ_PLAYER_WEAPON_TO_STRING(CMHDZ_GET_PLAYER_CURRENT_WEAPON()))
|
|
ENDIF
|
|
|
|
fSpreadModifier = weaponData.fSpreadModifier
|
|
ENDIF
|
|
|
|
IF (bBulletHitEnemyCoordCheck)
|
|
IF !bBossHit
|
|
bBossHit = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//-- Figure out what we actually hit.
|
|
IF iThrownHit = -1 AND iCoverHit = -1 AND iItemHit = -1 AND iEnemyHit[0] = -1 AND !bBossHit
|
|
//-- Didn't hit anything
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BULLET_HIT_GENERIC, vBulletPos)
|
|
ENDIF
|
|
|
|
|
|
BOOL bProcessedHitCoverThisFrame = FALSE
|
|
BOOL bProcessedHitItemsThisFrame = FALSE
|
|
// BOOL bProcessedHitHostagesThisFrame = FALSE
|
|
BOOL bProcessedHitThrownObjectsThisFrame = FALSE
|
|
i = 0
|
|
|
|
// For any given lane, Cover > Items > Enemy > Hostages
|
|
|
|
IF iThrownHit >= 0
|
|
//-- Hit thrown explosive
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_THROWN_WEAPON(iThrownHit, iPlayer, iProjectile, bProcessedHitThrownObjectsThisFrame)
|
|
ENDIF
|
|
|
|
IF iCurrentNumberOfEnemyHit = 0
|
|
iCurrentNumberOfEnemyHit = 1
|
|
ENDIF
|
|
|
|
|
|
FOR i = 0 TO iCurrentNumberOfEnemyHit - 1
|
|
|
|
|
|
//-- If we've hit a foreground enemy, go with that
|
|
IF iEnemyHit[i] > -1 AND sCMHDZData.sEnemyData[iEnemyHit[i]].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY(iEnemyHit[i], iPlayer, iProjectile, INIT_VECTOR_2D(sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.x - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.x/2), sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.y - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.y/2)), vBulletPos)
|
|
ELIF iItemHit > -1 AND sCMHDZData.sItemData[iItemHit].iLane = ciCMHDZ_LANE_FOREGROUND
|
|
//-- Hit a foreground item - generally a pickup hidden in an out house
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ITEM(iItemHit,iPlayer, iProjectile, bProcessedHitItemsThisFrame )
|
|
ELIF iEnemyHit[i] > -1 AND CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemyHit[i], CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
//-- Enemy peds that 'pop up' behind buildings can always be hit
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY(iEnemyHit[i], iPlayer, iProjectile, INIT_VECTOR_2D(sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.x - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.x/2), sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.y - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.y/2)), vBulletPos)
|
|
ELSE
|
|
IF iItemHit > -1
|
|
IF sCMHDZData.sItemData[iItemHit].iLane = ciCMHDZ_LANE_MIDDLE
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ITEM(iItemHit,iPlayer, iProjectile, bProcessedHitItemsThisFrame )
|
|
ELIF sCMHDZData.sItemData[iItemHit].iLane = ciCMHDZ_LANE_BACKGROUND
|
|
IF iEnemyHit[i] > -1 AND sCMHDZData.sEnemyData[iEnemyHit[i]].iEnemyLane = ciCMHDZ_LANE_MIDDLE
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY(iEnemyHit[i], iPlayer, iProjectile, INIT_VECTOR_2D(sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.x - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.x/2), sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.y - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.y/2)), vBulletPos)
|
|
ELSE
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ITEM(iItemHit,iPlayer, iProjectile, bProcessedHitItemsThisFrame )
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF iCoverHit > -1
|
|
IF sCMHDZData.sCoverData[iCoverHit].iCoverLane = ciCMHDZ_LANE_MIDDLE
|
|
AND NOT CMHDZ_CAN_SHOOT_THROUGH_COVER(iCoverHit)
|
|
//-- Hit cover in middle lane
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER(iCoverHit, iPlayer, iProjectile, bProcessedHitCoverThisFrame)
|
|
ELIF sCMHDZData.sCoverData[iCoverHit].iCoverLane = ciCMHDZ_LANE_BACKGROUND
|
|
OR CMHDZ_CAN_SHOOT_THROUGH_COVER(iCoverHit)
|
|
//-- Background cover hit, check if anything in front of it
|
|
IF iItemHit > -1 AND sCMHDZData.sItemData[iItemHit].iLane = ciCMHDZ_LANE_MIDDLE
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ITEM(iItemHit,iPlayer, iProjectile, bProcessedHitItemsThisFrame )
|
|
ELIF iEnemyHit[i] > -1 AND ( sCMHDZData.sEnemyData[iEnemyHit[i]].iEnemyLane = ciCMHDZ_LANE_MIDDLE OR CMHDZ_CAN_SHOOT_THROUGH_COVER(iCoverHit))
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY(iEnemyHit[i], iPlayer, iProjectile, INIT_VECTOR_2D(sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.x - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.x/2), sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.y - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.y/2)), vBulletPos)
|
|
ELIF iEnemyHit[i] > -1 AND ( sCMHDZData.sEnemyData[iEnemyHit[i]].iEnemyLane = ciCMHDZ_LANE_BACKGROUND)
|
|
//-- Be generous with peds sticking their heads above cover
|
|
fModifier = CMHDZ_COVER_UTIL_GET_SIZE_MODIFIER_FOR_COLLISION_CHECK(sCMHDZData.sCoverData[iCoverHit].eType)
|
|
fHeight = sCMHDZData.sCoverData[iCoverHit].fCoverHeight * fModifier
|
|
|
|
IF sCMHDZData.sCoverData[iCoverHit].vSpritePos.y - (fHeight /2.0) < (sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.y + (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.y / 2.0))
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY(iEnemyHit[i], iPlayer, iProjectile, INIT_VECTOR_2D(sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.x - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.x/2), sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.y - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.y/2)), vBulletPos)
|
|
ENDIF
|
|
|
|
ELSE
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_COVER(iCoverHit, iPlayer, iProjectile, bProcessedHitCoverThisFrame)
|
|
ENDIF
|
|
ENDIF
|
|
ELIF iEnemyHit[i] > -1
|
|
IF sCMHDZData.sEnemyData[iEnemyHit[i]].iEnemyLane = ciCMHDZ_LANE_MIDDLE
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY(iEnemyHit[i], iPlayer, iProjectile, INIT_VECTOR_2D(sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.x - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.x/2), sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.y - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.y/2)), vBulletPos)
|
|
ELIF sCMHDZData.sEnemyData[iEnemyHit[i]].iEnemyLane = ciCMHDZ_LANE_BACKGROUND
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_ENEMY(iEnemyHit[i], iPlayer, iProjectile, INIT_VECTOR_2D(sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.x - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.x/2), sCMHDZData.sEnemyData[iEnemyHit[i]].vSpritePos.y - (sCMHDZData.sEnemyData[iEnemyHit[i]].vSize.y/2)), vBulletPos)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
IF bBossHit
|
|
CMHDZ_HANDLE_PLAYER_BULLET_COLLISION_WITH_BOSS(sCMHDZData.sBossData, iPlayer, iProjectile, INIT_VECTOR_2D(sCMHDZData.sBossData.vSpritePos.x - (sCMHDZData.sBossData.vScale.x/2), sCMHDZData.sBossData.vSpritePos.y - (sCMHDZData.sBossData.vSpritePos.y/2)), vBulletPos)
|
|
ENDIF
|
|
|
|
// Harsh to punish accuracy like this. Hits reset if you take damage.
|
|
// IF NOT bHitSomething
|
|
// IF CMHDZ_GET_PLAYER_SUCESSIVE_HITS() != 1
|
|
// CMHDZ_RESET_PLAYER_SUCCESSIVE_HITS()
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_ACTIVATE_MENU_OPTION(CMHDZ_MENU_OPTIONS eOption)
|
|
/*
|
|
CMHDZ_LEVEL_CITY
|
|
CMHDZ_LEVEL_SCRAPYARD,
|
|
CMHDZ_LEVEL_ASYLUM,
|
|
CMHDZ_LEVEL_PARK,
|
|
CMHDZ_LEVEL_SLAUGHTERHOUSE,
|
|
*/
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] CMHDZ_ACTIVATE_MENU_OPTION ")
|
|
|
|
SWITCH eOption
|
|
CASE CMHDZ_START
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_BULLET_HIT_START)
|
|
//DG_START_MOVIE(sCMHDZData.bmIdCmhdzIntro, "CMHDZ_Intro_FadeOut")
|
|
CMHDZ_START_MOVIE_FORCE(sCMHDZData.bmIdCmhdzIntro, "CMHDZ_Intro_FadeOut")
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_TITLE_FADEOUT)
|
|
BREAK
|
|
|
|
CASE CMHDZ_SCORES
|
|
IF NOT sCMHDZData.bSkipLeaderboard
|
|
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_BULLET_HIT_OPTION)
|
|
|
|
CMHDZ_INIT_GOTO_LEADERBOARD()
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD)
|
|
// CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_WANTED_1
|
|
|
|
sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_CITY
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SELECT_STAGE)
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_STOP)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Slums)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL)
|
|
|
|
BREAK
|
|
CASE CMHDZ_WANTED_2
|
|
|
|
sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_SCRAPYARD
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SELECT_STAGE)
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_STOP)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Junkyard)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL)
|
|
|
|
|
|
BREAK
|
|
CASE CMHDZ_WANTED_3
|
|
|
|
sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_ASYLUM
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SELECT_STAGE)
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_STOP)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Asylum)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL)
|
|
|
|
|
|
BREAK
|
|
CASE CMHDZ_WANTED_4
|
|
|
|
sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_PARK
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SELECT_STAGE)
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_STOP)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Theme_Park)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL)
|
|
|
|
|
|
BREAK
|
|
CASE CMHDZ_WANTED_5
|
|
|
|
sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SELECT_STAGE)
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_STOP)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Level_Select_Slaughterhouse)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL)
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_REWIND
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_BULLET_HIT_OPTION)
|
|
CMHDZ_SET_RESULT_SCREEN_STATE(CMHDZ_RESULT_SCREEN_STATE_START_REWIND)
|
|
BREAK
|
|
|
|
CASE CMHDZ_EJECT
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_BULLET_HIT_OPTION)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Quit)
|
|
CMHDZ_SET_RESULT_SCREEN_STATE(CMHDZ_RESULT_SCREEN_STATE_GOTO_LEADERBOARD)
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC HANDLE_PLAYER_BULLET_IN_MENU(INT iPlayer, INT iProjectile)
|
|
|
|
IF NOT sCMHDZData.sPlayerData[iPlayer].bHasJustShot
|
|
EXIT
|
|
ENDIF
|
|
|
|
INT i
|
|
// FLOAT x1, x2, y1, y2 // Top-left & Bottom-right corners of collision
|
|
|
|
|
|
BOOL bHitSomething
|
|
FOR i = 0 TO ciCMHDZ_MAX_MENU_OPTIONS-1
|
|
|
|
IF sCMHDZData.sMenuOptionsData[i].eClientState = sCMHDZData.eClientState
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].bHit = TRUE
|
|
|
|
// x1 = sCMHDZData.sMenuOptionsData[i].vSpritePos.x - (sCMHDZData.sMenuOptionsData[i].vSize.x/2)
|
|
// y1 = sCMHDZData.sMenuOptionsData[i].vSpritePos.y - (sCMHDZData.sMenuOptionsData[i].vSize.y/2)
|
|
//
|
|
// x2 = sCMHDZData.sMenuOptionsData[i].vSpritePos.x + (sCMHDZData.sMenuOptionsData[i].vSize.x/2)
|
|
// y2 = sCMHDZData.sMenuOptionsData[i].vSpritePos.y + (sCMHDZData.sMenuOptionsData[i].vSize.y/2)
|
|
//
|
|
|
|
|
|
// IF sCMHDZData.sMenuOptionsData[i].eMenuOption = CMHDZ_START
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [HANDLE_PLAYER_BULLET_IN_MENU] ")
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [HANDLE_PLAYER_BULLET_IN_MENU] Sprite Pos X: ", sCMHDZData.sMenuOptionsData[i].vSpritePos.x, " Pos Y: ",sCMHDZData.sMenuOptionsData[i].vSpritePos.y)
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [HANDLE_PLAYER_BULLET_IN_MENU] Sprite Size X: ", sCMHDZData.sMenuOptionsData[i].vSize.x, " Size Y: ", sCMHDZData.sMenuOptionsData[i].vSize.y)
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [HANDLE_PLAYER_BULLET_IN_MENU] Sprite (x1, y1) : ", x1, " , ", y1, " (x2, y2): ", x2, ", ", y2)
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [HANDLE_PLAYER_BULLET_IN_MENU] Bullet x: ", sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.X, " y: ", sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.y)
|
|
//
|
|
//
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [HANDLE_PLAYER_BULLET_IN_MENU] ")
|
|
// ENDIF
|
|
|
|
// IF (sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.X > x1 AND sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.X < x2
|
|
// AND sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.Y > y1 AND sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos.Y < y2)
|
|
|
|
IF CMHDZ_IS_POSITION_OVER_MENU_OPTION(sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].vSpritePos, INT_TO_ENUM(CMHDZ_MENU_OPTIONS, i))
|
|
bHitSomething = TRUE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[iProjectile].iTimeOfHit = GET_GAME_TIMER()
|
|
IF CMHDZ_IS_MENU_OPTION_UNLOCKED(sCMHDZData.sMenuOptionsData[i].eMenuOption)
|
|
CMHDZ_ACTIVATE_MENU_OPTION(sCMHDZData.sMenuOptionsData[i].eMenuOption)
|
|
ELSE
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SCREEN_LOCKED)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
IF NOT bHitSomething
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_BULLET_HIT_MISS)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_CHECK_PLAYER_HOVERING_ENEMY()
|
|
|
|
FLOAT distanceX, distanceY, fDistance
|
|
INT iPlayer, i
|
|
|
|
FOR iPlayer = 0 TO ciCMHDZ_MAX_PLAYERS - 1
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].bHoveringEnemy = FALSE
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES -1
|
|
|
|
IF (sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING)
|
|
AND sCMHDZData.sEnemyData[i].iHealth > 0
|
|
distanceX = sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos.x - sCMHDZData.sEnemyData[i].vSpritePos.x
|
|
distanceY = sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos.y - sCMHDZData.sEnemyData[i].vSpritePos.y
|
|
fDistance = SQRT(distanceX * distanceX + distanceY * distanceY)
|
|
|
|
IF fDistance <= 112 * CMHDZ_GET_ENEMY_TYPE_SCALE_FOR_LANE(sCMHDZData.sEnemyData[i].iEnemyLane)
|
|
sCMHDZData.sPlayerData[iPlayer].bHoveringEnemy = TRUE
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_ITEMS -1
|
|
|
|
IF NOT sCMHDZData.sItemData[i].bShot
|
|
IF sCMHDZData.sItemData[i].bRendering
|
|
distanceX = sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos.x - sCMHDZData.sItemData[i].vSpritePos.x
|
|
distanceY = sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos.y - sCMHDZData.sItemData[i].vSpritePos.y
|
|
fDistance = SQRT(distanceX * distanceX + distanceY * distanceY)
|
|
|
|
IF fDistance <= 76
|
|
sCMHDZData.sPlayerData[iPlayer].bHoveringEnemy = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
ENDFOR
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_CHECK_PLAYER_HOVERING_MENU_OPTION()
|
|
|
|
// FLOAT x1, x2, y1, y2 // Top-left & Bottom-right corners of collision
|
|
|
|
INT iPlayer, i
|
|
FOR iPlayer = 0 TO ciCMHDZ_MAX_PLAYERS - 1
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].bHoveringEnemy = FALSE
|
|
|
|
FOR i = 0 TO ciCMHDZ_MAX_MENU_OPTIONS-1
|
|
|
|
IF sCMHDZData.sMenuOptionsData[i].eClientState = sCMHDZData.eClientState
|
|
|
|
// x1 = sCMHDZData.sMenuOptionsData[i].vSpritePos.x - (sCMHDZData.sMenuOptionsData[i].vSize.x/2)
|
|
// y1 = sCMHDZData.sMenuOptionsData[i].vSpritePos.y - (sCMHDZData.sMenuOptionsData[i].vSize.y/2)
|
|
//
|
|
// x2 = sCMHDZData.sMenuOptionsData[i].vSpritePos.x + (sCMHDZData.sMenuOptionsData[i].vSize.x/2)
|
|
// y2 = sCMHDZData.sMenuOptionsData[i].vSpritePos.y + (sCMHDZData.sMenuOptionsData[i].vSize.y/2)
|
|
//
|
|
// IF (sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos.x > x1
|
|
// AND sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos.x < x2
|
|
// AND sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos.y > y1
|
|
// AND sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos.Y < y2)
|
|
|
|
IF CMHDZ_IS_POSITION_OVER_MENU_OPTION(sCMHDZData.sPlayerData[iPlayer].vSpriteInitReticlePos, INT_TO_ENUM(CMHDZ_MENU_OPTIONS, i))
|
|
sCMHDZData.sPlayerData[iPlayer].bHoveringEnemy = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
ENDFOR
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_HANDLE_RETICULE_MOVEMENT(BOOL bAllowRightStick = TRUE, BOOL bInMenu = FALSE)
|
|
|
|
IF CMHDZ_IS_PLAYER_PLAYING()
|
|
IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() <= 0.0
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
FLOAT fAxisThresholdMod = cfIAP_CONTROLLER_AXIS_THRESHOLD_MOD
|
|
|
|
FLOAT fLeftLimit = 305.0
|
|
FLOAT fRightLimit = cfRIGHT_SCREEN_LIMIT
|
|
FLOAT fDownLimit = 80.0
|
|
FLOAT fUpLimit = 995.0
|
|
|
|
IF NOT IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
// Controller
|
|
FLOAT fRightStickX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
|
|
FLOAT fRightStickY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
|
|
FLOAT fLeftStickX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X)
|
|
FLOAT fLeftStickY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y)
|
|
|
|
IF (bAllowRightStick = FALSE)
|
|
fRightStickX = 0
|
|
fRightStickY = 0
|
|
ENDIF
|
|
|
|
fAxisThresholdMod = 0.10
|
|
|
|
BOOL bMovingLeft = (fLeftStickX < -cfSTICK_THRESHOLD * fAxisThresholdMod)
|
|
BOOL bMovingRight = (fLeftStickX > cfSTICK_THRESHOLD * fAxisThresholdMod)
|
|
BOOL bMovingDown = (fLeftStickY < -cfSTICK_THRESHOLD * fAxisThresholdMod)
|
|
BOOL bMovingUp = (fLeftStickY > cfSTICK_THRESHOLD * fAxisThresholdMod)
|
|
|
|
FLOAT fMoveSpeedX = ABSF(fLeftStickX * 55)
|
|
FLOAT fMoveSpeedY = ABSF(fLeftStickY * 45)
|
|
FLOAT fAutoAimTension = 0.35 // Set Between 0.0 - 1.0
|
|
|
|
IF bInMenu
|
|
CMHDZ_CHECK_PLAYER_HOVERING_MENU_OPTION()
|
|
ELSE // In game
|
|
IF (fMoveSpeedX >= 5)
|
|
OR (fMoveSpeedY >= 5)
|
|
CMHDZ_CHECK_PLAYER_HOVERING_ENEMY()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Reticule 1
|
|
IF bMovingLeft AND sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x >= fLeftLimit // 0.0
|
|
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x -= (fMoveSpeedX - (BOOL_TO_INT(sCMHDZData.sPlayerData[0].bHoveringEnemy) * (fMoveSpeedX*fAutoAimTension))) * CMHDZ_GET_RETICULE_UPDATE()
|
|
IF sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x < fLeftLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x = fLeftLimit
|
|
ENDIF
|
|
ELIF bMovingRight AND sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x <= fRightLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x += (fMoveSpeedX - (BOOL_TO_INT(sCMHDZData.sPlayerData[0].bHoveringEnemy) * (fMoveSpeedX*fAutoAimTension))) * CMHDZ_GET_RETICULE_UPDATE()
|
|
IF sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x > fRightLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.x = fRightLimit
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bMovingDown AND sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.y >= fDownLimit //20.0
|
|
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.y -= (fMoveSpeedY - (BOOL_TO_INT(sCMHDZData.sPlayerData[0].bHoveringEnemy) * (fMoveSpeedY*fAutoAimTension))) * CMHDZ_GET_RETICULE_UPDATE()
|
|
IF sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.y < fDownLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.y = fDownLimit
|
|
ENDIF
|
|
ELIF bMovingUp AND sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.y <= fUpLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.y += (fMoveSpeedY - (BOOL_TO_INT(sCMHDZData.sPlayerData[0].bHoveringEnemy) * (fMoveSpeedY*fAutoAimTension))) * CMHDZ_GET_RETICULE_UPDATE()
|
|
IF sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.y > fUpLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteInitReticlePos.y = fUpLimit
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Get the right stick micro mod
|
|
VECTOR_2D vRightStickMod
|
|
// vRightStickMod.x = (cfBASE_SCREEN_WIDTH/2.0) + ((fRightLimit - (cfBASE_SCREEN_WIDTH/2.0))*fRightStickX)
|
|
// vRightStickMod.y = (cfBASE_SCREEN_HEIGHT/2.0) + ((fUpLimit - (cfBASE_SCREEN_HEIGHT/2.0))*fRightStickY)
|
|
vRightStickMod.x = ((fRightLimit - (cfBASE_SCREEN_WIDTH/2.0))*fRightStickX)
|
|
vRightStickMod.y = ((fUpLimit - (cfBASE_SCREEN_HEIGHT/2.0))*fRightStickY)
|
|
|
|
vRightStickMod = MULTIPLY_VECTOR_2D(vRightStickMod, 1.1)
|
|
|
|
// Add the relative results together.
|
|
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos = sCMHDZData.sPlayerData[0].vSpriteInitReticlePos
|
|
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x += vRightStickMod.x
|
|
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y += vRightStickMod.y
|
|
|
|
IF sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x < fLeftLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x = fLeftLimit
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x > fRightLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x = fRightLimit
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y < fDownLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y = fDownLimit
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y > fUpLimit
|
|
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y = fUpLimit
|
|
ENDIF
|
|
ELSE
|
|
|
|
//-- Mouse
|
|
FLOAT fMouseX= GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_X)
|
|
FLOAT fMouseY= GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_Y)
|
|
|
|
fMouseX= GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_CURSOR_X)
|
|
fMouseY= GET_DISABLED_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_CURSOR_Y)
|
|
|
|
VECTOR_2D vTopLeft = INIT_VECTOR_2D(fLeftLimit, fUpLimit)
|
|
VECTOR_2D vBottomRight = INIT_VECTOR_2D(fRightLimit, fDownLimit)
|
|
|
|
FLOAT fXAxisPlay = vBottomRight.x - vTopLeft.x
|
|
FLOAT fYAxisPlay = vTopLeft.Y - vBottomRight.y
|
|
|
|
sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos = INIT_VECTOR_2D(vTopLeft.x + (fMouseX * fXAxisPlay), vBottomRight.y + (fMouseY * fYAxisPlay))
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_HANDLE_PLAYER_MOVEMENT()
|
|
|
|
CMHDZ_HANDLE_RETICULE_MOVEMENT()
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_HANDLE_PLAYER_ABILITIES()
|
|
IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_INVULNERABILE)
|
|
IF GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].iInvulnerableTimer > ciCMHDZ_ITEM_SHIELD_TIME
|
|
CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_INVULNERABILE)
|
|
//CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_PICKUP_SHIELD)
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_MUSIC_TRANSITION)
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Run_Out)
|
|
//sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_SCAN_LINE].bShow = FALSE
|
|
sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_FLICKERING].bShow = FALSE
|
|
sCMHDZData.fPowerRunTimer = 0.0
|
|
INIT_RGBA_STRUCT(sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_SCAN_LINE].rgbaColor,255,255,255,3)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_HIDE_RETICULE)
|
|
IF GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].iHideReticuleTimer > ciCMHDZ_HIDE_RETICULE_TIME
|
|
CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_HIDE_RETICULE)
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_MUSIC_TRANSITION)
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Run_Out)
|
|
//sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_SCAN_LINE].bShow = FALSE
|
|
sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_FLICKERING].bShow = FALSE
|
|
INIT_RGBA_STRUCT(sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_SCAN_LINE].rgbaColor,255,255,255,3)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_QUAD_DAMAGE)
|
|
IF GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].iQuadDamageTimer > ciCMHDZ_ITEM_BUFF_TIME
|
|
CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_QUAD_DAMAGE)
|
|
//CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_PICKUP_BUFF)
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_MUSIC_TRANSITION)
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Collectable_Run_Out)
|
|
//sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_SCAN_LINE].bShow = FALSE
|
|
sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_FLICKERING].bShow = FALSE
|
|
sCMHDZData.fPowerRunTimer = 0.0
|
|
INIT_RGBA_STRUCT(sAGPostFXData.sFXLayers[ARCADE_GAMES_POSTFX_LAYER_SCAN_LINE].rgbaColor,255,255,255,3)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_INVULNERABILE)
|
|
OR CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_HIDE_RETICULE)
|
|
OR CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_QUAD_DAMAGE)
|
|
sCMHDZData.fSoundGlitchAdditional += 0.25
|
|
sCMHDZData.fPowerRunTimer += (0.0+@1000)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL CMHDZ_CAN_ENEMY_SHOOT_GUN(INT iEnemy)
|
|
IF sCMHDZData.sEnemyData[iEnemy].vSpritePos.x >= cfRIGHT_SCREEN_LIMIT
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sEnemyData[iEnemy].vSpritePos.x <= 300.0
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF CMHDZ_IS_ENEMY_TYPE_THROWING_ENEMY(sCMHDZData.sEnemyData[iEnemy].iEnemyType)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// IF sCMHDZData.sEnemyData[iEnemy].iEnemyType = CMHDZ_FOREGROUND_ENEMY_BEAR
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
// CMHDZ_ADD_ENEMY_TO_LIST(1398.0, 446.875, 357.875,
|
|
|
|
FLOAT fPosY
|
|
FLOAT fLocToCheck
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
fPosY = sCMHDZData.sEnemyData[iEnemy].vSpritePos.y
|
|
fLocToCheck = sCMHDZData.sEnemyData[iEnemy].fStoppingX + 10.0
|
|
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_CAN_ENEMY_SHOOT_GUN] [CMHDZ_ENEMY_STATE_ACTIVE] [dsw] Enemy ", iEnemy, " Is popup Y Pos: ",fPosY, "> ? ", fLocToCheck)
|
|
IF fPosY > fLocToCheck
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_CAN_ENEMY_SHOOT_GUN] [CMHDZ_ENEMY_STATE_ACTIVE] [dsw] Enemy ", iEnemy, " FALSE")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Wait till full out before shooting
|
|
IF sCMHDZData.sEnemyData[iEnemy].iPopUpTime < 1500
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_CAN_ENEMY_SHOOT_GUN] [CMHDZ_ENEMY_STATE_ACTIVE] [dsw] Enemy ", iEnemy, " TRUE")
|
|
ENDIF
|
|
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_HANDLE_POPUP_ENEMY(INT iEnemy)
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sEnemyData[iEnemy].vSpritePos.y > sCMHDZData.sEnemyData[iEnemy].fStoppingX
|
|
AND sCMHDZData.sEnemyData[iEnemy].iPopUpTime = 0 // Needs additional condition to stop it freezing in place.
|
|
sCMHDZData.sEnemyData[iEnemy].vSpritePos.y -= (0.45*(0.0+@1000))
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [CMHDZ_HANDLE_POPUP_ENEMY] Enemy ", iEnemy, " Going up Y pos ", sCMHDZData.sEnemyData[iEnemy].vSpritePos.y, " Stop ", sCMHDZData.sEnemyData[iEnemy].fStoppingX)
|
|
ELSE
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [CMHDZ_HANDLE_POPUP_ENEMY] Enemy ", iEnemy, " Finished up, grabbing time")
|
|
sCMHDZData.sEnemyData[iEnemy].iPopUpTime += ROUND(0.0+@1000) // Better timer
|
|
ENDIF
|
|
|
|
// Don't pop down after popup.
|
|
IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_ASYLUM
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sEnemyData[iEnemy].iPopUpTime > 3000
|
|
// OR CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE)
|
|
IF sCMHDZData.sEnemyData[iEnemy].vSpritePos.y < sCMHDZData.sEnemyData[iEnemy].vStartPos.y
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [CMHDZ_HANDLE_POPUP_ENEMY] Enemy ", iEnemy, " Going dowm Y pos ", sCMHDZData.sEnemyData[iEnemy].vSpritePos.y, " Stop ", sCMHDZData.sEnemyData[iEnemy].vStartPos.y)
|
|
sCMHDZData.sEnemyData[iEnemy].vSpritePos.y += (0.45*(0.0+@1000))
|
|
ELSE
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [CMHDZ_HANDLE_POPUP_ENEMY] Enemy ", iEnemy, " FINISHED Going dowm Y pos ", sCMHDZData.sEnemyData[iEnemy].vSpritePos.y, " Stop ", sCMHDZData.sEnemyData[iEnemy].vStartPos.y)
|
|
IF sCMHDZData.sEnemyData[iEnemy].iPopUpTime > 6000
|
|
sCMHDZData.sEnemyData[iEnemy].iPopUpTime = 0
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL CMHDZ_INIT_THROWN_PLAYER_PROJECTILE(INT iPlayer, CMHDZ_PROJECTILE_TYPES eType, VECTOR_2D vInitialPos)
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_INIT_THROWN_PLAYER_PROJECTILE] Called, PLAYER:", iPlayer, " Type: ", CMHDZ_PROJECTILE_TYPES_TO_STRING(eType), " Initial pos: ",vInitialPos.x, ", ", vInitialPos.y)
|
|
#ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[iPlayer].iNumberOfThrownProjectiles >= ciCMHDZ_MAX_PLAYER_THROWN_PROJECTILES
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_INIT_THROWN_PLAYER_PROJECTILE] PLAYER:", iPlayer, " Too many projectiles - exiting ")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (eType = CMHDZ_PROJECTILE_BRICK)
|
|
// Zone in on the nearest enemy coord
|
|
FLOAT fSmallestDistance = -1.0 // Invalid distance
|
|
FLOAT distanceX
|
|
FLOAT distanceY
|
|
FLOAT fDistance
|
|
INT iEnemyToHit = -1
|
|
|
|
INT i
|
|
REPEAT ciCMHDZ_MAX_ENEMIES i
|
|
IF CMHDZ_SHOULD_COUNT_ENEMY_AS_ALIVE(i)
|
|
AND CMHDZ_IS_ENEMY_ON_SCREEN(i)
|
|
AND sCMHDZData.sEnemyData[i].eState != CMHDZ_ENEMY_STATE_WAITING
|
|
distanceX = vInitialPos.x - sCMHDZData.sEnemyData[i].vSpritePos.x
|
|
distanceY = vInitialPos.y - sCMHDZData.sEnemyData[i].vSpritePos.y
|
|
fDistance = SQRT(distanceX * distanceX + distanceY * distanceY)
|
|
|
|
// Initialise the value if -1
|
|
IF fSmallestDistance = -1.0
|
|
fSmallestDistance = fDistance
|
|
ENDIF
|
|
|
|
IF fDistance <= 300
|
|
AND fDistance <= fSmallestDistance
|
|
|
|
fSmallestDistance = fDistance
|
|
// IF (sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
// OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING)
|
|
iEnemyToHit = i
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_INIT_THROWN_PLAYER_PROJECTILE - fDistance = ", fSmallestDistance, " iEnemyToHit = ", iEnemyToHit)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// Asign the position of the nearest enemy to the projectile.
|
|
IF fSmallestDistance > -1.0
|
|
AND fSmallestDistance <= 300 // Is in a valid range
|
|
AND iEnemyToHit != -1
|
|
vInitialPos = sCMHDZData.sEnemyData[iEnemyToHit].vSpritePos
|
|
sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[sCMHDZData.sPlayerData[iPlayer].iNumberOfThrownProjectiles].iEnemyInstToHit = iEnemyToHit
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_INIT_THROWN_PLAYER_PROJECTILE - Enemy to be hit: ", sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[sCMHDZData.sPlayerData[iPlayer].iNumberOfThrownProjectiles].iEnemyInstToHit)
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (GET_GAME_TIMER() <= (sCMHDZData.sPlayerData[iPlayer].iLastThrownProjectileTime + sCMHDZData.sPlayerData[iPlayer].iThrownProjectileReloadDelay))
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_INIT_THROWN_PLAYER_PROJECTILE] PLAYER:", iPlayer, " Projectile Thrown Too Recently ")
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELIF (eType = CMHDZ_PROJECTILE_MOLOTOV)
|
|
vInitialPos.x = (cfBASE_SCREEN_WIDTH/2.0)
|
|
vInitialPos.y = (cfBASE_SCREEN_HEIGHT/2.0)
|
|
ENDIF
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[sCMHDZData.sPlayerData[iPlayer].iNumberOfThrownProjectiles].eState = CMHDZ_PROJECTILE_STATE_AIRBORNE
|
|
sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[sCMHDZData.sPlayerData[iPlayer].iNumberOfThrownProjectiles].eType = eType
|
|
sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[sCMHDZData.sPlayerData[iPlayer].iNumberOfThrownProjectiles].vSpritePos = vInitialPos
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].iLastThrownProjectileTime = GET_GAME_TIMER()
|
|
|
|
IF (eType != CMHDZ_PROJECTILE_BRICK)
|
|
sCMHDZData.sPlayerData[iPlayer].iThrownProjectilesAmmo --
|
|
|
|
// turn projectile back into brick when ran out
|
|
IF (sCMHDZData.sPlayerData[iPlayer].iThrownProjectilesAmmo = 0)
|
|
sCMHDZData.sPlayerData[iPlayer].projectileType = CMHDZ_PROJECTILE_BRICK
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Sound effects
|
|
|
|
CMHDZ_AUDIO_EFFECT eAudioEffect
|
|
|
|
SWITCH sCMHDZData.sPlayerData[iPlayer].projectileType
|
|
|
|
CASE CMHDZ_PROJECTILE_BRICK
|
|
eAudioEffect = CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_THROW
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_MOLOTOV
|
|
eAudioEffect = CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_THROW
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_NAILBOMB
|
|
eAudioEffect = CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_THROW
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(eAudioEffect, vInitialPos)
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_HANDLE_THROWN_PLAYER_PROJECTILES(INT iPlayer)
|
|
INT i
|
|
INT iEnemyID = -1
|
|
REPEAT ciCMHDZ_MAX_PLAYER_THROWN_PROJECTILES i
|
|
SWITCH sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].eState
|
|
CASE CMHDZ_PROJECTILE_STATE_AIRBORNE
|
|
sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].iSpriteAnimFrame += sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].iSlowUpdateFrames
|
|
IF sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].iSpriteAnimFrame >= ciCMHDZ_MAX_ENEMY_THROWN_DYNAMITE_ANIM_FRAMES
|
|
sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].eState = CMHDZ_PROJECTILE_STATE_IMPACT
|
|
// Add additional enemy states when we implement differences between the projectile weapons
|
|
SWITCH (sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].eType)
|
|
CASE CMHDZ_PROJECTILE_MOLOTOV
|
|
CMHDZ_KILL_ALL_ENEMIES_IN_RANGE(sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].vSpritePos, 1500)
|
|
TWS_CREATE_FX(sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].vSpritePos, CMHDZ_FX_ENEMY_TNT_EXP, 1)
|
|
|
|
// Damage Bearsy
|
|
IF CMHDZ_IS_BEARSY_ON_SCREEN()
|
|
IF sCMHDZData.sBossData.eCurrentBossState != CMHDZ_BOSS_STATE_INACTIVE
|
|
AND sCMHDZData.sBossData.iActiveLane != ciCMHDZ_LANE_FOREGROUND
|
|
IF sCMHDZData.sBossData.eCurrentBossState != CMHDZ_BOSS_STATE_STUNNED_BACKGROUND
|
|
AND sCMHDZData.sBossData.eCurrentBossState != CMHDZ_BOSS_STATE_WALKING_INV
|
|
sCMHDZData.sBossData.fHealth -= 40
|
|
sCMHDZData.sBossData.bShotThisFrame = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_BRICK // If it's the brick stun the enemy it impacts with.
|
|
|
|
// Make a direct reference from
|
|
IF sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].iEnemyInstToHit != -1
|
|
iEnemyID = sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].iEnemyInstToHit
|
|
ENDIF
|
|
|
|
IF iEnemyID != -1
|
|
AND sCMHDZData.sEnemyData[iEnemyID].iHealth > 0
|
|
IF sCMHDZData.sEnemyData[iEnemyID].iEnemyLane != ciCMHDZ_LANE_POPUP_LHS
|
|
AND sCMHDZData.sEnemyData[iEnemyID].iEnemyLane != ciCMHDZ_LANE_POPUP_RHS
|
|
sCMHDZData.sEnemyData[iEnemyID].fAnimTimer = 2000.0 // 2 second stun time.
|
|
sCMHDZData.sEnemyData[iEnemyID].eState = CMHDZ_ENEMY_STATE_STUNNED
|
|
|
|
CMHDZ_PLAY_ENEMY_TYPE_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[iEnemyID].iEnemyType, CMHDZ_AUDIO_EFFECT_ENEMY_INJURED,
|
|
sCMHDZData.sEnemyData[iEnemyID].vSpritePos, sCMHDZData.sEnemyData[iEnemyID].iEnemyVoiceID)
|
|
ELSE // Just kill popup enemies
|
|
sCMHDZData.sEnemyData[iEnemyID].iHealth = 0
|
|
sCMHDZData.sEnemyData[iEnemyID].fAnimTimer = 0.0
|
|
sCMHDZData.sEnemyData[iEnemyID].eState = CMHDZ_ENEMY_STATE_DYING // If the projectile type is a Molotov
|
|
CMHDZ_ADD_TO_LOCAL_PLAYER_SCORE(CMHDZ_SCORE_TYPE_ENEMY)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
TWS_CREATE_FX(sCMHDZData.sEnemyData[iEnemyID].vSpritePos, CMHDZ_FX_OUCH, sCMHDZData.sEnemyData[iEnemyID].iEnemyLane)
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_NAILBOMB
|
|
CMHDZ_STUN_ENEMIES_IN_RANGE(sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].vSpritePos, 500)
|
|
TWS_CREATE_FX(sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].vSpritePos, CMHDZ_FX_ENEMY_TNT_EXP, 1)
|
|
|
|
// Damage Bearsy
|
|
IF sCMHDZData.sBossData.eCurrentBossState != CMHDZ_BOSS_STATE_INACTIVE
|
|
AND sCMHDZData.sBossData.iActiveLane = ciCMHDZ_LANE_BACKGROUND
|
|
IF sCMHDZData.sBossData.eCurrentBossState != CMHDZ_BOSS_STATE_STUNNED_BACKGROUND
|
|
AND sCMHDZData.sBossData.eCurrentBossState != CMHDZ_BOSS_STATE_WALKING_INV
|
|
sCMHDZData.sBossData.fHealth -= 20
|
|
sCMHDZData.sBossData.bShotThisFrame = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
//Sound effects
|
|
|
|
CMHDZ_AUDIO_EFFECT eAudioEffect
|
|
|
|
SWITCH sCMHDZData.sPlayerData[iPlayer].projectileType
|
|
|
|
CASE CMHDZ_PROJECTILE_BRICK
|
|
eAudioEffect = CMHDZ_AUDIO_EFFECT_PLAYER_BRICK_HIT
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_MOLOTOV
|
|
eAudioEffect = CMHDZ_AUDIO_EFFECT_PLAYER_MOLOTOV_HIT
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_NAILBOMB
|
|
eAudioEffect = CMHDZ_AUDIO_EFFECT_PLAYER_NAILBOMB_HIT
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(eAudioEffect, sCMHDZData.sPlayerData[iPlayer].sThrownProjectile[i].vSpritePos)
|
|
|
|
//
|
|
|
|
SET_CONTROL_SHAKE(FRONTEND_CONTROL, 100, 20)
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_STATE_IMPACT
|
|
CMHDZ_RESET_PLAYER_THROWN_PROJECTILE(iPlayer, i)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_INIT_THROWN_ENEMY_PROJECTILE(CMHDZ_PROJECTILE_TYPES eType, VECTOR_2D vInitialPos)
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_INIT_THROWN_ENEMY_PROJECTILE] Called, type: ", CMHDZ_PROJECTILE_TYPES_TO_STRING(eType), " Initial pos: ",vInitialPos.x, ", ", vInitialPos.y)
|
|
#ENDIF
|
|
|
|
IF sCMHDZData.iNumberOfThrownEnemyProjectiles > ciCMHDZ_MAX_ENEMY_PROJECTILES - 1
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_INIT_THROWN_ENEMY_PROJECTILE] Too many projectiles - exiting ")
|
|
EXIT
|
|
ENDIF
|
|
|
|
sCMHDZData.sEnemyProjectiles[sCMHDZData.iNumberOfThrownEnemyProjectiles].eState = CMHDZ_PROJECTILE_STATE_AIRBORNE
|
|
sCMHDZData.sEnemyProjectiles[sCMHDZData.iNumberOfThrownEnemyProjectiles].eType = eType
|
|
sCMHDZData.sEnemyProjectiles[sCMHDZData.iNumberOfThrownEnemyProjectiles].vSpritePos = vInitialPos
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_HANDLE_THROWN_ENEMY_PROJECTILES()
|
|
INT i
|
|
|
|
|
|
REPEAT ciCMHDZ_MAX_ENEMY_PROJECTILES i
|
|
SWITCH sCMHDZData.sEnemyProjectiles[i].eState
|
|
CASE CMHDZ_PROJECTILE_STATE_AIRBORNE
|
|
sCMHDZData.sEnemyProjectiles[i].iSpriteAnimFrame += sCMHDZData.sEnemyProjectiles[i].iSlowUpdateFrames
|
|
IF sCMHDZData.sEnemyProjectiles[i].iSpriteAnimFrame >= ciCMHDZ_MAX_ENEMY_THROWN_DYNAMITE_ANIM_FRAMES
|
|
sCMHDZData.sEnemyProjectiles[i].eState = CMHDZ_PROJECTILE_STATE_IMPACT
|
|
SET_CONTROL_SHAKE(FRONTEND_CONTROL, 100, 20)
|
|
|
|
SWITCH(sCMHDZData.sEnemyProjectiles[i].eType)
|
|
CASE CMHDZ_PROJECTILE_DYNAMITE
|
|
CMHDZ_DAMAGE_PLAYER(CMHDZ_DAMAGE_PLAYER_TYPE_DYNAMITE)
|
|
TWS_CREATE_FX(sCMHDZData.sEnemyProjectiles[i].vSpritePos, CMHDZ_FX_ENEMY_TNT_EXP, 1)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_EXP_DYNAMITE, sCMHDZData.sEnemyProjectiles[i].vSpritePos)
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_BONE
|
|
CASE CMHDZ_PROJECTILE_JOWL
|
|
CASE CMHDZ_PROJECTILE_LEG
|
|
CASE CMHDZ_PROJECTILE_TROTTER
|
|
CMHDZ_DAMAGE_PLAYER(CMHDZ_DAMAGE_PLAYER_TYPE_SLASH)
|
|
TWS_CREATE_FX(sCMHDZData.sEnemyProjectiles[i].vSpritePos, CMHDZ_FX_BLOOD_SPLAT, 1)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_BEARSY_MEAT_IMPACT, sCMHDZData.sEnemyProjectiles[i].vSpritePos)
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_PROJECTILE_STATE_IMPACT
|
|
CMHDZ_RESET_ENEMY_THROWN_PROJECTILE(i)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
FUNC BOOL CMHDZ_CAN_ENEMY_STOP_TO_CHECK_FOR_COVER(INT iEnemy)
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN(INT iEnemy)
|
|
VECTOR_2D vPos = sCMHDZData.sEnemyData[iEnemy].vSpritePos
|
|
VECTOR_2D vSize = sCMHDZData.sEnemyData[iEnemy].vSize
|
|
vSize.x = ABSF(vSize.x) // Fix the value if the scale is reversed for animation.
|
|
FLOAT fScale = CMHDZ_GET_ENEMY_TYPE_SCALE_FOR_LANE(sCMHDZData.sEnemyData[iEnemy].iEnemyLane)
|
|
BOOL bFromLeft = CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_REVERSE)
|
|
BOOL bThrownProjectile = CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE)
|
|
|
|
IF sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF vPos.x <( cfLEFT_SCREEN_LIMIT - ( vSize.x * fScale) )
|
|
//-- Enemy is off the left hand side of the screen
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN] {dsw} True Enemy ", iEnemy, " Off LHS Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType), " Pos x ", vPos.x)
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
|
|
IF bFromLeft AND bThrownProjectile AND vPos.x > ( cfRIGHT_SCREEN_LIMIT + ( vSize.x * fScale) )
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN] {dsw} True Enemy ", iEnemy, " Thrown projectile, off rhs Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType), " Pos x ", vPos.x)
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF bFromLeft AND CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN) AND vPos.x > cfBASE_SCREEN_WIDTH * 2.0
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN] {dsw} True Enemy ", iEnemy, " From lhs, far off rhs Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType), " Pos x ", vPos.x)
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
// #IF IS_DEBUG_BUILD
|
|
// IF eType = CMHDZ_COFFIN_ENEMY OR eType = CMHDZ_OUTHOUSE_ENEMY
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN]")
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN] Enemy ", iEnemy, " Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(eType), " State: ", CMHDZ_ENEMY_STATE_TO_STRING(sCMHDZData.sEnemyData[iEnemy].eState) )
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN] Pos: ", vPos.x, ", ", vPos.y, " Ever on screen? ", CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN), " Shot? ", CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_SHOT_AT_LEAST_ONCE))
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN] Level stopped? ", CMHDZ_IS_LEVEL_STOPPED())
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN]")
|
|
//
|
|
// ENDIF
|
|
// #ENDIF
|
|
|
|
IF CMHDZ_IS_LEVEL_STOPPED()
|
|
IF sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_ATTACKING
|
|
IF sCMHDZData.sEnemyData[iEnemy].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
|
|
IF vPos.x > ( cfRIGHT_SCREEN_LIMIT )
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN] {dsw} True Enemy ", iEnemy, " Level stopped, off rhs Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType), " Pos x ", vPos.x)
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ELIF vPos.x <= ( 300.0 )
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN] {dsw} True Enemy ", iEnemy, " Level stopped, off lhs Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[iEnemy].iEnemyType), " Pos x ", vPos.x)
|
|
#ENDIF
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_IS_BONUS)
|
|
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(iEnemy, CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN)
|
|
IF bFromLeft
|
|
AND vPos.x >= cfBASE_SCREEN_WIDTH
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF !bFromLeft
|
|
AND vPos.x <= 0.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_SHOULD_FORCE_DOORS_OPEN(INT iEnemyCover)
|
|
IF sCMHDZData.sEnemyData[iEnemyCover].iRenderAfterWarpedCount = 0
|
|
IF sCMHDZData.sEnemyData[iEnemyCover].iWarpedForMovingLevelCount > 0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF sCMHDZData.sEnemyData[iEnemyCover].iWarpedForMovingLevelCount > sCMHDZData.sEnemyData[iEnemyCover].iRenderAfterWarpedCount
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
PROC CMHDZ_HANDLE_ENEMIES()
|
|
|
|
INT iCurrentGameTime = GET_GAME_TIMER()
|
|
// INT iBlockingCover
|
|
INT i//, j
|
|
VECTOR_2D vThrow
|
|
FLOAT fXpos
|
|
BOOL bCanEnemyEnter
|
|
|
|
// FLOAT fCoverWidth
|
|
// FLOAT fScale
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES - 1
|
|
// iBlockingCover = -1
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [dsw]")
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [dsw] Processing Enemy: ",i)
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [dsw] State: ", CMHDZ_ENEMY_STATE_TO_STRING(sCMHDZData.sEnemyData[i].eState), " Lane: ",sCMHDZData.sEnemyData[i].iEnemyLane, " Type:", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [dsw] Active in stage: ", sCMHDZData.sEnemyData[i].iLevelStage, " Current stage:", CMHDZ_GET_CURRENT_LEVEL_SCREEN())
|
|
#ENDIF
|
|
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN)
|
|
IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
|
|
OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_DYING
|
|
OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_DYING_HEADSHOT
|
|
fXpos = sCMHDZData.sEnemyData[i].vSpritePos.x
|
|
IF fXPos > cfLEFT_SCREEN_LIMIT AND fXPos < cfRIGHT_SCREEN_LIMIT
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_ACTIVE] [dsw] Enemy: ",i, " Appeared on screen. Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType), " State: ", CMHDZ_ENEMY_STATE_TO_STRING(sCMHDZData.sEnemyData[i].eState), " Lane: ", sCMHDZData.sEnemyData[i].iEnemyLane)
|
|
#ENDIF
|
|
|
|
CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(i, CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN, TRUE)
|
|
sCMHDZData.iTotalNumberOfEnemiesSpawned ++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Update enemy stopping position to match the screen scrolling.
|
|
IF sCMHDZData.sEnemyData[i].fPointToAppear <= sCMHDZData.fOverallLevelProgression
|
|
IF IS_MOVING_LEVEL()
|
|
AND sCMHDZData.sEnemyData[i].iEnemyLane != ciCMHDZ_LANE_FOREGROUND
|
|
AND sCMHDZData.sEnemyData[i].iEnemyLane != ciCMHDZ_LANE_POPUP_LHS
|
|
AND sCMHDZData.sEnemyData[i].iEnemyLane != ciCMHDZ_LANE_POPUP_RHS
|
|
AND sCMHDZData.sEnemyData[i].fStoppingX > -200
|
|
AND sCMHDZData.sEnemyData[i].fStoppingX < 2000
|
|
sCMHDZData.sEnemyData[i].fStoppingX -= CMHDZ_GET_GENERAL_UPDATE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH sCMHDZData.sEnemyData[i].eState
|
|
|
|
CASE CMHDZ_ENEMY_STATE_ACTIVE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] {dsw} Start of Active Enemy ", i, " Staggered count: ", sCMHDZData.iStaggeredOnScreenViableCoverCount)
|
|
#ENDIF
|
|
|
|
sCMHDZData.sEnemyData[i].iSpriteAnimFrame += sCMHDZData.sEnemyData[i].iSlowUpdateFrames
|
|
IF sCMHDZData.sEnemyData[i].iSpriteAnimFrame >= ciCMHDZ_MAX_ANIM_FRAMES
|
|
sCMHDZData.sEnemyData[i].iSpriteAnimFrame = 0
|
|
ENDIF
|
|
|
|
|
|
// IF sCMHDZData.sEnemyData[i].iEnemyType != CMHDZ_CART_1 AND sCMHDZData.sEnemyData[i].iSpriteAnimFrame >= ciCMHDZ_MAX_ANIM_FRAMES
|
|
// sCMHDZData.sEnemyData[i].iSpriteAnimFrame = 0
|
|
// ELIF sCMHDZData.sEnemyData[i].iEnemyType = CMHDZ_CART_1
|
|
// sCMHDZData.sEnemyData[i].iSpriteAnimFrame = 0
|
|
// ENDIF
|
|
|
|
// IF sCMHDZData.sEnemyData[i].iHealth <= 0
|
|
// sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_DYING
|
|
// #IF IS_DEBUG_BUILD
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {dsw} Enemy ", i, " set as Dying as iHealth <= 0. Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
|
|
// #ENDIF
|
|
// ENDIF
|
|
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
AND NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_BONUS)
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [dsw] [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] Enemy ",i , " Comparing sprite x ", sCMHDZData.sEnemyData[i].vSpritePos.x, " wih stopping x ", sCMHDZData.sEnemyData[i].fStoppingX)
|
|
IF (sCMHDZData.sEnemyData[i].vSpritePos.x >= sCMHDZData.sEnemyData[i].fStoppingX
|
|
AND CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_REVERSE))
|
|
OR (sCMHDZData.sEnemyData[i].vSpritePos.x <= sCMHDZData.sEnemyData[i].fStoppingX
|
|
AND !CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_REVERSE))
|
|
//-- If the enemy is about to stop and shoot then check the stop location isn't behind a big bit of cover
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
|
|
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_ENEMY_STATE_ACTIVE - CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE - eState = CMHDZ_ENEMY_STATE_ATTACKING - IS at stoppping position")
|
|
sCMHDZData.sEnemyData[i].iTimeOfLastShot = GET_GAME_TIMER()
|
|
ELSE
|
|
//-- If the ped is stiil on their way to their stopping loc, stop if they happen to pass some suitable cover
|
|
IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
AND NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE)
|
|
IF CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE(sCMHDZData.iViableOnScreenEnemyCoverPoints[sCMHDZData.iStaggeredOnScreenViableCoverCount], i)
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_ENEMY_STATE_ACTIVE - CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE - eState = CMHDZ_ENEMY_STATE_ATTACKING")
|
|
sCMHDZData.sEnemyData[i].iTimeOfLastShot = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
SWITCH sCMHDZData.sEnemyData[i].iEnemyLane
|
|
CASE 2
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_REVERSE)
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x += CMHDZ_GET_ENEMY_FOREGROUND_UPDATE(TRUE)
|
|
ELSE
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x -= CMHDZ_GET_ENEMY_FOREGROUND_UPDATE(FALSE)
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_REVERSE)
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x += CMHDZ_GET_ENEMY_MIDDLE_UPDATE(TRUE)
|
|
ELSE
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x -= CMHDZ_GET_ENEMY_MIDDLE_UPDATE(FALSE)
|
|
ENDIF
|
|
BREAK
|
|
CASE 0
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_REVERSE)
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x += CMHDZ_GET_ENEMY_BACKGROUND_UPDATE(TRUE)
|
|
ELSE
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x -= CMHDZ_GET_ENEMY_BACKGROUND_UPDATE(FALSE)
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
IF CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN(i)
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {dsw} Enemy ", i, " Active but went outside the limits and is being set as inactive. Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
|
|
#ENDIF
|
|
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_BONUS)
|
|
CMHDZ_PLAY_BONUS_MISSED_AUDIO(i)
|
|
ENDIF
|
|
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_INACTIVE
|
|
sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane]--
|
|
|
|
// IF sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane] = ciCMHDZ_LANE_BACKGROUND
|
|
// sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane] = ciCMHDZ_LANE_BACKGROUND
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {dsw} iCurrentActiveEnemies in lane ", sCMHDZData.sEnemyData[i].iEnemyLane, " < 0 (1)")
|
|
// ENDIF
|
|
|
|
IF sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane] = ciCMHDZ_LANE_FOREGROUND
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {baz} Cleanup foreground enemy off screen")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_ENEMY_STATE_ATTACKING
|
|
|
|
IF IS_MOVING_LEVEL() AND sCMHDZData.sEnemyData[i].iEnemyLane != ciCMHDZ_LANE_FOREGROUND
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x -= CMHDZ_GET_ENEMY_SHOOTING_UPDATE()
|
|
ENDIF
|
|
|
|
IF CMHDZ_CAN_ENEMY_SHOOT_GUN(i)
|
|
IF iCurrentGameTime - sCMHDZData.sEnemyData[i].iTimeOfLastShot > ciCMHDZ_ENEMY_TIME_TO_SHOOT - (ENUM_TO_INT(sCMHDZData.eCurrentLevel) * 200)
|
|
sCMHDZData.sEnemyData[i].iTimeOfLastShot = GET_GAME_TIMER()
|
|
|
|
IF sCMHDZData.sEnemyData[i].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
|
|
TWS_CREATE_FX(INIT_VECTOR_2D(sCMHDZData.sEnemyData[i].vSpritePos.x + cfCMHDZ_FG_ENEMY_1_X_OFFSET, sCMHDZData.sEnemyData[i].vSpritePos.Y - cfCMHDZ_FG_ENEMY_1_Y_OFFSET), CMHDZ_FX_ENEMY_SHOT, sCMHDZData.sEnemyData[i].iEnemyLane)
|
|
ELSE
|
|
IF NOT CMHDZ_IS_ENEMY_TYPE_THROWING_ENEMY(sCMHDZData.sEnemyData[i].iEnemyType)
|
|
TWS_CREATE_FX(INIT_VECTOR_2D(sCMHDZData.sEnemyData[i].vSpritePos.x + cfCMHDZ_BG_ENEMY_1_X_OFFSET, sCMHDZData.sEnemyData[i].vSpritePos.Y + cfCMHDZ_BG_ENEMY_1_Y_OFFSET), CMHDZ_FX_ENEMY_SHOT, sCMHDZData.sEnemyData[i].iEnemyLane)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_PLAYER_TOTAL_AMMO_FOR_ALL_WEAPON_TYPES() <= 0
|
|
IF sCMHDZData.sPlayerData[0].iNoAmmoTimer = 0
|
|
sCMHDZData.sPlayerData[0].iNoAmmoTimer = GET_GAME_TIMER()
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} Start iNoAmmoTimer")
|
|
ELSE
|
|
IF GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].iNoAmmoTimer >= ciCMHDZ_PLAYER_CRITICAL_DAMAGE_NO_AMMO_TIME
|
|
IF sCMHDZData.sPlayerData[0].fHealth > 0.05
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} Forcing hit critical as ammo <=0")
|
|
sCMHDZData.sPlayerData[0].fHealth = 0.05
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF sCMHDZData.sPlayerData[0].iNoAmmoTimer != 0
|
|
sCMHDZData.sPlayerData[0].iNoAmmoTimer = 0
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_WILL_INFLICT_MELEE_DAMAGE)
|
|
CMHDZ_DAMAGE_PLAYER(CMHDZ_DAMAGE_PLAYER_TYPE_SLASH)
|
|
TWS_CREATE_FX(sCMHDZData.sEnemyData[i].vSpritePos, CMHDZ_FX_SLASH_EFFECT, ciCMHDZ_LANE_FOREGROUND)
|
|
CMHDZ_PLAY_ENEMY_TYPE_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[i].iEnemyType, CMHDZ_AUDIO_EFFECT_ENEMY_ATTACK, sCMHDZData.sEnemyData[i].vSpritePos, sCMHDZData.sEnemyData[i].iEnemyVoiceID)
|
|
sCMHDZData.sEnemyData[i].fAnimTimer = 900 // Hold the slash animation for 0.9 secs
|
|
|
|
CMHDZ_PLAY_ENEMY_WEAPON_MELEE_SWING_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[i].iEnemyType, sCMHDZData.sEnemyData[i].vSpritePos)
|
|
CMHDZ_PLAY_ENEMY_WEAPON_ATTACK_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[i].iEnemyType, sCMHDZData.sEnemyData[i].vSpritePos)
|
|
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_PLAYED_WARN_AUDIO)
|
|
CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(i, CMHDZ_ENEMY_DATA_BITS_PLAYED_WARN_AUDIO, FALSE)
|
|
ENDIF
|
|
ELSE
|
|
CMHDZ_DAMAGE_PLAYER(CMHDZ_DAMAGE_PLAYER_TYPE_BULLET)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_FIRE, sCMHDZData.sEnemyData[i].vSpritePos)
|
|
CMHDZ_PLAY_ENEMY_WEAPON_ATTACK_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[i].iEnemyType, sCMHDZData.sEnemyData[i].vSpritePos)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] Player has been hit by enemy ", i, " Ped Pos: ", sCMHDZData.sEnemyData[i].vSpritePos.x, ", ", sCMHDZData.sEnemyData[i].vSpritePos.y, " lane: ", sCMHDZData.sEnemyData[i].iEnemyLane, " Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType), " Popup? ", CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_POPUP))
|
|
#ENDIF
|
|
ELSE
|
|
//-- Audio for enemy cocking weapon
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_PLAYED_AIM_AUDIO)
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_ENEMY_RIFLE_AIM,sCMHDZData.sEnemyData[i].vSpritePos)
|
|
CMHDZ_PLAY_ENEMY_WEAPON_READY_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[i].iEnemyType, sCMHDZData.sEnemyData[i].vSpritePos)
|
|
CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(i, CMHDZ_ENEMY_DATA_BITS_PLAYED_AIM_AUDIO)
|
|
ENDIF
|
|
|
|
//-- Enemies 'laugh' just before they fire a critical shot
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_PLAYED_WARN_AUDIO)
|
|
IF iCurrentGameTime - sCMHDZData.sEnemyData[i].iTimeOfLastShot > (ciCMHDZ_ENEMY_TIME_TO_SHOOT - (200)) - 1000
|
|
//IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() <= 0.1 AND CMHDZ_GET_LOCAL_PLAYER_HEALTH() > 0.0
|
|
CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(i, CMHDZ_ENEMY_DATA_BITS_PLAYED_WARN_AUDIO, TRUE)
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_ENEMY_CRIT_WARNING, sCMHDZData.sEnemyData[i].vSpritePos)
|
|
CMHDZ_PLAY_ENEMY_TYPE_SOUND_AND_RELEASE(sCMHDZData.sEnemyData[i].iEnemyType, CMHDZ_AUDIO_EFFECT_ENEMY_GLOAT, sCMHDZData.sEnemyData[i].vSpritePos, sCMHDZData.sEnemyData[i].iEnemyVoiceID)
|
|
//ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
// ELIF CMHDZ_IS_BEAR(i)
|
|
// IF iCurrentGameTime - sCMHDZData.sEnemyData[i].iTimeOfLastShot > ciCMHDZ_ENEMY_TIME_TO_SHOOT - (ENUM_TO_INT(sCMHDZData.eCurrentLevel) * 200)
|
|
// sCMHDZData.sEnemyData[i].iTimeOfLastShot = GET_GAME_TIMER()
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {DSW} Bear ", i, " attacking ")
|
|
// ENDIF
|
|
ENDIF
|
|
|
|
// IF sCMHDZData.sEnemyData[i].vSpritePos.x < cfLEFT_SCREEN_LIMIT - ( sCMHDZData.sEnemyData[i].vSize.x * CMHDZ_GET_ENEMY_TYPE_SCALE_FOR_LANE(sCMHDZData.sEnemyData[i].iEnemyType, sCMHDZData.sEnemyData[i].iEnemyLane))
|
|
// OR (sCMHDZData.sEnemyData[i].bReverse AND sCMHDZData.sEnemyData[i].bThrownProjectile AND sCMHDZData.sEnemyData[i].vSpritePos.x > cfRIGHT_SCREEN_LIMIT - ( sCMHDZData.sEnemyData[i].vSize.x * CMHDZ_GET_ENEMY_TYPE_SCALE_FOR_LANE(sCMHDZData.sEnemyData[i].iEnemyType, sCMHDZData.sEnemyData[i].iEnemyLane)))
|
|
IF CMHDZ_SHOULD_CLEANUP_ENEMY_FOR_BEING_OFF_SCREEN(i)
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {dsw} Enemy ", i, " went outside the limits and is being set as inactive. Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
|
|
#ENDIF
|
|
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_INACTIVE
|
|
sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane]--
|
|
|
|
IF sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane] < ciCMHDZ_LANE_BACKGROUND
|
|
sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane] = ciCMHDZ_LANE_BACKGROUND
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {dsw} iCurrentActiveEnemies in lane ", sCMHDZData.sEnemyData[i].iEnemyLane, " < 0 (2)")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CMHDZ_IS_ENEMY_TYPE_THROWING_ENEMY(sCMHDZData.sEnemyData[i].iEnemyType)
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE)
|
|
sCMHDZData.sEnemyData[i].iSpriteAnimFrame += sCMHDZData.sEnemyData[i].iSlowUpdateFrames
|
|
IF sCMHDZData.sEnemyData[i].iSpriteAnimFrame > ciCMHDZ_MAX_THROWING_FRAMES -2
|
|
sCMHDZData.sEnemyData[i].iSpriteAnimFrame = ciCMHDZ_MAX_THROWING_FRAMES -2
|
|
CMHDZ_ENEMY_DATA_SET_BIT_BY_BOOL(i, CMHDZ_ENEMY_DATA_BITS_THROWN_PROJECTILE)
|
|
sCMHDZData.sEnemyData[i].iTimeOfLastShot = GET_GAME_TIMER()
|
|
vThrow = sCMHDZData.sEnemyData[i].vSpritePos
|
|
vThrow.x -= 23.75
|
|
vThrow.y -= 95.125
|
|
CMHDZ_INIT_THROWN_ENEMY_PROJECTILE(CMHDZ_PROJECTILE_DYNAMITE, vThrow)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE(CMHDZ_AUDIO_EFFECT_ENEMY_THROW_DYNAMITE, sCMHDZData.sEnemyData[i].vSpritePos)
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {dsw} Enemy ", i, " Throwing projectile")
|
|
ENDIF
|
|
ELIF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
IF GET_GAME_TIMER() - sCMHDZData.sEnemyData[i].iTimeOfLastShot > 1000
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_REVERSE)
|
|
sCMHDZData.sEnemyData[i].fStoppingX = 2000.0
|
|
ELSE
|
|
sCMHDZData.sEnemyData[i].fStoppingX = -200.0
|
|
ENDIF
|
|
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] {dsw} Enemy ", i, " has thrown projectile and time expired. Running off screen")
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CMHDZ_HANDLE_POPUP_ENEMY(i)
|
|
BREAK
|
|
|
|
CASE CMHDZ_ENEMY_STATE_STUNNED
|
|
|
|
IF IS_MOVING_LEVEL()
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x -= CMHDZ_GET_ENEMY_DYING_UPDATE()
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sEnemyData[i].fAnimTimer > 0
|
|
sCMHDZData.sEnemyData[i].fAnimTimer -= (0.0+@1000)
|
|
ELSE // Stun time over
|
|
// Testing: May have state conflict
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE // Return to active.
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ENEMY_STATE_DYING
|
|
CASE CMHDZ_ENEMY_STATE_DYING_HEADSHOT
|
|
CASE CMHDZ_ENEMY_STATE_DYING_BURNING
|
|
sCMHDZData.sEnemyData[i].fAnimTimer += (0.0+@1000)
|
|
|
|
IF IS_MOVING_LEVEL()
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x -= CMHDZ_GET_ENEMY_DYING_UPDATE()
|
|
ENDIF
|
|
|
|
SWITCH sCMHDZData.sEnemyData[i].iEnemyLane
|
|
CASE ciCMHDZ_LANE_FOREGROUND
|
|
sCMHDZData.sEnemyData[i].vSpritePos.y -= (0.5*(0.0+@1000))
|
|
BREAK
|
|
CASE ciCMHDZ_LANE_MIDDLE
|
|
sCMHDZData.sEnemyData[i].vSpritePos.y -= (0.4*(0.0+@1000))
|
|
BREAK
|
|
CASE ciCMHDZ_LANE_BACKGROUND
|
|
CASE ciCMHDZ_LANE_POPUP_LHS
|
|
CASE ciCMHDZ_LANE_POPUP_RHS
|
|
sCMHDZData.sEnemyData[i].vSpritePos.y -= (0.3*(0.0+@1000))
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF sCMHDZData.sEnemyData[i].fAnimTimer >= 200.0 // Disappear after 0.4 seconds
|
|
|
|
IF sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_DYING_BURNING
|
|
//AND sCMHDZData.sEnemyData[i].iEnemyLane = ciCMHDZ_LANE_FOREGROUND
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_HANDLE_ENEMIES - Timing out burning enemy in Foreground")
|
|
//ASSERTLN("[BAZ] CMHDZ_HANDLE_ENEMIES - Timing out burning enemy in Foreground")
|
|
ENDIF
|
|
|
|
IF sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane] > 0
|
|
sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane]--
|
|
ENDIF
|
|
|
|
sCMHDZData.sEnemyData[i].fAnimTimer = 0.0
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_INACTIVE
|
|
ENDIF
|
|
|
|
// Trigger director commentary
|
|
CMHDZ_HANDLE_DIRECTOR_ONE_OFF_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Enemy_Kill)
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ENEMY_STATE_WAITING
|
|
// IF sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane] != ciCMHDZ_LANE_MIDDLE
|
|
// //CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_HANDLE_ENEMIES] Active in lane ", sCMHDZData.sEnemyData[i].iEnemyLane, ": ", sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane])
|
|
// ENDIF
|
|
|
|
//-- Set enemy peds as active, depending on their parameters
|
|
//IF sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane] < ciCMHDZ_LANE_MIDDLE
|
|
bCanEnemyEnter = (sCMHDZData.sEnemyData[i].fPointToAppear <= sCMHDZData.fOverallLevelProgression)
|
|
AND (!CMHDZ_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_STOPPED))
|
|
|
|
// Only bring in the enemy if the static screen phase is valid
|
|
IF CMHDZ_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_STOPPED)
|
|
AND IS_BITMASK_ENUM_AS_ENUM_SET(sCMHDZData.sEnemyData[i].eDataBits, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
|
|
AND sCMHDZData.sEnemyData[i].iStaticScreenPhase > 0
|
|
AND sCMHDZData.sEnemyData[i].fPointToAppear <= sCMHDZData.fOverallLevelProgression + cfCMHDZ_SCREEN_LENGTH
|
|
bCanEnemyEnter = (sCMHDZData.sEnemyData[i].iStaticScreenPhase = sCMHDZData.iStaticScreenPhase)
|
|
ENDIF
|
|
|
|
IF bCanEnemyEnter
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
|
|
IF NOT CMHDZ_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_STOPPED)
|
|
//-- The ped only appears when the level is stationary, but it is still moving
|
|
RELOOP
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
|
|
|
|
IF sCMHDZData.iTimeSinceEnemyActive[sCMHDZData.sEnemyData[i].iEnemyLane] = ciCMHDZ_LANE_BACKGROUND
|
|
OR GET_GAME_TIMER() - sCMHDZData.iTimeSinceEnemyActive[sCMHDZData.sEnemyData[i].iEnemyLane] > 1500
|
|
//-- This ped 'pops-up' from behind scenery, but only when the level has stopped scrolling
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_HANDLE_ENEMIES] Setting as SHOOTING stationary pop up enemy ", i, " Lane: ", sCMHDZData.sEnemyData[i].iEnemyLane, " Is popup? ", CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_POPUP) ," Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
|
|
#ENDIF
|
|
|
|
sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane]++
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
|
|
|
|
ENDIF
|
|
ELSE
|
|
|
|
//-- This ped pops up behind scenery while the level is moving
|
|
IF CMHDZ_IS_ENEMY_ON_SCREEN(i, cfLEFT_SCREEN_LIMIT)
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_HANDLE_ENEMIES] Setting as SHOOTING moving pop up enemy ", i, " Lane: ", sCMHDZData.sEnemyData[i].iEnemyLane, " Is popup? ", CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)," Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType))
|
|
#ENDIF
|
|
sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane]++
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
ELSE // Set the PED active on screen here
|
|
IF sCMHDZData.sEnemyData[i].iRenderAfterWarpedCount = 0
|
|
OR sCMHDZData.sEnemyData[i].iRenderAfterWarpedCount = sCMHDZData.sEnemyData[i].iWarpedForMovingLevelCount
|
|
//-- This is a normal ped who runs into position from either the left or the right of the screev
|
|
|
|
sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane]++
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {DSW} [CMHDZ_HANDLE_ENEMIES] Setting as CMHDZ_ENEMY_STATE_ACTIVE enemy ", i, " Lane: ", sCMHDZData.sEnemyData[i].iEnemyLane, " Is popup? ", CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)," Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType), " Active in lane: ", sCMHDZData.iCurrentActiveEnemies[sCMHDZData.sEnemyData[i].iEnemyLane])
|
|
#ENDIF
|
|
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_BONUS)
|
|
CMHDZ_PLAY_BONUS_APPEAR_AUDIO(i)
|
|
ENDIF
|
|
|
|
IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_BONUS)
|
|
CMHDZ_HANDLE_DIRECTOR_ONE_OFF_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_First_Enemy_Appear)
|
|
ENDIF
|
|
|
|
IF CMHDZ_IS_ENEMY_TYPE_THROWING_ENEMY(sCMHDZData.sEnemyData[i].iEnemyType)
|
|
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_DYNAMITE)
|
|
ENDIF
|
|
|
|
sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
//ENDIF
|
|
ENDIF
|
|
|
|
//-- Still want to update the positions of some 'inactive' enemies. generally for when we don't want them to appear from the start
|
|
IF IS_MOVING_LEVEL()
|
|
IF CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
//OR (CMHDZ_GET_CURRENT_LEVEL() = CMHDZ_LEVEL_PARK)
|
|
OR sCMHDZData.sEnemyData[i].iRenderAfterWarpedCount > 0
|
|
//IF NOT CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
|
|
IF sCMHDZData.fOverallLevelProgression >= sCMHDZData.sEnemyData[i].fPointToAppear
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x -= CMHDZ_GET_ENEMY_WAITING_UPDATE()
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sEnemyData[i].iRenderAfterWarpedCount > 0
|
|
IF sCMHDZData.sEnemyData[i].vSpritePos.x <= 0
|
|
sCMHDZData.sEnemyData[i].vSpritePos.x = CMHDZ_GET_OFFSET_FOR_ELEMENT_WARP_FOR_CURRENT_LEVEL()
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_HANDLE_ENEMIES] [CMHDZ_ENEMY_STATE_WAITING] [OUTHOUSE_WARP] [dsw] Enemy: ",i, " Warped")
|
|
sCMHDZData.sEnemyData[i].iWarpedForMovingLevelCount++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDFOR
|
|
|
|
ENDPROC
|
|
|
|
////-- Handle NAILGUN gun overheating
|
|
//PROC CMHDZ_PROCESS_NAILGUN_GUN_TEMP()
|
|
// FLOAT fTimeOverHeat = cfCMHDZ_NAILGUN_OVERHEAT_TIME_SECONDS
|
|
// FLOAT fTimeCooldown = cfCMHDZ_NAILGUN_COOLDOWN_TIME_SECONDS
|
|
//
|
|
// BOOL bShooting
|
|
// FLOAT fFrameTime = GET_FRAME_TIME()
|
|
//
|
|
// IF CMHDZ_GET_PLAYER_CURRENT_WEAPON() = CMHDZ_PLAYER_WEAPON_NAILGUN
|
|
//
|
|
// bSHooting = (IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RDOWN)
|
|
// AND CMHDZ_GET_LOCAL_PLAYER_HEALTH() > 0.0)
|
|
//
|
|
// IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT)
|
|
// IF NOT CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_NAILGUN_STOPPED_SHOOTING)
|
|
// IF NOT bSHooting
|
|
// CMHDZ_SET_PLAYER_BIT(CMHDZ_PLAYER_BIT_NAILGUN_STOPPED_SHOOTING)
|
|
// ENDIF
|
|
// ENDIF
|
|
//
|
|
// IF bSHooting
|
|
// IF sCMHDZData.sPlayerData[0].iNAILGUNOverheatTime = 0
|
|
// OR (GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].iNAILGUNOverheatTime) > 100
|
|
// sCMHDZData.sPlayerData[0].iNAILGUNOverheatTime = GET_GAME_TIMER()
|
|
// CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SHOOT_NAILGUN_OVERHEAT)
|
|
// ENDIF
|
|
//
|
|
// IF NOT CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_NAILGUN_STOPPED_SHOOTING)
|
|
// sCMHDZData.sPlayerData[0].fNAILGUNGunTemp = 1.0
|
|
// EXIT
|
|
// ENDIF
|
|
// ENDIF
|
|
//
|
|
//
|
|
//
|
|
// IF sCMHDZData.sPlayerData[0].fNAILGUNGunTemp > 0.0
|
|
// sCMHDZData.sPlayerData[0].fNAILGUNGunTemp -= (1.0 / (fTimeCooldown/fFrameTime))
|
|
// // //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PROCESS_NAILGUN_GUN_TEMP] DECREASE sCMHDZData.sPlayerData[0].fNAILGUNGunTemp = ", sCMHDZData.sPlayerData[0].fNAILGUNGunTemp)
|
|
// ELSE
|
|
// sCMHDZData.sPlayerData[0].fNAILGUNGunTemp = 0.0
|
|
// CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT)
|
|
// CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_NAILGUN_STOPPED_SHOOTING)
|
|
// ENDIF
|
|
//
|
|
// EXIT
|
|
// ENDIF
|
|
//
|
|
//
|
|
//
|
|
// IF bSHooting
|
|
// IF sCMHDZData.sPlayerData[0].fNAILGUNGunTemp < 1.0
|
|
//
|
|
// IF NOT CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT)
|
|
// sCMHDZData.sPlayerData[0].fNAILGUNGunTemp += (1.0 / (fTimeOverHeat/fFrameTime))
|
|
//
|
|
// IF sCMHDZData.sPlayerData[0].fNAILGUNGunTemp >= 1.0
|
|
// CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_NAILGUN_OVERHEAT)
|
|
// CMHDZ_SET_PLAYER_BIT(CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT)
|
|
// ENDIF
|
|
//// ELSE
|
|
//// IF sCMHDZData.sPlayerData[0].iNAILGUNOverheatTime = 0
|
|
//// OR (GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].iNAILGUNOverheatTime) > 100
|
|
//// sCMHDZData.sPlayerData[0].iNAILGUNOverheatTime = GET_GAME_TIMER()
|
|
//// CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_SHOOT_NAILGUN_OVERHEAT)
|
|
//// ENDIF
|
|
// ENDIF
|
|
// ELSE
|
|
// sCMHDZData.sPlayerData[0].fNAILGUNGunTemp = 1.0
|
|
// ENDIF
|
|
// ELSE
|
|
// IF sCMHDZData.sPlayerData[0].fNAILGUNGunTemp > 0.0
|
|
// sCMHDZData.sPlayerData[0].fNAILGUNGunTemp -= (1.0 / (fTimeCooldown/fFrameTime))
|
|
// // //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PROCESS_NAILGUN_GUN_TEMP] DECREASE sCMHDZData.sPlayerData[0].fNAILGUNGunTemp = ", sCMHDZData.sPlayerData[0].fNAILGUNGunTemp)
|
|
// ELSE
|
|
// sCMHDZData.sPlayerData[0].fNAILGUNGunTemp = 0.0
|
|
// CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT)
|
|
// CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_NAILGUN_STOPPED_SHOOTING)
|
|
// ENDIF
|
|
// ENDIF
|
|
// ELSE
|
|
// IF sCMHDZData.sPlayerData[0].fNAILGUNGunTemp != 0.0
|
|
// sCMHDZData.sPlayerData[0].fNAILGUNGunTemp = 0.0
|
|
// ENDIF
|
|
// ENDIF
|
|
//ENDPROC
|
|
|
|
FUNC BOOL CMHDZ_PLAYER_SHOT(INT iPlayer, BOOL bIsMenu)
|
|
|
|
BOOL bReturn = FALSE
|
|
CMHDZ_PLAYER_WEAPON_DATA weaponData
|
|
|
|
IF CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() > 0
|
|
OR bIsMenu
|
|
IF CMHDZ_IS_PLAYER_SHOOTING()
|
|
//-- Shoot pistol
|
|
IF CMHDZ_GET_PLAYER_CURRENT_WEAPON() = GET_PLAYER_DEFAULT_WEAPON()
|
|
IF NOT bIsMenu
|
|
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT].iLastShotTime = GET_GAME_TIMER()
|
|
ENDIF
|
|
bReturn = TRUE
|
|
ELSE
|
|
|
|
IF CMHDZ_GET_PLAYER_CURRENT_WEAPON() = CMHDZ_PLAYER_WEAPON_SHOTGUN
|
|
OR CMHDZ_GET_PLAYER_CURRENT_WEAPON() = CMHDZ_PLAYER_WEAPON_RIFLE
|
|
weaponData = CMHDZ_GET_PLAYER_WEAPON_DATA(CMHDZ_GET_PLAYER_CURRENT_WEAPON())
|
|
IF sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL].iLastShotTime = 0
|
|
OR GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL].iLastShotTime >= weaponData.iMinTimeBetweenShots
|
|
sCMHDZData.sPlayerData[0].weaponData[CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL].iLastShotTime = GET_GAME_TIMER()
|
|
bReturn = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//--SHoot NAILGUN gun
|
|
IF (CMHDZ_GET_PLAYER_CURRENT_WEAPON() = CMHDZ_PLAYER_WEAPON_NAILGUN
|
|
AND (CMHDZ_IS_PLAYER_HOLDING_SHOOT())
|
|
AND GET_GAME_TIMER() - sCMHDZData.sPlayerData[iPlayer].iLastProjectileTime > 100)
|
|
// IF NOT CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_NAILGUN_OVERHEAT)
|
|
bReturn = TRUE
|
|
// ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (bReturn
|
|
OR (CMHDZ_IS_PLAYER_SHOOTING()
|
|
AND CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() = 0))
|
|
CMHDZ_HANDLE_PLAYER_SHOOTING_AUDIO(bIsMenu)
|
|
ENDIF
|
|
|
|
RETURN bReturn
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_HANDLE_PLAYER_RELOADING()
|
|
CMHDZ_PLAYER_WEAPON_TYPE weaponType = sCMHDZData.sPlayerData[0].weaponType
|
|
|
|
//-- Exit if the gun clip is full
|
|
IF NOT CMHDZ_CAN_PLAYER_CURRNT_WEAPON_BE_RELOADED()
|
|
IF sCMHDZData.sPlayerData[0].bIsReloading[weaponType]
|
|
sCMHDZData.sPlayerData[0].bIsReloading[weaponType] = FALSE
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime != 0
|
|
sCMHDZData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime = 0
|
|
ENDIF
|
|
|
|
IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET)
|
|
CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET)
|
|
ENDIF
|
|
|
|
EXIT
|
|
ENDIF
|
|
|
|
//-- Stop reloading if the player shoots after starting to reload.
|
|
IF CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() > 0
|
|
IF CMHDZ_PLAYER_SHOT(0, FALSE)
|
|
IF sCMHDZData.sPlayerData[0].bIsReloading[weaponType]
|
|
sCMHDZData.sPlayerData[0].bIsReloading[weaponType] = FALSE
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime != 0
|
|
sCMHDZData.sPlayerData[0].weaponData[weaponType].iReloadSingleBulletTime = 0
|
|
ENDIF
|
|
|
|
IF CMHDZ_IS_PLAYER_BIT_SET(CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET)
|
|
CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_RELOADED_FIRST_BULLET)
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[0].bIsReloading[weaponType]
|
|
CMHDZ_RELOAD_PLAYER_WEAPON()
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC CMHDZ_HANDLE_PLAYER_SHOOTING(INT iPlayer, BOOL bIsMenu = FALSE)
|
|
CMHDZ_STOP_LOOPING_WEAPON_AUDIO()
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].bHasJustShot = FALSE
|
|
sCMHDZData.sPlayerData[iPlayer].eReticuleBits = CMHDZ_RETICLE_BITS_NONE
|
|
|
|
// PROCESS BULLETS
|
|
// IF ((CMHDZ_GET_PLAYER_CURRENT_WEAPON() = GET_PLAYER_DEFAULT_WEAPON() AND CMHDZ_IS_PLAYER_SHOOTING())
|
|
// OR (CMHDZ_GET_PLAYER_CURRENT_WEAPON() = CMHDZ_PLAYER_WEAPON_NAILGUN AND IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RT) AND GET_GAME_TIMER() - sCMHDZData.sPlayerData[iPlayer].iLastProjectileTime > 100))
|
|
// AND (CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() > 0 AND iPlayer = 0 OR bIsMenu)
|
|
IF CMHDZ_PLAYER_SHOT(iPlayer, bIsMenu)
|
|
IF bIsMenu
|
|
OR CMHDZ_GET_LOCAL_PLAYER_HEALTH() > 0.0
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].iLastProjectileTime = GET_GAME_TIMER()
|
|
|
|
//CPRINTLN(DEBUG_MINIGAME, "TLG - Player shot.")
|
|
SET_BITMASK_ENUM_AS_ENUM(sCMHDZData.sPlayerData[iPlayer].eReticuleBits, CMHDZ_RETICLE_BITS_IS_SHOOTING)
|
|
|
|
SET_CONTROL_SHAKE(FRONTEND_CONTROL, 100, 20)
|
|
sCMHDZData.sPlayerData[iPlayer].bHasJustShot = TRUE
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[sCMHDZData.sPlayerData[iPlayer].iProjectileIndex].vSpritePos = sCMHDZData.sPlayerData[iPlayer].vSpriteFinalReticlePos
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[sCMHDZData.sPlayerData[iPlayer].iProjectileIndex].iSpriteBlastAnimFrame = 0
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[sCMHDZData.sPlayerData[iPlayer].iProjectileIndex].bShot = TRUE
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].iProjectileIndex = (sCMHDZData.sPlayerData[iPlayer].iProjectileIndex + 1) % ciCMHDZ_MAX_PROJECTILES
|
|
ENDIF
|
|
|
|
IF NOT bIsMenu
|
|
IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() > 0.0
|
|
AND (sCMHDZData.iFade = 0.0) // bugstar://7148845
|
|
|
|
// Do not apply ammo deductions for the editor mode.
|
|
IF sCMHDZData.eClientState != CMHDZ_ARCADE_CLIENT_STATE_EDITOR_ACTIVE
|
|
CMHDZ_INCREASE_SHOT_FIRED_FOR_CURRENT_LEVEL()
|
|
CMHDZ_REDUCE_PLAYER_AMMO_IN_CLIP()
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// CMHDZ_HANDLE_PLAYER_SHOOTING_AUDIO(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// IF sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_PLAYING
|
|
// OR sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD
|
|
// OR sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD
|
|
IF !bIsMenu
|
|
IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() > 0.0
|
|
// Reloading.
|
|
IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RB)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
OR (IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
AND IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_AIM))
|
|
|
|
|
|
//-- Check for player reloading
|
|
IF NOT sCMHDZData.sPlayerData[0].bIsReloading[sCMHDZData.sPlayerData[0].weaponType]
|
|
sCMHDZData.sPlayerData[0].bIsReloading[sCMHDZData.sPlayerData[0].weaponType] = TRUE
|
|
ENDIF
|
|
ELIF CMHDZ_IS_PLAYER_THROWING()
|
|
|
|
IF (sCMHDZData.sPlayerData[0].projectileType != CMHDZ_PROJECTILE_NONE)
|
|
CMHDZ_INIT_THROWN_PLAYER_PROJECTILE(0, sCMHDZData.sPlayerData[0].projectileType, sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos)
|
|
ENDIF
|
|
ELSE
|
|
IF CMHDZ_GET_PLAYER_AMMO_IN_CLIP_FOR_CURRENT_WEAPON() = 0
|
|
AND NOT CMHDZ_DOES_PLAYER_CURRENT_WEAPON_HAVE_INFINITE_AMMO()
|
|
IF CMHDZ_GET_PLAYER_TOTAL_AMMO_IN_CURRENT_WEAPON(FALSE) > 0
|
|
//-- Check for player shootig empty weapon
|
|
// IF CMHDZ_IS_PLAYER_SHOOTING()
|
|
// CMHDZ_HANDLE_PLAYER_FIRING_EMPTY_WEAPON_AUDIO()
|
|
// ENDIF
|
|
ELSE
|
|
IF sCMHDZData.sPlayerData[0].weaponType = CMHDZ_PLAYER_WEAPON_TYPE_SPECIAL
|
|
CMHDZ_SET_PLAYER_WEAPON_TYPE(CMHDZ_PLAYER_WEAPON_TYPE_DEFAULT)
|
|
CMHDZ_SET_PLAYER_SPECIAL_WEAPON(CMHDZ_PLAYER_WEAPON_NONE, FALSE)
|
|
CMHDZ_INIT_PLAYER_SPECIAL_WEAPON()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
INT i
|
|
FOR i = 0 TO ciCMHDZ_MAX_PROJECTILES - 1
|
|
|
|
IF sCMHDZData.sPlayerData[iPlayer].sBulletData[i].bShot
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[i].iSpriteBlastAnimFrame += sCMHDZData.sPlayerData[iPlayer].sBulletData[i].iSlowUpdateFrames
|
|
|
|
IF bIsMenu
|
|
HANDLE_PLAYER_BULLET_IN_MENU(iPlayer, i)
|
|
ELSE
|
|
HANDLE_PLAYER_BULLET_COLLISION(iPlayer, i)
|
|
|
|
IF IS_MOVING_LEVEL()
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[i].vSpritePos.X -= CMHDZ_GET_PROJECTILE_UPDATE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF sCMHDZData.sPlayerData[iPlayer].sBulletData[i].iSpriteBlastAnimFrame >= ciCMHDZ_PLAYER_SHOT_MAX_ANIM_FRAMES
|
|
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[i].bShot = FALSE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[i].bHit = FALSE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[i].bHitObject = FALSE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[i].bPlayedAudio = FALSE
|
|
sCMHDZData.sPlayerData[iPlayer].sBulletData[i].iSpriteBlastAnimFrame = 0
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
//CMHDZ_PROCESS_NAILGUN_GUN_TEMP()
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_PROCESS_MENU_CONTROLS()
|
|
|
|
// FLOAT fAxisThresholdMod = cfIAP_CONTROLLER_AXIS_THRESHOLD_MOD
|
|
//
|
|
// FLOAT fRightStickX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
|
|
// FLOAT fRightStickY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
|
|
|
|
|
|
|
|
// fAxisThresholdMod = 0.5
|
|
//
|
|
// //Reticule 1
|
|
// IF fRightStickX < -cfSTICK_THRESHOLD * fAxisThresholdMod AND sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x > 0.0
|
|
// sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x -= 30 - (BOOL_TO_INT(sCMHDZData.sPlayerData[0].bHoveringEnemy) * 15)
|
|
// ELIF fRightStickX > cfSTICK_THRESHOLD * fAxisThresholdMod AND sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x < (cfBASE_SCREEN_WIDTH - 40)
|
|
// sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x += 30 - (BOOL_TO_INT(sCMHDZData.sPlayerData[0].bHoveringEnemy) * 15)
|
|
// ENDIF
|
|
//
|
|
// IF fRightStickY < -cfSTICK_THRESHOLD * fAxisThresholdMod AND sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y > 20.0
|
|
// sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y -= 30 - (BOOL_TO_INT(sCMHDZData.sPlayerData[0].bHoveringEnemy) * 15)
|
|
// ELIF fRightStickY > cfSTICK_THRESHOLD * fAxisThresholdMod AND sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y < (cfBASE_SCREEN_HEIGHT - 40)
|
|
// sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y += 30 - (BOOL_TO_INT(sCMHDZData.sPlayerData[0].bHoveringEnemy) * 15)
|
|
// ENDIF
|
|
|
|
CMHDZ_HANDLE_RETICULE_MOVEMENT(FALSE, TRUE)
|
|
|
|
////CPRINTLN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] RETICULE ", sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x, ",", sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Levels are split up into screens. Generally each full span is a single screen.
|
|
/// RETURNS: True when all stages complete
|
|
//FUNC INT CMHDZ_GET_SCREEN_PROGRESSION_VALUES()
|
|
//
|
|
// RETURN ROUND(((1920.0) * sCMHDZData.iCurrentScreen)*2.2)
|
|
//
|
|
//ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_MAINTAIN_PLAYER_CURRENT_LEVEL_PROGRESSION()
|
|
|
|
// Testing moved check
|
|
IF IS_MOVING_LEVEL()
|
|
IF CMHDZ_SHOULD_MOVING_LEVEL_STOP()
|
|
AND CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_SCREEN() > 0
|
|
AND NOT CMHDZ_IS_LEVEL_STOPPED()
|
|
IF sCMHDZData.iStaticScreenPhase <= 0
|
|
sCMHDZData.iStaticScreenPhase++
|
|
ENDIF
|
|
|
|
//IF CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_PHASE() > 0
|
|
IF sCMHDZData.eCurrentLevel != CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Get_Ready)
|
|
ENDIF
|
|
|
|
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_MICROAIM)
|
|
CMHDZ_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_STOPPED)
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_MAINTAIN_PLAYER_CURRENT_LEVEL_PROGRESSION - CMHDZ_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_STOPPED) - sCMHDZData.iStaticScreenPhase: ", sCMHDZData.iStaticScreenPhase)
|
|
//ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// By default we increase the screen count every Set number of pixels
|
|
IF NOT CMHDZ_IS_LEVEL_STOPPED()
|
|
|
|
|
|
sCMHDZData.fOverallLevelProgression += (CMHDZ_GET_GENERAL_UPDATE())
|
|
|
|
// 1 is the minimum screen value so we count from there.
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/(cfCMHDZ_SCREEN_LENGTH))
|
|
|
|
ELSE //CMHDZ_IS_LEVEL_STOPPED()
|
|
|
|
IF CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_PHASE() <= 0
|
|
sCMHDZData.iStaticScreenPhase++
|
|
CDEBUG2LN(DEBUG_MINIGAME,"[BAZ] CMHDZ_MAINTAIN_PLAYER_CURRENT_LEVEL_PROGRESSION - sCMHDZData.iStaticScreenPhase = ", sCMHDZData.iStaticScreenPhase, " CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_PHASE = ", CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_PHASE())
|
|
ENDIF
|
|
|
|
IF CMHDZ_GET_CURRENT_LEVEL_SCREEN() >= CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL()
|
|
|
|
// Update the boss fight if we're in teh final level.
|
|
IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
IF CMHDZ_BEARSY_UPDATE()
|
|
//CMHDZ_RESET_SCREEN_TO_STOP_ON()
|
|
// check for round clear
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_COMPLETE_LEVEL)
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF sCMHDZData.iStaticScreenPhase > CMHDZ_GET_STATIC_SCREEN_PHASE_COUNT()
|
|
//IF CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_SCREEN() = 0
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "CMHDZ_MAINTAIN_PLAYER_CURRENT_LEVEL_PROGRESSION - update stage iEnemyLeftInStage = 0")
|
|
CMHDZ_RESET_SCREEN_TO_STOP_ON()
|
|
|
|
// check for round clear
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_COMPLETE_LEVEL)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF sCMHDZData.iStaticScreenPhase > CMHDZ_GET_STATIC_SCREEN_PHASE_COUNT()
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_STOPPED)
|
|
CDEBUG2LN(DEBUG_MINIGAME,"[BAZ] CMHDZ_MAINTAIN_PLAYER_CURRENT_LEVEL_PROGRESSION - Clearing flag - CMHDZ_GET_STATIC_SCREEN_PHASE_COUNT() = ", CMHDZ_GET_STATIC_SCREEN_PHASE_COUNT())
|
|
sCMHDZData.iTotalNumberOfEnemiesKilledForScreen = 0
|
|
sCMHDZData.iStaticScreenPhase = 0
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_CHECK_PLAYER_PROGRESS()
|
|
|
|
IF sCMHDZData.eLevelState = CMHDZ_PLAY
|
|
|
|
IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() <= 0.0 // OR sCMHDZData.sPlayerData[0].iAmmo <= 0
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_HEALTH_DEAD)
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_DEATH)
|
|
// sCMHDZData.bFadingOut = TRUE
|
|
sCMHDZData.eLevelState = CMHDZ_WAIT_FOR_DEAD
|
|
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] sCMHDZData.eLevelState = WAIT_FOR_DEAD")
|
|
IF NOT IS_BIT_SET(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_STOPPED))
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_STOP)
|
|
SET_BIT(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_STOPPED))
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF CMHDZ_MAINTAIN_PLAYER_CURRENT_LEVEL_PROGRESSION()
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [GD] Level completed")
|
|
|
|
sCMHDZData.bLevelsCompleted[ENUM_TO_INT(sCMHDZData.eCurrentLevel)] = TRUE
|
|
sCMHDZData.bFadingOut = TRUE
|
|
sCMHDZData.eLevelState = CMHDZ_FADING_OUT
|
|
CMHDZ_ASIGN_STAR_RATING(sCMHDZData.eCurrentLevel)
|
|
|
|
|
|
IF CMHDZ_ARE_ALL_LEVELS_COMPLETE()
|
|
CMHDZ_MAINTAIN_PLAYER_AWARDS()
|
|
CMHDZ_SEND_TELEMETRY()
|
|
ELSE
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Complete_Level)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ELIF sCMHDZData.eLevelState = CMHDZ_WAIT_FOR_DEAD
|
|
IF sCMHDZData.sPlayerData[0].iDeadTime = 0
|
|
sCMHDZData.sPlayerData[0].iDeadTime = GET_GAME_TIMER()
|
|
ELSE
|
|
IF GET_GAME_TIMER() - sCMHDZData.sPlayerData[0].iDeadTime >= ciCMHDZ_WAIT_FOR_DEAD_TIME
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_GAMEPLAY)
|
|
CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_LEVEL_BACKGROUND_LOOP)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Player_Death)
|
|
CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_MENUS)
|
|
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_GAME_OVER)")
|
|
CMHDZ_SET_RESULT_SCREEN_STATE(CMHDZ_RESULT_SCREEN_STATE_INIT)
|
|
|
|
CMHDZ_ASIGN_STAR_RATING(sCMHDZData.eCurrentLevel)
|
|
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_GAME_OVER)
|
|
ENDIF
|
|
ENDIF
|
|
ELIF sCMHDZData.eLevelState = CMHDZ_FADING_OUT
|
|
|
|
IF sCMHDZData.iFade >= 255
|
|
CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_LEVEL_BACKGROUND_LOOP)
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_GAMEPLAY)
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE)
|
|
|
|
CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_QUAD_DAMAGE)
|
|
CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_PICKUP_BUFF)
|
|
|
|
CMHDZ_CLEAR_PLAYER_BIT(CMHDZ_PLAYER_BIT_INVULNERABILE)
|
|
CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_PICKUP_SHIELD)
|
|
|
|
// Go to the result screen
|
|
CMHDZ_SET_RESULT_SCREEN_STATE(CMHDZ_RESULT_SCREEN_STATE_INIT)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_RESULT_SCREEN)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_INIT()
|
|
|
|
ARCADE_CABINET_COMMON_INITIALIZATION()
|
|
|
|
CMHDZ_INIT_COLOUR_STRUCTS()
|
|
CMHDZ_INIT_MENU()
|
|
|
|
CMHDZ_INIT_PLAYER_WEAPON()
|
|
|
|
CMHDZ_INIT_BOSS_STRUCT()
|
|
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_FIB)
|
|
|
|
ENDPROC
|
|
|
|
// Process REQUESTING ASSETS
|
|
//PROC CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS()
|
|
//
|
|
// IF NOT CMHDZ_LOAD_ALL_TEXTURE_DICTS()
|
|
// CDEBUG2LN(DEBUG_MINIGAME, "CMHDZ_LOAD_ALL_TEXTURE_DICTS - Returning false")
|
|
// EXIT
|
|
// ENDIF
|
|
//
|
|
// IF NOT ARCADE_GAMES_POSTFX_REQUESTING_ASSETS()
|
|
// CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS Loading POSTFX assets")
|
|
// EXIT
|
|
// ENDIF
|
|
//
|
|
// IF NOT REQUEST_SCRIPT_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH")
|
|
// CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Waiting for main audio")
|
|
// EXIT
|
|
// ENDIF
|
|
//
|
|
//// IF NOT REQUEST_SCRIPT_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH_Enemy_Vocal")
|
|
//// CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Waiting for enemy vocal audio")
|
|
//// EXIT
|
|
//// ENDIF
|
|
//
|
|
// IF NOT REQUEST_SCRIPT_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH_Dir_Vocal")
|
|
// CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Waiting for Director vocal audio")
|
|
// EXIT
|
|
// ENDIF
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// #IF CMHDZ_CMDLINE_BOOT_INTO_EDITOR
|
|
// #IF CMHDZ_CMDLINE_EDITOR_NEW
|
|
// sCMHDZData.sEditor.bEditorActive = TRUE
|
|
// #ENDIF
|
|
// #ENDIF
|
|
//
|
|
// IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsSkipIntro") OR (CMHDZ_CMDLINE_NO_INTRO = 1)
|
|
// CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_MENUS)
|
|
// CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN)
|
|
// EXIT
|
|
// ENDIF
|
|
// #ENDIF
|
|
//
|
|
// //CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_FIB)
|
|
//
|
|
//ENDPROC
|
|
|
|
FUNC BOOL CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS()
|
|
|
|
IF NOT CMHDZ_LOAD_ALL_TEXTURE_DICTS()
|
|
CDEBUG2LN(DEBUG_MINIGAME, "CMHDZ_LOAD_ALL_TEXTURE_DICTS - Returning false")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// IF NOT ARCADE_GAMES_POSTFX_REQUESTING_ASSETS()
|
|
// CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS Loading POSTFX assets")
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
|
|
IF NOT REQUEST_SCRIPT_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH")
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Waiting for main audio")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// IF NOT REQUEST_SCRIPT_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH_Enemy_Vocal")
|
|
// CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Waiting for enemy vocal audio")
|
|
// EXIT
|
|
// ENDIF
|
|
|
|
IF NOT REQUEST_SCRIPT_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH_Dir_Vocal")
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS - Waiting for Director vocal audio")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
#IF CMHDZ_CMDLINE_BOOT_INTO_EDITOR
|
|
#IF CMHDZ_CMDLINE_EDITOR_NEW
|
|
sCMHDZData.sEditor.bEditorActive = TRUE
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsSkipIntro") OR (CMHDZ_CMDLINE_NO_INTRO = 1)
|
|
CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_MENUS)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN)
|
|
RETURN FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
//CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_FIB)
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
//-- Process intro Bink movie
|
|
PROC CMHDZ_PROCESS_CLIENT_INTRO()
|
|
|
|
//Wait for the intro movie to finish
|
|
CMHDZ_DRAW_MENU_BACKGROUND()
|
|
|
|
FLOAT fRatioWidth = 1.0 * GET_ASPECT_RATIO_MODIFIER_FROM_ASPECT_RATIO()
|
|
FLOAT fRatioHeight = 1.0
|
|
BOOL bMovieFinished = CMHDZ_DRAW_MOVIE_SEQUENCE(sCMHDZData.bmIdCmhdzIntro, fRatioWidth, fRatioHeight)
|
|
// ARCADE_GAMES_POSTFX_DRAW()
|
|
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_PROCESS_CLIENT_INTRO - Movie time: ", GET_BINK_MOVIE_TIME(sCMHDZData.bmIdCmhdzIntro))
|
|
|
|
IF ARE_ANY_CONTROLS_BEING_PRESSED()
|
|
CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_MENUS)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN)
|
|
//SET_BINK_MOVIE_TIME(sCMHDZData.bmIdCmhdzIntro, 99.0)
|
|
//CMHDZ_START_MOVIE_FORCE(sCMHDZData.bmIdCmhdzIntro, "CMHDZ_Intro_Static")
|
|
CMHDZ_STOP_TITLE_INTRO_MOVIE(sCMHDZData.bmIdCmhdzIntro)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_Logo_Appear)
|
|
TWS_DRAW_FRONT_FX()
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF NOT bMovieFinished
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_PROCESS_CLIENT_INTRO] Movie Time: ", GET_BINK_MOVIE_TIME(sCMHDZData.bmIdCmhdzIntro))
|
|
IF NOT IS_BIT_SET(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_STARTED_INTRO))
|
|
//IF GET_BINK_MOVIE_TIME(sCMHDZData.bmIdCmhdzIntro) >= 0.0
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_INTRO)
|
|
|
|
//DG_START_MOVIE()
|
|
SET_BIT(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_STARTED_INTRO))
|
|
//ENDIF
|
|
ENDIF
|
|
|
|
TWS_DRAW_FRONT_FX()
|
|
EXIT // Stop further progress.
|
|
ENDIF
|
|
|
|
//SCRIPT_ASSERT("[CMHDZ][BAZ] CMHDZ_PROCESS_CLIENT_INTRO")
|
|
CMHDZ_DRAW_MENU_BACKGROUND()
|
|
CMHDZ_DRAW_GAME_SPRITE_DETAILS(CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT_CH_TITLES), "CAMHEDZ_TITLE_SCREEN_CHARACTER",
|
|
INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, (cfBASE_SCREEN_HEIGHT/2)), INIT_VECTOR_2D(782, 1080), 0, sCMHDZData.rgbaSprite)
|
|
|
|
//CMHDZ_START_MOVIE_FORCE(sCMHDZData.bmIdCmhdzIntro, "CMHDZ_Intro_Static")
|
|
CMHDZ_STOP_TITLE_INTRO_MOVIE(sCMHDZData.bmIdCmhdzIntro)
|
|
CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_MENUS)
|
|
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_Logo_Appear)
|
|
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN)
|
|
|
|
TWS_DRAW_FRONT_FX()
|
|
ENDPROC
|
|
|
|
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_FIB
|
|
CMHDZ_DRAW_MENU_BACKGROUND()
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ][BAZ] CMHDZ_PROCESS_CLIENT_STATE_FIB")
|
|
|
|
// CMHDZ_DRAW_GAME_SPRITE(sCMHDZData.tl31BaseTextDict, "ARCADE_FIB", INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfCMHDZ_FIB_SCREEN_WIDTH, cfCMHDZ_FIB_SCREEN_HEIGHT), 0, sCMHDZData.rgbaSprite)
|
|
CMHDZ_DRAW_GAME_SPRITE_DETAILS(CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT_FACADE), "BADLANDS_PSA_SCREEN", INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfCMHDZ_PSA_SCREEN_WIDTH, cfCMHDZ_PSA_SCREEN_HEIGHT), 0, sCMHDZData.rgbaSprite)
|
|
|
|
TWS_DRAW_FRONT_FX()
|
|
|
|
IF NOT CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS()
|
|
EXIT
|
|
ENDIF
|
|
|
|
|
|
IF sCMHDZData.iTimer = 0
|
|
sCMHDZData.iTimer = GET_GAME_TIMER()
|
|
ELSE
|
|
IF GET_GAME_TIMER() - sCMHDZData.iTimer > 5000
|
|
OR CMHDZ_IS_PLAYER_SHOOTING()
|
|
DG_START_MOVIE(sCMHDZData.bmIdCmhdzIntro, "CMHDZ_Intro") // _1992_DegenatronLogo_720_auto
|
|
sCMHDZData.iTimer = 0
|
|
ARCADE_GAMES_HELP_TEXT_CLEAR()
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_INTRO)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
// Process TITLE SCREEN
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_TITLE_SCREEN()
|
|
|
|
ARCADE_GAMES_HELP_TEXT_PRINT_FOREVER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_HELP_MENU)
|
|
|
|
CMHDZ_TRIGGER_TITLE_MUSIC()
|
|
|
|
CMHDZ_HANDLE_PLAYER_SHOOTING(0, TRUE)
|
|
CMHDZ_PROCESS_MENU_CONTROLS()
|
|
|
|
CMHDZ_DRAW_CLIENT_STATE_TITLE_SCREEN()
|
|
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_TITLE_SCREEN_FADE_OUT()
|
|
|
|
ARCADE_GAMES_HELP_TEXT_PRINT_FOREVER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_HELP_MENU)
|
|
|
|
FLOAT fRatioWidth = 1.0 * GET_ASPECT_RATIO_MODIFIER_FROM_ASPECT_RATIO()
|
|
FLOAT fRatioHeight = 1.0
|
|
|
|
IF DG_DRAW_MOVIE(sCMHDZData.bmIdCmhdzIntro, fRatioWidth, fRatioHeight)
|
|
//#IF IS_DEBUG_BUILD
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_ATTACK)
|
|
//#ENDIF
|
|
//sCMHDZData.fSyncOffsetY = 700
|
|
CMHDZ_STOP_TITLE_INTRO_MOVIE(sCMHDZData.bmIdCmhdzIntro)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU)
|
|
ENDIF
|
|
|
|
IF GET_BINK_MOVIE_TIME(sCMHDZData.bmIdCmhdzIntro) <= 5.0
|
|
|
|
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, cfBASE_SCREEN_HEIGHT/2), INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_HEIGHT), sCMHDZData.rgbaBlack)
|
|
|
|
CMHDZ_DRAW_GAME_SPRITE_DETAILS(CMHDZ_GET_TEXTURE_DICT_NAME(CMHDZ_TEXDICT_CH_TITLES), "CAMHEDZ_TITLE_SCREEN_CHARACTER",
|
|
INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2, (cfBASE_SCREEN_HEIGHT/2)), INIT_VECTOR_2D(782, 1080), 0, sCMHDZData.rgbaSprite)
|
|
ENDIF
|
|
|
|
TWS_DRAW_FRONT_FX()
|
|
ENDPROC
|
|
|
|
// Process STATE MENU
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_LEVEL_SELECT_MENU()
|
|
ARCADE_GAMES_HELP_TEXT_PRINT_FOREVER(ARCADE_GAMES_HELP_TEXT_ENUM_CMHDZ_HELP_MENU)
|
|
CMHDZ_TRIGGER_TITLE_MUSIC()
|
|
|
|
CMHDZ_PROCESS_MENU_CONTROLS()
|
|
CMHDZ_HANDLE_PLAYER_SHOOTING(0, TRUE)
|
|
CMHDZ_DRAW_CLIENT_STATE_MENU()
|
|
CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU(TRUE)
|
|
ENDPROC
|
|
|
|
// Process INIT LEVEL
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_INIT_LEVEL()
|
|
#IF IS_DEBUG_BUILD
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PROCESS_CLIENT_STATE_INIT_LEVEL] {DSW} Called. Level: ", CMHDZ_LEVELS_TO_STRING(CMHDZ_GET_CURRENT_LEVEL()))
|
|
#ENDIF
|
|
|
|
ARCADE_GAMES_HELP_TEXT_CLEAR()
|
|
|
|
//-- Need to still draw the menu during this frame
|
|
CMHDZ_DRAW_MENU_BACKGROUND()
|
|
TWS_DRAW_FRONT_FX()
|
|
//CMHDZ_DRAW_CLIENT_STATE_MENU()
|
|
|
|
TEXT_LABEL_31 tl31TextDict = CMHDZ_GET_TEXTURE_DICTIONARY_FOR_LEVEL(sCMHDZData.eCurrentLevel)
|
|
REQUEST_STREAMED_TEXTURE_DICT(tl31TextDict)
|
|
IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED(tl31TextDict)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] {dsw} CMHDZ_PROCESS_CLIENT_STATE_INIT_LEVEL - Loading ", tl31TextDict)
|
|
EXIT
|
|
ENDIF
|
|
|
|
INT i
|
|
|
|
// Reset Counter Variables
|
|
CMHDZ_CLEANUP_VARIABLES()
|
|
CMHDZ_INIT_COVER_POINTS(sCMHDZData.eCurrentLevel)
|
|
CMHDZ_INIT_ENEMIES()
|
|
CMHDZ_INIT_PLAYERS()
|
|
CMHDZ_INIT_BACKGROUND(sCMHDZData.eCurrentLevel)
|
|
CMHDZ_INIT_ITEMS()
|
|
CMHDZ_INIT_PLAY_VARIABLES()
|
|
CMHDZ_INIT_SOUND()
|
|
CMHDZ_INIT_BOSS_STRUCT()
|
|
|
|
CMHDZ_RESET_LOCAL_PLAYER_SCORE_FOR_CURRENT_LEVEL()
|
|
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_MENUS)
|
|
CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_GAMEPLAY)
|
|
|
|
sCMHDZData.iLocalLevelRunningTime = GET_GAME_TIMER()
|
|
sCMHDZData.iLevelBitset[ENUM_TO_INT(sCMHDZData.eCurrentLevel)] = 0
|
|
|
|
sCMHDZData.iTotalLevelShots[sCMHDZData.eCurrentLevel] = 0
|
|
sCMHDZData.iTotalLevelEnemyHits[sCMHDZData.eCurrentLevel] = 0
|
|
sCMHDZData.iTotalLevelEnemyHeadShots[sCMHDZData.eCurrentLevel] = 0
|
|
sCMHDZData.iTotalPowerupsCollected[sCMHDZData.eCurrentLevel] = 0
|
|
sCMHDZData.iStaggeredOnScreenViableCoverCount = 0
|
|
CMHDZ_RESET_SCREEN_TO_STOP_ON()
|
|
|
|
REPEAT ciCMHDZ_MAX_LANES i
|
|
sCMHDZData.iCurrentActiveEnemies[i] = 0
|
|
sCMHDZData.iTimeSinceEnemyActive[i] = 0
|
|
ENDREPEAT
|
|
|
|
sCMHDZData.iResultsScreenTimer = 0
|
|
sCMHDZData.iResultsScreenTimeout = 0
|
|
sCMHDZData.iReturnToMenuTimeout = 0
|
|
|
|
sCMHDZData.iTotalNumberOfEnemiesKilledForScreen = 0
|
|
|
|
// New progression trackers
|
|
sCMHDZData.fOverallLevelProgression = 0.0
|
|
sCMHDZData.iStaticScreenPhase = 0
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_STOPPED)
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO)
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_ADDED_ON_ACCURACY_BONUS)
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_PLAYED_DEATH_SCREEN_AUDIO)
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_PLAYED_ACCURACY_SCORE_AUDIO)
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_PLAYED_RESULTS_SCORE_AUDIO)
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_PLAYED_DEATH_SCREEN_AUDIO)
|
|
|
|
IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_SCRAPYARD
|
|
OR sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_ASYLUM
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_BUNNY_KILL)
|
|
ENDIF
|
|
|
|
IF sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_PARK
|
|
OR sCMHDZData.eCurrentLevel = CMHDZ_LEVEL_CITY
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_CHALLENGE_MONKEY_C_MONKEY_DIE_MONKEY_KILL)
|
|
ENDIF
|
|
|
|
IF CMHDZ_GET_LOCAL_PLAYER_HI_SCORE_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL_AS_INT()) > 0
|
|
CMHDZ_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_REPLAYING_LEVEL)
|
|
ENDIF
|
|
|
|
CLEAR_BIT(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_STARTED_TITLE))
|
|
CLEAR_BIT(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_STOPPED))
|
|
CLEAR_BIT(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_DEATH))
|
|
ARCADE_GAMES_HELP_TEXT_CLEAR()
|
|
sAGHelpText.iCurrentHelpTextExpiry = NATIVE_TO_INT(GET_NETWORK_TIME()) + 4000
|
|
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_PLAYING)
|
|
|
|
CMHDZ_PREPARE_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_DEATH)
|
|
CMHDZ_PREPARE_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_HIT)
|
|
CMHDZ_PREPARE_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_HIT_ALT)
|
|
|
|
// Set up help text string
|
|
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_SHOOT_AIM)
|
|
CMHDZ_SET_HELP_TEXT_BIT(CMHDZ_HELP_TEXT_BIT_THROW)
|
|
|
|
ENDPROC
|
|
|
|
// Process PLAYING
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_PLAYING()
|
|
#IF IS_DEBUG_BUILD
|
|
IF (sCMHDZData.bDebugPause)
|
|
CMHDZ_DRAW_CLIENT_STATE_PLAYING()
|
|
EXIT
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// //CMHDZ_REPLAY_SYSTEM_UPDATE()
|
|
// IF CMHDZ_IS_REPLAY_SYSTEM_PLAYING_BACK()
|
|
// CMHDZ_DRAW_CLIENT_STATE_PLAYING()
|
|
// EXIT
|
|
// ENDIF
|
|
|
|
CMHDZ_HANDLE_ENEMIES()
|
|
|
|
CMHDZ_HANDLE_THROWN_ENEMY_PROJECTILES()
|
|
|
|
CMHDZ_HANDLE_PLAYER_SHOOTING(0)
|
|
CMHDZ_HANDLE_THROWN_PLAYER_PROJECTILES(0)
|
|
CMHDZ_HANDLE_PLAYER_RELOADING()
|
|
|
|
CMHDZ_HANDLE_PLAYER_MOVEMENT()
|
|
|
|
CMHDZ_HANDLE_PLAYER_ABILITIES()
|
|
|
|
CMHDZ_HANDLE_FX()
|
|
|
|
CMHDZ_CHECK_PLAYER_PROGRESS()
|
|
|
|
CMHDZ_DRAW_CLIENT_STATE_PLAYING()
|
|
|
|
CMHDZ_HANDLE_LOOPING_AUDIO()
|
|
|
|
CMHDZ_MAINTAIN_HELP_TEXT()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsReturnToMenuInGame") OR (CMHDZ_CMDLINE_RTN_TO_MENU_IN_GAME = 1)
|
|
CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU(TRUE)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
// Process PLAYING
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_EDITOR_ACTIVE()
|
|
#IF IS_DEBUG_BUILD
|
|
#IF CMHDZ_CMDLINE_EDITOR_NEW
|
|
|
|
IF (sCMHDZData.sEditor.bPlayStage)
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_PLAYING()
|
|
ELSE
|
|
CMHDZ_HANDLE_RETICULE_MOVEMENT(FALSE)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[BAZ]CMHDZ_PROCESS_CLIENT_STATE_EDITOR_ACTIVE - CMHDZ_HANDLE_RETICULE_MOVEMENT")
|
|
CMHDZ_DRAW_CLIENT_STATE_EDITOR_ACTIVE()
|
|
ENDIF
|
|
|
|
EXIT
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
// if the editor isn't defined and somehow we end up here - reset the stage
|
|
CMHDZ_PROCESS_CLIENT_STATE_INIT_LEVEL()
|
|
ENDPROC
|
|
|
|
FUNC BOOL CMHDZ_IS_SCORE_POOR_FOR_CURRENT_LEVEL()
|
|
INT iScore = CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL_AS_INT())
|
|
|
|
SWITCH CMHDZ_GET_CURRENT_LEVEL()
|
|
CASE CMHDZ_LEVEL_CITY
|
|
RETURN iScore < 1000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SCRAPYARD
|
|
RETURN iScore < 1000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_ASYLUM
|
|
RETURN iScore < 1000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_PARK
|
|
RETURN iScore < 1000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
RETURN iScore < 1000
|
|
BREAK
|
|
ENDSWITCH
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_IS_SCORE_AVERAGE_FOR_CURRENT_LEVEL()
|
|
INT iScore = CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL_AS_INT())
|
|
|
|
SWITCH CMHDZ_GET_CURRENT_LEVEL()
|
|
CASE CMHDZ_LEVEL_CITY
|
|
RETURN iScore < 1500
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SCRAPYARD
|
|
RETURN iScore < 1500
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_ASYLUM
|
|
RETURN iScore < 1500
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_PARK
|
|
RETURN iScore < 1500
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
RETURN iScore < 1500
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_IS_SCORE_BELOW_MAX_FOR_CURRENT_LEVEL()
|
|
INT iScore = CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL_AS_INT())
|
|
|
|
SWITCH CMHDZ_GET_CURRENT_LEVEL()
|
|
CASE CMHDZ_LEVEL_CITY
|
|
RETURN iScore < 10000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SCRAPYARD
|
|
RETURN iScore < 10000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_ASYLUM
|
|
RETURN iScore < 10000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_PARK
|
|
RETURN iScore < 20000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
RETURN iScore < 100000
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_IS_SCORE_ABOVE_MAX_FOR_CURRENT_LEVEL()
|
|
INT iScore = CMHDZ_GET_LOCAL_PLAYER_SCORE_FOR_LEVEL(CMHDZ_GET_CURRENT_LEVEL_AS_INT())
|
|
|
|
SWITCH CMHDZ_GET_CURRENT_LEVEL()
|
|
CASE CMHDZ_LEVEL_CITY
|
|
RETURN iScore >= 10000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SCRAPYARD
|
|
RETURN iScore >= 10000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_ASYLUM
|
|
RETURN iScore >= 10000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_PARK
|
|
RETURN iScore >= 20000
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
RETURN iScore >= 100000
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_GAME_OVER()
|
|
|
|
// Reset screen effects
|
|
IF sCMHDZData.fSyncOffsetY != 0.0
|
|
AND (sCMHDZData.eResultState != CMHDZ_RESULT_SCREEN_STATE_REWIND)
|
|
INIT_RGBA_STRUCT(sCMHDZData.rgbaSprite, 255, 255, 255, 255)
|
|
sCMHDZData.fSyncOffsetY = 0.0
|
|
ENDIF
|
|
|
|
CMHDZ_PROCESS_MENU_CONTROLS()
|
|
CMHDZ_HANDLE_PLAYER_SHOOTING(0, TRUE)
|
|
//CMHDZ_REPLAY_SYSTEM_UPDATE()
|
|
CMHDZ_DRAW_CLIENT_STATE_GAME_OVER()
|
|
IF (sCMHDZData.eResultState = CMHDZ_RESULT_SCREEN_STATE_COMPLETE)
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_MENU_CONTINUE)
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL)
|
|
ENDIF
|
|
|
|
IF (sCMHDZData.eResultState = CMHDZ_RESULT_SCREEN_STATE_GOTO_LEADERBOARD)
|
|
IF sCMHDZData.bSkipLeaderboard
|
|
CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU(FALSE, TRUE, DEFAULT, TRUE)
|
|
ELSE
|
|
CMHDZ_INIT_GOTO_LEADERBOARD()
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// Process RESULT SCREEN
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_RESULT_SCREEN()
|
|
BOOL bDoFinalScene
|
|
BOOL bShouldGoToLeaderboard
|
|
STRING sSubtitles
|
|
|
|
IF sCMHDZData.iResultsScreenTimer = 0
|
|
sCMHDZData.iResultsScreenTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
IF CMHDZ_ARE_ALL_LEVELS_COMPLETE() AND NOT sCMHDZData.bPlayedOutro
|
|
bDoFinalScene = TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF GET_COMMANDLINE_PARAM_EXISTS("sc_badlandsForceOutro") OR (CMHDZ_CMDLINE_FORCE_OUTRO = 1)
|
|
bDoFinalScene = TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// Fix the screen jump
|
|
// IF sCMHDZData.fSyncOffsetY > 0
|
|
// sCMHDZData.fSyncOffsetY -= (0.0+@GET_RANDOM_FLOAT_IN_RANGE(2500.0,4000.0))
|
|
// ELSE
|
|
// sCMHDZData.fSyncOffsetY = 0.0
|
|
// ENDIF
|
|
|
|
SWITCH (sCMHDZData.eResultState)
|
|
CASE CMHDZ_RESULT_SCREEN_STATE_INIT
|
|
//sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos = INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/3, cfBASE_SCREEN_HEIGHT/3)
|
|
//CMHDZ_REPLAY_SYSTEM_STOP_RECORDING()
|
|
|
|
// Display the subtitle if language isn't English
|
|
IF GET_CURRENT_LANGUAGE() != LANGUAGE_ENGLISH
|
|
sSubtitles = "CMHDZ_LVW1"
|
|
|
|
SWITCH sCMHDZData.eCurrentLevel
|
|
|
|
CASE CMHDZ_LEVEL_CITY
|
|
sSubtitles = "CMHDZ_LVW1"
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SCRAPYARD
|
|
sSubtitles = "CMHDZ_LVW2"
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_ASYLUM
|
|
sSubtitles = "CMHDZ_LVW3"
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_PARK
|
|
sSubtitles = "CMHDZ_LVW4"
|
|
BREAK
|
|
|
|
CASE CMHDZ_LEVEL_SLAUGHTERHOUSE
|
|
sSubtitles = "CMHDZ_LVW5"
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
PRINT_NOW(sSubtitles, 8000, 1)
|
|
ENDIF
|
|
|
|
CMHDZ_SET_RESULT_SCREEN_STATE(CMHDZ_RESULT_SCREEN_STATE_COMPLETE)
|
|
BREAK
|
|
|
|
CASE CMHDZ_RESULT_SCREEN_STATE_COMPLETE
|
|
|
|
// INT i
|
|
|
|
IF sCMHDZData.sPlayerData[0].fHealth <= 0.0
|
|
bShouldGoToLeaderboard = TRUE
|
|
IF NOT IS_BIT_SET(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_DEATH))
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_DEATH)
|
|
SET_BIT(sCMHDZData.iMusicBitset, ENUM_TO_INT(CMHDZ_MUSIC_BIT_DEATH))
|
|
ENDIF
|
|
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PROCESS_CLIENT_STATE_RESULT_SCREEN] {DSW} bShouldGoToLeaderboard = TRUE Player health: ", sCMHDZData.sPlayerData[0].fHealth)
|
|
ELSE
|
|
//IF CMHDZ_ARE_ALL_LEVELS_COMPLETE() AND NOT sCMHDZData.bPlayedOutro
|
|
IF bDoFinalScene
|
|
IF (GET_GAME_TIMER() - sCMHDZData.iResultsScreenTimer ) > 14000
|
|
OR (GET_GAME_TIMER() - sCMHDZData.iResultsScreenTimer ) > 2000
|
|
AND CMHDZ_CHECK_FOR_MENU_PROGRESS_BUTTON()
|
|
DG_START_MOVIE(sCMHDZData.bmIdCmhdzOutro, "CMHDZ_Outro")
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_OUTRO_MOVIE)
|
|
ENDIF
|
|
ELSE
|
|
IF (GET_GAME_TIMER() - sCMHDZData.iResultsScreenTimer) > 2000
|
|
CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU(FALSE, TRUE, DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//-- Audio for results screen
|
|
IF NOT CMHDZ_IS_LEVEL_BIT_SET_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO)
|
|
// IF CMHDZ_IS_SCORE_POOR_FOR_CURRENT_LEVEL()
|
|
// CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_BAD)
|
|
// ELIF CMHDZ_IS_SCORE_AVERAGE_FOR_CURRENT_LEVEL()
|
|
// CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_AVERAGE)
|
|
//EL
|
|
IF CMHDZ_IS_SCORE_BELOW_MAX_FOR_CURRENT_LEVEL()
|
|
//CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_SCORE_GOOD)
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Score_Ok)
|
|
ELIF CMHDZ_IS_SCORE_ABOVE_MAX_FOR_CURRENT_LEVEL()
|
|
CMHDZ_PLAY_DIRECTOR_DIALOGUE(CMHDZ_AUDIO_EFFECT_DIRECTOR_Score_Good)
|
|
ENDIF
|
|
|
|
CMHDZ_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_DONE_RESULTS_SCREEN_AUDIO)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
|
|
IF bShouldGoToLeaderboard
|
|
IF sCMHDZData.bSkipLeaderboard
|
|
CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU(FALSE, TRUE, DEFAULT, TRUE)
|
|
ELSE
|
|
IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR (GET_GAME_TIMER() - sCMHDZData.iResultsScreenTimer ) > 14000
|
|
CMHDZ_INIT_GOTO_LEADERBOARD()
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
|
|
CMHDZ_DRAW_CLIENT_STATE_RESULT_SCREEN(bDoFinalScene)
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_OUTRO_MOVIE()
|
|
CMHDZ_DRAW_MENU_BACKGROUND()
|
|
|
|
FLOAT fRatioWidth = 1.0 * GET_ASPECT_RATIO_MODIFIER_FROM_ASPECT_RATIO()
|
|
FLOAT fRatioHeight = 1.0
|
|
BOOL bMovieFinished = DG_DRAW_MOVIE(sCMHDZData.bmIdCmhdzOutro, fRatioWidth, fRatioHeight)
|
|
|
|
|
|
IF NOT bMovieFinished
|
|
////CDEBUG2LN(DEBUG_MINIGAME, "{DSW} [CMHDZ_PROCESS_CLIENT_STATE_OUTRO_MOVIE] Movie Time: ", GET_BINK_MOVIE_TIME(sCMHDZData.bmIdCmhdzOutro))
|
|
IF NOT sCMHDZData.bPlayedOutroAudio
|
|
IF GET_BINK_MOVIE_TIME(sCMHDZData.bmIdCmhdzOutro) >= 78.0
|
|
CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_PLAYER_FINISH_GAME)
|
|
sCMHDZData.bPlayedOutroAudio = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_PROCESS_CLIENT_STATE_OUTRO_MOVIE - Outro movie is running.")
|
|
TWS_DRAW_FRONT_FX()
|
|
EXIT
|
|
ENDIF
|
|
|
|
sCMHDZData.bPlayedOutro = TRUE
|
|
|
|
IF NOT sCMHDZData.bSkipLeaderboard
|
|
CMHDZ_INIT_GOTO_LEADERBOARD()
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD)
|
|
//CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD)
|
|
ELSE
|
|
CMHDZ_START_MOVIE_FORCE(sCMHDZData.bmIdCmhdzIntro, "CMHDZ_Intro")
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN)
|
|
ENDIF
|
|
|
|
TWS_DRAW_FRONT_FX()
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_VIEW_LEADERBOARD()
|
|
CMHDZ_DRAW_CLIENT_STATE_LEADERBOARD()
|
|
|
|
CMHDZ_CHECK_PLAYER_RETURNING_TO_MENU(TRUE, TRUE, TRUE)
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_EDIT_LEADERBOARD()
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ][BAZ] CMHDZ_PROCESS_CLIENT_STATE_EDIT_LEADERBOARD - Processing leaderboard entry")
|
|
CMHDZ_TRIGGER_TITLE_MUSIC()
|
|
INT iPlayerScore
|
|
// INT iPlayerScore = 50000//CMHDZ_GET_LOCAL_PLAYER_TOTAL_SCORE()
|
|
// playerBd[PARTICIPANT_ID_TO_INT()].iLeaderboardScore = iPlayerScore
|
|
|
|
IF playerBd[PARTICIPANT_ID_TO_INT()].iLeaderboardScore != CMHDZ_GET_LOCAL_PLAYER_TOTAL_SCORE()
|
|
playerBd[PARTICIPANT_ID_TO_INT()].iLeaderboardScore = CMHDZ_GET_LOCAL_PLAYER_TOTAL_SCORE()
|
|
ENDIF
|
|
|
|
iPlayerScore = playerBd[PARTICIPANT_ID_TO_INT()].iLeaderboardScore
|
|
BOOL bServerReady = IS_BIT_SET(cmhdzServerBd.iSortLbForPart, PARTICIPANT_ID_TO_INT())
|
|
|
|
//ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY(sCMHDZData.sLbData, cmhdzServerBd.sLeaderboard, playerBd, playerBd[PARTICIPANT_ID_TO_INT()].iLeaderboardInitials, iPlayerScore, bServerReady)
|
|
ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY(sCMHDZData.sLbData, cmhdzServerBd.sLeaderboard, playerBd[PARTICIPANT_ID_TO_INT()].iLeaderboardInitials, iPlayerScore, bServerReady)
|
|
|
|
CMHDZ_DRAW_CLIENT_STATE_LEADERBOARD()
|
|
|
|
IF NOT sCMHDZData.sLbData.bEditing
|
|
CMHDZ_RESET_LOCAL_PLAYER_SCORE_FOR_CURRENT_LEVEL()
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// Process CLEANUP
|
|
PROC CMHDZ_CLEANUP_AND_EXIT_CLIENT()
|
|
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_CLEANUP_AND_EXIT_CLIENT] - Cleaning up and terminating the script")
|
|
|
|
CMHDZ_CANCEL_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_DEATH)
|
|
CMHDZ_CANCEL_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_HIT)
|
|
CMHDZ_CANCEL_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_HIT_ALT)
|
|
CMHDZ_CANCEL_MUSIC_EVENT(CMHDZ_GET_MUSIC_EVENT_FOR_LEVEL(sCMHDZData.eCurrentLevel))
|
|
|
|
CMHDZ_TRIGGER_MUSIC_EVENT(CMHDZ_MUSIC_EVENT_STOP)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
#IF CMHDZ_CMDLINE_EDITOR_NEW
|
|
CLEANUP_MENU_ASSETS()
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
IF NETWORK_IS_HOST_OF_THIS_SCRIPT()
|
|
CMHDZ_SEND_TELEMETRY()
|
|
ENDIF
|
|
|
|
sCMHDZData.sArcadeAnimData.bHoldLastFrame = FALSE
|
|
sCMHDZData.sArcadeAnimData.bLoopAnim = FALSE
|
|
IF sCMHDZData.ePlayerPedAnimState = CMHDZ_PLAYER_PED_ANIM_IDLE
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_CLEANUP_AND_EXIT_CLIENT] - ARCADE_CABINET_ANIM_CLIP_EXIT")
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_EXIT)
|
|
ELSE
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_CLEANUP_AND_EXIT_CLIENT] - ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_EXIT_FROM_AIM")
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_EXIT_FROM_AIM)
|
|
ENDIF
|
|
ARCADE_CABINET_COMMON_CLEANUP()
|
|
|
|
ARCADE_GAMES_HELP_TEXT_CLEAR()
|
|
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_MENUS)
|
|
CMHDZ_STOP_SOUND(CMHDZ_AUDIO_EFFECT_LEVEL_BACKGROUND_LOOP)
|
|
CMHDZ_STOP_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_GAMEPLAY)
|
|
DG_CLEAN_UP_MOVIE(sCMHDZData.bmIdCmhdzIntro)
|
|
DG_CLEAN_UP_MOVIE(sCMHDZData.bmIdCmhdzOutro)
|
|
// DG_CLEAN_UP_MOVIE(sCMHDZData.bmIdCmhdzIntro)
|
|
// DG_CLEAN_UP_MOVIE(sCMHDZData.bmIdCmhdzIntro_LoopStatic)
|
|
//SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED(sCMHDZData.tl31BaseTextDict)
|
|
|
|
ARCADE_GAMES_SOUND_RELEASE_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH")
|
|
ARCADE_GAMES_SOUND_RELEASE_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH_Enemy_Vocal")
|
|
ARCADE_GAMES_SOUND_RELEASE_AUDIO_BANK("DLC_TUNER/DLC_Tuner_AM_CH_Dir_Vocal")
|
|
|
|
CMHDZ_RELEASE_ALL_TEXTURE_DICTS()
|
|
|
|
TERMINATE_THIS_MULTIPLAYER_THREAD_NO_ARGS()
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{baz} [CMHDZ_CLEANUP_AND_EXIT_CLIENT] - ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_EXIT_FROM_AIM")
|
|
|
|
ENDPROC
|
|
|
|
FUNC ARCADE_CABINET_ANIM_CLIPS CMHDZ_GET_PLAY_IDLE_CLIP_FROM_COUNT(INT iCount)
|
|
ARCADE_CABINET_ANIM_CLIPS ePlayIdle
|
|
SWITCH iCount
|
|
CASE 0 ePlayIdle = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE BREAK
|
|
CASE 1 ePlayIdle = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2 BREAK
|
|
CASE 2 ePlayIdle = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V3 BREAK
|
|
CASE 3 ePlayIdle = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V4 BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN ePlayIdle
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_SHOULD_PLAY_NEXT_PLAY_IDLE_ANIM()
|
|
IF sCMHDZData.iIdleAnimCount = -1
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_SHOULD_PLAY_NEXT_PLAY_IDLE_ANIM] True - iIdleAnimCount: ", sCMHDZData.iIdleAnimCount)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
INT iCurrent = sCMHDZData.iIdleAnimCount - 1
|
|
IF iCurrent < 0
|
|
iCurrent = 0
|
|
ENDIF
|
|
ARCADE_CABINET_ANIM_CLIPS ePlayIdle = CMHDZ_GET_PLAY_IDLE_CLIP_FROM_COUNT(sCMHDZData.iIdleAnimCount)
|
|
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ePlayIdle)
|
|
IF HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ePlayIdle)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_SHOULD_PLAY_NEXT_PLAY_IDLE_ANIM] True - Previous idle finished COunt:: ", iCurrent)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
PROC CMHDZ_PROCESS_PLAYER_PED_ANIMS()
|
|
/*
|
|
url:bugstar:6022461
|
|
PLAY_ARCADE_CABINET_ANIMATION(eAnimEvent, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LEVEL_COMPLETE)
|
|
PLAY_ARCADE_CABINET_ANIMATION(eAnimEvent, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LOSE_LIFE)
|
|
PLAY_ARCADE_CABINET_ANIMATION(eAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
PLAY_ARCADE_CABINET_ANIMATION(eAnimEvent, ARCADE_CABINET_ANIM_CLIP_LOSE)
|
|
*/
|
|
ARCADE_CABINET_ANIM_CLIPS ePlayIdle
|
|
SWITCH sCMHDZData.ePlayerPedAnimState
|
|
//-- Idle (stand)
|
|
CASE CMHDZ_PLAYER_PED_ANIM_IDLE
|
|
IF sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU
|
|
sCMHDZData.sArcadeAnimData.bHoldLastFrame = TRUE
|
|
sCMHDZData.sArcadeAnimData.bLoopAnim = FALSE
|
|
sCMHDZData.sArcadeAnimData.fBlendInDelta = SLOW_BLEND_IN
|
|
sCMHDZData.sArcadeAnimData.fBlendOutDelta = SLOW_BLEND_OUT
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_IDLE_TO_AIM)
|
|
|
|
CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_IDLE_TO_AIM)
|
|
ENDIF
|
|
BREAK
|
|
|
|
//-- Idle (stand) -> Aiming
|
|
CASE CMHDZ_PLAYER_PED_ANIM_IDLE_TO_AIM
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_IDLE_TO_AIM)
|
|
IF HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_IDLE_TO_AIM)
|
|
sCMHDZData.sArcadeAnimData.bHoldLastFrame = FALSE
|
|
sCMHDZData.sArcadeAnimData.bLoopAnim = TRUE
|
|
sCMHDZData.sArcadeAnimData.fBlendInDelta = SLOW_BLEND_IN
|
|
sCMHDZData.sArcadeAnimData.fBlendOutDelta = SLOW_BLEND_OUT
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_AIM_IDLE)
|
|
|
|
sCMHDZData.iIdleAnimCount = -1
|
|
CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE)
|
|
ELSE
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PROCESS_PLAYER_PED_ANIMS] {DSW} Waiting for HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED - ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_IDLE_TO_AIM")
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
//-- Idle (Aiming) -> Idle (playing)
|
|
CASE CMHDZ_PLAYER_PED_ANIM_AIM_IDLE
|
|
IF sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_PLAYING
|
|
IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() > 0.0
|
|
AND CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_SCREEN() > 0
|
|
IF CMHDZ_SHOULD_PLAY_NEXT_PLAY_IDLE_ANIM()
|
|
sCMHDZData.iIdleAnimCount++
|
|
|
|
IF sCMHDZData.iIdleAnimCount > 3
|
|
sCMHDZData.iIdleAnimCount = 0
|
|
ENDIF
|
|
|
|
|
|
ePlayIdle = CMHDZ_GET_PLAY_IDLE_CLIP_FROM_COUNT(sCMHDZData.iIdleAnimCount)
|
|
SWITCH sCMHDZData.iIdleAnimCount
|
|
CASE 0 ePlayIdle = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE BREAK
|
|
CASE 1 ePlayIdle = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2 BREAK
|
|
CASE 2 ePlayIdle = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V3 BREAK
|
|
CASE 3 ePlayIdle = ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V4 BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PROCESS_PLAYER_PED_ANIMS] {DSW} Starting play_idle, var: ", sCMHDZData.iIdleAnimCount)
|
|
|
|
|
|
sCMHDZData.sArcadeAnimData.fBlendInDelta = REALLY_SLOW_BLEND_IN
|
|
sCMHDZData.sArcadeAnimData.fBlendOutDelta = REALLY_SLOW_BLEND_OUT
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ePlayIdle)
|
|
sCMHDZData.bDoneReactionAnim = FALSE
|
|
// CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_PLAY_IDLE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT sCMHDZData.bDoneReactionAnim
|
|
IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() <= 0.0
|
|
sCMHDZData.sArcadeAnimData.fBlendInDelta = SLOW_BLEND_IN
|
|
sCMHDZData.sArcadeAnimData.fBlendOutDelta = SLOW_BLEND_OUT
|
|
sCMHDZData.sArcadeAnimData.bLoopAnim = FALSE
|
|
sCMHDZData.sArcadeAnimData.bHoldLastFrame = TRUE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LOSE_LIFE)
|
|
|
|
CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE)
|
|
sCMHDZData.bDoneReactionAnim = TRUE
|
|
ELSE
|
|
IF sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_PLAYING
|
|
OR sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_RESULT_SCREEN
|
|
IF (CMHDZ_GET_LOCAL_PLAYER_HEALTH() > 0.0 AND CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_SCREEN() = 0)
|
|
|
|
sCMHDZData.sArcadeAnimData.fBlendInDelta = SLOW_BLEND_IN
|
|
sCMHDZData.sArcadeAnimData.fBlendOutDelta = SLOW_BLEND_OUT
|
|
sCMHDZData.sArcadeAnimData.bLoopAnim = FALSE
|
|
sCMHDZData.sArcadeAnimData.bHoldLastFrame = TRUE
|
|
|
|
IF CMHDZ_ARE_ALL_LEVELS_COMPLETE()
|
|
AND NOT sCMHDZData.bPlayedWinningAnim
|
|
sCMHDZData.bPlayedWinningAnim = TRUE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
|
|
CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME)
|
|
ELSE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LEVEL_COMPLETE)
|
|
|
|
CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_SCREEN)
|
|
|
|
ENDIF
|
|
|
|
sCMHDZData.bDoneReactionAnim = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// CASE CMHDZ_PLAYER_PED_ANIM_PLAY_IDLE
|
|
// IF CMHDZ_GET_LOCAL_PLAYER_HEALTH() <= 0.0
|
|
// sCMHDZData.sArcadeAnimData.fBlendInDelta = SLOW_BLEND_IN
|
|
// sCMHDZData.sArcadeAnimData.fBlendOutDelta = SLOW_BLEND_OUT
|
|
// sCMHDZData.sArcadeAnimData.bLoopAnim = FALSE
|
|
// sCMHDZData.sArcadeAnimData.bHoldLastFrame = TRUE
|
|
// PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LOSE_LIFE)
|
|
//
|
|
// CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE)
|
|
// ELSE
|
|
// IF sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_PLAYING
|
|
// OR sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_RESULT_SCREEN
|
|
// IF (CMHDZ_GET_LOCAL_PLAYER_HEALTH() > 0.0 AND CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_SCREEN() = 0)
|
|
//
|
|
// sCMHDZData.sArcadeAnimData.fBlendInDelta = SLOW_BLEND_IN
|
|
// sCMHDZData.sArcadeAnimData.fBlendOutDelta = SLOW_BLEND_OUT
|
|
// sCMHDZData.sArcadeAnimData.bLoopAnim = FALSE
|
|
// sCMHDZData.sArcadeAnimData.bHoldLastFrame = TRUE
|
|
//
|
|
// IF CMHDZ_ARE_ALL_LEVELS_COMPLETE()
|
|
// AND NOT sCMHDZData.bPlayedWinningAnim
|
|
// sCMHDZData.bPlayedWinningAnim = TRUE
|
|
// PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
//
|
|
// CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME)
|
|
// ELSE
|
|
// PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LEVEL_COMPLETE)
|
|
//
|
|
// CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_SCREEN)
|
|
//
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
//
|
|
// BREAK
|
|
|
|
//-- Idle (Playing) -> Lose life
|
|
CASE CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_LOSE_LIFE
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LOSE_LIFE)
|
|
IF HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LOSE_LIFE)
|
|
sCMHDZData.sArcadeAnimData.bHoldLastFrame = FALSE
|
|
sCMHDZData.sArcadeAnimData.bLoopAnim = TRUE
|
|
sCMHDZData.sArcadeAnimData.fBlendInDelta = SLOW_BLEND_IN
|
|
sCMHDZData.sArcadeAnimData.fBlendOutDelta = SLOW_BLEND_OUT
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_AIM_IDLE)
|
|
sCMHDZData.iIdleAnimCount = -1
|
|
CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
//-- Idle (Aiming) -> Complete stage
|
|
CASE CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_SCREEN
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LEVEL_COMPLETE)
|
|
IF HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_LEVEL_COMPLETE)
|
|
sCMHDZData.sArcadeAnimData.fBlendInDelta = SLOW_BLEND_IN
|
|
sCMHDZData.sArcadeAnimData.fBlendOutDelta = SLOW_BLEND_OUT
|
|
sCMHDZData.sArcadeAnimData.bHoldLastFrame = FALSE
|
|
sCMHDZData.sArcadeAnimData.bLoopAnim = TRUE
|
|
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_LAST_GUNSLINGERS_AIM_IDLE)
|
|
sCMHDZData.iIdleAnimCount = -1
|
|
CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_AIM_IDLE)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
//-- Idle (Playing) -> Complete game
|
|
CASE CMHDZ_PLAYER_PED_ANIM_AIM_IDLE_TO_COMPLETE_GAME
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
IF HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
IF sCMHDZData.eClientState != CMHDZ_ARCADE_CLIENT_STATE_PLAYING
|
|
sCMHDZData.sArcadeAnimData.bHoldLastFrame = FALSE
|
|
sCMHDZData.sArcadeAnimData.bLoopAnim = TRUE
|
|
sCMHDZData.sArcadeAnimData.fBlendInDelta = REALLY_SLOW_BLEND_IN
|
|
sCMHDZData.sArcadeAnimData.fBlendOutDelta = REALLY_SLOW_BLEND_OUT
|
|
PLAY_ARCADE_CABINET_ANIMATION(sCMHDZData.sArcadeAnimData, ARCADE_CABINET_ANIM_CLIP_IDLE)
|
|
|
|
CMHDZ_SET_PLAYER_PED_ANIM_STATE(CMHDZ_PLAYER_PED_ANIM_IDLE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_PROCESS_CLIENT_STATE_MACHINE()
|
|
#IF IS_DEBUG_BUILD
|
|
sCMHDZData.iAssertCounter = 0
|
|
#ENDIF
|
|
|
|
IF sCMHDZData.eClientState != CMHDZ_ARCADE_CLIENT_STATE_INIT
|
|
|
|
// Black backdrop
|
|
ARCADE_DRAW_PIXELSPACE_RECT(INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2,cfBASE_SCREEN_HEIGHT/2),
|
|
INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH,cfBASE_SCREEN_HEIGHT),
|
|
sCMHDZData.rgbaBlack)
|
|
|
|
ENDIF
|
|
|
|
SWITCH sCMHDZData.eClientState
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_INIT
|
|
|
|
IF NOT CMHDZ_LOAD_TEXDICT(CMHDZ_TEXDICT_FACADE)
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF NOT ARCADE_GAMES_POSTFX_REQUESTING_ASSETS()
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS Loading POSTFX assets")
|
|
BREAK
|
|
ENDIF
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_INIT()
|
|
|
|
BREAK
|
|
|
|
// CASE CMHDZ_ARCADE_CLIENT_STATE_REQUESTING_ASSETS
|
|
//
|
|
// CMHDZ_PROCESS_CLIENT_STATE_REQUESTING_ASSETS()
|
|
//
|
|
// BREAK
|
|
|
|
// Remove if not needed.
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_FIB
|
|
CMHDZ_PROCESS_CLIENT_STATE_FIB()
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_INTRO
|
|
|
|
CMHDZ_PROCESS_CLIENT_INTRO()
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_TITLE_SCREEN
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_TITLE_SCREEN()
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_TITLE_FADEOUT
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_TITLE_SCREEN_FADE_OUT()
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_LEVEL_SELECTION_MENU
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_LEVEL_SELECT_MENU()
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_INIT_LEVEL
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_INIT_LEVEL()
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_PLAYING
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_PLAYING()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_DOWN)
|
|
// //CMHDZ_SET_LEVEL_BIT_FOR_CURRENT_LEVEL(CMHDZ_LEVELS_BIT_STOPPED)
|
|
// CMHDZ_INCREASE_CURRENT_LEVEL_SCREEN()
|
|
// ENDIF
|
|
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_DOWN, KEYBOARD_MODIFIER_NONE, "Debug complete")
|
|
sCMHDZData.bLevelsCompleted[ENUM_TO_INT(sCMHDZData.eCurrentLevel)] = TRUE
|
|
sCMHDZData.bFadingOut = TRUE
|
|
|
|
CMHDZ_CLEAR_LEVEL_BIT_FOR_LEVEL(sCMHDZData.eCurrentLevel, CMHDZ_LEVELS_BIT_REPLAYING_LEVEL)
|
|
|
|
// Debugging worst possible score
|
|
playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[CMHDZ_GET_CURRENT_LEVEL()] = 9999
|
|
playerBd[PARTICIPANT_ID_TO_INT()].iPlayerHiScore[CMHDZ_GET_CURRENT_LEVEL()] = 9999
|
|
sCMHDZData.iTotalLevelShots[CMHDZ_GET_CURRENT_LEVEL()] = 100
|
|
sCMHDZData.iTotalLevelEnemyHits[CMHDZ_GET_CURRENT_LEVEL()] = 0
|
|
|
|
CMHDZ_ASIGN_STAR_RATING(sCMHDZData.eCurrentLevel)
|
|
|
|
IF CMHDZ_ARE_ALL_LEVELS_COMPLETE()
|
|
CMHDZ_MAINTAIN_PLAYER_AWARDS()
|
|
CMHDZ_SEND_TELEMETRY()
|
|
ENDIF
|
|
|
|
sCMHDZData.eLevelState = CMHDZ_FADING_OUT
|
|
ENDIF
|
|
|
|
IF GET_COMMANDLINE_PARAM_EXISTS("sc_BadlandsOnScreen") OR (CMHDZ_CMDLINE_ON_SCREEN_DEBUG = 1)
|
|
CMHDZ_DO_ON_SCREEN_DEBUG()
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_EDITOR_ACTIVE
|
|
CMHDZ_PROCESS_CLIENT_STATE_EDITOR_ACTIVE()
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_GAME_OVER
|
|
CMHDZ_PROCESS_CLIENT_STATE_GAME_OVER()
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_RESULT_SCREEN
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_RESULT_SCREEN()
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_OUTRO_MOVIE
|
|
CMHDZ_PROCESS_CLIENT_STATE_OUTRO_MOVIE()
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_EDIT_LEADERBOARD
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_EDIT_LEADERBOARD()
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_VIEW_LEADERBOARD
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_VIEW_LEADERBOARD()
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_ARCADE_CLIENT_STATE_CLEANUP
|
|
|
|
CMHDZ_CLEANUP_AND_EXIT_CLIENT()
|
|
TERMINATE_THIS_MULTIPLAYER_THREAD_NO_ARGS()
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
//-- Handle player ped anims while playing
|
|
CMHDZ_PROCESS_PLAYER_PED_ANIMS()
|
|
ENDPROC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PROC CMHDZ_DEBUG_OUTPUT_ALL_ENEMY_POSITIONS()
|
|
INT i
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [OUTPUT_ENEMY_POSITIONS] ")
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES -1
|
|
IF sCMHDZData.sEnemyData[i].eState != CMHDZ_ENEMY_STATE_INACTIVE
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [OUTPUT_ENEMY_POSITIONS] Enemy ", i, " lane:", sCMHDZData.sEnemyData[i].iEnemyLane, " Type: ", CMHDZ_ENEMY_TYPES_TO_STRING(sCMHDZData.sEnemyData[i].iEnemyType), " State: ", CMHDZ_ENEMY_STATE_TO_STRING(sCMHDZData.sEnemyData[i].eState) , " Active in screen: ", sCMHDZData.sEnemyData[i].fPointToAppear)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [OUTPUT_ENEMY_POSITIONS] Reverse? ", CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_REVERSE), " Pos: ", sCMHDZData.sEnemyData[i].vSpritePos.x, ", ", sCMHDZData.sEnemyData[i].vSpritePos.y, " Stopping: ", sCMHDZData.sEnemyData[i].fStoppingX, " Start: ", sCMHDZData.sEnemyData[i].vStartPos.x, ", ", sCMHDZData.sEnemyData[i].vStartPos.y)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [OUTPUT_ENEMY_POSITIONS] Ever on screen? ", CMHDZ_ENEMY_DATA_IS_BITMASK_SET(i, CMHDZ_ENEMY_DATA_BITS_APPEARED_ON_SCREEN))
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [OUTPUT_ENEMY_POSITIONS]")
|
|
ENDIF
|
|
ENDFOR
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS()
|
|
INT i
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] ")
|
|
|
|
/*
|
|
sCMHDZData.sItemData[iItem].bRendering = FALSE
|
|
sCMHDZData.sItemData[iItem].iMinScreen = 0
|
|
sCMHDZData.sItemData[iItem].iRenderAfterWarpCount = 0
|
|
sCMHDZData.sItemData[iItem].iWarpCount = 0
|
|
sCMHDZData.sItemData[iItem].bShot = FALSE
|
|
*/
|
|
FOR i = 0 TO ciCMHDZ_MAX_ITEMS -1
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] sCMHDZData.sItemData[", i, "]..eItemType = ", CMHDZ_ITEM_TYPES_TO_STRING(sCMHDZData.sItemData[i].eItemType))
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] sCMHDZData.sItemData[", i, "].bRendering = ", sCMHDZData.sItemData[i].bRendering)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] sCMHDZData.sItemData[", i, "].vSpritePos = ", sCMHDZData.sItemData[i].vSpritePos.x, ", ", sCMHDZData.sItemData[i].vSpritePos.y)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] sCMHDZData.sItemData[", i, "].iMinScreen = ", sCMHDZData.sItemData[i].iMinScreen)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] sCMHDZData.sItemData[", i, "].iRenderAfterWarpCount = ", sCMHDZData.sItemData[i].iRenderAfterWarpCount)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] sCMHDZData.sItemData[", i, "].iMinScreen = ", sCMHDZData.sItemData[i].iMinScreen)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] sCMHDZData.sItemData[", i, "].iWarpCount = ", sCMHDZData.sItemData[i].iWarpCount)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] sCMHDZData.sItemData[", i, "].bShot = ", sCMHDZData.sItemData[i].bShot)
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS] ")
|
|
|
|
ENDFOR
|
|
ENDPROC
|
|
PROC CMHDZ_DEBUG_SET_PARENT_WIDGET_GROUP(WIDGET_GROUP_ID parentWidgetGroup)
|
|
|
|
sCMHDZData.widgetGroupExample = parentWidgetGroup
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Creates a read only 2D vector widget
|
|
/// PARAMS:
|
|
/// str - widget name
|
|
/// vec - vector
|
|
PROC CMHDZ_ADD_WIDGET_VECTOR_2D_READONLY(STRING str, VECTOR_2D &vec)
|
|
TEXT_LABEL_23 txt
|
|
|
|
txt = str
|
|
txt += " X"
|
|
ADD_WIDGET_FLOAT_READ_ONLY(txt, vec.x)
|
|
|
|
txt = str
|
|
txt += " Y"
|
|
ADD_WIDGET_FLOAT_READ_ONLY(txt, vec.y)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Creates an editable 2D Vector widget
|
|
/// PARAMS:
|
|
/// str - widget name
|
|
/// vec - vector
|
|
/// vMin - min value (note this effects both x and y)
|
|
/// vMax - max value (note this effects both x and y)
|
|
/// vStep - value increase rate
|
|
PROC CMHDZ_ADD_WIDGET_VECTOR_2D_SLIDER(STRING str, VECTOR_2D &vec, FLOAT vMin, FLOAT vMax, FLOAT vStep)
|
|
TEXT_LABEL_23 txt
|
|
|
|
txt = str
|
|
txt += " X"
|
|
ADD_WIDGET_FLOAT_SLIDER(txt, vec.x, vMin, vMax, vStep)
|
|
|
|
txt = str
|
|
txt += " Y"
|
|
ADD_WIDGET_FLOAT_SLIDER(txt, vec.y, vMin, vMax, vStep)
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_DEBUG_CREATE_PLAYER_DATA_WIDGET(CMHDZ_PLAYER_DATA &dat)
|
|
START_WIDGET_GROUP("Player Data")
|
|
ADD_WIDGET_BOOL("bHasJustShot", dat.bHasJustShot)
|
|
ADD_WIDGET_BOOL("bCovering", dat.bCovering)
|
|
ADD_WIDGET_BOOL("bHoveringEnemy", dat.bHoveringEnemy)
|
|
ADD_WIDGET_BOOL("bShouldShowReloadPrompt", dat.bShouldShowReloadPrompt)
|
|
ADD_WIDGET_BOOL("bDoneReloadEffect", dat.bDoneReloadEffect)
|
|
ADD_WIDGET_FLOAT_SLIDER("Health", dat.fHealth, 0.0, 1.0, 0.01)
|
|
|
|
ADD_BIT_FIELD_WIDGET("Player Bitset", dat.iPlayerBitset)
|
|
|
|
START_WIDGET_GROUP("Timing")
|
|
ADD_WIDGET_INT_READ_ONLY("iLastShotTime", dat.iLastShotTime)
|
|
ADD_WIDGET_INT_READ_ONLY("iLastProjectileTime", dat.iLastProjectileTime)
|
|
ADD_WIDGET_INT_READ_ONLY("iDeadTime", dat.iDeadTime)
|
|
ADD_WIDGET_INT_READ_ONLY("iReloadPromptShowTime", dat.iReloadPromptShowTime)
|
|
ADD_WIDGET_INT_READ_ONLY("iInvulnerableTimer", dat.iInvulnerableTimer)
|
|
ADD_WIDGET_INT_READ_ONLY("iHideReticuleTimer", dat.iHideReticuleTimer)
|
|
ADD_WIDGET_INT_READ_ONLY("iQuadDamageTimer", dat.iQuadDamageTimer)
|
|
ADD_WIDGET_INT_READ_ONLY("iNoAmmoTimer", dat.iNoAmmoTimer)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Weapon Stuff")
|
|
ADD_WIDGET_INT_READ_ONLY("iProjectileIndex", dat.iProjectileIndex)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("fHitCountdown", dat.fHitCountdown)
|
|
ADD_WIDGET_INT_READ_ONLY("iNumberOfThrownProjectiles", dat.iNumberOfThrownProjectiles)
|
|
ADD_WIDGET_INT_SLIDER("iThrownProjectilesAmmo", dat.iThrownProjectilesAmmo, 0, 100, 1)
|
|
ADD_WIDGET_INT_SLIDER("iThrownProjectileReloadDelay", dat.iThrownProjectileReloadDelay, 0, 5000, 250)
|
|
|
|
ADD_WIDGET_INT_READ_ONLY("iLastThrownProjectileTime", dat.iLastThrownProjectileTime)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Scoring")
|
|
ADD_WIDGET_INT_READ_ONLY("iSuccessiveHits", dat.iSuccessiveHits)
|
|
ADD_WIDGET_INT_READ_ONLY("iChainedScore", dat.iChainedScore)
|
|
ADD_WIDGET_INT_READ_ONLY("iScoreNoChain", dat.iScoreNoChain)
|
|
ADD_WIDGET_INT_READ_ONLY("iPreviousTargetScore", dat.iPreviousTargetScore)
|
|
STOP_WIDGET_GROUP()
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_DEBUG_CREATE_DEBUG_STATE_WIDGET(CMHDZ_DEBUG_STATE_WIDGET &widget, INT iMaxStates = 99, STRING str = null)
|
|
IF IS_STRING_NULL_OR_EMPTY(str)
|
|
str = "Debug State"
|
|
ENDIF
|
|
|
|
START_WIDGET_GROUP(str)
|
|
widget.twCurrentState = ADD_TEXT_WIDGET("Current State")
|
|
ADD_WIDGET_BOOL("Change State", widget.bDebugChangeState)
|
|
ADD_WIDGET_INT_SLIDER("New State Selector", widget.iDesiredStateSelector, 0, iMaxStates - 1, 1)
|
|
widget.twDesiredState = ADD_TEXT_WIDGET("New State")
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_DEBUG_UPDATE_CLIENT_STATE_WIDGET(CMHDZ_DEBUG_STATE_WIDGET &widget)
|
|
CMHDZ_ARCADE_CLIENT_STATE st = INT_TO_ENUM(CMHDZ_ARCADE_CLIENT_STATE, widget.iDesiredStateSelector)
|
|
IF (widget.bDebugChangeState)
|
|
CMHDZ_SET_LOCAL_STATE(st)
|
|
widget.bDebugChangeState = FALSE
|
|
ENDIF
|
|
|
|
SET_CONTENTS_OF_TEXT_WIDGET(widget.twCurrentState, CMHDZ_ARCADE_CLIENT_STATE_TO_STRING(sCMHDZData.eClientState))
|
|
SET_CONTENTS_OF_TEXT_WIDGET(widget.twDesiredState, CMHDZ_ARCADE_CLIENT_STATE_TO_STRING(st))
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
#IF CMHDZ_CMDLINE_EDITOR_NEW
|
|
FUNC BOOL CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(CMHDZ_EDITOR &widget, CONTROL_ACTION ctrl, INT iTimeBetweenPresses = 200)
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, ctrl)
|
|
widget.iDirectionDebounceTime = GET_GAME_TIMER() + iTimeBetweenPresses
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, ctrl) AND (GET_GAME_TIMER() > widget.iDirectionDebounceTime)
|
|
widget.iDirectionDebounceTime = GET_GAME_TIMER() + iTimeBetweenPresses
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(CMHDZ_EDITOR &widget, KEY_NUMBER ctrl, INT iTimeBetweenPresses = 200)
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(ctrl)
|
|
widget.iDirectionDebounceTime = GET_GAME_TIMER() + iTimeBetweenPresses
|
|
//CPRINTLN(DEBUG_MINIGAME, "CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION - ctrl key just pressed")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(ctrl) AND (GET_GAME_TIMER() > widget.iDirectionDebounceTime)
|
|
widget.iDirectionDebounceTime = GET_GAME_TIMER() + iTimeBetweenPresses
|
|
//CPRINTLN(DEBUG_MINIGAME, "CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION - ctrl key just pressed. timer debounced")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_CONTROLLER_ADJUST_BOOL(CMHDZ_EDITOR &w, BOOL &value)
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_LEFT)
|
|
OR CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_CELLPHONE_LEFT)
|
|
value = !value
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_RIGHT)
|
|
OR CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_CELLPHONE_RIGHT)
|
|
value = !value
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_LEFT)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_A)
|
|
value = !value
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_RIGHT)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_D)
|
|
value = !value
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_CONTROLLER_ADJUST_BITMASK_ENUM_BOOL(CMHDZ_EDITOR &w, ENUM_TO_INT &eBitField, ENUM_TO_INT eBitMask)
|
|
BOOL value
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_LEFT)
|
|
value = IS_BITMASK_ENUM_AS_ENUM_SET(eBitField, eBitMask)
|
|
SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(eBitField, eBitMask, !value)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_RIGHT)
|
|
value = IS_BITMASK_ENUM_AS_ENUM_SET(eBitField, eBitMask)
|
|
SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(eBitField, eBitMask, !value)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_LEFT)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_A)
|
|
value = IS_BITMASK_ENUM_AS_ENUM_SET(eBitField, eBitMask)
|
|
SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(eBitField, eBitMask, !value)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_RIGHT)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_D)
|
|
value = IS_BITMASK_ENUM_AS_ENUM_SET(eBitField, eBitMask)
|
|
SET_BITMASK_ENUM_AS_ENUM_BY_BOOL(eBitField, eBitMask, !value)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_CONTROLLER_ADJUST_BITSET_BOOL(CMHDZ_EDITOR &w, INT &iBitSet, INT iBit)
|
|
BOOL value
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_LEFT) OR CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_RIGHT)
|
|
value = !IS_BIT_SET(iBitSet, iBit)
|
|
IF (value)
|
|
SET_BIT(iBitSet, iBit)
|
|
ELSE
|
|
CLEAR_BIT(iBitSet, iBit)
|
|
ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(CMHDZ_EDITOR &w, INT &value, INT iVMin, INT iVMax, INT iInc = 1, BOOL bMaxInclusive = TRUE)
|
|
BOOL bChange
|
|
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_LEFT)
|
|
value -= iInc
|
|
bChange = TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_RIGHT)
|
|
value += iInc
|
|
bChange = TRUE
|
|
ENDIF
|
|
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_LEFT)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_A)
|
|
value -= iInc
|
|
bChange = TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_RIGHT)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_D)
|
|
value += iInc
|
|
bChange = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (bMaxInclusive = FALSE)
|
|
iVMax --
|
|
ENDIF
|
|
|
|
IF (value < iVMin)
|
|
value = iVMax
|
|
ENDIF
|
|
|
|
IF (value > iVMax)
|
|
value = iVMin
|
|
ENDIF
|
|
|
|
RETURN bChange
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(CMHDZ_EDITOR &w, FLOAT &value, FLOAT iVMin, FLOAT iVMax, FLOAT iInc = 1.0, BOOL bMaxInclusive = TRUE)
|
|
BOOL bChange
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_LEFT)
|
|
value -= iInc
|
|
bChange = TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_RIGHT)
|
|
value += iInc
|
|
bChange = TRUE
|
|
ENDIF
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_LEFT)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_A)
|
|
value -= iInc
|
|
bChange = TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_RIGHT)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_D)
|
|
value += iInc
|
|
bChange = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (bMaxInclusive = FALSE)
|
|
iVMax -= 1.0
|
|
ENDIF
|
|
|
|
IF (value < iVMin)
|
|
value = iVMax
|
|
ENDIF
|
|
|
|
IF (value > iVMax)
|
|
value = iVMin
|
|
ENDIF
|
|
|
|
RETURN bChange
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_EDITOR_COPY_DATA_TO_GAME(CMHDZ_EDITOR &widget)
|
|
CMHDZ_COPY_ENEMY_MAP_DATA_TO_GAME(widget.sEnemyMapData)
|
|
CMHDZ_COPY_COVER_MAP_DATA_TO_GAME(widget.sCoverMapData)
|
|
CMHDZ_COPY_ITEM_MAP_DATA_TO_GAME(widget.sItemMapData)
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_RESET_MAP_DATA(CMHDZ_EDITOR &widget)
|
|
CMHDZ_RESET_ALL_ENEMY_MAP_DATA(widget.sEnemyMapData)
|
|
CMHDZ_RESET_ALL_COVER_MAP_DATA(widget.sCoverMapData)
|
|
CMHDZ_RESET_ALL_ITEM_MAP_DATA(widget.sItemMapData)
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(CMHDZ_EDITOR &widget, BOOL bLoad = TRUE)
|
|
sCMHDZData.eCurrentLevel = INT_TO_ENUM(CMHDZ_LEVELS, widget.iActiveLevel)
|
|
CMHDZ_CLEANUP_VARIABLES()
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_INIT_LEVEL()
|
|
|
|
IF (bLoad)
|
|
CMHDZ_EDITOR_RESET_MAP_DATA(widget)
|
|
ELSE
|
|
CMHDZ_EDITOR_COPY_DATA_TO_GAME(widget)
|
|
ENDIF
|
|
|
|
// INT i
|
|
// REPEAT COUNT_OF(sCMHDZData.iPropToStopOn) i
|
|
// sCMHDZData.iPropToStopOn[i] = -1
|
|
// ENDREPEAT
|
|
|
|
// CMHDZ_INIT_COVER_POINTS(sCMHDZData.eCurrentLevel)
|
|
// CMHDZ_INIT_ENEMIES()
|
|
// sCMHDZData.iTotalNumberOfEnemies = sCMHDZData.iNumberOfEnemies
|
|
// //CMHDZ_INIT_HOSTAGES()
|
|
// CMHDZ_INIT_BACKGROUND(sCMHDZData.eCurrentLevel)
|
|
// CMHDZ_INIT_ITEMS()
|
|
|
|
widget.bShowMiniMap = TRUE
|
|
widget.bRebuildMenu = TRUE
|
|
widget.iSelectedData = -1
|
|
widget.iNewUnitData = 0
|
|
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
sCMHDZData.bDebugPause = TRUE
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL - Returning to Editor state.")
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_EDITOR_ACTIVE)
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_PLAY_LEVEL(CMHDZ_EDITOR &widget)
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(widget, FALSE)
|
|
sCMHDZData.bDebugPause = FALSE
|
|
widget.bShowMiniMap = FALSE
|
|
widget.bPlayStage = TRUE
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_GET_ACTIVE_SCREEN_DATA(CMHDZ_EDITOR &widget)
|
|
|
|
CMHDZ_COPY_COVER_MAP_DATA_TO_GAME(widget.sCoverMapData)
|
|
CMHDZ_COPY_ITEM_MAP_DATA_TO_GAME(widget.sItemMapData)
|
|
|
|
ENDPROC
|
|
|
|
FUNC INT CMHDZ_EDITOR_PLACE_NEW_UNIT(CMHDZ_EDITOR &widget, INT iEntityType = -1)
|
|
INT iSlot
|
|
VECTOR_2D vPos
|
|
//VECTOR_2D vScnOrigin = CMHDZ_GET_ORIGIN_FOR_SCREEN((CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2))))
|
|
CMHDZ_ASSET_TYPES eAssetType = CMHDZ_ASSET_TRASHBAG_BIG
|
|
CMHDZ_ITEM_TYPES eItemType = CMHDZ_ITEM_HEALTH
|
|
CMHDZ_ENEMY_TYPES eEnemyType = CMHDZ_ENEMY_1
|
|
// CMHDZ_HOSTAGE_TYPES eHostageType = CMHDZ_HOSTAGE_GIRL
|
|
|
|
vPos.x = cfBASE_SCREEN_WIDTH / 2.0
|
|
vPos.y = cfBASE_SCREEN_HEIGHT / 2.0
|
|
|
|
SWITCH (widget.iEditMode)
|
|
CASE CMHDZ_EDITOR_MODE_COVER
|
|
iSlot = CMHDZ_GET_COVER_MAP_DATA_SLOT(widget.sCoverMapData)
|
|
IF (iSlot = -1)
|
|
RETURN -1
|
|
ENDIF
|
|
|
|
IF (iEntityType != -1)
|
|
eAssetType = INT_TO_ENUM(CMHDZ_ASSET_TYPES, iEntityType)
|
|
ENDIF
|
|
|
|
CMHDZ_RESET_COVER_MAP_DATA(widget.sCoverMapData[iSlot])
|
|
CMHDZ_SET_DEFAULT_COVER_MAP_DATA(widget.sCoverMapData[iSlot], vPos, eAssetType, ciCMHDZ_LANE_MIDDLE)
|
|
CMHDZ_EDITOR_GET_ACTIVE_SCREEN_DATA(widget)
|
|
widget.iSelectedData = iSlot
|
|
widget.bRebuildMenu = TRUE
|
|
RETURN iSlot
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_ITEM
|
|
iSlot = CMHDZ_GET_ITEM_MAP_DATA_SLOT(widget.sItemMapData)
|
|
IF (iSlot = -1)
|
|
RETURN -1
|
|
ENDIF
|
|
|
|
IF (iEntityType != -1)
|
|
eItemType = INT_TO_ENUM(CMHDZ_ITEM_TYPES, iEntityType)
|
|
ENDIF
|
|
|
|
CMHDZ_RESET_ITEM_MAP_DATA(widget.sItemMapData[iSlot])
|
|
CMHDZ_SET_ITEM_MAP_DATA(widget.sItemMapData[iSlot], vPos, eItemType, ciCMHDZ_LANE_MIDDLE, DEFAULT, DEFAULT, (ROUND(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)))
|
|
CMHDZ_COPY_ITEM_MAP_DATA_TO_GAME(widget.sItemMapData)
|
|
sCMHDZData.sItemData[iSlot].bRendering = TRUE
|
|
widget.iSelectedData = iSlot
|
|
widget.bRebuildMenu = TRUE
|
|
RETURN iSlot
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY
|
|
iSlot = CMHDZ_GET_ENEMY_MAP_DATA_SLOT(widget.sEnemyMapData)
|
|
IF (iSlot = -1)
|
|
RETURN -1
|
|
ENDIF
|
|
|
|
IF (iEntityType != -1)
|
|
eEnemyType = INT_TO_ENUM(CMHDZ_ENEMY_TYPES, iEntityType)
|
|
ENDIF
|
|
|
|
CMHDZ_RESET_ENEMY_MAP_DATA(widget.sEnemyMapData[iSlot])
|
|
CMHDZ_SET_ENEMY_MAP_DATA(widget.sEnemyMapData[iSlot], vPos, 940.0, ciCMHDZ_LANE_MIDDLE, FALSE, eEnemyType, sCMHDZData.fOverallLevelProgression, FALSE, FALSE, 0)
|
|
CMHDZ_COPY_ENEMY_MAP_DATA_TO_GAME(widget.sEnemyMapData)
|
|
widget.iSelectedData = iSlot
|
|
widget.bRebuildMenu = TRUE
|
|
RETURN iSlot
|
|
BREAK
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE
|
|
// iSlot = CMHDZ_GET_HOSTAGE_MAP_DATA_SLOT(widget.sHostageMapData)
|
|
// IF (iSlot = -1)
|
|
// RETURN -1
|
|
// ENDIF
|
|
//
|
|
// IF (iEntityType != -1)
|
|
// eHostageType = INT_TO_ENUM(CMHDZ_HOSTAGE_TYPES, iEntityType)
|
|
// ENDIF
|
|
//
|
|
// CMHDZ_RESET_HOSTAGE_MAP_DATA(widget.sHostageMapData[iSlot])
|
|
// CMHDZ_SET_HOSTAGE_MAP_DATA(widget.sHostageMapData[iSlot], vPos, 940, ciCMHDZ_LANE_MIDDLE, FALSE, eHostageType)
|
|
// CMHDZ_COPY_HOSTAGE_MAP_DATA_TO_GAME(widget.sHostageMapData)
|
|
// widget.iSelectedData = iSlot
|
|
// widget.bRebuildMenu = TRUE
|
|
// RETURN iSlot
|
|
// BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_EDITOR_ADD_MENU_ITEM_BOOL(CMHDZ_EDITOR &w, INT iRow, STRING opt, BOOL bValue, BOOL bArrows = TRUE)
|
|
ADD_MENU_ITEM_TEXT(iRow, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(opt)
|
|
ADD_MENU_ITEM_TEXT(iRow, "STRING", 1, TRUE)
|
|
IF (bValue)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
ELSE
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
ENDIF
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, bArrows)
|
|
|
|
w.iMenuMaxSelection ++
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_ADD_MENU_ITEM_INT(CMHDZ_EDITOR &w, INT iRow, STRING opt, INT iValue, BOOL bArrows = TRUE)
|
|
ADD_MENU_ITEM_TEXT(iRow, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(opt)
|
|
ADD_MENU_ITEM_TEXT(iRow, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(iValue))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, bArrows)
|
|
w.iMenuMaxSelection ++
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_ADD_MENU_ITEM_FLOAT(CMHDZ_EDITOR &w, INT iRow, STRING opt, FLOAT fValue, INT dp = 2, BOOL bArrows = TRUE)
|
|
ADD_MENU_ITEM_TEXT(iRow, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(opt)
|
|
ADD_MENU_ITEM_TEXT(iRow, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(fValue, dp))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, bArrows)
|
|
w.iMenuMaxSelection ++
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_ADD_MENU_ITEM_STRING(CMHDZ_EDITOR &w, INT iRow, STRING opt, STRING sValue, BOOL bArrows = TRUE)
|
|
ADD_MENU_ITEM_TEXT(iRow, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(opt)
|
|
ADD_MENU_ITEM_TEXT(iRow, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(sValue)
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, bArrows)
|
|
w.iMenuMaxSelection ++
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_BUILD_COVER_MENU(CMHDZ_EDITOR &w)
|
|
INT iStrLen
|
|
STRING str
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_NEW_UNIT, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Place New")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_NEW_UNIT, "STRING", 1, TRUE)
|
|
|
|
str = CMHDZ_ASSET_TYPES_TO_STRING(INT_TO_ENUM(CMHDZ_ASSET_TYPES, w.iNewUnitData))
|
|
iStrlen = GET_LENGTH_OF_LITERAL_STRING(str)
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(str, 6, iStrLen))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// selected index
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_INDEX, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Selected Item")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_INDEX, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(w.iSelectedData))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// level to edit
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_LEVEL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Level")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_LEVEL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_LEVELS_TO_STRING(INT_TO_ENUM(CMHDZ_LEVELS, w.iActiveLevel)))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
IF (w.iSelectedData = -1)
|
|
EXIT
|
|
ENDIF
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_TYPE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Type")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_TYPE, "STRING", 1, TRUE)
|
|
|
|
str = CMHDZ_ASSET_TYPES_TO_STRING(w.sCoverMapData[w.iSelectedData].eType)
|
|
iStrlen = GET_LENGTH_OF_LITERAL_STRING(str)
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(str, 6, iStrLen))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add lane type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_LANE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Lane")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_LANE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_LANE_TO_STRING(w.sCoverMapData[w.iSelectedData].iCoverLane))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add screen type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_SCREEN, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Screen")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_SCREEN, "STRING", 1, TRUE)
|
|
|
|
INT iActiveScreen = ROUND(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
|
|
IF iActiveScreen <= 0
|
|
iActiveScreen = 1
|
|
ENDIF
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_SCREEN_TO_STRING(iActiveScreen))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add pos x
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_INITIAL_X, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Initial X Pos / Point to appear")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_INITIAL_X, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.x, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add pos y
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_INITIAL_Y, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Initial Y Pos")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_INITIAL_Y, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.y, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add never render
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_IS_FAR_BG, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Is Far BG")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_IS_FAR_BG, "STRING", 1, TRUE)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(w.sCoverMapData[w.iSelectedData].eDataBits, CMHDZ_COVER_DATA_BITS_IS_FAR_BG)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
ELSE
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
ENDIF
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_REMOVE_OFF_SCREEN, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Remove when off screen")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_REMOVE_OFF_SCREEN, "STRING", 1, TRUE)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(w.sCoverMapData[w.iSelectedData].eDataBits, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
ELSE
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
ENDIF
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add never render
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_EXPORT, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Export Cover Info")
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_COVER_EXPORT_ALL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Export All Cover Info")
|
|
w.iMenuMaxSelection ++
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_BUILD_ENEMY_MENU(CMHDZ_EDITOR &w)
|
|
INT iStrLen
|
|
STRING str
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_NEW_UNIT, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Place New")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_NEW_UNIT, "STRING", 1, TRUE)
|
|
|
|
str = CMHDZ_ENEMY_TYPES_TO_STRING(INT_TO_ENUM(CMHDZ_ENEMY_TYPES, w.iNewUnitData))
|
|
iStrlen = GET_LENGTH_OF_LITERAL_STRING(str)
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(str, 4, iStrLen))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// selected index
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_INDEX, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Selected Item")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_INDEX, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(w.iSelectedData))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// level to edit
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_LEVEL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Level")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_LEVEL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_LEVELS_TO_STRING(INT_TO_ENUM(CMHDZ_LEVELS, w.iActiveLevel)))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
IF (w.iSelectedData = -1)
|
|
EXIT
|
|
ENDIF
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_TYPE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Type")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_TYPE, "STRING", 1, TRUE)
|
|
|
|
str = CMHDZ_ENEMY_TYPES_TO_STRING(w.sEnemyMapData[w.iSelectedData].eEnemyType)
|
|
iStrlen = GET_LENGTH_OF_LITERAL_STRING(str)
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(str, 4, iStrLen))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add lane type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_LANE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Lane")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_LANE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_LANE_TO_STRING(w.sEnemyMapData[w.iSelectedData].iLane))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add point to appear
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_POSITION, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Point to Appear")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_POSITION, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sEnemyMapData[w.iSelectedData].fPointToAppear, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add stage type
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_SCREEN, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Screen")
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_POSITION, "STRING", 1, TRUE)
|
|
//
|
|
// INT iActiveScreen = CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2))
|
|
//
|
|
// IF iActiveScreen <= 0
|
|
// iActiveScreen = 1
|
|
// ENDIF
|
|
//
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_SCREEN_TO_STRING(iActiveScreen))
|
|
// w.iMenuMaxSelection ++
|
|
|
|
// add pos x
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_INITIAL_X, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Initial X Pos")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_INITIAL_X, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sEnemyMapData[w.iSelectedData].vSpritePos.x, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add pos y
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_INITIAL_Y, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Initial Y Pos")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_INITIAL_Y, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sEnemyMapData[w.iSelectedData].vSpritePos.y, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add stop scrolling pos
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_STOP_POS, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Stop Pos X")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_STOP_POS, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sEnemyMapData[w.iSelectedData].fStoppingPos, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add never render
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_WAITSCROLL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Wait Stationary")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_WAITSCROLL, "STRING", 1, TRUE)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(w.sEnemyMapData[w.iSelectedData].eDataBits, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
ELSE
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
ENDIF
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add stop scrolling
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_REVERSE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("From Left")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_REVERSE, "STRING", 1, TRUE)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(w.sEnemyMapData[w.iSelectedData].eDataBits, CMHDZ_ENEMY_DATA_BITS_REVERSE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
ELSE
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
ENDIF
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add never render
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_IS_POP_UP, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Pop Up")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_IS_POP_UP, "STRING", 1, TRUE)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(w.sEnemyMapData[w.iSelectedData].eDataBits, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
ELSE
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
ENDIF
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add render warp count
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_RENDERWARP, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Warp Count")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(w.sEnemyMapData[w.iSelectedData].iRenderAfterWarpCount))
|
|
// SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
// w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_EXPORT, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Export Enemy Info")
|
|
//ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_EXPORT, "STRING", 1, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_EXPORT_ALL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Export All Enemy Info")
|
|
//ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ENEMY_EXPORT_ALL, "STRING", 1, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_BUILD_ITEM_MENU(CMHDZ_EDITOR &w)
|
|
INT iStrLen
|
|
STRING str
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_NEW_UNIT, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Place New")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_NEW_UNIT, "STRING", 1, TRUE)
|
|
|
|
str = CMHDZ_ITEM_TYPES_TO_STRING(INT_TO_ENUM(CMHDZ_ITEM_TYPES, w.iNewUnitData))
|
|
iStrlen = GET_LENGTH_OF_LITERAL_STRING(str)
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(str, 5, iStrLen))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// selected index
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_INDEX, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Selected Item")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_INDEX, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(w.iSelectedData))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// level to edit
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_LEVEL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Level")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_LEVEL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_LEVELS_TO_STRING(INT_TO_ENUM(CMHDZ_LEVELS, w.iActiveLevel)))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
IF (w.iSelectedData = -1)
|
|
EXIT
|
|
ENDIF
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_TYPE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Type")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_TYPE, "STRING", 1, TRUE)
|
|
|
|
str = CMHDZ_ITEM_TYPES_TO_STRING(w.sItemMapData[w.iSelectedData].eItemType)
|
|
iStrlen = GET_LENGTH_OF_LITERAL_STRING(str)
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(str, 6, iStrLen))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add lane type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_LANE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Lane")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_LANE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_LANE_TO_STRING(w.sItemMapData[w.iSelectedData].iLane))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add stage type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_SCREEN, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Screen")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_SCREEN, "STRING", 1, TRUE)
|
|
|
|
INT iActiveScreen = ROUND(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
|
|
IF iActiveScreen <= 0
|
|
iActiveScreen = 1
|
|
ENDIF
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_SCREEN_TO_STRING(iActiveScreen))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add pos x
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_INITIAL_X, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Initial X Pos")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_INITIAL_X, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sItemMapData[w.iSelectedData].vSpritePos.x, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add pos y
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_INITIAL_Y, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Initial Y Pos")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_INITIAL_Y, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sItemMapData[w.iSelectedData].vSpritePos.y, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add render warp count
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_RENDERWARP, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Warp Count")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_RENDERWARP, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(w.sItemMapData[w.iSelectedData].iRenderAfterWarpCount))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add stop scrolling pos
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_FORCESCALE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Force Scale")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_FORCESCALE, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sItemMapData[w.iSelectedData].fForceScale, 4))
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_EXPORT, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Export Item Info")
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_EXPORT_ALL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Export All Item Info")
|
|
//ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_ITEM_EXPORT_ALL, "STRING", 1, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_BUILD_LEVEL_MENU(CMHDZ_EDITOR &w)
|
|
// level to edit
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_INDEX, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Level")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_INDEX, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_LEVELS_TO_STRING(INT_TO_ENUM(CMHDZ_LEVELS, w.iActiveLevel)))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// stage to edit
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_PROGRESS_SET, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Level Progression")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_PROGRESS_SET, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(ROUND(sCMHDZData.fOverallLevelProgression)))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add screen type
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_SCREEN, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Screen")
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_SCREEN, "STRING", 1, TRUE)
|
|
|
|
INT iActiveScreen = ROUND(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
|
|
IF iActiveScreen <= 0
|
|
iActiveScreen = 1
|
|
ENDIF
|
|
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_SCREEN_TO_STRING(iActiveScreen))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add screen type
|
|
//ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_STOP_PROP, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("View Stop Prop")
|
|
//ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_STOP_PROP, "STRING", 1, TRUE)
|
|
//ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(sCMHDZData.iPropToStopOn[(CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2)))]))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add export level
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_PLAY, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Play Active Stage")
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add reset level
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_LEVEL_RESET, "STRING", 1, (ENUM_TO_INT(sCMHDZData.eCurrentLevel) = w.iActiveLevel))
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Reset Editor Level")
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add load level
|
|
ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_EXPORT_LEVEL, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Export Level Map to Game")
|
|
w.iMenuMaxSelection ++
|
|
ENDPROC
|
|
|
|
//PROC CMHDZ_EDITOR_BUILD_HOSTAGE_MENU(CMHDZ_EDITOR &w)
|
|
// INT iStrLen
|
|
// STRING str
|
|
//
|
|
// // add asset type
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_NEW_UNIT, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Place New")
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_NEW_UNIT, "STRING", 1, TRUE)
|
|
//
|
|
// str = CMHDZ_HOSTAGE_TYPES_TO_STRING(INT_TO_ENUM(CMHDZ_HOSTAGE_TYPES, w.iNewUnitData))
|
|
// iStrlen = GET_LENGTH_OF_LITERAL_STRING(str)
|
|
//
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(str, 4, iStrLen))
|
|
// SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // selected index
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_INDEX, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Selected Item")
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_INDEX, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(w.iSelectedData))
|
|
// SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// IF (w.iSelectedData = -1)
|
|
// EXIT
|
|
// ENDIF
|
|
//
|
|
// // add asset type
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_TYPE, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Type")
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_TYPE, "STRING", 1, TRUE)
|
|
//
|
|
// str = CMHDZ_HOSTAGE_TYPES_TO_STRING(w.sHostageMapData[w.iSelectedData].eHostageType)
|
|
// iStrlen = GET_LENGTH_OF_LITERAL_STRING(str)
|
|
//
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(str, 4, iStrLen))
|
|
// SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // add lane type
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_LANE, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Lane")
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_LANE, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_LANE_TO_STRING(w.sHostageMapData[w.iSelectedData].iHostageLane))
|
|
// SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // add pos x
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_INITIAL_X, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Initial X Pos")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sHostageMapData[w.iSelectedData].vSpritePos.x, 2))
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // add pos y
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_INITIAL_Y, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Initial Y Pos")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sHostageMapData[w.iSelectedData].vSpritePos.y, 2))
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // add stop scrolling
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_REVERSE, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("From Left")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// IF IS_BIT_SET(w.sHostageMapData[w.iSelectedData].iBitset, ENUM_TO_INT(CMHDZ_HOSTAGE_BIT_GOING_BACK))
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
// ELSE
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
// ENDIF
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // add stop scrolling pos
|
|
// ADD_MENU_ITEM_TEXT(CMHDZ_EDITOR_MODE_HOSTAGE_STOP_POS, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Stop Pos X")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(w.sHostageMapData[w.iSelectedData].fStoppingX, 2))
|
|
// w.iMenuMaxSelection ++
|
|
//ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_BUILD_PLAY_MENU(CMHDZ_EDITOR &w, BOOL bPlayMode = TRUE)
|
|
TEXT_LABEL_63 str
|
|
//INT iCurrentStage = CMHDZ_GET_CURRENT_LEVEL_SCREEN()
|
|
w.iMenuCurrentSelection = 0
|
|
|
|
IF (bPlayMode = TRUE)
|
|
CLEAR_MENU_DATA()
|
|
SET_MENU_TITLE("STRING")
|
|
str = "ACTIVE LEVEL: "
|
|
str += CMHDZ_LEVELS_TO_STRING(sCMHDZData.eCurrentLevel)
|
|
ADD_LITERAL_TO_MENU_TITLE(str)
|
|
SET_MENU_HEADER_COLOUR(0, 128, 0, 255, TRUE)
|
|
|
|
SET_MENU_ITEM_JUSTIFICATION(FONT_LEFT, FONT_RIGHT)
|
|
SET_MENU_ITEM_LAYOUT(MENU_ITEM_TEXT, MENU_ITEM_TEXT)
|
|
SET_CURRENT_MENU_ITEM(w.iMenuCurrentSelection)
|
|
ENDIF
|
|
|
|
w.iMenuMaxSelection = 0
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Current Screen")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(sCMHDZData.iCurrentScreen))
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Overall Progression")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(ROUND(sCMHDZData.fOverallLevelProgression)))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add asset type
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Stop Prop For Screen")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// IF (sCMHDZData.iCurrentScreen != -1)
|
|
// //ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(sCMHDZData.iPropToStopOn[sCMHDZData.iCurrentScreen]))
|
|
// ELSE
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("INVALID")
|
|
// ENDIF
|
|
// w.iMenuMaxSelection ++
|
|
|
|
// // add asset type
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Screen To Stop On")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// w.iMenuMaxSelection ++
|
|
|
|
// selected index
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Enemies Left For Stage")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_LEVEL()))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, FALSE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// selected index
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Enemies Alive for Phase")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_PHASE()))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, FALSE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Ready To Stop")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
IF (CMHDZ_IS_MOVING_LEVEL_ABOUT_TO_STOP())
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
ELSE
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
ENDIF
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add asset type
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Has Stopped")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
IF CMHDZ_IS_LEVEL_STOPPED()
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
ELSE
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
ENDIF
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Shots Fired")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(CMHDZ_GET_TOTAL_SHOTS_FIRED_IN_CURRENT_LEVEL()))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, FALSE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Enemies Hit")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(CMHDZ_GET_TOTAL_ENEMY_HITS_FOR_CURRENT_LEVEL()))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, FALSE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// IF (iCurrentStage < ciCMHDZ_MAX_SCREENS)
|
|
// //INT iStrLen
|
|
//
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(" ")
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Stage Settings")
|
|
// w.iMenuMaxSelection ++
|
|
// // add stop scrong
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Stop Scroll On Stage End")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
//// IF (sCMHDZData.sStageEndData[iCurrentStage].bStopScrollingOnStageEnd)
|
|
//// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
//// ELSE
|
|
//// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
//// ENDIF
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // add stop scrolling
|
|
//// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
//// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Stationary Stage")
|
|
//// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
//// IF (sCMHDZData.sStageEndData[iCurrentStage].bStationary)
|
|
//// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("ON")
|
|
//// ELSE
|
|
//// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("OFF")
|
|
//// ENDIF
|
|
//// w.iMenuMaxSelection ++
|
|
//
|
|
// // add asset type
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("End Condition")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // selected index
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Condition Value")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
//// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(sCMHDZData.sStageEndData[iCurrentStage].iValue))
|
|
// w.iMenuMaxSelection ++
|
|
//
|
|
// // selected index
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Enemy Less Than Stop")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
//// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(sCMHDZData.sStageEndData[iCurrentStage].iScrollStopEnemyCount))
|
|
// SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
// w.iMenuMaxSelection ++
|
|
// ENDIF
|
|
|
|
IF (bPlayMode = TRUE)
|
|
SET_MAX_MENU_ROWS_TO_DISPLAY(w.iMenuMaxSelection)
|
|
w.bRebuildMenu = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_BUILD_BOSS_MENU(CMHDZ_EDITOR &w)//, BOOL bPlayMode = TRUE)
|
|
|
|
TEXT_LABEL_63 strToDisplay
|
|
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Phase Index")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_INT(sCMHDZData.sBossData.iPhaseIndex))
|
|
// w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Start Health")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(cfBOSS_MaxHealth, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Current Health")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(sCMHDZData.sBossData.fHealth, 2))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Boss starting state")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// strToDisplay = CMHDZ_BOSS_STATE_TO_STRING(sCMHDZData.sBossData.eStartingState)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(strToDisplay, 17, GET_LENGTH_OF_LITERAL_STRING(strToDisplay)))
|
|
// w.iMenuMaxSelection ++
|
|
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Pop Up X Coord")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(sCMHDZData.sBossData.fForegroundXAppear, 2))
|
|
// w.iMenuMaxSelection ++
|
|
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Block time")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_FLOAT(sCMHDZData.sBossData.fIdleAttackTime, 2))
|
|
// w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Background lane")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
strToDisplay = CMHDZ_LANE_TO_STRING(sCMHDZData.sBossData.iActiveLane)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_STRING(strToDisplay, 13, GET_LENGTH_OF_LITERAL_STRING(strToDisplay)))
|
|
w.iMenuMaxSelection ++
|
|
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Spawn Helpers")
|
|
ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_BOOL(IS_BITMASK_ENUM_AS_ENUM_SET(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_SPAWNED_ENEMIES_1)))
|
|
w.iMenuMaxSelection ++
|
|
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Midground Popup")
|
|
// ADD_MENU_ITEM_TEXT(w.iMenuMaxSelection, "STRING", 1, TRUE)
|
|
// ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_STRING_FROM_BOOL(IS_BITMASK_ENUM_AS_ENUM_SET(sCMHDZData.sBossData.eDataBits, CMHDZ_BOSS_DATA_BITS_POPUP)))
|
|
// w.iMenuMaxSelection ++
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_BUILD_MENU(CMHDZ_EDITOR &w)//, BOOL bPlayMode = TRUE)
|
|
TEXT_LABEL_63 str
|
|
// title bar
|
|
CLEAR_MENU_DATA()
|
|
SET_MENU_TITLE("STRING")
|
|
SET_MENU_HEADER_COLOUR(0, 0, 128, 255, TRUE)
|
|
|
|
SWITCH (w.iEditMode)
|
|
CASE CMHDZ_EDITOR_MODE_ITEM
|
|
str = "ITEM EDITOR USED:"
|
|
str += sCMHDZData.iNumberOfItems
|
|
str += "/"
|
|
str += ciCMHDZ_MAX_ITEMS
|
|
|
|
// Prevent overflow
|
|
IF w.iSelectedData >= ciCMHDZ_MAX_ITEMS
|
|
w.iSelectedData = 0
|
|
ENDIF
|
|
|
|
BREAK
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE
|
|
// str = "HOSTAGE EDITOR USED:"
|
|
// str += sCMHDZData.iNumberOfHostages
|
|
// str += "/"
|
|
// str += ciCMHDZ_MAX_HOSTAGES
|
|
// BREAK
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY
|
|
str = "ENEMY EDITOR USED:"
|
|
str += sCMHDZData.iNumberOfEnemies
|
|
str += "/"
|
|
str += ciCMHDZ_MAX_ENEMIES
|
|
|
|
// Prevent overflow
|
|
IF w.iSelectedData >= ciCMHDZ_MAX_ENEMIES
|
|
w.iSelectedData = 0
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_COVER
|
|
str = "COVER EDITOR USED:"
|
|
str += sCMHDZData.iNumberOfProps
|
|
str += "/"
|
|
str += ciCMHDZ_MAX_COVER
|
|
|
|
// Prevent overflow
|
|
IF w.iSelectedData >= ciCMHDZ_MAX_COVER
|
|
w.iSelectedData = 0
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_BOSS
|
|
str = "BOSS EDITOR:"
|
|
BREAK
|
|
DEFAULT
|
|
str = "Camhedz EDITOR"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//IF (w.iEditMode < 4)
|
|
//str += " SCN:"
|
|
//str += (CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2)))
|
|
//ENDIF
|
|
|
|
w.iMenuMaxSelection = 0
|
|
ADD_LITERAL_TO_MENU_TITLE(str)
|
|
SET_MENU_ITEM_JUSTIFICATION(FONT_LEFT, FONT_RIGHT)
|
|
SET_MENU_ITEM_LAYOUT(MENU_ITEM_TEXT, MENU_ITEM_TEXT)
|
|
SET_CURRENT_MENU_ITEM(w.iMenuCurrentSelection)
|
|
|
|
// main option
|
|
ADD_MENU_ITEM_TEXT(0, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL("Mode")
|
|
ADD_MENU_ITEM_TEXT(0, "STRING", 1, TRUE)
|
|
ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(CMHDZ_EDITOR_MODE_TO_STRING(w.iEditMode))
|
|
SET_MENU_ITEM_TOGGLEABLE(FALSE, TRUE)
|
|
w.iMenuMaxSelection ++
|
|
|
|
// add asset menu
|
|
SWITCH (w.iEditMode)
|
|
CASE CMHDZ_EDITOR_MODE_ITEM
|
|
CMHDZ_EDITOR_BUILD_ITEM_MENU(w)
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY
|
|
CMHDZ_EDITOR_BUILD_ENEMY_MENU(w)
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_COVER
|
|
CMHDZ_EDITOR_BUILD_COVER_MENU(w)
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_LEVEL
|
|
CMHDZ_EDITOR_BUILD_LEVEL_MENU(w)
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_BOSS
|
|
CMHDZ_EDITOR_BUILD_BOSS_MENU(w)//, bPlayMode)
|
|
BREAK
|
|
ENDSWITCH
|
|
SET_MAX_MENU_ROWS_TO_DISPLAY(w.iMenuMaxSelection)
|
|
w.bRebuildMenu = FALSE
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_SELECT_RETICULE_OVER_OBJECT_FOR_EDIT(CMHDZ_EDITOR &w)
|
|
INT i
|
|
|
|
// priorities current mode
|
|
IF (w.iEditMode < 5)
|
|
IF (w.iReticuleOverIndex[w.iEditMode] != -1)
|
|
IF (w.iSelectedData != w.iReticuleOverIndex[w.iEditMode])
|
|
w.iSelectedData = w.iReticuleOverIndex[w.iEditMode]
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// then check item
|
|
REPEAT 5 i
|
|
IF (w.iReticuleOverIndex[i] != -1) AND (w.iEditMode != i)
|
|
w.iEditMode = i
|
|
w.iSelectedData = w.iReticuleOverIndex[i]
|
|
w.bRebuildMenu = TRUE
|
|
EXIT
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_UPDATE_GENERAL_OPTIONS(CMHDZ_EDITOR &w)
|
|
|
|
// handle up and down and quit
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_UP)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_W)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_UP)
|
|
OR CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_CELLPHONE_UP)
|
|
w.iMenuCurrentSelection --
|
|
IF (w.iMenuCurrentSelection < 0)
|
|
w.iMenuCurrentSelection = w.iMenuMaxSelection - 1
|
|
ENDIF
|
|
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_SCRIPT_PAD_DOWN)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_S)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_DOWN)
|
|
OR CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_CELLPHONE_DOWN)
|
|
w.iMenuCurrentSelection ++
|
|
IF (w.iMenuCurrentSelection >= w.iMenuMaxSelection)
|
|
w.iMenuCurrentSelection = 0
|
|
ENDIF
|
|
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
|
|
// IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, INPUT_FRONTEND_CANCEL)
|
|
// OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, KEY_RSHIFT)
|
|
// IF (w.iEditMode != CMHDZ_EDITOR_MODE_LEVEL)
|
|
// w.iEditMode = CMHDZ_EDITOR_MODE_LEVEL
|
|
// w.bRebuildMenu = TRUE
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
// handle main option change
|
|
IF (w.iMenuCurrentSelection = 0)
|
|
AND (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT)
|
|
OR (IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) AND IS_KEYBOARD_KEY_PRESSED(KEY_LCONTROL)))
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iEditMode, 0, CMHDZ_EDITOR_MODE_MAX_TYPES, 1, FALSE)
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, TRUE) // Restart the level when we switch Editor modes.
|
|
|
|
// Change the stage and progress for the Boss menu.
|
|
IF w.iEditMode = CMHDZ_EDITOR_MODE_BOSS
|
|
w.iActiveLevel = ENUM_TO_INT(CMHDZ_LEVEL_SLAUGHTERHOUSE)
|
|
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, TRUE)
|
|
sCMHDZData.fOverallLevelProgression = 25306
|
|
|
|
ENDIF
|
|
sCMHDZData.bDebugInvunerablePlayer = TRUE
|
|
w.bRebuildMenu = TRUE
|
|
w.iSelectedData = -1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// pick based on mode type
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPick)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPick_PC)
|
|
CMHDZ_EDITOR_SELECT_RETICULE_OVER_OBJECT_FOR_EDIT(w)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_UPDATE_COVER_OPTIONS(CMHDZ_EDITOR &w)
|
|
INT iType
|
|
FLOAT fAdjust
|
|
|
|
SWITCH (w.iMenuCurrentSelection)
|
|
CASE CMHDZ_EDITOR_MODE_COVER_NEW_UNIT
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iNewUnitData, 0, ENUM_TO_INT(NUM_CMHDZ_ASSET_TYPES), 1, FALSE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
iType = CMHDZ_EDITOR_PLACE_NEW_UNIT(w, w.iNewUnitData)
|
|
RETURN (iType != -1)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_INDEX
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iSelectedData, 0, sCMHDZData.iNumberOfProps, 1, FALSE)
|
|
IF (w.iSelectedData <= -1)
|
|
OR w.iSelectedData > sCMHDZData.iNumberOfProps
|
|
w.iSelectedData = 0
|
|
ENDIF
|
|
|
|
// Set camera to the point the cover appears
|
|
sCMHDZData.fOverallLevelProgression = w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.x - (cfBASE_SCREEN_WIDTH/2.0)
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_LEVEL
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iActiveLevel, 0, ENUM_TO_INT(CMHDZ_MAX_LEVELS), 1, FALSE)
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, TRUE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_TYPE
|
|
iType = ENUM_TO_INT(w.sCoverMapData[w.iSelectedData].eType)
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, iType, -1, ENUM_TO_INT(NUM_CMHDZ_ASSET_TYPES), 1, FALSE)
|
|
w.sCoverMapData[w.iSelectedData].eType = INT_TO_ENUM(CMHDZ_ASSET_TYPES, iType)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_LANE
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.sCoverMapData[w.iSelectedData].iCoverLane, 0, ciCMHDZ_MAX_LANES, 1, FALSE)
|
|
//CMHDZ_COPY_COVER_MAP_TO_COVER(sCMHDZData.sCoverMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_IS_FAR_BG
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_BITMASK_ENUM_BOOL(w, w.sCoverMapData[w.iSelectedData].eDataBits, CMHDZ_COVER_DATA_BITS_IS_FAR_BG)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_REMOVE_OFF_SCREEN
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_BITMASK_ENUM_BOOL(w, w.sCoverMapData[w.iSelectedData].eDataBits, CMHDZ_COVER_DATA_BITS_REMOVE_OFF_SCREEN)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_EXPORT
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
CMHDZ_DEBUG_EXPORT_COVER_MAP_DATA_TO_SCRIPT(w.sCoverMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_EXPORT_ALL
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
CMHDZ_DEBUG_EXPORT_COVER_MAP_DATA_ARRAY_TO_SCRIPT(w.sCoverMapData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
// CASE CMHDZ_EDITOR_MODE_COVER_SCROLLING
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_BITMASK_ENUM_BOOL(w, w.sCoverMapData[w.iSelectedData].eDataBits, CMHDZ_COVER_DATA_BITS_STOP_SCROLLING)
|
|
// IF IS_BITMASK_ENUM_AS_ENUM_SET(w.sCoverMapData[w.iSelectedData].eDataBits, CMHDZ_COVER_DATA_BITS_STOP_SCROLLING)
|
|
// IF (w.sCoverMapData[w.iSelectedData].fXScreenCoordForStop = 0.0)
|
|
// w.sCoverMapData[w.iSelectedData].fXScreenCoordForStop = sCMHDZData.sCoverData[w.iSelectedData].vSpritePos.x
|
|
// ENDIF
|
|
//
|
|
// IF (w.sCoverMapData[w.iSelectedData].fXScreenCoordForStop < 700)
|
|
// w.sCoverMapData[w.iSelectedData].fXScreenCoordForStop = 700
|
|
// ENDIF
|
|
//
|
|
// ENDIF
|
|
//
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
|
|
// CASE CMHDZ_EDITOR_MODE_COVER_STOP_POS
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sCoverMapData[w.iSelectedData].fXScreenCoordForStop, 0, 2500, 24)
|
|
//// IF IS_BITMASK_ENUM_AS_ENUM_SET(w.sCoverMapData[w.iSelectedData].eDataBits, CMHDZ_COVER_DATA_BITS_STOP_SCROLLING)
|
|
//// IF (w.sCoverMapData[w.iSelectedData].fXScreenCoordForStop < 700)
|
|
//// w.sCoverMapData[w.iSelectedData].fXScreenCoordForStop = 700
|
|
//// ENDIF
|
|
//// ENDIF
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
//
|
|
CASE CMHDZ_EDITOR_MODE_COVER_INITIAL_X
|
|
|
|
fAdjust = 240.0
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT)
|
|
#IF IS_DEBUG_BUILD
|
|
OR IS_KEYBOARD_KEY_PRESSED(KEY_LSHIFT)
|
|
#ENDIF
|
|
fAdjust = 24.00
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.x, cfCMHDZ_MIN_EDITOR_X_COORD, cfCMHDZ_MAX_EDITOR_X_COORD, fAdjust)
|
|
sCMHDZData.fOverallLevelProgression = w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.x - (cfBASE_SCREEN_WIDTH/2.0)
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER_INITIAL_Y
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.y, cfCMHDZ_MIN_EDITOR_Y_COORD, cfCMHDZ_MAX_EDITOR_Y_COORD, 24)
|
|
w.sCoverMapData[w.iSelectedData].vSpritePos.y = w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.y
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
CMHDZ_COPY_COVER_MAP_DATA_TO_GAME(w.sCoverMapData)
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_UPDATE_ENEMY_OPTIONS(CMHDZ_EDITOR &w)
|
|
INT iType
|
|
FLOAT fAdjust // Can change some interation values with modifiers.
|
|
|
|
SWITCH (w.iMenuCurrentSelection)
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_NEW_UNIT
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iNewUnitData, 0, ENUM_TO_INT(NUM_CMHDZ_ENEMY_TYPES), 1, FALSE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
iType = CMHDZ_EDITOR_PLACE_NEW_UNIT(w, w.iNewUnitData)
|
|
RETURN (iType != -1)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_INDEX
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iSelectedData, 0, ciCMHDZ_MAX_ENEMIES, 1, FALSE)
|
|
IF (w.iSelectedData != -1)
|
|
IF (w.sEnemyMapData[w.iSelectedData].eEnemyType = CMHDZ_ENEMY_INVALID)
|
|
w.iSelectedData = 0
|
|
ENDIF
|
|
|
|
// Set the screen view to the enemy you are looking at.
|
|
IF w.sEnemyMapData[w.iSelectedData].fPointToAppear > 0.0
|
|
sCMHDZData.fOverallLevelProgression = w.sEnemyMapData[w.iSelectedData].fPointToAppear
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_LEVEL
|
|
// Safety precaution
|
|
IF (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT)
|
|
OR (IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) AND IS_KEYBOARD_KEY_PRESSED(KEY_LCONTROL)))
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iActiveLevel, 0, ENUM_TO_INT(CMHDZ_MAX_LEVELS), 1, FALSE)
|
|
CMHDZ_COPY_ENEMY_MAP_DATA_TO_GAME(w.sEnemyMapData)
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, TRUE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_TYPE
|
|
iType = ENUM_TO_INT(w.sEnemyMapData[w.iSelectedData].eEnemyType)
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, iType, 0, ENUM_TO_INT(NUM_CMHDZ_ENEMY_TYPES), 1, FALSE)
|
|
w.sEnemyMapData[w.iSelectedData].eEnemyType = INT_TO_ENUM(CMHDZ_ENEMY_TYPES, iType)
|
|
CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_LANE
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.sEnemyMapData[w.iSelectedData].iLane, 0, ciCMHDZ_MAX_LANES, 1, FALSE)
|
|
CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_POSITION
|
|
|
|
fAdjust = 240.0
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT)
|
|
#IF IS_DEBUG_BUILD
|
|
OR IS_KEYBOARD_KEY_PRESSED(KEY_LSHIFT)
|
|
#ENDIF
|
|
fAdjust = 24.00
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sEnemyMapData[w.iSelectedData].fPointToAppear, 0.0, CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL() * cfCMHDZ_SCREEN_LENGTH, fAdjust)
|
|
//CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
|
|
// Update the camera position
|
|
sCMHDZData.fOverallLevelProgression = w.sEnemyMapData[w.iSelectedData].fPointToAppear
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
// CASE CMHDZ_EDITOR_MODE_ENEMY_RENDERWARP
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.sEnemyMapData[w.iSelectedData].iRenderAfterWarpCount, 0, 10)
|
|
// CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_REVERSE
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_BITMASK_ENUM_BOOL(w, w.sEnemyMapData[w.iSelectedData].eDataBits, CMHDZ_ENEMY_DATA_BITS_REVERSE)
|
|
CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_WAITSCROLL
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_BITMASK_ENUM_BOOL(w, w.sEnemyMapData[w.iSelectedData].eDataBits, CMHDZ_ENEMY_DATA_BITS_WAIT_UNTIL_LEVEL_STATIONARY)
|
|
CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_IS_POP_UP
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_BITMASK_ENUM_BOOL(w, w.sEnemyMapData[w.iSelectedData].eDataBits, CMHDZ_ENEMY_DATA_BITS_IS_POPUP)
|
|
CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_STOP_POS
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sEnemyMapData[w.iSelectedData].fStoppingPos, cfCMHDZ_MIN_EDITOR_X_COORD, cfCMHDZ_MAX_EDITOR_X_COORD, 24)
|
|
CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_INITIAL_X
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sEnemyMapData[w.iSelectedData].vSpritePos.x, cfCMHDZ_MIN_EDITOR_X_COORD, cfCMHDZ_MAX_EDITOR_X_COORD, 24)
|
|
////sCMHDZData.fOverallLevelProgression = w.sEnemyMapData[w.iSelectedData].vSpritePos.x
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_INITIAL_Y
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sEnemyMapData[w.iSelectedData].vSpritePos.y, cfCMHDZ_MIN_EDITOR_Y_COORD, cfCMHDZ_MAX_EDITOR_Y_COORD, 24)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_EXPORT
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
CMHDZ_DEBUG_EXPORT_ENEMY_MAP_DATA_TO_SCRIPT(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY_EXPORT_ALL
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
CMHDZ_DEBUG_EXPORT_ENEMY_MAP_DATA_ARRAY_TO_SCRIPT(w.sEnemyMapData)
|
|
CMHDZ_COPY_ENEMY_MAP_DATA_TO_GAME(w.sEnemyMapData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//CMHDZ_COPY_ENEMY_MAP_DATA_TO_GAME(w.sEnemyMapData)
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_UPDATE_ITEM_OPTIONS(CMHDZ_EDITOR &w)
|
|
INT iType
|
|
FLOAT fAdjust
|
|
|
|
SWITCH (w.iMenuCurrentSelection)
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_NEW_UNIT
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iNewUnitData, 0, ENUM_TO_INT(NUM_CMHDZ_ITEM_TYPES), 1, FALSE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
iType = CMHDZ_EDITOR_PLACE_NEW_UNIT(w, w.iNewUnitData)
|
|
RETURN (iType != -1)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_INDEX
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iSelectedData, 0, ciCMHDZ_MAX_ITEMS, 1, FALSE)
|
|
IF (w.iSelectedData != -1)
|
|
OR w.iSelectedData >= sCMHDZData.iNumberOfItems
|
|
IF (w.sItemMapData[w.iSelectedData].eItemType = CMHDZ_ITEM_NONE)
|
|
w.iSelectedData = 0
|
|
ENDIF
|
|
|
|
sCMHDZData.fOverallLevelProgression = w.sItemMapData[w.iSelectedData].vSpritePos.x - (cfBASE_SCREEN_WIDTH/2.0)
|
|
//sCMHDZData.fOverallLevelProgression = (w.sItemMapData[w.iSelectedData].vSpritePos.x - (w.sItemMapData[w.iSelectedData].vSpritePos.x%1920))
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_LEVEL
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iActiveLevel, 0, ENUM_TO_INT(CMHDZ_MAX_LEVELS), 1, FALSE)
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, TRUE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_TYPE
|
|
iType = ENUM_TO_INT(w.sItemMapData[w.iSelectedData].eItemType)
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, iType, 0, ENUM_TO_INT(NUM_CMHDZ_ITEM_TYPES), 1, FALSE)
|
|
w.sItemMapData[w.iSelectedData].eItemType = INT_TO_ENUM(CMHDZ_ITEM_TYPES, iType)
|
|
CMHDZ_COPY_ITEM_MAP_TO_ITEM(w.sItemMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_LANE
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.sItemMapData[w.iSelectedData].iLane, 0, ciCMHDZ_MAX_LANES, 1, FALSE)
|
|
CMHDZ_COPY_ITEM_MAP_TO_ITEM(w.sItemMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_SCREEN
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.sItemMapData[w.iSelectedData].iMinScreen, 1, ciCMHDZ_MAX_SCREENS)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_RENDERWARP
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.sItemMapData[w.iSelectedData].iRenderAfterWarpCount, 0, 10)
|
|
CMHDZ_COPY_ITEM_MAP_TO_ITEM(w.sItemMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_FORCESCALE
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sItemMapData[w.iSelectedData].fForceScale, 0, 2.0, 0.25)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_INITIAL_X
|
|
|
|
fAdjust = 240.0
|
|
|
|
IF IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT)
|
|
#IF IS_DEBUG_BUILD
|
|
OR IS_KEYBOARD_KEY_PRESSED(KEY_LSHIFT)
|
|
#ENDIF
|
|
fAdjust = 24.00
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sItemMapData[w.iSelectedData].vSpritePos.x, 0, CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL() * 1920.0, fAdjust)
|
|
// Adjust again if we're manipulating X position.
|
|
sCMHDZData.fOverallLevelProgression = w.sItemMapData[w.iSelectedData].vSpritePos.x - (cfBASE_SCREEN_WIDTH/2.0)
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_INITIAL_Y
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sItemMapData[w.iSelectedData].vSpritePos.y, 0, cfBASE_SCREEN_HEIGHT, 24)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_EXPORT
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
CMHDZ_DEBUG_EXPORT_ITEM_MAP_DATA_TO_SCRIPT(w.sItemMapData[w.iSelectedData], w.iSelectedData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM_EXPORT_ALL
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
CMHDZ_DEBUG_EXPORT_ITEM_MAP_DATA_ARRAY_TO_SCRIPT(w.sItemMapData)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
//CMHDZ_COPY_ITEM_MAP_DATA_TO_GAME(w.sItemMapData)
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
//FUNC BOOL CMHDZ_EDITOR_UPDATE_HOSTAGE_OPTIONS(CMHDZ_EDITOR &w)
|
|
// INT iType
|
|
//
|
|
// SWITCH (w.iMenuCurrentSelection)
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE_NEW_UNIT
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iNewUnitData, 0, ENUM_TO_INT(NUM_CMHDZ_HOSTAGE_TYPES), 1, FALSE)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
//
|
|
// IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPlace)
|
|
// OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPlace_PC)
|
|
// iType = CMHDZ_EDITOR_PLACE_NEW_UNIT(w, w.iNewUnitData)
|
|
// RETURN (iType != -1)
|
|
// ENDIF
|
|
// BREAK
|
|
//
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE_INDEX
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iSelectedData, 0, ciCMHDZ_MAX_HOSTAGES, 1, FALSE)
|
|
// IF (w.iSelectedData != -1)
|
|
// IF (w.sHostageMapData[w.iSelectedData].eHostageType = CMHDZ_HOSTAGE_INVALID)
|
|
// w.iSelectedData = 0
|
|
// ENDIF
|
|
// ENDIF
|
|
//
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
//
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE_TYPE
|
|
// iType = ENUM_TO_INT(w.sHostageMapData[w.iSelectedData].eHostageType)
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, iType, -1, ENUM_TO_INT(NUM_CMHDZ_HOSTAGE_TYPES), 1, FALSE)
|
|
// w.sHostageMapData[w.iSelectedData].eHostageType = INT_TO_ENUM(CMHDZ_HOSTAGE_TYPES, iType)
|
|
// CMHDZ_COPY_HOSTAGE_MAP_TO_HOSTAGE(w.sHostageMapData[w.iSelectedData], w.iSelectedData)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
//
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE_LANE
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.sHostageMapData[w.iSelectedData].iHostageLane, 0, ciCMHDZ_MAX_LANES, 1, FALSE)
|
|
// CMHDZ_COPY_HOSTAGE_MAP_TO_HOSTAGE(w.sHostageMapData[w.iSelectedData], w.iSelectedData)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
//
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE_REVERSE
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_BITSET_BOOL(w, w.sHostageMapData[w.iSelectedData].iBitset, ENUM_TO_INT(CMHDZ_HOSTAGE_BIT_GOING_BACK))
|
|
// CMHDZ_COPY_HOSTAGE_MAP_TO_HOSTAGE(w.sHostageMapData[w.iSelectedData], w.iSelectedData)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
//
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE_STOP_POS
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sHostageMapData[w.iSelectedData].fStoppingX, 0, 2500, 50)
|
|
// CMHDZ_COPY_HOSTAGE_MAP_TO_HOSTAGE(w.sHostageMapData[w.iSelectedData], w.iSelectedData)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
//
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE_INITIAL_X
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sHostageMapData[w.iSelectedData].vSpritePos.x, -4000, 4000, 50)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
//
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE_INITIAL_Y
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, w.sHostageMapData[w.iSelectedData].vSpritePos.y, 0, cfBASE_SCREEN_HEIGHT, 50)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// BREAK
|
|
// ENDSWITCH
|
|
//
|
|
// RETURN FALSE
|
|
//ENDFUNC
|
|
|
|
|
|
FUNC BOOL CMHDZ_EDITOR_UPDATE_LEVEL_OPTIONS(CMHDZ_EDITOR &w)
|
|
FLOAT fAdjust // Can change some interation values with modifiers.
|
|
|
|
SWITCH (w.iMenuCurrentSelection)
|
|
CASE CMHDZ_EDITOR_MODE_LEVEL_INDEX
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, w.iActiveLevel, 0, ENUM_TO_INT(CMHDZ_MAX_LEVELS), 1, FALSE)
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, TRUE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_LEVEL_PROGRESS_SET
|
|
fAdjust = 240.0
|
|
|
|
IF (IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT))
|
|
fAdjust = 24.00
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_CONTROLLER_ADJUST_FLOAT(w, sCMHDZData.fOverallLevelProgression, 0.0, CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL()*cfRIGHT_SCREEN_LIMIT, fAdjust)
|
|
sCMHDZData.iCurrentScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_LEVEL_SCREEN
|
|
// IF CMHDZ_EDITOR_CONTROLLER_ADJUST_INT(w, (CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2))), 1, CMHDZ_GET_FINAL_SCREEN_IN_CURRENT_LEVEL())
|
|
// CMHDZ_EDITOR_GET_ACTIVE_SCREEN_DATA(w, (CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2))))
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
BREAK
|
|
|
|
// CASE CMHDZ_EDITOR_MODE_LEVEL_STOP_PROP
|
|
// IF (ENUM_TO_INT(sCMHDZData.eCurrentLevel) = w.iActiveLevel)
|
|
// IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPick)
|
|
// OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPick_PC)
|
|
// IF (sCMHDZData.iPropToStopOn[(CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2)))] != -1)
|
|
// //CMHDZ_EDITOR_GET_ACTIVE_SCREEN_DATA(w, w.sCoverMapData[sCMHDZData.iPropToStopOn[(CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2)))]].iScreen)
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
// BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_LEVEL_PLAY
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPick)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPick_PC)
|
|
CMHDZ_EDITOR_PLAY_LEVEL(w)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_LEVEL_RESET
|
|
IF (ENUM_TO_INT(sCMHDZData.eCurrentLevel) = w.iActiveLevel)
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPick)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPick_PC)
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, FALSE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_EXPORT_LEVEL
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPick)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPick_PC)
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, TRUE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_EDITOR_RUN_MENU(CMHDZ_EDITOR &w)
|
|
IF (w.bPlayStage)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlToggleMap)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlToggleMap_PC)
|
|
w.bShowMiniMap = !w.bShowMiniMap
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlToggleMap)
|
|
OR CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlToggleMap_PC)
|
|
IF (!w.bMenuActive)
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
w.bMenuActive = !w.bMenuActive
|
|
ENDIF
|
|
|
|
IF (!w.bMenuActive) OR IS_PAUSE_MENU_ACTIVE_EX()
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF NOT LOAD_MENU_ASSETS()
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (w.bRebuildMenu)
|
|
CMHDZ_EDITOR_BUILD_MENU(w)
|
|
ELSE
|
|
SET_CURRENT_MENU_ITEM(w.iMenuCurrentSelection)
|
|
ENDIF
|
|
|
|
CMHDZ_EDITOR_UPDATE_GENERAL_OPTIONS(w)
|
|
|
|
SWITCH (w.iEditMode)
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM
|
|
IF CMHDZ_EDITOR_UPDATE_ITEM_OPTIONS(w)
|
|
IF (w.iSelectedData != -1)
|
|
CMHDZ_COPY_ITEM_MAP_TO_ITEM(w.sItemMapData[w.iSelectedData], w.iSelectedData)
|
|
ENDIF
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY
|
|
IF CMHDZ_EDITOR_UPDATE_ENEMY_OPTIONS(w)
|
|
IF (w.iSelectedData != -1)
|
|
CMHDZ_COPY_ENEMY_MAP_TO_ENEMY(w.sEnemyMapData[w.iSelectedData], w.iSelectedData)
|
|
ENDIF
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_COVER
|
|
IF CMHDZ_EDITOR_UPDATE_COVER_OPTIONS(w)
|
|
IF (w.iSelectedData != -1)
|
|
//CMHDZ_COPY_COVER_MAP_TO_COVER(w.sCoverMapData[w.iSelectedData], w.iSelectedData)
|
|
ENDIF
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_LEVEL
|
|
IF CMHDZ_EDITOR_UPDATE_LEVEL_OPTIONS(w)
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
DRAW_MENU()
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_RUN_PLAY_MENU(CMHDZ_EDITOR &w)
|
|
IF ((!w.bPlayStage) AND (sCMHDZData.eClientState != CMHDZ_ARCADE_CLIENT_STATE_PLAYING))
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlToggleMenu)
|
|
IF (!w.bMenuActive)
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
w.bMenuActive = !w.bMenuActive
|
|
ENDIF
|
|
|
|
IF CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlToggleMenu_PC)
|
|
IF (!w.bMenuActive)
|
|
w.bRebuildMenu = TRUE
|
|
ENDIF
|
|
w.bMenuActive = !w.bMenuActive
|
|
ENDIF
|
|
|
|
IF (!w.bMenuActive) OR IS_PAUSE_MENU_ACTIVE_EX()
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF NOT LOAD_MENU_ASSETS()
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (GET_GAME_TIMER() > w.iPlayMenuUpdateClock)
|
|
w.bRebuildMenu = TRUE
|
|
w.iPlayMenuUpdateClock = (GET_GAME_TIMER() + 500)
|
|
ENDIF
|
|
|
|
IF (w.bRebuildMenu)
|
|
CMHDZ_EDITOR_BUILD_PLAY_MENU(w)
|
|
ELSE
|
|
SET_CURRENT_MENU_ITEM(w.iMenuCurrentSelection)
|
|
ENDIF
|
|
|
|
DRAW_MENU()
|
|
ENDPROC
|
|
|
|
FUNC INT CMHDZ_EDITOR_CHECK_RETICULE_OVER_INDEX(INT iMode)
|
|
SWITCH (iMode)
|
|
CASE CMHDZ_EDITOR_MODE_ENEMY
|
|
RETURN CMHDZ_GET_ENEMY_OVER_RETICULE()
|
|
BREAK
|
|
CASE CMHDZ_EDITOR_MODE_COVER
|
|
RETURN CMHDZ_GET_COVER_OVER_RETICULE()
|
|
BREAK
|
|
// CASE CMHDZ_EDITOR_MODE_HOSTAGE
|
|
// RETURN CMHDZ_GET_HOSTAGE_OVER_RETICULE()
|
|
// BREAK
|
|
CASE CMHDZ_EDITOR_MODE_ITEM
|
|
RETURN CMHDZ_GET_ITEM_OVER_RETICULE()
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
PROC CMHDZ_EDITOR_UPDATE_RETICULE_DRAG(CMHDZ_EDITOR &w)
|
|
IF (w.bPlayStage)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (w.iSelectedData = -1)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF NOT CMHDZ_EDITOR_IS_CONTROL_PRESSED_FOR_OPTION(w, w.ctrlPick)
|
|
AND NOT CMHDZ_EDITOR_IS_KEY_PRESSED_FOR_OPTION(w, w.ctrlPick_PC)
|
|
EXIT
|
|
ENDIF
|
|
|
|
|
|
IF IS_VECTOR_2D_ZERO(w.vReticuleDelta)
|
|
EXIT
|
|
ENDIF
|
|
|
|
SWITCH (w.iEditMode)
|
|
CASE CMHDZ_EDITOR_MODE_COVER
|
|
w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.x += w.vReticuleDelta.x
|
|
w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.y += w.vReticuleDelta.y
|
|
|
|
//w.sCoverMapData[w.iSelectedData].iScreen = CMHDZ_GET_SCREEN_FOR_X_POSITION(w.sCoverMapData[w.iSelectedData].vSpriteInitialPos.x)
|
|
CMHDZ_COPY_COVER_MAP_TO_COVER(w.sCoverMapData[w.iSelectedData], w.iSelectedData)
|
|
|
|
// sCMHDZData.sCoverData[w.iSelectedData].vSpritePos.x += w.vReticuleDelta.x
|
|
// sCMHDZData.sCoverData[w.iSelectedData].vSpritePos.y += w.vReticuleDelta.y
|
|
w.bRebuildMenu = TRUE
|
|
BREAK
|
|
|
|
CASE CMHDZ_EDITOR_MODE_ITEM
|
|
w.sItemMapData[w.iSelectedData].vSpritePos.x += w.vReticuleDelta.x
|
|
w.sItemMapData[w.iSelectedData].vSpritePos.y += w.vReticuleDelta.y
|
|
CMHDZ_COPY_ITEM_MAP_TO_ITEM(w.sItemMapData[w.iSelectedData], w.iSelectedData)
|
|
|
|
// sCMHDZData.sItemData[w.iSelectedData].vSpritePos.x += w.vReticuleDelta.x
|
|
// sCMHDZData.sItemData[w.iSelectedData].vSpritePos.y += w.vReticuleDelta.y
|
|
w.bRebuildMenu = TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_UPDATE_RETICULE(CMHDZ_EDITOR &w)
|
|
INT i
|
|
BOOL bTypeLocked
|
|
|
|
// reticule
|
|
w.vReticulePos = CMHDZ_GET_PLAYER_RETICULE_POSITON()
|
|
w.vReticuleDelta = SUBTRACT_VECTOR_2D(w.vReticulePos, w.vReticuleOldPos)
|
|
w.vReticuleOldPos = w.vReticulePos
|
|
|
|
IF (w.bPlayStage)
|
|
EXIT
|
|
ENDIF
|
|
|
|
REPEAT 4 i
|
|
w.iReticuleOverIndex[i] = CMHDZ_EDITOR_CHECK_RETICULE_OVER_INDEX(i)
|
|
IF (w.iReticuleOverIndex[i] != -1)
|
|
IF (w.iEditMode = i) OR (bTypeLocked = FALSE)
|
|
w.iReticuleOverType = i
|
|
bTypeLocked = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
CMHDZ_EDITOR_UPDATE_RETICULE_DRAG(w)
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_EDITOR_REBOOT(CMHDZ_EDITOR &w, BOOL bLoad = FALSE)
|
|
w.bPlayStage = FALSE
|
|
sCMHDZData.bDebugPause = TRUE
|
|
CMHDZ_EDITOR_LOAD_OR_RESTART_LEVEL(w, bLoad)
|
|
w.iEditMode = CMHDZ_EDITOR_MODE_LEVEL
|
|
w.iSelectedData = -1
|
|
w.bMenuActive = TRUE
|
|
w.bRebuildMenu = TRUE
|
|
|
|
sCMHDZData.bDebugInvunerablePlayer = TRUE
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_EDITOR_REBOOT - w.bPlayStage = FALSE")
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_UPDATE_EDITOR_WIDGET(CMHDZ_EDITOR &w)
|
|
IF (!w.bEditorActive)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (sCMHDZData.eClientState = CMHDZ_ARCADE_CLIENT_STATE_PLAYING)
|
|
CMHDZ_EDITOR_DRAW_ENTITY_INDICES(w)
|
|
//CMHDZ_EDITOR_DRAW_PROP_STOP_PROP(sCMHDZData.iCurrentScreen)
|
|
CMHDZ_EDITOR_RUN_PLAY_MENU(w)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (w.bPlayStage)
|
|
sCMHDZData.bDebugInvunerablePlayer = TRUE
|
|
//IF CMHDZ_EDITOR_UPDATE_PLAYER_PROGRESSION(w)
|
|
//IF CMHDZ_MAINTAIN_PLAYER_CURRENT_LEVEL_PROGRESSION()
|
|
IF sCMHDZData.bLevelsCompleted[ENUM_TO_INT(sCMHDZData.eCurrentLevel)]
|
|
w.bPlayStage = FALSE
|
|
CDEBUG2LN(DEBUG_MINIGAME, "[BAZ] CMHDZ_UPDATE_EDITOR_WIDGET - w.bPlayStage = FALSE")
|
|
sCMHDZData.bDebugPause = TRUE
|
|
ENDIF
|
|
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CELLPHONE_DOWN) // Originall clashed with reloading. No good
|
|
CMHDZ_EDITOR_REBOOT(w)
|
|
sCMHDZData.bDebugPause = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
//CMHDZ_EDITOR_UPDATE_RETICULE(w)
|
|
//CMHDZ_EDITOR_DRAW_SELECTION_OVERLAYS(w)
|
|
CMHDZ_EDITOR_DRAW_ENTITY_INDICES(w)
|
|
//CMHDZ_EDITOR_DRAW_PROP_STOP_PROP((CEIL(sCMHDZData.fOverallLevelProgression/((cfRIGHT_SCREEN_LIMIT + cfLEFT_SCREEN_LIMIT)/2))))
|
|
CMHDZ_EDITOR_DRAW_MINIMAP(w)
|
|
//CMHDZ_DRAW_RETICLES()
|
|
CMHDZ_EDITOR_RUN_MENU(w)
|
|
CMHDZ_EDITOR_RUN_PLAY_MENU(w)
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_CREATE_EDITOR_WIDGET(CMHDZ_EDITOR &w)
|
|
INT i
|
|
TEXT_LABEL_63 txt
|
|
|
|
w.vMiniMapPos = INIT_VECTOR_2D(cfGAME_HUD_MINIMAP_X, cfGAME_HUD_MINIMAP_Y)
|
|
w.vMiniMapSize = INIT_VECTOR_2D(cfGAME_HUD_MINIMAP_WIDTH, cfGAME_HUD_MINIMAP_HEIGHT)
|
|
|
|
INT iActiveScreen = FLOOR(sCMHDZData.fOverallLevelProgression/cfCMHDZ_SCREEN_LENGTH)
|
|
|
|
START_WIDGET_GROUP("CMHDZ Editor")
|
|
ADD_WIDGET_BOOL("Editor Active", w.bEditorActive)
|
|
ADD_WIDGET_BOOL("Play Stage", w.bPlayStage)
|
|
|
|
START_WIDGET_GROUP("Menu")
|
|
ADD_WIDGET_BOOL("Menu Active", w.bMenuActive)
|
|
ADD_WIDGET_BOOL("Rebuild Menu", w.bRebuildMenu)
|
|
ADD_WIDGET_INT_READ_ONLY("Current Selection", w.iMenuCurrentSelection)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Map")
|
|
ADD_WIDGET_BOOL("Show Map", w.bShowMiniMap)
|
|
ADD_WIDGET_VECTOR_2D_SLIDER("Map Display Pos", w.vMiniMapPos, -2000.0, 2000.0, 10.0)
|
|
ADD_WIDGET_VECTOR_2D_SLIDER("Map Display Size", w.vMiniMapSize, -2000.0, 2000.0, 10.0)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Indexes")
|
|
ADD_WIDGET_BOOL("Show Enemy", w.bShowEntityIndicies[CMHDZ_EDITOR_MODE_ENEMY])
|
|
ADD_WIDGET_BOOL("Show Cover", w.bShowEntityIndicies[CMHDZ_EDITOR_MODE_COVER])
|
|
// ADD_WIDGET_BOOL("Show Hostage", w.bShowEntityIndicies[CMHDZ_EDITOR_MODE_HOSTAGE])
|
|
ADD_WIDGET_BOOL("Show Item", w.bShowEntityIndicies[CMHDZ_EDITOR_MODE_ITEM])
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Edit")
|
|
ADD_WIDGET_INT_READ_ONLY("Edit Mode", w.iEditMode)
|
|
ADD_WIDGET_INT_READ_ONLY("New Unit Type", w.iNewUnitData)
|
|
ADD_WIDGET_INT_READ_ONLY("Selected Data", w.iSelectedData)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Level")
|
|
ADD_WIDGET_INT_READ_ONLY("Active Level", w.iActiveLevel)
|
|
ADD_WIDGET_INT_READ_ONLY("Active Screen", iActiveScreen)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Reticule")
|
|
ADD_WIDGET_INT_READ_ONLY("Reticule Over Type", w.iReticuleOverType)
|
|
ADD_WIDGET_VECTOR_2D_READ_ONLY("Position", w.vReticulePos)
|
|
ADD_WIDGET_VECTOR_2D_READ_ONLY("Delta", w.vReticuleDelta)
|
|
REPEAT 4 i
|
|
txt = "Over "
|
|
txt += CMHDZ_EDITOR_MODE_TO_STRING(i)
|
|
ADD_WIDGET_INT_READ_ONLY(txt, w.iReticuleOverIndex[i])
|
|
ENDREPEAT
|
|
STOP_WIDGET_GROUP()
|
|
|
|
// START_WIDGET_GROUP("Prop To Stop Screen On")
|
|
// REPEAT ciCMHDZ_MAX_SCREENS i
|
|
// txt = "Scn "
|
|
// txt += i
|
|
// ADD_WIDGET_INT_READ_ONLY(txt, sCMHDZData.iPropToStopOn[i])
|
|
// ENDREPEAT
|
|
// STOP_WIDGET_GROUP()
|
|
STOP_WIDGET_GROUP()
|
|
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
|
|
ENDPROC
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PROC CMHDZ_DEBUG_CREATE_WIDGETS()
|
|
|
|
IF sCMHDZData.bDebugCreatedWidgets
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF sCMHDZData.widgetGroupExample = NULL
|
|
EXIT
|
|
ENDIF
|
|
|
|
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] [DSW] Creating widgets...")
|
|
SET_CURRENT_WIDGET_GROUP(sCMHDZData.widgetGroupExample)
|
|
START_WIDGET_GROUP("CMHDZ Arcade Widgets")
|
|
ADD_WIDGET_BOOL("Invunerable Player", sCMHDZData.bDebugInvunerablePlayer)
|
|
ADD_WIDGET_BOOL("Debug Pause", sCMHDZData.bDebugPause)
|
|
ADD_WIDGET_INT_READ_ONLY("Stack Size", sCMHDZData.iDebugStackSize)
|
|
ADD_WIDGET_INT_READ_ONLY("iRectsDrawnThisFrame", iRectsDrawnThisFrame)
|
|
ADD_WIDGET_INT_READ_ONLY("iSpritesDrawnThisFrame", iSpritesDrawnThisFrame)
|
|
ADD_WIDGET_INT_READ_ONLY("iDebugLinesDrawnThisFrame", iDebugLinesDrawnThisFrame)
|
|
ADD_WIDGET_FLOAT_SLIDER("Debug Float", sCMHDZData.fDebugFloat, 0, 5, 0.01)
|
|
|
|
CMHDZ_DEBUG_CREATE_DEBUG_STATE_WIDGET(sCMHDZData.sClientStateWidget, ENUM_TO_INT(NUM_CMHDZ_ARCADE_CLIENT_STATE), "Client State")
|
|
|
|
#IF CMHDZ_CMDLINE_EDITOR_NEW
|
|
CMHDZ_CREATE_EDITOR_WIDGET(sCMHDZData.sEditor)
|
|
#ENDIF
|
|
|
|
|
|
// IF (CMHDZ_MAX_REPLAY_ENTRIES != 1)
|
|
// CMHDZ_DEBUG_CREATE_REPLAY_SYSTEM_WIDGET(sCMHDZData.sReplaySystem)
|
|
// ENDIF
|
|
|
|
START_WIDGET_GROUP("Game")
|
|
CMHDZ_DEBUG_CREATE_PLAYER_DATA_WIDGET(sCMHDZData.sPlayerData[0])
|
|
START_WIDGET_GROUP("My Scores")
|
|
ADD_WIDGET_INT_READ_ONLY("Desert ", sCMHDZData.iMyScores[0])
|
|
ADD_WIDGET_INT_READ_ONLY("Town ", sCMHDZData.iMyScores[1])
|
|
ADD_WIDGET_INT_READ_ONLY("Forest ", sCMHDZData.iMyScores[2])
|
|
ADD_WIDGET_INT_READ_ONLY("Mine ", sCMHDZData.iMyScores[3])
|
|
ADD_WIDGET_INT_READ_ONLY("Graveyard ", sCMHDZData.iMyScores[4])
|
|
ADD_WIDGET_INT_READ_ONLY("Successive Hits", sCMHDZData.sPlayerData[0].iSuccessiveHits)
|
|
ADD_WIDGET_INT_READ_ONLY("Chain", sCMHDZData.sPlayerData[0].iChainedScore)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Level")
|
|
//ADD_WIDGET_INT_READ_ONLY("# of Stages", sCMHDZData.iDebugTotalStages)
|
|
ADD_WIDGET_INT_READ_ONLY("Shots", sCMHDZData.iTotalLevelShots[CMHDZ_GET_CURRENT_LEVEL()])
|
|
ADD_WIDGET_INT_READ_ONLY("Enemy Kills", sCMHDZData.iTotalLevelEnemyHits[CMHDZ_GET_CURRENT_LEVEL()])
|
|
ADD_WIDGET_INT_READ_ONLY("HeadShots", sCMHDZData.iTotalLevelEnemyHeadShots[CMHDZ_GET_CURRENT_LEVEL()])
|
|
//ADD_WIDGET_INT_READ_ONLY("Birds", sCMHDZData.iTotalLevelBirdsShot[CMHDZ_GET_CURRENT_LEVEL()])
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Enemies Count")
|
|
ADD_WIDGET_INT_READ_ONLY("Lane 0 Active ", sCMHDZData.iCurrentActiveEnemies[0])
|
|
ADD_WIDGET_INT_READ_ONLY("Lane 1 Active ", sCMHDZData.iCurrentActiveEnemies[1])
|
|
ADD_WIDGET_INT_READ_ONLY("Lane 2 Active ", sCMHDZData.iCurrentActiveEnemies[2])
|
|
ADD_WIDGET_INT_READ_ONLY("Total rem ", sCMHDZData.iDebugEnemiesRemaining)
|
|
ADD_WIDGET_INT_READ_ONLY("Total Spawned", sCMHDZData.iTotalNumberOfEnemiesSpawned)
|
|
ADD_WIDGET_INT_READ_ONLY("Total Count", sCMHDZData.iTotalNumberOfEnemies)
|
|
ADD_WIDGET_BOOL("Output all pos", sCMHDZData.bDebugOutputAliveEnemies)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Background")
|
|
ADD_WIDGET_BOOL("Stop moving", sCMHDZData.bStopMovingLevel)
|
|
ADD_WIDGET_BOOL("Hide Facade", sCMHDZData.bDisableFacade)
|
|
ADD_WIDGET_BOOL("Shift props left", sCMHDZData.bDebugShiftPropsLeft)
|
|
ADD_WIDGET_BOOL("Shift props right", sCMHDZData.bDebugShiftPropsRight)
|
|
ADD_WIDGET_BOOL("Flip Background", sCMHDZData.bFlipBackground)
|
|
ADD_WIDGET_INT_READ_ONLY("# of BG Elements Drawn", sCMHDZData.iNumberOfBackgroundElementsDrawn)
|
|
ADD_WIDGET_FLOAT_SLIDER("Background Speed Mult", sCMHDZData.fBackgroundSpeedMult, 1, 20.0, 1)
|
|
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Tile 0 X", sCMHDZData.sBackgroundTilesData[0].vSpritePos.x)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Tile 1 X", sCMHDZData.sBackgroundTilesData[1].vSpritePos.x)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Tile 2 X", sCMHDZData.sBackgroundTilesData[2].vSpritePos.x)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Tile 3 X", sCMHDZData.sBackgroundTilesData[3].vSpritePos.x)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Tile 4 X", sCMHDZData.sBackgroundTilesData[4].vSpritePos.x)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Tile 5 X", sCMHDZData.sBackgroundTilesData[5].vSpritePos.x)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Tile 6 X", sCMHDZData.sBackgroundTilesData[6].vSpritePos.x)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Player Thrown Projectiles")
|
|
ADD_WIDGET_BOOL("Set Projectile", sCMHDZData.bDebugSetPlayerProjectile)
|
|
sCMHDZData.twDebugPlayerProjectileType = ADD_TEXT_WIDGET("Projectile")
|
|
ADD_WIDGET_INT_SLIDER("Projectile Type", sCMHDZData.iDebugPlayerProjectileType, 0, ENUM_TO_INT(NUM_CMHDZ_PROJECTILE_TYPES) - 1, 1)
|
|
ADD_WIDGET_INT_SLIDER("Ammo Count", sCMHDZData.sPlayerData[0].iThrownProjectilesAmmo, 0, 99, 1)
|
|
ADD_WIDGET_INT_SLIDER("Reload Time", sCMHDZData.sPlayerData[0].iThrownProjectileReloadDelay, 0, 5000, 250)
|
|
ADD_WIDGET_BOOL("Launch Projectile", sCMHDZData.bDebugLaunchPlayerProjectile)
|
|
ADD_WIDGET_BOOL("Clear Projectile", sCMHDZData.bDebugClearPlayerProjectile)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Enemy Projectiles")
|
|
ADD_WIDGET_BOOL("Launch Projectile", sCMHDZData.bDebugLaunchDynamite)
|
|
ADD_WIDGET_BOOL("Clear Projectile", sCMHDZData.bDebugClearDynamite)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Awards")
|
|
ADD_WIDGET_BOOL("Award Deadeye T-Shirt", sCMHDZData.bDebugAwardDeadeye)
|
|
ADD_WIDGET_INT_SLIDER("Sharshooter award", sCMHDZData.iDebugFACES_OF_DEATH, 0, 50, 1)
|
|
ADD_WIDGET_BOOL("Set birds shot", sCMHDZData.bDebugAwardSetFACES_OF_DEATH)
|
|
ADD_WIDGET_BOOL("Award FACES_OF_DEATH T-Shirt", sCMHDZData.bDebugAwardFACES_OF_DEATH)
|
|
ADD_WIDGET_BOOL("Award Pistols at dawn T-Shirt", sCMHDZData.bDebugAwardSTV)
|
|
ADD_WIDGET_BOOL("Award Complete T-Shirt", sCMHDZData.bDebugAwardComplete)
|
|
ADD_WIDGET_BOOL("Award Complete Trophy", sCMHDZData.bDebugAwardTrophy)
|
|
ADD_WIDGET_BOOL("Clear stats", sCMHDZData.bClearAwardStats)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Pickups")
|
|
ADD_WIDGET_BOOL("Enable", sCMHDZData.bDebugEnablePickup)
|
|
ADD_WIDGET_INT_SLIDER("Show Screen Pickups", sCMHDZData.iDebugPickupScreen, -1, ciCMHDZ_MAX_SCREENS, 1)
|
|
ADD_WIDGET_BOOL("Quad Damage", sCMHDZData.bDebugEnableQuadDamage)
|
|
STOP_WIDGET_GROUP()
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Level Select Screen Debug")
|
|
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 1 score X", cfCMHDZ_SOLO_LEVEL1_SCORE_X_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 2 score X", cfCMHDZ_SOLO_LEVEL2_SCORE_X_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 3 score X", cfCMHDZ_SOLO_LEVEL3_SCORE_X_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 4 score X", cfCMHDZ_SOLO_LEVEL4_SCORE_X_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 5 score X", cfCMHDZ_SOLO_LEVEL5_SCORE_X_POS, -100, 2000, 4)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 1 Star X", cfCMHDZ_SOLO_LEVEL1_STAR_X_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 1 Star Y", cfCMHDZ_SOLO_LEVEL1_STAR_Y_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 2 Star X", cfCMHDZ_SOLO_LEVEL2_STAR_X_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 3 Star X", cfCMHDZ_SOLO_LEVEL3_STAR_X_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 4 Star X", cfCMHDZ_SOLO_LEVEL4_STAR_X_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 4 Star Y", cfCMHDZ_SOLO_LEVEL4_STAR_Y_POS, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level 5 Star X", cfCMHDZ_SOLO_LEVEL5_STAR_X_POS, -100, 2000, 4)
|
|
|
|
// ADD_WIDGET_FLOAT_SLIDER("Level Accuracy Results Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_X, -100, 2000, 4)
|
|
// ADD_WIDGET_FLOAT_SLIDER("Level Accuracy VAL Results Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_VAL_POS_X, -100, 2000, 4)
|
|
//
|
|
// ADD_WIDGET_FLOAT_SLIDER("GAME Score Results Pos X", cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_SCORE_POS_X, -100, 2000, 4)
|
|
// ADD_WIDGET_FLOAT_SLIDER("GAME Accuracy Results Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_X, -100, 2000, 4)
|
|
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Result Screen Debug")
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Level Score Results Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_POS_X, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level Score Results VAL Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_VAL_POS_X, -100, 2000, 4)
|
|
|
|
// ADD_WIDGET_FLOAT_SLIDER("Level Score Results Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_VAL_POS_X, -100, 2000, 4)
|
|
// ADD_WIDGET_FLOAT_SLIDER("Level Score Results VAL Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_SCORE_VAL_POS_X, -100, 2000, 4)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Level Accuracy Results Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_X, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("Level Accuracy VAL Results Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_VAL_POS_X, -100, 2000, 4)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("GAME Score Results Pos X", cfCMHDZ_RESULTS_SCREEN_GAME_COMPLETE_SCORE_VAL_POS_X, -100, 2000, 4)
|
|
ADD_WIDGET_FLOAT_SLIDER("GAME Accuracy Results Pos X", cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_VAL_POS_X, -100, 2000, 4)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("GAME Star Results Pos X", cfCMHDZ_SOLO_RESULTS_STAR_X_POS, -100, 2000, 2)
|
|
ADD_WIDGET_FLOAT_SLIDER("GAME Star Results Pos Y", cfCMHDZ_SOLO_RESULTS_STAR_Y_POS, -100, 2000, 2)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("FINAL Star Results Pos X", cfCMHDZ_SOLO_GAME_RESULTS_STAR_X_POS, -100, 2000, 2)
|
|
ADD_WIDGET_FLOAT_SLIDER("FINAL Star Results Pos Y", cfCMHDZ_SOLO_GAME_RESULTS_STAR_Y_POS, -100, 2000, 2)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("cfCMHDZ_SPRITE_HUD_TIME_TEXT_X", cfCMHDZ_SPRITE_HUD_TIME_TEXT_X, -100, 2000, 2)
|
|
ADD_WIDGET_FLOAT_SLIDER("cfCMHDZ_SPRITE_HUD_TIME_TEXT_Y", cfCMHDZ_SPRITE_HUD_TIME_TEXT_Y, -100, 2000, 2)
|
|
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Bazal's Debug")
|
|
START_WIDGET_GROUP("Stuff")
|
|
ADD_WIDGET_FLOAT_READ_ONLY("vSpriteMarkerPos X", sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("vSpriteMarkerPos Y", sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Prop X", sCMHDZData.sCoverData[8].vSpritePos.x)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Prop X", sCMHDZData.sCoverData[9].vSpritePos.x)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Prop X", sCMHDZData.sCoverData[10].vSpritePos.x)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Enemy X", sCMHDZData.sEnemyData[0].vSpritePos.x)
|
|
// ADD_WIDGET_FLOAT_SLIDER("Reticule Screen Sp X", sCMHDZData.fDebugEntityWorldSpaceX, -cfGAME_SCREEN_WIDTH, cfGAME_SCREEN_WIDTH, 0.5)
|
|
// ADD_WIDGET_FLOAT_SLIDER("Reticule Screen Sp Y", sCMHDZData.fDebugEntityWorldSpaceY, -cfGAME_SCREEN_HEIGHT, cfGAME_SCREEN_HEIGHT, 0.5)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Enemy Hover")
|
|
ADD_WIDGET_BOOL("Enable Enemy Hover", sCMHDZData.bEnableEnemyHover)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Marker World Px Pos X", sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.x)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Marker World Px Pos Y", sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos.y)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Reticule-Entity Dist", sCMHDZData.fReticuleSpriteDist)
|
|
ADD_WIDGET_INT_READ_ONLY("Entity ID", sCMHDZData.iDebugEntityId )
|
|
ADD_WIDGET_INT_READ_ONLY("Entity Type", sCMHDZData.iDebugType )
|
|
ADD_WIDGET_INT_READ_ONLY("Entity State", sCMHDZData.iDebugEntityState )
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Entity stopping X", sCMHDZData.fEntityStoppingX)
|
|
ADD_WIDGET_INT_READ_ONLY("Lane", sCMHDZData.iDebugLane)
|
|
ADD_WIDGET_INT_READ_ONLY("Anim frame", sCMHDZData.iDebugAnimFrame)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Entity World X", sCMHDZData.fDebugEntityWorldX)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Entity World Y", sCMHDZData.fDebugEntityWorldY)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Entity TL X", sCMHDZData.fDebugEntityCornerX[0])
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Entity TL Y", sCMHDZData.fDebugEntityCornerY[0])
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Entity BR X", sCMHDZData.fDebugEntityCornerX[1])
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Entity BR Y", sCMHDZData.fDebugEntityCornerY[1])
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Ent-Ret TL X Diff", sCMHDZData.fDebugReticuleEntityTLDiffX)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Ent-Ret TL Y Diff", sCMHDZData.fDebugReticuleEntityTLDiffY)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Texture Pos")
|
|
ADD_WIDGET_FLOAT_SLIDER("Texture 1 X", sCMHDZData.fTexturePosX[0], -10000.0, 10000.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("Texture 1 Y", sCMHDZData.fTexturePosY[0], -10000.0, 10000.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("Texture 1 Scale", sCMHDZData.fTextureScale[0], 0.0, 1.0, 0.05)
|
|
ADD_WIDGET_FLOAT_SLIDER("Texture 2 X", sCMHDZData.fTexturePosX[1], -10000.0, 10000.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("Texture 2 Y", sCMHDZData.fTexturePosY[1], -10000.0, 10000.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("Texture 3 X", sCMHDZData.fTexturePosX[2], -10000.0, 10000.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("Texture 3 Y", sCMHDZData.fTexturePosY[2], -10000.0, 10000.0, 0.5)
|
|
ADD_WIDGET_INT_SLIDER("Value", sCMHDZData.iDebugIntegerValue,0, 100000, 1)
|
|
ADD_WIDGET_FLOAT_SLIDER("Scale",sCMHDZData.fDebugFloatValue, -10.0, 10.0, 0.1)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Props / Cover")
|
|
ADD_WIDGET_BOOL("Enable Hover", sCMHDZData.bEnableCoverHover)
|
|
ADD_WIDGET_BOOL("Stop moving", sCMHDZData.bStopMovingLevel)
|
|
ADD_WIDGET_INT_READ_ONLY("Index", sCMHDZData.iDebugIntegerValue)
|
|
sCMHDZData.twDebugId = ADD_TEXT_WIDGET("Prop Type")
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Prop X", sCMHDZData.fDebugEntityWorldX)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Prop Y", sCMHDZData.fDebugEntityWorldY)
|
|
ADD_WIDGET_INT_READ_ONLY("Prop Lane", sCMHDZData.iDebugLane)
|
|
// ADD_WIDGET_INT_READ_ONLY("Prop Screen", sCMHDZData.iDebugCoverScreen)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Prop Scale", sCMHDZData.fDebugEntityScale)
|
|
ADD_WIDGET_BOOL("Edit", sCMHDZData.bDebugEnableEdit)
|
|
ADD_WIDGET_BOOL("Finalise Edit", sCMHDZData.bDebugFinaliseEdit)
|
|
ADD_WIDGET_BOOL("Hide Foreground", sCMHDZData.bDebugHideForegroundProps)
|
|
ADD_WIDGET_INT_READ_ONLY("Editing ID", sCMHDZData.iEntityEdit)
|
|
sCMHDZData.twDebugId = ADD_TEXT_WIDGET("Editing Type")
|
|
ADD_WIDGET_FLOAT_SLIDER("Pos X", sCMHDZData.fTexturePosX[0], -10000.0, 10000.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("Pos Y", sCMHDZData.fTexturePosY[0], -10000.0, 10000.0, 0.5)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Initial Pos X", sCMHDZData.fTexturePosX[1])
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Initial Pos Y", sCMHDZData.fTexturePosY[1])
|
|
STOP_WIDGET_GROUP()
|
|
/*
|
|
START_WIDGET_GROUP("Controls")
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Stick X", sCMHDZData.fDebugStickX)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Stick Y", sCMHDZData.fDebugStickX)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Mouse X", sCMHDZData.fDebugMouseX)
|
|
// ADD_WIDGET_FLOAT_READ_ONLY("Mouse Y", sCMHDZData.fDebugMouseY)
|
|
STOP_WIDGET_GROUP()
|
|
*/
|
|
STOP_WIDGET_GROUP()
|
|
|
|
STOP_WIDGET_GROUP()
|
|
|
|
ARCADE_GAMES_LEADERBOARD_WIDGET_CREATE(sCMHDZData.sLbData)
|
|
ARCADE_GAMES_POSTFX_WIDGET_CREATE()
|
|
|
|
START_WIDGET_GROUP("Debug Rect")
|
|
ADD_WIDGET_BOOL("Show Rect", sCMHDZData.bDrawDebugRect)
|
|
ADD_WIDGET_BOOL("Center Mode", sCMHDZData.bDebugRectCenterMode)
|
|
CMHDZ_ADD_WIDGET_VECTOR_2D_SLIDER("Top Left (Center)", sCMHDZData.vDebugRect[0], -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 10)
|
|
CMHDZ_ADD_WIDGET_VECTOR_2D_SLIDER("Base Right (HalfSize)", sCMHDZData.vDebugRect[1], -cfBASE_SCREEN_WIDTH, cfBASE_SCREEN_WIDTH, 10)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
START_WIDGET_GROUP("Update")
|
|
ADD_WIDGET_INT_SLIDER("Base FPS", ciBASE_FPS, 0, 1000, 1)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Server BD")
|
|
ADD_WIDGET_INT_READ_ONLY("Number of players ", cmhdzServerBd.iNumPlayers)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
CLEAR_CURRENT_WIDGET_GROUP(sCMHDZData.widgetGroupExample)
|
|
|
|
sCMHDZData.fTexturePosX[0] = 1000.0 //cfBASE_SCREEN_WIDTH/6*2
|
|
sCMHDZData.fTexturePosY[0] = 315.0 //152.500
|
|
sCMHDZData.fTextureScale[0] = 1.0
|
|
sCMHDZData.fTexturePosX[1] = cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_X
|
|
sCMHDZData.fTexturePosY[1] = cfCMHDZ_RESULTS_SCREEN_COMPLETE_ACCURACY_POS_Y
|
|
sCMHDZData.fTexturePosX[2] = 500.0
|
|
sCMHDZData.fTexturePosY[2] = 500.0
|
|
|
|
sCMHDZData.iDebugIntegerValue = 7250
|
|
sCMHDZData.fDebugFloatValue = 1.0
|
|
|
|
sCMHDZData.iDebugCover = -1
|
|
sCMHDZData.iDebugForegroundEnemy = -1
|
|
sCMHDZData.iDebugMiddleEnemy = -1
|
|
sCMHDZData.iDebugBackgroundEnemy = -1
|
|
|
|
sCMHDZData.bDebugCreatedWidgets = TRUE
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_UPDATE_WIDGETS()
|
|
INT i
|
|
|
|
sCMHDZData.iDebugStackSize = GET_CURRENT_STACK_SIZE()
|
|
|
|
#IF CMHDZ_CMDLINE_EDITOR_NEW
|
|
CMHDZ_DEBUG_UPDATE_CLIENT_STATE_WIDGET(sCMHDZData.sClientStateWidget)
|
|
CMHDZ_UPDATE_EDITOR_WIDGET(sCMHDZData.sEditor)
|
|
#ENDIF
|
|
|
|
IF PARTICIPANT_ID_TO_INT() >= 0
|
|
|
|
IF sCMHDZData.iMyScores[sCMHDZData.iStaggeredDebugCount] != playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[sCMHDZData.iStaggeredDebugCount]
|
|
sCMHDZData.iMyScores[sCMHDZData.iStaggeredDebugCount] = playerBd[PARTICIPANT_ID_TO_INT()].iPlayerScore[sCMHDZData.iStaggeredDebugCount]
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
sCMHDZData.iDebugEnemiesRemaining = CMHDZ_GET_TOTAL_NUMBER_OF_ENEMIES_LEFT_ALIVE_FOR_CURRENT_SCREEN()
|
|
|
|
VECTOR_2D vReticule = CMHDZ_GET_PLAYER_RETICULE_POSITON()
|
|
FLOAT distanceX, distanceY, fDistance, fDistanceToCheck
|
|
BOOL bIsHovering
|
|
IF sCMHDZData.bEnableEnemyHover
|
|
FOR i = 0 TO ciCMHDZ_MAX_ENEMIES -1
|
|
|
|
IF (sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ACTIVE OR sCMHDZData.sEnemyData[i].eState = CMHDZ_ENEMY_STATE_ATTACKING) AND sCMHDZData.sEnemyData[i].iHealth > 0
|
|
distanceX = vReticule.x - sCMHDZData.sEnemyData[i].vSpritePos.x
|
|
distanceY = vReticule.y - sCMHDZData.sEnemyData[i].vSpritePos.y
|
|
fDistance = SQRT(distanceX * distanceX + distanceY * distanceY)
|
|
|
|
IF (sCMHDZData.sEnemyData[i].iEnemyLane = ciCMHDZ_LANE_BACKGROUND OR sCMHDZData.sEnemyData[i].iEnemyLane = ciCMHDZ_LANE_MIDDLE)
|
|
fDistanceToCheck = 120.0
|
|
ELSE
|
|
fDistanceToCheck = 320.0 // 280.0
|
|
ENDIF
|
|
|
|
IF fDistance < fDistanceToCheck
|
|
sCMHDZData.fReticuleSpriteDist = fDistance
|
|
sCMHDZData.iDebugEntityId = i
|
|
sCMHDZData.iDebugType = ENUM_TO_INT(sCMHDZData.sEnemyData[i].iEnemyType)
|
|
sCMHDZData.iDebugLane = sCMHDZData.sEnemyData[i].iEnemyLane
|
|
sCMHDZData.iDebugEntityState = ENUM_TO_INT(sCMHDZData.sEnemyData[i].eState)
|
|
sCMHDZData.fEntityStoppingX = sCMHDZData.sEnemyData[i].fStoppingX
|
|
sCMHDZData.fDebugEntityWorldX = sCMHDZData.sEnemyData[i].vSpritePos.x
|
|
sCMHDZData.fDebugEntityWorldY = sCMHDZData.sEnemyData[i].vSpritePos.Y
|
|
|
|
sCMHDZData.iDebugAnimFrame = sCMHDZData.sEnemyData[i].iSpriteAnimFrame
|
|
|
|
VECTOR_2D vCorner0 = INIT_VECTOR_2D(sCMHDZData.sEnemyData[i].vSpritePos.x - (sCMHDZData.sEnemyData[i].vSize.x/2), sCMHDZData.sEnemyData[i].vSpritePos.y - (sCMHDZData.sEnemyData[i].vSize.y/2))
|
|
VECTOR_2D vCorner1 = INIT_VECTOR_2D(sCMHDZData.sEnemyData[i].vSpritePos.x + (sCMHDZData.sEnemyData[i].vSize.x/2), sCMHDZData.sEnemyData[i].vSpritePos.y + (sCMHDZData.sEnemyData[i].vSize.y/2))
|
|
|
|
sCMHDZData.fDebugEntityCornerX[0] = vCorner0.x
|
|
sCMHDZData.fDebugEntityCornerY[0] = vCorner0.y
|
|
sCMHDZData.fDebugEntityCornerX[1] = vCorner1.x
|
|
sCMHDZData.fDebugEntityCornerY[1] = vCorner1.y
|
|
|
|
sCMHDZData.fDebugReticuleEntityTLDiffX = vReticule.x - vCorner0.x
|
|
sCMHDZData.fDebugReticuleEntityTLDiffY = vReticule.y - vCorner0.y
|
|
bIsHovering = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
IF NOT bIsHovering
|
|
sCMHDZData.iDebugEntityId = -1
|
|
sCMHDZData.fDebugEntityWorldX = -1.0
|
|
sCMHDZData.fDebugEntityWorldY = -1.0
|
|
sCMHDZData.fDebugEntityCornerX[0] = -1.0
|
|
sCMHDZData.fDebugEntityCornerY[0] = -1.0
|
|
sCMHDZData.fDebugEntityCornerX[1] = -1.0
|
|
sCMHDZData.fDebugEntityCornerY[1] = -1.0
|
|
sCMHDZData.iDebugLane = -1
|
|
sCMHDZData.fReticuleSpriteDist = -1.0
|
|
sCMHDZData.fDebugReticuleEntityTLDiffX = -1.0
|
|
sCMHDZData.fDebugReticuleEntityTLDiffY = -1.0
|
|
ENDIF
|
|
ENDIF
|
|
STRING sCover
|
|
IF sCMHDZData.bEnableCoverHover
|
|
INT iClosest = CMHDZ_GET_CLOSEST_PROP_TO_COORD(vReticule)
|
|
IF iClosest > -1
|
|
sCover = CMHDZ_ASSET_TYPES_TO_STRING(sCMHDZData.sCoverData[iClosest].eType)
|
|
sCMHDZData.fDebugEntityWorldX = sCMHDZData.sCoverData[iClosest].vSpritePos.x
|
|
sCMHDZData.fDebugEntityWorldY = sCMHDZData.sCoverData[iClosest].vSpritePos.Y
|
|
sCMHDZData.iDebugLane = sCMHDZData.sCoverData[iClosest].iCoverLane
|
|
sCMHDZData.iDebugIntegerValue = iClosest
|
|
// sCMHDZData.iDebugCoverScreen = sCMHDZData.sCoverData[iClosest].iScreen
|
|
sCMHDZData.fDebugEntityScale = CMHDZ_COVER_UTIL_GET_TYPE_SCALE_FOR_LANE(sCMHDZData.sCoverData[iClosest].eType, sCMHDZData.sCoverData[iClosest].iCoverLane)
|
|
ELSE
|
|
sCover = CMHDZ_ASSET_TYPES_TO_STRING(CMHDZ_ASSET_INVALID)
|
|
sCMHDZData.fDebugEntityWorldX = -9999999.0
|
|
sCMHDZData.fDebugEntityWorldY = -9999999.0
|
|
sCMHDZData.iDebugIntegerValue = -1
|
|
ENDIF
|
|
SET_CONTENTS_OF_TEXT_WIDGET(sCMHDZData.twDebugId, sCover)
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugEnableEdit
|
|
AND sCMHDZData.bEnableCoverHover
|
|
IF NOT sCMHDZData.bDebugInitEdit
|
|
AND sCMHDZData.iDebugIntegerValue > -1
|
|
sCMHDZData.iEntityEdit = sCMHDZData.iDebugIntegerValue
|
|
sCMHDZData.bDebugInitEdit = TRUE
|
|
sCMHDZData.fTexturePosX[0] = sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpritePos.x
|
|
sCMHDZData.fTexturePosY[0] = sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpritePos.y
|
|
sCMHDZData.fTexturePosX[1] = sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpriteInitialPos.x
|
|
sCMHDZData.fTexturePosY[1] = sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpriteInitialPos.y
|
|
sCMHDZData.fTexturePosX[2] = sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpritePos.x
|
|
sCMHDZData.fTexturePosY[2] = sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpritePos.y
|
|
sCMHDZData.bDebugHideForegroundProps = TRUE
|
|
ELIF sCMHDZData.bDebugInitEdit
|
|
sCover = CMHDZ_ASSET_TYPES_TO_STRING(sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].eType)
|
|
SET_CONTENTS_OF_TEXT_WIDGET(sCMHDZData.twDebugId, sCover)
|
|
sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpritePos = GET_DEBUG_TEXTURE_POS(0)
|
|
IF (sCMHDZData.fTexturePosY[2] != sCMHDZData.fTexturePosY[0])
|
|
sCMHDZData.fTexturePosY[1] -= (sCMHDZData.fTexturePosY[2] - sCMHDZData.fTexturePosY[0])
|
|
sCMHDZData.fTexturePosY[2] = sCMHDZData.fTexturePosY[0]
|
|
ENDIF
|
|
|
|
IF (sCMHDZData.fTexturePosX[2] != sCMHDZData.fTexturePosX[0])
|
|
sCMHDZData.fTexturePosX[1] -= (sCMHDZData.fTexturePosX[2] - sCMHDZData.fTexturePosX[0])
|
|
sCMHDZData.fTexturePosX[2] = sCMHDZData.fTexturePosX[0]
|
|
ENDIF
|
|
|
|
IF (sCMHDZData.bDebugFinaliseEdit) OR (sCMHDZData.bStopMovingLevel)
|
|
sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpriteInitialPos.x = sCMHDZData.fTexturePosX[1]
|
|
sCMHDZData.sCoverData[sCMHDZData.iEntityEdit].vSpriteInitialPos.y = sCMHDZData.fTexturePosY[1]
|
|
sCMHDZData.bDebugFinaliseEdit = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF sCMHDZData.bDebugInitEdit
|
|
sCMHDZData.bDebugInitEdit = FALSE
|
|
sCMHDZData.iEntityEdit = -1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugShiftPropsLeft
|
|
sCMHDZData.bDebugShiftPropsLeft = FALSE
|
|
i = 0
|
|
REPEAT ciCMHDZ_MAX_COVER i
|
|
|
|
sCMHDZData.sCoverData[i].vSpritePos.x -= (cfBASE_SCREEN_WIDTH / 2.0)
|
|
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugShiftPropsRight
|
|
sCMHDZData.bDebugShiftPropsRight = FALSE
|
|
i = 0
|
|
REPEAT ciCMHDZ_MAX_COVER i
|
|
sCMHDZData.sCoverData[i].vSpritePos.x += (cfBASE_SCREEN_WIDTH / 2.0)
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugOutputAliveEnemies
|
|
sCMHDZData.bDebugOutputAliveEnemies = FALSE
|
|
|
|
CMHDZ_DEBUG_OUTPUT_ALL_ENEMY_POSITIONS()
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugAwardDeadeye
|
|
sCMHDZData.bDebugAwardDeadeye = FALSE
|
|
CMHDZ_AWARD_TRAINED_TO_KILL()
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugAwardSTV
|
|
sCMHDZData.bDebugAwardSTV = FALSE
|
|
CMHDZ_AWARD_STRAIGHT_TO_VIDEO()
|
|
ENDIF
|
|
|
|
// IF sCMHDZData.bDebugAwardFACES_OF_DEATH
|
|
// sCMHDZData.bDebugAwardFACES_OF_DEATH = FALSE
|
|
// ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_)
|
|
// ENDIF
|
|
//
|
|
// IF sCMHDZData.bDebugAwardSetFACES_OF_DEATH
|
|
// sCMHDZData.bDebugAwardSetFACES_OF_DEATH = FALSE
|
|
// //sCMHDZData.iTotalLevelBirdsShot[1] = sCMHDZData.iDebugFACES_OF_DEATH
|
|
// IF sCMHDZData.iDebugFACES_OF_DEATH >= CMHDZ_GET_FACES_OF_DEATH_AWARD_PLATINUM_TARGET_SCORE()
|
|
// CMHDZ_AWARD_FACES_OF_DEATH(sCMHDZData.iDebugFACES_OF_DEATH, TRUE)
|
|
// ELSE
|
|
// CMHDZ_AWARD_FACES_OF_DEATH(sCMHDZData.iDebugFACES_OF_DEATH, FALSE)
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
|
|
// IF sCMHDZData.bDebugAwardComplete
|
|
// sCMHDZData.bDebugAwardComplete = FALSE
|
|
// ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_CAMHEDZ_FOD)
|
|
// ENDIF
|
|
|
|
IF sCMHDZData.bDebugAwardTrophy
|
|
sCMHDZData.bDebugAwardTrophy = FALSE
|
|
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TROPHY_HELP(ARCADE_GAME_TROPHY_CAMHEDZ, TRUE)
|
|
SET_PACKED_STAT_BOOL(PACKED_MP_AWARD_BEARSY_MASK, TRUE)
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bClearAwardStats
|
|
SET_MP_INT_CHARACTER_STAT(MP_STAT_ARCADE_HELP_BITSET, 0)
|
|
SET_MP_INT_CHARACTER_STAT(MP_STAT_ARCADE_HELP_BITSETTWO, 0)
|
|
SET_MP_INT_CHARACTER_AWARD(MP_AWARD_FACES_OF_DEATH,0)
|
|
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_TRAINED_TO_KILL, FALSE)
|
|
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_STRAIGHT_TO_VIDEO, FALSE)
|
|
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_MONKEY_C_MONKEY_DO, FALSE)
|
|
SET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_DIRECTOR, FALSE)
|
|
SCRIPT_ASSERT("sCMHDZData.bClearAwardStats - Cleared all Awards")
|
|
sCMHDZData.bClearAwardStats = FALSE
|
|
ENDIF
|
|
IF sCMHDZData.bDebugLaunchDynamite
|
|
sCMHDZData.bDebugLaunchDynamite = FALSE
|
|
CMHDZ_INIT_THROWN_ENEMY_PROJECTILE(CMHDZ_PROJECTILE_DYNAMITE, INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH / 2.0, cfBASE_SCREEN_HEIGHT / 2.0))
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugClearDynamite
|
|
sCMHDZData.bDebugClearDynamite = FALSE
|
|
CMHDZ_RESET_ALL_ENEMY_THROWN_PROJECTLES()
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugSetPlayerProjectile
|
|
sCMHDZData.sPlayerData[0].projectileType = INT_TO_ENUM(CMHDZ_PROJECTILE_TYPES, sCMHDZData.iDebugPlayerProjectileType)
|
|
sCMHDZData.bDebugSetPlayerProjectile = FALSE
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugLaunchPlayerProjectile
|
|
sCMHDZData.bDebugLaunchPlayerProjectile = FALSE
|
|
CMHDZ_INIT_THROWN_PLAYER_PROJECTILE(0, sCMHDZData.sPlayerData[0].projectileType, sCMHDZData.sPlayerData[0].vSpriteFinalReticlePos)
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugClearPlayerProjectile
|
|
sCMHDZData.bDebugClearPlayerProjectile = FALSE
|
|
CMHDZ_RESET_ALL_PLAYER_THROWN_PROJECTILES(0)
|
|
ENDIF
|
|
|
|
IF sCMHDZData.bDebugEnableQuadDamage
|
|
CMHDZ_SET_PLAYER_BIT(CMHDZ_PLAYER_BIT_QUAD_DAMAGE)
|
|
CMHDZ_START_AUDIO_SCENE(CMHDZ_AUDIO_SCENE_POWERUP_ACTIVE)
|
|
sCMHDZData.sPlayerData[0].iQuadDamageTimer = GET_GAME_TIMER()
|
|
sCMHDZData.bDebugEnableQuadDamage = FALSE
|
|
ENDIF
|
|
|
|
VECTOR_2D vInitialPos
|
|
VECTOR_2D vOffset
|
|
IF sCMHDZData.bDebugEnablePickup
|
|
IF sCMHDZData.iDebugPickupScreen != -1
|
|
CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_HEALTH, sCMHDZData.iDebugPickupScreen, vInitialPos, vOffset)
|
|
CMHDZ_DRAW_GAME_SPRITE(CMHDZ_SPRITE_ITEM_HEALTH, vInitialPos, INIT_VECTOR_2D(cfCMHDZ_ITEM_HEALTH_WIDTH, cfCMHDZ_ITEM_HEALTH_HEIGHT), 0, sCMHDZData.rgbaSprite)
|
|
|
|
CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_RIFLE_AMMO, sCMHDZData.iDebugPickupScreen, vInitialPos, vOffset)
|
|
CMHDZ_DRAW_GAME_SPRITE(CMHDZ_SPRITE_ITEM_RIFLE_AMMO, vInitialPos, INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_PISTOL_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_PISTOL_AMMO_CLIP_HEIGHT), 0, sCMHDZData.rgbaSprite)
|
|
|
|
CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_SHOTGUN_AMMO, sCMHDZData.iDebugPickupScreen, vInitialPos, vOffset)
|
|
CMHDZ_DRAW_GAME_SPRITE(CMHDZ_SPRITE_ITEM_SHOTGUN_AMMO, vInitialPos, INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_SHOTGUN_AMMO_CLIP_WIDTH, cfCMHDZ_SPRITE_HUD_SHOTGUN_AMMO_CLIP_HEIGHT), 0, sCMHDZData.rgbaSprite)
|
|
|
|
CMHDZ_GET_ITEM_INITIAL_POS_AND_OFFSET_FOR_SCREEN(CMHDZ_ITEM_NAIL_GUN_AMMO, sCMHDZData.iDebugPickupScreen, vInitialPos, vOffset)
|
|
CMHDZ_DRAW_GAME_SPRITE(CMHDZ_SPRITE_ITEM_MACHINE_GUN_AMMO, vInitialPos, INIT_VECTOR_2D(cfCMHDZ_SPRITE_HUD_AMMO_WIDTH, cfCMHDZ_SPRITE_HUD_AMMO_HEIGHT), 0, sCMHDZData.rgbaSprite)
|
|
ENDIF
|
|
ELSE
|
|
IF sCMHDZData.iDebugPickupScreen != -1
|
|
sCMHDZData.iDebugPickupScreen = -1
|
|
ENDIF
|
|
ENDIF
|
|
// sCMHDZData.fDebugStickX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X)
|
|
// sCMHDZData.fDebugStickY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)
|
|
// sCMHDZData.fDebugMouseX = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_X)
|
|
// sCMHDZData.fDebugMouseY = GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_Y)
|
|
sCMHDZData.iStaggeredDebugCount++
|
|
IF sCMHDZData.iStaggeredDebugCount >= ENUM_TO_INT(CMHDZ_MAX_LEVELS)
|
|
sCMHDZData.iStaggeredDebugCount = 0
|
|
ENDIF
|
|
|
|
ARCADE_GAMES_POSTFX_WIDGET_UPDATE()
|
|
|
|
VECTOR_2D rs, rc
|
|
RGBA_COLOUR_STRUCT rcol
|
|
|
|
IF (sCMHDZData.bDrawDebugRect)
|
|
INIT_RGBA_STRUCT(rcol, 255, 255, 255, 64)
|
|
|
|
IF (sCMHDZData.bDebugRectCenterMode = FALSE)
|
|
rs.x = sCMHDZData.vDebugRect[1].x - sCMHDZData.vDebugRect[0].x
|
|
rs.y = sCMHDZData.vDebugRect[1].y - sCMHDZData.vDebugRect[0].y
|
|
rc.x = sCMHDZData.vDebugRect[0].x + (rs.x / 2.0)
|
|
rc.y = sCMHDZData.vDebugRect[0].y + (rs.y / 2.0)
|
|
ARCADE_DRAW_PIXELSPACE_RECT(rc, rs, rcol)
|
|
ELSE
|
|
ARCADE_DRAW_PIXELSPACE_RECT(sCMHDZData.vDebugRect[0], sCMHDZData.vDebugRect[1], rcol)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// IF (CMHDZ_MAX_REPLAY_ENTRIES != 1)
|
|
// CMHDZ_DEBUG_UPDATE_REPLAY_SYSTEM_WIDGET(sCMHDZData.sReplaySystem)
|
|
// ENDIF
|
|
|
|
ARCADE_GAMES_LEADERBOARD_WIDGET_UPDATE(sCMHDZData.sLbData, playerBd, cmhdzServerBd.sLeaderboard)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Dumps the current state of the game to the logs
|
|
/// Automatically called when a bug is entered
|
|
PROC CMHDZ_DEBUG_DUMP_DATA_TO_LOGS()
|
|
|
|
ARCADE_CABINET_DUMP_DATA_TO_CONSOLE()
|
|
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] {dsw} CMHDZ_DEBUG_DUMP_DATA_TO_LOGS - Dumping data...")
|
|
|
|
//General
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] ----- GENERAL -----")
|
|
//CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_ARCADE] [BAZ] eClientState = ", CMHDZ_ARCADE_CLIENT_STATE_TO_STRING(sCMHDZData.eClientState))
|
|
|
|
CMHDZ_DEBUG_OUTPUT_ALL_ENEMY_POSITIONS()
|
|
|
|
CMHDZ_DEBUG_OUTPUT_ALL_PICKUP_POSITIONS()
|
|
|
|
ENDPROC
|
|
|
|
PROC CMHDZ_DEBUG_PROCESSING()
|
|
|
|
CMHDZ_DEBUG_CREATE_WIDGETS()
|
|
|
|
//If a bug is entered dump all data to the console.
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_SPACE)
|
|
OR IS_KEYBOARD_KEY_PRESSED(KEY_RBRACKET)
|
|
CMHDZ_DEBUG_DUMP_DATA_TO_LOGS()
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|
|
/// PURPOSE:
|
|
/// Run every frame before the client state machine is processed
|
|
PROC CMHDZ_PRE_UPDATE()
|
|
|
|
IF sCMHDZData.eClientState >= CMHDZ_ARCADE_CLIENT_STATE_CLEANUP
|
|
// Cleaning up, don't do anything
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF NOT IS_SKYSWOOP_AT_GROUND()
|
|
OR SHOULD_KICK_PLAYER_FROM_ANY_ARCADE_GAME()
|
|
CMHDZ_SET_LOCAL_STATE(CMHDZ_ARCADE_CLIENT_STATE_CLEANUP)
|
|
EXIT
|
|
ENDIF
|
|
|
|
ARCADE_GAMES_HELP_TEXT_PRE_UPDATE()
|
|
|
|
ARCADE_GAMES_LEADERBOARD_PROCESS_EVENTS(sCMHDZData.sLbData, cmhdzServerBd.sLeaderboard, playerBd, cmhdzServerBd.bLeaderboardRecieved)
|
|
|
|
ARCADE_GAMES_LEADERBOARD_LOAD(sCMHDZData.sLbData, CASINO_ARCADE_GAME_Camhedz, cmhdzServerBd.bLeaderboardRecieved)
|
|
|
|
CMHDZ_UPDATE_ANIM_FRAMES()
|
|
|
|
CMHDZ_UPDATE_SOUND_GLITCH_LEVEL()
|
|
|
|
BOOL bIsPlaying = sCMHDZData.eClientState >= CMHDZ_ARCADE_CLIENT_STATE_INTRO
|
|
|
|
INT i
|
|
IF bIsPlaying
|
|
|
|
//-- Construct an array of all the onscreen cover locations which enemy peds can use to hide behind
|
|
//-- Peds can loop through this to see if there's any nearby cover.
|
|
//-- Avoids having every enemy loop through every cover location, every frame.
|
|
IF sCMHDZData.iStaggeredOnScreenViableCoverCount = 0
|
|
sCMHDZData.iNumberOfViableOnScreenCoverPoints = 0
|
|
|
|
REPEAT ciCMHDZ_MAX_COVER i
|
|
IF sCMHDZData.iNumberOfViableOnScreenCoverPoints < ciCMHDZ_MAX_SUITABLE_HIDE_BEHIND_COVER
|
|
IF CMHDZ_COVER_UTIL_IS_TYPE_SUITABLE_FOR_COVER(sCMHDZData.sCoverData[i].eType)
|
|
IF CMHDZ_IS_COVER_ON_SCREEN(i, cfLEFT_SCREEN_LIMIT)
|
|
// #IF IS_DEBUG_BUILD
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PRE_UPDATE] [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] [dsw] ")
|
|
// //CDEBUG2LN(DEBUG_MINIGAME, "[CMHDZ_PRE_UPDATE] [CMHDZ_IS_COVER_SUITABLE_FOR_ENEMY_TO_USE] [dsw] Adding cover ", i, " To viable cover locations. Type: ", CMHDZ_ASSET_TYPES_TO_STRING(sCMHDZData.sCoverData[i].eType), " Tot Viable: ", sCMHDZData.iNumberOfViableOnScreenCoverPoints + 1 )
|
|
// #ENDIF
|
|
sCMHDZData.iViableOnScreenEnemyCoverPoints[sCMHDZData.iNumberOfViableOnScreenCoverPoints] = i
|
|
sCMHDZData.iNumberOfViableOnScreenCoverPoints++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
ENDIF
|
|
ARCADE_CABINET_COMMON_EVERY_FRAME_PROCESSING(bIsPlaying)
|
|
|
|
CMHDZ_SET_CURRENT_TIMESTEP()
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Run every frame after the client state machine is processed
|
|
PROC CMHDZ_POST_UPDATE()
|
|
|
|
//Hide help text every frame unless this minigame wants to show some
|
|
//See x:\gta5\script\dev_ng\shared\include\public\invade_persuade_main.sch IAP_SHOULD_ALLOW_HELP_TEXT_THIS_FRAME()
|
|
|
|
IF NOT ARCADE_GAMES_HELP_TEXT_SHOULD_ALLOW_THIS_FRAME()
|
|
HIDE_HELP_TEXT_THIS_FRAME()
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Call every frame to run the minigame
|
|
PROC PROCESS_CMHDZ_ARCADE()
|
|
|
|
CMHDZ_PRE_UPDATE()
|
|
|
|
CMHDZ_PROCESS_CLIENT_STATE_MACHINE()
|
|
|
|
CMHDZ_POST_UPDATE()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CMHDZ_DEBUG_PROCESSING()
|
|
#ENDIF
|
|
ENDPROC
|