From 96b7961681902acfd8ab793132e4d7bde5e7f4ef Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Mon, 13 Jul 2026 21:53:53 +0200 Subject: [PATCH] more slides --- main.asm | 786 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 735 insertions(+), 51 deletions(-) diff --git a/main.asm b/main.asm index 90e5d55..74a5307 100644 --- a/main.asm +++ b/main.asm @@ -1,7 +1,12 @@ ; ----------------------------------------------------------- -; main.asm - C64 demo: giant TTG logo + credits scroller -; effects: color wash on the logo, smooth pixel scroll, -; pulsing title - all timed by polling the raster beam +; main.asm - C64 demo: slide show (6 seconds per slide) +; slide 1: giant TTG logo + credits scroller +; slide 2: OUR FIRST GAME - Definitely not an Impostor +; slide 3: OUR SECOND GAME IS COMING (full-screen raster bars) +; slide 4: CONTACT +; slide 5: the assembly confession +; slides cross-fade through black between switches +; all timed by polling the raster beam ; Build: acme -f cbm -o main.prg main.asm ; ----------------------------------------------------------- @@ -21,6 +26,7 @@ * = $0810 ; = 2064 in decimal ; ---- hardware registers ---- +SCRCTRL = $d011 ; vertical control: bit 4 switches the display on/off BORDER = $d020 ; border color register BG = $d021 ; background color register RASTER = $d012 ; current raster line @@ -33,16 +39,15 @@ BLACK = 0 WHITE = 1 CYAN = 3 YELLOW = 7 +DGREY = 11 LGREEN = 13 LGREY = 15 -; ---- screen layout ---- +; ---- screen layout (slide 1) ---- BIGROW = 2 ; top row of the giant letters BIGCOL = 6 ; left column (3*8 + 2*2 = 28 wide, centered) TITLE_POS = 12*40 + 13 ; "TELETYPE GAMES" (14 chars, centered) SCROLLROW = 14 ; scroller row -WWW_POS = 17*40 + 9 ; "WWW.TELETYPEGAMES.ORG" (21 chars) -CITY_POS = 19*40 + 14 ; "SZEGED, 2026" (12 chars) ; ---- timing ---- SCROLL_STEP = 2 ; pixels per frame (8 px / 4 frames = 1 char) @@ -50,23 +55,282 @@ RAS_SCRTOP = 160 ; just above the scroller row (row 14 = lines 1 RAS_SCRBOT = 171 ; just below it (rows 13 and 15 are blank, so ; a line of jitter here is invisible) RAS_BOTTOM = 248 ; lower border: safe time for screen updates +RAS_BARTOP = 16 ; first raster line of the bar area (slide 3): + ; starts in the upper border +BAR_STEPS = 57 ; 57 steps * 4 lines = up to line 244 + +NUM_SLIDES = 5 +SLIDE_TIME = 300 ; 6 seconds per slide (PAL, 50 frames/s) +FADE_STEPS = 5 ; fade steps (longest fadetbl chain is 4) +FADE_SPEED = 4 ; frames between two fade steps + +FADEBUF = $c000 ; snapshot of color RAM for the fade-in ; ---- zero page pointers ---- -scrlo = $fb -scrhi = $fc -collo = $fd -colhi = $fe +txtlo = $f5 ; text pointer for the print routines (2 bytes) +txthi = $f6 +vec = $f7 ; slide init vector (2 bytes) +updvec = $f9 ; slide update vector (2 bytes) +scrlo = $fb +scrhi = $fc +collo = $fd +colhi = $fe + +; ---- helper macros: print a normal / big text line ---- +!macro prtext .row, .col, .color, .txt, .len { + lda #<.txt + sta txtlo + lda #>.txt + sta txthi + lda #.row + sta prow + lda #.col + sta pcol + lda #.color + sta pcolor + lda #.len + sta plen + jsr print_text +} + +!macro prbig .row, .col, .color, .txt, .len { + lda #<.txt + sta txtlo + lda #>.txt + sta txthi + lda #.row + sta bigrow + lda #.col + sta bigcol + lda #.color + sta bigcolor + lda #.len + sta biglen + jsr draw_big +} start: sei ; no KERNAL IRQ - raster polling must not jitter + lda #0 + sta framectr + sta slide + jsr show_slide ; draw slide 0 hidden, then fade it in + +; ============================================================ +; main loop - one update call per frame; when the slide's +; duration runs out, switch to the next slide +; ============================================================ +main: + jsr call_update + + lda durlo ; 16-bit frame countdown + bne dur_dec + dec durhi +dur_dec: + dec durlo + lda durlo + ora durhi + bne main + + jsr fade_out ; time's up: fade the old slide to black + + ldx slide ; advance to the next slide + inx + cpx #NUM_SLIDES + bne slide_ok + ldx #0 +slide_ok: + stx slide + jsr show_slide ; draw it hidden, then fade it in + jmp main + +call_update: + jmp (updvec) ; each update runs exactly one frame, ends with rts + +; ---- load a slide's vectors and duration, then run its init ---- +slide_setup: + ldx slide + lda slide_dur_lo,x + sta durlo + lda slide_dur_hi,x + sta durhi + lda slide_upd_lo,x + sta updvec + lda slide_upd_hi,x + sta updvec+1 + lda slide_init_lo,x + sta vec + lda slide_init_hi,x + sta vec+1 lda #BLACK sta BORDER sta BG + jmp (vec) ; init ends with rts -> returns to slide_setup's caller - ; clear screen RAM, fill color RAM with white +; ============================================================ +; slide transition: fade through black +; ============================================================ + +; ---- draw the current slide while the display is switched off +; (everything shows border color = black), snapshot its colors, +; blacken them, switch the display back on and fade in ---- +show_slide: + lda #$0b ; display off + sta SCRCTRL + jsr slide_setup + jsr snapshot_colram + lda #$1b ; display on + sta SCRCTRL + + ; fade in: fadecnt counts how many times the target color is + ; darkened; counting 4 -> 0 walks each cell from black back + ; up to its snapshot color + lda #FADE_STEPS-1 + sta fadecnt +fi_step: + jsr build_map + jsr apply_map + ldx #FADE_SPEED +fi_wait: + jsr wait_frame + dex + bne fi_wait + lda fadecnt + beq fi_done + dec fadecnt + jmp fi_step +fi_done: + rts + +; ---- darken the whole color RAM step by step until black ---- +fade_out: + lda #FADE_STEPS + sta fadecnt +fo_step: + ldx #FADE_SPEED +fo_wait: + jsr wait_frame + dex + bne fo_wait + jsr apply_fade + dec fadecnt + bne fo_step + rts + +; ---- wait for the next bottom-border arrival of the beam ---- +wait_frame: +wf_leave: + lda RASTER ; first leave line RAS_BOTTOM if we are on it + cmp #RAS_BOTTOM + beq wf_leave +wf_reach: + lda RASTER + cmp #RAS_BOTTOM + bne wf_reach + rts + +; ---- one fade-out step: every color RAM cell one shade darker ---- +apply_fade: ldx #0 -clear_loop: +af_loop: + lda COLRAM,x + and #15 ; color RAM reads have garbage upper bits + tay + lda fadetbl,y + sta COLRAM,x + lda COLRAM+250,x + and #15 + tay + lda fadetbl,y + sta COLRAM+250,x + lda COLRAM+500,x + and #15 + tay + lda fadetbl,y + sta COLRAM+500,x + lda COLRAM+750,x + and #15 + tay + lda fadetbl,y + sta COLRAM+750,x + inx + cpx #250 + bne af_loop + rts + +; ---- copy color RAM to FADEBUF, then blacken color RAM ---- +snapshot_colram: + ldx #0 +sn_loop: + lda COLRAM,x + and #15 + sta FADEBUF,x + lda COLRAM+250,x + and #15 + sta FADEBUF+250,x + lda COLRAM+500,x + and #15 + sta FADEBUF+500,x + lda COLRAM+750,x + and #15 + sta FADEBUF+750,x + lda #BLACK + sta COLRAM,x + sta COLRAM+250,x + sta COLRAM+500,x + sta COLRAM+750,x + inx + cpx #250 + bne sn_loop + rts + +; ---- curmap[c] = color c darkened fadecnt times ---- +build_map: + ldx #15 +bm_color: + txa + tay + lda fadecnt + sta bmcnt + beq bm_store ; 0 steps: identity map +bm_apply: + lda fadetbl,y + tay + dec bmcnt + bne bm_apply +bm_store: + tya + sta curmap,x + dex + bpl bm_color + rts + +; ---- write curmap[FADEBUF] into the whole color RAM ---- +apply_map: + ldx #0 +am_loop: + ldy FADEBUF,x + lda curmap,y + sta COLRAM,x + ldy FADEBUF+250,x + lda curmap,y + sta COLRAM+250,x + ldy FADEBUF+500,x + lda curmap,y + sta COLRAM+500,x + ldy FADEBUF+750,x + lda curmap,y + sta COLRAM+750,x + inx + cpx #250 + bne am_loop + rts + +; ---- clear screen RAM, fill color RAM with white ---- +clear_screen: + ldx #0 +cls_loop: lda #$20 ; space sta SCREEN,x sta SCREEN+$100,x @@ -78,9 +342,117 @@ clear_loop: sta COLRAM+$200,x sta COLRAM+$2e8,x inx - bne clear_loop + bne cls_loop + rts + +; ---- print a text line: txtlo/hi, prow, pcol, pcolor, plen ---- +print_text: + ldx prow + lda mul40lo,x + clc + adc pcol + sta scrlo + sta collo + lda mul40hi,x + adc #>SCREEN ; carry still valid from the low-byte add + sta scrhi + clc + adc #$d4 ; COLRAM - SCREEN high byte distance + sta colhi + ldy #0 +pt_loop: + lda (txtlo),y + sta (scrlo),y + lda pcolor + sta (collo),y + iny + cpy plen + bne pt_loop + rts + +; ---- draw a text line with big 3x5 block letters ---- +; txtlo/hi = text (screen codes), bigrow/bigcol = top-left cell, +; bigcolor = color, biglen = char count; each letter is 3 cells +; wide + 1 gap, 5 cells tall +draw_big: + lda #0 + sta bigi +db_char: + ldy bigi + lda (txtlo),y + cmp #$20 ; space: leave the cell empty + beq db_next + tax + lda bigmap,x ; screen code -> glyph index + sta glyphbase + asl ; glyph base = index * 5 + asl + clc + adc glyphbase + sta glyphbase + lda bigi ; cell x = bigcol + charindex * 4 + asl + asl + clc + adc bigcol + sta charx + lda #0 + sta rowidx +db_row: + lda bigrow ; row pointers from the row*40 tables + clc + adc rowidx + tax + lda mul40lo,x + sta scrlo + sta collo + lda mul40hi,x + clc + adc #>SCREEN + sta scrhi + clc + adc #$d4 + sta colhi + lda glyphbase + clc + adc rowidx + tax + lda bigglyphs,x + asl ; 3-bit pattern up to bits 7-5 + asl + asl + asl + asl + sta curbits + ldy charx + lda #3 + sta bitcnt +db_bit: + asl curbits ; leftmost pixel first + bcc db_nobit + lda #$a0 ; inverse space = solid block + sta (scrlo),y + lda bigcolor + sta (collo),y +db_nobit: + iny + dec bitcnt + bne db_bit + inc rowidx + lda rowidx + cmp #5 + bne db_row +db_next: + inc bigi + lda bigi + cmp biglen + beq db_done + jmp db_char ; too far for a relative branch +db_done: + rts ; ---- draw the giant TTG letters from 8x8 bitmaps ---- +draw_logo: lda #0 sta letter letter_loop: @@ -144,37 +516,18 @@ col_nocarry: lda letter cmp #3 bne letter_loop + rts -; ---- static texts ---- - ldx #0 -title_loop: - lda txt_title,x - sta SCREEN+TITLE_POS,x - lda #WHITE - sta COLRAM+TITLE_POS,x - inx - cpx #txt_title_end - txt_title - bne title_loop +; ============================================================ +; slide 1: giant logo + credits scroller +; ============================================================ +s1_init: + jsr clear_screen + jsr draw_logo - ldx #0 -www_loop: - lda txt_www,x - sta SCREEN+WWW_POS,x - lda #LGREEN - sta COLRAM+WWW_POS,x - inx - cpx #txt_www_end - txt_www - bne www_loop - - ldx #0 -city_loop: - lda txt_city,x - sta SCREEN+CITY_POS,x - lda #LGREY - sta COLRAM+CITY_POS,x - inx - cpx #txt_city_end - txt_city - bne city_loop + +prtext 12, 13, WHITE, txt_title, txt_title_end - txt_title + +prtext 17, 9, LGREEN, txt_www, txt_www_end - txt_www + +prtext 19, 14, LGREY, txt_city, txt_city_end - txt_city ; scroller row color ldx #39 @@ -188,13 +541,10 @@ scrollcol_loop: sta xscroll lda #0 sta scrollidx - sta framectr sta washphase + rts -; ============================================================ -; main loop - one iteration per frame, driven by the raster -; ============================================================ -main: +s1_update: ; switch on fine scroll + 38-column mode for the scroller row only wait_scrtop: lda RASTER @@ -239,7 +589,7 @@ wash_hold: jsr do_wash jsr do_pulse - jmp main + rts ; ---- shift the scroller row one char left, feed in the next char ---- shift_row: @@ -299,8 +649,213 @@ dp_loop: bpl dp_loop rts +; ============================================================ +; slide 2: OUR FIRST GAME - Definitely not an Impostor +; big letters with the gold wash running across them +; ============================================================ +s2_init: + jsr clear_screen + +prtext 1, 13, WHITE, txt_firstgame, txt_firstgame_end - txt_firstgame + +prbig 4, 0, YELLOW, big_definitely, 10 + +prbig 10, 8, YELLOW, big_notan, 6 + +prbig 16, 4, YELLOW, big_impostor, 8 + +prtext 23, 10, LGREY, txt_tic80, txt_tic80_end - txt_tic80 + rts + +s2_update: + lda RASTER + cmp #RAS_BOTTOM + bne s2_update + + inc framectr + lda framectr ; wash moves one column every 2nd frame + and #1 + bne s2_hold + inc washphase +s2_hold: + + ; gold wash across all 15 big-letter rows (4-8, 10-14, 16-20) + ldx #39 +s2_loop: + txa + clc + adc washphase + and #15 + tay + lda washtbl,y + sta COLRAM + 4*40,x + sta COLRAM + 5*40,x + sta COLRAM + 6*40,x + sta COLRAM + 7*40,x + sta COLRAM + 8*40,x + sta COLRAM + 10*40,x + sta COLRAM + 11*40,x + sta COLRAM + 12*40,x + sta COLRAM + 13*40,x + sta COLRAM + 14*40,x + sta COLRAM + 16*40,x + sta COLRAM + 17*40,x + sta COLRAM + 18*40,x + sta COLRAM + 19*40,x + sta COLRAM + 20*40,x + dex + bpl s2_loop + rts + +; ============================================================ +; slide 3: OUR SECOND GAME IS COMING +; full-screen raster bars (background + border) behind the text +; ============================================================ +s3_init: + jsr clear_screen + +prtext 4, 12, WHITE, txt_secondgame, txt_secondgame_end - txt_secondgame + +prbig 8, 3, DGREY, big_iscoming, 9 ; drop shadow first (+1 row, +1 col) + +prbig 7, 2, YELLOW, big_iscoming, 9 ; then the letters on top of it + +prtext 15, 4, WHITE, txt_pointclick, txt_pointclick_end - txt_pointclick + +prtext 18, 7, LGREY, txt_steam, txt_steam_end - txt_steam + lda #0 + sta s3phase + rts + +s3_update: + inc framectr + lda framectr ; bars scroll one step every 2nd frame + and #1 + bne s3_hold + inc s3phase +s3_hold: + + ; chase the beam: every 4th raster line from RAS_BARTOP down, + ; set the BORDER color from the cyclic 64-entry bar table; + ; the background stays black so the text remains readable + lda #RAS_BARTOP + sta s3line + ldx #0 ; bar step counter +s3_bar: + lda s3line +s3_wait: + cmp RASTER + bne s3_wait + txa + clc + adc s3phase + and #63 + tay + lda rastbl,y + sta BORDER + lda s3line + clc + adc #4 + sta s3line + inx + cpx #BAR_STEPS + bne s3_bar + + lda #BLACK ; below the bar area: back to black + sta BORDER + +s3_wbot: ; keep the one-call-per-frame contract + lda RASTER + cmp #RAS_BOTTOM + bne s3_wbot + rts + +; ============================================================ +; slide 4: CONTACT +; pulsing big title, contact lines below +; ============================================================ +s4_init: + jsr clear_screen + +prbig 2, 6, WHITE, big_contact, 7 + +prtext 10, 7, LGREEN, txt_web, txt_web_end - txt_web + +prtext 13, 6, YELLOW, txt_bbs, txt_bbs_end - txt_bbs + +prtext 16, 4, CYAN, txt_irc, txt_irc_end - txt_irc + rts + +s4_update: + lda RASTER + cmp #RAS_BOTTOM + bne s4_update + + inc framectr + lda framectr ; grey-white pulse on the big title rows (2-6) + lsr + lsr + lsr + and #7 + tay + lda pulsetbl,y + ldx #39 +s4_loop: + sta COLRAM + 2*40,x + sta COLRAM + 3*40,x + sta COLRAM + 4*40,x + sta COLRAM + 5*40,x + sta COLRAM + 6*40,x + dex + bpl s4_loop + rts + +; ============================================================ +; slide 5: the assembly confession +; ============================================================ +s5_init: + jsr clear_screen + +prtext 3, 11, WHITE, txt_conf1, txt_conf1_end - txt_conf1 + +prtext 7, 5, LGREY, txt_conf2, txt_conf2_end - txt_conf2 + +prtext 9, 4, LGREY, txt_conf3, txt_conf3_end - txt_conf3 + +prtext 12, 5, WHITE, txt_conf4, txt_conf4_end - txt_conf4 + +prtext 15, 5, LGREY, txt_conf5, txt_conf5_end - txt_conf5 + +prtext 17, 5, LGREY, txt_conf6, txt_conf6_end - txt_conf6 + +prtext 21, 11, CYAN, txt_conf7, txt_conf7_end - txt_conf7 + rts + +s5_update: + lda RASTER + cmp #RAS_BOTTOM + bne s5_update + + inc framectr + lda framectr ; pulse on the "(the ai says hi.)" line + lsr + lsr + lsr + and #7 + tay + lda pulsetbl,y + ldx #txt_conf7_end - txt_conf7 - 1 +s5_loop: + sta COLRAM + 21*40 + 11,x + dex + bpl s5_loop + rts + ; ---- data ---- +; slide table: init vector, update vector, duration in frames +slide_init_lo: + !byte s1_init, >s2_init, >s3_init, >s4_init, >s5_init +slide_upd_lo: + !byte s1_update, >s2_update, >s3_update, >s4_update, >s5_update +slide_dur_lo: + !byte SLIDE_TIME, >SLIDE_TIME, >SLIDE_TIME, >SLIDE_TIME, >SLIDE_TIME + +; row * 40 lookup tables (25 rows) +mul40lo: + !byte $00, $28, $50, $78, $a0, $c8, $f0, $18, $40, $68 + !byte $90, $b8, $e0, $08, $30, $58, $80, $a8, $d0, $f8 + !byte $20, $48, $70, $98, $c0 +mul40hi: + !byte $00, $00, $00, $00, $00, $00, $00, $01, $01, $01 + !byte $01, $01, $01, $02, $02, $02, $02, $02, $02, $02 + !byte $03, $03, $03, $03, $03 + ; 8x8 bitmaps of the giant letters (one byte per row, MSB = left pixel) bigfont: ; T @@ -313,6 +868,33 @@ bigfont: letter_off: ; column offset of each letter (8 wide + 2 gap) !byte 0, 10, 20 +; 3x5 block font for the big slide titles (5 bytes per glyph, +; low 3 bits used, MSB side = left) +bigglyphs: + !byte 0, 0, 0, 0, 0 ; 0 space + !byte 2, 5, 7, 5, 5 ; 1 A + !byte 3, 4, 4, 4, 3 ; 2 C + !byte 6, 5, 5, 5, 6 ; 3 D + !byte 7, 4, 6, 4, 7 ; 4 E + !byte 7, 4, 6, 4, 4 ; 5 F + !byte 7, 2, 2, 2, 7 ; 6 I + !byte 4, 4, 4, 4, 7 ; 7 L + !byte 5, 7, 7, 5, 5 ; 8 M + !byte 6, 5, 5, 5, 5 ; 9 N + !byte 7, 5, 5, 5, 7 ; 10 O + !byte 6, 5, 6, 4, 4 ; 11 P + !byte 6, 5, 6, 5, 5 ; 12 R + !byte 3, 4, 2, 1, 6 ; 13 S + !byte 7, 2, 2, 2, 2 ; 14 T + !byte 5, 5, 2, 2, 2 ; 15 Y + !byte 3, 4, 5, 5, 7 ; 16 G + +bigmap: ; screen code (a=1..z=26) -> glyph index + !byte 0 ; (unused) + !byte 1, 0, 2, 3, 4, 5, 16, 0, 6, 0 ; a-j + !byte 0, 7, 8, 9, 10, 11, 0, 12, 13, 14 ; k-t + !byte 0, 0, 0, 0, 15, 0 ; u-z + washtbl: ; gold glow ramp (16 entries, cyclic) !byte $09, $02, $08, $0a, $07, $07, $01, $01 !byte $01, $01, $07, $07, $0a, $08, $02, $09 @@ -320,24 +902,105 @@ washtbl: ; gold glow ramp (16 entries, cyclic) pulsetbl: ; grey-white pulse (8 entries, cyclic) !byte $0b, $0c, $0f, $01, $01, $0f, $0c, $0b +fadetbl: ; fade-to-black: each color -> one shade darker, + ; every chain reaches black in at most 4 steps + ; (e.g. white -> lgrey -> mgrey -> dgrey -> black) + ; blk wht red cyn pur grn blu yel + !byte $00, $0f, $09, $0e, $06, $0b, $00, $08 + ; org brn lrd dgr mgr lgn lbl lgr + !byte $02, $00, $02, $00, $0b, $05, $06, $0c + +rastbl: ; raster bar colors (64 entries, cyclic): + ; red, green, blue, grey ramps + !byte $00, $00, $02, $02, $08, $08, $0a, $01 + !byte $0a, $08, $08, $02, $02, $00, $00, $00 + !byte $00, $00, $05, $05, $0d, $0d, $07, $01 + !byte $07, $0d, $0d, $05, $05, $00, $00, $00 + !byte $00, $00, $06, $06, $0e, $0e, $03, $01 + !byte $03, $0e, $0e, $06, $06, $00, $00, $00 + !byte $00, $00, $0b, $0b, $0c, $0c, $0f, $01 + !byte $0f, $0c, $0c, $0b, $0b, $00, $00, $00 + ; texts in screen codes (!scr); lowercase source shows as uppercase on C64 + +; slide 1 txt_title: !scr "teletype games" txt_title_end: - txt_www: !scr "www.teletypegames.org" txt_www_end: - txt_city: !scr "szeged, 2026" txt_city_end: - scrolltext: !scr "mr.zero - tasnadi zsolt / mr.one - tari balazs / " !scr "mr.two - timar zoltan / mr.three - mezo bela / " scrolltext_end: +; slide 2 +txt_firstgame: + !scr "our first game" +txt_firstgame_end: +big_definitely: + !scr "definitely" +big_notan: + !scr "not an" +big_impostor: + !scr "impostor" +txt_tic80: + !scr "introduced on tic-80" +txt_tic80_end: + +; slide 3 +txt_secondgame: + !scr "our second game" +txt_secondgame_end: +big_iscoming: + !scr "is coming" +txt_pointclick: + !scr "a new point and click adventure" +txt_pointclick_end: +txt_steam: + !scr "will be available on steam" +txt_steam_end: + +; slide 4 +big_contact: + !scr "contact" +txt_web: + !scr "web: www.teletypegames.org" +txt_web_end: +txt_bbs: + !scr "bbs: teletypegames.org 2323" +txt_bbs_end: +txt_irc: + !scr "irc: libera.chat #teletypegames" +txt_irc_end: + +; slide 5 +txt_conf1: + !scr "a quick confession" +txt_conf1_end: +txt_conf2: + !scr "we speak c, c++, python, java," +txt_conf2_end: +txt_conf3: + !scr "php, javascript and even pascal." +txt_conf3_end: +txt_conf4: + !scr "but 6502 assembly? not a word." +txt_conf4_end: +txt_conf5: + !scr "so this slideshow was written" +txt_conf5_end: +txt_conf6: + !scr "with a little help from an ai." +txt_conf6_end: +txt_conf7: + !scr "(the ai says hi.)" +txt_conf7_end: + ; ---- variables ---- letter: !byte 0 rowcount: !byte 0 @@ -346,3 +1009,24 @@ framectr: !byte 0 xscroll: !byte 0 washphase: !byte 0 scrollidx: !byte 0 +slide: !byte 0 ; current slide index +durlo: !byte 0 ; frames left on this slide (16 bit) +durhi: !byte 0 +s3phase: !byte 0 ; raster bar scroll offset +s3line: !byte 0 ; current raster line while drawing bars +prow: !byte 0 ; print_text: row, column, color, length +pcol: !byte 0 +pcolor: !byte 0 +plen: !byte 0 +bigrow: !byte 0 ; draw_big: row, column, color, length +bigcol: !byte 0 +bigcolor: !byte 0 +biglen: !byte 0 +bigi: !byte 0 ; draw_big internals +glyphbase: !byte 0 +charx: !byte 0 +rowidx: !byte 0 +bitcnt: !byte 0 +fadecnt: !byte 0 ; fade step counter +bmcnt: !byte 0 ; build_map inner counter +curmap: !fill 16, 0 ; current fade-in color map