| |
Evening Star Enhanced [2023] |
|
Released by : Grue
Release Date :
23 December 2023
Type : C64 Game
|
Credits :
SIDs used in this release :
Download :
Look for downloads on external sites:
Pokefinder.org
Production Info Submitted by Grue on 23 December 2023
Evening Star modifications to the original game code:
Making Bitmap and Gfx Buffer copy and empty routines much faster
Engine gfx copy to straight loop without RLE depacking.
Engine gfx now handles emptying the buffer at the lower part of the buffer
Gauge base gfx plot now LDA / STA sequence with no looping. The original was way too slow
Implemented Buffer clear code to get rid of rubbish in my engine, clearing the lower part of the buffer Caused
Buffer to bitmap copy, replaced with faster code.
Signal and Gradient copy to bitmap now way faster.
Removed "Collar line" from the play area. It was drawn with a slow 3D engine
- reimplemented it later into bitmap clear speed code as plain lda/sta sequences.
Message area of the play screen scrolls bitmap, also when there is no message shown
- Implemented M key to control scroll on/off
- If there's no message shown, don't scroll empty bitmap...
Implemented Fire color in the firebox, as seen on the ZX-Spectrum version
Fixed file operations to be device-independent
Better random number routine added from Codebase64.com
The original game used a Kernal jiffy clock for random
Replaced original keyboard handling with something different
- Original game read keyboard 3x in the main game loop to avoid lag
- Keyboard is now read in IRQ, and the received key is stored in memory
- GETIN is not called again until the game has processed the earlier key and acknowledged that the key is read
- With this modification, we can call the read keyboard just once in the main loop and get a responsive game experience
Added Pause Message
Implemented a $d030 speeder in the border area for c128 and other compatible turbos
-original game with vice = approx 7min 39sec
-highspeed run with vice c64 = 5min 52sec
-C128 + IDE64 = 4min 6sec
-U64+external cart settings with $D030 in borders and 48Mhz = 1:36
-U64+external cart settings with 48Mhz always on = 43sec
I traced Loading Bug for too long, but in the end, it was a refreshing learning experience for a note here:
- If you have IRQ running on $fffe/$ffff, you cannot switch Kernal on if you use raster IRQ
- Set 0314/0315 somewhere you can ack raster IRQ with d019
- Make sure you don't typo #<label #>label
- load needs LDA #$00 before the call to load,8,1 even when it is set in SETSLFS
- try to name your variables in a easier way to debug...
TNT/Bf supplied a patch that fixes the Track Gradient display code. The original was bugged.
- now it can show steep slopes. The original code had a bug that prevented that
- even better patch!
Fixed C128 $d030 turbo again to work with the IDE64 and C128 combination. You cannot call Kernal routines safely.
If 2Mhz is on.
Implemented Benchmark for High-Speed run, TOD clock init 50/60hz for NTSC compatibility. End of run Result is shown
on-screen, and you must press X to exit instead of waiting like in the original game once the run is finished.
Added missing train gfx to the title screen that the ZX-Spectrum version of the game has.
Tnt made optimizations for the line drawing routine.
- Integrated Draw_Plot routine in Line Drawing code to avoid unnecessary JSR/RTS
- Improved divide calculations seedwise
Implemented more speed code
- The base image for the Engine is now drawn with lda/sta sequences instead of looping
- $FF bytes of Engine are only Drawn once on play screen init as they don't need to update every frame
- Play screen buffer cleaning implemented with speed code.
- In total, over 20sec are gained in the benchmark run.
Keyboard feedback
- upper left corners turn to red when the game reads the key press
- turn back to blue after $10 frames
Tnt supplied a faster buffer to the bitmap copy routine, which cleverly skips parts that don't need updating.
Fixed Benchmark mode, finally. I didn't understand that CIA TOD Times are in BCD
- It took me way too long to realize
- I spend time coding frame counter-based time display to compare results
- It looked like there was 6 seconds difference between real-time and the CIA TOD clock
- Tnt to the rescue, who supplied me with a print BCD routine.
- I feel like an ass now, but everything works!
Implemented the HELP screen for the game screen. It's activated by pressing F1
Current Benchmark result:
- C64 + IDE64: 4 min 15.06 sec
- C128 + IDE64: 3 min 8.06 sec
- U64+external cart settings 48Mhz: 33 sec
- U64+external cart settings 48Mhz Turbobit: 1 min 13.09 sec
- U64 48 Mhz 5.9sec
Cleanups for different screen transitions
Change to tscrunch from tinycrunch as it was so slow
Implemented REU cleaning of Gfx_Buffer and Copying Buffer to Bitmap
- Benchmark with 1Mhz U64 = 4 min 2 sec, 13 secs faster than with CPU
- Implemented REU check and modifying routines accordingly so it should also work in non-REU machines
- REU Detected text added to the title screen if REU is Detected.
- U64 48Mhz with $d030 control using REU: 1 min 13,2 sec
- U64 48Mhz manual control with REU: 34,05sec, sec slower than without REU
Added check for C128
- If the user has C128 and REU, do not do REU stuff in 2Mhz
Intro loading screen viewer started, needs more refining later when I get the final picture from Duce
Changed to nucrunch as earlier packers didn't work with SCPU
The signal panel is now redrawn if it changes. The original code redrew it every 1/4 mile, even when it was the same.
Fixed benchmark to show actual deciseconds
Added fps counter. It Shows how many frames it takes to draw one scene.
- Also, the max value is shown. It can be toggled with the F7 key.
- Benchmark shows the last value and max at the end of the benchmark
Restore key handling so that it won't crash our Game.
Added IRQ -based time counter to measure game progression time.
- 1 round on the game engine is 1sec of game time
- added counter, started on drawing each gfx frame, and check if 50+ frames have passed. If so, run a new round immediately. If not, wait for 50 frames (approx 1sec on PAL)
- implemented time acceleration control to work with this new frame counter.
- Currently, on time acceleration game runs ten rounds and draws a new frame.
TNT supplied:
- Optimized character to bitmap plotting routines, in total 4 seconds gain in benchmark, which is quite impressive
- Optimized number conversions and other printing optimizations
Animated firepit, like on the spectrum version.
- Run on waiting cycles for 1/sec to be filled up.
- Smoke looks much better now
Current benchmark run on plain c64 with vice: 4min 9.4 sec
- REU + c64 = 3min 53.1sec
- TNT supplied yet another version of Signal Draw. 2.2sec faster benchmark run!
- TNT supplied an enhanced Bitmap Scrolling Routine for the message area
Benchmark time
C128: 03:02.5
C64: 4:07.9
Code cleaning
- removed lots of redundant code
- reorganization of the source code into smaller bits
Dynamic framerate
- measure how much time it takes to draw one frame
- use the measured time for the divider for one second, which is one game cycle
- divide the speed by how many times we can draw the game screen during one second
- draw extra frames by adding out divided speed value
- works now with c64, c128 2Mhz, and other c64 CPU speeders like supercpu
TNT supplied yet another improvement on the 3d engine
- objects changed into coordinates from lines
- no need to calculate object points multiple times if we need to draw another line from the same point.
- 30sec improvement on benchmark with stock c64, IMPRESSIVE!
Wrapped things up, removed some debug features from the source code (I hope I didn't miss any), and wrote some release-making additions to the build script. |
|
|
|
| Search CSDb |
| Navigate | |
|
| Detailed Info | |
|
| Fun Stuff | |
· Goofs · Hidden Parts · Trivia
|
|
| Forum | |
|
| Support CSDb | |
|
| |
|