mirror of https://github.com/nmlgc/ReC98.git
107 lines
1.6 KiB
NASM
107 lines
1.6 KiB
NASM
|
scoredat_func macro nam:req
|
||
|
public nam
|
||
|
nam proc near
|
||
|
if GAME eq 5
|
||
|
push si
|
||
|
mov bx, offset _hi
|
||
|
else
|
||
|
mov bx, sp
|
||
|
push si
|
||
|
mov bx, ss:[bx+2]
|
||
|
endif
|
||
|
mov si, bx
|
||
|
|
||
|
endfunc macro
|
||
|
pop si
|
||
|
if GAME eq 5
|
||
|
retn
|
||
|
nam endp
|
||
|
else
|
||
|
retn 2
|
||
|
nam endp
|
||
|
; TODO: Turn into unconditional EVEN once this is a separate
|
||
|
; translation unit
|
||
|
even
|
||
|
endif
|
||
|
endm
|
||
|
endm
|
||
|
|
||
|
scoredat_func SCOREDAT_DECODE
|
||
|
mov cx, size scoredat_t - 1
|
||
|
|
||
|
if GAME eq 5
|
||
|
mov dx, word ptr [bx+scoredat_section_t.key1]
|
||
|
add bx, scoredat_section_t.score
|
||
|
|
||
|
@@decode:
|
||
|
mov al, [bx+1]
|
||
|
ror al, 3
|
||
|
xor al, dh
|
||
|
add al, dl
|
||
|
add [bx], al
|
||
|
inc bx
|
||
|
loop @@decode
|
||
|
add [bx], dl
|
||
|
mov cx, size scoredat_t
|
||
|
xor bx, bx
|
||
|
else
|
||
|
mov ah, [bx+scoredat_section_t.key2]
|
||
|
add bx, scoredat_section_t.score
|
||
|
|
||
|
@@decode:
|
||
|
mov al, [bx+1]
|
||
|
ror al, 3
|
||
|
xor al, ah
|
||
|
add al, [si+scoredat_section_t.key1]
|
||
|
add [bx], al
|
||
|
inc bx
|
||
|
loop @@decode
|
||
|
mov al, [si+scoredat_section_t.key1]
|
||
|
add [bx], al
|
||
|
xor bx, bx
|
||
|
mov cx, size scoredat_t
|
||
|
endif
|
||
|
|
||
|
xor dx, dx
|
||
|
mov ax, [si+scoredat_section_t.sum]
|
||
|
add si, scoredat_section_t.score
|
||
|
|
||
|
@@sum:
|
||
|
mov bl, [si]
|
||
|
add dx, bx
|
||
|
inc si
|
||
|
loop @@sum
|
||
|
sub ax, dx
|
||
|
endfunc
|
||
|
|
||
|
|
||
|
scoredat_func SCOREDAT_ENCODE
|
||
|
xor dx, dx
|
||
|
xor ax, ax
|
||
|
add bx, scoredat_section_t.score
|
||
|
mov cx, size scoredat_t
|
||
|
|
||
|
@@sum:
|
||
|
mov dl, [bx]
|
||
|
add ax, dx
|
||
|
inc bx
|
||
|
loop @@sum
|
||
|
mov [si+scoredat_section_t.sum], ax
|
||
|
call IRand
|
||
|
mov word ptr [si+scoredat_section_t.key1], ax
|
||
|
xor dx, dx
|
||
|
add si, size scoredat_section_t - 1
|
||
|
mov cx, size scoredat_t
|
||
|
|
||
|
@@encode:
|
||
|
add dl, al
|
||
|
sub [si], dl
|
||
|
mov dl, [si]
|
||
|
ror dl, 3
|
||
|
xor dl, ah
|
||
|
dec si
|
||
|
loop @@encode
|
||
|
endfunc
|
||
|
|
||
|
purge scoredat_func
|