; Wedding wishes for icabod ; start: 2007.08.29 ; stop: 2007.08.31 ; author/idea/code: Krystian 'Tygrys' Wlosek ; support: LaesQ ; pics processing: mbw (tumash) ; gfx: bmp2scr ; music: Yerzmyey DEBUG EQU 0 PLAYER EQU 49152 PLAYER_INIT EQU PLAYER PLAYER_PLAY_PT3 EQU PLAYER+5 PLAYER_PLAY_ST EQU PLAYER+6 SCROLL_LEN EQU 18 SCROLL_WID EQU 16 ; 8 or 16 scrolltext equ 32768 scrollbufptr equ 224*256 fontdata equ 246*256 scrollbuf0 equ scrollbufptr scrollbuf equ scrollbuf0 + SCROLL_LEN*2 scrollbuf1 equ scrollbuf + SCROLL_LEN*SCROLL_WID scrollbuf1end equ scrollbuf1 + SCROLL_LEN*2 org 32768 jp start obr incbin "IMG_0150-2.scr.pck" song2 incbin "ICAMOD.cod.pck" fontdatapck incbin "didaktik.font.pck" scrolltextpck incbin "wedding-scroll.txt.pck" serce1 defb 127,127,127,127,127,127,127,127,127 defb 127,127,82,82,127,82,82,127,127 defb 127,82,82,82,82,82,82,82,127 defb 127,82,82,82,82,82,82,82,127 defb 127,127,82,82,82,82,82,127,127 defb 127,127,127,82,82,82,127,127,127 defb 127,127,127,127,82,127,127,127,127 defb 127,127,127,127,127,127,127,127,127 serce2 defb 127,82,82,127,127,127,82,82,127 defb 82,82,82,82,127,82,82,82,82 defb 82,82,82,82,82,82,82,82,82 defb 82,82,82,82,82,82,82,82,82 defb 127,82,82,82,82,82,82,82,127 defb 127,127,82,82,82,82,82,127,127 defb 127,127,127,82,82,82,127,127,127 defb 127,127,127,127,82,127,127,127,127 hframeaddr defw serce1 defw serce2 include "debitbust.asm" jumptable defb 0,0,1,1,2,2,3,3,4,5,6,7,8 defb 8,8,7,6,6,5,4,3,2,2,1,1,0 defb 0,0,0,0,0,0 defb 0,-1,-2,-2,-3,-4,-6,-7,-8 defb -8,-7,-6,-5,-4,-3,-2,-1,0 defb 0,0,0,0,0,0 defb 128 ; TAG_END ; init start di ; music ld hl,song2 ld de,PLAYER call depack xor a call PLAYER ; font ld hl,fontdatapck ld de,fontdata call depack ; picture ld hl,obr ld de,16384 call depack ; depack scrolltext ld hl,scrolltextpck ld de,scrolltext call depack xor a ld (de),a ; added 0h at ends of text ; clear memory in scroll buffor area ld hl,scrollbuf0 ld de,scrollbuf0+1 ld bc,scrollbuf1end-scrollbuf0-1 xor a ld (hl),a ldir ld a,7 out (254),a im 1 ei mainloop halt IF DEBUG = 1 ld a,4 out (254),a ENDIF ld ix,sercestruct1 call heartplay ld ix,sercestruct2 call heartplay IF DEBUG = 1 ld a,5 out (254),a ENDIF call scroll call scroll call scroll_to_screen ; muza call PLAYER_PLAY_ST IF DEBUG = 1 ld a,7 out (254),a ENDIF jp mainloop ret ; in ix - heart struct address heartplay ld a,(ix+0) ; hwait dec a jr nz,heartret ld l,(ix+2) ; haddr ld h,(ix+3) ; hscreen ld e,(ix+4) ld d,(ix+5) ld c,8 heartplay2 push bc push de rept 9 ldi endm pop de pop bc push hl ld hl,32 add hl,de ex de,hl pop hl ; nr frame calc dec c jp nz,heartplay2 ld a,(ix+1) ; hframe inc a and 1 ld (ix+1),a ; hframe ; addr of frames ld hl,hframeaddr add a,a ; x2 ld d,0 ld e,a add hl,de ld e,(hl) inc hl ld d,(hl) ld (ix+2),e ; haddr ld (ix+3),d ; wait counter ld a,10 heartret ld (ix+0),a ; hwait ret sercestruct1 defb 2 ; hwait ; 0 defb 0 ; hframe ; 1 defw serce1 ; haddr ; 2 3 defw 22528+7+32*0 ; screen addr; 4 5 sercestruct2 defb 7 ; hwait defb 1 ; hframe defw serce2 ; haddr defw 22528+16+32*4 ; screen addr scroll ld a,(scrcount) or a jp z,scroll_insert_char dec a ld (scrcount),a ; scroll text ld ix,scrollbuf ld de,SCROLL_LEN ld a,SCROLL_WID scrmveloop ; rl (ix+18) rl (ix+17) rl (ix+16) rl (ix+15) rl (ix+14) rl (ix+13) rl (ix+12) rl (ix+11) rl (ix+10) rl (ix+ 9) rl (ix+ 8) rl (ix+ 7) rl (ix+ 6) rl (ix+ 5) rl (ix+ 4) rl (ix+ 3) rl (ix+ 2) rl (ix+ 1) rl (ix+ 0) add ix,de dec a jp nz,scrmveloop ret scrtoscrcnt defw jumptable ; move into screen scroll_to_screen ld hl,(scrtoscrcnt) ld a,(hl) cp 128 jp z,scroll_to_screen_reset add a,112 ld l,a ld h,8*8 call calcscreenaddr ex af,af' ld a,SCROLL_WID+4 ld hl,scrollbuf0 scrcpyloop push hl push de ex af,af' rept SCROLL_LEN-1 ldi endm pop de call addDEaddr pop hl ld bc,SCROLL_LEN add hl,bc ex af,af' dec a jp nz,scrcpyloop ex af,af' ld hl,(scrtoscrcnt) inc hl ld (scrtoscrcnt),hl ret scroll_to_screen_reset ld hl,jumptable ld (scrtoscrcnt),hl jp scroll_to_screen addDEaddr inc d ld a,d and 7 ret nz ld a,e add a,32 ld e,a ret c ld a,d sub 8 ld d,a ret scroll_insert_char ld hl,(scrtxtpos) ld a,(hl) or a jp z,scroll_restart inc hl ld (scrtxtpos),hl ld l,a ; char in a ld h,0 add hl,hl ; *2 add hl,hl ; *4 add hl,hl ; *8 ld de,fontdata-256 ; font address add hl,de ; calc char addres ex de,hl ld hl,scrollbuf+SCROLL_LEN-1 ld bc,SCROLL_LEN ; letter width ex af,af' ld a,8 ; width of char scrinsloop ex af,af' ld a,(de) ld (hl),a add hl,bc IF SCROLL_WID = 16 ld (hl),a add hl,bc ENDIF inc de ex af,af' dec a jp nz,scrinsloop ex af,af' ; set counter ld a,8 ld (scrcount),a ret scroll_restart ld hl,scrolltext ld (scrtxtpos),hl jp scroll_insert_char scrcount defb 0 scrtxtpos defw scrolltext calcscreenaddr ld c,h ld a,l ld b,a and a rra scf rra and a rra xor b and %11111000 xor b ld d,a ld a,c rlca rlca rlca xor b and %11000111 xor b rlca rlca ld e,a ret ; end