riven: start animating chair

This commit is contained in:
Vince Weaver 2024-08-18 00:36:59 -04:00
parent cc0ce3a01a
commit 6f67e907f0
17 changed files with 316 additions and 99 deletions

View File

@ -139,7 +139,8 @@ riven_disk04.dsk: QBOOT QLOAD TITLE_04 \
riven_disk05.dsk: QBOOT QLOAD TITLE_05 \
disk05_files/DISK05 \
disk05_files/LEVEL_CHAIR \
disk05_files/LEVEL_CHAIR2
disk05_files/LEVEL_CHAIR2 \
disk05_files/MOVIE_CHAIR
cp $(EMPTY_DISK)/empty.dsk riven_disk05.dsk
$(DOS33_RAW) riven_disk05.dsk 0 0 QBOOT 0 1
$(DOS33_RAW) riven_disk05.dsk 0 2 QBOOT 1 1
@ -149,6 +150,7 @@ riven_disk05.dsk: QBOOT QLOAD TITLE_05 \
$(DOS33_RAW) riven_disk05.dsk 1 0 QLOAD 0 0
$(DOS33_RAW) riven_disk05.dsk 2 0 disk05_files/LEVEL_CHAIR 0 0
$(DOS33_RAW) riven_disk05.dsk 8 0 disk05_files/LEVEL_CHAIR2 0 0
$(DOS33_RAW) riven_disk05.dsk 15 0 disk05_files/MOVIE_CHAIR 0 0
###
@ -628,6 +630,9 @@ disk05_files/LEVEL_CHAIR:
disk05_files/LEVEL_CHAIR2:
cd disk05_files && make
disk05_files/MOVIE_CHAIR:
cd disk05_files && make
####
disk10_files/LEVEL_INSIDE:
@ -858,6 +863,7 @@ riven_hgr.2mg: dts_block PROBOOTHD QLOAD_HD \
disk05_files/DISK05 \
disk05_files/LEVEL_CHAIR \
disk05_files/LEVEL_CHAIR2 \
disk05_files/MOVIE_CHAIR \
disk10_files/DISK10 \
disk10_files/LEVEL_INSIDE \
disk10_files/LEVEL_STAINED \
@ -937,6 +943,7 @@ riven_hgr.2mg: dts_block PROBOOTHD QLOAD_HD \
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 5 0 2` disk05_files/DISK05 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 5 2 0` disk05_files/LEVEL_CHAIR 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 5 8 0` disk05_files/LEVEL_CHAIR2 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 5 15 0` disk05_files/MOVIE_CHAIR 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 10 0 2` disk10_files/DISK10 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 10 2 0` disk10_files/LEVEL_INSIDE 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 10 8 0` disk10_files/LEVEL_STAINED 0 0

View File

@ -1,3 +1,19 @@
Things missing:
~~~~~~~~~~~~~~~
+ DISK05
the blue viewer should show if maglev is there or not
+ DISK38
The graphics should be different for essentially all views (more light)
when door is open
Should see maglev out the door if it's there
+ DISK39
Maglev should not be there at first, and should arrive when press button
Should be full movie of maglev arriving
Should handle case of being outside temple when door is closed
REMEMBER! QLOAD actually trashes 2 bytes above the top of the load
for most of this we re-write those bytes and it doesn't matter
@ -24,32 +40,6 @@ $D000-$FFFF = ROM
image conversion
scummvm/vokoscreen capture
crop
scale to 140x201
convert
re-scale and crop to 280x192
(old) map to 12 colors and eyeball which?
(old) contrast/bright 57/3 (note: not always or even often)
dark areas, crank shadow removal to 80?
on some hard to define areas crank contrast to 50?
on atrus movie go to color levels and hit "auto" before iipix
final movie roto procedure:
scale to 40x50
crop to 40x48
add layer
paste overlay mask on top
rotoscope
copy to new image
convert to indexed apple II palette
scale to 80x48
save
;================================
; NOTE: for hard-disk image we use 512-byte blocks (not 256-byte sectors)
@ -122,6 +112,7 @@ T 0.5 = TITLE 1805 bytes 8S = 0T8S (2048) 400B free
T 1 = QLOAD 2314 bytes 16S= 1T0S (4096) 2k free
T 2 = CHAIR 14263 bytes = 6T0S (24576) 10k free
T 8 = CHAIR2 27064 bytes = 7T0S (28672) 1k free
T 15 = MOV_CHAIR 20480 bytes = 5T0S (20480) 1k free
Disk10 Map (disk has 35 tracks, each 4k in size)
@ -312,6 +303,35 @@ rotating room -- rotates clockwise. B initially blocked
rotate button at B as well
image conversion
scummvm/vokoscreen capture
crop
scale to 140x201
convert
re-scale and crop to 280x192
(old) map to 12 colors and eyeball which?
(old) contrast/bright 57/3 (note: not always or even often)
dark areas, crank shadow removal to 80?
on some hard to define areas crank contrast to 50?
on atrus movie go to color levels and hit "auto" before iipix
final movie roto procedure:
scale to 40x50
crop to 40x48
add layer
paste overlay mask on top
rotoscope
copy to new image
convert to indexed apple II palette
scale to 80x48
save
settings for temple
80 (shadow)

View File

@ -1,5 +1,28 @@
disk01:
General:
press escape to skip cutscenes?
+ disk handling code
+ on every load check to make sure disk hasn't been swapped?
can put expected disk number at beginning of each thing
we load and compare against it
+ allow pressing escape to back-out disk change?
+ Keyboard handling
- Better keyboard handling on IIe
-> was actually one of the main reasons I started working on this
qload:
+ move flip_pages.s into QLOAD
title:
disk00:
disk01:
+ maybe redo opening graphics
disk02: (steps)
one E
@ -24,63 +47,23 @@ disk03: (down other side)
allow walking through doorway depending on room rotation
disk04: bridge
bridge2 (nsew)
bridge3 (nsew)
bridge4 (nsew)
tunnel1 (ew)
tunnel2 (ew)
tunnel3 (new) door open)
add missing N/S views
allow clicking on chair room door to go direct there
disk05: control room
in1
in2 (plays movie of opening)
in3
in4 seat
temple view
sub view
possibly animation of lowering when button pressed/pull handle
blue view should have maglev there/not
orange view should animate opening door
disk06: more tunnel
tunnel4
tunnel5
tunnel6
tunnel7
tunnel8 (door)
tunnel9 (looking into temple)
allow clicking on cair room to go direct here
animate opening door?
disk10:
figure out rotation
+ disk handling code
+ on every load check to make sure disk hasn't been swapped?
can put expected disk number at beginning of each thing
we load and compare against it
+ allow pressing escape to back-out disk change?
+ Keyboard handling
- Better keyboard handling on IIe
-> was actually one of the main reasons I started working on this
qload:
+ move flip_pages.s into QLOAD
title:
disk00:
+ cyan intro
use page flipping on Apple IIe with auxmem?
+ atrus intro
+ capture movie:
+ opening movie: implement it
ESC key... in wait_a_bit write to WAIT_KEYPRESS
allow skipping chunks of it
disk01:
+ maybe redo opening graphics
disk38:
-> complete things
disk39:
-> try to fit last little bit of maglev sequence
+ do the handle animation at end?
@ -88,19 +71,25 @@ disk39:
+ if out of room in RAM (but not disk)
optionally load tail end
to language card on machines that have it?
disk40:
-> implement maglev flip
-> implement maglev back
disk41:
-> see if we can implement left/straight right/straight
options for fork-in-road type situations
-> allow going down where animals were, see ball?
disk43:
-> implement cart
-> implement cart ride (maybe move to disk50)
-> fix up graphics
-> fix up path
-> again, figure out fork-in-road handling
-> batter fork-in-road handling
disk44:
-> more path
-> fish mouth
-> probably move fish to own disk
disk50:
-> implement reverse cart

View File

@ -3,7 +3,7 @@ include ../../../Makefile.inc
LINKER_SCRIPTS = ../../../linker_scripts/
all: DISK05 LEVEL_CHAIR LEVEL_CHAIR2
all: DISK05 LEVEL_CHAIR LEVEL_CHAIR2 MOVIE_CHAIR
####
@ -37,6 +37,17 @@ level_chair2.o: level_chair2.s \
graphics_chair2/chair2_graphics.inc
ca65 -o level_chair2.o level_chair2.s -l level_chair2.lst
####
MOVIE_CHAIR: movie_chair.o
ld65 -o MOVIE_CHAIR movie_chair.o -C $(LINKER_SCRIPTS)/apple2_4000.inc
movie_chair.o: movie_chair.s \
../flip_pages.s ../disk00_files/draw_scene.s \
../zp.inc ../hardware.inc ../qload.inc \
../common_defines.inc disk05_defines.inc \
movie_chair/movie_chair.inc
ca65 -o movie_chair.o movie_chair.s -l movie_chair.lst
####

View File

@ -9,19 +9,19 @@ which_disk_bin:
.byte 5
load_address_array:
.byte $40,$40,$40,$40 ; TITLE, CHAIR, CHAIR2
.byte $40,$40,$40,$40 ; TITLE, CHAIR, CHAIR2, MOVIE_CHAIR
.byte $40,$00,$00,$00 ;
track_array:
.byte 0, 2, 8,16 ; TITLE, CHAIR, CHAIR2
.byte 0, 2, 8,15 ; TITLE, CHAIR, CHAIR2, MOVIE_CHAIR
.byte 22,0,0,0 ;
sector_array:
.byte 8, 0, 0, 0 ; TITLE, CHAIR, CHAIR2
.byte 8, 0, 0, 0 ; TITLE, CHAIR, CHAIR2, MOVIE_CHAIR
.byte 0,0,0,0 ;
length_array:
.byte 8, 96,112, 96 ; TITLE, CHAIR, CHARI2
.byte 8, 96,112,80 ; TITLE, CHAIR, CHAIR2, MOVIE_CHAIR
.byte 80,0,0,0

View File

@ -1,6 +1,7 @@
LOAD_TITLE_05 = 0
LOAD_CHAIR = 1
LOAD_CHAIR2 = 2
MOVIE_CHAIR = 3
;================================
; Level definitions

View File

@ -15,14 +15,12 @@ chair_start:
; init screen
;===================
; jsr TEXT
; jsr HOME
bit KEYRESET
; bit KEYRESET
bit SET_GR
bit PAGE1
bit HIRES
bit FULLGR
; bit SET_GR
; bit PAGE1
; bit HIRES
; bit FULLGR
;========================
; set up location
@ -55,16 +53,23 @@ chair_start:
; init
;===================================
; done in title
; lda #$20
; sta HGR_PAGE
; jsr hgr_make_tables
jsr change_location
jsr save_bg_14x14 ; save old bg
;===================
; init screen
;===================
bit KEYRESET
bit SET_GR
bit PAGE1
bit HIRES
bit FULLGR
game_loop:
;===================================

View File

@ -24,7 +24,7 @@ location0:
; RIVEN_ENTRANCE -- entrance to chair room
location1:
.byte RIVEN_CHAIR ; north exit
.byte MOVIE_CHAIR<<4|0 ; north exit
.byte RIVEN_ENTRANCE_OPEN ; south exit
.byte $ff ; east exit
.byte $ff ; west exit

View File

@ -0,0 +1,144 @@
; The Chair lo-res movie
; by deater (Vince Weaver) <vince@deater.net>
.include "../zp.inc"
.include "../hardware.inc"
.include "../qload.inc"
.include "disk05_defines.inc"
NUM_OVERLAYS = 15
captured_bg = chair_base
chair_start:
;===================
; Setup lo-res graphics
;===================
; clear it first
jsr clear_gr_all
bit SET_GR
bit LORES
bit FULLGR
bit PAGE1
lda #0
sta SCENE_COUNT
lda #4
sta DRAW_PAGE
bit KEYRESET
;===============================
;===============================
; play sound effect?
;===============================
;===============================
;===============================
;===============================
; chair opens
;===============================
;===============================
lda #<chair_base
sta scene_bg_l_smc+1
lda #>chair_base
sta scene_bg_h_smc+1
lda #0
sta WHICH_OVERLAY
chair_loop:
; draw scene with overlay
; switch background
lda WHICH_OVERLAY
jsr draw_scene
; flip pages
jsr flip_pages
inc WHICH_OVERLAY
lda WHICH_OVERLAY
cmp #NUM_OVERLAYS
beq done_chair
; in theory we are 500ms (10*50) long here...
ldx #7
jsr wait_a_bit
jmp chair_loop
done_chair:
;======================
; done, move on to next
;======================
bit KEYRESET
lda #LOAD_CHAIR
sta WHICH_LOAD
lda #RIVEN_CHAIR
sta LOCATION
lda #$1
sta LEVEL_OVER
rts
.include "../flip_pages.s"
.include "../disk00_files/draw_scene.s"
frames_l:
.byte <overlay04 ; 0
.byte <overlay05 ; 1
.byte <overlay06 ; 2
.byte <overlay07 ; 3
.byte <overlay08 ; 4
.byte <empty ; 5
.byte <empty ; 6
.byte <empty ; 7
.byte <empty ; 8
.byte <empty ; 9
.byte <empty ; 10
.byte <empty ; 11
.byte <empty ; 12
.byte <empty ; 13
.byte <empty ; 14
frames_h:
.byte >overlay04 ; 0
.byte >overlay05 ; 1
.byte >overlay06 ; 2
.byte >overlay07 ; 3
.byte >overlay08 ; 4
.byte >empty ; 5
.byte >empty ; 6
.byte >empty ; 7
.byte >empty ; 8
.byte >empty ; 9
.byte >empty ; 10
.byte >empty ; 11
.byte >empty ; 12
.byte >empty ; 13
.byte >empty ; 14
chair_graphics:
.include "movie_chair/movie_chair.inc"

View File

@ -0,0 +1,40 @@
include ../../../../Makefile.inc
ZX02 = ~/research/6502_compression/zx02.git/build/zx02
PNG2GR = ../../../../utils/gr-utils/png2gr
all: movie_chair.inc
movie_chair.inc: \
chair_base.gr.zx02 \
empty.gr.zx02 \
overlay04.gr.zx02 overlay05.gr.zx02 overlay06.gr.zx02 \
overlay07.gr.zx02 overlay08.gr.zx02
echo "chair_base: .incbin \"chair_base.gr.zx02\"" > movie_chair.inc
echo "empty: .incbin \"empty.gr.zx02\"" >> movie_chair.inc
echo "overlay04: .incbin \"overlay04.gr.zx02\"" >> movie_chair.inc
echo "overlay05: .incbin \"overlay05.gr.zx02\"" >> movie_chair.inc
echo "overlay06: .incbin \"overlay06.gr.zx02\"" >> movie_chair.inc
echo "overlay07: .incbin \"overlay07.gr.zx02\"" >> movie_chair.inc
echo "overlay08: .incbin \"overlay08.gr.zx02\"" >> movie_chair.inc
####
%.gr: %.png
$(PNG2GR) $< $@
%.gr.zx02: %.gr
$(ZX02) -f $< $@
####
clean:
rm -f *~ *.o *.lst *.zx02 *.gr movie_maglev_ride.inc
distclean:
rm -f *~ *.o *.lst *.zx02 *.gr movie_maglev_ride.inc
cd overlays && make clean

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B