From 2f514471d09c066b2332c9ff1c662afdf1c57d93 Mon Sep 17 00:00:00 2001 From: grinvader <> Date: Wed, 16 Mar 2005 14:16:29 +0000 Subject: [PATCH] Ok, so I'm a moron. Yeah. Record fix and preliminary chapter stuff included. --- zsnes/src/gui/gui.asm | 3 +- zsnes/src/gui/guimouse.inc | 38 +++++++++++++--- zsnes/src/zmovie.c | 89 +++++++++++++++++++++++--------------- 3 files changed, 88 insertions(+), 42 deletions(-) diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index 74c385db..0a09afdf 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -167,7 +167,8 @@ EXTSYM GUIHQ3X EXTSYM GUIHQ4X EXTSYM firstsaveinc EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6 -EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord +EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord,MovieInsertChapter +EXTSYM MovieSeekAhead,MovieSeekBehind %ifdef __LINUX__ EXTSYM numlockptr diff --git a/zsnes/src/gui/guimouse.inc b/zsnes/src/gui/guimouse.inc index bb989a20..feed3987 100644 --- a/zsnes/src/gui/guimouse.inc +++ b/zsnes/src/gui/guimouse.inc @@ -566,21 +566,23 @@ ProcessMouseButtons: je near SetDevice cmp byte[GUICBHold],15 je near CalibrateDev1 - cmp byte[GUICBHold],16 + cmp byte[GUICBHold],16 ; movie replay jne .notMoviePlay + mov byte[GUICBHold],0 pushad call MoviePlay popad ret .notMoviePlay cmp byte[GUICBHold],17 - jne .notMovieRecord0 + jne .notMovieRecord0 ; movie record + mov byte[GUICBHold],0 pushad call MovieRecord popad ret .notMovieRecord0 - cmp byte[GUICBHold],18 + cmp byte[GUICBHold],18 ; movie stop jne .notMovieStop mov byte[GUICBHold],0 pushad @@ -588,20 +590,46 @@ ProcessMouseButtons: popad ret .notMovieStop - cmp byte[GUICBHold],19 + cmp byte[GUICBHold],19 ; overwrite zmv ? yes jne .notMovieRecord1 + mov byte[GUICBHold],0 pushad call MovieRecord popad ret .notMovieRecord1 - cmp byte[GUICBHold],20 + cmp byte[GUICBHold],20 ; overwrite zmv ? no jne .notSkipMovie + mov byte[GUICBHold],0 pushad call SkipMovie popad ret .notSkipMovie + cmp byte[GUICBHold],29 ; insert chapter + jne .noInsertChap + mov byte[GUICBHold],0 + pushad + call MovieInsertChapter + popad + ret +.noInsertChap + cmp byte[GUICBHold],30 ; back to previous chapter + jne .noPrevChap + mov byte[GUICBHold],0 + pushad + call MovieSeekBehind + popad + ret +.noPrevChap + cmp byte[GUICBHold],31 ; jump to next chapter + jne .noNextChap + mov byte[GUICBHold],0 + pushad + call MovieSeekAhead + popad + ret +.noNextChap cmp byte[GUICBHold],40 je near SetAllKeys cmp byte[GUICBHold],50 diff --git a/zsnes/src/zmovie.c b/zsnes/src/zmovie.c index 3bd75fa9..e52be65a 100644 --- a/zsnes/src/zmovie.c +++ b/zsnes/src/zmovie.c @@ -286,12 +286,12 @@ void zmv_header_write(struct zmv_header *zmv_head, FILE *fp) case zmv_vm_ntsc: flag &= ~BIT(5); break; - + case zmv_vm_pal: flag |= BIT(5); - break; + break; } - + //Not needed, but oh well, it makes it easier to read for some. //Reserved bits: flag &= ~BIT(4); @@ -513,8 +513,7 @@ Create and record ZMV void zmv_create(char *filename) { memset(&zmv_vars, 0, sizeof(zmv_vars)); - zmv_vars.fp = fopen(filename,"wb"); - if (zmv_vars.fp) + if ((zmv_vars.fp = fopen(filename,"wb"))) { strncpy(zmv_vars.header.magic, "ZMV", 3); zmv_vars.header.zsnes_version = versionNumber & 0xFFFF; @@ -531,29 +530,29 @@ void zmv_create(char *filename) } } -#define RECORD_PAD(prev, cur, bit) \ - cur >>= 20; \ - if (cur != prev) \ - { \ - prev = cur; \ - flag |= BIT(bit); \ - \ - if (nibble & 1) \ - { \ - press_buf[nibble/2] |= ((unsigned char)(prev & 0x0F)) << 4; \ - nibble++; \ - press_buf[nibble/2] = (unsigned char)(prev >> 4); \ - nibble += 2; \ - } \ - else \ - { \ - press_buf[nibble/2] = (unsigned char)(prev & 0xFF); \ - nibble += 2; \ - press_buf[nibble/2] = (unsigned char)(prev >> 8); \ - nibble++; \ - } \ - } \ - cur <<= 20; +#define RECORD_PAD(prev, cur, bit) \ + if (cur != prev) \ + { \ + prev = (cur >> 20); \ + flag |= BIT(bit); \ + \ + if (nibble & 1) \ + { \ + press_buf[nibble/2] |= ((unsigned char)(prev & 0x0F)) << 4; \ + nibble++; \ + press_buf[nibble/2] = (unsigned char)(prev >> 4); \ + nibble += 2; \ + } \ + else \ + { \ + press_buf[nibble/2] = (unsigned char)(prev & 0xFF); \ + nibble += 2; \ + press_buf[nibble/2] = (unsigned char)(prev >> 8); \ + nibble++; \ + } \ + \ + prev <<= 20; \ + } void zmv_record() { @@ -721,6 +720,7 @@ bool zmv_replay() if (flag & BIT(2)) { + puts("Skipping Chapter"); fseek(zmv_vars.fp, cur_zst_size+4, SEEK_CUR); fread(&flag, 1, 1, zmv_vars.fp); } @@ -840,7 +840,6 @@ void zmv_replay_finished() fclose(zmv_vars.fp); } - ///////////////////////////////////////////////////////// /* @@ -886,8 +885,6 @@ unsigned int bytemerger (unsigned char heaviest, unsigned char heavy, unsigned c return ((heaviest << 24) | (heavy << 16) | (light << 8) | (lightest)); } -extern unsigned char CNetType; - void ProcessMovies() { if (MovieProcessing == 2) { zmv_record(); } @@ -902,7 +899,6 @@ extern unsigned int GUICBHold; void SkipMovie() { MovieRecordWinVal = 0; - GUICBHold &= 0xFFFFFF00; } void MovieStop() @@ -929,8 +925,6 @@ void MoviePlay() { unsigned char FileExt[4]; - GUICBHold &= 0xFFFFFF00; - if (!MovieProcessing) { GUIQuit = 2; @@ -959,8 +953,6 @@ void MoviePlay() void MovieRecord() { - GUICBHold &= 0xFFFFFF00; - if (!MovieProcessing) { unsigned char FileExt[4]; @@ -991,3 +983,28 @@ void MovieRecord() memcpy (&fnamest[statefileloc-3], FileExt, 4); } } + +void MovieInsertChapter() +{ + switch (MovieProcessing) + { + case 1: puts("Adding external chapter"); zmv_add_chapter(); break; // replaying - external + case 2: puts("Adding internal chapter"); zmv_insert_chapter(); break; // recording - internal + } +} + +void MovieSeekAhead() +{ + if (MovieProcessing == 1) // replaying only - record can use ZMTs + { + puts("Going to next chapter"); zmv_next_chapter(); + } +} + +void MovieSeekBehind() +{ + if (MovieProcessing == 1) // replaying only - record can use ZMTs + { + puts("Going to previous chapter"); zmv_prev_chapter(); + } +}