-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathChangeLog
1319 lines (1268 loc) · 52.4 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
This file is no longer maintained!
See https://github.com/olofson/kobodeluxe instead.
Kobo Deluxe v0.5.2
Kobo Deluxe v0.5.1
* Fixed segfault with weird audio buffer sizes.
* *Maybe* clears the screen a bit sooner... (One
could see a magnified desktop or garbage display
for a moment on some systems.)
* When there is no profile, the automatic New Player
dialog sends you on to the main menu, rather than
back to the intro.
* Added a bunch of AGW explosion sounds.
* Added new "big ship" launch and escape sound.
* Fixed infinite loop bug in filemapper_t::get_next().
(Thanks Joey Hess!)
* New "core destroyed" sound.
* When compiled with PROFILE_AUDIO, the 'R' key
reloads all sound effects.
* Integer atan2() approximation for sprite rotation.
* "Fixed" cubic resampler. (There will be a jump of one
sample when switching to/from cubic interpolation.)
* New player fire sounds, including overheat warning.
* Tweaked various sounds and related logic.
* 10% health award for core destroyed, and another 25%
for stage cleared. (No more 100% for stage cleared!)
* Health can now be up to 200%, but will decrease
quickly towards 100%.
* Destupified the bargraph_t value() interface...
* Waveform info after loading with logverbosity >= 2.
* Added pause sound.
* Added "Safe video settings" message when "escape
hammering" is detected.
* Explosions can now actually show the first frame.
* Explosion "random start frame" removed.
* Initial white flash for explosions.
* Fewer bonus lives! (We have the health bonus now...)
* Default and rock explos assume half speed of objects.
* Added player bolt impact fx.
* Improved player explosion.
* Bomb detonation fx directed at the player.
* Fixed a positional audio wrap bug.
* Configurable "Cannon Sound Suppression."
* Configurable overheat warning buzzer.
* Doubled rock health for Newbie skill.
Kobo Deluxe v0.5.0
* Added 'autoshot' command line switch for grabbing
ingame screenshot series.
* Added animated rocks.
* Added 88.2, 96, 176.4 and 192 kHz sample rates.
* Default video mode changed to 640x480.
* Option 'internalres' considered obsolete. (Was
never implemented.)
* s_filter_scale() fallback from Scale2x and
Diamond2x for non 2x factor changed to bilinear.
* Newbie mode changes:
* Three alternating nose/wing guns.
* Two alternating rearward wing guns.
* Fixed nonsense values for the SDL_GL_DOUBLEBUFFER
attribute. (Thanks, Sam Palmer!)
* Fixed Y/N buttons in the requester dialogs.
* Some new explosions, enemy bullets and other gfx.
* Fixed segfault in myship.cpp in (the extremely
unlikely) case of running out of sprite objects.
* 'pushmove' now counts as a cheat. (No highscores.)
* Added simple parallax starfield, along with none/
old/parallax starfield style switch.
* Intro mode now sets it's own fixed logic rate.
* Enemy definitions now have "death handlers".
* Invisible enemies no longer allocate sprites.
* Background color fade in damage noise flash and
noise-out effects.
* Map now marks cores as needed to select orientation
specific core tiles.
* Broken base branches are left as is.
* No dithering for the logo mask! (Thanks again,
Sam Palmer! :-)
* Separated map tile index from map state bits.
* Added alternate straight sections in bases.
* OpenGL vsync is now optional.
* Added 'S' key for screenshot. (PrintScreen is
stolen by some desktop environments.)
* Larger fps counter, for 1000+ rates...
* Corrected cs_engine_t.time type. Animation should
be smooth and reliable now!
* Tweaked screen.png a little. (Contrast, AA, ...)
* "Audio Options" renamed "Sound Options".
* Rocks are now destructible again (255 hits in
Classic mode; other values in new skill levels).
They also have an explosion all of their own.
* Special detonation animation for bombs.
* Bullets, player, enemies etc in separate layers.
* More firepower in the "Gamer" skill level.
* Benchmark based progress bar.
* Framework overlay now rendered as small tiles in
the corners of the playfield window, to avoid full
window impact on slow video cards in OpenGL mode.
* glSDL:
* Now compiles with OpenGL disabled. (Thanks,
Michael Sterrett!)
* Gamer mode changes:
* Higher firing rate.
* Added "videopages" option to make smart refresh work
with triple buffered displays, and for disabling
smart refresh if all else fails.
* Fixed weird audio fragment sizes.
* Fixed cubic interpolation -1 sample index bug in
a_mixers.h.
* Graphics loader refactored; gets parameters from a
table, and provides more verbose error messages.
* New "Boomerang" fighters with 16 rotations.
* New fighter ship. (Replaces the teal missile.)
* New gray, red and blue missiles.
* Disabled colorkey filter in gfxengine.
* New "loading" logo.
* Slightly slower (more readable) scroll text.
* Added window_t::textwidth_fxp(), to fix the unsmooth
text scrolling.
* Added "How to play" screen.
* Added "Highscores only for Classic mode!" notice.
* Added optional mouse capture when playing. Pause or
abort game to release!
* Added joystick selection. (Thanks, Erik Auerswald!)
* Decided the substantial change in appearance calls
for a minor version bump, so: 0.5.0.
* The -help switch is now handled as a proper command,
avoiding the stupid "unknown argument" error.
* Added -options_man command to output option docs in
Un*x man format.
* Updated the Un*x man file, and replaced the README
with a rendition of the man file.
* Made a new README from the man file.
* New counter font.
* Fixed some minor compiler warnings.
* Updated the TODO.
Kobo Deluxe v0.4.1
* Got fed up with these "pre" version codes that
don't fit into package versioning systems and
look generally silly.
* Implemented logic/audio timeline sync for
constant sound effect latency. Events are no
longer quantized to buffers.
* Improved the latency selector a bit.
* Latency calculations now assume 2 fragments for
SDL. (We use 3 fragments for OSS.)
* Latency calculation now picks the *closest*
buffer size; not the biggest one with lower or
equal latency.
* Removed "games" from the install paths on Un*x
systems, and moved the score files to the more
correct $(sharedstatedir). The install target
now works as expected for an autoconf build.
* Reverb and limiter controls replaced with the
simplified "Ambience" and "Volume Boost"
controls.
* Mega stoopid bug fixed: If video initialization
failed after changing video settings from the
options menu, the game would start back up
anyway - without a display!
* kobo.cpp now keeps a copy of the preferences,
so safe settings can be restored should reinit
inside the run/reinit loop fail.
* LoadRAW_S8() became LoadRAW(), and can now load
"raw" files with an 8 byte header containing "RAW"
followed by the audio_formats_t format code, and
a 32 bit sample rate in big endian format. The
MSB of the format code byte is set if the
waveform is looped.
* Implemented SaveRAW(). (Always saves in the above
format.)
* Implemented quick hack sound caching by providing
a script that saves all sounds to disk, and
alternative loader scripts that use those instead
of the AGW sounds. This currently generates 2 MB
of raw audio data.
* Added window_t::refresh() to enable the engine
to correctly handle windows that aren't repainted
every frame.
* Added endian swapping code for 16 and 32 bit raw
audio files. Files are in big endian, so this
code is only compiled on little endian archs.
* The mixers in a_tools.h now test for the zero
samples in debug builds.
* Removed in-game music pausing/restarting.
* Game Over no longer stops the game logic.
* Player profiles cannot be symlinks. (Security.)
* When loading a "raw" file, audio_wave_load()
takes looped/one-shot from the file.
* AGW w_load() and w_save() now tells EEL about
errors! (Kinda' handy... :-)
* Replaced "fine.raw" with "breakdown1.agw".
(The "fortress destroyed" sound.)
* Replaced "shot.raw" with "missile1.agw".
(The player fire sound.)
* Fixed sound FX bug: _enemy::hit() used x and y
fields of _enemy objects after release().
* Another sleeping bug: _myship::explode()
generated lots of huge, nasty coordinates.
* Removed "expl3.raw" completely, and removed
"bomb.raw" from "core destroyed."
* Added a logger with redirection capabilities.
* Fixed mouse control bug; the crosshair hot-spot
offset was wrong in some resolutions, because
of the border that's put around the screen in
certain resolutions and in windowed modes.
* display_t refactored to use refresh().
* Added dashboard.(cpp|h) and refactored the health
bar to use refresh().
* The framework is now rendered through refresh().
* Removed the pixel_* cruft in the _screen class.
* The _radar class becomes radar_window_t, which
is a window_t with callback driven rendering.
* window_t gets offscreen window/surface support.
* gfxengine now whines a little if it has to change
the buffering mode from the requested one.
* The health bar is only visible if there's more
than one health point maximum. (So, it's no longer
visible in Classic Mode.)
* gfxengine_t should now initialize the dirtyrect
management for page flipping properly.
* Removed the odd "OpenGL" resolutions in the video
options.
* No buffering mode for OpenGL in video options.
* Removed AC_FUNC_MALLOC. Who needs malloc(0)...?
* Added logfile and logformat options.
* Removed all extern "C" clauses around C includes.
* Fixed the "selector tube" heights; the surfaces
were much taller than the images.
* Tweaked the cleanalpha filter parameters.
* Optimized the dither filter; it doesn't *have*
to touch all the data to just do nothing... :-)
* Optimized the image processing filters.
* Added "No Alpha Blending" feature.
* Moved the sprite filters into filters.h.
* loadrect() renamed copyrect() and is now
applying scaling to coordinates like all other
calls.
* SemiTriple removed from buffering modes. You get
the same setup with doublebuffer(1); shadow(1).
* Old retrace sync cruft removed.
* ESC from any "normal" state now gives you some
version of the main menu.
* Added brightness/contrast filter.
* Moved less h/w related stuff from "Video Options"
into a new "Graphics Options" section.
* Added generic 'flags' field to filter arguments,
and threw in a global s_filter_flags as well.
* Removed window dependency from gamestate.(cpp|h)
and changed the license to LGPL.
* Upgraded to glSDL 0.7, w/ dynamic OpenGL loading.
* Added "Random" and "4x4 Filter" dithering methods.
* All graphics converted to PNG format.
* Added support for scaling to (almost) arbitrary
resolutions, including lower than the native
resolution of the graphics.
* The command line usage message now generates the
list of recognized options from the prefs object.
* Buffer overflow bug in new_player_t fixed. (?)
(Thanks to Donny Viszneki for reporting it!)
* Fixed a free()/delete bug in filemapper_t.
* Rewrote most of the radar display code.
* Removed unused scrolling cruft in window_t.
* Changed version to 0.4.1. Too many 0.4something.
* Made the player ship cursor flash slightly.
* Fixed missing slash before the config file name.
(Never noticed this before, as it apparently
affects only Mac OS X.)
* Fixed the title screen cheat mode indicator.
* Thanks to Antonio Messina, who managed to break
the game logic desipte a broken arm:
* Fixed difficulty wrap at stage 1601.
* Added option always_fire.
* Fixed missing gamecontrol_t constructor.
* Bilinear scaling without oversampling is now
actually *without* oversampling.
* Optimization: Scaling checks for clipping or
clamping only near the edges of surfaces.
* The SDL audio callback now deals with "evil"
buffer sizes. (Thanks to Hans de Goede!)
* Losing window focus now pauses the game. (Thanks,
Marianne Ibbotson!)
* Upgraded to glSDL 0.8.
* gfxengine no longer shuts down the SDL video
subsystem when hiding, as this causes problems
with glSDL for no gain.
* Implemented selectable Newbie, Oldie and Elite
skill levels.
* kobo_form_t:xoffs now also works for button().
* Added kobo_form_t:medium().
* Added "spread" fire for Newbie mode.
* Lower rear fire rate for Elite mode.
* Max number of saved scores per profile increased
to 100.
* Added cannon heat/cooling simulation.
* Added Video Mode Manager vidmodes.[ch]
* Some ships flying around in intro mode.
* New screen layout.
* Optimized and improved the video noise effect.
* Menu highlight bar:
* Faster movement.
* Parallax "slime" effect.
* Zoom-to-size effect.
* Made more room for extreme scores in Hall of Fame.
* Red noise to indicate damage.
* Snappier health bar.
* Added gun temperature bars.
* Upgraded to glSDL 0.9. (Colorkey fix.)
* Sound control cleanup; added sound.(h|cpp).
* Changed to Classic mode + four "New Mode" skill
levels; Newbie, Gamer, Elite and God.
* maxfps default changed from disabled to 100.
* Added CharOffset table to SoFont, to avoid mixing
actual character positions up with source blitting
extents.
* Fixed rectangle size calculations and rounding in
the graphics engine. (Improves rendering accuracy
in "odd" resolutions.)
* Fixed screen border refresh.
* Added hotspot logic to the sprite engine.
* New player "plasma bolts" and two new explosions.
* Incomplete base destruction bug fixed (?)
* Fractional frame times use double instead of float.
* Added configurable time filter.
* Default scale mode changed to Bilinear.
* Bilinear+Oversampling removed from config menu.
* Added "Strictly Regulated" frame rate limiter.
* Options moved to "System Options":
* Maximum Frame Rate
* Strictly Regulated Frame Rate
* Time Filter
* Motion Interpolation
* Removed some unimplemented video driver enums.
* Current score and stage is now checked when
quitting from within a game.
* Image filters are now removed properly.
* Added window centering for "some platforms".
* Hammering on Escape is trapped and aborts the
game when loading, or switches to a safe video mode
when running.
* Some refactoring to hunt down memory leaks and other
issues. Most statically allocated objects gone.
* Sped up the slow, annoying nibble effects.
* "Weird characters" in New Player name editor fixed.
* Proper Yes/No dialog for exit and abort game.
* Unused song ballad1 + instruments removed.
* "Dummy" score file (for WinZIP) is now minimal, no
scores, no stages finished.
Kobo Deluxe v0.4pre10 (Unofficial Debian/PPC fix release)
* #include "config.h" was missing in e_getargs.c...
* Applied security fix for saving the user config.
* Added default case in glSDL's _print_glerror(),
since I get flooded with warnings otherwise.
(All GL_* are in an enum in my new GL.h.)
* Added max_FPS feature, to restrict the frame
rate. Useful on video drivers without retrace
sync and/or when you want to reduce CPU load.
(Thanks to Martijn van Oosterhout for the
original patch!)
* Added man page, contributed by Joey Hess.
* Fixed some minor typos in the man page.
* Added resolutions 1600x1200 and 1920x1440 and
2048x1536, for extreme/insane users. ;-)
* Removed 57 unused AGW scripts. (These belong to
Audiality, which is now a separate project.)
* Updated and shortened the scroll text.
* Added monitor noise effect with sound effect.
* Fixed two related bugs in s_filter_scale() that
would 1) cause NEAREST to be one pixel off
vertically and 2) linear interpolation modes to
be off by half a pixel horizontally.
* Tweaked the death explosion, so it expands,
decays and ends, instead of just rolling for as
long as the player is dead, as it used to be.
* Added Game Over sound effect.
* Dead player no longer takes hits. (This avoids
the hysterical thumping of bullets hitting the
non-existent ship during the death sequence.)
* Added README.osx, which points out that you may
have to create the score-dir to make Kobo DL
work. This applies to other archs as well, so
perhaps I should put it in an FAQ or something?
(Thanks to Adam Marks the the Mac OS X binary!)
* Tweaked launch.agw. (More turbine; less noise.)
* Added Get Ready sound effect.
* Exiting pause mode now throws you right back
in the game. (No "get ready" state.)
* Added configurable "get ready" countdown.
* "Get ready" countdown now ends by starting the
game, rather than entering pause mode.
* Controls are reset whenever you get a new ship.
* Improved the loading status screen a bit.
* Added shrinking and green->red fading bar
during the last second of the "Get Ready"
countdown. (0.7 s in "Quick Start" mode.)
* Added a critical error state with a red
flashing box and stuff. This shows up if a
player profile cannot be created, or if
starting a game fails for some reason.
* The game now remembers the last map played
until you quit, instead of resetting to the
last completed map all the time. (Thanks to
David Andersson for the idea!)
* Fixes backported from Audiality:
* midi_process() was called even if MIDI
input was not enabled, resulting in the
engine waiting for data on stdin once
per buffer... *heh* Fixed.
* OSS MIDI input fixed. (When soft through
was disabled, the device would be opened
write only! The drivers I used before
obviously always opened RDWR...)
* Poly and mono Patch Plugins now
initialize the primary output and send
busses for voices. (So *that's* why my
mixes broke... Oops!)
* New, properly working envelope generator
backported from Audiality.
* VE_ISET event eliminated - only IRAMP
is used for ramped voice controls.
* glSDL changes for glSDL-0.4:
* "no TexInfo" changed from 0xffffffff to
0, since SDL 1.2.5 and up inits the
unused1 field to that, specifically for
glSDL.
* Added compile time and runtime warnings
for SDL versions prior to 1.2.5.
Kobo Deluxe v0.4pre9 (Debian/PPC fix release; first try)
* EEL changes:
* Stole eel_get_argsv() from the not yet
released Audiality 0.1.0. (Fixed some
more va_list issues.)
* glSDL changes for glSDL-0.4:
* Added (gl)SDL_SaveBMP().
* "Fixed" OpenGL pixel format for
glReadPixels. (Maybe I got the glSDL pixel
format wrong? Dunno, and I'm on an ATI card
and driver so I don't trust anything...)
* Fixed _glSDL_BlitFromGL() (I think...)
* Removed the "Intelligent Display Abstraction
Layer" for now, as it's not yet usable.
* Added screen() property to gfxengine_t, to have
a standard way of rendering to the full screen
area.
* Added gfxengine_t::clear() method.
* Added coarse clipping to SoFont. (The scroller
made the coords wrap in 1280x1024. *heh*)
Kobo Deluxe v0.4pre9 (unreleased)
* Started hacking the "Intelligent Display Abstraction
Layer".
* glSDL changes for glSDL-0.4:
* Fixed C++ issue with IMG_Load().
* Fixed stupid M$isms: Textures are now
*uploaded* to the card.
* SDL_OPENGLBLIT removed. (Used only to
prevent certain unimplemented stuff from
causing *really* Bad Things to happen.)
* Depth buffer silliness fixed. (We don't
use the depth buffer...)
* "fake_screen" is now a real surface.
* Implemented blitting from the screen.
* Implemented blitting within the screen.
* Implemented screen locking/unlocking.
* Fixed prototype for glSDL_GetVideoSurface().
* EEL changes:
* Added eel_load_from_mem(). (Thanks to
Florian Schulze!)
* Cleaned up the EEL script management
code a little.
* Using va_copy() in e_getargs.c, since
assignments are not legal on all
platforms. (Thanks, Andreas Heck!)
Kobo Deluxe v0.4pre8
* Added Extreme Pickyness Mode (--enable-epm).
(Unfortunately, this is not enough to ensure that
stuff compiles on gcc 3.x. Guess I'll just have to
install gcc3, or rely on gcc3 users reporting all
warnings and errors.)
* Some const string issues fixed. (Returning a const
string as "char *" and the like.)
* Removed all AdLib stuff and support for non-
standard MIDI file variants. However cool it might
be to play those files, I have no use for it and
can't maintain it in this project.
* Removed old bogus stuff from the comments in
filemap.h.
* Minor cleanups in filemap.cpp.
* Some GCC3 fixes in score.cpp. (String copying...)
* Scroll text updated.
* Improved scroller "speed throttling".
* Returning to the intro now restores the "demo" map.
* Added Electric Fence to the Extreme Pickyness Mode.
* Started cleaning up the C code using Splint. (Can
someone please donate a FlexLint license...? :-)
* load_sounds() in kobo.cpp fixed; it wouldn't load
the music if the sound effects were loaded with
a previous call.
* Somewhere along the way, I managed to get the
intro to generate a new demo map on every intro
screen switch. Fixed.
* Audio engine changes:
* Added OSS 'pollaudio' for debugging.
* Fixed index outside array in
audio_wave_free()!
* Tightened up the API - signs only where
needed and things like that.
* 0 dB peak amplitude for 32 bit waveforms
changed to [-1.0, +1.0].
* ptab_init() now takes an integer argument.
(No implicit float->fixp16:16 conversion.)
* Ports and "clients" are now named for
debugging/tracing, although client names
exist only if AEV_TRACING is compiled in.
* Cleaned up audio event system names.
Everything is now aev_<something>, and most
names have been significantly shortened.
* Added aev_init() macro for ports! (Aargh!)
* Open/close of subsystems cleaned up. All
subsystems now have audio_*_open/close()
calls, and should (hopefully) clean up
properly when closed.
* Audio engine open/close API changed;
the full sequence is now:
audio_open() (optional)
audio_start()
audio_stop() (optional)
audio_close()
Note that the waveform and scripting
subsystems will still initialize
themselves automatically if used before
calling audio_open().
! The last two seem to have fixed the
issues with restarting the engine on
Linux! Remains to see if that was the
whole problem...
BENCHMARK: speed1.agw renders in 27.2 s.
speed2.agw renders in 21.5 s.
Total: 48.7 s.
* Added block based processing framework.
* Implemented block read, write and add.
* Added block based envelope processing.
* Using the new envelope interface - but
still processing one sample at a time.
(BENCHMARK: speed.agw renders in 34.2 s!)
* Using 32 frame blocks in wca_filter()
and wca_gain().
(BENCHMARK: speed.agw renders in 33.6 s.
wca_filter() disabled: 31 s.)
* Converted wca_osc() to block based
processing, and made some minor
optimizations.
* WCA_SYNC for WCA_NOISE fixed. Each sync
pulse now shifts in a new value through
the S&H as well.
* Fixed bug in spectrum oscillators: They
would produce no output with a mod1 input
of less than 1.0. They now produce pure
sine, as originally intended.
* HSPECTRUM and PHSPECTRUM fixed: They
actually didn't separate roll-off control
for odd and even harmonics at all! (Thus,
they were basically just broken versions
of SPECTRUM...)
* SPECTRUM modulation mapping unified; MOD1
now always controls the overtone stepping.
* The new AHSPECTRUM replaces PHSPECTRUM.
* HSPECTRUM becomes a AHSPECTRUM with
multiplicative overtone stepping control.
BENCHMARK: speed1.agw: 10.2 s. 167% faster.
speed2.agw: 17.7 s. 21% faster.
Total: 27.9 s. 75% faster.
Obviously, the optimizations worked out
rather well. Next, we'll try to do something
about those spectrum oscillators...
Kobo Deluxe v0.4pre7
* Old samples boosted by 70%, to compensate for the
lack of an illogical amplification factor in the
new engine. :-)
* The screwed up scroll position during the "Game
Over" state fixed.
* "Early bullets", flickering and other crap fixed.
* gfxengine_t and sprite.[ch]: Added clampcolor() and
s_clampcolor (for specifying what color and alpha
to assume for areas outside images), and changed
the color format to Uint8 in the range [0,255], to
be consistent with the change in window_t.
* manage: Selecting a starting stage before staring
a game now preserves the actual map that is
generated. You don't get a new version of the
same level, but the exact map you're looking at
before starting the game.
* radar: Fixed potential color allocation bug when
changing video mode; it used to initialize only
once during the game life time...
* radar: Tweaked colors, and made the the blue
launcher nodes visible on the radar.
* Options 'cheat' and 'indicator' are now commands
rather than switches, so they cannot be saved in
the configuration by accident.
* Split the "push move" mode off from 'indicator'
into a feature of it's own, activated with
the 'pushmove' command.
* Game and Control options moved to the top of the
options main menu.
* Scrolling radar implemented. Can be disabled in
Game Options, to work like the old version.
* gfxengine_t make slightly more robust WRT calls
being made while the screen is closed.
* Switching between fullscreen and windowed modes
can now be done at any time with the usual ALT+ENTER
shortcut. :-) Special case activates pause mode if
it's done in the middle of a game.
* Random number generator split in two; pubrand and
gamerand, and get_seed() member added, as a
preparation for demo recording and playback.
* 'P' and the mighty strange Pause Key parsed and
routed to the pause function. (This is also used
internally, as a neat way of telling whatever state
might be active to pause.)
* Touched up the screen framework artwork a little.
* Optimized background rendering some. (Occasional
clipped extra row and column of tiles eliminated.)
* Stupid bug in window_t::invalidate() found and
killed: gfxengine_t clips invalidated rects, so we
need to make sure our window is selected!
* window_t now supports background images. clear()
takes an optional SDL_Rect, and blits from the
image, if there is one, or fills with the
background color as in previous versions.)
* Background graphics in the displays and the radar
screen! :-)
* Added dither plugin with hard-coded 2x2 filter.
* Added options to turn dithering off.
* Added kludge for OpenGL cards that can't handle
RGBA8, but turns it into RGBA4, and a switch to
enable it if required.
* sprite: S_BLITMODE_NORMAL renamed S_BLITMODE_AUTO.
(Makes more sense!)
* Option broken_numdia (Broken NumPad Diagonals)
added - I want to use the page up/down keys for
other stuff, even if *some* systems can't decode
the numpad correctly! :-/
* Added the algorithmically constructed sound
effect "SOUND_LAUNCH".
* Separated the AGW scripting engine core from the
audio engine and made it the "Extensible Embeddable
Language". (a_agw.[ch] now contain only the AGW
extension to EEL.)
* Added the algorithmically constructed sound
effect "SOUND_LAUNCH2", for the "blue balls".
* Fixed some bugs in filemapper_t.
* Any jerking, flickering etc when entering a new
stage should now be *completely* eliminated. I
think... ;-)
* Intro doesn't conflict with stage 100 any more.
* Implemented 2D positional sound effects. :-)
* Added screenshot feature. (OpenGL not implemented,
as the current glSDL cannot read the screen surface.)
Saves BMP only, and is connected to PrintScreen and
SysReq.
* EEL now uses the same callback prototype for all
extensions, whether they are commands, operators
or functions.
* Ported Jeremy Sheeley's player profiles patch
from 0.3, and tweaked the user interface a little.
* Fixed double initialization of the manage object.
* Extended the score file format into a more powerful,
versionned "profile file format".
* file.(h|cpp) and parts of score.(h|cpp) replaced
with pfile.(h|cpp), which implements a generic,
portable "toolkit" for platform independent binary
data file access.
* Added game.(h|cpp), which collects all configurable
game parameters in one place.
* The "speed" parameter is now considered a cheat,
and is no more available from within the game.
* Last player profile is remembered in the config.
* Added optional "Diagonals Emphasis Filter". (I'd
say it only makes control feel sluggish most of the
time, but it might work for someone... I'm open to
suggestions if anyone has an idea for a smarter
filter.)
* Eliminated extra calls to score_manager_t::record().
* Start level selection in intro mode removed.
* Implemented collision/health system. When two
"collidable" objects collide, the damage of each
object is subtracted from the health of the other.
(Object properties set so that the game will
play exactly like the original with the single
player default settings for the player ship.)
* Turned the "shield = -1" feature into 'shootable'.
* Added health bar.
* Threw in detection and fix to read broken 73 byte
scorefiles from older Win32 versions. (Seems like
the new code works right on Win32 as well, BTW.)
* Various fixes and additions to filemapper_t.
(Scanning multiple directories, most importantly.)
* Removed "./scores" from the SCORES path for now,
as it's actually the same place as the default
score dir on Win32. (You'd get all profiles and
scores twice, that is.)
* Removed "bgm.raw" as it's not used anymore.
* No hyphen before the "pre" from now on!
* glSDL changes:
* Applications can now set the colorkey of
of surface *after* SDL_DisplayFormat() -
although it will just discard the TexInfo,
resulting in the surface being converted
before the first blit, and after every
change in the surface.
* Silly intermediate buffer eliminated in
_DownloadTexture().
* glSDL automatically stretches resolutions
below 640x480 using an integer factor.
* Audio engine changes:
* Benchmarking tries to use gettimeofday() if
not compiled for x86 CPUs.
* a_tools.h got some cleaning up, some new
macros, and mixing functions optimized with
a Duff's Device variant.
* __mastervol() is obsoleted by the groups,
and was killed to save some cycles. (It ate
almost 1% of my P-III 933!)
* Ditched the "Smart Stereo" Limiter - it's
not loud enough, and should be replaced with
something that drives the signal non-linear
to squeeze more power in when the signal
isn't panned center.
* Dropped the saturating 32->16 bit converter,
and fixed the limiter so that it reliably
*limits* the signal the way it should.
* Limiter does no longer invert the signal.
* Added ACC_PRIORITY.
* Added controls for Channel Inserts.
* Channel default controls (used in DETACH
mode) removed. Just expect channel controls
to stay where you leave them, and
everything should be fine - and faster!
* Implemented dynamic voice allocation.
* ACC_DETACH now effectively means
"polyphonic mode". "Detached" voices are
still owned by the channel that launched
them - but just as before, channel
controls don't affect voices directly after
they're launched. (Even that may change
eventually...)
* Ripped mid.cpp and mid.h from the AdLib FM
player AdPlug 1.1. Started stripping off
the FM stuff and converting it to C and the
"midisock" interface.
* Added primitive VU-meter to the voice mixer.
* Implemented audio_wave_convert(), using the
voice mixer in interpolated 16x oversampled
mode.
* Added simple enhancer and noise gate
functions to the init time wave API.
* Hacked basic polyphony support into a_midicon.
* ACC_RANDTRIG is now *really* a 16:16 fixp
value, to allow finer control of the
randomize depth. (Next, I'll make the section
end marker fixed point, to allow sub sample
accurate loop timing - as well as finer
RETRIG and RANDTRIG control. :-)
* Fabricated a nice 3'rd degree LUT for
various MIDI -> Linear Control mapping.
* Introduced a more solid scheme for keeping
track of allocated voices.
* audio_channel_play() now takes 16:16 linear
pitch and 16:16 volume, instead of the bogus
MIDI format arguments.
* Added audio_wave_filter().
* DETACH mode split into ADM_POLY and
ADM_FULL, to natively support the slightly
different ways DETACH mode is used by
midicon and for sound effects.
* Added cubic (4-point) interpolation, based
on a formula by Olli Niemitalo. Low freq
sines sound *perfect* - no audible distortion
whatsoever. It sounds great up to 1:1, but
runs into trouble in the upper half of the
octave above 1:1 - linear 2X+ sounds better
from there and up. The best part is that the
CPU usage is somewhere in between linear 2X
and linear 4X on a P-III.
* Volume ramping bug fixed: The "boot strap"
values calculated when starting new voices
were wrong, and resulted in an undesired
fade in over one buffer.
* "Playing" indicator below the per-voice VUs.
* Waveform size restrictions eliminated! (Well,
you'd probably have trouble with 2+ GB on 32
bit systems... ;-)
* Dynamic voice allocation now always starts
with voice 0 in the first pass, when looking
for unused voices. (The other passes are still
starting at the voice after the last voice
allocated, to favor the "oldest" voice when
there are multiple equivalent choices.)
* Implemented MIDI CCs 120, 121, 123, 126 & 127.
* Added SILENT and RESTING states to the plugin
API, to deal with silent output efficiently.
* Optimized bus handling; now, bus send buffer
clearing and other stuff isn't even considered
unless a bus actually is in use.
* Implemented the Bus Control MIDI CCs. (39...55
on the first AUDIO_MAX_BUSSES channels.)
* Reverb SNR improved. The internal precision is
now 8 bits higher than that of the I/O, which
produces "perfect" results down to the LSB in
the final output.
* Implemented CCs 88, 89 and 91; "primary bus",
"send bus" and "send level".
* Added SINEMORPH, SPECTRUM, and LSPECTRUM
oscillators.
* Changed ACC_PITCH to fixed point linear freq,
where the integer bits correspond to MIDI
pitch. That is, 60.0 now does what 1.0 used
to do, and to step up one octave, add 12.0
instead of multiplying by 2.0.
* Various oscillators and stuff added to the
Waveform Construction API.
* Added bandlimiting or oversampling to all
Waveform Construction API oscillators.
* Modulation API cleaned up.
* Voice mixer code cleaned up a bit.
* Voices now use timestamped events for control.
* "Plugin style" API for patches separates the
channel->voice bindings from the engine core.
BENCHMARKING NOTE: Right now it takes 60 seconds to
load and render the 72 AGW sounds I've created
so far. Although most of the code is currently
*very* inefficient, only the SPECTRUM oscillators
are really so slow that it matters.
* Audio Voice Mixer benchmark results, 20020111:
(P-III 933, 48 kHz, 20 ms latency, playing
an 8 kHz 8 bit stereo sample in 32 voices,
compiler optimizations disabled. Unit is percent
of total CPU time.)
-----------------------------------------------
Very Low: 6.9%
Low: 14.5%
Normal: 10.1%
High: 17.9%
Very High: 136% (overload!)
(Same, but with gcc/g++ -O3 optimization.)
-----------------------------------------------
Very Low: 3.5%
Low: 6.5%
Normal: 4.6%
High: 7.9%
Very High: 78% (causes underruns)
Obviously, on this machine, the "Normal" mode,
which is using plain linear interpolation, is
almost as fast as the "Very Low" mode, whereas
the "Low" mode is more expensive. This is to be
expected from CPUs with fast multiplications.
* Audio Voice Mixer benchmark results, 20020503:
(Same machine, same settings, same test, but with
the new cubic interpolating mixer, internal
fragment size limit, timestamped events etc. With
-O3 optimizations.)
-----------------------------------------------
Very Low: 4.5%
Low: 6.8%
Normal: 5.5%
High: 8.2%
Very High: 9.5%
Higher loads occur only when pushing the pitch more
than ~1.5 octaves above fs in "Very High" quality.
(That results in linear interpolation w/ 4x+
oversampling, which is pretty slow.)
*** The Audio Engine: Why the GPLed files?
The sound code used in Kobo Deluxe was originally written
by Masanao Izumo <[email protected]>, for XKobo 1.11+.
Masanao also added the sound effect samples that are still
being used.
You may have noticed that, while most, if not all of the
current audio engine is new code, which is LGPLed, a few
files (a_globals.[ch] and audio.[ch]) are GPLed, and
contain a copyright notice mentioning Masanao Izumo.
This effectively means that the whole audio engine has
to be used under the terms of the GPL; not the LGPL.
As this will probably be too restrective for many of the
users the engine is targetting, I've contacted Masanao
for a resolution, but have yet to receive a response.
David Olofson
Kobo Deluxe v0.4-pre6
* I've compiled with -Wall and nearly all of the
additional warning switches (not activated by -Wall)
to verify all code. Many things that non-gcc
compilers could complain about should be fixed in
this version.
* "Video Driver" option not shown if there's only one
choice. (Which is the case if you build w/o OpenGL.)
* Exit with ESCAPE from config menues fixed - now
cancels any changes and plays the appropriate sfx.
* Solaris package building script 'buildpkg.sh' and
required configure.in fix by Andreas Spångberg added.
* String copy bug in cfgparse.cpp fixed. (Andreas
Spångberg.)
* Switching between windowed and fullscreen modes no
more results the screen being offset.
* Screen centering fixed.
* Border in windowed mode fixed.
* Cleaned up audio config menu, and added volume
controls for sfx, (future) intro music and in-game
music. (Note that the "Master Volume" is still
there, and it's still digital...)
* Icreased the number of volume levels available in
the audio config menu. (Used to be 25% increments.)
* Added redefined() and accept() to config_parser_t.
* Non-interactive widgets handled correctly in menues.
* Added headers to configuration menues.
* Added 'unit' string to ct_spin_t.
* window_t::select() now comes in a private flavor
without checks.
* Config menues now make use of OS_UPDATE_* flags in
addition to the OS_CANCEL tag, to allow instant
effect controls to cancel/undo properly.
* config_form_t now has a virtual member undo_hook()
that's called by undo(). (Used to make ESC exit work.)
* Audio engine changes:
* Channels are separated into voices (mixing)
and channels (control abstraction) levels.
* Groups added for easy channel management.
* The API provides access to channels and
groups, but not direct access to voices.
* All fixed point values are now 16:16.
* API variants with float arguments added.
* AC_DETACH added. (Easy SFX control.)
* Panning/balance control added.
* Added "waves" to get rid of sample pointers.
* AC_SPEED removed. (Obsoleted by the internal
conversion to original wave sample rates.)
* Fixed bug in reverb: Right input missing!
* Another reverb bug: The delay buffer was too
short for >=32000 kHz with the current taps.
* Implemented AC_RETRIG and AC_RANDTRIG.
* Improved resampling frequency accuracy.
* Improved looping accuracy and quality.
* Added MIDI input implementation for OSS and
ALSA raw MIDI interfaces.
* Fixed potential crash bug; mixing buffer
size variable would be wrong if the desired
buffer size couldn't be set!
* Added higher quality voice resamplers.
* sound.[ch] replaced by a_wave.[ch].
* Auto trig w/ timeout on the oscilloscope.
* 8 & 16 bit mono + 16 bit stereo added.
* Engine code restructured and modularized.
* "Waveform Construction API" added.
* Channel->bus->master mixing architecture.
* FX plugin API added. (Internal, for now.)
* Reverb LPF cutoff made configurable and
independent of the sample rate.
* Added generic "browsing" API to config_parser_t.
* Added a copy of LGPL 2.1, and started sorting out
which licence applies where. (Basically, the old code
is GPL, while most of the new code I've written from
scratch is LGPL.)
* Added window_t::center_token[_fxp]() for nice columns.
* Started documenting a little...
* Added "Audio CPU Load" screen for gcc/x86. (Needs
high resolution timestamping, and I'm using RDTSC for
now.)
* Added text alignment system for the ct_* widgets, to
make use of the new center_token() methods.
* Various tweaks and adjustments.
* Credits updated.
Kobo Deluxe v0.4-pre5
* New versioning rules introduced;
* Any -preX suffix should *always* be included
in AM_INIT_AUTOMAKE().
* No more development snapshots - every package
released has a version number of it's own,
with a -preX suffix if appropriate.
* Surface leak when reloading graphics fixed.
* gfxengine_t::unload() now takes -1 (default) for
unloading all banks.