Code Monkey home page Code Monkey logo

mol's Introduction

Mol

Mol is a Baldur's Gate 3 Demake for the Tandy TRS-80 Model 100 and ZX Spectrum, built on the Dungeon Delver Engine.

Demo and Making Of:

making of video

demo demo demo demo demo demo

Legal Musings

Mol should be seen as a piece of "interactive fanart." Other recent demake projects have been taken down, but I believe this should be fine for the following reasons:

  • It's not a paid product.
  • It will never be even remotely close to a 1-1 representation of its inspiration, and playing it will not be a satisfying substitute for the original experience.
    • To that end, I intend to keep the overall tone a little lighter and partially based on memory. If it makes it far enough into development, it may even border on parody.
  • It does not require circumvention of any security features to run on the platform.
  • It's on a niche platform with a long-defunct parent company.

For now, this is the flagship project driving further development of DDE. In the event this does get taken down (despite my ironclad reasoning above), that library should be unaffected, as, on its own, it's a valid OGL-SRD 5.1 use case. All references to WotC/Larian IP and other SRD no-nos are contained to this repository. I've got a few ideas on where I could take DDE if this gets Lamberted, like more-advanced 80 family machines or an original campaign.

Running

TRS-80 Model 100

The Releases page should have the latest build of the project. You should see both .co and .hex files for each act (currently just act 1).

From Cassette

Thanks to majick, the build script produces a .co-formatted file binary file. This file is too large to work in the Model 100's built-in storage, but can be loaded up through the cassette interface. This is currently only confirmed working on CloudT, but should, theoretically, work on a stock Model 100 when loaded through the cassette interface as well. To run it on CloudT:

  1. Enter BASIC, and run clear 256,43776
  2. Click "Choose File," and select bg31.co
  3. Run cloadm
  4. When it's done loading, run call 43776

Physical Model 100/102 From Disk or TPDD Emulation

The .co binary can be loaded into memory via disk, on physical hardware. The easiest method is to use an emulated TPDD, such as dl2/dlplus or LaddieAlpha, with TS-DOS in ROM or with some other small DOS bootstrapped via dl

Assuming TS-DOS, since that's the most common:

  1. Enter TS-DOS and press F5 to enable DOS-ON mode
  2. Exit to MENU
  3. Enter BASIC and run CLEAR 256, 43776
  4. Run LOADM "0:bg31.co"
  5. When it's done loading, run CALL 43776

This method has been tested to work on physical hardware.

Physical Model 100 with Just a Serial Cable

If all you have is a stock Model 100 and a serial cable to connect to a modern PC, then the dungeon-delver-engine repo has a two-step process with a loader script followed by a native loader program that can help you out. Refer to the dungeon-delver-engine docs for that process.

Virtual-T

Using the Virtual-T emulator, first run clear 256,43776. Then, using the Memory Editor tool, load the output .hex file starting at address $AB00. Once that is done, you can run it with call 43776.

ZX Spectrum

The Releases page should have the latest build of the project. You should a .tap file for each act (currently just act 1). With the tape ready, the game can be loaded and run with LOAD "". This has so far only been verified via the Fuze emulator set to the Spectrum 48k ROM, and has not been verified on physical hardware.

Controls

On all platforms, both arrow keys and WASD are supported for movement and navigating menus. ENTER is used to select menu options and interact with interactables. On the Model 100, the ESC key can be used to bring up the menu and cancel combat attacks and casting. That key is DELETE (backspace) for the ZX Spectrum.

Building

Basics

This project requires zasm and python 3. It also requires the dungeon-delver-engine submodule to be present, which you can get with git submodule update --init.

The build system is waf, which itself is built on Python, and the waf "executable" is versioned alongside this project. To use waf, you can invoke it with ./waf on *nix platforms, or use ./waf.bat on Windows. It's recommended, especially if you use other waf projects, to set up an alias to make invocation simpler (such as alias waf=./waf).

When you first check the project out (or after pulling down updates), you'll first want to run waf configure, which will set up some paths and ensure it can find zasm. This step will fail if zasm is not in your PATH, or if your python version is below 3.

After that, simply run waf to build all outputs and run unit tests. You'll usually only need to run waf configure after changes to the build script, or to make changes to your selected options.

ZX Spectrum (Experimental)

The ZX Spectrum build is currently disabled by default until stabilized. To enable it, pass zx_spectrum to waf configure's --platform option. You can supply it on its own, or with both platforms:

# Spectrum on its own
waf configure --platforms=zx_spectrum
# Spectrum and Model 100
waf configure --platforms=trs80_m100,zx_spectrum

When you select the zx_spectrum platform, waf configure will also ensure you have bin2tap (from zxspectrum-utils) available in your path. This is required to package the raw binary output from zasm into a tape format with a BASIC bootloader.

Note: The reason this is disabled by default is that the build will currently fail on the first pass when calling bin2tap. Simply invoking waf multiple times does eventually produce a working tap file.

mol's People

Contributors

ajbowen249 avatar majick avatar

Stargazers

Kevin B Slater avatar  avatar Galli Davide Francesco Maria avatar Andrew Diller avatar  avatar Vitaliy Babichev avatar  avatar Nikolaj Zamotaev avatar  avatar  avatar  avatar  avatar Doug Estey avatar Sergio A. Lopez avatar Alex Wiese avatar  avatar Nina Morgan avatar Jim Doyle avatar Thomas "Chef Tom" Mottl avatar  avatar David Anderson avatar Noah Burney avatar

Watchers

 avatar

mol's Issues

6502 support?

Hey, and thank you for making this project!

I saw you recently added ZX Spectrum support, and I was wondering how feasible is it for you to support 6502 in the future. I know that x86 and Z80 assembly has a lot of things in common, so it's easier to make a port โ€“ not to mention that 6502 has only 3 usable registers. So it is very unlikely or are you considering this?

[NotABug] Build a REX memory image of the game, for easier loading on modern M100/T102 systems

While the .CO file makes it somewhat easy to load the game from a TPDD emulator (or even a real TPDD!) to real hardware, even easier would be a REX memory image so that it's possible to simply switch to the game image and CALL it. Since tons of modern users of the M100/T102 have one or another kind of REX, this significantly increases the convenience.

Building a BY file is incredibly difficult to do programmatically during the build process so...

I just did it by hand and posted it to my bucket. Feel free to grab the .BY file and post it as an artifact manually.

Tandy 200 support / Option ROM

Baldur's Gate does not appear to run on a Tandy 200. Even loading the .hex file with Virtual T's memory editor does not appear to work. Instead the machine locks up and needs to be reset. After that, CALL 43776 prints ?OM ERROR (Out of memory error).

While assembly programs often are not portable to the Tandy 200 because they call the wrong subroutine locations, this appears to be primarily due to lack of RAM. (The Tandy 200 has 72K of RAM, but it is split into three 24K banks).

The solution to this might be to compile the program as an "Option ROM". I am not sure, but I believe that will give Baldur's Gate 32K of space for program storage which does not use up any RAM. Running such a program is fairly easy these days since the REX# chip allows any 32KB file to be loaded as an Option ROMs without having to burn an EEPROM. Of course, not everyone has a REX, but enough people do that it would be a welcome improvement.

This method would also give more breathing room for future game development so the missing features from Baldur's Gate could be filled in.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.