GameWindowSuperScale (MovieFix)

Removes access to fullscreen-mode and always launches windowed with double-zoom (or single if user's primary display-device is too small for a window with game's base-resolution multiplied with 2). This is a later revision that corrected the positioning of video-playback on game-screen, nothing else has changed.

F5 and F6 keys now change the game-screen's zoom down and up respectively (automatically limited to how much the user's primary display-device can handle, but zoom-levels will never exceed ×8).

If the engine is hacked to use a game-resolution other than 320×240, further adjustments have to be done inside segment 2/4 after patching.

Originally made and first released by KotatsuAkira.

RPG2000
1.00UNKNOWN2000-05-072000-06-192000-07-112000-11-132000-11-152000-12-27
1.07
2001-05-05
1.10
2003-03-27
1.50
2003-06-25
1.51/1.52
2015-07-05
1.60
2015-09-15
1.61
2017-09-14
1.62
RPG2003
1.00UNKNOWN1UNKNOWN21.0.2.1
1.0.2.1
1.0.3.0
1.0.4.0
1.0.5.0
1.0.5.0
1.0.6.0
1.0.6.0
1.0.7.0
1.0.7.0
1.0.8.0
1.0.8.0
1.0.9.1
1.0.9.1
1.101.111.12mp210414

Segment 1/7

Offsets

RPG2000
2000-12-27
1.07
2001-05-05
1.10
2003-06-25
1.51/1.52
2017-09-14
1.62
004552CEh
000546CEh
004551C6h
000545C6h
00455636h
00054A36h
00455B9Ah
00054F9Ah
RPG2003
1.0.8.0
1.0.8.0
1.0.9.1
1.0.9.1
0046B05Eh
0006A45Eh
0046B05Eh
0006A45Eh

Sourcecode

			JMP __004552FDh
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
__004552FDh:
			CALL PROC__PreviousResolution
			CALL PROC__NextResolution
			JMP __004551F5h
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
__004551F5h:
			CALL PROC__PreviousResolution
			CALL PROC__NextResolution
			JMP __00455665h
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
__00455665h:
			CALL PROC__PreviousResolution
			CALL PROC__NextResolution
			JMP __00455BC9h
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
__00455BC9h:
			CALL PROC__PreviousResolution
			CALL PROC__NextResolution
			JMP __0046B08Dh
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
__0046B08Dh:
			CALL PROC__PreviousResolution
			CALL PROC__NextResolution
			JMP __0046B08Dh
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
__0046B08Dh:
			CALL PROC__PreviousResolution
			CALL PROC__NextResolution

Bytes

EB2D
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90
E8EC030000
E801040000
EB2D
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90
E8EC030000
E801040000
EB2D
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90
E8EC030000
E801040000
EB2D
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90
E8EC030000
E801040000
EB2D
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90
E8F0030000
E805040000
EB2D
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90
E8F0030000
E805040000

Segment 2/7

Offsets

RPG2000
2000-12-27
1.07
2001-05-05
1.10
2003-06-25
1.51/1.52
2017-09-14
1.62
0045558Ch
0005498Ch
00455484h
00054884h
004558F4h
00054CF4h
00455E58h
00055258h
RPG2003
1.0.8.0
1.0.8.0
1.0.9.1
1.0.9.1
0046B328h
0006A728h
0046B328h
0006A728h

Sourcecode

PROC__0045558Ch:
			PUSH EBX
			PUSH ESI
			PUSH EDI
			PUSH EBP
			SUB ESP, 20
			MOV EBX, EAX
			MOV AL, BYTE PTR [EBX+31h]
			INC AL
			CALL PROC__ApplyResolution
			PUSH 7
			CALL GetSystemMetrics
			MOV EDI, EAX
			ADD EDI, EDI
			ADD EDI, [EBX+40h]
			ADD EDI, 4
			PUSH 4
			CALL GetSystemMetrics
			MOV ESI, EAX
			ADD ESI, [EBX+44h]
			PUSH 8
			CALL GetSystemMetrics
			ADD EAX, EAX
			ADD ESI, EAX
			ADD ESI, 4
			PUSH 61
			CALL GetSystemMetrics
			MOV EBP, EAX
			PUSH 32
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EBP, EAX
			PUSH 62
			CALL GetSystemMetrics
			PUSH EAX
			PUSH 33
			CALL GetSystemMetrics
			ADD EAX, EAX
			POP EDX
			XCHG EAX, EDX
			SUB EAX, EDX
			SUB EBP, EDI
			SAR EBP, 1
			JNS NoCarry1
			ADC EBP, 0
NoCarry1:
			SUB EAX, ESI
			SAR EAX, 1
			JNS NoCarry2
			ADC EAX, 0
NoCarry2:
			MOV [ESP], EAX
			PUSH EDI
			PUSH ESI
			MOV ECX, [ESP+08h]
			MOV EDX, EBP
			MOV EAX, [EBX+74h]
			MOV EBX, [EAX]
			CALL [EBX+7Ch]
			ADD ESP, 20
			POP EBP
			POP EDI
			POP ESI
			POP EBX
			RET
PROC__GetMaximumSize:
			PUSH ESI
			PUSH EDI
			PUSH EDX
			PUSH 33
			POP EAX
			CALL PROC__MetricsMax
			MOV ESI, EDI
			PUSH 32
			POP EAX
			CALL PROC__MetricsMax
			MOV EAX, EDI
			MOV ECX, 320
			CDQ
			IDIV ECX
			MOV EDI, EAX
			MOV EAX, ESI
			MOV ECX, 240
			CDQ
			IDIV ECX
			CMP EAX, EDI
			JLE __NoExchange
			XCHG EAX, EDI
__NoExchange:
			CMP EAX, 8
			JLE __NoSizeCap
			MOV AL, 8
__NoSizeCap:
			DEC AL
			POP EDX
			POP EDI
			POP ESI
			RET
PROC__SetResolutionBase:
			MOV ESI, 320
			MOV EDI, 240
			XOR ECX, ECX
			XOR EDX, EDX
			RET
PROC__0045566Ch:
			PUSH ESI
			PUSH EDI
			PUSH EBX
			SUB ESP, 16
			MOV EBX, EAX
			CMP DL, BYTE PTR [EBX+31h]
			JZ __CancelWindowed
			MOV EAX, EDX
			MOV BYTE PTR [EBX+31h], AL
			TEST BYTE PTR [EBX+20h], 16
			JNZ __CancelWindowed
			TEST BYTE PTR [EBX+20h], 2
			JNZ __CancelWindowed
			CALL PROC__SetResolutionBase
			CMP BYTE PTR [EBX+30h], 1
			JNZ __SetFlexible
			CMP BYTE PTR [EBX+32h], 0
			JNZ __SetWindow
			PUSH 1
			POP EAX
__SetWindow:
			CALL PROC__ApplyResolution
			JMP __AfterApply
__SetFlexible:
			MOV EAX, EBX
			CALL PROC__0045558Ch
__AfterApply:
			CMP BYTE PTR [EBX+A8h], 0
			JZ __SkipThis
			MOV EAX, EBX
			CALL PROC__004560A0h
__SkipThis:
			MOV EAX, EBX
			CALL PROC__00456070h
__CancelWindowed:
			ADD ESP, 16
			POP EBX
			POP EDI
			POP ESI
			RET
PROC__LoopResolution:
			CALL PROC__SetResolutionBase
__ResLoopStep:
			ADD ECX, ESI
			ADD EDX, EDI
			DEC AL
			JNZ __ResLoopStep
			RET
PROC__MetricsMax:
			PUSH EAX
			ADD EAX, 29
			PUSH EAX
			CALL GetSystemMetrics
			MOV EDI, EAX
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EDI, EAX
			RET
PROC__PreviousResolution:
			CMP WORD PTR [ESI], 0074h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+31h]
			TEST DL, DL
			JZ __NoDecrease
			DEC DL
			JMP __CallItNow
__NoDecrease:
			CALL PROC__GetMaximumSize
			MOV DL, AL
			JMP __CallItNow
PROC__NextResolution:
			CMP WORD PTR [ESI], 0075h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+31h]
			INC DL
			CALL PROC__GetMaximumSize
			CMP DL, AL
			JBE __CallItNow
			XOR DL, DL
__CallItNow:
			MOV EAX, EBX
			CALL PROC__0045566Ch
__NoChange:
			RET
PROC__ApplyResolution:
			CALL PROC__LoopResolution
			PUSH EDX
			LEA EDX, [ESP+08h]
			PUSH EDX
			MOV EDX, [ESP+04h]
			MOV EAX, ECX
			XOR EDX, EDX
			XOR EAX, EAX
			CALL PROC__0040ECD0h
			LEA ESI, [ESP+04h]
			LEA EDI, [EBX+38h]
			MOVSD
			MOVSD
			MOVSD
			MOVSD
			RET
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
PROC__00455484h:
			PUSH EBX
			PUSH ESI
			PUSH EDI
			PUSH EBP
			SUB ESP, 20
			MOV EBX, EAX
			MOV AL, BYTE PTR [EBX+31h]
			INC AL
			CALL PROC__ApplyResolution
			PUSH 7
			CALL GetSystemMetrics
			MOV EDI, EAX
			ADD EDI, EDI
			ADD EDI, [EBX+40h]
			ADD EDI, 4
			PUSH 4
			CALL GetSystemMetrics
			MOV ESI, EAX
			ADD ESI, [EBX+44h]
			PUSH 8
			CALL GetSystemMetrics
			ADD EAX, EAX
			ADD ESI, EAX
			ADD ESI, 4
			PUSH 61
			CALL GetSystemMetrics
			MOV EBP, EAX
			PUSH 32
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EBP, EAX
			PUSH 62
			CALL GetSystemMetrics
			PUSH EAX
			PUSH 33
			CALL GetSystemMetrics
			ADD EAX, EAX
			POP EDX
			XCHG EAX, EDX
			SUB EAX, EDX
			SUB EBP, EDI
			SAR EBP, 1
			JNS NoCarry1
			ADC EBP, 0
NoCarry1:
			SUB EAX, ESI
			SAR EAX, 1
			JNS NoCarry2
			ADC EAX, 0
NoCarry2:
			MOV [ESP], EAX
			PUSH EDI
			PUSH ESI
			MOV ECX, [ESP+08h]
			MOV EDX, EBP
			MOV EAX, [EBX+74h]
			MOV EBX, [EAX]
			CALL [EBX+7Ch]
			ADD ESP, 20
			POP EBP
			POP EDI
			POP ESI
			POP EBX
			RET
PROC__GetMaximumSize:
			PUSH ESI
			PUSH EDI
			PUSH EDX
			PUSH 33
			POP EAX
			CALL PROC__MetricsMax
			MOV ESI, EDI
			PUSH 32
			POP EAX
			CALL PROC__MetricsMax
			MOV EAX, EDI
			MOV ECX, 320
			CDQ
			IDIV ECX
			MOV EDI, EAX
			MOV EAX, ESI
			MOV ECX, 240
			CDQ
			IDIV ECX
			CMP EAX, EDI
			JLE __NoExchange
			XCHG EAX, EDI
__NoExchange:
			CMP EAX, 8
			JLE __NoSizeCap
			MOV AL, 8
__NoSizeCap:
			DEC AL
			POP EDX
			POP EDI
			POP ESI
			RET
PROC__SetResolutionBase:
			MOV ESI, 320
			MOV EDI, 240
			XOR ECX, ECX
			XOR EDX, EDX
			RET
PROC__00455564h:
			PUSH ESI
			PUSH EDI
			PUSH EBX
			SUB ESP, 16
			MOV EBX, EAX
			CMP DL, BYTE PTR [EBX+31h]
			JZ __CancelWindowed
			MOV EAX, EDX
			MOV BYTE PTR [EBX+31h], AL
			TEST BYTE PTR [EBX+20h], 16
			JNZ __CancelWindowed
			TEST BYTE PTR [EBX+20h], 2
			JNZ __CancelWindowed
			CALL PROC__SetResolutionBase
			CMP BYTE PTR [EBX+30h], 1
			JNZ __SetFlexible
			CMP BYTE PTR [EBX+32h], 0
			JNZ __SetWindow
			PUSH 1
			POP EAX
__SetWindow:
			CALL PROC__ApplyResolution
			JMP __AfterApply
__SetFlexible:
			MOV EAX, EBX
			CALL PROC__00455484h
__AfterApply:
			CMP BYTE PTR [EBX+A8h], 0
			JZ __SkipThis
			MOV EAX, EBX
			CALL PROC__004560A0h
__SkipThis:
			MOV EAX, EBX
			CALL PROC__00456070h
__CancelWindowed:
			ADD ESP, 16
			POP EBX
			POP EDI
			POP ESI
			RET
PROC__LoopResolution:
			CALL PROC__SetResolutionBase
__ResLoopStep:
			ADD ECX, ESI
			ADD EDX, EDI
			DEC AL
			JNZ __ResLoopStep
			RET
PROC__MetricsMax:
			PUSH EAX
			ADD EAX, 29
			PUSH EAX
			CALL GetSystemMetrics
			MOV EDI, EAX
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EDI, EAX
			RET
PROC__PreviousResolution:
			CMP WORD PTR [ESI], 0074h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+31h]
			TEST DL, DL
			JZ __NoDecrease
			DEC DL
			JMP __CallItNow
__NoDecrease:
			CALL PROC__GetMaximumSize
			MOV DL, AL
			JMP __CallItNow
PROC__NextResolution:
			CMP WORD PTR [ESI], 0075h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+31h]
			INC DL
			CALL PROC__GetMaximumSize
			CMP DL, AL
			JBE __CallItNow
			XOR DL, DL
__CallItNow:
			MOV EAX, EBX
			CALL PROC__00455564h
__NoChange:
			RET
PROC__ApplyResolution:
			CALL PROC__LoopResolution
			PUSH EDX
			LEA EDX, [ESP+08h]
			PUSH EDX
			MOV EDX, [ESP+04h]
			MOV EAX, ECX
			XOR EDX, EDX
			XOR EAX, EAX
			CALL PROC__0040ECA0h
			LEA ESI, [ESP+04h]
			LEA EDI, [EBX+38h]
			MOVSD
			MOVSD
			MOVSD
			MOVSD
			RET
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
PROC__004558F4h:
			PUSH EBX
			PUSH ESI
			PUSH EDI
			PUSH EBP
			SUB ESP, 20
			MOV EBX, EAX
			MOV AL, BYTE PTR [EBX+31h]
			INC AL
			CALL PROC__ApplyResolution
			PUSH 7
			CALL GetSystemMetrics
			MOV EDI, EAX
			ADD EDI, EDI
			ADD EDI, [EBX+40h]
			ADD EDI, 4
			PUSH 4
			CALL GetSystemMetrics
			MOV ESI, EAX
			ADD ESI, [EBX+44h]
			PUSH 8
			CALL GetSystemMetrics
			ADD EAX, EAX
			ADD ESI, EAX
			ADD ESI, 4
			PUSH 61
			CALL GetSystemMetrics
			MOV EBP, EAX
			PUSH 32
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EBP, EAX
			PUSH 62
			CALL GetSystemMetrics
			PUSH EAX
			PUSH 33
			CALL GetSystemMetrics
			ADD EAX, EAX
			POP EDX
			XCHG EAX, EDX
			SUB EAX, EDX
			SUB EBP, EDI
			SAR EBP, 1
			JNS NoCarry1
			ADC EBP, 0
NoCarry1:
			SUB EAX, ESI
			SAR EAX, 1
			JNS NoCarry2
			ADC EAX, 0
NoCarry2:
			MOV [ESP], EAX
			PUSH EDI
			PUSH ESI
			MOV ECX, [ESP+08h]
			MOV EDX, EBP
			MOV EAX, [EBX+74h]
			MOV EBX, [EAX]
			CALL [EBX+7Ch]
			ADD ESP, 20
			POP EBP
			POP EDI
			POP ESI
			POP EBX
			RET
PROC__GetMaximumSize:
			PUSH ESI
			PUSH EDI
			PUSH EDX
			PUSH 33
			POP EAX
			CALL PROC__MetricsMax
			MOV ESI, EDI
			PUSH 32
			POP EAX
			CALL PROC__MetricsMax
			MOV EAX, EDI
			MOV ECX, 320
			CDQ
			IDIV ECX
			MOV EDI, EAX
			MOV EAX, ESI
			MOV ECX, 240
			CDQ
			IDIV ECX
			CMP EAX, EDI
			JLE __NoExchange
			XCHG EAX, EDI
__NoExchange:
			CMP EAX, 8
			JLE __NoSizeCap
			MOV AL, 8
__NoSizeCap:
			DEC AL
			POP EDX
			POP EDI
			POP ESI
			RET
PROC__SetResolutionBase:
			MOV ESI, 320
			MOV EDI, 240
			XOR ECX, ECX
			XOR EDX, EDX
			RET
PROC__004559D4h:
			PUSH ESI
			PUSH EDI
			PUSH EBX
			SUB ESP, 16
			MOV EBX, EAX
			CMP DL, BYTE PTR [EBX+31h]
			JZ __CancelWindowed
			MOV EAX, EDX
			MOV BYTE PTR [EBX+31h], AL
			TEST BYTE PTR [EBX+20h], 16
			JNZ __CancelWindowed
			TEST BYTE PTR [EBX+20h], 2
			JNZ __CancelWindowed
			CALL PROC__SetResolutionBase
			CMP BYTE PTR [EBX+30h], 1
			JNZ __SetFlexible
			CMP BYTE PTR [EBX+32h], 0
			JNZ __SetWindow
			PUSH 1
			POP EAX
__SetWindow:
			CALL PROC__ApplyResolution
			JMP __AfterApply
__SetFlexible:
			MOV EAX, EBX
			CALL PROC__004558F4h
__AfterApply:
			CMP BYTE PTR [EBX+A8h], 0
			JZ __SkipThis
			MOV EAX, EBX
			CALL PROC__00456408h
__SkipThis:
			MOV EAX, EBX
			CALL PROC__004563D8h
__CancelWindowed:
			ADD ESP, 16
			POP EBX
			POP EDI
			POP ESI
			RET
PROC__LoopResolution:
			CALL PROC__SetResolutionBase
__ResLoopStep:
			ADD ECX, ESI
			ADD EDX, EDI
			DEC AL
			JNZ __ResLoopStep
			RET
PROC__MetricsMax:
			PUSH EAX
			ADD EAX, 29
			PUSH EAX
			CALL GetSystemMetrics
			MOV EDI, EAX
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EDI, EAX
			RET
PROC__PreviousResolution:
			CMP WORD PTR [ESI], 0074h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+31h]
			TEST DL, DL
			JZ __NoDecrease
			DEC DL
			JMP __CallItNow
__NoDecrease:
			CALL PROC__GetMaximumSize
			MOV DL, AL
			JMP __CallItNow
PROC__NextResolution:
			CMP WORD PTR [ESI], 0075h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+31h]
			INC DL
			CALL PROC__GetMaximumSize
			CMP DL, AL
			JBE __CallItNow
			XOR DL, DL
__CallItNow:
			MOV EAX, EBX
			CALL PROC__004559D4h
__NoChange:
			RET
PROC__ApplyResolution:
			CALL PROC__LoopResolution
			PUSH EDX
			LEA EDX, [ESP+08h]
			PUSH EDX
			MOV EDX, [ESP+04h]
			MOV EAX, ECX
			XOR EDX, EDX
			XOR EAX, EAX
			CALL PROC__0040ED54h
			LEA ESI, [ESP+04h]
			LEA EDI, [EBX+38h]
			MOVSD
			MOVSD
			MOVSD
			MOVSD
			RET
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
PROC__00455E58h:
			PUSH EBX
			PUSH ESI
			PUSH EDI
			PUSH EBP
			SUB ESP, 20
			MOV EBX, EAX
			MOV AL, BYTE PTR [EBX+31h]
			INC AL
			CALL PROC__ApplyResolution
			PUSH 7
			CALL GetSystemMetrics
			MOV EDI, EAX
			ADD EDI, EDI
			ADD EDI, [EBX+40h]
			ADD EDI, 4
			PUSH 4
			CALL GetSystemMetrics
			MOV ESI, EAX
			ADD ESI, [EBX+44h]
			PUSH 8
			CALL GetSystemMetrics
			ADD EAX, EAX
			ADD ESI, EAX
			ADD ESI, 4
			PUSH 61
			CALL GetSystemMetrics
			MOV EBP, EAX
			PUSH 32
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EBP, EAX
			PUSH 62
			CALL GetSystemMetrics
			PUSH EAX
			PUSH 33
			CALL GetSystemMetrics
			ADD EAX, EAX
			POP EDX
			XCHG EAX, EDX
			SUB EAX, EDX
			SUB EBP, EDI
			SAR EBP, 1
			JNS NoCarry1
			ADC EBP, 0
NoCarry1:
			SUB EAX, ESI
			SAR EAX, 1
			JNS NoCarry2
			ADC EAX, 0
NoCarry2:
			MOV [ESP], EAX
			PUSH EDI
			PUSH ESI
			MOV ECX, [ESP+08h]
			MOV EDX, EBP
			MOV EAX, [EBX+74h]
			MOV EBX, [EAX]
			CALL [EBX+7Ch]
			ADD ESP, 20
			POP EBP
			POP EDI
			POP ESI
			POP EBX
			RET
PROC__GetMaximumSize:
			PUSH ESI
			PUSH EDI
			PUSH EDX
			PUSH 33
			POP EAX
			CALL PROC__MetricsMax
			MOV ESI, EDI
			PUSH 32
			POP EAX
			CALL PROC__MetricsMax
			MOV EAX, EDI
			MOV ECX, 320
			CDQ
			IDIV ECX
			MOV EDI, EAX
			MOV EAX, ESI
			MOV ECX, 240
			CDQ
			IDIV ECX
			CMP EAX, EDI
			JLE __NoExchange
			XCHG EAX, EDI
__NoExchange:
			CMP EAX, 8
			JLE __NoSizeCap
			MOV AL, 8
__NoSizeCap:
			DEC AL
			POP EDX
			POP EDI
			POP ESI
			RET
PROC__SetResolutionBase:
			MOV ESI, 320
			MOV EDI, 240
			XOR ECX, ECX
			XOR EDX, EDX
			RET
PROC__00455F38h:
			PUSH ESI
			PUSH EDI
			PUSH EBX
			SUB ESP, 16
			MOV EBX, EAX
			CMP DL, BYTE PTR [EBX+31h]
			JZ __CancelWindowed
			MOV EAX, EDX
			MOV BYTE PTR [EBX+31h], AL
			TEST BYTE PTR [EBX+20h], 16
			JNZ __CancelWindowed
			TEST BYTE PTR [EBX+20h], 2
			JNZ __CancelWindowed
			CALL PROC__SetResolutionBase
			CMP BYTE PTR [EBX+30h], 1
			JNZ __SetFlexible
			CMP BYTE PTR [EBX+32h], 0
			JNZ __SetWindow
			PUSH 1
			POP EAX
__SetWindow:
			CALL PROC__ApplyResolution
			JMP __AfterApply
__SetFlexible:
			MOV EAX, EBX
			CALL PROC__00455E58h
__AfterApply:
			CMP BYTE PTR [EBX+A8h], 0
			JZ __SkipThis
			MOV EAX, EBX
			CALL PROC__0045696Ch
__SkipThis:
			MOV EAX, EBX
			CALL PROC__0045693Ch
__CancelWindowed:
			ADD ESP, 16
			POP EBX
			POP EDI
			POP ESI
			RET
PROC__LoopResolution:
			CALL PROC__SetResolutionBase
__ResLoopStep:
			ADD ECX, ESI
			ADD EDX, EDI
			DEC AL
			JNZ __ResLoopStep
			RET
PROC__MetricsMax:
			PUSH EAX
			ADD EAX, 29
			PUSH EAX
			CALL GetSystemMetrics
			MOV EDI, EAX
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EDI, EAX
			RET
PROC__PreviousResolution:
			CMP WORD PTR [ESI], 0074h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+31h]
			TEST DL, DL
			JZ __NoDecrease
			DEC DL
			JMP __CallItNow
__NoDecrease:
			CALL PROC__GetMaximumSize
			MOV DL, AL
			JMP __CallItNow
PROC__NextResolution:
			CMP WORD PTR [ESI], 0075h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+31h]
			INC DL
			CALL PROC__GetMaximumSize
			CMP DL, AL
			JBE __CallItNow
			XOR DL, DL
__CallItNow:
			MOV EAX, EBX
			CALL PROC__00455F38h
__NoChange:
			RET
PROC__ApplyResolution:
			CALL PROC__LoopResolution
			PUSH EDX
			LEA EDX, [ESP+08h]
			PUSH EDX
			MOV EDX, [ESP+04h]
			MOV EAX, ECX
			XOR EDX, EDX
			XOR EAX, EAX
			CALL PROC__0040F16Ch
			LEA ESI, [ESP+04h]
			LEA EDI, [EBX+38h]
			MOVSD
			MOVSD
			MOVSD
			MOVSD
			RET
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
PROC__0046B328h:
			PUSH ESI
			PUSH EDI
			PUSH EBX
			PUSH EBP
			SUB ESP, 20
			MOV EBX, EAX
			MOV AL, BYTE PTR [EBX+3Dh]
			INC AL
			CALL PROC__ApplyResolution
			MOV EBP, 00407174h
			PUSH 7
			CALL EBP
			MOV EDI, EAX
			ADD EDI, EDI
			ADD EDI, [EBX+4Ch]
			ADD EDI, 4
			PUSH 4
			CALL EBP
			MOV ESI, EAX
			ADD ESI, [EBX+50h]
			PUSH 8
			CALL EBP
			ADD EAX, EAX
			ADD ESI, EAX
			ADD ESI, 4
			PUSH 61
			CALL EBP
			PUSH ESI
			MOV ESI, EBP
			MOV EBP, EAX
			PUSH 32
			CALL ESI
			ADD EAX, EAX
			SUB EBP, EAX
			PUSH 62
			CALL ESI
			PUSH EAX
			PUSH 33
			CALL ESI
			ADD EAX, EAX
			POP EDX
			POP ESI
			XCHG EAX, EDX
			SUB EAX, EDX
			SUB EBP, EDI
			SAR EBP, 1
			JNS NoCarry1
			ADC EBP, 0
NoCarry1:
			SUB EAX, ESI
			SAR EAX, 1
			JNS NoCarry2
			ADC EAX, 0
NoCarry2:
			MOV [ESP], EAX
			PUSH EDI
			PUSH ESI
			MOV ECX, [ESP+08h]
			MOV EDX, EBP
			MOV EAX, [EBX+80h]
			MOV EBX, [EAX]
			CALL [EBX+84h]
			ADD ESP, 20
			POP EBP
			POP EBX
			POP EDI
			POP ESI
			RET
PROC__GetMaximumSize:
			PUSH ESI
			PUSH EDI
			PUSH EDX
			PUSH 33
			POP EAX
			CALL PROC__MetricsMax
			MOV ESI, EDI
			PUSH 32
			POP EAX
			CALL PROC__MetricsMax
			MOV EAX, EDI
			MOV ECX, 320
			CDQ
			IDIV ECX
			XCHG EAX, EDI
			XCHG EAX, ESI
			MOV ECX, 240
			CDQ
			IDIV ECX
			CMP EAX, EDI
			JLE __NoExchange
			XCHG EAX, EDI
__NoExchange:
			CMP EAX, 8
			JLE __NoSizeCap
			MOV AL, 8
__NoSizeCap:
			DEC AL
			POP EDX
			POP EDI
			POP ESI
			RET
PROC__SetResolutionBase:
			MOV ESI, 320
			MOV EDI, 240
			XOR ECX, ECX
			XOR EDX, EDX
			RET
PROC__0046B400h:
			PUSH ESI
			PUSH EDI
			PUSH EBX
			SUB ESP, 16
			MOV EBX, EAX
			CMP DL, BYTE PTR [EBX+3Dh]
			JZ __CancelWindowed
			MOV EAX, EDX
			MOV BYTE PTR [EBX+3Dh], AL
			TEST BYTE PTR [EBX+1Ch], 16
			JNZ __CancelWindowed
			TEST BYTE PTR [EBX+1Ch], 2
			JNZ __CancelWindowed
			CALL PROC__SetResolutionBase
			CMP BYTE PTR [EBX+3Ch], 1
			JNZ __SetFlexible
			CMP BYTE PTR [EBX+3Eh], 0
			JNZ __SetWindow
			PUSH 1
			POP EAX
__SetWindow:
			CALL PROC__ApplyResolution
			JMP __AfterApply
__SetFlexible:
			MOV EAX, EBX
			CALL PROC__0046B328h
__AfterApply:
			CMP BYTE PTR [EBX+B0h], 0
			JZ __SkipThis
			MOV EAX, EBX
			CALL PROC__0046BE60h
__SkipThis:
			MOV EAX, EBX
			CALL PROC__0046BE30h
__CancelWindowed:
			ADD ESP, 16
			POP EBX
			POP EDI
			POP ESI
			RET
PROC__LoopResolution:
			CALL PROC__SetResolutionBase
__ResLoopStep:
			ADD ECX, ESI
			ADD EDX, EDI
			DEC AL
			JNZ __ResLoopStep
			RET
PROC__MetricsMax:
			PUSH EAX
			ADD EAX, 29
			PUSH EAX
			CALL GetSystemMetrics
			MOV EDI, EAX
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EDI, EAX
			RET
PROC__PreviousResolution:
			CMP WORD PTR [ESI], 0074h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+3Dh]
			TEST DL, DL
			JZ __NoDecrease
			DEC DL
			JMP __CallItNow
__NoDecrease:
			CALL PROC__GetMaximumSize
			MOV DL, AL
			JMP __CallItNow
PROC__NextResolution:
			CMP WORD PTR [ESI], 0075h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+3Dh]
			INC DL
			CALL PROC__GetMaximumSize
			CMP DL, AL
			JBE __CallItNow
			XOR DL, DL
__CallItNow:
			MOV EAX, EBX
			CALL PROC__0046B400h
__NoChange:
			RET
PROC__ApplyResolution:
			CALL PROC__LoopResolution
			PUSH EDX
			LEA EDX, [ESP+08h]
			PUSH EDX
			XOR EDX, EDX
			XOR EAX, EAX
			CALL PROC__004069B0h
			LEA ESI, [ESP+04h]
			LEA EDI, [EBX+44h]
			MOVSD
			MOVSD
			MOVSD
			MOVSD
			RET
			NOP
			NOP
PROC__0046B328h:
			PUSH ESI
			PUSH EDI
			PUSH EBX
			PUSH EBP
			SUB ESP, 20
			MOV EBX, EAX
			MOV AL, BYTE PTR [EBX+3Dh]
			INC AL
			CALL PROC__ApplyResolution
			MOV EBP, 00407174h
			PUSH 7
			CALL EBP
			MOV EDI, EAX
			ADD EDI, EDI
			ADD EDI, [EBX+4Ch]
			ADD EDI, 4
			PUSH 4
			CALL EBP
			MOV ESI, EAX
			ADD ESI, [EBX+50h]
			PUSH 8
			CALL EBP
			ADD EAX, EAX
			ADD ESI, EAX
			ADD ESI, 4
			PUSH 61
			CALL EBP
			PUSH ESI
			MOV ESI, EBP
			MOV EBP, EAX
			PUSH 32
			CALL ESI
			ADD EAX, EAX
			SUB EBP, EAX
			PUSH 62
			CALL ESI
			PUSH EAX
			PUSH 33
			CALL ESI
			ADD EAX, EAX
			POP EDX
			POP ESI
			XCHG EAX, EDX
			SUB EAX, EDX
			SUB EBP, EDI
			SAR EBP, 1
			JNS NoCarry1
			ADC EBP, 0
NoCarry1:
			SUB EAX, ESI
			SAR EAX, 1
			JNS NoCarry2
			ADC EAX, 0
NoCarry2:
			MOV [ESP], EAX
			PUSH EDI
			PUSH ESI
			MOV ECX, [ESP+08h]
			MOV EDX, EBP
			MOV EAX, [EBX+80h]
			MOV EBX, [EAX]
			CALL [EBX+84h]
			ADD ESP, 20
			POP EBP
			POP EBX
			POP EDI
			POP ESI
			RET
PROC__GetMaximumSize:
			PUSH ESI
			PUSH EDI
			PUSH EDX
			PUSH 33
			POP EAX
			CALL PROC__MetricsMax
			MOV ESI, EDI
			PUSH 32
			POP EAX
			CALL PROC__MetricsMax
			MOV EAX, EDI
			MOV ECX, 320
			CDQ
			IDIV ECX
			XCHG EAX, EDI
			XCHG EAX, ESI
			MOV ECX, 240
			CDQ
			IDIV ECX
			CMP EAX, EDI
			JLE __NoExchange
			XCHG EAX, EDI
__NoExchange:
			CMP EAX, 8
			JLE __NoSizeCap
			MOV AL, 8
__NoSizeCap:
			DEC AL
			POP EDX
			POP EDI
			POP ESI
			RET
PROC__SetResolutionBase:
			MOV ESI, 320
			MOV EDI, 240
			XOR ECX, ECX
			XOR EDX, EDX
			RET
PROC__0046B400h:
			PUSH ESI
			PUSH EDI
			PUSH EBX
			SUB ESP, 16
			MOV EBX, EAX
			CMP DL, BYTE PTR [EBX+3Dh]
			JZ __CancelWindowed
			MOV EAX, EDX
			MOV BYTE PTR [EBX+3Dh], AL
			TEST BYTE PTR [EBX+1Ch], 16
			JNZ __CancelWindowed
			TEST BYTE PTR [EBX+1Ch], 2
			JNZ __CancelWindowed
			CALL PROC__SetResolutionBase
			CMP BYTE PTR [EBX+3Ch], 1
			JNZ __SetFlexible
			CMP BYTE PTR [EBX+3Eh], 0
			JNZ __SetWindow
			PUSH 1
			POP EAX
__SetWindow:
			CALL PROC__ApplyResolution
			JMP __AfterApply
__SetFlexible:
			MOV EAX, EBX
			CALL PROC__0046B328h
__AfterApply:
			CMP BYTE PTR [EBX+B0h], 0
			JZ __SkipThis
			MOV EAX, EBX
			CALL PROC__0046BE60h
__SkipThis:
			MOV EAX, EBX
			CALL PROC__0046BE30h
__CancelWindowed:
			ADD ESP, 16
			POP EBX
			POP EDI
			POP ESI
			RET
PROC__LoopResolution:
			CALL PROC__SetResolutionBase
__ResLoopStep:
			ADD ECX, ESI
			ADD EDX, EDI
			DEC AL
			JNZ __ResLoopStep
			RET
PROC__MetricsMax:
			PUSH EAX
			ADD EAX, 29
			PUSH EAX
			CALL GetSystemMetrics
			MOV EDI, EAX
			CALL GetSystemMetrics
			ADD EAX, EAX
			SUB EDI, EAX
			RET
PROC__PreviousResolution:
			CMP WORD PTR [ESI], 0074h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+3Dh]
			TEST DL, DL
			JZ __NoDecrease
			DEC DL
			JMP __CallItNow
__NoDecrease:
			CALL PROC__GetMaximumSize
			MOV DL, AL
			JMP __CallItNow
PROC__NextResolution:
			CMP WORD PTR [ESI], 0075h
			JNZ __NoChange
			MOV DL, BYTE PTR [EBX+3Dh]
			INC DL
			CALL PROC__GetMaximumSize
			CMP DL, AL
			JBE __CallItNow
			XOR DL, DL
__CallItNow:
			MOV EAX, EBX
			CALL PROC__0046B400h
__NoChange:
			RET
PROC__ApplyResolution:
			CALL PROC__LoopResolution
			PUSH EDX
			LEA EDX, [ESP+08h]
			PUSH EDX
			XOR EDX, EDX
			XOR EAX, EAX
			CALL PROC__004069B0h
			LEA ESI, [ESP+04h]
			LEA EDI, [EBX+44h]
			MOVSD
			MOVSD
			MOVSD
			MOVSD
			RET
			NOP
			NOP

Bytes

53 56 57 55 83EC14 89C3 8A4331 FEC0 E887010000
6A07 E86E13FBFF
89C7 01FF 037B40 83C704 6A04 E85D13FBFF
89C6 037344 6A08 E85113FBFF
01C0 01C6 83C604 6A3D E84313FBFF
89C5 6A20 E83A13FBFF
01C0 29C5 6A3E E82F13FBFF
50 6A21 E82713FBFF
01C0 5A 92 29D0 29FD D1FD 7903
83D500 29F0 D1F8 7903
83D000 890424 57 56 8B4C2408 89EA 8B4374 8B18 FF537C 83C414 5D 5F 5E 5B C3

56 57 52 6A21 58 E8AD000000
89FE 6A20 58 E8A3000000
89F8 B940010000 99 F7F9 89C7 89F0 B9F0000000 99 F7F9 39F8 7E01
97 83F808 7E02
B008 FEC8 5A 5F 5E C3

BE40010000 BFF0000000 31C9 31D2 C3

56 57 53 83EC10 89C3 3A5331 744A
89D0 884331 F6432010 753F
F6432002 7539
E8CEFFFFFF
807B3001 7510
807B3200 7503
6A01 58 E883000000
EB07
89D8 E8E0FEFFFF
80BBA800000000 7407
89D8 E8E4090000
89D8 E8AD090000
83C410 5B 5F 5E C3

E88EFFFFFF
01F1 01FA FEC8 75F8
C3

50 83C01D 50 E83212FBFF
89C7 E82B12FBFF
01C0 29C7 C3

66833E74 7531
8A5331 84D2 7404
FECA EB1F
E81CFFFFFF
88C2 EB16
66833E75 7517
8A5331 FEC2 E808FFFFFF
38C2 7602
30D2 89D8 E847FFFFFF
C3

E89FFFFFFF
52 8D542408 52 8B542404 89C8 31D2 31C0 E89095FBFF
8D742404 8D7B38 A5 A5 A5 A5 C3 90 90 90 90 90 90 90 90
53 56 57 55 83EC14 89C3 8A4331 FEC0 E887010000
6A07 E87614FBFF
89C7 01FF 037B40 83C704 6A04 E86514FBFF
89C6 037344 6A08 E85914FBFF
01C0 01C6 83C604 6A3D E84B14FBFF
89C5 6A20 E84214FBFF
01C0 29C5 6A3E E83714FBFF
50 6A21 E82F14FBFF
01C0 5A 92 29D0 29FD D1FD 7903
83D500 29F0 D1F8 7903
83D000 890424 57 56 8B4C2408 89EA 8B4374 8B18 FF537C 83C414 5D 5F 5E 5B C3

56 57 52 6A21 58 E8AD000000
89FE 6A20 58 E8A3000000
89F8 B940010000 99 F7F9 89C7 89F0 B9F0000000 99 F7F9 39F8 7E01
97 83F808 7E02
B008 FEC8 5A 5F 5E C3

BE40010000 BFF0000000 31C9 31D2 C3

56 57 53 83EC10 89C3 3A5331 744A
89D0 884331 F6432010 753F
F6432002 7539
E8CEFFFFFF
807B3001 7510
807B3200 7503
6A01 58 E883000000
EB07
89D8 E8E0FEFFFF
80BBA800000000 7407
89D8 E8E4090000
89D8 E8AD090000
83C410 5B 5F 5E C3

E88EFFFFFF
01F1 01FA FEC8 75F8
C3

50 83C01D 50 E83A13FBFF
89C7 E83313FBFF
01C0 29C7 C3

66833E74 7531
8A5331 84D2 7404
FECA EB1F
E81CFFFFFF
88C2 EB16
66833E75 7517
8A5331 FEC2 E808FFFFFF
38C2 7602
30D2 89D8 E847FFFFFF
C3

E89FFFFFFF
52 8D542408 52 8B542404 89C8 31D2 31C0 E86896FBFF {0x40ECA0-0x455638=FFFB9668}
8D742404 8D7B38 A5 A5 A5 A5 C3 90 90 90 90 90 90 90 90
53 56 57 55 83EC14 89C3 8A4331 FEC0 E887010000
6A07 E82E10FBFF
89C7 01FF 037B40 83C704 6A04 E81D10FBFF
89C6 037344 6A08 E81110FBFF
01C0 01C6 83C604 6A3D E80310FBFF
89C5 6A20 E8FA0FFBFF
01C0 29C5 6A3E E8EF0FFBFF
50 6A21 E8E70FFBFF
01C0 5A 92 29D0 29FD D1FD 7903
83D500 29F0 D1F8 7903
83D000 890424 57 56 8B4C2408 89EA 8B4374 8B18 FF537C 83C414 5D 5F 5E 5B C3

56 57 52 6A21 58 E8AD000000
89FE 6A20 58 E8A3000000
89F8 B940010000 99 F7F9 89C7 89F0 B9F0000000 99 F7F9 39F8 7E01
97 83F808 7E02
B008 FEC8 5A 5F 5E C3

BE40010000 BFF0000000 31C9 31D2 C3

56 57 53 83EC10 89C3 3A5331 744A
89D0 884331 F6432010 753F
F6432002 7539
E8CEFFFFFF
807B3001 7510
807B3200 7503
6A01 58 E883000000
EB07
89D8 E8E0FEFFFF
80BBA800000000 7407
89D8 E8E4090000
89D8 E8AD090000
83C410 5B 5F 5E C3

E88EFFFFFF
01F1 01FA FEC8 75F8
C3

50 83C01D 50 E8F20EFBFF
89C7 E8EB0EFBFF
01C0 29C7 C3

66833E74 7531
8A5331 84D2 7404
FECA EB1F
E81CFFFFFF
88C2 EB16
66833E75 7517
8A5331 FEC2 E808FFFFFF
38C2 7602
30D2 89D8 E847FFFFFF
C3

E89FFFFFFF
52 8D542408 52 8B542404 89C8 31D2 31C0 E8AC92FBFF
8D742404 8D7B38 A5 A5 A5 A5 C3 90 90 90 90 90 90 90 90
53 56 57 55 83EC14 89C3 8A4331 FEC0 E887010000
6A07 E8E60AFBFF
89C7 01FF 037B40 83C704 6A04 E8D50AFBFF
89C6 037344 6A08 E8C90AFBFF
01C0 01C6 83C604 6A3D E8BB0AFBFF
89C5 6A20 E8B20AFBFF
01C0 29C5 6A3E E8A70AFBFF
50 6A21 E89F0AFBFF
01C0 5A 92 29D0 29FD D1FD 7903
83D500 29F0 D1F8 7903
83D000 890424 57 56 8B4C2408 89EA 8B4374 8B18 FF537C 83C414 5D 5F 5E 5B C3

56 57 52 6A21 58 E8AD000000
89FE 6A20 58 E8A3000000
89F8 B940010000 99 F7F9 89C7 89F0 B9F0000000 99 F7F9 39F8 7E01
97 83F808 7E02
B008 FEC8 5A 5F 5E C3

BE40010000 BFF0000000 31C9 31D2 C3

56 57 53 83EC10 89C3 3A5331 744A
89D0 884331 F6432010 753F
F6432002 7539
E8CEFFFFFF
807B3001 7510
807B3200 7503
6A01 58 E883000000
EB07
89D8 E8E0FEFFFF
80BBA800000000 7407
89D8 E8E4090000
89D8 E8AD090000
83C410 5B 5F 5E C3

E88EFFFFFF
01F1 01FA FEC8 75F8
C3

50 83C01D 50 E8AA09FBFF
89C7 E8A309FBFF
01C0 29C7 C3

66833E74 7531
8A5331 84D2 7404
FECA EB1F
E81CFFFFFF
88C2 EB16
66833E75 7517
8A5331 FEC2 E808FFFFFF
38C2 7602
30D2 89D8 E847FFFFFF
C3

E89FFFFFFF
52 8D542408 52 8B542404 89C8 31D2 31C0 E86091FBFF
8D742404 8D7B38 A5 A5 A5 A5 C3 90 90 90 90 90 90 90 90
56 57 53 55 83EC14 89C3 8A433D FEC0 E87F010000
BD74714000
6A07 FFD5 89C7 01FF 037B4C 83C704
6A04 FFD5 89C6 037350
6A08 FFD5 01C0 01C6 83C604
6A3D FFD5 56 89EE 89C5
6A20 FFD6 01C0 29C5
6A3E FFD6 50
6A21 FFD6 01C0 5A 5E 92 29D0 29FD D1FD 7903
83D500 29F0 D1F8 7903
83D000 890424 57 56 8B4C2408 89EA 8B8380000000 8B18 FF9384000000 83C414 5D 5B 5F 5E C3

56 57 52 6A21 58 E8AB000000
89FE 6A20 58 E8A1000000
89F8 B940010000 99 F7F9 97 96 B9F0000000 99 F7F9 39F8 7E01
97 83F808 7E02
B008 FEC8 5A 5F 5E C3

BE40010000 BFF0000000 31C9 31D2 C3

56 57 53 83EC10 89C3 3A533D 744A
89D0 88433D F6431C10 753F
F6431C02 7539
E8CEFFFFFF
807B3C01 7510
807B3E00 7503
6A01 58 E883000000
EB07
89D8 E8E8FEFFFF
80BBB000000000 7407
89D8 E8100A0000
89D8 E8D9090000
83C410 5B 5F 5E C3

E88EFFFFFF 01F1 01FA FEC8 75F8
C3

50 83C01D 50 E8FEBCF9FF
89C7 E8F7BCF9FF
01C0 29C7 C3

66833E74 7531
8A533D 84D2 7404
FECA EB1F
E81EFFFFFF
88C2 EB16
66833E75 7517
8A533D FEC2 E80AFFFFFF
38C2 7602
30D2 89D8 E847FFFFFF
C3

E89FFFFFFF
52 8D542408 52 31D2 31C0 E8E2B4F9FF
8D742404 8D7B44 A5 A5 A5 A5 C3 90 90
56 57 53 55 83EC14 89C3 8A433D FEC0 E87F010000
BD74714000
6A07 FFD5 89C7 01FF 037B4C 83C704
6A04 FFD5 89C6 037350
6A08 FFD5 01C0 01C6 83C604
6A3D FFD5 56 89EE 89C5
6A20 FFD6 01C0 29C5
6A3E FFD6 50
6A21 FFD6 01C0 5A 5E 92 29D0 29FD D1FD 7903
83D500 29F0 D1F8 7903
83D000 890424 57 56 8B4C2408 89EA 8B8380000000 8B18 FF9384000000 83C414 5D 5B 5F 5E C3

56 57 52 6A21 58 E8AB000000
89FE 6A20 58 E8A1000000
89F8 B940010000 99 F7F9 97 96 B9F0000000 99 F7F9 39F8 7E01
97 83F808 7E02
B008 FEC8 5A 5F 5E C3

BE40010000 BFF0000000 31C9 31D2 C3

56 57 53 83EC10 89C3 3A533D 744A
89D0 88433D F6431C10 753F
F6431C02 7539
E8CEFFFFFF
807B3C01 7510
807B3E00 7503
6A01 58 E883000000
EB07
89D8 E8E8FEFFFF
80BBB000000000 7407
89D8 E8100A0000
89D8 E8D9090000
83C410 5B 5F 5E C3

E88EFFFFFF 01F1 01FA FEC8 75F8
C3

50 83C01D 50 E8FEBCF9FF
89C7 E8F7BCF9FF
01C0 29C7 C3

66833E74 7531
8A533D 84D2 7404
FECA EB1F
E81EFFFFFF
88C2 EB16
66833E75 7517
8A533D FEC2 E80AFFFFFF
38C2 7602
30D2 89D8 E847FFFFFF
C3

E89FFFFFFF
52 8D542408 52 31D2 31C0 E8E2B4F9FF
8D742404 8D7B44 A5 A5 A5 A5 C3 90 90

Segment 3/7

Offsets

RPG2000
2000-12-27
1.07
2001-05-05
1.10
2003-06-25
1.51/1.52
2017-09-14
1.62
00455A69h
00054E69
00455961h
00054D61
00455DD1h
000551D1
00456335h
00055735
RPG2003
1.0.8.0
1.0.8.0
1.0.9.1
1.0.9.1
0046B809h
0006AC09
0046B809h
0006AC09

Sourcecode

			JMP __00455AC2h
			NOP
			JMP __004559BAh
			NOP
			JMP __00455E2Ah
			NOP
			JMP __0045638Eh
			NOP
			JMP __0046B862h
			NOP
			JMP __0046B862h
			NOP

Bytes

EB57 90
EB57 90
EB57 90
EB57 90
EB57 90
EB57 90

Segment 4/7

Offsets

RPG2000
2000-12-27
1.07
2001-05-05
1.10
2003-06-25
1.51/1.52
2017-09-14
1.62
00455AEDh
00054EED
004559E5h
00054DE5
00455E55h
00055255
004563B9h
000557B9
RPG2003
1.0.8.0
1.0.8.0
1.0.9.1
1.0.9.1
0046B88Dh
0006AC8D
0046B88Dh
0006AC8D

Sourcecode

			PUSH 123h				; NOSIZE | NOMOVE | DRAWFRAME | NOCOPYBITS
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH -2					; NOTOPMOST
			MOV EAX, [EBP-04h]
			MOV EAX, [EAX+74h]
			CALL PROC__0042AFB0h
			PUSH EAX				; HWND
			CALL PROC__00406B24h			; user32::SetWindowPos
			JMP __00455B1Dh
			PUSH 123h				; NOSIZE | NOMOVE | DRAWFRAME | NOCOPYBITS
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH -2					; NOTOPMOST
			MOV EAX, [EBP-04h]
			MOV EAX, [EAX+74h]
			CALL PROC__0042AF44h
			PUSH EAX				; HWND
			CALL PROC__00406B24h			; user32::SetWindowPos
			JMP __00455A15h
			PUSH 123h				; NOSIZE | NOMOVE | DRAWFRAME | NOCOPYBITS
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH -2					; NOTOPMOST
			MOV EAX, [EBP-04h]
			MOV EAX, [EAX+74h]
			CALL PROC__0042B084h
			PUSH EAX				; HWND
			CALL PROC__00406B4Ch			; user32::SetWindowPos
			JMP __00455E85h
			PUSH 123h				; NOSIZE | NOMOVE | DRAWFRAME | NOCOPYBITS
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH -2					; NOTOPMOST
			MOV EAX, [EBP-04h]
			MOV EAX, [EAX+74h]
			CALL PROC__0042B5E8h
			PUSH EAX				; HWND
			CALL PROC__00406B68h			; user32::SetWindowPos
			JMP __004563E9h
			PUSH 123h				; NOSIZE | NOMOVE | DRAWFRAME | NOCOPYBITS
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH -2					; NOTOPMOST
			MOV EAX, [EBP-04h]
			MOV EAX, [EAX+80h]
			CALL PROC__0043C484h
			PUSH EAX				; HWND
			CALL PROC__00407394h			; user32::SetWindowPos
			JMP __0046B8C0h
			PUSH 123h				; NOSIZE | NOMOVE | DRAWFRAME | NOCOPYBITS
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH 0
			PUSH -2					; NOTOPMOST
			MOV EAX, [EBP-04h]
			MOV EAX, [EAX+80h]
			CALL PROC__0043C484h
			PUSH EAX				; HWND
			CALL PROC__00407394h			; user32::SetWindowPos
			JMP __0046B8C0h

Bytes

6823010000 6A00 6A00 6A00 6A00 6AFE 8B45FC 8B4074 E8A954FDFF
50 E81710FBFF
EB0E
6823010000 6A00 6A00 6A00 6A00 6AFE 8B45FC 8B4074 E8E95BFDFF
50 E86311FBFF
EB0E
6823010000 6A00 6A00 6A00 6A00 6AFE 8B45FC 8B4074 E87957FDFF
50 E8F30CFBFF
EB0E
6823010000 6A00 6A00 6A00 6A00 6AFE 8B45FC 8B4074 E81552FDFF
50 E88F07FBFF
EB0E
6823010000 6A00 6A00 6A00 6A00 6AFE 8B45FC 8B8080000000 E8DD0BFDFF
50 E8E7BAF9FF
EB0E
6823010000 6A00 6A00 6A00 6A00 6AFE 8B45FC 8B8080000000 E8DD0BFDFF
50 E8E7BAF9FF
EB0E

Segment 5/7

Offsets

RPG2000
2000-12-27
1.07
2001-05-05
1.10
2003-06-25
1.51/1.52
2017-09-14
1.62
004560A0h
000554A0
00455F98h
00055398
00456408h
00055808
0045696Ch
00055D6C
RPG2003
1.0.8.0
1.0.8.0
1.0.9.1
1.0.9.1
0046BE60h
0006B260
0046BE60h
0006B260

Sourcecode

PROC_004560A0h:
			PUSH ESI
			PUSH EBX
			MOV ESI, EAX
			MOV EAX, [ESI+40h]
			SUB EAX, [ESI+38h]
			XOR EDX, EDX
			MOV ECX, 320
			DIV ECX
			XCHG EBX, EAX
			MOV EAX, [ESI+44h]
			SUB EAX, [ESI+3Ch]
			XOR EDX, EDX
			MOV ECX, 240
			DIV ECX
			CMP EAX, EBX
			JA __Continue
			XCHG EBX, EAX
__Continue:
			MOV EAX, [ESI+70h]
			IMUL EAX, EBX
			PUSH EAX				; vB = (Movie::Height * Zoom)
			MOV EAX, [ESI+6Ch]
			IMUL EAX, EBX
			PUSH EAX				; vR = (Movie::Width * Zoom)
			MOV EAX, [ESI+68h]
			IMUL EAX, EBX
			ADD EAX, [ESI+3Ch]
			PUSH EAX				; vT = (Movie::X * Zoom) + Game::Top
			MOV EAX, [ESI+64h]
			IMUL EAX, EBX
			ADD EAX, [ESI+38h]
			PUSH EAX				; vL = (Movie::Y * Zoom) + Game::Left
			MOV EAX, [ESI+54h]
			PUSH EAX				; IVideoWindow Instance
			MOV EAX, [EAX]				
			CALL [EAX+9Ch]				; IVideoWindow::SetWindowPosition(vL, vT, vR, vB)
			CALL PROC__00405518h
			POP EBX
			POP ESI
			RET
			30 NOPs
PROC_00455F98h:
			PUSH ESI
			PUSH EBX
			MOV ESI, EAX
			MOV EAX, [ESI+40h]
			SUB EAX, [ESI+38h]
			XOR EDX, EDX
			MOV ECX, 320
			DIV ECX
			XCHG EBX, EAX
			MOV EAX, [ESI+44h]
			SUB EAX, [ESI+3Ch]
			XOR EDX, EDX
			MOV ECX, 240
			DIV ECX
			CMP EAX, EBX
			JA __Continue
			XCHG EBX, EAX
__Continue:
			MOV EAX, [ESI+70h]
			IMUL EAX, EBX
			PUSH EAX				; vB = (Movie::Height * Zoom)
			MOV EAX, [ESI+6Ch]
			IMUL EAX, EBX
			PUSH EAX				; vR = (Movie::Width * Zoom)
			MOV EAX, [ESI+68h]
			IMUL EAX, EBX
			ADD EAX, [ESI+3Ch]
			PUSH EAX				; vT = (Movie::X * Zoom) + Game::Top
			MOV EAX, [ESI+64h]
			IMUL EAX, EBX
			ADD EAX, [ESI+38h]
			PUSH EAX				; vL = (Movie::Y * Zoom) + Game::Left
			MOV EAX, [ESI+54h]
			PUSH EAX				; IVideoWindow Instance
			MOV EAX, [EAX]				
			CALL [EAX+9Ch]				; IVideoWindow::SetWindowPosition(vL, vT, vR, vB)
			CALL PROC__00405518h
			POP EBX
			POP ESI
			RET
			30 NOPs
PROC_00456408h:
			PUSH ESI
			PUSH EBX
			MOV ESI, EAX
			MOV EAX, [ESI+40h]
			SUB EAX, [ESI+38h]
			XOR EDX, EDX
			MOV ECX, 320
			DIV ECX
			XCHG EBX, EAX
			MOV EAX, [ESI+44h]
			SUB EAX, [ESI+3Ch]
			XOR EDX, EDX
			MOV ECX, 240
			DIV ECX
			CMP EAX, EBX
			JA __Continue
			XCHG EBX, EAX
__Continue:
			MOV EAX, [ESI+70h]
			IMUL EAX, EBX
			PUSH EAX				; vB = (Movie::Height * Zoom)
			MOV EAX, [ESI+6Ch]
			IMUL EAX, EBX
			PUSH EAX				; vR = (Movie::Width * Zoom)
			MOV EAX, [ESI+68h]
			IMUL EAX, EBX
			ADD EAX, [ESI+3Ch]
			PUSH EAX				; vT = (Movie::X * Zoom) + Game::Top
			MOV EAX, [ESI+64h]
			IMUL EAX, EBX
			ADD EAX, [ESI+38h]
			PUSH EAX				; vL = (Movie::Y * Zoom) + Game::Left
			MOV EAX, [ESI+54h]
			PUSH EAX				; IVideoWindow Instance
			MOV EAX, [EAX]				
			CALL [EAX+9Ch]				; IVideoWindow::SetWindowPosition(vL, vT, vR, vB)
			CALL PROC__00405530h
			POP EBX
			POP ESI
			RET
			30 NOPs
PROC_0045696Ch:
			PUSH ESI
			PUSH EBX
			MOV ESI, EAX
			MOV EAX, [ESI+40h]
			SUB EAX, [ESI+38h]
			XOR EDX, EDX
			MOV ECX, 320
			DIV ECX
			XCHG EBX, EAX
			MOV EAX, [ESI+44h]
			SUB EAX, [ESI+3Ch]
			XOR EDX, EDX
			MOV ECX, 240
			DIV ECX
			CMP EAX, EBX
			JA __Continue
			XCHG EBX, EAX
__Continue:
			MOV EAX, [ESI+70h]
			IMUL EAX, EBX
			PUSH EAX				; vB = (Movie::Height * Zoom)
			MOV EAX, [ESI+6Ch]
			IMUL EAX, EBX
			PUSH EAX				; vR = (Movie::Width * Zoom)
			MOV EAX, [ESI+68h]
			IMUL EAX, EBX
			ADD EAX, [ESI+3Ch]
			PUSH EAX				; vT = (Movie::X * Zoom) + Game::Top
			MOV EAX, [ESI+64h]
			IMUL EAX, EBX
			ADD EAX, [ESI+38h]
			PUSH EAX				; vL = (Movie::Y * Zoom) + Game::Left
			MOV EAX, [ESI+54h]
			PUSH EAX				; IVideoWindow Instance
			MOV EAX, [EAX]				
			CALL [EAX+9Ch]				; IVideoWindow::SetWindowPosition(vL, vT, vR, vB)
			CALL PROC__0040553Ch
			POP EBX
			POP ESI
			RET
			30 NOPs
PROC_0046BE60h:
			PUSH ESI
			PUSH EBX
			MOV ESI, EAX
			MOV EAX, [ESI+4Ch]
			SUB EAX, [ESI+44h]
			XOR EDX, EDX
			MOV ECX, 320
			DIV ECX
			XCHG EBX, EAX
			MOV EAX, [ESI+50h]
			SUB EAX, [ESI+48h]
			XOR EDX, EDX
			MOV ECX, 240
			DIV ECX
			CMP EAX, EBX
			JA __Continue
			XCHG EBX, EAX
__Continue:
			MOV EAX, [ESI+7Ch]
			IMUL EAX, EBX
			PUSH EAX				; vB = (Movie::Height * Zoom)
			MOV EAX, [ESI+78h]
			IMUL EAX, EBX
			PUSH EAX				; vR = (Movie::Width * Zoom)
			MOV EAX, [ESI+74h]
			IMUL EAX, EBX
			ADD EAX, [ESI+48h]
			PUSH EAX				; vT = (Movie::X * Zoom) + Game::Top
			MOV EAX, [ESI+70h]
			IMUL EAX, EBX
			ADD EAX, [ESI+44h]
			PUSH EAX				; vL = (Movie::Y * Zoom) + Game::Left
			MOV EAX, [ESI+60h]
			PUSH EAX				; IVideoWindow Instance
			MOV EAX, [EAX]				
			CALL [EAX+9Ch]				; IVideoWindow::SetWindowPosition(vL, vT, vR, vB)
			CALL PROC__00406350h
			POP EBX
			POP ESI
			RET
			30 NOPs
PROC_0046BE60h:
			PUSH ESI
			PUSH EBX
			MOV ESI, EAX
			MOV EAX, [ESI+4Ch]
			SUB EAX, [ESI+44h]
			XOR EDX, EDX
			MOV ECX, 320
			DIV ECX
			XCHG EBX, EAX
			MOV EAX, [ESI+50h]
			SUB EAX, [ESI+48h]
			XOR EDX, EDX
			MOV ECX, 240
			DIV ECX
			CMP EAX, EBX
			JA __Continue
			XCHG EBX, EAX
__Continue:
			MOV EAX, [ESI+7Ch]
			IMUL EAX, EBX
			PUSH EAX				; vB = (Movie::Height * Zoom)
			MOV EAX, [ESI+78h]
			IMUL EAX, EBX
			PUSH EAX				; vR = (Movie::Width * Zoom)
			MOV EAX, [ESI+74h]
			IMUL EAX, EBX
			ADD EAX, [ESI+48h]
			PUSH EAX				; vT = (Movie::X * Zoom) + Game::Top
			MOV EAX, [ESI+70h]
			IMUL EAX, EBX
			ADD EAX, [ESI+44h]
			PUSH EAX				; vL = (Movie::Y * Zoom) + Game::Left
			MOV EAX, [ESI+60h]
			PUSH EAX				; IVideoWindow Instance
			MOV EAX, [EAX]				
			CALL [EAX+9Ch]				; IVideoWindow::SetWindowPosition(vL, vT, vR, vB)
			CALL PROC__00406350h
			POP EBX
			POP ESI
			RET
			30 NOPs

Bytes

56 53 89C6 8B4640 2B4638 31D2 B940010000 F7F1 93 8B4644 2B463C 31D2 B9F0000000 F7F1 39D8 7701
93 8B4670 0FAFC3 50
8B466C 0FAFC3 50
8B4668 0FAFC3 03463C 50
8B4664 0FAFC3 034638 50
8B4654 50 8B00 FF909C000000 E81DF4FAFF
5B 5E C3
56 53 89C6 8B4640 2B4638 31D2 B940010000 F7F1 93 8B4644 2B463C 31D2 B9F0000000 F7F1 39D8 7701
93 8B4670 0FAFC3 50
8B466C 0FAFC3 50
8B4668 0FAFC3 03463C 50
8B4664 0FAFC3 034638 50
8B4654 50 8B00 FF909C000000 E849F5FAFF
5B 5E C3
56 53 89C6 8B4640 2B4638 31D2 B940010000 F7F1 93 8B4644 2B463C 31D2 B9F0000000 F7F1 39D8 7701
93 8B4670 0FAFC3 50
8B466C 0FAFC3 50
8B4668 0FAFC3 03463C 50
8B4664 0FAFC3 034638 50
8B4654 50 8B00 FF909C000000 E8D9F0FAFF
5B 5E C3
56 53 89C6 8B4640 2B4638 31D2 B940010000 F7F1 93 8B4644 2B463C 31D2 B9F0000000 F7F1 39D8 7701
93 8B4670 0FAFC3 50
8B466C 0FAFC3 50
8B4668 0FAFC3 03463C 50
8B4664 0FAFC3 034638 50
8B4654 50 8B00 FF909C000000 E875EBFAFF
5B 5E C3
56 53 89C6 8B464C 2B4644 31D2 B940010000 F7F1 93 8B4650 2B4648 31D2 B9F0000000 F7F1 39D8 7701
93 8B467C 0FAFC3 50
8B4678 0FAFC3 50
8B4674 0FAFC3 034648 50
8B4670 0FAFC3 034644 50
8B4660 50 8B00 FF909C000000 E895A4F9FF
5B 5E C3
56 53 89C6 8B464C 2B4644 31D2 B940010000 F7F1 93 8B4650 2B4648 31D2 B9F0000000 F7F1 39D8 7701
93 8B467C 0FAFC3 50
8B4678 0FAFC3 50
8B4674 0FAFC3 034648 50
8B4670 0FAFC3 034644 50
8B4660 50 8B00 FF909C000000 E895A4F9FF
5B 5E C3

Segment 6/7

Offsets

RPG2000
2000-12-27
1.07
2001-05-05
1.10
2003-06-25
1.51/1.52
2017-09-14
1.62
004968F2h
00095CF2h
004968BEh
00095CBEh
0049BDCAh
0009B1CAh
004739C6h
00072DC6h
RPG2003
1.0.8.0
1.0.8.0
1.0.9.1
1.0.9.1
0048FA4Ah
0008EE4Ah
004C8C8Eh
000C808Eh

Sourcecode

			JMP __00496901h
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			JMP __004968CDh
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			JMP __0049BDD9h
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			JMP __004739D5h
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			JMP __0048FA59h
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			JMP __004C8C9Dh
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP

Bytes

EB0D
90 90 90 90 90 90 90 90 90 90 90 90 90
EB0D
90 90 90 90 90 90 90 90 90 90 90 90 90
EB0D
90 90 90 90 90 90 90 90 90 90 90 90 90
EB0D
90 90 90 90 90 90 90 90 90 90 90 90 90
EB0D
90 90 90 90 90 90 90 90 90 90 90 90 90
EB0D
90 90 90 90 90 90 90 90 90 90 90 90 90

Segment 7/7

Offsets

RPG2000
2000-12-27
1.07
2001-05-05
1.10
2003-06-25
1.51/1.52
2017-09-14
1.62
0049690Ch
00095D0Ch
004968D8h
00095CD8h
0049BDE4h
0009B1E4h
004739E0h
00072DE0h
RPG2003
1.0.8.0
1.0.8.0
1.0.9.1
1.0.9.1
0048FA64h
0008EE64h
004C8CA8h
000C80A8h

Sourcecode

			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP
			NOP

Bytes

90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90