Friday 11 July 2014

Suited and Booted N7-style

After finally getting all my notes tied together and indexed, I decided it was time for a bit more graphical tweaking. Tonight. I have attempted to recreate the N7 armour in the starbase.

I booted up RegenD, and went to the starbase, to be greeted by this happy little astronaut:-
Using RegenD's VDP debugger, I was able to find out that this guy is actually 2 different sprites (legs and body), both using palette 1. Luckily, these are the only 2 sprites on-screen that use this palette. The first thing I noticed is that this palette has all the colours I need:-
A black, a nice deep red, and plenty of extra greys for shading. In theory, I could just recolour and tweak the original guy, and not risk breaking any other colours elsewhere!

So I knocked up a TLP palette file, loaded the ROM up, and tried to find the actual tiles that made this man... And I couldn't. I couldn't see a single one of them. This could be either
  • The tiles are stored at a strange offset. I tried offsetting the ROM in TileLayerPro, but I still couldn't find them - although I didn't try every possible offset. Or it could be
  • The tiles that make this guy up are compressed.
I fear it may be the latter. I dumped the VRAM during this scene, located one of the tiles (I think, not 100% on how VRAM is laid out), and searched for the hex in the main ROM - no results found. With the games title, font, and doorway graphics, they were quite visible in TileLayerPro when I had the right palette assigned, even if they were offset. As I could see nothing similar to this guy, but lots of "junk" tiles, I get the feeling he is compressed.

So I went for the second option to make him look like an N7 agent - hacking the palette directly. I pulled the palette from CRAM, reversed the endian-ness (sp? word?), and searched for it in the main game ROM. I got a single exact match on the first attempt - that must be the palette data. I made a little change to one of the colours, loaded it up, and one of the colours was now different! Success!

I started tweaking some of the palette, and it started looking pretty good - here is what the palette changed to:-
Changed the greys, made one of them red, tweaked a black to make the visor stand out. Lots of little changes took quite a while, as I was changing the hex by hand, and reloading the ROM each time to see what it looked like. After almost an hour, I got this little guy:-
I personally think he looks pretty badass! He definitely wouldn't look out of place on the SSV Normandy. I'd still like to track down the tile data, to alter a few little things (the colour of the backpack, the fact he now has a grey outline, and a few embellishments), but for now he looks good enough.

At this point, I kind of freaked out though. "Oh no!" I said to myself, "what if that palette is used elsewhere in the game?!?!?!" - that could be a mighty problem. But I had a little play around, and for the starbase, external ship flight, and landing on planets, that palette never seems to get reused, so I may be in the clear.

So in the end, I'm 80% happy - the remaining 20% just gives me more motivation to get GensTracer working, so I can find the damn tiles...


Looking good, hanging in the space-hood:-



Thursday 10 July 2014

Zim - Tool Shoutout

Just a quick post to say, I have come to love Zim.

I found my notes on this hack (plans, discoveries, changes made, etc.) started becoming a bit unmanageable as a simple few text documents. After looking for a better way to manage everything, I came across Zim, which is just a lightweight, local wiki for storing all your info.

I've started rewriting my notes in there, and it has already smoothed the flow of recording and reminding in my notes. Highly recommended.
Now, I'm starting to think about hacking via a version control system, to keep all my little changes as there own patches. I have very little knowledge of them, and not sure if it is possible. VCS is normally just for textual changes, as would happen with source code - how reliable are they at picking up Hex diffs? Has anyone else tried this before?

Food for thought. Anyway, back to compiling my notes!

Wednesday 9 July 2014

Racial Changes

I've been putting a lot of thought recently into how the races will marry up in this conversion. There are 7 main races that you meet in Starflight - this leaves a lot of Mass Effect races out... Thinking about how they react to the player (and each other), I've put together a little list of changes I intend to make. The most important ME races are all covered, and things kind of fit. Any major issues can probably be written around when changing the script though.

Below are the ways I plan to convert each race for this mod. And check out the beautiful artwork ripped from the Starflight manual. They don't do game-art like this anymore!



The Mechan -> The Geth
This was the mos straight-forward of them all. Have one synthetic race, replace with another synthetic race. The Mechan are guarding the world of "Heaven" in SF, which I can easily replace with "Rannoch" (the old Geth homeworld). In SF, they are waiting for an old expedition to come and arrive, and are friendly with you if you claim to be a part of that expedition. With a bit of script-jigging, that can easily be changed to waiting for materials for their "megastructure", and convincing them that you were sent by Nazara (the reaper Sovereign). Easy, and relatively clean.


The Gazurtoid -> The Asari
 The Gazurtoid are described as "highly religious", and see themselves as "redeemers of the galaxy". The Asari are a highly spiritual race themselves, and while not "redeemers of the galaxy", this can be toned down. They were the first to inhabit the Citadel, and political leaders, so not too much of a stretch.



The Thrynn -> The Krogan
Much like the Mechan, the choice for the Thrynn was obvious. They are described as "Cunning reptiles not to be trusted". Which made me immediately think of the Krogan. In SF, you have to be friendly with them to stop them from attacking you. With the Krogan, being dominant is more likely to earn their respect, so that doesn't quite fit. But with a bit of hackery, I may be able to change that. The Thrynn will attack you almost immediately if you are friendly with Elowan, or have one on board. Given the genophage in ME, that made me think...


The Elowan -> The Salarians
Who would the Krogan hate more than Salarians, for unleashing the genophage! The Elowan are described as gentle & peaceful, which can match up quite nicely with the Salarians thoughtful, scientific nature. The Elowan are wary of the Thrynn, as the Thrynn eat their children - the delicious "headfruit". They won't communicate if a Thrynn is on board, or if you have been friendly with them recently. This can be seen as the Salarians being wary of the Krogan, as they strive for revenge for the genophage. I did think about having the Turians fill this role, but they don't really count as "gentle & peaceful". However...


The Spemin -> The Turians
The Spemin are an arrogant race, which can be tied into the Turians "warmonger" attitude - arrogance in their militaristic strength. They are also said to be knowledgeable of the other races in the galaxy, and considering the Turians have been part of the council for a long time, that should fit. They are more likely to respond to you if you go in threatening - which sounded right for a warlike race. This is a trait that fits closer with the Krogan, however... So I may have to replicate this code with the Thrynn somehow. Swapping the Turians for the Krogan won't work so well, as there is no bad-blood between Turians & Salarians, so it would make for having to change everything around. And 1 inconsistency is better than many!


The Veloxi -> The Volus
The Veloxi are an obsequious race, and highly knowledgeable of all the others. Which is very similar to the trading Volus - always polite to get a deal, and full of information from their galactic trading. The Veloxi are proud of their ties to the ancients in SF - but that can easily be written out for the Volus. Their information on the ancients is also somewhat incorrect in the game. And this can be easily rewritten as the Volus picking up rumours whilst trading - and rumours aren't always factually correct.


The Minstrels -> The Hanar
The Minstrels are a race of space faring poets, singing songs of history, the ancients and the universe. Change poet for preacher, and ancients for "Enkindlers" and you have the Hanar to a T. This one practically writes itself!




So that is how I plan to  change the SF races to those of ME. I've got all the main citadel races covered, but a few side races are missing (Elcor, Drell, Vorcha, Quarians, etc...). I may look at adding more, but I think that may be way beyond my skills. But due to the text-heavy nature of the game, I'm sure I can slip in some references to the others somewhere! If you have any clever ideas on how to convert the races that you find superior to mine, please let me know in the comments.

Now I've got a plan, it's just the HEFTY task of changing in-game text and graphics! If anybody is any good with pixel-art, and wants to help out, please let me know.

Wednesday 11 June 2014

Post-Break Graphical Tweak-Out

It's been a very busy year, but now I appear to have some free time once again, I've finally been able to continue on my project. After so long out of the loop, I've kind of forgotten where I was with it. So I've started small to remind myself of the code and, to a larger part, the tools I was using. Then I remembered I still don't have the perfect debug tools on my Linux box. Stupid regen, and stupid direct-memory-access.

After a bit of digging through my notes, I remembered how unhappy I was with parts of the starbase/menu system in game. Namely, the doors to the message centre and the trade depot. The trade depot was a quick fix, I tried to make the icon more obviously trade related, by incorporating some elements that are actually traded. So from the simple "hands and boxes" logo, I just added a "Cr" and "Au" to the boxes - representing credits and gold. It's still not great, but feel it's a bit better with the additional clue:-
The in-game font didn't fit into the boxes, so I had to freehand it - easy enough for a few pixels of text. But it got me to thinking about the actual in-game font... It is square, crisp, legible, and functional. But dull. And in a delusion of grandeur, I thought I could improve upon it. Ha! It is a an 8x8 font with a limited character set (capitals only, few special characters) - but it is outlined. Which not only shrinks the characters, but makes them more visible against any background. I tried around with some of the pre-made fonts from RHDN (again that resource saving my ass), but none of them rendered properly without the outline. They were either "thin" (is that right, typography nerds?), or they blended really badly into surrounding colours. At that point, I realized the outline was key in this games implementation. I tried crafting my own font, but that always broke something - kerning, readability, or just the stylistic "fit".

I wish I had some screenshots of my failures to show you, but it was a couple of hours of frustration, and I didn't have the foresight to save my experiments. Either way, I came to the conclusion that nothing is wrong with the standard font - and where it did fail, I couldn't improve without making huge changes to the code. Huge changes well past my skill set.

Back to the second door then. The original shows the logo of "INTERSTEL", the operators of Arth starbase and your mission.
This logo appears all over the place, so I am aware I will have to retool this logo in many places of the ROM - but as far as I remember, this is the smallest it's shown in game. And the most frequent. With that in mind, I tried to recreate the Systems Alliance logo from Mass Effect:-
[Apologies for resolution]
Due to the display resolution of the Mega Drive, rarely do you have many pixels to play with. And that globe in the middle will NEVER look good with my artistic skills recreating it! Especially on the door graphic. So I've taken an executive decision which will hopefully please Mass Effect fans too, and chosen to plaster the game with the logo of the Systems Alliance Navy:- 
 Not only is this twist on the logo easier to replicate given the limitations, it is within reason that the ship you command, and the Earth military starbase, would be under navy control. So hopefully this cop-out based on my artistic failings will still appease the Mass Effect purists who may happen upon it. I slipped through the ROM in TileLayerPro, and finally tracked it down at 0x880C2.
It's got a completely different aspect ratio to the logo I'd like to use, but there is some black space I can move down into, which I had to. The only issue with using the extra space at the bottom, was that it might not quite fit with the rest o the doors. But that wasn't too much of a problem, and it came out looking recognisable - which was my prime requirement. Overall I'm quite happy with the result.
Although the aspect ratio is a bit screwy, It works for me. Especially considering my artistic "skills". Next on the hit list is to recolour the player character, to make his spacesuit red & black, like Shepard's signature N7 armour. But that'll be saved for next time I want to hack some graphics!
 


I have also made some progress with the titlescreen improvements. Whilst browsing for the door graphics, I happened upon a few extra text characters - all the letters for the copyright blurb. Only one copy of each letter for the most part, and so jumbled I couldn't write anything by just replacing tiles. As I still haven't found the code that loads it all into VRAM, any big change would have to wait. So for a quick fix, which ended up looking very clean, I just blacked out all the letters:-
I also replced my "X" & "Y" filler tiles with tiles of noise from within a data section of the ROM. It looks enough like a natural glitch that I'm happy with it for now. I'll come back to it at some point I imagine, but it's a good placeholder. Hopefully I can fix it up, when I finally work out how to spy on the DMA writes to VRAM. But that'll be for another update.

Another update that will hopefully come a lot sooner!