Releases: Ghoster738/Future-Cop-MIT
v0.1.7
π§Ίπ₯π The Easter Release ππ₯π§Ί
I did not expect to release this project on Easter, but here it is. I had made a lot of improvements since v0.1.6. The primary being actor support.
You can view the video for a demonstration of this project here.
Improved Actor Support and Ground Casting
Thanks to BahKooJ's notes, I now support more actor types. The maps now looks more alive than before. You can finally find the player. In a mater of fact, some actors move across the map. To list the improvements and additions would thicken these notes. So, I decided not to list them all. Note: That the actor pathing support is not accurate yet. Ground Casting is also vastly improved. It is both faster and more accurate.
Before
After
Fogs and Decals are Supported.
These quadrilaterals added much detail to Future Cop. It improves the look of Griffith Park's map.
Before
After
Map Vertex Color Upgrade/Fix
I had improved the reading of vertex colors for map sections and now they show up properly in the map viewer. This fixed the glitches found on the maps, and the maps now look both better and brighter.
Technical Details
It turned out that the vertex colors in the color palette stored in map sections are actually 16 bit rather than 15 bit. The color format used 5 bits for each channel. The three channels are red, green, and blue. The last bit was used to double the brightness of the color rather than being unused.
Before
After
Added "shading" to Model Instance Polygon Rendering.
I also worked on giving shading to model instances that should have this shading. This gives the models a little bit more detail. Right now it does not blend in with Future Cop, but it is better than nothing.
Before
After
Incomplete Software Renderer
This renderer is only useful for rendering cut-scenes, font and images. It does not render map geometry yet. It also uses most of your CPU. It is not recommended for use yet, and it is there to practice my optimization skills.
Graphics Configuration
I am now giving you the configuration file support. This will enabled you to edit some of the graphics options. The renderer has two options GLES2 or Software. GLES2 is the default, and Software is not useful as of this release. GLES2 has two graphics options semi_transparent_limit is the triangle limit adjust the semi-transparent triangle limit. force_gl2 if set to true would make the program try to use OpenGL 2 then to OpenGLES 2. Software right now only has one option pixel_size. If you increase this option it should make the program go faster, but at a reduced resolution.
[general]
version_major = 0
version_minor = 0
renderer = GLES2
[gles2]
semi_transparent_limit = 131070
force_gl2 = false
[software]
pixel_size = 1
Controls Configuration Update
I decided that it was weird to use JSON rather than INI to store key-mapping. So, here is what configuration files look like now. The section "player 1" holds the configuration mappings. This does mean that the program will no longer read from controls.json file. I recommend that you remove it if you want to save a little bit of data storage.
[general]
control_library = SDL2
version_major = 0
version_minor = 0
[player 1]
menu = Escape
up = W
down = S
left = A
right = D
rotate_left = Q
rotate_right = E
weapon_light = J
weapon_medium = K
weapon_heavy = L
action = ;
jump = Space
camera = Tab
change_target = T
map = M
Video Volume Adjustable in "sound.ini"
I added the video_volume parameter to adjust video volume. 2 is the max and 0.0 is the minimum.
[general]
music_volume = 1.000000
sfx_volume = 1.000000
announcement_volume = 1.000000
master_volume = 1.000000
video_volume = 1.000000
[listener]
sound_limit = 32
[announcement]
queue_limit = 32
What's Changed
- Filesystem Paths Used Instead of Strings by @Ghoster738 in #86
- Constant Global Pixel Formats Are Now Preferred Over Declaring Them by @Ghoster738 in #87
- PixelFormats Are Treated as Constant Global Data by @Ghoster738 in #88
- Video Volume Adjustable Via Config File by @Ghoster738 in #89
- Controls Now Use the INI Format by @Ghoster738 in #90
- Graphics Configuration Update by @Ghoster738 in #91
- Updated Graphics ModelInstance by @Ghoster738 in #92
- Added Limited Software Renderer by @Ghoster738 in #93
- More Actors Supported; Rendering Improvements/Upgrades; Better Ground Casts by @Ghoster738 in #94
- Fixed up the Vertex Colors from the Map Sections' Color Palettes by @Ghoster738 in #95
- Added Normal Shading by @Ghoster738 in #96
- mINI from 0.9.17 to 0.9.18; SDL 2 from 2.32.0 to 2.32.4; libpng from 1.6.46 to 1.6.47 by @Ghoster738 in #97
Full Changelog: v0.1.6...v0.1.7
Aspect Ratio Bug Fix
v0.1.6
Media Update
For this release, I had worked on video playback support and image viewing support.
Menu's New Look
I had revamped the menu's look. I added a semi-transparent rectangle at the middle of the screen. There is also a radar on the top left of the screen.
Image Viewing Support for Windows Only.
Images are shown when the game gets launched. Also, when using the map spectator "loading screens" show up. Press a button to skip them.
Video Playing Support for Also Windows Only.
Videos can play when the game gets launched. Also, when using the map spectator videos also play. Press a button to skip the videos.
ANM Resources Can Now be Played on the Announcement Player.
If an announcement sound resources also comes with a ANM resource, this animation will play.
What's Changed
- Library mINI directly included; plmpeg for potential video decoding by @Ghoster738 in #79
- Music is no longer fuzzy by @Ghoster738 in #80
- Windows BMP Image Format Read and Write Supported by @Ghoster738 in #81
- Added Image Drawing Support by @Ghoster738 in #82
- Computer ANM Resources Displays; Main Menu decorations by @Ghoster738 in #83
- Added MediaPlayer state which plays Windows Images and Video files by @Ghoster738 in #84
- PS1 CANM Metadata Excluded from raw exports by @Ghoster738 in #85
Full Changelog: v0.1.5...v0.1.6
v0.1.5
Engine Improvements
This release has multiple improvements.
Internal Test Map Added
This is for debugging uses. This test map is created by @Ghoster738. Meaning you do not need the original files to view this map.
If you want to see the map just use this command.
./FCopMIT --embedded-map
CObj Quad Bug Fixed.
The previous version of FCopMIT divides quadrilaterals to triangles differently than the original game. This caused graphics bugs because the quadrilaterals where not divided properly.
Previously
Now
Full Color CObj Decoding
My version previously ignored vertex colors for opaque polygons. My project still deviates from Future Cop's because for some reason blues are always set to zero in the original game. I do not know if this is a CObj bug on the original engine, so I opted to read the blue channel.
Previously
Now
Upgraded Animated Map Textures from Static Limit to Dynamic Limit
Mostly an implementation detail but the UV animation limit can be increased now. This is thanks to Dynamic World Shader Recompilation. Also this map is created by Natbat3k.
Previously
Now
Parsing More Playstation 1 Data
This project now reads data it previously skipped. Announcements for the PS1 version can now be read. Small videos and music is also read. However, what is lacking is decoding capabilities.
What's Changed
- Section Geometry Updated; Internal Test Map; Added Git Attributes by @Ghoster738 in #69
- This project reads IFF's more accurately by @Ghoster738 in #70
- I reverted to a previous MojoAL to fix a bug by @Ghoster738 in #71
- Bare-bones SHD Implementation; Bug fixes by @Ghoster738 in #72
- Resource Loading Speed; More Header Info Processed by @Ghoster738 in #73
- IFF Memory/Speed Improvement Removed Redundant Allocations by @Ghoster738 in #74
- Accurate Quads for Models; Accurate vertex colors; Dynamic World Shader Recompilation by @Ghoster738 in #76
- PSX SWVR Support; Placeholder VAG Resources; An Announcement Bug Fix by @Ghoster738 in #77
- Upgraded Libraries and MojoAL is updated again by @Ghoster738 in #78
- Updated mINI library from 0.9.16 to 0.9.17
- Updated SDL2 library from 2.30.6 to 2.32.0
- Updated libpng library from 1.6.43 to 1.6.46
- Updated libjsoncpp library to 1.9.6
- Updated MojoAL library
Full Changelog: v0.1.4...v0.1.5
v0.1.4
Faces and Particles
For this update, I fixed graphical bugs and implemented new features.
Mouse Menu Support
Now, you can click on menu buttons with your left mouse button to use them. I really should have done this earlier.
Sky Color Change
I changed the sky color because I noticed certain particle effects are invisible, so I used dark blue instead.
Particle Rendering Support
For this release, I had implemented particle rendering. While they can be placed on the map in code, I am not using them yet.
Moving on, I have implemented the particle renderer which is there to view the particles.
Star Rendering Support
This is a three star combination which demonstrates that all 3 known forms of stars can be used. 4 sided, 8 sided and 12 sided stars where encountered.
Before
No, more are they these static cross patterns. Note: The exporter uses this pattern still.
After
They will face the camera like the original did. Only one axis is necessary which reduces triangles.
Billboard Rendering Support
Like the stars, billboards also faces the camera.
Precision Bug Render Fix
After upgrading my computer's graphics card, I encountered a bug that happens with certain drivers/graphics cards that certain other people where having. There was a precision bug that probably affected all the way back when this repository was uploaded. It affect OpenGL ES 2 render path. The reasons are difficult to explain, but they where caused by basically being too little resolution for the positions on certain machines.
Before
While I am not giving this bug any justice the title screen looked like this... (If you cannot see it, there are supposed to be vents rather than complete holes to lava.)
After
What's Changed
- Fixed OpenGL ES 2 precision bug which affects certain graphics cards.
- Circles to Stars; Stars are now drawn as billboards; Star Vertex Color Animations by @Ghoster738 in #64
- Added Billboard Draw Support by @Ghoster738 in #65
- Quick upgrade to detect mouse position to the window by @Ghoster738 in #66
- Mouse Menu Controls; Crash Without Game Data Fix by @Ghoster738 in #67
- Added Particle Render; Particle Renderer; Changed Background Color by @Ghoster738 in #68
- Updated mINI library from 0.9.14 to 0.9.16
- Updated SDL2 library from 2.30.5 to 2.30.6
Full Changelog: v0.1.3...v0.1.4
v0.1.3
Circles and Normals.
This update brings only one new feature circle/star rendering. I also fixed multiple bugs. Like fixing skin animation exports and fixing normals.
Star/Circle Rendering.
I have implemented circle rendering/export. Now, more/all models can be decoded with my software.
Model and Export Fixes
There where multiple bugs and miss conceptions. There are no apparent bugs with the normals.
Past: Bad Normals.
Now: Good Normals.
What's Missing
The animations with the circle primitive are not implemented yet.
What's Changed
- Fixed skinned animation problem; Added circle primitive; by @Ghoster738 in #61
- I fixed every problem that I could find having to do with normals by @Ghoster738 in #63
Full Changelog: v0.1.2...v0.1.3
v0.1.2
Audio Update
Now, sound can be played in Future Cop M.I.T. Announcements and Sounds can be played.
New Features
Announcements or SWVR resources can now be played. Also added announcement player.
Controls
Press ACTION button to play the audio.
Press RIGHT to go to next announcement.
Press LEFT to go to previous announcement.
What is displayed?
Subfile Name is the name of the announcement. Mostly the team uses numbers with slashes.
SWVR tos offset is the offset from first announcement resource.
SWVR offset is the offset from the start of the mission file.
Generic Sound Resources can also be played.
Note: sounds 1-127 are from the global file. Sounds beyond 127 are from the mission file. WAV and AIFF resources are counted as generic sound resources.
Controls
Press ACTION button to play the audio.
Press JUMP to toggle sound looping.
Press RIGHT to go to next sound.
Press LEFT to go to previous sound.
What is displayed?
Resource Id is the identifier of the sound.
The sample offsets are loop offsets
The rest are instructions.
Configurable Audio Volume from sound.ini file.
This file sits at the same location as the futurecop.ini file.
The sound.ini file has four volume levels. sfx volume affects generic sound levels. music volume affects music. Announcement volume affects announcement volume. master volume level affects all three.
Note: The volume cannot exceed 2.0 because I do not want to blow peoples ears up.
Audio exported will keep their metadata preserving loop information.
- AIFF reading code now reads more metadata.
- WAV reading code has been refactored.
- Audio offsets from both AIFF and WAV resources are parsed.
- Exported WAV and AIFF re-encoding is now optional to avoid metadata loss.
Regressions
- PS1 files are not supported due to them using their audio encoding being more challenging to decode then regular PCM like WAV or AIFF.
- Strange audio gaps when setting audio to loop. These gaps create popping noises.
What's Changed
- Fixed frame to frame slowness bug by @Ghoster738 in #51
- Fix Bounding Box Rendering Bug For Macs by @Ghoster738 in #52
- Made Finalize Workaround Configurable by @Ghoster738 in #53
- Added MojoAL Sound Library, Soundtrack Playback, Partial TOSResource Support, Accessor Upgrade by @Ghoster738 in #54
- Added Announcements Player and added SWVR Handling by @Ghoster738 in #55
- AIFF Support and Code Refactoring by @Ghoster738 in #57
- AIFF and WAV playback support; Added Sound Player; Audio System Upgrades and Changes by @Ghoster738 in #58
- Added Sound Settings; Fixed Submodules; Removed Temporary glFinish bitfield by @Ghoster738 in #59
- Rewrite ini if either incomplete or missing by @Ghoster738 in #60
Full Changelog: v0.1.1...v0.1.2
v0.1.1-1
Bug Fix For v0.1.1.
This is simply a release to fix various rendering bugs of release v0.1.1. Almost no new features except one potential fix to the weird semi-transparency bug.
A Single New Feature.
temporary_finalize_dynamic_triangles option is at the primary conf file. Its range of values is 0-7, and it is a bitfield.
0 means every finalize operation is NOT called. Because it can slow down rendering to a crawl, I only recommend using it if this project is not rendering correctly.
What's Changed
- Cleaned up bounding box rendering code.
- Rewrote the routine for drawing dynamic triangles which are used for semi-transparency and lights.
- Vertex Attribute code enhanced.
- Fixed frame to frame slowness bug. by @Ghoster738 in #51
- Fix Bounding Box Rendering Bug For Macs by @Ghoster738 in #52
- Made Finalize Workaround Configurable. by @Ghoster738 in #53
Full Changelog: v0.1.1...v0.1.1-1
version-0.1.1
Future Cop M.I.T. Actor and Model Support
This release I worked on both actor and model support. Also, I enhanced the renderer to draw boxes and light semi-transparent polygons. For all that I know, I might be missing some of the features. Also in order to toggle bounding boxes on and off press the keybinding CHANGE_TARGET. I also updated the libraries for this project as well.
Light or Addition Polygons can now be drawn.
Some of Actors are now drawn.
I even implemented the dual coordinate system that Sky Captain uses.
Models or Cobj's Enhancements.
By far Cobj support on this project had improved greatly. In a matter of fact, I now mostly understand Cobj files.
Reflections More Accurate.
Reflective models can be semi-transparent.
Reflective models can also be opaque. (However, you cannot mix both semi-transparent and opaque at the same time in the same model file).
More Polygon Types.
Lines and Billboards can be read from Cobj.
Frame By Frame Animations.
I have also implemented frame by frame animations from Models.
Display Bounding Boxes.
These are data types that Future Cop uses for various purposes like colliding with the player. They can be exported explicitely via command-line.
Bug Fixes
- At least fixed, Cobj bone animation bug introduced in v0.1.0. Basically, rotations where not being written properly.
Regressions
- Some Cobj export bugs are still there, but at least X1A works.
- On macs bounding boxes refuse to render.
- Raspberry Pi 4 32 bit operating system has obscure "pagefilp" errors. I do not know what this means.
What's Changed
- Cleanup by @Ghoster738 in #31
- Compat pi 4 by @Ghoster738 in #32
- Added CObj texture-less polygon support by @Ghoster738 in #33
- Transparent Reflections, Graphics Upgrades, and Bug Fixes by @Ghoster738 in #34
- Added Light Capabilities to the Renderer by @Ghoster738 in #35
- Added Accessor Class, CObj positions, Turret Gun Actor Positions by @Ghoster738 in #36
- Changed Graphics API to use Accessor by @Ghoster738 in #37
- Billboards and Lines Now Stored, and 3DRL are Lengths by @Ghoster738 in #38
- Billboard Stars can be displayed by @Ghoster738 in #39
- Introduced Lines and Fixed Billboard Stars by @Ghoster738 in #40
- Load All Maps Option, Model Texture Animations, and Model Vertex Colors for Addition by @Ghoster738 in #41
- Reflection Visibility Correction by @Ghoster738 in #42
- 3DRF chunk in Cobj is now parsed by @Ghoster738 in #43
- 3DBB Understood by @Ghoster738 in #44
- Annoying morph model animation bug fixed by @Ghoster738 in #45
- Cobj Skeletal Export Fixed, Cobj Bounding Box Export, Cobj Optional Cobj Metadata Export by @Ghoster738 in #46
- Cobj Bounding Box Rendering, GLES Mesh Upgrade, and Bug-fixes by @Ghoster738 in #47
- Parameter Options for Metadata for Cobj and Ctil, Cobj Commands Shortened, Model Export Optional for Cobj by @Ghoster738 in #48
- Ctil Research, Fixed SCTA Animations by @Ghoster738 in #49
- Partial Map Actor Support, Sky Captain, Turrets, Props, and Pickups displays by @Ghoster738 in #50
Full Changelog: v0.1.0...v0.1.1
version-0.1.0
This marks a new age for this project. Now, the primary executable has been implemented. FCModelViewer and FCMapViewer are now gone. They both had been replaced by the FCopMIT executable. This executable also has better visual effects as has better semi-transparency support. Also, it has implemented special effects like vertex color and vertex uv animations for the maps.
These are the new features of this project.
- FCopMIT executable with kkmic's parameter and options system that kkmic had contributed for this project.
- FCopMIT executable has a GUI with a map spectator (map viewer), and a model viewer.
- FCopMIT also has filesystem capabilities, so relative paths are no longer required. Again thanks to kkmic.
- Screenshots are placed somewhere else, and they are named with "UTC 2023-09-05 124133.png" depending on the date.
- Better transparency support via sorting transparent triangles.
- The map has both UV animations and vertex color animations enabled.
- This has a better logging system support.
Problems.
- The armv7 build has been canceled for this particular release because of a flickering problem on the graphics on the Raspberry Pi 4. I will fix this in a later build.