I'm going to completely reorganize this absolute mess of a codebase.
First thing is to fix the names so that it's more obvious what files
they're defined in. Second thing is to move around some functions,
and rename some of the cpp and h files, to organize them better.
I'm doing these both at once.
I don't feel it's really necessary, and besides, it's annoying that
due to the way it's implemented it prevents you from doing anything
while it's shown.
I found it kind of odd to be able to manually save to the autosave
slot, *and* have no reliable way to even know what the autosave
slot is. I noticed that it's an actual problem when my brothers
played Starfighter; one of them used an autosave slot, and the
other unwittingly ended up erasing the first one's save because of
this. To fix this, I have replaced the behavior of allowing the
player to define a slot as autosave, with a dedicated autosave
slot.
While I was there, I had no choice but to vastly improve on this
game's *atrocious* menu system. Granted, I didn't do much more
than replace the magic numbers with enums, but it makes the code
much more clear and more easy to edit.
All gamepads I've come across work OK with button 2 or 3 as the primary
button, and button 1 or 4 as the secondary button. For the rest,
basically invariably, buttons 5 and 7 are the left shoulder buttons,
buttons 6 and 8 are the right shoulder buttons, button 9 is "Select"
or "Back", and button 10 is "Start". Based on this, I've changed
the gamepad controls to something that should work for most gamepads.
Also fixed some bad HTML in the documentation, and removed the
build instructions from there (they will soon be obsolete; I'm
working on replacing the hand-made Makefile with GNU Autoconf).
Using <SDL/SDL.h>, or in this case <SDL2/SDL.h>, and others like this
is not the proper way to include SDL headers. The proper way is to
pass the -lSDL2 flag to the compiler. The place I put it might be
awkward, but I'm planning to replace this hand-written makefile with
Autoconf/Automake scripts, anyway.
It's incredibly silly for it to be 10; what's the advantage of the
double homing missile launcher over the regular homing missile launcher
otherwise? It's just much slower and less versatile. Now it should
be slightly better, because you can effectively shoot 30 missiles
total, instead of just 20.
(Micro homing missiles are different; the advantage of having several
weak missiles instead of a smaller numer of strong missiles is
actually quite significant.)
There was a check that was supposed to prevent completing missions on
death, but it also prevented completing missions after an area was
finished. This was in particular a problem in interceptions, where
rescuing slaves after destroying interceptions didn't have any effect
on the slave rescue mission.
It was previously just ineffective. Now it's impossible.
The reason I'm doing this is when you *can* grind (in this case, by
constantly getting free plasma and selling it), it kind of feels
like an obligation to do so.
It's still possible to grind within missions whose progress depends
on your pace, which aren't timed and keep generating more enemies
until you win. Namely: the missile boat mission, the miner mission,
and the third boss. (There might be others.) However, grinding in
these situations is quite dangerous and likely to take away the much
larger shield bonus at the end, and plus if you mess up when trying
to do this you're set back quite a bit, so I think these are sufficiently
worthless activities that no one will do them. (I never did.)
A supercharge at this point can suddenly make bosses much easier
(especially the case with the Star Killer). This kind of takes away
the tension, so it's undesired. (It's fine for Easy difficulty,
because it's possible to take in a Supercharge from an earlier level
anyway.)
The original charge cannon is so overpowered it's ridiculous. The
strongest weapon in the game, unlimited ammo, and the only setback
it has is that you need to charge it a bit. The lack of balance
obsoletes the laser weapon, which is fine, but it also obsoletes
homing missile weapons, *including* ones that are newer and more
expensive than the charge cannon!
Now, it's much more balanced. You actually need to shoot the thing
before it hits max (or have your target in sight when it does),
rather than being able to just hold the button at max forever and
release when optimal like you previously could. Basically, the charge
cannon is still the weapon which does the most damage, but it's now
much harder to use. Incidentally, not only should homing missiles
be a sensible option now, even the laser cannon has a place after
the charge cannon becomes available.
In most cases, this has also resulted in limits being lifted. (The
only place I haven't done this is for planets in intermission.cpp,
but I think I'll take away that 10-planet limit as well.)
This is silly. I can see that someone decided to restrict targeting
to one ship as a difficulty setting, but that's not a very good way
to achieve different levels of difficulty.
Also added more music and slowed down RE.ogg.
So now, when currentGame.gamePlay is set to GAMEPLAY_ONPON:
- You start with 50 shield, and never gain any increased capacity.
- You can't charge the charge cannon and shoot at the same time; if
you shoot the plasma gun, the charge cannon shoots as well (as if
you had released the charge key).
I didn't add in the feature to keep the view from slowing you down,
because the method I used was imperfect anyway.
The source code contains routines to initialise all these resources, but also
functions to load from and store to external files. Support for external files
has now been removed; this removes a potential difference between compiling
with or without USEPAK, and makes it easier to change missions in the code.