Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - EricOakford

Pages: [1] 2 3 ... 16
1
SCI Development Tools / Re: "Sounder" tool - alpha version is ready
« on: August 03, 2022, 08:21:13 PM »
Great! Now I've just found that the sounds converted from SCI0 to SCI1 are not converted right, leading to notes playing in the wrong place!

To see what I'm talking about, I've put here a little program that tests SCI1 sounds. The menu has an option to play a sound, and you can input the resource number you want to play. I've included three sounds as an example. Please excuse the wrong instruments; that's just because the patch files are from the INN demo (at which point General MIDI was the standard).

2
SCI Development Tools / Re: "Sounder" tool - alpha version is ready
« on: August 02, 2022, 05:20:51 PM »
Okay, so I've tested it with LSL2 (1.002). The music tracks (those in the 100 range) all converted from SCI0 to SCI1 without error. However, some of the sounds would not convert.
For example: sound.005...
Code: [Select]
C:\SCICompanion\Sierra\LSL2\original_sounds\sound.005 SCI0
Device FB_01 uses [{'ch': 1, 'voices': 8}]
Device ADLIB uses [{'ch': 1, 'voices': 8}]
Device PC_JR uses [{'ch': 1, 'voices': 8}]
Device SPEAKER uses [{'ch': 1, 'voices': 8}]
Device MT_32 uses [{'ch': 2, 'voices': 0}]
Midi length: 1.9 seconds
SAVE SCI1: Ignoring device FB_01, doesn't have a SCI1 counterpart
SAVE SCI1+: Adding GM device, as duplication of MT-32
Traceback (most recent call last):
  File "sounder.py", line 873, in <module>
  File "gooey\python_bindings\gooey_decorator.py", line 134, in <lambda>
  File "sounder.py", line 860, in main
  File "sounder.py", line 617, in save_sci1
KeyError: 1
[12824] Failed to execute script 'sounder' due to unhandled exception!

Sounds 7 and 12 have the same issue.

And I tested the 1988 Christmas Card, for converting from early SCI0 to newer SCI0...

Code: [Select]
C:\SCICompanion\Sierra\demos\88xmas\original_sounds\sound.001 SCI0_EARLY
Device PC_JR uses [{'ch': 1, 'voices': 0}, {'ch': 11, 'voices': 0}, {'ch': 12, 'voices': 0}]
Device SPEAKER uses [{'ch': 1, 'voices': 0}]
Device MT_32 uses [{'ch': 1, 'voices': 0}, {'ch': 2, 'voices': 1}, {'ch': 3, 'voices': 1}, {'ch': 4, 'voices': 6}, {'ch': 10, 'voices': 0}, {'ch': 11, 'voices': 0}, {'ch': 12, 'voices': 0}]
Device ADLIB uses [{'ch': 2, 'voices': 1}, {'ch': 3, 'voices': 1}, {'ch': 4, 'voices': 6}]
Device CONTROL_CHANNEL uses [{'ch': 10, 'voices': 0}]
Midi length: 67.0 seconds
Traceback (most recent call last):
  File "sounder.py", line 873, in <module>
  File "gooey\python_bindings\gooey_decorator.py", line 134, in <lambda>
  File "sounder.py", line 857, in main
  File "sounder.py", line 450, in save_sci0
  File "sounder.py", line 450, in <listcomp>
TypeError: unsupported operand type(s) for -: 'dict' and 'int'
[4636] Failed to execute script 'sounder' due to unhandled exception!

None of the sounds would convert at all. However, all of them do convert to SCI1.

Then tested KQ4, converting the SCI0 sounds to SCI1...
Code: [Select]
C:\SCICompanion\Sierra\KQ4\original_sounds\sound.007 SCI0
Device PC_JR uses [{'ch': 1, 'voices': 0}, {'ch': 11, 'voices': 0}, {'ch': 12, 'voices': 0}]
Device SPEAKER uses [{'ch': 1, 'voices': 0}]
Device MT_32 uses [{'ch': 2, 'voices': 8}]
Device FB_01 uses [{'ch': 2, 'voices': 8}]
Device ADLIB uses [{'ch': 2, 'voices': 8}]
Midi length: 6.6 seconds
SAVE SCI1: Ignoring device FB_01, doesn't have a SCI1 counterpart
SAVE SCI1+: Adding GM device, as duplication of MT-32
Traceback (most recent call last):
  File "sounder.py", line 873, in <module>
  File "gooey\python_bindings\gooey_decorator.py", line 134, in <lambda>
  File "sounder.py", line 860, in main
  File "sounder.py", line 617, in save_sci1
KeyError: 10
[15684] Failed to execute script 'sounder' due to unhandled exception!

Sounds 12, 14, 20, 22, 34, 36, 38, 47, 50, 57, 64, 104, and 203 have similar issues.

3
SCI Development Tools / Re: Convert SCI0 vocab to SCI1 vocab?
« on: July 21, 2022, 11:01:22 AM »
It worked! Exported the original vocab, imported the CSV file back into vocab.900. Compiled all scripts, and the game recognizes commands now! I'll have to play through and check for any bugs.

The only other obstacle here would be updating the Sound files to a format that's compatible with the newer interpreter. SCICompanion doesn't correctly support creation of sound resources that work with the earliest SCI1 interpreters.

Export as MIDI and reimport?

Another problem is that currently there is no way to assign # of voices values to channels for SCI1+ sound resources (Adlib needs this). And you'd have to reimplement all the cue & loop points by hand.

I had similar issues with the QFG1VGA upgrade. I exported the Mac version's sound files' General MIDI tracks as MIDI files and re-imported them. I had to manually re-insert the loop points, and the PC Speaker driver doesn't play any of the music.

Maybe I'll give LSL2 the same treatment, since I've fully decompiled that one, too. It'll give both games better compatibility for fan translations.

4
SCI Development Tools / Re: Convert SCI0 vocab to SCI1 vocab?
« on: July 20, 2022, 11:14:04 AM »
I've got the vocab files here. The original vocab (from 1.006.004), the exported CSV, and the re-imported vocab.900.

I can't test in ScummVM, since it's an unknown game variant.

5
SCI Development Tools / Re: Convert SCI0 vocab to SCI1 vocab?
« on: July 19, 2022, 12:37:55 PM »
Here is the output (WARNING: Strong language found in vocab!), using the game's original vocab.000 and the newest version of Python 3.
Code: [Select]
Python 3.10.5 (tags/v3.10.5:f377153, Jun  6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.

========== RESTART: C:\SCICompanion\re-quest\tools\sci\vocab_export.py =========
strings_import: get_room_number need to add support to define:  SORTCOPY
Warning: class mismatch:  {'words': ['ass', 'asshole', 'bastard'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['bit', 'bridle'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['ass', 'asshole', 'bastard', 'bitch', 'bullshit', 'clit', 'cock'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['ass', 'asshole', 'bastard', 'bitch', 'bullshit', 'clit', 'cock', 'cocksucker'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['ass', 'asshole', 'bastard', 'bitch', 'bullshit', 'clit', 'cock', 'cocksucker', 'crap', 'cunt'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['dark', 'dim'], 'class': ['ADJECTIVE', 'IMPERATIVE_VERB']}
Warning: class mismatch:  {'words': ['enter', 'go'], 'class': ['IMPERATIVE_VERB', 'INDICATIVE_VERB']}
Warning: class mismatch:  {'words': ['gold', 'golden'], 'class': ['ADJECTIVE', 'NOUN']}
Warning: class mismatch:  {'words': ['exit', 'leave'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['giant', 'ogre'], 'class': ['ADJECTIVE', 'NOUN']}
Warning: class mismatch:  {'words': ['place', 'put'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['bit', 'bridle', 'reins'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['boulder', 'boulders', 'rock'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['boulder', 'boulders', 'rock', 'rocks'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['place', 'put', 'set'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['ass', 'asshole', 'bastard', 'bitch', 'bullshit', 'clit', 'cock', 'cocksucker', 'crap', 'cunt', 'damn', 'fart', 'fuck', 'piss', 'shit', 'shithead'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['barn', 'stable'], 'class': ['ADJECTIVE', 'NOUN']}
Warning: class mismatch:  {'words': ['barn', 'stable', 'stall'], 'class': ['ADJECTIVE', 'NOUN']}
Warning: class mismatch:  {'words': ['boulder', 'boulders', 'rock', 'rocks', 'stone'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['boulder', 'boulders', 'rock', 'rocks', 'stone', 'stones'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['ass', 'asshole', 'bastard', 'bitch', 'bullshit', 'clit', 'cock', 'cocksucker', 'crap', 'cunt', 'damn', 'fart', 'fuck', 'piss', 'shit', 'shithead', 'turd'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['path', 'road', 'trail', 'walk'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['path', 'road', 'trail', 'walk', 'walkway'], 'class': ['IMPERATIVE_VERB', 'NOUN']}
Warning: class mismatch:  {'words': ['whale', "whale's"], 'class': ['ADJECTIVE', 'NOUN']}
Warning: class mismatch:  {'words': ['wood', 'wooden'], 'class': ['ADJECTIVE', 'NOUN']}
Traceback (most recent call last):
  File "C:\SCICompanion\re-quest\tools\sci\vocab_export.py", line 156, in <module>
    vocab_export(args.gamedir, args.csvdir)
  File "C:\SCICompanion\re-quest\tools\sci\vocab_export.py", line 139, in vocab_export
    write_csv(csvdir, sorted_vocab, config.vocab_csv_filename)
  File "C:\SCICompanion\re-quest\tools\sci\vocab_export.py", line 146, in write_csv
    dict_writer.writerows(vocab)
  File "C:\Users\eoakf\AppData\Local\Programs\Python\Python310\lib\csv.py", line 157, in writerows
    return self.writer.writerows(map(self._dict_to_list, rowdicts))
_csv.Error: need to escape, but no escapechar set

The last few words (ANYWORD, NOWORD) failed to be exported to the CSV file.

When importing the CSV file back into the vocab, SCICompanion seems to be able to read it right, but the interpreter doesn't recognize any words, probably because the vocab wasn't exported right.

6
SCI Development Tools / Convert SCI0 vocab to SCI1 vocab?
« on: July 18, 2022, 01:35:41 PM »
My KQ4 upgrade patch is looking good. Now I've ported the game to interpreter S.old.010 (from the KQ1SCI demo).
With the system scripts updated, everything carries over with little issue, and there's MUCH more heap space available! Except... the main vocab is incompatible. Saving it as vocab.900 doesn't help.
Could SCI0 vocabs be converted to SCI1 vocabs? I know they were just compiled differently; the original source dictionary files are structured the same.

In the future, I plan to update the interpreter to 1.000.172 (from The Seasoned Professional). I know about this project which VGA-ifies the game. The only other obstacle here would be updating the Sound files to a format that's compatible with the newer interpreter. SCICompanion doesn't correctly support creation of sound resources that work with the earliest SCI1 interpreters.

7
I extracted the pics with ScummVM, then viewed them in SCIViewer (which can actually read them, surprisingly). I found some additional arena pics that aren't in the DOS version.

Pic 431 is an alternate version of the main forest arena. It's slightly brighter, and has colors for the Cheetaur in its palette.

Pic 432 is another variant, intended for either the Troll or Saurus.

Pics 435, 440, and 460 are all unused forest arenas! The funny thing is that 460 was actually used in the demo. I've put them here as BMP images (preserving their embedded palettes). Click on them and they'll display properly.

8
Just added this egg toy upgrade patch. It'd be nice to have a full decompilation of the Mac version.

9
And here's the day-to-night effect in action, in the mountains.

You will notice that I put the status line at the bottom of the screen. This is to cover up the fact that the removal of the kernel-based status line freed up space at the top, resulting in imported pictures having a white line at the bottom.


10
Updating the engine again, this time to SCI2.1. I'm using the debug interpreter from January 1995, which still supports 320x200 resolution graphics (SCI upscales them to 640x400). Quite a few code rewrites and a new set of system scripts were needed, but it compiles and works after that.

Now I won't be constrained by QFG1's original palettes. I'm now basing the day-to-night transition and palette mapping on QFG4, with the talker color assignment based on QFG1. This will require exporting the SCI1.1 pics and views (as well as the extracted AGS sprites) to BMP files, then importing them back into SCI2 resources to map them to the new palettes. The transition is surprisingly accurate.

To create the night and sunset palettes, it's just a matter of adding the pics' embedded palettes as palette resources, then applying a tint to said palettes (dark blue for night, orange for sunset).

Code: [Select]
QFG4 palette map
Global colors: 0-79
Palette 1000 is the global night palette. Palette 2000 is the global sunset palette.
UI colors: 80-111
Room colors: 112-235
Talker colors: 236-252
Remap color: 253
Skip color: 254
Only colors 0-79 and 112-235 should be tinted for the night or sunset palettes.

11
Now I am working to bring the game to SCI2.0. This required a whole new dialog tree system (based on QFG4's). Lots of script code will need to be revised for the 32-bit engine. And Companion will need to better support SCI32 so that graphical issues with the views (caused by the way RESOURCE.MAP is altered, not by the views being exported from SCI1.1) don't occur anymore. But I think it'll be worth it.

12
I've just finished my decompilation for King's Quest I! While WinAGI gives a warning about the absence of sound 34, this can be safely ignored.

The decompiled version is 2.0F, as that is the version being sold through digital storefronts. Now it's ready for testing.
Looks like you're making a lot of progress. Regarding the sound 34 issue, is that the only warning you got when you first imported it? I have KQ1 version 2.0F, and I get four invalid sound resource (34, 35, 36, 37) when I import it.

Also, the warning should say "WARNING: Sound34 has an invalid location (134703) in the VOL file(VOL.2)", which means there is an entry in the SNDDIR file, but it doesn't point to a valid resource in the VOL file. Is that the warning you got? Or did it say the resource was missing or absent? I just want to make sure WinAGI is working correctly and not giving the wrong warnings.

Yes, it gives this in the error log:
Code: [Select]
LOAD GAME WARNINGS:
C:\AGI\kq1agi\KQ1.wag
29-Mar-22 12:32:11 PM
  WARNING: Sound34 has an invalid location (134703) in the VOL file(VOL.2).
  WARNING: Sound35 has an invalid location (134799) in the VOL file(VOL.2).
  WARNING: Sound36 has an invalid location (134893) in the VOL file(VOL.2).
  WARNING: Sound37 has an invalid location (135787) in the VOL file(VOL.2).



13
I've just finished my decompilation for King's Quest I! While WinAGI gives a warning about the absence of sound 34, this can be safely ignored.

The decompiled version is 2.0F, as that is the version being sold through digital storefronts. Now it's ready for testing.

14
Great! I've just completed the decompilations of the remaining demo packs. Just the KQ4 demo is left.

15
I've just done decompilations of some of the AGI demos. When attempting to import DEMOPAC1 (Helicopter, PQ, Thexder, SQ2, Mother Goose, LSL), I get the following error: "Property or method not available until object is loaded". And when attempting to import either the AGI3 demo pack (Gold Rush, Manhunter, Mother Goose, PQ, SQ2, LSL) or the KQ4 demo, it complains about invalid sound resources.

Pages: [1] 2 3 ... 16

SMF 2.0.19 | SMF © 2021, Simple Machines
Simple Audio Video Embedder

Page created in 0.104 seconds with 21 queries.