Ok, poradziłem sobie. Trochę na okolo, ale działa. Gra się nie wywala (przez to sprawdznie czy ostatni kod - cheat którego nie zmieniamy zaczyna się od 5
(35h). Ponieważ inaczej, po starcie gry wywaliła by ona komunikat o błedzie. Dlatego nadpisane są inne obrazki. Mam nadzieję, że kod się komuś przyda na przyszłośc do podobnego modzenia z grami. Wersję Polską można za to łatwiej "złamać", bo kody są jawnie w rozpakowanych plikach, co wystarczy podmienić. Zresztą jeżeli grę chcemy uruchamiać z takim TSR'ami to raczej z pod DosBOx'a, a nie SCUMMVM. Ponieważ ten drugi emulator wiadomo uruchamia gry po swojemu, a twórcy są przeciwni łamania zabezpieczeń w grach, które i tak już często legalnie zdobyć nie mozemy, a poza tym są to imo abandonware i tyle :)
TSR_IRQ equ 16h
.model tiny
.code
.386
org 100h
Start:
jmp RealStart
OldProc dd 0
MyMarker db 'LARRY2_ENGVER_CRACK_BY_OLESIO'
My_Marker_Length equ $ - offset MyMarker
TSRProc:
push bp
mov bp,sp
add bp,2
pusha
push es
push ds
push word ptr ss:[bp+2] ;CS
pop ax
sub ax,2A4Fh ;AX-???=DS
mov es,ax ;ES=CS
mov ds,ax ;DS=DS
mov esi,04E44h
cmp byte ptr ds:[esi-28h],48h
jne EndOfTSR
cmp byte ptr ds:[esi-27h],61h
jne EndOfTSR
cmp byte ptr ds:[esi-26h],76h
jne EndOfTSR
cmp byte ptr ds:[esi-25h],65h
jne EndOfTSR
mov al, byte ptr ds:[esi+0]
mov chr0, al
mov al, byte ptr ds:[esi+1]
mov chr1, al
mov al, byte ptr ds:[esi+2]
mov chr2, al
mov al, byte ptr ds:[esi+3]
mov chr3, al
mov al, byte ptr ds:[esi+4]
mov chr4, al
mov al, byte ptr ds:[esi+5]
mov chr5, al
mov al, byte ptr ds:[esi+6]
mov chr6, al
mov al, byte ptr ds:[esi+7]
mov chr7, al
mov al,0
mov esi,0BA0Ah
cmp byte ptr ds:[esi+87h],35h
jne EndOfTSR
PatchLoop:
mov bl,chr0
mov byte ptr ds:[esi+0],bl
mov bl,chr1
mov byte ptr ds:[esi+1],bl
mov bl,chr2
mov byte ptr ds:[esi+2],bl
mov bl,chr3
mov byte ptr ds:[esi+3],bl
mov bl,chr4
mov byte ptr ds:[esi+4],bl
mov bl,chr5
mov byte ptr ds:[esi+5],bl
mov bl,chr6
mov byte ptr ds:[esi+6],bl
mov bl,chr7
mov byte ptr ds:[esi+7],bl
add esi,9
add al,1
cmp al,14
jbe PatchLoop
EndOfTSR:
pop ds
pop es
popa
pop bp
jmp dword ptr cs:[OldProc]
RealStart:
mov ax,3
int 10h
mov ah,9
mov dx,offset LogoText
int 21h
mov si,81h
mov ah,35h
mov al,TSR_IRQ
int 21h
mov si,offset MyMarker
mov di,si
mov cx,My_Marker_Length
cld
repe cmpsb
jne InstallNow
mov dx,word ptr es:[OldProc]
mov ax,word ptr es:[OldProc +2]
mov ds,ax
mov ah,25h
mov al,TSR_IRQ
int 21h
mov ah,49h
int 21h
mov ax,cs
mov ds,ax
mov ah,9
mov dx,offset UninstalledText
int 21h
mov ax,4c02h
int 21h
InstallNow:
mov ax,word ptr ds:[2ch]
mov es,ax
mov ah,49h
int 21h
mov ah,35h
mov al,TSR_IRQ
int 21h
mov word ptr cs:[OldProc],bx
mov word ptr cs:[OldProc+2],es
mov ah,25h
mov al,TSR_IRQ
mov dx,offset TSRProc
int 21h
mov ah,9
mov dx,offset InstalledText
int 21h
mov dx,offset RealStart
int 27h
LogoText db 13,10,13,10
db ' ________ _________ ____ _________ __________ ____ ________'
db 13,10
db ' E _\ __/_/ \ \/ /_ _ /_\__ /_ \/ /_ / /_'
db 13,10
db ' H \ / / / / _/ ____/ _ _/ \ _/__ _/'
db 13,10
db ' T /________\______/___\/___\___/ /_________\___\____\/_______\spot'
db 13,10,13,10
db ' Leisure Suit Larry Goes Looking for Love version 1.002.000'
db 13,10
db ' For English language version of game - TSR crack by olesio'
db 13,10
db ' Adapted from source code of Gods trainer by beanus & CoxoC'
db 13,10,13,10,'$'
InstalledText db ' Crack has been installed in memory.',13,10,13,10,'$'
UninstalledText db ' Crack has been removed from memory.',13,10,13,10,'$'
chr0 db 0
chr1 db 0
chr2 db 0
chr3 db 0
chr4 db 0
chr5 db 0
chr6 db 0
chr7 db 0
end Start