history.txt version history for od28-6, v0.1.7-up Version 0.9b3 (2017.05.25-6.02, 2018.12.30-2019.02.02) Many bug fixes. Slightly improved player AI. Added customizable and invertable mouse aim/motion scales. Windows: Screen saver/monitor power-off now disabled when app is in foreground. Fixed crash when sound is unavailable. Fixed direct depth fades. Corrected usage of the term Alt key; the Mac equivalent command key is the Menu key. Corrected mOS sound operations; improved soundList playback. Fixed input lag by procesing input controller in main thread. Mouse input regardless of another window on top. Implemented full screen and windowed mode, adjustable in Graphics panel. Version 0.9b2 (2016.09.11, 2016.11.29-12.02) Fixed screen window / terminal bugs dealing with 'full screen' mode. Non-Mac supersampling now scales prior to filter. (Nearly) Fixed mp3 playback memory collision bug. rc2: Fixed decoding of LSB 24-bit audio. Version 0.9b1 (2016.07.03-8.19) Fixed-point automap drawing (smooth movement transitions). FPS/position toggle now available in terminal mode. Bitmaps no longer need to pre-allocate row address space. Upgraded MPEG decoder to mpg123 to fix output errors and decode free format. Added MMX acceleration for bilinear interpolation. Restored supersampling (and Detail graphics menu). Non-terminal Escape key now also recognized as 'close game'. A.I. player monster sounds set to NONE (except for apology and flaming) - a M1 physics fix, in particular. A.I. players now use maximum forward in player physics (needed for models like "Quantum Physics" where they should run fast). Many, many bug fixes. Non-Mac: Windows: native 'fixed' memory handles. Improved time resolution (less jerkiness, especially under Windows 8+). Fixed issues compiling for 64-bit. Updated button and popup control graphics. Added handling of basic patterns and regions in PICT rendering. Default out sample rate now 88.2KHz to eliminate spectral holes compared to 44.1KHz with 48KHz sound/music. (snddec still uses linear interpolation.) Added sfnt font support using FreeType 2.5.3. (And TT Geneva, Monaco.) Text patches: Overhead map level name uses newer cseries align codes. (May show up wrong with older definitions.) Added miasma floor and minimum ammo per-map fields for M:P. (Monsters will also try to avoid crossing this floor.) Version 0.9a17 (2016.05.22-7.01) Fixed a few keyboard layout dialog bugs. Added workaround for find_new_object_polygon recursion - for a bug in the map "Trench Warfare" that causes the routine to hang; the map is now playable Removed no-longer-used graphics Detail menu. rc2: Corrected make_image_from_wad_index. (Win95 picts failed.) Non-Mac: .finf directory for a file type w/o extention; now no need to fix file extensions when copying files to ExtFM, except for invalid extension case (e.g., "Stonehenge 1.2"). Added linear interpolation for 24bpp horizontal downscaling (rBlt/cnv). Fixed PICT 2bpp parsing and differing src/dst map transfer. Little-endian sounds_compile now works. Closer-to-QD line calculation for more authentic PICT rendering. Edges also now line up in automap. Added oval arcs. Added GIF and JPEG (IJGv9) support. Windows: Prefs and films now stored in "/Documents/od28-6/" as they should be. Revamped text and graphics for popup menus. Files in Basilisk II directories omitted in Environment menus. Version 0.9a16 (2016.04.30-5.18) Fixed potential divide-by-zero in weapons interface. Fixed horiz. polygon orientation; only 90 deg increments handled, though. Non-Mac: Added fix for bug where virtual windows won't update after game. Resource forks also looked in ".rsrc" directory (Basilisk 2 ExtFM) (drop scenario in "This PC", fix file extensions, drop files onto od28-6). Updated PICT renderer to handle multiple images and some vector graphics, text. (Most of the terminal graphics in "The Delphi Interdiction" now show up.) Fixed count bug in resource manager (would scan one more per type). Added Monaco 5 & 18 (needed for automap). Updated font manager (bitmapped scaling and italics). Version 0.9a15 (2016.03.04-10, 4.22-23) Improved virtual player AI; better handling of charging weapons, enters teleporters, and is less likely to fire a missile at a wall. Fixed some network dialog bugs. Enabled 'center' button (chimes 'startup' sound). Text patches: Added recognition of directory music path via colon. Version 0.9a14 (2015.03.17, 4.29-6.16, 7.06-24) Fixed shapes bug that overwrote random memory. Fixed window resolution bugs. Fixed various little issues. Improved vertical mapping by keeping extra vector precision (64-bit). Increased non-ambient maximum sound channel count to 64. Menu now in power-of-two form, along with zero (ambient-only). Fixed uninit'd channel index bug in the mpegdec adaptation. (mp1s and mp2s no longer crash...crappy results here, but no crash) Stuffed inventory keys into key preferences (21=33;22=30). fps display now '/' key regardless of shift... Definitions update: Monster def flag bit #31 is now _monster_resists_target_switch Non-Mac: Fraction no longer reset in sample rate conversion. Fixed two sound source crash points (didn't find bug origins, though). Greatly improved the dialog code. Team colors now show... Still, the drawing order bug persists. Fixed endian ordering bug for direct depth wadfile images. Ported dump_specs (needs dump_specs.rsrc). Rewrote AIFF-C/WAVE playback (plays blocks in proper order now). Fixed several more snddec bugs; DVI IMA now works. Implemented w64. Implemented color picker (mOS). Offscreen buffering for chapter screen scrolling (as supposed to be). MS Windows: stuffed resources in the module (instead of external file). WaitNextEvent implementation reduces CPU usage dramatically w/o jerkiness. Text patches: - Added gray_nightvision (for grayscale nightvision instead of green), invincible_vulnerable (a mask of damage types - normally fusion), invincible_xfer (internal value), and fast_teleport_effect. Version 0.9a13 (-2014.12.05, 12.20-24, 2015.01.07) - Numerous little bug fixes. Win32: Implemented dialogs (very buggy, but they work, mostly). Added custom sample rate/pitch output (via Preferences .ini). Fixed AIFF-C/WAVE music playback crash (snddec sndfile). Less thread sleep on latter 2/5/8 milliseconds leading up to virtual VBL; smoother results, but more CPU cycles required in foreground. More accurate timer with system-equivalent of Microseconds. Text patches: - Added trigger powerups (needed for Marathon Phoenix katar--see bonus/). Version 0.9a12-preview (2014.05.01, 7.18-8.14) - Windows build! (Using snddec and mos.) No dialogs or networking though. Modify the Preferences .ini in the user folder. Infinity+ film replay consistency is screwed (probably due to POCC). - MPEG playback code was revamped to fix erroneous decoding. Buffering measurements only accounted for mono in rewrite - fixed. - Intro music by file and at the same time "Song xx" in a Music folder. - Now works with the Win95 Marathon2 images. - Numerous little fixes, including vertical slide transfer modes. Non-Mac OS: - Map resources can be in a separate file with '.rsrc' concatenated. - Changed F6 to toggle overhead map translucency. - Fixed a sndPlayFileStop (WAVE/AIFF-C playback) bug that sometimes hanged/crashed. Text patches: - Added "casing type", media fade effect "opacity" over "transparency". Version 0.9a11 (2013.11.09, 2014.03.20, 4.03) - Bug fixes, code updates, portability improvements. - Assembly optimizations for MPEG audio. - Added red channel pin for half/add transfer modes; helps 8bpp "lava" in Eternal X. - Reduced translucent brightness for generic invisibility further. Text patches: Added revert_type & horiz_death_bob to player settings. A revert_type of 1 fades out, automatically reverts game (like Damage, Inc.). Fades "transparency" now correctly "opacity". Older names still supported. FrameWorks 128 key names + 32 for other systems. Version 0.9a10 (2013.10.11-30) - Bug fixes and portability improvements. - Rewrote the flawed portable mhandle code (would fail past 64 count). - Fixed implied external game song reset (would stop playing on revert). - Terminal static uses rectangle texturer instead of a polygon (somewhat faster). - Added built-in MPEG playback using the fast MpegDec (GNU GPL) by Stephane TAVENARD. The long developer single-handledly made it play async. Some parts optimized further, it requires a (fast enough) 68030 or better. - Cheating disables pattern buffers again - but not computer terminals. - Implemented blitter routines to eventually replace QuickDraw for portability, speed. - Optimized quadruple_screen a little more, implementing a fast C version of 8-to-4. The PPC asm quadrupler has been routed out due to the requirements. (MrC is adequate.) - Got "Mixed" to appear for the physics override checkbox to show it preferred "off," but (probably) forced, given M1 maps (internally) always require the override to work. Previously, this would be checked or unchecked when switching maps. Leave it _off_ for normal results. - Added another color in effort to improve 8bpp water translucency + a few more color tweaks, excluding grays that won't make enough 15bpp difference (better itab results). Text patches: internalized the fonts references completely, nixing 'Interface.txt'. dump_specs (v1.3.7): If size==0, no printing of int values, and enum uses always-printed calculated value. Updated MP3 template to actually print the mode and sample rate. WADs with a length<=0 ignored in printing. Version 0.9a9 (2013.09.29-10.02, 10.07-10) - Numerous compatibility & bug fixes, including M2 (preproc., line-obstructed, spawning) better M1 ranged activation and alien projectile player death (was flaming). - Implemented animated items. - Semi-fixed platform sliding: if wall-clipped/xy-stationary; always for A1 replays. - Alleviated change_monster_target sound play with failed pathfinding under M1. (For problem with Two Times Two Equals.) - Implemented full static terminals; prev. just rendered a few horizontal lines. - Increased preferred size for all-environ Eternal X in 8bpp. Definitions update: Added final-sum 'base' to damage definitions. Text patches: Added environ_flags and mission_flags variables, access to the static world. Loading before & after so things like by-class motion types can be assumed correct. Added initial loading of external text in scenario directory. Added game song file selection (using [file names]:9). Added Aleph One's terminal interface rectangles - fixes the lines-per-page bug. Unfortunately, it's added an unlikely empty page problem. Added 4 more slots to start items (20-ct.). Added interlevel_in_effect/interlevel_out_effect to player settings (not view). Added landscape_stretch to view. (Previously forced to alter a bitmap field.) Version 0.9a8 (2013.09.19-26) - Restored dithering for high-color PICTs (would only if a GWorld was created). - build_inverse_table: some threshold and bias tweaks to fix more colors. - Fixed spelling of 'infared' (includes Shapes template). - Added MacBinary support, fixing up the ResEx code for data fork-based RFs. - Interface screens blocks stop when a PICT doesn't exist. This fixes a possible interface display of images normally only used in the game (i.e., terminal PICTs). Text patches: added 'infravision kind' (default infravision via collection type), and tint_count (set to zero to force use of infravision kind). 'text' now appropriately read in-wadfile for 'TEXT' rsrc patches. dump_specs (v1.3.6) Thread index now applies for colors - max. size. Limits fixed-sizes to 4095. Added threadShift, more floating point types, including extended80. Added GIF & JPEG templates, fixed Flattened Movie List 'moov'. Extended the FORM (AIFF/AIFC) template. compile_wadfile: zero-length resources are treated as if they don't exist when writing to wadfile. Fixes compiling "Foreign Legion V2 " (empty 'snd ' 1500). Added handling of non-map wads (i.e., PICTs, collections, sounds). Version 0.9a7 (2013.09.13-17) - High-color image resort in 8bpp and PICT ID delta fixes - the newer "Eternal-Images.imgA" and chapter screens should work as-is on all depths. - World view on mode change filled w. void color to rid stale non-pixel data. - Fixed an AI movement bug (and this time the fix is backward compatible). - Added "Force Infinity Recording" environment option - there's no guarantee the resulting film will work with future versions, let alone Infinity. - Better Infinity damage_monster emulation...using the old damage type switch. All the Infinity 'film' replay resources now run to completion. - Fixed Infinity weapon ordering. - Fixed civilians-killed-by-player threshold bug. - screen_colors added to environment colors in 8bpp; some added for completion. - Smaller interface collection always loaded under 8pp to fix some third party scenario collections under Full Collections, especially Marathon Red. - Rewrote inverse table building to split channel-wise - red, green and blue. (It's *much* faster, some of the results better too.) Definitions update: Shorter Weapons interface names (older names can still be used in patches). A panel's treated dx-multiple if the secondary_alt (unusable shape) != 0. alt_dy also used in dx-multiple case, nothing drawn if collection == 0xFF (none). Item types weapon_carrying_clip field type at max. loads 1st trigger ammo not weapon. Item permitted_maximum can be zero to disable pickup on below-TC levels; subsequently corrected Alien Weapon (permitted_maximum was 0). Text patches: added fov_h_not_v (don't adjust by std width), infravision type (note: shapes overrides), automap 'live monsters types', 'dead collections types'. Added nonvacuum_replenish. compile_wadfile: 'TEXT' resources -> 'text' (lower case) when into wadfile. dump_specs (v1.3.5) Added threadAnd/Or, threadOffset/threadCounterOffset. Thread index now applies for strings - max. size. Limits fixed-sizes to 4095. Fixed little-endian case for inequality keys. Added DDS, MP3, PNG and BMP templates. Version 0.9a6 (2013.09.07-10) - Fast white one tick after M1 teleport midpoint, not at midpoint. - M1 initial standing does not cause polygon action. - M1 Juggernauts & Alien Leaders eliminate live_monsters_on_map threshold. A.I. players will target them on extermination maps. - Added missing monster light tracking code that broke energy efficient lights. - Fixed overhead map path rendering (expects NULL on out-of-range index). - 8bpp darkening table builder now uses inverse tables - better consistency, small speed boost. - Simplified some dialog item code, merged some MENUs (fewer resources). - Fixed stupid AI player goal object bug. Also their speed. - Fixed stupid scenario file rsrc fork closing bug. Text patches: added conditional read-only variables - replay_version, map_version, map_level, difficulty, bit_depth and aleph_one. Added 'difficulty levels' and 'player colors' strlists, altering player panel. Basic strings internalized so TEXT 0 isn't needed to run. dump_specs (v1.3.4): Added OggS template... still don't know its format. Fixed M2+ shapes template - expected empty high-color Interface slot. Version 0.9a5 (2013.08.28-9.01) - unreleased - Fixed a multitude of fake network game bugs. Downside: older fake multiplayer replays will not work. initial_player_count now stored in network preferences. AI players will now seek the skull or hill in applicable net games Added error to their aim in non-HF difficulty levels, turn slower in lower. - Updated monster_data struct, removing monster_class, replacing with melee and ranged attack copies for attack malleability instead. - Gradually turning monsters (which include AI players) will be reluctant to shoot invincible monsters (or perceived), w. exception to fusion damage attacks. - Removed the delay in non-network net games. - Added tenths of a second to timed post-game scores (e.g., KMWB, KotH). - Fixed post-game score button click ordering. - Replay player walking (backspace) will now always switch on "unique teams" case. It used to be that you would have to hold down the opt-cmd cheat keys to switch. Definitions update: Imported M1 scenery heights/radii from the Aleph One marathon.mml script; change may affect older replay consistency. Trial/error reversion efforts on fixing M2/Infinity film playback: Last time, monsters.c (0.9a3, pin-pointed to damage_monster). This time, map.c and projectiles.c (no visible effect). Version 0.9a4 (2013.08.20-22, 8.26-27) - Improved overhead map title format printing and rendering. You should be able to have nothing but the map title again. - Rid of "ketchup" Marathon bug (monsters platform-falling, projectile-stuck on key. They'll just continue shooting (so it's not all bad for The Yota saga 3:nightmare). Older code dealing with this bug in non-Infinity emulation environments removed. - More source identifier name updates (and Infinity-compatible backdates). - M1 teleporter fast-white fade and overhead map teleporter polygon color. - Fixed M1 player torso shapes and M1 replay version checks. Limited: players in M1 replays probably won't even start at the right location... - Finished prototype for non-network A.I. player fights. Gutted AI desired_media_z code. It didn't help swimming much. Definitions update: unused "future use" player shape arrays now "undefined." Modified the overhead map definition to cover title shadow dx/dy and y-offset. Custom y-position can also be non-positive, which is figured to be put at bottom. Stuffed line sizes into the player definition, and replaced redundant "forward" torso shape indices with the remaining automap player shapes and annotations. NOTE: many things in the automap will look bad using older definitions models. Stuffed clut and alternate panel indices into weapons interface, making the magnum and shotgun panels maleable. NOTE: these two weapons will look bad using older definitions models. _big_white fade now _fast_white, replacing _white teleport damage fade. Text patches: added damage type, effect type, item type, media type, monster type, panel type, player physics, platform type, player specs, projectile type, scenery type, weapon type, weapon interface. Added graphics fields to the motion sensor definition. compile_wadfile: implemented page up/down text box scrolling. Version 0.9a3 (2013.08.14-17, 8.19) - unreleased - Sound behavior index (loudness) promoted in M1. - Restored proper "tag" sound play in damage_monsters_in_radius. - Fixed backward-compatibility quirks in damage_monster. - Made up for conflicting Aleph One replay versions... should play with/without a datestamp, given that a zero record action count is invalid. Pre-0.4 replays are no longer supported (without a warning). - Fixed (hopefully) patch ordering - *before* allocating map structures... - Finally removed the old, unused "LIMS" resource loading code. (Replaced by easier text patching.) - Fixed M1 makeshift (no M1 physics model) wasp attack types. - Improved (maybe) moving target prediction (Hardly Fair, zombie). - Fixed (stopped) player physics during M1 terminal gameworld pause. - Fixed teleport-in effect under M1 environment. - New _exit_is_becoming_accessable clearance check, half of non-flying monsters will walk off contracting platforms in HF, opening doors in TC+. Improved replay management: Added M1 film playback. Monster behavior and physics are much different; don't expect much. Fixed M2 film playback (as interpreted by filetype/extension, version zero). Non-native resource playback and bad data detection - no more crash(es). Definition update: fixed shotgun damage flags. With this, Infinity films ID 128, 130, 131, and Futility films run to completion. Note: the Futility map has teleporting-out Pfhor; it is not compatible with the custom od28-6 shapes file offered by this project (Pfhor *will* teleport out). Text patches: added weapon ordering, fader defs, and player init. items & settings. Version 0.9a2 (2013.08.09-13) - unreleased - Shapes files that carry a bad/unsupported header are skipped. (Instead of altogether load failure.) Rsrc files are recognized, but not handled. - Two more human_scream sounds will not be played in M1 player death. - "Player silent" now "M1 soft," which in 0.9a2+ causes soft death instead of immediate detonation or enflame in M1. - Revamped M1 light importing and "Energy Efficient" code. All types fixed as far as I can tell, with (apparently) proper use of 'phase'. Energy Efficient affected by all monsters objects, not just players. With code reductions in mind, changes are not backward compatible, but shouldn't affect film consistency since things light-driven (i.e., media) don't exist in M1. - Fixed fisheye transitions. - Fixed saved-game loading bugs. Music fades out with dialog. - Updated a few names. - Worked around some error code bugs (-43 with reads should be -39). - Definitions update: fixed player torso ball and dual-.44/WSTE-M shape indices. Restored media-over sounds... Changed tx_reset to btn_center (M1's "center button") - with the old defs, a Juggernaut explosion... compile_wadfile: Added M1 PICT renumbering option. Added "no collections" option (useful for M1 scenario Shapes PICTs). Version 0.9a1 (2013.07.31-8.07) - Implemented text patches, eliminating the STR#, clut, nrct and fnts resources. Also added game sounds, song defintions, motion sensor settings, motion types, view definition, and dynamic limits. (See text_patches.c.) - Set game music restart delay to 1/2 sec., from 1 sec. - Improved velocity mouse, enabled in input panel - too many hours, far from perfect. The run-don't-walk key speeds turning, and look-don't-turn does yaw/pitch. (Due to the bit positions, sidestep-don't-turn doesn't work here.) - Implemented gameworld lock-out for M1 terminal reading. - M1 monsters with no class forced to use collection-to-motion-type LUT. - Fixed more bugs, including a wrong inequality making platform sounds at init instead of during gameplay. - Fixed "annoying" lightsource (constant period=1, constant delta func). - M1 lights 'turning' on or off no longer have a transition at game start. Also fixed a related bug - on at start... via hack. compile_wadfile: exit on abort would leave resulting wadfile w/o a directory - commented out. Silenced a missing terminal warning compiling M1 maps (they have no 'term'). Fixed preprocess_lex bugs: quote break on single quote within double, and break on non-breaking space. Version 0.9d4 (7.31) - unreleased - Cleaned replay playback: no more negative-length-copy-at-EOF crash; file playback now lasts (nearly) as long as rsrc playback. - Fixed a stupid bug that killed older replay hard death promotion. dump_specs (v1.3.2): Implemented absTimeMeasurements. Implemented absSeconds displacement. Version 0.9d3 (7.29-7.30) - unreleased - Changed Glue Trigger calling mechanism - on object polygon change instead of supporting change, also having 3+ already active monsters absorb solid line passes - fixes a Euphoria feature. - Fixed zero-mask M1 random sound. - Pitch modification unrestricted in M1 environment. - Game music stopped on first M1 epilogue screen. - Definitions: flag for player death sounds that are supposed to be silent in M1. Merged damage_response structure into damage_action. - Reversed final and initial in fluorescent_lighting_proc - order now correct. - Adjusted M1 teleport duration (closer to 1/3 second). dump_specs: Added M2+ film replay template. Version 0.9d2 (7.26-7.29) - Implemented 'random' lightsource type for Aleph One's "fluorescent." - Fixed sound definitions slot count clipping (now may load files with "too many"). - Implemented M1 random sound on zero mask - Wasp flying sfx now plays. dump_specs: Updated Mac OS Rsrc File template (skipped byte -> resource flags). Version 0.9d1 (2013.07.19, 7.21, 7.23-7.25) - M1 weaknesses no longer promote hard death. - Aleph One environment bit translation (and od28-6 elimination in inadequate envs.). - M1 exploration maps only need overhead map inclusion. - Add-horizontal interpolation - but blocky during transparency, using first corner. - A minor build_inverse_table improvement (0x7B-red brown). Version 0.8.9 (2013.07.16-7.17, 7.19) - Intro screen count at most two regardless of DEMO for Eternity. - Fixed PICT NULL-destination parsing and QT version check, fixing PICTs w. multiple elements, QuickTime images (fixes Marathon Red JPEG chapter screens). - Increased default render node count fm. 5K to 8K for Eternity (the largest frickin' Marathon scenario ever made). You'll need to correct the Eternity PICT IDs for images and cluts for images to work in 8bpp. - Fixed a few more images.c bugs; all valid dragged-in imgA files should work now, regardless of whether they have a resource fork. compile_wadfile: Added TEXT resource in-wadfile patching. Version 0.8.8 (2013.05.15, 7.08, 7.14) - With the addition of fract-asin, the removal of the last two fp ops in render_view.c. - Added EOF error mapping. - Images resource fork with no PICTs defers to imgA wadfile images. - In-wadfile resource scanning takes second (existing) directory entry if first has entry point bits. This would have fixed Dave's Epic Adventure...but it has no PICTS. Tools: compile_wadfile: Fixed bugs concerning nrct into wadfile. dump_specs (v1.3): Fixed some error handling (still not perfect). Fixed 32-bit WAD recognition (accepts all non-negative WAD counts); first two version fields must be under 16 now. Added Mac OS resource file dumping (i.e., fntA). Added threadSetAdjusted (value as second offset) - needed for compact r-file dumping. Version 0.8.7 (2013.04.05, 4.16-18) - Reverted ambient_delta in side definition - there's a Chisel plug-in for it. The custom scrolling feature has been moved to the upper 4 bits of the clut field. (Not as flexible as the prev. transparent fields, but the new bits work for all p-s-t.) - Silenced spurious error dialog resulting from fcntl change in vbl.c - film emulation. - Fixed Aleph One expectations for same-loop/key frame for Phoenix S'pht fast-fire seq. Make sure, for the file that the .sceA extension is present or the file type is sceA. - .sce2 file type with .sceA now treated as sceA type. - A few more src updates - less hairy source. compile_wadfile: Fixed tools source for fcntl changes (compiles, no warnings). Version 0.8.6 (2013.04.02-4.03) - Text-based preferences! (And all the fixes necessary in getting it to work.) - Code reductions, (slightly) lower memory requirements. - portable_files now uses fcntl (open/read/unlink) instead of raw Mac OS refNums. - Updated screen_image struct (even smaller), and fixed an image pre-disposal bug. Version 0.8.5 (2013.03.19-4.01) - unreleased - Silenced some sound monster/object range checks so Aleph One sgams could be loaded. (You're stuck at the location you saved, but at least it loads.) - Implemented Aleph One fix for bad Dave's Epic Adventure PiD sequences. - Added some more Infinity code, including the SCREAMING_METAL sound play poly types and (unused) InputSprocket code. - Bad M1 poly types now always appropriately set to _normal. Tools: dump_specs: Added IWAD and minimal PEF header templates. Fixed date printing, a few other things. Version 0.8a4 (2013.01.18-02.16) - Numerous shapes optimizations, revisions: faster, precalculated tables for indexing, which made in-current-WAD shapes patches (ShPa) possible and *implemented*. - Fixed private colors bug (blue showed up instead of white on the HUD). Tools: dump_specs: Needlessly added FORM, RIFF and...Duke Nukem Groups. Version 0.8a3 (2013.01.15-16) - Silenced the name STR adding dprintf that would come up under Basilisk II when saving a game to "My Computer" (resource fork management doesn't work well there). Also changed an second-weapon rounds loaded assert to a silent dprintf in weapons.c on account of the bad physics model for Dave's Epic Adventure. Silenced more weapons and weapons interface definition dprintfs. - Motion sensor revisions include: no sensor if the mount shape doesn't exist or any of its bounds lengths are <8 pixels; an in-memory virgin mount is made if its shape doesn't exist or is incompatible with the permanent mount shape - got that to work! unclipped_sprite_copy now does mere bounds clipping - '1994-06 Shapes.shpA' and 'Marathon Alpha Shapes.shpA' as-is (which carry the wrong bitmaps) now work without crashing or interruptions! '1994-05 Shapes.shpA' is unstable, though. - Fixed movie bounds recentering (uses the chapter screen recentering function). - Networking now uses the current recording version as the compatibility check. This eliminates manual version checks (the shapes & map still have to be compatible). - Added Infinity weapons ordering option. And now always on for a networked game. - Vertical calc for uncompressed rectangle mapper moved out of loop (so it's faster). It still expects column ordering. - Placement length can have any count - clipped to 128; only odd lengths are reported. Tools: - compile_wadfile: Fixed M1 preprocessing; M1 lights & objects were being copied. Added 'nrct' to resources processed (for image wadfiles). - dump_specs: Added M1 physics format. Fixed "Fattened Movie List" internal title. Rid of stale ';g;' in count error message, also rid the message that the template's bad because reading went out of bounds. Version 0.8a2 (2013.01.09-14) - Composite side definition implemented as intended: a three-texture full-side, s-p-t. (It'll look bad in older versions.) - Implemented line actions - performs a polygon action, given a new permutation field. - Replaced old, unused side ambient_delta with transparent scrolling multipliers - can slide very fast/gradually, or even diagonally, along with whatever transfer mode set. - Fixed full screen image centering. - Fixed secondary weapon shape bug (M1 missiles became reloading gun when empty). - build_inverse_tables: extensive color correction, with hours of gross hacks and tweaks. Includes making sure a color is a color or a gray; and this fixes many browns. - static_terminal flag clipping so Marathon Phoenix, which inproperly has bits set in this field for some terminals, work correctly. _supports_stateless_groupings is for M1. - Removed "rounding" in trapezoid mapping - only added problems. Version 0.8a1 (2013.01.02-08) - unreleased - Added "Physics Model overrides Internal," and got rid of the Environment warning. - 'nrct' can now be put in the Images file, rsrc or wad. NOTE: the HUD rect was previously in the wrong order; pre-0.8 nrcts are incompatible. - Fixed level select-text visibility: was '==black', now gray tolerance (25%). - Fixed replay recording bug that assumed the refnum wouldn't change. - Pushed through walls fix: clipping reduces player extern velocity by 1/16. - shapes_tables color-type calc. and build_inverse_table improvements, speed boost: gray intensity tolerance reduced from 0.5 to 0.25 improves start-up time but can break cluts that have too many variants per lightness (15bpp precision, people). Examples: some gray-greens no longer become gray in "Ain't Got Time Pfhor This"; dirt no longer shows bad redish colors (noticable in Converted Chruch in Venice map). - Revised screen_image format, nixing 'type,' adding GWorld so QT will draw correctly! - Added type-1 and more opcodes to the PICT parser. - Explicitly added the imgA type (drag & drop is a different matter). - Made the chapter screen image loading process leaner and faster. - Fixed more memory leaks, bugs, two horizontal_polygon loops incrementing incorrectly. One of the fixes got "KU Leuven C200" to work as-is without any problems whatsoever. - Walls now use separate downshifts, allowing for non-square textures (something of DooM "patches"). - Some texturer optimizations, particularly with the 68K assembly. - Fixed the M2+ case where a monster too tall for a polygon would "vibrate" vertically; it will not go below the floor in this case. Version 0.7.7 (2012.12.31-2013.01.01) - unreleased - No more crashing: the manual PICT parser (for Aleph One images) now works, and used for all wadfile-based PICTs. It clips within bounds, and has more error detection than Aleph One. You can now put "Phoenix Images.imgA" as "Images.imgA" in (or as an alias), and...well, in that case the menu rectangles won't fit - but it'll all show. - Fixed some bugs and memory leaks, including ones involving color table loading and player monster buffer adequacy (as well as the right way of blowing up monsters). - Mac OS 256 generic colors assumed for all bad cluts (instead of showing nothing). - Added 'sced' od28-6 scenario extension (treated same as 'sce2'). - Finally fixed the high-low media object clipping bug (produced mid-section holes). Version 0.7.6 (2012.12.23-30) - unreleased - 4bpp grayscale support (8bpp internal); optimized 4bpp quadruple/copy. - Fixed color table building issue where assert would quit program on low memory (the stack is now used for fades). - Unused shape_frequency in panel_definitions replaced with missing 'clut'. - Fixed flaming collection handling under M1 env. with no M2+ Rocket & Flames. - Interpolated 24bpp: somewhat faster, lowering precision by 1 bit; red can be off. - Implementation for wall chip & blast effects underway. - build_inverse_tables: 5-9-2 gray intensity calc., fixed scales (except for brown). - Interface item count fix - warning started after HUD was added. - Made Hardly Fair level more difficult by having some monsters vid target position. - Fade definitions now 16 bytes ea., set-able with the FEpx tag. Version 0.7.5 (2012.12.02-12.08) - Fixed internal bugs, including one that prevented via-WAD collections from loading, and another that required Rocket & Flames #4 to always be loaded (not needed for M1). - Added interpolated transparent texturing. And unlike OpenGL, it's edges are smooth. The same cannot be done (properly) with RLE-compressed sprites; they'll still be blocky. - "resolution adjustment failed" *now* no longer persistent (in all cases). Tools: - compile_wadfile: added some necessary clipping of preprocessed pre-version 5 wadfiles; fixed preprocessed platforms/'Locked Door'/M1 'Flooded' and internal M2+ physics. Added ID check masks to prevent creating WADs with the same ID. Version 0.7.4 (2012.11.25-12.01) - Fixed full-screen interface placing (should be 0,0). - Added linear (near) interpolation option in millions; software: slow. F8 now toggles that. - Fixed drag-n-drop of certain music types (should play now). - "resolution adjustment failed" now cleared on success (no longer persistent). - Added height correction (clipping) for shapes drawn to the HUD; fixes EMR chaingun. - Fixed a bug that assumed that there are always objects on a map. - An adequate Minf chunk is now required (added new #10 game error). Version 0.7a3 (2012.11.04-24) - Fixed player dying/dead soft on enflame/hard death. - Support for imgA wadfiles (PICT tags) that have valid cluts. - Removed halt() call on inactive/unused command keys. - Monster buffer limit adjusted to max with count on map. Warning: this can produce dramatic slowdowns for maps that activate too many at once, especially for ones w. trapped/immobile monsters. - Added .musd (theme & level, already implemented), .aiff & .aifc Music extensions. - Silenced a terminal debug warning ("you shouldn't be coming here"). - Increased default monster path count to 64 to help "Chains of Dreams.sceA" (some). Typical PCs will need JIT on under Basilisk II (Chains of Dreams now works w. JIT after default max. monster buffer adjustment code just mentioned). - Increased motion sensor entity maximum to 48 as well. - Fixed music cutting out on epilogue (change was for M1 screens). Version 0.7a2 (2012.07.29-30, 9.19) - Fixed infravision on direct depths - totally missed the '#ifndef SCREAMING_METAL'. - Fixed memory issues regarding collections loading. Less chance of crash on low memory. - Added "All Environs" to graphics dialog for multi-environment maps (mostly net maps). - CmdKeys: opt-R for replay saved, opt-N for cheat-new. - Eliminated Game, Interface and Fake menu resources by crafting an internalized global. Also fixes the Mini vMac 2.3.2/MacII MenuKey crash - no crashes, bad results anyway. Tools: - shapes_compile: loop frame reset to zero. Fixes the Revisited assimilated flamer. Version 0.7a1 (2012.07.23-24) - Custom sound indices support, new SNpx tag: ambient (up to 44), game & random (up to 32). - Shotgun cheat. - Silenced a reload assert. - Updated some sound references. Version 0.6b2 (2012.07.18-21) - Fixed fullscreen-to-terminal view, where the HUD wasn't being drawn with code changes. - Fixed prefs init'g the screen size to 50%. - Added HUD nrct rectangle so the user can place it anywhere they choose. - keep_line_segment_out_of_walls now skips bad endpoints. Fixes "Repurposing Bob: Do not Dumping". - Increased default path storage count from 32 to 48. For third-party maps with loads of monsters, primarily. This may cause jerkiness. - build_inverse_tables now does +1 red/+2 green for higher values, blue first-bail. - Finished enviro64 UInt/SInt replacements. - Eliminated get_platform_data accessor, removing all the warnings/performance hits. - Fixed uncompressed rectangle rendering - upshift was missing. Got the 1994.05 aliens to show, but the renderer expects column ordering, and the bitmaps are stored row-ordered (looking squished and resting on the side, shadow on the right). texture_horizontal - or the like - will have to be used for uncompressed bitmaps. - Legal monster/player intersection buffer count index added to dynamic_limits. Default now GLOBAL size; 64, was 16. Fixes a no. of maps w. many solid objects per poly. Tools updated, with Repurposing Bob in mind: - shapes_compile: M1 collections with Fade To Black now set to Normal. Added collection index conflict (more than one) warnings. - Updated collections strings, fixing collectionNamesCount. Version 0.6b1 (2012.06.26-7.15, a no. of days off) - Fixed superficial bug (doesn't affect replay consistency) that left the exclusive '_side_texture_is_not_affected_by_toggle' bit alone. Fixes "Siege of Nor'Korh v2" panels. - Fixed shading tables only using black for first index. Fixes 'self-luminescent' colors. - May have fixed object ymedia rendering in not setting the field when not in one. Graphics: - Made specific Full Collections option available if there's enough memory for 15 bit. - Made Fill Void option available, with GetColor when checked on. - Fixed height being subtracted the wrong way in seing if a resolution is available. build_inverse_tables (8bpp): - Time split in half: reduced ranges, using gray intensity as a guide. - Slightly 1pt lower tolerance for brighter-than-matching greens. (Improves colors.) compile_wadfile: - PICTs added as-is, with no judgment of image depth. This also applies to their sounds. Names are carried from the resource name instead of 'IMGxxx.x'. This will affect compatibility with older versions of od28-6. - LITE no longer automatically added to non-savegame files (game_wad.c). - All remaining tags copied from original wadfile. Requires more memory, but a little faster, adding internal physics, user tags. - Fixed some more bugs. In-data color tables are correctly converted. Version 0.6a7 (2012.06.20-6.23) - Fixed extermination environment under Hardly Fair for at least "What About Bob?" - Added code to prevent monsters with a suddenly new valid target during leftover attack repetitions from shooting at obstructions (BoBs shooting at walls). - The Go To Level dialog (starting a new game) no longer uses the previous value. - M1 collections are loaded before all M2+ for better M1 color representation. SCREAMING_METAL is now on! This means... translucency in all color depths! - Color ordering is irrelevant. (You don't need to maintain color runs.) Alternatively, you would fit an optimized clut into the interface collection, minding the reserved night-vision colors (the grays are not reserved). Sorted into a 15bpp inversion table makes more shades...including rough closest matches. My inversion table builder is a bit slow, but a hell of a lot more accurate than MakeITab. The additional colors make dark grays almost indistinguishable from direct 15bpp mode and water look more reasonable (still a bit choppy). Version 0.6a6 (2012.06.16-19) - unreleased - Fixed target movement prediction in the Hardly Fair difficulty level. *Films recorded with prev. versions at this level will not work.* - Object lighting revised again - 0.25 subtracted from ceiling light (need to be brighter to visibly affect objects), pinned to lowest and 2x highest, instead of just 150% highest. - Forcing teleport-in effect after initial placement is now done by a new flag, available exclusively in version 5 wadfiles and set under Hardly Fair. - Network Stats remaining time rendered (Infinity does this) if under an hour. - Suicides no longer laughably play the 'tag' sound during Tag games. Version 0.6a5 (2012.06.09-11) - wad.c no longer asserts when the directory byte-length, in reading, isn't as long it's said to be in the header (holes are left with zeroes). Fixes "Caustic Dystopia v1.2". - Fixed two issues introduced recently that broke "Missed Island map", maps that depend the alien projectile _not_ using advanced preflighting, as well as the ceiling light for platforms being left alone. 0.6a4 films that depend on the incorrect handling of alien projectile preflight disabling may become inconsistent - code commented out. The definitions model has been updated yet again. - A number of optimizations. - Placement now accepts items-only lists (half-size). (For smaller netmaps.) Empty lists are also accepted (no items or monsters). - Added recognition of the still-not-yet-used Aleph One "ouch" and glue M1 polygon types. - Support for collection color tables: unused reflectivity fields now the clut fields. - Removed the apparently-incorrect usage of line_is_obstructed in M1 monster activation. A whole bunch of code removed, breaking v0.6a4 M1 map replays...for better results? Physics: - Added code to slow down the player when pushed into walls (prevents being pushed through them, through platforms, etc.). Also, commented out the never-used M2+ external_angular_velocity code. Tools: - compile_wadfile now appropriately clips M2+ definitions (vers.<=4) in physics addition for version 5 wadfiles (this also makes M2+ physics conversion quick & painless). - Added line and side flag clip disable. Version 0.6a4 (2012.06.06-07) - Made optimizations in motion_sensor, increasing entity count to 32 from 24 (orig. 12). - Dual screen epilogue in M1 with pitch change - use the original PICT ID 10101 for #2. - Fixed item-in-hand fold-in/out width (instantiate_xxx must be called again). M1 fixes: - Greatly improved (but still not perfect) monster activation. v0.5.x films using M1 maps may lose consistency due to how complicated it got keeping track of the constants. - Fixed Auto-Exit with epilogue number 100, now set to M2+ 256. Version 0.6a3 (2012.06.02-05) - unreleased - Added relative_length and highest_supporting_floor to the line definition in the hope that we can finally get monsters to enter thinner lines on thin flat/highest polygons. - Monster terminal velocity in media only reduced if the liquid's above half-height. - Object lighting is now based on fixed floor/ceiling distance instead of interpolation. It's brighter, more ceiling-affected, but not darker when the ceiling is landscaped. - Fixed the media boundary bug - liquids would sometimes be rendered over floors. - Texturer optimizations: includes one unfragmented scratch pair-table (less memory and code, fewer registers needed), additional hand-optimized interleaving. Bug fix: texture_add_horizontal didn't increment for transparent pixels. - Virtual player improvements, especially with dual-fisted weapons and swimming - acts more like a real player, but swimming still only works in a limited number of maps. Version 0.6a2 (2012.05.26-6.01) - unreleased - Landscape texturing revised, fixing the small landscaper (M1) orientation and scale. - Made the 'insane' difficulty level public: Vidmasters-Only. Only monsters that teleport out will stop returning...not many are set/able to do that. - Fixed a bug that allowed an impact effect for invincible players. - More optimizations, more bounds checks *and* many routines are faster than Infinity's. *** Implemented A.I. players - they even fire weapons and swim! ...And they easily get trapped and killed. Turn on 'zombie' (and 'god' mode), and watch them destroy the map, or get stuck in liquids. They also (naturally) make the Marine monster sounds. (Re)written: 'must_turn_completely' and smart weapon handling code. - With one two monster code fixes, the Marathon 2 films work. Infinity, not so much. - Films: an accumulated mask is built to stop repeats until all (<=32) are done. - Monsters now try to avoid getting too close to the target's center. And with _monster_is_dead, they stop attacking dead players. - Improved monster external velocity: intersecting walls slows down non-flying monsters half as much as flying instead of not at all. sounds_compile: fixed the 16-bit side erasing the length of the first name (screws up the whole name list, as they need to be in associated order). Version 0.6d6-a1 (2012.05.18-19, 5.20-5.25) - unreleased Monsters no longer shoot at walls! Advanced preflighting, delta-z and ceiling flag. The "recheck" definitons flag is replaced with its own sounds_update flag. - Camera elevation (up/down) uses the fixed-point field - fixes recenter bob. The camera_elevation field is now unused. - Monsters can now shoot _penetrates_media_boundary projectiles (e.g., SMG). - Fixed a bug that caused the landscape to disappear in some old version films. - Increased accuracy in find_line_intersection. This greatly improves hit points (at long distances, ricochets before walls), and reduces code necessary for advanced preflighting. - Fixed possible hang/freeze during sped-up replays toward the end. - Media fade effect updated for _player_has_clipping_off. - Fixed the Marathon bug that prevented explosions from affecting monsters on ledges in poorly preprocessed maps (i.e., M2 maps), including the Bungie ones. ...You may blow thine enemies into tiny bits. - Re-implemented and tested source-pulling flag for projectiles. Something for chainsaws. M1: - Weapons display refreshed when picking up more than one of a non-two-fisted weapon. Improving upon rounds-fired requirement in the original. - Big enough Glue Trigger polys only activate monsters within - fixes Snowflake in Hell. - Improved the 'annoying' and 'pulsate' light types; the downshift underflow would get 'annoying' to just remain constant-on. - Projectile gravity turned off in low-gravity environment. - Implemented the "visible missiles" feature for the missile launcher. The ammo-in-hand data is in the item definitions. This also means any M1 physics that uses a different ammo_type than _missiles will require the ammo-in-hand data to be moved in order for them to show up. - Revised the code that removed weapons with M2+ player/weapons-in-hand collections. The prev. code was for minimal shapes flies to work. You can now use the shotgun and flechette, etc. again, but the player torso'll be blank when using them if the M1 player collection is loaded. And having all of these collections with incompatible colors loaded will mean less color accuracy (e.g., bluer bluish grays) in 256 colors mode. - Fixed civilians turning against player; the conditional was in move_monsters, where the it would instead hold back the counter from being decremented (won't stop firing on you). Films that depend on this bug might not work. Version 0.6d4-d5 (2012.05.10-17) - unreleased ***Fixed the bug that broke activate_nearby_monsters, older films. The omitted demos are gone now because they're spoilers. - Implemented malloc-based memory handles for the ability to load sounds and collections >8MB...but not tested. - Abbreviated path strings in Environment panel instead of just the name. - Optimizations: eliminated two more accessors, keep_line_segment_out_of_walls's _aborted. - Leaner: five or so unused resources omitted in the build, some now-never-used table entries and globals are no longer defined in program memory. - Definitions loaded once and kept in memory: less time to start a game or M1 level. - Increased the chapter screen delay from 10 to 20 seconds so people can actually read the text in some third-party scenario screens. The total non-scrolling time is ~30s. - Fixed a very old change_monster_target bug (v0.1.7, or earlier) that prevented a necessary feature from working. It may have caused games to run slower too. - Fixed the M2+ charged-while-empty bug (stuck until dead). - Lightsource flag clipping (for M2/Infinity emulation that such flags are be ignored) is handled differently. ...The replay_version inequality was going the wrong way. Definitions: - Decreased 'sideways waste' radius to fix AMBUSH! (Player could not get past them.) - M1 physics no longer written to saved games. This should fix a crash on second load. External models already override the save-game's, so this is also a redundancy fix. - The number_of_xxx counts are all now in one array with public indices. - sounds_update flag for definitons, except monsters, so compile_wadfile doesn't have to use sound_references (mostly) on compile_wadfile M1 physics imports (implemented). Graphics: - Subtle invisibility now uses subtraction of 1/4 instead of 1/8 - the latter came out TOO invisible even on direct depths with the new method. - Cleaned up the dithering in the dialog header picts. - Several raster optimizations. cntlz32's only used once per horizontal polygon. Optimized assembly using macros - 24bpp is now fast in M68K. Version 0.6d3 (2012.05.05-09) - unreleased A number of optimizations. Fixed the 'INTEGERAL' misspelling. Needlessly maxed out the precision/accuracy in the fades log2/exp2 gamma implementation. Fixed a sounds bug that may cause unavailable indices to be loaded. Graphics: - To fix invisibility with player shapes like Trojan's... *FIXED* Darkening modes now use shifted-subtraction; invisibility now always does translucency. A range of tinting colors are available (In direct modes) via the RGB-off filter bits. 8-bit translucency is being implemented! The fast method'll add 248KB in tables, though. - Landscaped surfaces now use 8-subtract-high 3 transfer bits for shade instead of 1.0. Fade-out & pulsating static for polygons now use these upper 3 bits as a disable mask. - Transfer mode bits now actually separated from upper filter bits so...what I thought would work this whole time should now work. - Fixed-point accuracy for 8-bit shading table builders. All global builders (for darkening) no longer use get_next_color_run. Color type priority for closest color matches, for grays, browns, etc. to be such. This rewrite has produced better cluts for overflow case (better M2+ HUD in M1). - Depth-to-shade calculation inlined again (fast). Game: - WAD collection patches no longer require a name - 1000+ (.8) or 2000+ (.16). COLLECTIONxxx, with no depth extension, still overrides both. compile_wadfile now uses these correct IDs for collection patches. - Fixed bug that may cause randomly placed objects on damage polygons. - Sound activation line_is_obstructed for Super Glue polygons; fixes Bigger Guns Nearby. This is actually supposed to be called for all polygon types in M1 mode, but line_is_obstructed is slow enough that Super Glue will be the only case. Version 0.6d1-d2 (2012.04.24-5.04) - only 0.6-pre tools released System/Debug: - FileDesc comparison for zero checksum case in preferences environment panel. - Fixed format strings used in some functions, and converted a 'warn' in flood_map. Scenery: - Now randomizes when dynamic_limits index is zero. - Fixed high collection codes in randomize_scenery_shapes for extended collections. M1: - Can now have more than one map in the environment panel (only first would show). - Fixed save-game bugs: landscape no longer "corrected", and scenery became animated. - No more weapons-in-hand offset fudge: bottom and right pinning remove the gaps now. Weapons that meet/cross M1 screen right (and left>=0) to pin to this right of screen. - The rectangle renderer now supports empty RLE lines. Fixes Trojan 'siren' (blank). End-lengths in texture_rectangle runs corrected (had one less). - No monster-to-monster sound activation entering Super Glue (was passing). - Added tint substitute table, with Hunter having an exclusive index. Old Hunter collection would give no tint, producing the psychadelic effect. Graphics: - Optimized shading table builders: no more inner-loop multiplication, division. - 32 darkening tables for all depths - lowers memory requirements for direct depths. - Revised rendering of invisibility - 3/8 max. ambience in direct depths instead of 1/4. - Added missing implementations for some transfer modes. - Added 'add' transfer mode: zero downshift. Use with care (can produce nasty overflow). Sound References - 279-287 are *reserved*, but 288+ are free (it was '320-up are free'). - Removed 102x0 primary IDs. All new slots with 200x0 secondaries moved to primary. - 120xx (S'pht platforms) now 122xx. - Reclaimed five redundant sounds, including three "Marathon Door" - now "Locked Door". S'pht is again the generic door type. Invalid "Hulk Chatter" now _reserved, missing index added to sound_codes. Tools: - sounds_compile finally adds IDs outside the reference list. Every sound should be compiled now. Fixed compressed sound header size calculation. - shapes_compile now always forces out-of-range colors to black. Fix for Anvil to work with .shp2: zero-origin row addresses in collections. Version 0.5.8 (2012.04.23) - Mac OS-oriented SIntxx and UIntxx removed from my_cseries.h. - FlushEvents before network stats dialog. Less waiting. - Weapon idle width in M1 physix importing only adjusted for melee & normal classes. It doesn't fix Marathorn weapons - the problem is with the shapes origins. - Fixed Super Glue entry for monster_activation_flood_proc. It used the source instead of the destination. What do I know - that may have been correct. Version 0.5a1-0.5.7 (2012.04.05-22) - unreleased System: - assert/halt/pause now go to stderr, warn/dprintf go to stdout with '##'. Subsequently, debugger_log was removed. - DEBUG builds create stdout with info. - PPC: Navigation services on by default, instead of Carbon-only. - File type in searches substituted by extension if blank or binary file type. Now they'll show up in the environment panel. - Another fix for a bad emulated FPU: replaced pow with a log/exp method in fades.c. - Converted some warns to silent, non-continuous dprintfs. - Minimum memory requirement: 7MB. The "Out of memory" alert seems to come up on everything below that. 6.5MB will only get you so far. However, M1 requires less. - "binaries" is now appropriately "rsrc", as its files only become resources. Game: - Fixed stale error bug. User may've had to New Game twice to enter non-default maps. - Secondary definitions model ext. is now .phyd instead of .phy2. - Non-collection bits cleared in non-version 5 physics; fixes Marathon Evil nukes. - Civilian collection always loaded now, not just under DEBUG. - All lightsource flags now available in type-5 maps. - Updated my vidbastard keys. - Infinity net replays weren't reviving the player (one 'network' indicator, failed). Weapons - Manual weapon reload and recovery (needed for M1), plays reload sound at key frame. - Revised the jetpack recoil code, and added a player physics jump/jetpack flag so air-time would happen during running (requires 'climbing' threshold downshift of 2). Vert. recoil acceleration calibrated to be as close as possible to M1. - Separated weapon count from power weapon count; fixes missing alien weapon bug when the shotgun is missing (under M1-only). - Implemented sound activation range (replaces unused powerup fields in definitions). It's not perfect, and it took four grueling days. Video: - Terminals temporarily reduce screen resolution to 640x480 for _all_ resolutions. This fixes a film sync problem. Panels won't move with this temporary move. - As with Infinity, panels are redrawn if an update is ever necessary. - Fixed the 24bpp scaler (anti-aliasing). - Half/quarter transfer modes use basic shifting--dimmer, but no more overflow. - Fixed the old Marathon 24bpp static issue - a yellow/magenta tint; static transfer now uses the 15bpp base, optimized. - Fixed media surface half xfer, half&quarter media effects under 8 bit depth. Sound: - Cleaned up redundant sound code and fixed a number of incorrect references. - Under 16-bit, 8-bit source tried for 16-bit def. with no permutations. - Fixed volume adjustment hangs in the case of a bad sound -- 8 seconds max. - The "extra sounds" limit is now virtually limitless (based on given RAM minus 16MB). Memory requirements are higher, too... - Sound references only used after no ID matches are found. - Both source classes scanned for HLS class sounds flag. - Added secondary classes to accommodate M1 scenarios 'Marathorn' and 'revisited'. A method for compiling all sounds is being developed. ** Five redundant sounds reclaimed - Sput Compiler and Marathon Door Switch. M1: - Music is stopped for mid-level chapter screens. - Mods made for weapons shapes to work. A gap may still appear. - Player shapes. Shotgun, SMG, skull - disabled when using imported shapes. This has appeared to fix the player transfer mode. - Weapons physics idle width adjusted during import. - Fixed hunter hard death issue (shape is 'animated1', M2+ wants 'unanimated'). - Unlimited weapon pickup in Total Carnage. ** Definitions: Added missing examination BOB scenery definition. Dead civilian is now the (cruder) unarmed shape. Also, unarmed collection always loaded here instead of armed always. Added defense center repair chip and alien energy converter item definitions (as seperate from uplink chip and S'pht door key card). Reduced the deactivated hunter radius so you could actually move in Shell Shock. Renumbered 4 switch sounds in panels after 2 redundancies were removed. Added 'detonation' to damage definitions for alien projectile so instant shrapnel would defer to hard death instead of enflaming. Tools: - Infinity preprocessing no longer incorrectly sets 'deaf' flag for monsters in Glue. (Monsters are only deaf when it comes to sounds outside their polygon.) - Updated for some new names. (Macros like _BUILD_COLLECTION are no more.) - Mods made for backward-compatible landscapes option in compile_wadfile. - shapes_compile: Reduced some code. All bitmap pixels outside the table remapped to black, instead of just 0xFF. - sounds_compile: 5 perms max if M2+/secondary. Fixed primary ID bug - was supposed to skip on secondary (M1 is single-source). One perm. for secondary duplicates (reduces file size). Version 0.5d5-d6 (2012.01.11, 2012.04.02-04) ...Source updates, and plenty of other little bugs fixed. System: - PPC: a few OS 9 names accidentally used; now *really* OS 7.1+. - To work with (fast) 68020 emulators, only 32-bit mode is required (was 68LC040+). Game: - Added missing "use M1" detection that prevented M2+ scenery from being loaded when an od28-6 shapes file is loaded. Video/Rendering: - Fixed the color table copy bug for 8-bit mode (used the wrong function!). - The engine now correctly supports higher resolutions, up to 1600x800, even full HD (in full screen). However, the DEBUG build may report clipping errors, in larger full screen modes (as tested on 800x600). The virtual err dialog is recentered as if on a 640x480 screen, just like everything else. Chapter screens, fixed, fill the screen. - Rewrote some floating-point math in initialize_view_data that depended on tan() to use integer math; bad FPU emulation (i.e., Basilisk II) meant bad fish-eye view. Sound: - 16-bit availability turned off when the loaded Sounds file doesn't have 16-bit. - Added "uses sound class" flag to high-level shapes. All M1 sounds show up so long as long as the shapes are imported through the latest build of shapes_compile. new_effects didn't translate M1 collection indices for sound_only case. - M1 fusion pistol "charged" secondary reference was incorrect; run your sndz/sfil/rsrc through the updated sounds_compile to get the pistol to stop repeating that sound. The Pfhor door opening/closing sounds were in reverse order. Definitions: M1 charging weapons didn't share ammo. Tools update: - Missing Rez files reprogrammed. - Updated version strings--all the tools. - dump_specs: Fixed "Fattened Movie List". - sounds_compile.c now "app-able" (no longer just a tool). And it now reports info to stdout, with names, totals and offsets. Missing stderr line endings added. Now partially supports snd2 format output (save with .snd2 extension). 2-source count instead of 1 (fixes Anvil viewing, among other things). Version 0.5d3-d4 (2011.08.16-20, 9.14) Fixed makefile: LibPPC was not passed to PPCLink (would not run on PPC). M2/Infinity-compatible M1 importing: Infinity-compatible M1 preprocessing, and logoff's where they should have been present in modern preprocessing (may affect some older films). Since Glue polygons were written out in M2, imports require code implementation (already done in od28-6). Alternatively, monsters standing in them will become 'deaf'. Platform adjacent polygons included in iidx neighbors so items can be swiped from behind secret doors (but not all) in M2+. Tools update: compile_wadfile: Fixed bug where directory names may be garbled. dump_specs: Finally implemented enums in titles ("Version;0 M1,M2=2,Inf=4"). Offset-position key now supports ending the thread at EOF. Fixed some cases of printing after error (e.g., garbage after EOF). Added "Fattened Movie List" template for QT music files. Version 0.5d1-d2 (2011.06.21-7.09, 7.28-8.01, 8.07-15) CSeries is now internalized, porting to enviro64.h (rev.2011.08.14). (No more downloading MyCSeries.) The uint/int types are replacing the Mac OS types. Various improvements, fixes. Some performance improvements include faster M68K 64-bit division, most cases. map_constructors used bad "minimum separation from projectile" (wall min.!). Reverted item pickup code so "Thomas Mann's Greatest Hits v2.x" would work (method stored indices, too many items to list in only 7 polygons total). Fixed save-game bloating on internal definitions import -- counts reset twice. Prefs bug fix: first physics file would be selected in when none's set. Hand-updated the hand-stop cicn to be more like my right hand, reduced colors. More portability, compatibility with Carbon by making it the primary PPC target. Some warnings silenced: badFileFormat, AIFx music playback (i.e., when QT fails). Killed the display part for the pre-0.3b2 display_and_destroy_monster code. Nixed unused "custom teleport in" flag; raw shape now used (set to NONE otherwise). Teleport-in mods from the beginning were for things like compilers in Yota "cloud castle" showing up w/o static/sound. M1 map imports/runtime: No more "External Maps" warning for preprocessed maps. More weight for panel arm reach. Flag added for static environment so players can't cheat by saving a game. You get only one fist, and you fail if over half the civilians on the map die in a rescue. Subsequent bug fix: "failure" terminal grouping was skipped. Major damage does half damage if not on supporting polygon, fades last longer. Two damage response definitions updated. "Monster impassable" acts like border (fixes "AinŐt Got Time Pfhor This") - changes, optimizations for this (activation) will affect backward-compatibility in abnormal data cases. M1 definitions imports (a lot of work - weeks spent): Added missing "invisible looker" to monster revised substitute list. More definitions adjusted to fit characteristics of the standard M1 model. "Leader" monster doesn't move; neutered civilians - "cannot attack" so they'll get out of the way this time. Tick-wasps shoot something (slowly). Drone subs for lookers (instant kamikaze only). And Yeti for Hulk subs. M1 physix importing will change most/all fields of the *substitute* type. Fixed sound ID search function bug where 1st NONE ID ref. was used. MADDs are friendly (green square) in motion sensor. Humans aren't enemies in M1 rebellion. No "external physics" warning when model matches standard CRC checksum. Monsters mind injury polygons regardless of elevation changes. The results differ from M1 (stops at edge v. discount poly). Tools update: compile_wadfile: Added abort (cmd-period) for each map in a single. Updated snd references. Cheats: Letters B-Z interrupt numeric sequence; was just P or L (poly/level). Mod's for 'E' - loading an environment's collections. Shields cheat does 200% at a time, up to 21800% (next step would overflow). Version 0.4a3-0.4.5a4 (2011.06.04-6.20) Due to a major bug, fixed in 0.4a1, 0.3b2 has been phased out. Bug/issue fixes, include: *Projectile-hit-projectile code change fix*: Projectiles still didn't recognize map intersection; area projectiles, such as alien weapon blasts that are close by only slid along walls. "map_shapes.h" fix: missing shift for ext. collection objects (high 4 bits). Yet another crash fix for QT music (blame Apple) when the user exhausts all of the RAM with the app's Preferred Size. Music files that have no intro, epilogue, etc. won't play #0 as an alternative. Error recognition went the wrong way for display_loading_map_error. Those errors are now displayed correctly. Initial "saved" object count is accrued to active object buffer maximum (fixes "exceeds maximum" problem with maps going over 512 starting objects) - only affects those w/o a dynamic_limits (LIMS) resource. I will soon implement setting these values in scripting. More handling of invalid value cases, fewer error messages, slightly faster in DEBUG builds (i.e., all releases); theta and phi are normalized in world.c. Some functions in map.c getting incorrect data will no longer use NULL. More information in some debugging messages. No more 'light index out of range' for maps that don't have them (zero intensity anyway). Less recalculation of lightsource ptrs (faster). Game no longer terminates if a landscape to be loaded is n/a. All shapes are unmarked if a game fails due to missing collection(s). Marked collections used to persist into concurrent games. M1 corrections and implementations, include: texture_rectangle now handles M1 RLE shapes correctly. Compile anything! Rheostat lights have 1/2 delay turning on, none turning off. Client monsters now appropriately (i.e., compilers) go after Pfhor/relatives under rebellion instead of the player (will not attack player). Filled and adjusted M1 scenery definitions, works better than in M1 now. M1 collections can now be loaded via map wad regardless of the shapes file. Implemented old-style landscape mapping. Solid effect for hitting landscaped lines now optional. Turn solid *off* for the effect. All 'the new mapper code was written, tested & completed in a matter of hours! No more parallel mapping. Pathways Into Darkness/Marathon Beta-related: Implemented handling of uncompressed bitmaps in texture_rectangle. This paves the way to using raw sprite bitmaps in collections. Wrote a shapes decompression program, and structures on how to read the data. Tools update: Fixed text preprocessing so compile_wadfile actually works with terminals as Forge would, as compile_wadfile is supposed to. Also added Select All and Undo/Redo features, and fixed a number of things. Use of the 'C' script instead of handling everything themselves. print_chars in specs_template.c now handles lengths of one char. correctly. preprocess_lex.* moved there, where it belongs. shapes_decompile has a popup menu dialog to choose a collection, or all. shapes_compile will now do M2+ format if user adds '.shp2' file extension to the destination name. (It prev. only did od28-6.) Page up/down, home/end, control-arrow-up/down in Network Game Setup changes the entry point map. Added "load" (cheat) code for maps that expect mutiple environments to be loaded. See map_shapes.h for collection indicies. Version 0.4a1-a2 (2011.05.23-6.03) Some backward compatibility with pre-0.3 films removed; v0.1.9 no longer played. 0.2.x films using non-erroneous M2+ maps should run consistently. Bug/issue fixes, include: Allocated scenery count allocated half the correct size! (PPC-only) reconnect_map_object_list *decremented* in positive loop (Marathon bug). Greatly improved error handling and data checking for the GDSpec code. Corrections in error/debugging messages. Fixed a memory leak (shading tables not disposed when switching depth). "last light index" wasn't restored/updated when loading from a saved game. Singular strings were added for netgame dialogs (no more "1 kills"). Dragging in films preloads the images file (fixes initialization problem). (If you want custom images *and* replay, select the images file first.) The weapons ordering array had the ball before the Flechette SMG, causing a ball/skull to disappear when picking up the SMG until a manual weapon switch. Background music: Not playing music when the movie's loaded with not enough memory (crash). Fixed timing issues, songs loop, fades work. Projectiles hitting other projectiles!: Now done correctly, regardless of "Infinity emulation." (This won't affect maps with physics contained w/ the "can_colide_with_projectiles" definition flag off, so no harm no foul.) 0.4a1 was bad here: missiles shot into flames left both stuck in mid-air. Numerous optimizations (faster); fewer recalculations, unnecessary bounds checks. Supersampling scaler uses the fastest method I've devised so far. Definitions are loaded from a single resource instead of one for each type. Most of my "monster agitation" code's removed -- two fields are gone. Full 8-bit range for obj. collections through use of the 'pitch' field. M1 physics imports implemented, but not enabled -- needs testing. M1 maps can be selected in the prefs "Environment" panel. Version 0.3b2 (2011.05.10-5.22) Bug fixes, updates, various improvements, more precision for net game scores. PPC side now actually runs, damn it. Fixed the stupid lexical "_loaded_by_level" bug. Saved games now work again. Removed things redundant/unused, subtracting a lot of KB from the src. All but one commented instance of the almost useless "PERFORMANCE" are gone. All remaining binaries have been Rez'd so the source can be Zip archived. WAD image loading (i.e., Win95 M2 or modern Aleph One) now gathers index by ID instead of by name (IMG#####.##). Added "" to gather dialog for single player network games -- no AppleTalk needed. Net game dialogs for this case include monster kills. Enabled all other game types in the gather dialog; players will get a random position anywhere in the map if the appropriate team indices aren't set for the initial map player objects. The grayed-out OK button when there aren't any maps in the menu doesn't get enabled or "hit" via return/enter when it shouldn't. Fewer warning messages and asserts for generally benign things like divide-by-zero cases. This eliminates dumb interruptions in unlikely cases, and reduces overall code size. Lighting for objects is now based on interpolating between the dominant floor and ceiling with distance from floor (2WU minimum). Correct full black color fades under night vision mode. UPDATE_BORDER_IMMEDIATELY now set to 1 for standardized screen switching (so much for personal effect). Already handled kind-zero errors no longer displayed (ID = 0, after error message). Less recalculation and unnecessary double-checking of some pointers = small performance boost. [Added "revive" cheat code so you don't have to completely start over when you die.] Version 0.3b1 ( - November 15, 2007) Tested fast teleportation, fixed the same problem faced with the terminal camera regarding it (ceiling-z was added to delta - floor-z wasn't otherwise). Permutation is also any static map object. The only problem now is the effect isn't good enough. Fixed another bug regarding a low-memory situation. compile_wadfile and dump_specs can now be compiled as application-tools. Terminal cameras now work. Permutation is static map object. Added ability to drag in Music and Images files. I can't get the Finder to actually drag in every file type the program works with... To fix a problem with the new method of Definitions Model over Physics model, the "Default" menu item is now always available in the environment panel. Bug fixes; speed improvements; fixed the problem with lightsources being in the wrong format in wadfiles generated by compile_wadfile.c. M1 maps run better. Version 0.3d2 (June 22 - October 2, 2007) - unreleased Implemented code for all network sounds (play ball!). The array/slot accessors are now in macro form regardless of "DEBUG" (faster). Successfully compiled under Carbon; the result has not been executed... and network_speaker was promptly routed out. And in properly not redefining CALL_NOT_IN_CARBON or what-have-you... well, most of the Networking is currently disabled under Carbon (due to my lack of experience in networking). Updated text preprocessing; terminal text preprocessing now actually works (since version 0.3). M1 terminal preprocessing also... actually works. More M1 implementations. You can jetpack with the flamethrower, and control panels under vacuum environments are "lighted" to >50%. Background music! Epilogue music! All-of-the-above music! Faster, leaner shapes tables processing; better handling of 256 colors mode. Bitmap remapping is only performed on interface-type collections. Fixed a global variable overwrite at interrupt time bug. This fixes the "flare glitch." Landscaped platform lines are no longer always empty. Version 0.3d1 (December 2006 - June 13, 2007) - unreleased More bugs and problems fixed to nudge a little closer to Infinity AND work with the classic M1 engine. This includes the bug with standing on platforms. Object swiping also no longer relies only on neighboring polygons, even though map index calculation in map_constructors.c now surpasses Infinity's abilities. More active stuff; points, lines, polygons and sides now have no limit (32767, to be exact). Be aware that this also means that v0.3 saved games may not be exactly compatible running on previous versions due to an increase in the default maximum values. If it fails regardless of memory... then it's not compatible. Maps like Yota-"cloud castle" will play without a hitch. Certain things in rendering may not show up properly in the "Low Resolution" mode due to issues in antiquated rendering methods (this renderer needs a complete rewrite). Decreased the map checkpoint scale in the computer interface, so more should show up (and to make it closer to what it was originally before I mucked it). Implemented WAD-file chapter screen sounds and collection patches. Turned the number entry dialog (for cheating your way to levels of [your] choice) into a list dialog consisting of level number, network/solo and name. Went all-out in long distances in rendering -- just be aware that the extended 64 bit math in long-distance clipping is slower. The user can now silence the debugger routines by removing the `dbug' resource. It used to be that to do this required an empty `dbug' ID 128 resource. Updated the item definition structures for the newer Infinity-based shapes so the night-vision goggles item wouldn't be a potato anus. Other items that didn't show up as anything now show up as something (shell casings?). The total number of sounds slots is now 512, as promised. Fixed a Marathon bug -- garbage object removal, where the program would hang. Now death in a single game can repeat indefinitely (...until countdown expires). ... the melted gray zone ... Version 0.2.2 (December 10-18, 2006) Fixed a shapes_compile bug that screwed up bitmaps that used any of the last eight colors in the color table. More picts and dialogs are displayed - in trying to act more like Infinity. Updated the demos (by redoing them) - the reason is so they start up right (and work with version 0.3). True-color collections (custom color table) can now have over 255 seperate colors - 255 (including the private colors at the beginning) independent colors for each table. Unfortunately, this removes the ability for color table indexing effects (I don't know if this type of thing has ever been done). Bugs have been fixed and some things have been rewritten/redone. Resolved some division by zero problems in the weapons code. Added more suffix file type recognition. QuickTime is now used for music, where applicable. Updated the icons and the bundle (I'll stop fuxing w/'em until version 1.0). Version 0.2.1 (December 2, 2006) The engine can now handle more shapes files with bad shapes (renders nothing instead than crashing). Updated the icons and dialog header PICTs. I added the 254 color saucer icon, and fixed the others (GraphicConverter 3.6 can't correctly save Windows Icons). Binary files can now be dragged in, provided that they have the appropriate dot-suffix (eg., `.sce2' for maps). Less assertion interruptions when running third party maps/physics (this only applies to when DEBUG is on). Resources (other than PICTs) are now all stored in Rez. The "binaries" folder is now as good as redundant. What is to be the PICT resources now come in an "images" directory, where QuickTime is used to import whatever's in there (all are currently GIFs). If the previously used map for film playback/recording was dragged in to the app, you can playback films recorded with it. The last recording can be played, no matter where you dragged from (as long as the map is available). Note that changing preferences or playing films that use a different map file will mean that the one used for that film is now the currently selected one (and the one dragged in may not be that one, forcing you to drag it in again or drop in an alias of it nearby like before). The total sounds size has been increased, again (along with RAM requirements in the sounds panel) to prevent sounds from needlessly dropping out ('cause the ambient sound channel count was increased some time ago). One way around this problem is to compress sounds (you'd probably only want to do that with sounds that don't need superhigh-fidelity). Re-instated background event suppression toggling (MacOS Classic only). The isqrt functions in MyCSeries no longer produce the positive error they did (in unlikely cases). `flechette' is now spelled correctly in the source code. Version 0.2d2 (November 21, 2006) Improved Infinity emulation. Big time. Fixed some tools that wouldn't work (or wouldn't compile). Missing collections now quit the game, rather than the quit the app. Updated the bundle to fix the problem with dragging in Marathon files. Updated devices.c (since the changes to the panel definition structure) so that toggling switches with projectiles actually frickin' works. Version 0.2d1 (November 19, 2006) Some major improvements in functionality and compatibility (the trig tables are now built in to the code). The two big giant bugs have been squashed. I fixed several things I broke, and I have worked around the bug in SC that screwed up clipping in rendering. Using extended shapes files is now an every day thing (they work). Improved 256 colors mode. Faster, less green, night vision table generation. Music finally works, again. Also increased the renderer's abilities for longer distances and more in view. Unfortunately, the use of 64 bit math in enabling this will slow down rendering on 68K Macs even further. If this is a problem for you... then you should get a new computer. Added (untested!) support for a nil "virgin mount" - the regular "mount" shape is copied to a "virgin" substitute if the "virgin mount" shape is <= 3x3. Also, the mount shapes can have a custom size. Updated the `open' resources and icons. Maps with bad precalculated map indices (various extra pointer storage of indices because every data element is fixed in size) now work to the degree in how much they can work (and the program now no longer dishes out an endless barage of out-of-range errors) -- if you get a "bad xxx list pointer" message, then the map needs fixing (contact the author who made it). Note that the changes made for this may affect consistency in film playback for maps with this problem (but then again, how were you able to play maps with this problem?). Introduced my updated MPW tools. Version 0.1.9 (November 6, 2006) Upped the contrast for nightvision. Added support for scenario WAD images (Win95 map pictures). Tried fixing support for higher resolutions (I still can't test this). Replays for M1 maps (but not M1 replays) will now have the directory searched for them (instead of not running the film either way). However, since the checksum of M1 maps is typically zero, you should have _only_ that one map used for the film within the directory. Bug fix for running M1 maps (can't run through solid windows anymore). Media textures can now be animated by adding definitions to the map/physics. Bug fixes for Valkyrie acceleration (including the ones that may have been introduced by me some time ago). Also, the gray pattern is now back for pause, instead of the slower, crappier, not-so-popular wash out effect. Because the player definitions have been modified (to now work, of course), if you made physics or maps with player definitions (who really has?), then you may need to update them. Do you like seeing players with legs for where a torso should be? Version 0.1.8 (October 2, 2006) In effort of making item pickup less distracting, I adjusted the transparency of the green fade (initial transparency was 75%, and now it's 66.7%). The physics model now overrides the internal physics of the map. Last time, external physics didn't have hardly any effect, since it hardly was loaded at all... Films will, of course, be inconsistent when using the wrong physics model, and Marathon Infinity loads the internal physics afterward (so it may not come out as expected to Infinity users). You can now drag those Anvil sample models in for different tastes of "Mars Needs Women". F10 toggles a display on the bottom right for the player's yaw and pitch. Version 0.1.7 (September 20, 2006) The external map warning message no longer shows up at revert (only once after starting a new game). Fixed a problem with solid lines on platforms when running M1 maps. Bits 5-7 of the transfer mode are RGB filter bits for the translucent modes. Transparent texture filters can change the look of walls and landscapes. Textures can be of any size (but renders as [largest power of two square]). The upper byte of light source indices in polygons and sides corresponds to an adjustment (if bit #7 is set, the intensity of another "lightsource" is used instead). ... Versions, previous... (March-November 2004) Added translucency, fixed bugs, inadvertently added bugs, etc.