General Changes (vs. Golden Axe Remake)

Optimizing:

Due to a large amount of new content, this module is larger and more demanding in general than the original. It also requires far more front loading. However, all practical optimizations have been applied, many that were not plausible when the original was made. This new version is thus quite a bit more compact and efficient “pound per pound” then its predecessor.

  • All new sprites are in .png format using maximum compression possible with Adobe Photoshop CS4. These are about 30% smaller on average then .gif counterparts.
  • Existing sprites for all characters have been replaced with .png, reducing size by about 150KB per character.
  • Through use of script and new palette capabilities, many superfluous sprites have been removed outright. For example, Red and Blue Dragons are no longer separate sprite sets, saving about 70KB per character.
  • Sound effects have been further trimmed to reduce their size.
  • Several loaded models have been eliminated by consolidation and script manipulation.

Presentation:

  • All in game sound effects are now played in location based stereo. If you KO someone on the right side of the screen and you have stereo speakers, you’ll hear their death scream from the right!
  • All stage music re-mastered with stereo, using OpenBOR’s recently added .ogg vorbis support.
  • Simulated transparency via blinking images has been replaced with true transparent motion trails.
  • Life bar replaced with blocks as in the arcade Golden Axe, with the added feature of individually changing color as they are depleted ala Altered Beast.
  • Nearly every single animation in the module has been tweaked for greater fluidity (fully animated idle stances, more precise timing, transitions for jumps/landings, additional frames for existing moves, etc.).
  • Dust effects added for jumping, landing, falls, slams, and so on.
  • Almost all particle effects have been retouched or replaced outright to take full advantage of OpenBOR’s transparency capabilities.
  • Entities stepping off a platform now assume their jump animation instead of “walking on air”.
  • Common enemy KO wails are randomized for variety, and all characters have far more extensive voice sets.
  • A multitude of new sounds have been added in general. As the battle rages, characters on both sides goad, shout their war slogans, call for aid, and so on. In addition, all “BOR” sounds used in the original remake have been replaced with samples taken from the real Golden Axe where a version existed.
  • Color correcting has been made on several characters whose palettes did not match their arcade counterparts (Amazon for example).
  • Player characters can now choose from several color schemes. Gillius for example, can choose between original arcade colors, either of the Gillis Rockhead color sets from Golden Axe Duel, or his colors from the Genesis port.

Gameplay:

General:

  • Bizzarians are now much more dangerous. While riding a bizzarian it is now possible to block, perform a wider array of grappling moves, and execute a more powerful version of the animal’s normal attack by holding and releasing the attack button. In addition, opponents being held by a bizzarian cannot immediately special out (it is still possible to escape, but only after a delay). Bizarians also have use of all the new movement options (lateral jumps, dashes, etc.)
  • A lot of minor adjustments for balance. Damage, move speed, and other aspects have been tweaked to try and make all characters/moves useful in their own way.
  • Overall difficulty increased to compensate for more powerful player characters.

Playable Characters:

  • Two new characters added: Alex the soldier and special guest Joe Musashi. These are not just random additions; their presence is explained in game and their mechanics are designed to be unique while still meshing appropriately with the three original heroes.
  • Vast array of new techniques have been added to each character’s individual move list. Most are direct takes or inspirations from moves seen throughout the Golden Axe series, but some are new or have new mechanics. Look for chain throws, long range attacks, and so on.
  • A variety of tag team moves are available, including tag team magic.
  • Characters are now more unique in relation to each other. As a few examples:
    • Tyris attacks are on the whole slower and weaker then Ax’s similar counterparts and she cannot withstand a large amount of damage. On the other hand she can control her magic level, possesses incredible agility, and has a few other surprises for unwary foes.
    • Ax has all around ability and can perform painful chain grabs for big damage.
    • Gilius has the most pedestrian move set, but is evasive as ever, soaks up tons of damage and deals it out in spades with the most powerful and longest reaching attacks.
    • Joe lacks melee range and his attacks require precise timing to land properly. Yet he has speed second to none, striking power on par with Ax, and a vast arsenal of tricks to call upon – inducing powerful magic and help from faithful dog Yamoto.
    • Alex is the weakest fighter in general, but he comes with some unique tricks and is good at supporting others.
  • All PCs except Tyris have a lateral “up” and “down” jump command. This allows you to move to a “higher” platform along the Z axis (Tyris only has the “up” version, as she can already move laterally while jumping).
  • All PCs have a back dash (A2 Button).
  • All PCs can dash laterally (UU or DD).
  • All PC’s have a specific charge attack move.

AI Controlled (NPC’s/Enemies)

All:

  • Can now get past obstacles and platforms along Z axis by jumping laterally onto or over them.
  • Can dash backward or laterally.
  • AI now has access to a Bizarian’s entire move list when riding; including all previous and newly added abilities.
  • No longer become less aggressive when riding Bizarians (in fact, they are usually more aggressive now).

Amazon:

  • More aggressive.
  • Can block, and will always do so if player attacks from the air.
  • Has counter throw move ala Geese Howard. She will use it whenever blocking an attack or as her breakaway special on any non grapple immune opponent.
  • Can toss her axe at distant opponents.
  • Lunges forward instead of “treadmilling” during melee attacks, giving them better visual appeal and even longer range.
  • Can grab opponents and perform a Neckbreaker slam or german suplex.
  • “Dark” version can teleport behind a player and grab them instantly.

Bug List

Known Bugs/Issues:

Major

  • Characters cannot use jump attack while holding left/right. 07122010 – Direction key check, and by extension disabling of other keys was for both hold & press. Removed hold check.
  • Ax’s Powerbomb and Gutbuster always KO opponent regardless of remaining HP. 07122020 – Copy and paste errors switched drop and damage properties.
  • Enemy life meter remains on screen after being KO’d by Ax’s Piledriver. 07122010 – Damage and bind release were occurring on same frame.
  • Thieves do not giggle when idle. 07122010 – Old sound command was still in place. Replaced with soun0005() function.
  • Meat carrying thieves are not remapping to green. 07122010 – Alternate palettes were typo’d as “palette”.
  • Bad sound reference: Error, soun0009; Sample: – data/sounds/punch3.wav, Model: amachick. 07152010 – Caused by remnants of older sound scripts. Removed and replaced with current system.
  • Amazon never performs axe throw. 08082010 – Was previously disabled for debugging and never re-enabled.
  • While in throw bind, character can hit enemies as well as allies. This appears to be an engine bug with projectilehit property, but needs thorough review.
  • Wall fail-safe and wall throws triggering when on top of wall/platform. 08072010 – Fixed by adding check for current base of self for wall alt and bound for fail-safe.
  • Alex’s bow shot causing shutdown. Error reports attempting to set animation for effe0002, even though projectile is effe0001. 08072010 – Caused by combination of backward compatibility in projectile function and new select screen burn effect. If model level projectile is defined, script function projectile() ignores its own model parameter and uses model level projectile instead. Fixed by moving burn effect entity from model level to animation level.

Minor

  • Sound system, soun0005() in particular works as designed but is extremely sub optimal with several loops and no sanity clauses.
  • Characters hit by attacks when in throw bind appear very briefly out of place. Not technically a bug. It is due to large offsetting difference caused by small sprites and the need to keep actual locations well above ground while visually near, on, or in it. Resolved.

To Do:

  • Add headband to Ax Battler’s portrait (so color selection is visible during game play screen).
  • Add sound effect when picking up magic jars and food.
  • Auto platform jump working on improper animations.
  • Upgrade grappling scripts to new index based type.
  • Fix alternate attacks against thieves.
  • Fix collision boxes for rise attack.
  • Second attack in attack string not hitting at very close range.
  • Add wall alts for grappling.
  • Upgrade weapon models to new standard.
  • Fix palettes to allow remapping.
  • Replace particle effects for magic.
  • Upgrade sound effects to new random based script type.
  • Add startframe and landframe to RUNATTACK.
  • Add grab alternate to special.
  • Replace flashing based shock and burn animations with remap + particle effect.
  • Add dust effect to jumps and landings.
  • Add jump grappling options.
  • Replace old forward throw with powerbomb.

String & Path

Encountered an issue with using default model name as path filler and once again attempted to find method for extracting model path at run time.

Due to limited string functions I recoded my own path return feature to exclude base name. Unfortunately this resulted in inconsistent returns. Path would be occasionally substituted with numbers or gibberish.

I think best solution is to restore path feature to previous functionality and add more robust string handling to OpenBOR. The *strrchr( const char *s,  int c) function in particular is a crippling omission that needs to be addressed.

C’s string functionally in general is really starting to get on my nerves. For such a common and powerful language, you would think simple string manipulation wouldn’t require so much hoop jumping and coding overhead.

Wall Fail-Safe

All working entities now ensure that throw victims are safely deposited outside of walls.

All working entities now ensure that throw victims are safely deposited outside of walls.

Wall fail-safe retrofit complete for following:

  • Amazon w/Chickenleg
  • Amazon w/Blue Dragon
  • Amazon w/Red Dragon
  • Amazon
  • Alex w/Chickenleg
  • Alex w/Blue Dragon
  • Alex w/Red Dragon
  • Alex

Considering addition of wall alternates for Amazon, Chickenleg and Dragon throws. For now will leave as is.

Alex

Alex fires his bow.

Alex now has all wall throw alternates complete.

Also gains ability to use a bow; ammunition is unlimited and up to three shots can be fired in series. Arrows inflict mild damage individually but cause normal attack stun, making it easy to pin down a single target. For balance, each successive shot results in cumulatively additional recovery time, so it is risky to use during solo play. Should add to Alex’s overall multiplayer oriented character design.

Bow is displayed using Alex’s bound effect model (motion blurs, etc.); fired arrow is part of the general effects entity.

Need to add wall shunting to Alex’s creature models; character should then be complete.

Wall Alternates

Wall throwing system complete. As I had hoped it was a simple adaption process from wall shunting. Actual function (ani0019_06012010) is almost embarrassingly simple, but does include code to accommodate expansion.

Can also be utilized by AI to take advantage of terrain in a manor similar to human players by intentionally throwing opponents toward stage hazards.

In the attached example animations, this body slam on open ground becomes a more elaborate and damaging maneuver in close quarters with walls or obstacle. Will need to retro fit existing grapple moves and include this feature in future works.

Update.c

Scripted HUD allows infinite design possibilities, but is processor intensive and requires careful update script coding.

Further refinements made to update.c script. Overall use of variables reduced and some variant retrieval moved out of nested secondary loops. A bit of general cleaning done as well.

Probably just micro optimization, but update.c’s two hundred per second execution frequency makes any trimming worth while.

update_05262010_1200
update_05272010_1416

Update.c optimizing, HUD, & wall shunting II

HUD generation no longer requires alternate weapon models to display correct icons.

HUD generation no longer requires alternate weapon models to display correct icons.

The mpicon icon concept was successful, albeit as iconmp. It is now possible for enemy and player versions of any character to use same weapon model. Fitted to Amazon, Longmoan, Bad Brothers, and Henninger models. Will fit to others during individual retooling.

Update.c optimizing, HUD, & wall shunting

Unique HUD elements seen are now generated by single loop.

Single pass optimizing successful in update script. Separate loops displaying HUD objects for players and enemies are now consolidated, with redundant code parsed into smaller functions. Had added benefit of only needing to check death status instead of “KO” palette for toggling enemy HUD display; dead enemies not yet configured with KO palette no longer clog HUD row. Now need to try mpicon in place of icon for enemy HUD icons. This is due to weapon models requiring their own icons. In addition player and enemy icon images are of differing size and style. Therefore a separate weapon model would be needed for player/enemy versions of every character, resulting in unacceptable levels of bloat and redundancy. Wall shunting also proved successful. When called, function bind0018 shunts binding entity away from wall if any bound entity is current within wall bounds. By calling just before bind release, this will prevent bound entities from being stuck inside wall or infinity juggled by wall bounce function. Main purpose is to make sure grapple moves deposit defender(s) outside of walled area. With some refining, could also be adapted to create specific wall based grapple moves. bind0018_05262010