mirror of
https://github.com/StewBC/mminer-apple2.git
synced 2024-06-25 13:29:29 +00:00
April 30, 2021 Update
This commit is contained in:
parent
b65242cb0c
commit
2cf027fc1c
55
README.md
55
README.md
|
@ -1,6 +1,13 @@
|
||||||
# Manic Miner
|
# Manic Miner
|
||||||
Remake of the ZX Spectrum game for the Apple II.
|
Remake of the ZX Spectrum game for the Apple II.
|
||||||
|
|
||||||
|
Updates:
|
||||||
|
i. 30 April 2021 - I Sped up rendering for a more even experience, especially
|
||||||
|
in The Vat and The Warehouse. The Apple II vesrsion is marginally slower than
|
||||||
|
the ZX Spectrum version (I think - tested with Speccy) but feels pretty good.
|
||||||
|
To make room for the fully unrolled level rendering, I sacrificed the lower
|
||||||
|
case letters in the font. I updated the table of timings, below.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
|
|
||||||
This is a game I have always loved, from the moment I saw it in a computer shop
|
This is a game I have always loved, from the moment I saw it in a computer shop
|
||||||
|
@ -88,35 +95,46 @@ as much as is possible given the limitations.
|
||||||
4. TECHNICAL DETAILS
|
4. TECHNICAL DETAILS
|
||||||
|
|
||||||
The game is written in 6502 assembly language using the ca65 assembler. The
|
The game is written in 6502 assembly language using the ca65 assembler. The
|
||||||
game uses memory from $0800 to $B52C.
|
game uses memory from $0800 to $BE4B.
|
||||||
|
|
||||||
Below is a CPU cycle profile of 1 game frame in stage 1 after a couple of
|
Below is a CPU cycle profile of 1 game frame in stage 1 after a couple of
|
||||||
seconds of being on the level. The door isn't visible so this renders only the
|
seconds of being on the level. The door isn't visible so this renders only the
|
||||||
one enemy and Willy, as well as the level tiles. The auidoPlayNote includes an
|
one enemy and Willy, as well as the level tiles. gameDelay is an artificial
|
||||||
artificial delay that's based on the number of tiles rendered. If I didn't have
|
delay based on how many tiles were rendered, which smooths out the gameplay,
|
||||||
that, the really empty levels such as SkyLab would play the in-game music way
|
and thus song tempo across levels. If the music is turned off, audioPlayNote
|
||||||
too fast. However, this does mean that the game experience is smoother with the
|
will also create an artificial delay to simulate the delay incurred by
|
||||||
music turned off, since there's no artificial delay.
|
toggling the speaker.
|
||||||
|
|
||||||
Hex | Dec | Frame % | Item
|
Cycle counts are not constant across all frames so all timings below are
|
||||||
--- | --- | --- | ---
|
approximate.
|
||||||
19C3E | 105534 | 100% | Total Frame
|
|
||||||
|
Hex | Dec | Frame % | Item
|
||||||
|
--- | --- | --- | ---
|
||||||
|
1267f | 75391 | 100% | Total Frame
|
||||||
18 | 24 | 0% | inputGet
|
18 | 24 | 0% | inputGet
|
||||||
E8 | 232 | 0% | willyMove
|
E8 | 232 | 0% | willyMove
|
||||||
80 | 128 | 0% | gameAI
|
80 | 128 | 0% | gameAI
|
||||||
5EF3 | 24307 | 23% | screenClear
|
5EF3 | 24307 | 32% | screenClear
|
||||||
123 | 291 | 0% | tilesAnimateKeys
|
123 | 291 | 0% | tilesAnimateKeys
|
||||||
47 | 71 | 0% | tilesAnimateConveyor
|
47 | 71 | 0% | tilesAnimateConveyor
|
||||||
6EB | 1771 | 2% | screenDrawSprites
|
6EB | 1771 | 2% | screenDrawSprites
|
||||||
C55 | 3157 | 3% | screenDrawWilly
|
a07 | 2567 | 3% | screenDrawWilly (For collisions)
|
||||||
C6FD | 50941 | 48% | screenDrawLevel
|
71d7 | 29143 | 39% | screenDrawLevel
|
||||||
DDA | 3546 | 3% | uiUpdate
|
8d1 | 2257 | 3% | screenDrawWilly (For display, over level)
|
||||||
3A | 58 | 0% | screenDrawSprite (door)
|
3A | 58 | 0% | uiUpdate
|
||||||
26 | 38 | 0% | screenSwap
|
3a | 58 | 0% | screenDrawSprite (door)
|
||||||
51BD | 20925 | 20% | audioPlayNote
|
28 | 40 | 0% | screenSwap
|
||||||
|
1d1f | 7455 | 10% | audioPlayNote
|
||||||
|
1f76 | 8054 | 11% | gameDelay (sparse vs abundant level draw equalizer)
|
||||||
|
|
||||||
As can be seen, clearing the area where the world will be drawn takes almost 24%
|
As can be seen, clearing the area where the world will be drawn takes almost
|
||||||
of the frame and drawing the level tiles takes about 50% of the frame!
|
32% of the frame and drawing the level tiles takes about 39%, plus 3% to
|
||||||
|
re-render willy, of the total frame. Drawing is almost 80% of the frame.
|
||||||
|
|
||||||
|
The ZX Spectrum version had Willy under the level tiles, but I prefer Willy
|
||||||
|
in front, so I re-render willy without collision detection once the level tiles
|
||||||
|
have been drawn, so he is always in front (but before the door is drawn so he is
|
||||||
|
behind the door).
|
||||||
|
|
||||||
5. KEYS
|
5. KEYS
|
||||||
|
|
||||||
|
@ -272,6 +290,7 @@ apple commander jar file. Here's how it's done for different shell's:
|
||||||
GIMP exported BMP.
|
GIMP exported BMP.
|
||||||
* Everyone involved in the Apple II projects (AppleWin | AppleCommander).
|
* Everyone involved in the Apple II projects (AppleWin | AppleCommander).
|
||||||
* Everyone involved in making the cc65 tools, it's very good.
|
* Everyone involved in making the cc65 tools, it's very good.
|
||||||
|
* Ian Brumby for showing me how you really unroll a draw loop.
|
||||||
|
|
||||||
9. CONTACT
|
9. CONTACT
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user