PC Options is the port's own settings menu. It lives inside the game. It
changes the same settings as gow2.toml and the command line.
On Android, the menu and its entry on the game's Options screen are called "Device Options" ("Opciones del dispositivo" in Spanish). Windows keeps "PC Options" ("Opciones de PC" in Spanish). Everything else is the same menu.
Verified in game on a PC on 2026-10-16, including Back + Start, which opened
the menu, and the B that closed it, which did not reach the game. With the
menu's 0.2.0 build a phone found a PC host's System Link campaign and joined
its lobby (both logs: XGISessionJoinRemote ... members=2). Verified on a Galaxy S25 Ultra
on 2026-10-16: the gear and the game's Options > Device Options open
the menu (log PCOPTIONS open (gear) / (game-menu)); tabs and
arrows work by touch; Save wrote gow2_touch_opacity into
files/gow2.toml keeping its comment; the menu follows the phone's
language (persist.sys.locale).
- The game's Options screen (main menu, RB) lists "PC Options" on Windows or "Device Options" on Android where "Storage Location" was. Selecting it opens the menu.
- F10 opens and closes it from anywhere.
- Back + Start, held together on a controller, opens and closes it.
- On Android, the gear in the top-right corner opens and closes it.
Turn the Options entry off with gow2_pc_options_entry = false. It takes
effect on the next start.
On Windows the menu also opens before the game loads, on the Display tab,
with Play in place of Close (Esc, Back or B also play). Play saves the
changed rows; when one of them needs a restart, the game restarts once with
them and goes straight in. Rows that need the running game are hidden there:
All runtime settings, Co-op check code, and Multiplayer > Host over the
internet with its whole page (status, open, close and the host settings).
Key bindings, Controller buttons and the save folder rows still work: they
only change settings the game reads when it starts. Turn it off in System > Show
options at start (gow2_launcher = false); a restart from the menu never
stops at it.
Controller:
- D-pad or left stick: move between rows and change values.
- A: change. B or Esc: back. X: default. Y: save.
- LB / RB: switch tabs.
Keyboard:
- Arrows: move between rows and change values.
- Enter or Space: change. Esc or Backspace: back. Del: default.
- Q / E or PgUp / PgDn: switch tabs. Ctrl+S: save.
Mouse and touch:
- Click or tap tabs, rows, and the arrows beside a value.
- Four buttons at the bottom: Save, Default, Back (Close when clean), and Quit game. Quit game sits in the footer of every page and quits the same way as System > Quit the game. F10 or Back + Start opens the menu.
Text rows open an editor. Controllers get an on-screen keyboard there.
Only the rows you changed are written into gow2.toml next to gow2.exe.
On Android the file is
Android/data/com.santiquiroz.gow2recomp/files/gow2.toml. Every comment in
the file is kept. Windows paths are written as literal strings.
A build from source copies config/gow2.toml over the build folder's file.
The release zip is not affected: your saved settings stay.
Leaving with unsaved changes asks Save / Discard / Cancel. Discard restores the values the menu opened with.
Changes apply at once where the setting allows it. Rows that need a restart say so under the label. A banner lists the changed rows that still need a restart, with a "Restart now" button on Windows.
The menu language follows the system (English or Spanish), or
gow2_menu_language. Advanced rows appear with "Show advanced options" on.
Defaults keep the original game and crossplay working.
| Row | Key(s) | Values | Applies | Platforms |
|---|---|---|---|---|
| Window mode | fullscreen + fullscreen_exclusive |
windowed, borderless, exclusive | now | Windows |
| Display | monitor |
detected monitors | now | Windows |
| Window size | window_width + window_height |
game resolution, 1280x720 ... 3840x2160 | now | Windows |
| Graphics card | gow2_gpu |
automatic, detected GPUs | restart | Windows |
| VSync | vsync |
on, off | now | both |
| Unlock frame rate | gow2_unlock_fps |
on, off | now | both |
| Frame rate limit | gow2_fps_cap |
off, 30 ... 240 | now | both |
| Frame counter | gow2_show_fps |
off, on (game fps and frame time; top-left, top-center on Android) | now | both |
| Keep 16:9 shape | present_letterbox |
on (black bars), off (fill: crop up to 10 % top and bottom, stretch the rest) | now | Android |
| Display refresh hint | present_android_frame_rate |
phone default, 30 ... 120 | restart | Android |
| Row | Key(s) | Values | Applies | Platforms |
|---|---|---|---|---|
| Graphics API | gpu_backend |
automatic (Direct3D 12), Direct3D 12, Vulkan (experimental); Direct3D 12 is the tested path, Vulkan is experimental with only FSR 1 and CAS | restart | Windows |
| Internal resolution | resolution_scale |
720p, 1440p, 4K | restart | both |
| Upscaler | gow2_temporal + gow2_upscaler |
off, FSR 3.1, FSR 4 (DLSS on DLSS builds) | now | Windows |
| Upscaling | info | internal -> screen ratio | now | Windows |
| Final image filter | present_effect |
bilinear, FSR 1, CAS (SGSR on Android) | restart | both |
| FSR 1 softening | present_fsr_sharpness_reduction |
0 ... 2 | restart | both |
| CAS sharpness | present_cas_additional_sharpness |
0 ... 1 | restart | both |
| Dithering | present_dither |
on, off | restart | both |
| Anisotropic filtering | anisotropic_override |
game default, off, 1x ... 16x | next level | both |
| Texture cache | texture_cache_memory_limit_soft + texture_cache_memory_limit_hard |
384 MB, 1 GB, 2 GB, 4 GB | now | both |
| Character lighting fix | gow2_black_shading_fix |
on, off | restart | both |
| Bigger texture pool | gow2_texture_streaming_fix |
on, off | restart | both |
| 16x filtering patch | gow2_aniso16 |
on, off | restart | both |
| Ambient occlusion fix | gow2_ao_upscaling_fix |
on, off | now | both |
| Depth of field fix | gow2_dof_upscaling_fix |
on, off | now | both |
| Texture pack | gow2_texture_pack |
off, textures folder, the folder names in texture_packs next to the exe (each holds 4D53082D\replace); empty uses texture_replace; it overrides texture_replace and texture_pack_dir in gow2.toml, not on the command line |
restart | Windows |
| Open texture packs folder | action | creates texture_packs next to the exe and opens it |
now | Windows |
| Build texture pack | opens the page below; dimmed when tools\texconv or tools\realesrgan is missing |
upscales the dumped color textures with Real-ESRGAN into texture_packs\dump-2x and the like (Texture packs) |
now | Windows |
| Dump textures | texture_dump |
on, off (advanced); dump with Texture pack set to Off so Build texture pack finds them | restart | Windows |
| Sustained performance | gow2_android_sustained_performance |
on, off | restart | Android |
| Engine settings | gow2_system_settings |
text (advanced) | restart | both |
The "Build texture pack" page holds: Scale (gow2_texture_build_scale: 2x, 4x), Quality
(gow2_texture_build_quality: same as the disc, BC7), the dump count with the expected video memory
(2x about 4 times the textures', 4x about 16 times, double with BC7), Start, Cancel and the status
(Building 120 / 724, then the pack to pick or the failure). The build keeps running when you press
Play or close the menu; quitting the game cancels it. A finished pack shows up in Texture pack right
away.
Graphics includes Game quality (Calidad del juego) on Windows and Android. The Quality preset row offers Low / Medium / High (retail) / Custom. Low reduces optional effects and shadow/detail settings; Medium is intermediate; High sets all 24 controls to retail values. Individual changes display Custom when they no longer match a preset. Each row needs a restart. These new rows have host-test coverage; the earlier in-game checks at the top of this page do not validate the new quality controls or their visual/performance effects.
| Row | Key | Values | Applies | Platforms |
|---|---|---|---|---|
| Quality preset | menu action over the 24 keys below | Low, Medium, High (retail), Custom | restart | both |
| Object shadows | gow2_gfx_light_environment_shadows |
auto, on, off | restart | both |
| Dynamic shadows | gow2_gfx_dynamic_shadows |
auto, on, off | restart | both |
| Dynamic lights | gow2_gfx_dynamic_lights |
auto, on, off | restart | both |
| Composite dynamic lights | gow2_gfx_composite_dynamic_lights |
auto, on, off | restart | both |
| Bloom | gow2_gfx_bloom |
auto, on, off | restart | both |
| High quality bloom | gow2_gfx_use_high_quality_bloom |
auto, on, off | restart | both |
| Motion blur | gow2_gfx_motion_blur |
auto, on, off | restart | both |
| Depth of field | gow2_gfx_depth_of_field |
auto, on, off | restart | both |
| Ambient occlusion | gow2_gfx_ambient_occlusion |
auto, on, off | restart | both |
| Lens flares | gow2_gfx_lens_flares |
auto, on, off | restart | both |
| Distortion | gow2_gfx_distortion |
auto, on, off | restart | both |
| Static decals | gow2_gfx_static_decals |
auto, on, off | restart | both |
| Dynamic decals | gow2_gfx_dynamic_decals |
auto, on, off | restart | both |
| Fog volumes | gow2_gfx_fog_volumes |
auto, on, off | restart | both |
| Tree leaves | gow2_gfx_speed_tree_leaves |
auto, on, off | restart | both |
| Tree fronds | gow2_gfx_speed_tree_fronds |
auto, on, off | restart | both |
| Shadow filter bias | gow2_gfx_shadow_filter_quality_bias |
auto, -1, 0, 1 | restart | both |
| World detail | gow2_gfx_detail_mode |
auto, 0, 1, 2 | restart | both |
| Character LOD bias | gow2_gfx_skeletal_mesh_lod_bias |
auto, 0, 1, 2 | restart | both |
| Particle LOD bias | gow2_gfx_particle_lod_bias |
auto, 0, 1, 2 | restart | both |
| Foliage draw radius | gow2_gfx_foliage_draw_radius_multiplier |
auto, 0.25, 0.5, 1.000000 | restart | both |
| Maximum shadow resolution | gow2_gfx_max_shadow_resolution |
auto, 256, 512, 800 | restart | both |
| Shadow texels per pixel | gow2_gfx_shadow_texels_per_pixel |
auto, 0.5, 1, 1.27324 | restart | both |
| Decal draw distance | gow2_gfx_decal_cull_distance_scale |
auto, 0.4, 0.7, 1.0 | restart | both |
auto keeps platform defaults: Windows retains retail quality; Android disables
Object shadows only. High explicitly enables Object shadows on Android. The
advanced Engine settings row (gow2_system_settings, empty by default) applies
last, so existing raw Key=Value;OtherKey=Value pairs override quality rows and
presets. Clear conflicting raw pairs to give control to the menu. Quality cvars
are strings in TOML, including numbers (e.g. gow2_gfx_detail_mode = "1").
See SYSTEM_SETTINGS.md for the complete 76-key retail inventory, every preset value, scope of verification, and the bundle size rule.
| Row | Key(s) | Values | Applies | Platforms |
|---|---|---|---|---|
| Keyboard and mouse | mnk_mode |
on, off | now | both |
| Native mouse aim | gow2_mouse_aim |
on, off | restart | both |
| Mouse sensitivity | gow2_mouse_scale or mnk_sensitivity |
0.05x ... 10x | now | both |
| Invert mouse Y | gow2_mouse_invert_y |
on, off | now | both |
| Aim assist with the mouse | gow2_mouse_aim_assist |
on, off | now | both |
| Button prompts | gow2_prompts |
automatic (last device used), keyboard, controller (Xbox buttons), playstation (Windows) | restart | both |
| Keycap pictures | gow2_keycaps |
on, off | restart | Windows |
| Controller look dead zone | pad_right_stick_deadzone |
0 ... 0.9 | now | both |
| Key bindings | opens the page below | now | both | |
| Controller layout | info | in the game's own Options | now | both |
The Key bindings page holds one row per action (keybind_*, 24 rows).
Accept, then press the new key. Default restores the original keys. Open it
with F10 during a level: a new key works as soon as the menu closes. The game
itself keeps the bindings it was started with, so the port sends each key as
the key the game still binds to the same action (RouteKey,
src/gow2_native_bindings.cpp). One limit: an action that was bound to a
key combination (Shift+Up) at start cannot move to another key until the
next start. Menu prompts update after a restart.
| Row | Key(s) | Values | Applies | Platforms |
|---|---|---|---|---|
| Touch controls | gow2_touch |
automatic, on, off | restart | Android |
| Opacity | gow2_touch_opacity |
0% ... 100% | now | Android |
| Size | gow2_touch_scale |
0.5x ... 2x | now | Android |
| Look sensitivity | gow2_touch_look_gain |
0.1x ... 5x | now | Android |
| Aim: tap to toggle | gow2_touch_aim_toggle |
on, off | now | Android |
| Hide after keyboard or mouse | gow2_touch_hide_seconds |
0 ... 600 s | now | Android |
| Row | Key(s) | Values | Applies | Platforms |
|---|---|---|---|---|
| Your name | user_name |
text, up to 15 characters | restart | both |
| System Link (LAN and internet) | net_link_active |
on, off | restart | both |
| Co-op players | gow2_coop_players |
2, 3, 4, 8, 10 (8 and 10 experimental) | restart | both |
| Co-op check code | info | the combined hash | now | both |
| Join a host (name or IP) | net_peers |
text | restart | both |
| Host over the internet | opens the page below | now | Windows | |
| This device's LAN address | net_local_ip |
text (advanced) | restart | both |
| Port offset | net_port_offset |
1024 ... 64512 | restart | both |
| Co-op check | net_beacon_gate |
on, off (advanced) | restart | both |
| Network log | system_link_trace |
on, off (advanced) | now | both |
The "Host over the internet" page holds: Status (info), Keep open for
(gow2_host_lease_hours: 2, 6, 12, 24 h), Open ports now (action), Close
ports (action), Address friends use (net_public_address: text), Friends
allowed (net_allow_peers: text), Close ports when the game exits
(gow2_host_close_on_exit: toggle). All Windows. See below.
| Row | Key(s) | Values | Applies | Platforms |
|---|---|---|---|---|
| Save location | gow2_save_dir |
default, portable, detected cloud folders | restart | both |
| Choose a folder | picks gow2_save_dir |
folder picker | now | Windows |
| Folder path | gow2_save_dir |
text (advanced) | restart | both |
| Saves are in | info | the folder this session uses | now | both |
| Open the saves folder | action | opens File Explorer | now | Windows |
| Row | Key(s) | Values | Applies | Platforms |
|---|---|---|---|---|
| Volume | gow2_audio_volume |
0% ... 100% | now | both |
| Mute | audio_mute |
on, off | now | both |
| Audio buffer | audio_maxqframes |
4 ... 64 (advanced) | restart | both |
| Row | Key(s) | Values | Applies | Platforms |
|---|---|---|---|---|
| Menu language | gow2_menu_language |
automatic, English, Spanish | now | both |
| Subtitles and text | user_language |
English, Latin American Spanish, French, German, Italian, Polish, Russian, Korean, Traditional Chinese | restart | both |
| Voices | gow2_voice_language |
same as subtitles, English, Latin American Spanish, French | restart | both |
| Skip intro videos | gow2_skip_intro_movies |
on, off | restart | both |
| Show options at start | gow2_launcher |
on, off | at start | Windows |
| Show advanced options | gow2_menu_advanced |
on, off | now | both |
| All runtime settings | action | opens the F4 list | now | both |
| Restart the game | action | save first: it saves nothing | now | Windows |
| Quit the game | action | quit, then open the game again | now | both |
| Settings file | info | where the menu saves | now | both |
| Version | info | this build of the port | now | both |
| Open this menu | info | F10, Back + Start | now | both |
gow2_fps_cap, gow2_audio_volume, gow2_menu_language,
gow2_menu_advanced, gow2_host_lease_hours, gow2_host_close_on_exit,
gow2_pc_options_entry, bind_pc_options (F10), user_language,
gow2_voice_language, gow2_show_fps.
On Windows this page runs the bundled scripts\host-online.ps1 hidden with
-Json. It opens UDP 14001 and 41000 by UPnP on every router on the way,
with a lease. It fills net_public_address when empty. It closes the ports
when the game exits if "Close ports when the game exits" is on. The
scheduled -Stop still covers a crash. See ONLINE.md.
With 3 or 4 players every player must see the same code: the same build and the same co-op settings. With 2 players it is not used. See NETWORK_PLAY.md.
The raw runtime list stays on F4 ("All runtime settings"). It is also a row in PC Options > System.
SDK patch 0013 adds the hooks. xam_input_block gives the game a neutral
pad and no keystrokes while a host menu is open. The Coalesced layer renames
the game's Options > Storage Location button to PC Options. The device
selector call with the UI flag (0x200) runs the command cvar
gow2_pc_options_modal, which opens this menu and waits; the boot-time call
(flags 0) stays headless. The game is told through the system-UI
notification (XN_SYS_UI) while the menu is open.
- Back + Start also reaches the game during the 300 ms before the menu opens, so the game may open its pause menu underneath.
- In two of the twelve languages on the phone, the renamed Options entry did not fit its bundle and keeps the game's own text; the button still opens the menu.
- Controller remapping is the game's own Options > Controller layouts.