name: 120 fps
description: The game at 120 frames a second (on a 120 Hz screen) and its normal speed: characters, vehicles and objects are drawn between the game's 30 updates a second (particles and effects still move 30 times a second). Use it instead of the 60 fps mod, not with it.
author: hakuX
refresh: 120

# Halo 2's frame limiter (0x12B0E0) waits N vblanks a frame: N is the video
# settings' interval mode (1, as in the menus), but at least 2 while a game
# runs. Without that floor a game frame is one vblank (as the 60 fps mod).
# The frame's time step is the vblanks it took / the refresh rate (0x12B1F6:
# the mode's, 0x485AC0, else 60): with the vblank at 120 Hz it divides by
# twice the rate (add edx, edx for test edx, edx: the same flags) and the
# fallback is 120, so the game time keeps its 30 ticks a second.
# The frames between ticks draw the objects between the last two ticks, a
# quarter tick apart (the game time's tick fraction, [0x510C54]+0x10): before
# each tick (0x137F89) their positions (+0x64) and node matrices (the block
# at +0x114: size, offset) are copied, the types that move only and the
# characters, vehicles and creatures first (the level's scenery, first in
# the array, filled the space and characters were left out at 30 a
# second); after the frame's ticks (0x12B632) each is set between its two
# ticks for the camera, the director and the render; at the next frame's
# limiter (0x12B58F) its values come back. The
# code is in the header pages, over the logo bitmap and the zeros after it
# (0x10CC0..0x118C0), its buffer (416 KiB) from MmAllocateContiguousMemory,
# asked for again each tick until there's room. Generated by mkmod.py from
# halo2_120fps.asm.
[default.xbe]
0x00010CC0: 07 33 AD 03 07 53 AD 03 A9 03 EA 00 03 73 A7 03 32 00 B3 FD 03 05 03 FD D3 43 F9 EA 00 03 E3 F9 -> 60 E8 41 02 00 00 85 ED 75 23 68 40 80 06 00 FF 15 24 15 41 00 85 C0 74 46 89 C7 B9 10 20 00 00
0x00010CE0: 33 47 33 22 00 FF 03 05 73 FD 73 73 A7 73 EA 00 73 F7 D3 73 E3 F7 43 0F 03 FF 03 05 FF 33 2E 00 -> 50 31 C0 F3 AB 58 A3 00 18 01 00 89 C5 E8 04 01 00 00 89 4D 14 83 65 18 00 83 65 10 00 E3 20 51
0x00010D00: 03 7A 00 03 52 00 F9 33 03 F9 03 0F 33 FF 03 03 43 FF 13 F9 13 05 03 93 A3 F7 73 07 73 A7 63 23 -> 57 66 C7 47 06 00 00 83 C7 10 49 75 F4 5F 59 6A 02 58 E8 0E 00 00 00 6A 01 58 E8 06 00 00 00 61
0x00010D20: 53 A3 05 13 A3 D3 F7 73 03 07 13 73 E3 F7 E3 A3 13 09 03 A3 F7 E3 93 13 05 43 53 F9 53 73 F9 B3 -> E9 BB 72 12 00 60 89 45 1C 8B 55 10 66 8B 06 66 85 C0 74 76 8B 5E 08 85 DB 74 6F 0F B6 46 03 52
0x00010D40: 33 03 23 63 03 05 93 FF 43 03 E3 FF 33 F9 03 03 43 E3 FD B3 05 F9 D3 F5 D3 03 A3 FF E3 03 03 73 -> 31 D2 83 F8 1F 77 14 0F A3 05 8E 0F 01 00 83 D2 00 0F A3 05 92 0F 01 00 83 D2 00 3B 55 1C 5A 75
0x00010D60: 26 F0 13 05 23 E3 FF 63 03 36 F0 13 23 33 C3 63 05 D3 FF 45 FF A3 93 F7 E3 03 63 26 F0 43 03 FF -> 49 66 8B 06 66 89 47 04 89 1F E8 66 00 00 00 50 01 D0 3D 00 00 03 00 58 77 2D 66 89 47 06 89 57
0x00010D80: 73 D3 F9 B3 F9 73 13 F9 53 13 E3 F7 93 03 23 F9 E3 D3 F9 D3 36 F0 03 23 63 83 63 03 03 22 F0 43 -> 08 60 8D BC 15 40 80 00 00 8D 73 64 A5 A5 A5 8D 48 F4 C1 E9 02 74 0B 0F B7 B3 16 01 00 00 01 DE
0x00010DA0: E3 FF 43 D3 F7 93 23 F9 A3 03 23 F7 B3 33 32 F0 13 03 53 F7 E3 43 F7 E3 05 A3 F7 A3 03 E3 F7 D3 -> F3 A5 61 01 C2 EB 03 FF 45 18 83 C6 0C 83 C7 10 49 0F 85 75 FF FF FF 89 55 10 61 C3 E8 AF 71 12
0x00010DC0: 05 D3 F7 C3 03 D3 F7 53 03 F9 13 07 13 33 03 03 13 F9 D3 F7 A3 F7 D3 F9 13 F9 43 D3 F9 03 03 03 -> 00 60 E8 51 00 00 00 61 C3 60 E8 38 01 00 00 61 E9 0B A3 11 00 0F B7 83 16 01 00 00 66 83 F8 FF
0x00010DE0: F9 93 F9 E3 23 23 F9 73 05 03 F9 63 F9 D3 43 13 03 07 73 F9 23 05 A3 F9 03 F9 23 03 F9 03 0F 53 -> 74 0E 0F B7 83 14 01 00 00 83 E0 FC 83 C0 0C C3 B8 0C 00 00 00 C3 A1 00 03 4E 00 31 C9 85 C0 74
0x00010E00: F9 73 FD E3 B3 F9 13 F9 23 F9 73 0F D3 F7 E3 03 03 93 F9 03 05 33 F9 13 E3 FF D3 03 03 E3 F7 D3 -> 16 8B 48 38 81 F9 00 08 00 00 76 05 B9 00 08 00 00 8B 70 44 8D 7D 40 C3 E8 EA 00 00 00 85 ED 0F
0x00010E20: 07 A3 F9 13 F9 03 43 F7 D3 22 00 A3 F9 23 FD 43 E3 F7 D3 43 F9 43 F9 03 0D 03 F9 53 05 F9 E3 07 -> 84 C3 00 00 00 80 7D 20 00 0F 85 B9 00 00 00 A1 54 0C 51 00 85 C0 0F 84 AC 00 00 00 D9 40 10 D9
0x00010E40: 43 F9 03 03 B3 FF E3 03 F9 A3 07 D3 F9 53 F7 E3 03 93 F7 93 22 00 FB 03 FB E3 03 F9 73 A3 F7 D3 -> 45 08 D8 0D 96 0F 01 00 DB F1 DA C1 D9 55 08 DE E9 D9 E8 DE C1 D9 55 00 D9 E8 DE D9 DF E0 9E 0F
0x00010E60: 43 F9 03 05 03 07 23 F9 03 05 F9 A3 07 D3 F3 93 23 09 03 33 D3 FB 23 F9 43 05 13 F9 73 B3 F7 93 -> 86 83 00 00 00 E8 8C FF FF FF E3 7C E8 F0 00 00 00 75 6C 8D 84 15 40 80 00 00 D9 43 64 D8 20 DC
0x00010E80: 03 E3 F7 33 0F 03 F9 D3 03 FB 43 23 F9 33 E3 F7 93 43 F9 05 13 F9 63 F9 07 F9 B3 05 43 22 F0 43 -> C8 D9 43 68 D8 60 04 DC C8 DE C1 D9 43 6C D8 60 08 DC C8 DE C1 D8 1D 9A 0F 01 00 DF E0 9E 77 3F
0x00010EA0: 05 73 F9 23 F9 73 05 A3 F9 13 F9 43 03 F9 03 0F 33 F9 73 03 F9 E3 03 53 F9 13 F9 43 13 F9 73 43 -> 7A 3D C6 47 0C 01 C6 45 04 01 60 0F B7 47 06 8D B4 15 40 80 00 00 8D BC 15 40 80 03 00 8D 53 64
0x00010EC0: E3 F7 73 B3 F7 B3 07 93 F9 63 23 E3 F7 D3 F9 A3 03 03 A3 F9 03 D3 F7 E3 23 73 F9 63 03 F9 03 13 -> 6A 03 59 E8 21 00 00 00 8D 48 F4 C1 E9 02 74 0E 0F B7 93 16 01 00 00 01 DA E8 0B 00 00 00 61 83
0x00010EE0: F9 B3 A3 0D 73 F9 23 03 F9 43 03 B3 F9 23 F9 03 03 D3 22 F0 B3 03 F9 73 07 13 26 F0 E3 03 D3 2A -> C6 0C 83 C7 10 49 75 84 C3 50 8B 02 89 07 D9 02 D8 26 D8 4D 00 D8 06 D9 1A 83 C6 04 83 C7 04 83
0x00010F00: F0 73 03 23 26 F0 A3 03 43 F9 03 43 FB 93 0D D3 F9 03 03 F7 E3 05 F9 A3 53 F9 05 03 E3 FD B3 03 -> C2 04 49 75 E5 58 C3 8B 2D 00 18 01 00 85 ED 74 4F 80 7D 04 00 74 49 C6 45 04 00 E8 D6 FE FF FF
0x00010F20: 03 F9 33 09 23 FF 73 03 03 03 E3 22 F0 63 07 63 FD E3 43 05 A3 F7 B3 05 D3 F9 33 0D 4B 05 47 13 -> 85 C9 74 3C 80 7F 0C 00 74 2D C6 47 0C 00 E8 2E 00 00 00 75 22 60 8D B4 15 40 80 03 00 8D 7B 64
0x00010F40: 03 03 49 13 73 A7 93 07 03 43 A3 C3 A3 73 13 05 13 49 03 0B 03 53 D3 F3 E3 73 13 09 03 43 73 A3 -> A5 A5 A5 8D 48 F4 C1 E9 02 74 0B 0F B7 BB 16 01 00 00 01 DF F3 A5 61 83 C6 0C 83 C7 10 49 75 C4
0x00010F60: D3 F3 E3 73 13 0B 03 23 53 47 03 07 49 13 07 49 03 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> C3 0F B7 47 06 85 C0 74 23 66 8B 16 66 3B 57 04 75 19 8B 5E 08 3B 1F 75 12 50 E8 56 FE FF FF 89
0x00010F80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> C2 58 39 C2 75 05 8B 57 08 39 C0 C3 40 C3 BF 10 00 00 03 10 00 00 A4 70 7D 3F 00 00 80 41
0x00137F89: E8 52 00 00 00 -> E8 32 8D ED FF
0x0012B632: E8 39 C9 00 00 -> E8 85 57 EE FF
0x0012B58F: E8 4C FB FF FF -> E8 35 58 EE FF
0x0012B195: 7F 04 -> EB 04
0x0012B1FD: 85 D2 -> 01 D2
0x0012B209: 3C -> 78
