the cutting room mirror

Ace Combat Zero: The Belkan War (Windows)

This article has a talk page!
view on tcrf.net

This article is a work in progress.
...Well, all the articles here are, in a way. But this one moreso, and the article may contain incomplete information and editor's notes.

Yo buddy. Still alive?

Ace Combat Zero: The Belkan War is originally a PlayStation 2 game that received ports to modern platforms as a pre-order bonus for Ace Combat 8: Wings of Theve. As part of what fans call the "holy trinity" of Ace Combat titles, and in no small part thanks to its many memeable moments, the re-release of Zero was highly anticipated. The Steam release, however, received minor controversy over its status as "DLC", with no dedicated cloud saves or achievements, and the need to install the whole 140GB of Ace Combat 8 to play a 3.4GB game - A serious problem for portables with limited storage like the Steam Deck. This disparity with the console releases left PC gamers feeling like an afterthought.

This situation isn't the only thing that hints at an afterthought PC port: Besides having a crude launcher that is not high DPI-aware and only shows 4:3 and 16:9 resolutions, it turns out that the executable for the PC version of Ace Combat Zero shipped with a lot of interesting little tidbits left inside it that hint at how the sausage was made. The people who actually worked on it seemed to legitimately care about making the port work, as evidenced in the config files - With all these facts taken together, it may well be that they simply ran out of time.

Internal Strings#

A lot of strings and file paths/descriptors can be found in acz.exe, but notably, none of the text seems to be used in-game, and none of the paths are visible unless there's a whole filesystem within the .pac files. Formatting has been cleaned up for display here.

Check out the spelling mistake on "The Inferno". Also note how each aircraft's designator is exactly 4 characters long, even if it doesn't need to be. And what's up with the "memorycard" bits - Is this development text from the port, or the PS2 release?

2AACC0

2P
1P
FRND
TGT
../makepack/
data/../stream/pack/RADIOJP.PAC
data/../stream/pack/RADIOUSA.PAC
d02a
#cam_lens##
#dtl_x
#dtl_y
#dtl_z
DCBAS
%s   %4d
modelNum
model%03d
data/../stream/pack/BGM.PAC
main_callScrPostion
main_callBrightness
main_callContorl
main_callSound
main_endSubMenu
extratex/texture/btn.png
op
movie/work/movie/op.smv
s06
movie/work/movie/s06.smv
s01
movie/work/movie/s01.smv
s12
movie/work/movie/s12.smv
s10
movie/work/movie/s10.smv
s17
movie/work/movie/s17.smv
s14
movie/work/movie/s14.smv
v0la1
movie/work/movie/v0la1.smv
sr
movie/work/movie/sr.smv
v1ba1
movie/work/movie/v1ba1.smv
v1aa1
movie/work/movie/v1aa1.smv
v1dk2
movie/work/movie/v1dk2.smv
v1ca1
movie/work/movie/v1ca1.smv
v1dn2
movie/work/movie/v1dn2.smv
v1dm2
movie/work/movie/v1dm2.smv
v1fa3
movie/work/movie/v1fa3.smv
v1ea3
movie/work/movie/v1ea3.smv
v1lk4
movie/work/movie/v1lk4.smv
v1ga3
movie/work/movie/v1ga3.smv
v1ln4
movie/work/movie/v1ln4.smv
v1lm4
movie/work/movie/v1lm4.smv
v2ba1
movie/work/movie/v2ba1.smv
v2aa1
movie/work/movie/v2aa1.smv
v2da2
movie/work/movie/v2da2.smv
v2ca1
movie/work/movie/v2ca1.smv
v2fa3
movie/work/movie/v2fa3.smv
v2ea3
movie/work/movie/v2ea3.smv
v3hk1
movie/work/movie/v3hk1.smv
v2ga3
movie/work/movie/v2ga3.smv
v3hn1
movie/work/movie/v3hn1.smv
v3hm1
movie/work/movie/v3hm1.smv
v3ja2
movie/work/movie/v3ja2.smv
v3ia2
movie/work/movie/v3ia2.smv
v3la3
movie/work/movie/v3la3.smv
v3ka2
movie/work/movie/v3ka2.smv
b01
movie/work/briefing/b01.smv
v4la3
movie/work/movie/v4la3.smv
b03
movie/work/briefing/b03.smv
b02
movie/work/briefing/b02.smv
b05
movie/work/briefing/b05.smv
b04
movie/work/briefing/b04.smv
b07
movie/work/briefing/b07.smv
b06
movie/work/briefing/b06.smv
b09
movie/work/briefing/b09.smv
b08
movie/work/briefing/b08.smv
b11
movie/work/briefing/b11.smv
b10
movie/work/briefing/b10.smv
b13
movie/work/briefing/b13.smv
b12
movie/work/briefing/b12.smv
b15
movie/work/briefing/b15.smv
b14
movie/work/briefing/b14.smv
b17
movie/work/briefing/b17.smv
b16
movie/work/briefing/b16.smv
movie/work/briefing/e/b03.smv
movie/work/briefing/e/b04.smv
movie/work/briefing/e/b01.smv
movie/work/briefing/e/b02.smv
movie/work/briefing/e/b07.smv
movie/work/briefing/e/b08.smv
movie/work/briefing/e/b05.smv
movie/work/briefing/e/b06.smv
movie/work/briefing/e/b11.smv
movie/work/briefing/e/b12.smv
movie/work/briefing/e/b09.smv
movie/work/briefing/e/b10.smv
movie/work/briefing/e/b16.smv
op_us
movie/work/briefing/e/b13.smv
movie/work/briefing/e/b14.smv
movie/work/movie/op_eu.smv
sr_us
movie/work/movie/op_us.smv
op_eu
movie/work/movie/sr_eu.smv
movie/work/movie/sr_us.smv
sr_eu
movie/MOVIE.PAC
movie/BRIEF.PAC
map/set too long
vector too long
aczinit.txt
j39c
j35j
f15c
f04e
tnd4
typn
e18g
f18c
f15s
f15e
fa22
f17a
f16x
f16c
x29a
f20a
f05e
f35c
a10a
e06b
yf23
f14d
su32
su27
rm01
mr2d
m29a
m21b
su47
su37
x02a
f02a
f01a
m31b
mrgn
zoef
1
3
ms02_ANNEX
2
ms01_GLACIAL_SKIES
5
ms07_BASTION
4
ms03_THE_ROUND_TABLE
7
ms11_THEI_INFERNO
6
ms10_MAYHEM
9
ms13_LYING_IN_DECEIT
8
ms12_THE_STAGE_OF_APOCALYPSE
14
ms06_DELIVERANCE_BELL
13
ms16_THE_DEMON_OF_THE_ROUND_TABLE
25
ms09_BROKEN_SWORD
15
ms05_GUARDIAN
11
ms17_THE_GOLD_OF_ANNWN
26
ms15_RAGNAROK
10
28
20
Kill
16
27
19
Gun
18
SOLDIER_ACE
17
KNIGHT_ACE
23
SUPREME_KNIGHT
22
MERCENARY_ACE
12
SUPREME_MERCENARY
24
SUPREME_SOLDIER
29
SILVER_WING
21
BRONZE_WING
ps2
ZERO
30
GOLD_WING
ps2AtestAZ
ps2AtestCA
ps2AtestC
ps2AW
extra34
extra2
extra1
ps2Line
movie_yuv
extra7
extra6
extra5
DrawCPT
DrawACM
DrawSelMap
DrawModelIcon
EffDrawWeather
EffDrawWake
DrawTree
DrawMesh
DrawModelShadow
DrawModelGsh
EffDrawMissileSmoke
EffDrawWeatherRain
Map %04x
extratex/hudfont/
extratex/manual/
Extra2
TmpFbo
NoPal:
%s%03d.png
extratex/texture/
list too long
NoTex:
DrawMeshTemp
memorycard_NotExist
memorycard_Select
memorycard_LoadFailed
memorycard_NewSaveNoSpace
memorycard_Broken
memorycard_FormatFailed
memorycard_FormatSuccessful
memorycard_Format
memorycard_noCampaign
memorycard_Save
memorycard_NewSaveFailed
memorycard_NewSaveSuccessful
memorycard_NewSaveConfirm
memorycard_Cancel
memorycard_LoadSuccessful
memorycard_SaveFailed
memorycard_SaveSuccessful
preload
mplayer_PlayNext

2C8BC0 contains more strings with some compiler stuff. What's a "spider"?

test
this
_mc%p_
_global
_parent
_level0
_root
Array
__proto__
constructor
prototype
String
Object
Number
Boolean
SWG
Key
Math
Sound
getVolume
getPan
attachSound
stop
start
setVolume
setPan
duplicateMovieCli
pattachMovie
_currentframe
_alpha
globalToLocal
getBytesTotal
getBytesLoaded
_framesloaded
loadVariables
loadMovie
gotoAndStop
gotoAndPlay
onEnterFrame
nextFrame
_name
localToGlobal
onUnload
onKeyUp
onKeyDown
onLoad
_rotation
removeMovieClip
prevFrameplay
_visible
_totalframes
_target
swapDepths
_y
_xscale
_xmouse
_x
DOWN
UP
_yscale
_ymouse
BACKSPACE
SPACE
LEFT
RIGHT
removeListener
addListener
isDown
getCode
atan
asin
acos
abs
Ecos
ceil
atan2
LOG2
Elog
floor
exp
max
LN10
LN2
LOG10E
random
pow
PI
min
SQRT1_2
sqrt
sin
round
movieclip
function
tan
SQRT2
ASContext::Float::operator/=: WARN: %e division by zero
string
array
false
true
ASContext::Integer::operator/=: WARN: %d division by zero.
number
stackpos
null
undefined
boolean
ASContext::NewInternal: WARN: constructed from name='%s' type=%s.
object
propertyhandler
_url
_droptarget
_height
_width
x
_soundbuftime
_focusrect
_highquality
ASContext::PropertyHandler::PropertyHook::CheckArgNum: WARN: %s(%d): mismatch argument num %d.
ASContext::PropertyHandler::PropertyHook::CheckArgNum: WARN: %s(%d): too few argument num %d.
soundy
lwalloc: ERROR: malloc(0)
lwalloc: ERROR: free out of range (%p < %p < %p)
lwalloc: ERROR: free invalid pool ID (%d != %d)
lwalloc: ERROR: free not aligned (%p)
lwalloc: ERROR: malloc requested size %lld too large
lwalloc: ERROR: header(%p) is out of pool
invalid string position
NUD_TONE_BANK
getBuffer
setBuffer
setTypeTxtEx
setTypeTxt
setControlPlayer
getPageCount
debugPrint
focus_setFocusDefaultToRule
focus_getButtonIDByName
focus_setFocusDefault
focus_getFocusID
startGame
sound_onVoice2D
getSaveDataMissionNum
readSaveFile
startFree
startContinue
getMissionRank
load
save
getSaveDataPlayTime
menu_endMode
getMissionTime
getMissionScore
main_startNewGame
cm_getASG
cm_isASG
menu_getMissionNum
main_startAceStyle
main_startVS
main_startFreeMission
main_startContinue
main_isContinue
main_startLoad
main_startSave
main_startTitle
main_isTitle
main_isLevel
main_isSP
main_isFreeMission
select_isQuickMode
select_isDisplayModeAvailable
select_setMode
main_getPadState
select_getNowSelect
select_getMaxSelect
select_isBack
select_isBuddy
select_isWeapon
select_isAircraft
select_getState
select_getSelectID
select_isColor
select_getColorMax
select_setColor
select_isProperty
select_setDisplay
select_prev
select_next
select_getColorSelected
select_cancel
select_ok
select_setNormal
select_setQuick
select_spiderOn
select_animeOff
select_animeOn
select_getZoom
select_setSpiderState
select_setSpider
select_spiderOff
select_getSelectedWeapon
select_getSelectedAircraft
select_resetSpider
select_isVS
select_getMissionNum
select_getLevel
select_setNowSelect
briefing_isOpen
briefing_open
briefing_getMission
briefing_endMode
briefing_unselect
briefing_select
briefing_isClose
briefing_close
briefing_isLastView
briefing_goBackView
briefing_goNextView
briefing_goFirstView
briefing_getEnemy
briefing_getASG
briefing_isSelected
briefing_isCameraMoving
briefing_setCoordinateYPosition
briefing_setCoordinateXPosition
briefing_showCoordinate
briefing_getCoordinates
briefing_setMapPosition
briefing_showMap
briefing_setCoordinateColor
memorycard_isSaveMode
briefing_setTextColor
briefing_setMapCursorColor
briefing_setMapSize
memorycard_cancelMode
memorycard_beginLoad
memorycard_beginSave
memorycard_begin
memorycard_getMissionNum
memorycard_isFile
memorycard_input
memorycard_endMode
memorycard_getSecond
memorycard_getMinuts
memorycard_getHour
memorycard_getLevel
record_maxRival
memorycard_wake
memorycard_getDefaultNumber
memorycard_getClear
record_profileName
record_checkedRival
record_selectRival
record_isKill
record_profileStr
record_profileKillCount
record_profileUnit
record_profileAircraft
option_getRightAnalog
option_getLeftAnalog
option_getButton
option_getControl
option_getHUD
option_getCommand
option_getQuickSelect
option_getVibration
option_getBrightness
option_getScreenY
option_getScreenX
option_getUnit
option_getVoice
option_getBGM
option_getSound
option_getAspect
option_setControl
option_getLanguage
option_getSystemSE
option_getSE
option_setVibration
option_setRightAnalog
option_setLeftAnalog
option_setButton
option_setUnit
option_setHUD
option_setCommand
option_setQuickSelect
option_setAspect
option_setBrightness
option_setScreenY
option_setScreenX
option_setSE
option_setVoice
option_setBGM
option_setSound
option_defButton
option_defControl
option_setLanguage
option_setSystemSE
option_defQuickSelect
option_defibration
option_defRightAnalog
option_defLeftAnalog
option_defScreenX
option_defUnit
option_defHUD
option_defCommand
option_defSound
option_defAspect
option_defBrightness
option_defScreenY
option_defSystemSE
option_defSE
option_defVoice
option_defBGM
option_isCalibration
option_callCalibration
option_getPlace
option_defLanguage
option_CalibrationGetStickY
option_CalibrationGetStickX
option_CalibrationSetFoce
option_CalibrationNext
acestyle_returnMode
acestyle_endMode
option_CalibrationGetTwist
option_CalibrationGetThrottle
acestyle_getSqPilot
acestyle_getSqData
acestyle_getClearCount
acestyle_startNext
acestyle_getMedal
acestyle_getMissionNum
acestyle_isSqPJ
acestyle_getSqASG
vs_endMode
acestyle_getAcKill
acestyle_getAcSorties
acestyle_getAcRate
vs_startGame
vs_startSetting
vs_startStageSelect
vs_returnMode
vs_setOption
vs_getOption
vs_startContorol
vs_startAircraft
shop_initBuyAirplane
shop_initSelect
vs_getPlayerState
vs_selectStage
shop_initBuyExWeapon
shop_initSellExAirplane
shop_initBuyExAirplane
shop_initSellAirplane
shop_buyExWeapon
shop_sellAirplane
shop_buyAirplane
shop_initSellExWeapon
shop_getBuyMoney
shop_getSellMoney
shop_getMoney
shop_sellExWeapon
free_getClear
free_getLevel
free_returnMode
shop_cancel
free_startGame
free_getTime
free_getScore
free_getRank
sviewer_isUnlock
sviewer_Start
mplayer_stop
mplayer_play
unlock_isMusicPlayer
unlock_isSceneViewer
unlock_isFreeMission
unlock_isSpNewGame
unlock_getAircraft
unlock_getAircraftNum
unlock_isRivalRush
unlock_getNewLevel
unlock_getSpColorNum
unlock_getAsgColor
unlock_getAircraftSpecialFalken
unlock_getAircraftSpecialX02A
unlock_getMedalAll
unlock_getMedal
unlock_getMedalNum
unlock_getSpColor
unlock_getSpecialRivalDestroyAll
unlock_getRivalDestroyAll
unlock_getRivalDestroy
unlock_getRivalDestroyNum
ending_setASGLine
ending_endMode
unlock_return
unlock_getAllAceS
ending_getTime
ending_getScore
ending_playASGLine
ending_getRoute
ending_getASG
ending_getAircraft
ending_getRank
zoption_setLanguage
zoption_getSubLanguage
zoption_setSubLanguage
zfocus_getFocusNo
zoption_getLR12Button
zoption_setLR12Button
zmain_callLanguage
zoption_getLanguage
zz_setMoveXYD
zz_setMoveXY

This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: I'm not confident in my ability to parse everything here. The hex structure around these makes me feel like there's debug stuff in here? Or is it just a list of internal functions and their parameters/pointers?

31EED0 has function names & exception handlers. Who could forget the legendary Excalibar?

AVlength_error@std
AVbad_exception@std
AVUnitExcalibar
AVObjBoss
AVUnit
AVObjExcalibarTurret
AVUnitLeopord
AVFunction@?$ASContext@V?$lwallocator@E$0Astx@swg
AV?$ASContext@V?$lwallocator@E$0Astx@swg
AVVariable@?$ASContext@V?$lwallocator@E$0Astx@swg
AVArray@?$ASContext@V?$lwallocator@E$0Astx@swg
AVVariableBase@swg
AVASContextBase@swg
AVSObject@?$ASContext@V?$lwallocator@E$0Astx@swg
AVMovieClip@?$ASContext@V?$lwallocator@E$0Astx@swg
AVStackPosValue@?$ASContext@V?$lwallocator@E$0Astx@swg
AVPropertyHandler@?$ASContext@V?$lwallocator@E$0Astx@swg
AVSoundObject@?$ASContext@V?$lwallocator@E$0Astx@swg
AVMovieController@swg
AVbad_array_new_length@std
AVbad_alloc@std
AVexception@std
AVsystem_error@std
AV_System_error@std
AVruntime_error@std
AVfilesystem_error@filesystem@std
AVlogic_error@std
AVout_of_range@std
AV__non_rtti_object@std
AVbad_typeid@std
AVbad_cast@std
AVtype_info
AVerror_category@std
AV_Generic_error_category@std
AVGameFont
AVBriefingCaption
AVCaption
AVChapter
AV?$CaptionServer@VBriefingCaption
AVCaptionService
AVBriefingChapter
AVChapterCtrl
AVBriefingChapterCtrl
AVChapterService
AV?$ChapterServer@VBriefingChapter
AVDdCaption
AV?$CaptionServer@VDdCaption
AVDdChapter
AVDdChapterCtrl
AV?$ChapterServer@VDdChapter
AVDebriefBackBoard
AVDebriefCaption
AV?$CaptionServer@VDebriefCaption
AVDebriefChapter
AV?$ChapterServer@VDebriefChapter
AVDebriefChapterCtrl
AVDebriefBackBoardVS
AVDebriefScoreBoardVS
AVDebriefScoreBoard
AVDebriefLocaleItarian
AVDebriefLocaleSpanish
AVDebriefLocale
AVDebriefLocaleFrench
AVDebriefLocaleEnglish
AVDebriefLocaleGerman
AVDebriefTargetBoard
AVDebriefTargetBoard1P
AVDebriefTargetBoardVS
AVDebriefTargetBoard2P
AV?$EffRingBuffer@UEFF_MIS_POSDIR$0IAA@
AV?$EffRingBuffer@UEFF_VAPOR_PARAM$0IAA@
AV?$EffRingBuffer@UEFF_BIRD_PARAM$0EA@
AV?$EffRingBuffer@UEFF_VAPOR_PARAM$0DAA@
AVAsyncFile@Io
AVCnuAsyncFile@Io
AVexception@stdext
AVbad_alloc@stdext
AVbad_array_new_length@stdext
AVCMemorycardCallback
AVCMemorycard
AVWeaponExLaserCtrlBase
AVWeaponExcalibarLaserCtrl
AVWeaponExCtrlBase
AVWeaponRef
AVWeaponExLeopordLaserCtrl
AVParamPlaneDataYaw
AVPlane
AVObjModel
AVObjPlane
AVFriendModel
AVParamPlaneBs
AVParamPlaneDataPitch
AVObjAnimCtrl
AVParamPlaneDataSpeed
AVLodModel
AVParamPlaneDataRoll
AVObjEffect
AVObjEffectParam
AVObjSt
AVPlModel
AVCodeData
AVAnimCtrl
AVRefPst
AVDataTbl
AVPlAnimCtrl
AVC2DBase@NMissionControl
AVCMissionControlDump
AVCIndicatorBase@NIndicator@NMissionControl
AVCIndicatorFriendInfo@NIndicator@NMissionControl
AVCIndicatorHud@NIndicator@NMissionControl
AVCIndicatorHudAltitude@NIndicator@NMissionControl
AVCIndicatorHudContainer@NIndicator@NMissionControl
AVCIndicatorHudCourse@NIndicator@NMissionControl
AVCIndicatorHudPitch@NIndicator@NMissionControl
AVCIndicatorHudSpeed@NIndicator@NMissionControl
AVCIndicatorHudThrottle@NIndicator@NMissionControl
AVCIndicatorHudVelocity@NIndicator@NMissionControl
AVCIndicatorHudWeaponRange@NIndicator@NMissionControl
AVCIndicatorHudWhiskey@NIndicator@NMissionControl
AVCIndicatorLockonInfo@NIndicator@NMissionControl
AVCIndicatorPlaneInfo@NIndicator@NMissionControl
AVCIndicatorRadarArrow@NIndicator@NMissionControl
AVCIndicatorRadarBase@NIndicator@NMissionControl
AVCIndicatorRadarControlBase@NIndicator@NMissionControl
AVCIndicatorRadarControlPlaneCenter@NIndicator@NMissionControl
AVCIndicatorRadarControlWorldCenterPause@NIndicator@NMissionControl
AVCIndicatorRadarControlWorldCenter@NIndicator@NMissionControl
AVCIndicatorRadarDotLine@NIndicator@NMissionControl
AVCIndicatorRadarFlipPlaneCenter@NIndicator@NMissionControl
AVCIndicatorRadarFlipWorldCenter@NIndicator@NMissionControl
AVCIndicatorRadarJamming@NIndicator@NMissionControl
AVCIndicatorRadarLaser@NIndicator@NMissionControl
AVCIndicatorRadarMissile@NIndicator@NMissionControl
AVCIndicatorScore@NIndicator@NMissionControl
AVCIndicatorTime@NIndicator@NMissionControl
AVCMenuBase@NMenu@NMissionControl
AVCMenuRetry@NMenu@NMissionControl
AVCMenuOver@NMenu@NMissionControl
AVCMenuPause@NMenu@NMissionControl
AVCSelectItem@NMenu@NMissionControl
AVCMenuSupply@NMenu@NMissionControl
AVCUnicodeFont@NMissionControl
AVWeaponModel
AVObjHeli
AVObjLeopordMuzzle
AVEnemySoundJetPlane
AVEnemySoundJetBase
AVObjExcalibar
AVObjLeopordTurret
AVEnemySoundJetOhter
AVObjLeopord
AVObjGround
AVObjShiningSky
AVObjLeopordBarrel
AVObjNuclear
AVObjExcalibarLowerGuard
AVObjLeopordBody
AVSoundJet
AVObjExcalibarBreakPoint
AVObjExcalibarMuzzle
AVObjExcalibarRoot
AV?$ObjExcalibarSpark@V?$ExcalibarEffParts@$00$0?0
AV?$ObjExcalibarSpark@V?$ExcalibarEffParts@$0A@$01
AV?$ObjExcalibarSteam@V?$ExcalibarEffParts@$0A@$0?0
AV?$ObjExcalibarSteam@V?$ExcalibarEffParts@$00$01
AVObj
AVUnitExcalibar08
AV?$UnitBoss@VObjLeopord
AV?$UnitBoss@VObjExcalibar
AVWeaponExLasmCtrl
AVWeaponExMpbmCtrl
AVWeaponExBuckshotMisUpCtrl
AVWeaponExXagmCtrl
AVWeaponExRcamCtrl
AVWeaponExUgbCtrl
AVWeaponExGunpodCtrl
AVWeaponExGpbCtrl
AVWeaponExUgblCtrl
AVWeaponExSffsCtrl
AVWeaponExNtrlCtrl
AVWeaponExXlaaCtrl
AVWeaponExSaamCtrl
AVWeaponExPlayerLaserThinCtrl
AVWeaponExEcmpCtrl
AVWeaponExBdspCtrl
AVWeaponExSodCtrl
AVWeaponExBombCtrl
AVWeaponExRclCtrl
AVWeaponExLagmCtrl
AVWeaponExPlayerLaserCtrl
AVWeaponExBuckshotMisDownCtrl
AVWeaponExNpbCtrl
AVWeaponMorganLaserCtrl
AVWeaponExFaebCtrl
AVWeaponExXmaaCtrl
AVWeaponExQaamCtrl
AVWeaponExLinearGunCtrl
AVWeaponExFireCtrl
AVCnuFile@Io
AVFile@Io
AVAcmModel
AVBaseViewer
AVPS2Model
AVModeBase
AVInitMode
AVCModeAceStyle
AVCDebugCtrl
AVCSwgListener
AVCModeAircraftData
AVCSelectAircraftData
AVCSelectAircraft
AVCSelectModel
AVCSelectAircraftIF
AVCDebugModeAircraftSelect
AVCModeAircraftSelect
AVCSelectAircraftVS
AVCDebugModeAircraftSelectVS
AVCModeAircraftSelectVS
AVCModeAssaultRecord
AVAssaultRecordModel
AVCModeBriefing
AVModeMoviePlay
AVModeBriefingMovie
AVCModeCampaignResult
AVCModeCampaignSelect
AVModeCampaignSelectEnd
AVCModeCM
AVModeDebrief
AVModeDebriefBase
AVModeDebriefVS
AVCModeFreeMissionMenu
AVModeGameControl
AVModeGameControlVS
AVModeGameEnd
AVModeGameSeq
AVMainSelectSubMenu
AVCModeMainSelect
AVCMainSelectDebug
AVCModeMedal
AVModeMemoryCard
AVModeMissionTitle
AVModeMovieViewer
AVCModeMusicPlayer
AVCModePilotData
AVCModeSceneViewer
AVModeUnlockEnd
AVModeGameSeqReturnReload
AVCModeSelector
AVCModeAircraftDataCampaign
AVCModeMedalCampaign
AVCModeVSControler
AVCModeVSControler1
AVCModeVSRootReturnSelect
AVModeMemoryCardLoad
AVCModeVSRoot
AVCModeWakeMemorycard
AVCModeAircraftSelectVS1
AVModeUnlock
AVCModeVSRootReturn
AVCModePilotDataCampaign
AVModeGameSeqReturn
AVCModeAceStyleRootCampaign
AVModeMemoryCardLoadCampaign
AVCModeAceStyleCampaign
AVCModePadManual
AVCModeAssaultRecordCampaign
AVModeMemoryCardSaveCampaign
AVCModeAircraftSelectVS2
AVModeMemoryCardSaveAfter
AVModeGameSeqReturnGame
AVCModeAceStyleRoot
AVCModeMusicPlayerCampaign
AVCModeSceneViewerCampaign
AVModeGameSeqReturnSelect
AVCModeVSRootReturnGame
AVCModeVSControler2
AVModeMemoryCardSave
AVModeShop
AVCModeTitle
AVCModeVSMenu
AVCModeWakeLogo
AVMovieCaption
AVMovieChapter
AV?$CaptionServer@VMovieCaption
AV?$ChapterServer@VMovieChapter
AVMovieChapterCtrl
AVMovieStream@Io
AVMovieLoader
AVPackedMovieLoader
AVCPropertyBase
AVCPropertyCampaignRecord
AVCPropertyCampaign
AVCProperty
AVCPropertySystem
AVCPropertySeq
AVCPropertyAircraft
AVCPropertyUnlock
AVCPropertyMission
AVCPropertyRecord
AVCPropertyRival
AVLiveChecker
AVAccomLiveChecker
AVFriendLiveChecker
AVPlayerLiveChecker
AVRadioGameFont
AVRadioNameFont
AVRadioQueData
AVRadioQueDataCapture
AVCSelectArm
AVCSelectArmAircraft
AVCSelectArmAircraftV
AVCSelectArmExWeapon
AVCSelectAircraftParam
AVCSelectASGLine
AVCSelectAssaultRecord
AVNumber2Aircraft@CSelectAssaultRecordBuffer
AVCSelectAssaultRecordBuffer
AVCSelectBGM
AVCSelectCalibration
AVCSelectGameSeqData
AVmodeNewSave@CSelectMemorycard
AVmodeCampaign@CSelectMemorycard
AVmodeSelect@CSelectMemorycard
AVMode@CSelectMemorycard
AVmodeNotExist@CSelectMemorycard
AVmodeBroken@CSelectMemorycard
AVmodeCancel@CSelectMemorycard
AVmodeLoad@CSelectMemorycard
AVmodeSave@CSelectMemorycard
AVCSelectMemorycardDebug
AVmodeFormat@CSelectMemorycard
AVmodeWake@CSelectMemorycard
AVCSelectMemorycard
AVCShopArmAircraftSell
AVCSelectShop
AVCShopArmExWeaponSell
AVCShopArmExWeapon
AVCShopArmAircraftBuy
AVCShopArmAircraft
AVCShopArm
AVCShopArmAircraftBuyEx
AVCShopArmAircraftSellEx
AVCShopArmExWeaponBuy
AVCSelectSpider
AVController@swg
AVUndefined@?$ASContext@V?$lwallocator@E$0Astx@swg
AV?$MovieMemory@V?$lwallocator@E$0Astx@swg
AVInteger@?$ASContext@V?$lwallocator@E$0Astx@swg
AVString@?$ASContext@V?$lwallocator@E$0Astx@swg
AVNull@?$ASContext@V?$lwallocator@E$0Astx@swg
AVSWGHandler@?$CSwgACContext@V?$lwallocator@E$0Astx
AVKeyHandler@?$ASContext@V?$lwallocator@E$0Astx@swg
AVBoolean@?$ASContext@V?$lwallocator@E$0Astx@swg
AVMovieMemoryBase@swg
AV?$Memory@V?$lwallocator@E$0Astx@swg
AVSoundObjectHandler@?$ASContext@V?$lwallocator@E$0Astx@swg
AVMemoryBase@swg
AVButtonController@swg
AVMathHandler@?$ASContext@V?$lwallocator@E$0Astx@swg
AVFloat@?$ASContext@V?$lwallocator@E$0Astx@swg
AVCSwgAC55
AVMovieClipHandler@?$ASContext@V?$lwallocator@E$0Astx@swg
AV?$CSwgACContext@V?$lwallocator@E$0Astx
AVRenderer@swg
AVCSwgAC55Renderer
AVCallback@swg
AV?$CSwgACFactory@VCallback@swg
AV?$CSwgACCallbackFactory@VCSwgACCallback
AVCSwgACCallback
AVCSwgEvent
AVCSwgGameFont
AVCSwgMsg
AVCSwgMsgFont
AVCSwgMsgHash
AVCSwgObj
AVCSwgSound
AVCSwgSwa
AV?$CaptionServer@VCaption
AV?$ChapterServer@VChapter
AVModeHolder
AVCDplQue
AVListedDataLoader
AVDataFile@Io
AVDataLoader
AVDataStream@Io
AVCNowLoading
AVPackedDataLoader

Metadata#

At hex 2E5BC8 there's some info about the compile environment - This is definitely for the port. Sadly, the .pdb file isn't among the game's files...

C:\project\f\f0026\src\output\Gaming.Desktop.x64_Release\acz.pdb

More port build environment strings at 351600:

_xbld_edition_build=GRDK,0x65F41EA9
_xbld_edition_sdktype=GRDK,260402
_xbld_edition_full_productbuild=GRDK,10.0.26100.7849
_xbld_edition_mscver=GRDK,194435228.0
_xbld_edition_name=GRDK,April 2026 GRDK Update 2

At 393970 there's all the normal Windows properties ("! translates to ™):

p4.VS_VERSION_INFO
StringFileInfo
040004b0.h FileDescription
ACE COMBAT"!ZERO: THE BELKAN WAR
FileVersion 1.0.2.1.f
LegalCopyright ©BANDAI NAMCO Entertainment Inc.
ProductName
ACE COMBAT"!ZERO: THE BELKAN WAR
ProductVersion 1.0.2.1.D
VarFileInfo
Translation
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' />
    </dependentAssembly>
  </dependency>
</assembly>

Config files#

While not exactly hidden, there isn't any way to access or modify everything in these files via the launcher or under normal gameplay. They can be found in the "settings" folder inside the ACZero directory (itself inside the Ace Combat 8 install path).

setting.ini

Contains settings that modify how the game runs. Some of this is available to change within the launcher.

Resolution - 3D render resolution; 2D assets unaffected. Limited to 4:3 and 16:9 aspect ratios. Default 1280x720
Options: 3840x2160, 3200x1800, 2560x1440, 2048x1152, 1920x1080, 1600x900, 1280x720, 2880x2160, 2400x1800, 1920x1440, 1536x1152, 1440x1080, 1200x900, 960x720
ScreenMode - Sets whether the game runs in a window or full-screen. Default Borderless
Options: Windowed, Borderless
SystemLanguage - Default unpopulated / automatic
Options: JP, US, UK, DE, FR, IT, ES
SkipLauncher - Determines whether the game starts without the launcher. Useful once you've already set everything up. Default False
Options: True, False
Player1 - The input device ID for player 1. Not useful to change manually.
Player2 - The input device ID for player 2. Not useful to change manually. If unset, default ffffffffffffffff
Msaa - Anti-aliasing level. Labeled as "experimental", use at own risk. Default x1
Options: x1, x2, x4, x8, x16

dinput.ini

Contains controller bindings using DirectInput. This is explicitly meant to be used for joysticks, including HOTAS, but keyboard controls are also listed here. These bindings are NOT accessible within the launcher, and in order to make use of them, you need to disable Steam Input to make the game fall back to DInput.

Within the file are several pre-populated binds and ranges for common Thrustmaster and HORI flight sticks. A companion file, dinputSample.ini, is identical and useful as a backup should something go wrong. The file is commented with instructions, but it's up to the user to figure out what buttons do what on their controller, what the stick range should be (dead zones), and how to set up force feedback/rumble. Yes, the file claims the game supports force feedback, including stick-centering force. This is quite uncommon.

VID refers to the vendor ID for the joystick, and PID refers to the product ID - These are provided by the stick as identifiers for USB and can be found by looking at the joystick's details tab in Device Manager on Windows, or via lsusb on Linux. This way, different sticks can be defined instead of needing to redefine bindings every time.

dinput.ini developer-provided instructions:

;encoding: UTF-8

;To use DirectInput, you need to disable Steam Input 

;-----------------------------------------------------
;{pov}: P0L P0R P0U P0D to P3L P3R P3U P3D
;  POV directions
;  DIJOYSTATE::rgdwPOV[n]
;
;{button}: B1 to B32
;  32 buttons
;  DIJOYSTATE::rgbButtons[n-1]
;
;{buttons}: {pov} | {button}
;
;{axis}: X | Y | Z | Rx | Ry | Rz | S0 | S1
;  X, Y, Z    DIJOYSTATE::lX,lY,lZ
;  Rx, Ry, Rz DIJOYSTATE::lRx,lRy,lRz
;  S0, S1     DIJOYSTATE::rglSlider[n]
;
;
;{Digital}: [[!]{buttons}+] {buttons} [:{analogValue}]
;  ex: A    =  B4                       ; Press B4
;  ex: HatL =  P0L                      ; PovLeft
;  ex: B    =  B2 + B4                  ; Combination Press B2 and B4
;  ex: X    = !B2 + B4                  ; NotPress B2 and Press B4
;
;  {analogValue}: 1 - 65535
;    ex: RX+ = B3                       ; Rx+ in 1.0
;    ex: RX+ = B3:65535                 ; Rx+ in 1.0
;    ex: RX- = B5:32767                 ; Rx- in 0.49999 ( 32767/65535)
;    ex: RX- = B5:10                    ; Rx- in 0.00015259 ( 10/65535)
;
;
;{Analog}: [[!]{buttons}+] {axis} : {min} : {max}
;
;  {min}: 0 - 65535
;    Minimum input value
;  {max}: 0 - 65535
;    Maximum input value
;
;  ex: RX- = Y  : 34000 : 65000         ; 0-32767-34000(0.0 Deadzone), 34000-65000(0.0-1.0), 65000-65535(1.0 Threshold)
;  ex: LT  = Rz : 40000 : 32767         ; 65535-40000(0.0), 40000-32767(0.0-1.0), 32767-0(1.0)
;  ex: RB  = S1 : 0     : 33000         ; 0-0(0.0), 0-33000(0.0-1.0), 33000-65535(1.0)
;  ex: A   = Rx : 100   : 65535         ; Analog to Digital 0-65534(0.0-0.99997=off), 65535(1.0=on)
;  ex: B   = Ry : 50000 : 10000         ; Analog to Digital 65535-10001(0.0-0.99998=off), 10000-0(1.0=on)
;
;{Ffb}:
;  Sine  : {offset of DIJOYSTATE 0-28}  : {magnitude 1 - 10000} : {period Milliseconds 1-5000}
;  Const : {offset of DIJOYSTATE 0-28}  : {magnitude 1 - 10000}
;  Spring: {offset of DIJOYSTATE 0-28}  : {Saturation 1 - 10000} : {Coefficient -10000 - 10000} : {Offset -10000 - 10000} : {DeadBand 0 - 10000}
;    ex: Sine   : 0 : 10000 : 100       ; SineWave,        lX, MaxPowr100%, 100ms=10Hz      Oscillation
;    ex: Const  : 4 : 5000              ; ConstantForce,   lY, HalfPowr50%                  Rumble
;    ex: Spring : 0 : 3000 : 2000 :0:0  ; Centering force, lX, Sat30%, Cf20%, Ofs0, DB0     Centering
;-----------------------------------------------------



;-----------------------------------------------------
;[(VID:X4)(PID:X4)]                     ; Device Section Start
;Name = Display Name                    ; (optional)
;
;LX-  = {Analog} | {Digital}            ; left
;LX+  =                                 ; right
;LY-  =                                 ; up
;LY+  =                                 ; down
;RX-  =
;RX+  =
;RY-  =
;RY+  =
;
;LT   = {Analog} | {Digital}            ; Analog possible
;RT   =
;
;LB   = {Analog} | {Digital}            ; Analog possible
;RB   =
;
;A    = {Analog} | {Digital}            ; Digital Buttons
;B    =
;X    =
;Y    =
;LSC  =                                 ; StickClick L3
;RSC  =                                 ; StickClick R3
;Menu =
;View =
;HatL =                                 ; D-pad
;HatR =                                 ; D-pad
;HatU =                                 ; D-pad
;HatD =                                 ; D-pad
;
;FFB  = {Ffb}                           ; Force Feedback Setting
;SpecialMode = TM                       ; Vibration support for Thrustmaster devices
;-----------------------------------------------------