I decided to write this up because things have really been heating up on the PSP development server (see bottom) and I hope to inspire some people to become interested by writing about everything. So without further ado, enjoy.
I'll kick off with some updates to the existing projects.
Perfect Dark: Reloaded: For those unaware, we've been working on a Perfect Dark remake for PSP. To be more pragmatic we plan on doing multiplayer if anything, singleplayer being an afterthought. Development had hit a wall and gone on hiatus due to the massive work involved in correctly converting everything, and we lacked a dedicated scripter or any model rigger - but recently, there has been a resurge in interest.
I've had some free time on my hands, and I've been working on finishing my own hand-made remake of the Facility map from GoldenEye - otherwise known as Felicity in Perfect Dark. Texture scaling is skewed as a result of the editor not showing what it looks like in-game, making it very trial and error, but I'm working on it. Enjoy this pic of the latest progress!
Project Fury: This is an all-new and unique first-person shooter, also built on the Quake engine. This project is primarily spurred by Diema, with me contributing a few textures and one map so far (the "Castle" map). It's a game set in the polar opposite of hell - that is to say, hell has frozen over, which brings out many interesting environments combined with Brutalist architecture for a distinct look and aesthetic. Diema's own description of the game, and images, can be found just below.
STALKER Portable: Wait, where did that one come from!? A small group of Russian developers have started work on a faithful remake of the classic PC game STALKER for PSP. It features a massive map, NPC interactions, an assortment of weapons and some incredibly detailed environments. It currently suffers from some framerate problems on a real PSP, but we have some ideas on improving things - I'll talk more about that below! The project as a whole is not complete yet, but regular progress is posted and shown off by the lead mapper D. NeyRin on the discord and the engine engineer st1x51 is also there. Check it out! Note that the following images for STALKER are taken from PPSSPP at 1080p, so the textures scale badly and are not representative of their quality on a real PSP screen.
STALKER Portable Images
DaedalusX64: One Daedalus developer has relocated to another server, but z2442 and I are both in the server representing Daedalus. Progress has been slow as of recent, but compared to where it was one year ago, a lot of cool experimental optimisations have been made making N64 emulation on PSP even more viable! The project now uses modern C++ programming standards and with an updated compiler, Daedalus is faster, and the sound code for the Media Engine is now written in assembly (machine code) for maximum performance! Media Engine stability has always been contentious but it is improving.
Other Projects: The developer of the incredible ground-up remake of Spelunky for DS (aptly titled "Spelunky DS") has started work on Spelunky for PSP! Currently, the basic rendering and tile system is complete and working, as the GIF below demonstrates. The project has a lot of hope for when the developer can commit to it properly!
The latest version of DeSmuME has also successfully been ported to the PSP. The framerate is not in a playable state in any game, because everything is currently chucked onto the CPU and it is using a slow, unoptimised interpreter. However, Exophase (the developer of DraStic for Android and the GBA emulator gpSP) has said that while he reserves his scepticism due to the work involved, it should be possible to get some games running at good speeds! He's too busy to help us personally, but has given us the green light for using his GBA emulator code to get great emulation of the DS's second CPU immediately!
Warning: big image!
Project Enigma has stalled due to MotoLegacy pulling out to focus on Nazi Zombies Portable, but this has allowed us to re-align our priorities a bit. We will be using the Insomnia ProQuake engine, Quake maps and models for optimal performance now instead of being tethered to DQuakePlus's poor performance (the NZP engine). It is just a matter of time before the maps are wrapped up and the scripting commences!
So, back to the point
As you can tell, so much has happened on the PSP scene in the last year that it took a tangent to get much of it out of the way. That wasn't even mentioning the new Counter Strike Portable (the developer of which is also with us), the slick sci-fi cyberpunk proof-of-concept Spy-Fi or the fantastic CM File Manager by Joel16 with new functionality like FTP file transferring. So what did I start this to write about again? Ah, development!
If you don't know anything about coding, you can skim or outright skip this section.
The shooter projects on PSP all base themselves on a derivative of the Quake engine. These generally accept Half-Life 1 MDLs (models) and BSPs (maps), but not all of them. They are as following:
Insomnia ProQuake: The fastest engine at the moment. Only supports Quake 1 maps and models, but HL1 map support is there with a lighting bug.
DQuakePlus: An established engine used in projects such as Nazi Zombies Portable. Performance is generally 25-30FPS worse than Insomnia, but supports Half Life 1 MDLs and BSPs.
ADQuake: A revised version of DQ+ with slightly improved performance.
ADQuakePlus: An even better version of the above two engines which is being worked on with a big performance improvement or two, but is currently closed source. Technically illegal to do so, but then again, homebrew programming is not the cleanest area of the law.
Confusing? Yeah, we get that. Hopefully this will be narrowed to just ADQ+ and IPQ.
Even Insomnia does not perform as well as we would like. But fear not! We have some ideas.
Meet Kirk. No, he's not a person. Kirk is a cryptography chip that is little known, but exists on the PSP. Put as simply as possible, a BSP file is basically a sorted tree full of IDs that point to other data. The Kirk chip seems like it would be suited to SIMD (single-instruction, multiple-data), ie. traversing this tree. Right now, this tree traversal happens on the CPU, and it is a core feature of how polygons get put on the screen. The less this happens on the CPU and the more it can get hardware assistance from other chips, the better the framerate. Diema concocted this mad idea, and hopefully we can put this information to use to free up the CPU and get better performance using an obscure part of the PSP hardware nobody really knew existed!
Diema has also come up with a few other optimisation ideas, because he's pretty much a wizard who makes Gandalf look like Joey Essex.
First, he came up with the "texture scale trick". Quake generates lightmap data and polygon information with the size of the textures as a factor. By increasing the scale of the textures and stretching them out, we generate less accurate lightmap data that performs better. Sounds alright, right? Well it gets better when you realise we can load textures externally to load a full, high-quality texture at runtime. So effectively, we generate less wpolys with no impact in visual quality in areas where lighting can take a hit!
Secondly, he has set up a very handy compiler setup that, in conjunction with ericw's tools, allows us to have baked ambient occlusion, phong, bounce, surface lights and new sunlight shadows with no performance cost! He has personally experimented with it for the best settings.
Lastly, using TrenchBroom, he has managed to make some very convincing terrain and geometry.. in the stock Quake engine! Using clever vertex editing, some very nice terrain can be made without needing any terrain generation tools. Check out the images below, all of which run on a real PSP!
Last thing! In regards to DS emulation, currently everything is handled on the main CPU. This means the ARM9-to-MIPS interpreter for the main DS CPU, the ARM7-to-MIPS interpreter for the secondary DS CPU, all graphics rendering, sound, input and anything in-between. However, if we space things out as such:
- Main PSP CPU: Emulates the main DS CPU, a 66MHz ARM9 core. Ideally using a dynamic recompiler (JIT) for best performance.
- Second PSP CPU (almost as good as the main!): Emulates the second DS CPU, a 33MHz ARM7 core. This is fortunately just a higher clocked GBA, which is already emulated very well on PSP, so a dynarec/JIT already exists thanks to Exophase's gpSP.
- GPU handles all graphics rendering
Then we will get much better performance! On top of this, the secondary DS CPU could not have custom code written directly to it, so we could likely use high level emulation and only emulate the required calls instead of emulating the entire processor. That would make light work of that core, at least. Being frank, an ARM9 to MIPS dynarec is a bit of a long shot, but if we even get up to the point where we have everything else in place, we'll be really on the right track.
The PSP scene is more alive now than it has been for years. Multiple projects, new and old, have sprung up from the ground. Interest has surged; the dedicated PSP discord has amassed 1,000 members in 1 year! And despite all this, we still want more people and more developers on-board to help kickstart this PSP renaissance. More about the PSP is being learned every day (just see Kirk for example! Even the second CPU isn't totally tamed yet) and as more people hop on-board every day, the scene is growing once again!
(I'll remove this if the moderators want, but since so much of this takes place on the Discord server, here's the link: https://discord.gg/bePrj9W)
I hope you learned something from this post and I hope to talk to you guys on the server, or if you have any comments or questions feel free to talk below! Thanks for reading.
You need to be logged in to comment