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 - deckarep

Pages: [1] 2 3
1
I wanted to see how far down the rabbit hole to go to get this running as a native desktop app for MacOS.
Well, it?s not too bad!

There?s been various attempts by the open source community to get it running. Without that as a starting point, this wouldn?t be possible for me. Anyhow, if you have a newer Apple Silicon M chip Mac this will work for you!

You will likely have to approve it so Gatekeeper stops complaining. There?s info on the site about it.

https://deckarep.itch.io/johnny-castaway-demo

- no emulation needed
- no bootcamp/parallels
- no Windows 3.1
- no need to compile anything
- just download and run

2
SCI Development Tools / Sluicebox Decompiler is open sourced
« on: April 07, 2025, 11:53:16 AM »
Very nice of him to finally do this: https://github.com/sluicebox/sci-tools

It`s a c#/dotnet toolset and I was able to get this running on Apple Mac Silicon on the first try!

Sluicebox if you are in this community a big thank you! And of course a big thank you to any and all SCI hackers past and present!

3
Hi friends,

I?ve long been thinking of different ways to enjoy some of the characters from the classic Sierra games and ended up prototyping a casual Match-3 Bejeweled style game themed after KQ6.

I know it?s not an adventure game but I see it as a supplementary works to the original game with the goal of offering a new, nostalgic experience.

Curious to hear thoughts!


4
SCI Development Tools / Re: Larry Casino Sprites and Audio extracted.
« on: August 24, 2024, 01:00:01 AM »
Thanks Doomlazer!

I would say the saving grace about LC is at least most games are playable offline and you can still get some of the experience with the talking characters. But it?s a shame a lot of it is no longer working due to WON being down.

5
SCI Development Tools / Larry Casino Sprites and Audio extracted.
« on: August 23, 2024, 04:41:57 PM »
Hello,

I know this is not a traditional adventure game and it only runs on Windows but the 1998 game Larry's Casino has had much of its resource format reverse engineered and extracted in terms of sprites, UI elements and audio.

I couldn't have done this effort without the help of @doomlazer who was kind of enough to contribute time, energy and code to the effort and additionally was solely responsible for all the audio extraction effort which he previously did in his TrivialQuest project found here: https://github.com/Doomlazer/TrivialQuest

This reverse engineering effort was written in Python3 and as it stands still needs some effort to get the game backgrounds extracted to be 100% completed.

Please see the project here: https://github.com/deckarep/laffer-casino-extractor

Btw, although Larry's Casino is not an adventure game, buried within the binary are many references to SCI components and namespaces. It has many concepts related to SCI and seems to have some degree of the engine baked within it which is why I've added it under this forum category.

If anyone wants to take a crack at extracting the backgrounds, please submit a pull-request to the project. To get started all you need is the original game's RESOURCE.VOL and RESOURCE.AUD files.


6
SCI Syntax Help / Re: SCI0: Events claimed Flags etc
« on: August 21, 2024, 07:38:30 PM »
Hello,

For the event system:

The event system is designed in such a way that an event object is fired from the end-user such as a mouse click. This will get filled out with information indicating the type of event and additionally indicating some other data such as x/y coordinates.

When an event is fired, it's passed into the game giving many objects a chance to handle it. If for example, an object has handled it then it would set the claimed property to a 1 otherwise claimed remains zero and the event is further propagated or bubbled further and further down the "event handling" hierarchy. If you have handled the event, and you have set claimed to 1, then the event no longer needs to propagate down to each component of your game and basically has been used up.

For the flags:

The SCI code has a few procedures for setting, getting and testing flags. Every game has some number of global fags which are actually represented as packed bits. You the programmer can think of them as either on or off, true or false, yes or no, etc. But, internally it's just a single bit that gets enabled or disabled accordingly. The flags are a very compact way to represent some boolean state for your game. Since memory was precious back then, the flags system was written in a way to keep memory usage to a bare minimum.

This may have changed across versions of SCI but SCI allowed up to 128 flags stored within 8 16-bit global vars. This means that the flags are truly to global to your game and available everywhere. Also, it means only 8 16-bit slots are needed to store 128 flags.

As you can see having the ability to have 128 flags for your use only takes up 8 global slots. But, this means you need to use the flags API correctly and the way you do this is by using the define keyword to create a flag name. Something like: fRadioPlaying

So you would do something like: define fRadioPlaying 0 (the 0th flag) This just defines the flag.
Then you can turn on the radio like: setFlag(fRadioPlaying) // This enables the flag.
You can turn it off like: clearFlag(fRadioPlaying) // This disables or clears the flag.
You can toggle itlike: toggleFlag(fRadioPlaying) // This just flips the flag from whatever it's currently set to.
You can also check if some defined constant is a flag: isFlag(fRadioPlaying) // This tells you if it's a flag or not (declared in the range of one of the 8 global 16-bit vars)


7
Kawa,

I think everything you've mentioned are docs I've got in my book. At least for the docs I'm aware of, I know they don't cover all variations of the SCI engines *but by god* I'm just thankful some of them exist. It truly is great to have such documentation in place. It also helps to understand the rationals behind some technical decisions.

8
Hmm, sorry for the late reply I don't know why I never got email alerts.

1. Before I open-source it I'd like to development the engine further but took a break from it. It's a fairly large under-taking for a hobby project.
2. The transpiler converts SCI script -> Python3 syntax
3. In order to work however I had to start building my own kernel code
4. I also had to implement my own bootstrap runtime - this is to simulate loading SCI modules in and out dynamically as well as to handle some in-memory intrinsics like knowing whether a handle to an object is either a "class" or an "instance". It's also, to instantiate at runtime anything which should live as an "instance".
5. I've been referencing ScummVM's implementation but writing the code from scratch where it's needed, I've been referencing some of the full-game source files that are out there on the interwebs and I've been referencing the SCI16 source code as well. Plus the wikis and various development docs that exist on System/Class files.
6. This giant effort has been a super deep-dive for me into how SCI works and as a result I've compiled a notebook of printed material that is starting to feel like a bonafide Sierra Developer Docs book for new hires. I would imagine Sierra had something like this for new programmers so they can get started building rooms for games.

9
Hello,

Just wanted to share some progress on the viability of SCI's runtime reimplemented in Python3. The YouTube link will have much more context and details on exactly what is happening. But I now have a good portion of code running rm110 on LSL1-VGA. There's lot of things that are not yet implemented but many things do work. The game is running at ~60FPS but so far isn't doing anything too taxing except for animated like 5 cast members, playing some layered audio tracks and unlike the original engine rendering everything each frame.

It will be a lot more work to get even a single game playable, let alone completable. But this has so many possibilities.



Give a careful listen to Ken's blabbing...

10
As I mentioned, I was willing to go down that route...but I just now tried the suggestion and I got exactly what I was looking for.

Can confirm that running the CLI tools from Wine on MacOS worked!

Here's the info I wanted:

Code: [Select]
<Loop>
                <Cel Width="1" Height="1" X="0" Y="0" Key="255" />
                <Cel Width="23" Height="15" X="0" Y="9" Key="255" />
                <Cel Width="23" Height="16" X="0" Y="9" Key="255" />
                <Cel Width="23" Height="16" X="0" Y="9" Key="255" />
                <Cel Width="24" Height="16" X="0" Y="9" Key="255" />
                <Cel Width="23" Height="16" X="0" Y="9" Key="255" />
                <Cel Width="23" Height="16" X="0" Y="9" Key="255" />
                <Cel Width="22" Height="16" X="1" Y="9" Key="255" />
</Loop>

So, no need to re-invent the wheel, at least for now.


11
Sweet, if it works in Wine there's a good chance I can use it. In the worst case, I don't mind spinning up a Windows VM but :groan: :groan:...

Thanks for the suggestion!

-deckarep

12
Hello,

I'm aware of a lot of development tools that are GUI and Windows-based. I'm on a Mac, so I'm partially screwed although I know I can spin up a Windows virtual-machine to use such tools.

My question is, do any command-line tools exists (newer ones) that can reliably extract SCI-based resources with the appropriate meta-data intact? What I'm specifically looking for as an example is a tool that can extract background PIC resources and name them appropriately. For a VIEW, it would be more involved; a tool that can extract the View into a modern image format like .png (with the correct file-name) but also extract the meta-data into some format where the meta-data describes the pattern of the view: the loop number, the cell width/size, whether it's used as a mirror or not.

I suppose I have two options on the table:
   1.) use SCICompanion and just do an extract-all but to my knowledge this won't provide the meta-data that I need, to also understand the layout of the views. Pics are easy, because they're just static backgrounds with the same dimensions (to my understanding).

   2.) My other option is to just bite the bullet and build it or hook into the appropriate code with the ScummVM project which I'm also willing to do.

So far I'm aware of: SCICompanion, SCIStudio, the original DOS executables created by Sierra floating around, some open-source projects out there none of which I was able to get working (for the open-source tools).

I just wanted to see if this already existed before I go down this path since I was quite sure something already existed in this realm...maybe not.

Thanks to anyone who can point me in the right direction.

-deckarep

13
SCI Development Tools / Re: Voice acting in Space Quest V - Part 2
« on: January 25, 2024, 07:30:17 PM »
I'm genuinely curious what exactly the problem with an AI generated voice is?

There's a huge backlash with AI that I don't understand. Sure it can be a bad performing model and not sound great. But some of them do and its only going to get better. Meanwhile there are people who can benefit from Text-To-Speech solutions that are more natural surrounding whether it's artificially generated or not.

Also, some voice actors are sanctioning their voices to be licensed in this manner so it's not all bad. It may not be some peoples preference but it doesn't automatically make AI voice generated bad across the board.

Yolo!

14
@Kawa regarding sends I agree. On one hand I?d like the code to read as close as possible to the original. On the other hand my solution would have more overhead and goes against the grain of the target language.

I may just resort to taking your approach and calling it a day. We shall see.

Thanks for the feedback and for the reference to your lua approach. I love lua too as the language is small and the vm is brilliantly designed.

15
Oh cool @Kawa!

I'm no so off my rocker after all!  ;D

I'm trying to see for Lua how you represented cascade syntax.

Here is so far the best I can do in Python, too bad I can't have colons in identifiers:

gEgo.send(
         egoSpeed_,
         normal_, 0,
         view_, 811,
         setLoop_, 0 if register else 1,
         setCel_, 8,
         setCycle_, End, self
)

Original syntax:

(gEgo
          egoSpeed:
          normal: 0
          view: 811
          loop: (if register 0 else 1)
          cel: 0
          cycleSpeed: 1
          setCycle: End self
)

Latest code: https://gist.github.com/deckarep/a4af4b8b16851e65688a94f445fb1a8e

Also one super cool benefit already is in my private Github repo, now all of this code is easily navigable with Github's powerful indexing abilities and what not. For searching, hopping around it's great!

-Deckarep


Pages: [1] 2 3

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

Page created in 0.035 seconds with 19 queries.