GithubHelp home page GithubHelp logo

overtone's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

fadoli

overtone's Issues

Music player

We'll need to play music during gameplay. The original music files are stored in *.WAV files, but there're also *.MP3 in the bonus content pack. I suggest we should try to support both of these, if possible.

OSx graphic

float
I used this icon and upscaled to 512x512 using GIMP

Then I ran the following

mkdir -p ~/Downloads/Float.iconset
cp ~/Downloads/Float.png ~/Downloads/Float.iconset/icon_512.png
sips -Z 256 ~Downloads/icon_512.png --out ~/Downloads/Float.iconset/icon_256.png
sips -Z 128 ~Downloads/icon_512.png --out ~/Downloads/Float.iconset/icon_128.png
sips -Z 96 ~Downloads/icon_512.png --out ~/Downloads/Float.iconset/icon_96.png
sips -Z 64 ~Downloads/icon_512.png --out ~/Downloads/Float.iconset/icon_64.png
sips -Z 48 ~Downloads/icon_512.png --out ~/Downloads/Float.iconset/icon_48.png
sips -Z 32 ~Downloads/icon_512.png --out ~/Downloads/Float.iconset/icon_32.png
sips -Z 16 ~Downloads/icon_512.png --out ~/Downloads/Float.iconset/icon_16.png
cd ~/Downloads
iconutil -c icns Float.iconset -o Float.icns

Float.icns.zip

Get rid of System.Drawing dependency

In #18, I've introduced a dependency on System.Drawing, since it's the most simple drawing library for the current needs.

Turns out it's not very easy to use it on macOS: it requires libgdiplus.

I think we'll get rid of it eventually anyway (since more appropriate rendering techniques are required for a game project), but I'm filing this issue to not forget about it.

Main game menu

Alright, it's time to implement the main menu.

Features:

  • background (titscrn_0)
  • game title (titscrn_1)
  • three buttons (New Game, Load Game, Quit Tone)
  • probably, parse configuration file describing the UI
  • button mouse hover behavior
  • sparkles!
  • after a while, the title starts scrolling up, with the credits and lore (credits.txt) appearing on the screen:
    • starts scrolling after 27 sec,
    • the title gets scrolled up at 38 sec,
    • looks like this (note intervals!):
      image
      image
      image
    • is cycled
  • background music
  • click sound

Implement logic for rendering/handling dynamic related scenes elements based on the SceneId

We have to setup a way for the code to manipulate what is being rendered as some part of the UI will be dynamic (not speaking about the game rendering at all here, though it might use the same logic if done in a manner that allows it)

Example of dynamics UI :

In Scene0 (main menu), The title screen and the sparkles as well as the text moving up if you're staying on the menu for long enough.
In Scene1 (new game), we can should be displaying text, difficulty and map size elements that are as of yet not rendered at all.

Document the cursors

The game executable has 17 cursors:
image

We should figure out what cursors are used when, for further usage in game.

The resulting "documentation" may be put into a form of source code in Mouse.fs and CursorShape enum inside of the Input.fs file.

Rewrite It In Rust

Thanks for the project!

Did you consider rewriting the project in the only acceptable nowadays programming language - Rust? It will improve the game in all aspects! There are a lot of successful examples of the benefits of RIIRing the project.

If you need help with this, you could always for support here.

GL&HF!

Read `.iso` file directly

Currently, Overtone expects the user to pass the path to the disk data root directory as a command-line argument.

We should accept either this or a path to the ISO file. So, Overtone should be able to automatically extract the required data from the ISO.

The image is blurred a bit on 4k

Take a closer look at the screenshots from #26: both images are a bit blurred. In particular, see the title screen border:
image

It should be solid 1 pixel border, but for some reason, it isn't on 4k screen. In both the remake and the original, no less!

Cursor support

Turns out the game cursors are stored in the original FLOAT.EXE file. We should learn to extract them from the file and use them.

Colors are a bit different

See this image. Original game is on the left; Overtone is on the right. It looks like the palette is different. Why could that be? Perhaps we should introduce some kind of calibration to our palette reader? What kind of color (like EGA or SVGA or whatever) has the original used anyway?

image

Loader screen

During the game startup, we may spend some time loading the resources asynchronously.

There should be some sort of a loader screen during that time.

See TODO[#35] when implementing this feature.

Identify game sound files from the CD

There're the following files on the game CD, which get used in runtime:
- LEVIATAN.WAV
- LIFEGIVE.WAV
- LOSEND.WAV
- MYSTICS.WAV
- PROTECT.WAV
- SEEKERS.WAV
- START.WAV
- WINNER.WAV
We should determine the purpose of every single one.

Enumerate the COB archives

We should enumerate the contents of the COB archives the game has, and determine which resources do we readily have and which we lack from these archives.

windows.txt: analyze the last two values of the PANE field

In the windows.txt configuration file, most PANE items include four values, like PANE 1 2 3 4 (which are actually x₀, y₀, x₁, y₁). But for some items, such as BC_TrnStkC, there are two unknown additional numbers there (-4 0 in that case).

WE should figure out if these values mean anything.

See TODO[#31] in the code for this issue.

Identify the game music files

We should determine names for the main game music files (ACT1.WAVACT4.WAV, AMBIENT1.WAVAMBIENT4.WAV) according to the bonus content archive from the Internet Archive (which contains eight MP3 music files).

Also, we should determine when they're playing in the game (at random, sequentially or what).

  • While doing this, please also clean up any remaining TODOs related to #3 left in the code and the documentation.

Improve shape and texture management

See TODO[#30] in the code.

I want the texture management to cache the already parsed shapes and maybe textures, in case someone asks for them twice.

We definitely shouldn't read the same shape multiple times for every frame requested.

Why C# for gameplay

While I understand C# for all the tooling, I don't quite understand it for the gameplay. It feels like the point and click aspects of the game could be handled via a web-ui, which would also make this title cross-os compatible, and give a wide range of supporting, common API's

Not expecting you to change direciton, more curious to see if it was ever considered?

Show the intro video

Overtone should be able to run the intro video from the game (namely, THING2/INTRO.AVI).

As the video uses an old codec and I don't want to mess with any video codecs (yet), I suggest we use an approach similar to the original: just use the external video player to show the video.

So, we'll need a program that extracts the video file from the ISO provided, and runs it via the OS facilities (something like xdg-open/open on *nix, and a similar facility on Windows).

Learn to extract the original game resources

See this as the main source of inspiration, and also maybe some helper tools from Ascendancy: this and this.

The resources we'll need to extract are:

  • game graphics (unit and building sprites)
  • level background images
  • sounds
  • video
  • music
  • UI elements
  • cursors
  • texts

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.