Ray McDougal Sprite Set Improvement

Animation and sprite color upgrade complete for Ray McDougal. Several improvements were required, as this sprite set is being used as a generic thug. It is imperative to have quality color, animation, and attack technique variety since it will be seen repeatedly.

  1. Sprite set was procured from second game, Fighters History Dynamite. This sequel was missing several animations and had lower quality animation in general then the already sub-par original.
  2. Sprite set featured almost no color separation. Identical shades of blue used for shirt, gloves, pants and shoes. This combined with other shortcuts by original artists such as liberal application of #ffffff and #000000 made alternate palette creation nearly impossible.
    • Solution: Hand color entire sprite set (approximately 270 units) with individually dedicated colors for each portion of the sprite:

      Ray's base palette. All major sectors of the sprite now have dedicated color sets.

  3. Even with all animations combined from both games, animation was still lacking overall. In particular, attack recoils are simply the strike frames played in reverse. This is very jarring when seen next to more painstakingly created sets from other sources.
    • Solution: Combine hand drawing and franken-sprite techniques to create new frames for attack sequences. Most non attack sequences have satisfactory animation.

In addition to the above improvements, Ray also received a “rounding out” of available techniques. Effectively he is now a complete player character with weaker statistics. This is really somewhat overboard given the large number of basic moves available to players, but again as Ray will be seen quite often, I believe he should have a wide array of abilities and tactics to avoid repetition.

Owing to most of the work requiring hand drawing, the total time needed was just over a month. I am pleased with the results however. This should make an effective generic thug to oppose the players without boring them.

Ray combo I

Ray's basic far and close attack chain pre improvement.

Ray McDougal basic attack chain as of 02092011.

Ray's basic far and close attack chains as of 02092011.

Work Log

This is a general work log for my Fatal Fury Chronicles module project. The goal is to replicate game play elements found within SNK’s Fatal Fury series in a side scrolling Final Fight style environment, while presenting the back story in a more cohesive layout. At the start of this log (11292010) the module is in a playable beta state.

11292010

  • Start of work log.
  • Project back under way after being idle for approximately one year.
  • Resolved issue of crashing instantly during menu on newer revisions. Issue turned out to be nothing more then a leftover configuration save file. Module is in beta status; it has one fully playable stage and one test area, but I would like to add more content before releasing any kind of demo.

11302010

  • Andy Bogard now uses randomized sound effect system. See soun0005() function.

12012010

  • Merge old MS Word based work log.

12022010

  • Andy Bogard model scripts converted to latest convention.
  • Terry Bogard model scripts converted to latest convention.
  • AI Ray McDougal model scripts converted to latest convention.
  • Bug fixes.

12032010

  • Cut JUMPDELAY from 18 to 8; too much of a pause before jump executes.
  • Parked cruisers in Sound Beach stage now catch fire immediately when damaged (previously not until destroyed) and sink with scripted velocities instead of offset/base manipulation.

12052010

  • Added entity verify to draw0001(). Previously it would cause immediate shutdown if called on non existent entity.
  • Andy Bogard & Raiden sprite files converted to nameless serial convention.
  • Bug fixes.

12062010

  • All models and sprites in data/misc/effects updated to serial name convention.

12072010

  • Function bind0010() merged from Golden Axe Hackjob.
  • Function dama0004() merged from Golden Axe Hackjob.
  • All models and sprites in data/misc/flash updated to serial name convention, cataloged in master sprite database and moved to data/misc/effects.
  • All models and sprites in data/misc/dust updated to serial name convention, cataloged in master sprite database and moved to data/misc/effects.

12082010

  • Terry Bogard and Ray sprites updated to nameless serial convention. This completes update of all primary models to date.
  • Latest draw0001() and it’s support functions now use target’s current alpha setting instead of an entity var to get and store the blend parameter. Exact same functionality, but with one less wasted variable and one less script parameter to worry about initializing when entities are spawned. I should have spotted it two years ago.
  • Flashes use MP as a sound constant in place of if/list based on alias.
  • Flashes use Nodrop property as random rotation range.
  • All previously uncatalogued sounds removed from main sound folder. Model specific sounds moved to their respective owners still need cataloging.

12092010

  • Script removal. Several spawn scripts are no longer needed; they basically performed the same function with minor differences. Their functionality is now consolidated into spaw0002.c with sound cataloging and free variable application.
    • spaw0003.c
    • spaw0006.c
    • spaw0007.c
    • spaw0008.c
    • spaw0009.c
  • Ray and Raiden’s sounds cataloged. Both still need sound calls upgraded to soun0005.c function.
  • Flash spawning function created (bind0022()).

12102010

  • Flash spawning fully integrated. Required new functions (summ0002() and bind0023) see below.
  • New function: summ0002(void <vEnt> char <cModel> char <cAlias> int <iMap> int <iBlend> int <iX> int <iY> int <iZ> int <iDir> int <iAni> int <iFrame> int <iKill>)

    • Spawns an entity (usually a flash) by name unless <vEnt> has a custom flash defined by the flash model header command, in which case the defined custom flash will be spawned. Location is screen based.
  • New function: bind0023(void <vTarget> char <cModel> char <cAlias> int <iMap> int <iBlend> float <fAX> float <fAY> int <iAZ> int <iDir> int <iAni> int <iFrame> int <iKill>)
    • Spawns an entity (usually a flash) by name and binds to location of <vEnt>. If <vEnt> has a custom flash defined by the flash model header command, the defined custom flash will be spawned instead.
  • Adjusted block push back (bloc0002(), called in z_hit.c). Previously multiple incoming hits could force the blocking character a ridiculous distance across screen.
  • Merging bind0010() functionality:
    • Andy Bogard
      • Grabbackward
      • Grabforward

12132010

  • Imported key0006() from Golden Axe Hackjob and finished updating keyall.c to latest standard. Had missed these earlier; debu0001() cannot work without them.
  • Added font3.png (it’s a copy of font2 for now). Not normally needed in game, but is used by debu0001().
  • Removed final frame from Andy Bogard’s taunts. Idle animations already include transition frames.

12142010

  • Further progress for “bind to target” capability in bind0010(). Only needs velocity application.

12152010

  • debu0001() now includes ability to toggle autozoom from draw0001().
  • key0006() given new parameter <fQnt>. Allows increments/decrements by specified quantity instead of static 1.
  • bind0010() modes rearranged (in progress). See function.

12162010

  • New function: ani0012(void <ent>, int <iH>, int <iFrame>)
    • Skips to <iFrame> if target’s Y axis position is <= <iH>. Allows jump animations to adapt to variable height (i.e. don’t start a full somersault during a short hop).

12172010

  • Taunt/Poses now mapped to Special + Attack + (optional) Direction instead of Pose + (optional) Direction. This cuts action keys back to Attack, Jump, Special, and Backstep. A fifth action key dedicated to poses just seemed cumbersome and didn’t mesh well with the overall control scheme.
  • bind0010() modifications complete. Now accommodates binding based on attacker or defender’s location and automatic adjustments to deal with larger/smaller characters without switching animations.

12182010

  • Separated Work Log from Bug List/Notes. It was getting unwieldy to sift through, and separation will also allow tabbing between “to do” and current progress rather then scrolling. The Bug List/Notes article will probably need breaking down later as well.
  • Updated dama0002() function:
    • Grapple binds are now released correctly when taking damage.
  • Updated pain0001() function:
    • Hit level animation switching now verifies alternate pain animation before applying.
    • Application of hit effects. See effe0001() function.
  • Updated fall0001() function:
    • Hit level animation switching now verifies alternate fall animation before applying.
    • Individual checks broken down to separate if calls for readability.

12192010

  • Updated kill0001() function.
    • draw0001() no longer called to reset parent map for effect models (not needed as draw0001() is not used for standard mapping).
    • Entity variable cleaning code replaced with vars0001() function.
  • Updated spaw0002() function.
    • Entity variable cleaning code was missing. Replaced with vars0001() function. Shouldn’t be needed since cleaning is done on entity removal by kill0001(), but adding it anyway in case an unforeseen engine glitch does not allow kill0001() to finish.
    • Random name code replaced with name0001() function (function is identical to original name code).
  • Updated fall0001() function:
    • Application of hit effects. See effe0001() function.
  • Adjusted Ray’s Burn animheight accommodate burn effect.
  • Added SPAIN and SHOCK animation to Ray; shock effect works as designed.
  • On death fatality adjustments in progress. Is komap setting open to script?

12232010

  • New function: draw0006(void <vEnt> void <vMatch>)
    • Enables matching of draw scale between two entities using their height settings. Replaces the “quick and dirty fix” that was in kill0001() for almost two years. Previously the fatality model spawned on burn death was given a static size adjustment of 75% as its sprites were over sized; the adjustment is now automated. An obvious added benefit is that it will also self adjust to match abnormally sized characters with any further amendments.
  • Replaced burn fatality sequence with ball explosion and Komap switching. See kill0001(). A better solution would be to turn Komap off, but due to the engine’s layout this is not yet possible. An engine modification is needed to fix this issue long term, but in game everything works as needed.
    • Look into using hmap property; if available to script, will remove need for static map constant when resetting Komap.
      • 12262010 – property open to script and can be used to replace static map constant as described.

12242010

  • For whatever reason stupidity on my part jump0005() function was embedded in z_movez.h. Function moved to its own file.

12252010

  • Setting for komap in deat0001() now uses hmapl property in place of MAPX constant.
  • Function soun0003() (random KO sounds) removed. Functionality long since replaced by soun0005() and numeric based sound cataloging.

12262010

  • Variables iRemap and iAlpha removed from draw0001() function. There is no need for them as the passing -1 to either as a parameter in setdrawmethod() allows target entity to use its own property setting. Previously setdrawmethod() would override entity’s map and alpha properties, meaning they had to be adjusted through draw0001().
  • New function: targ0002(void <vEnt> int <iAni> int <iType> int <iSType> int <iTD>)
    • Find nearest entity within range of a base entity’s animation range setting that matches type, subtype and throwdamage parameters. Intended use is to replace item based music change and similar Easter eggs, but is useful for finding any specific entity not otherwise detectable with global findtarget() function.
    • Step 1 for replacing item based music switching; detects when user presses key in close proximity to music switching trigger obstacle.
  • Script removal:
    • dust0001.h
      • Was a name based spawn function only used by Sound Beach cruiser to spawn water splash. Water splash can be replicated by another function. General use for script has otherwise long since been replaced by my dust model header additions.
    • dust0002.h
      • Similar to dust0001.h but with numerous parameters added. Functionality similarly replaced by recent additions to engine’s default dust system and was not in use at all.

12282010

  • Andy Bogard’s palette sprites moved to <char>/pals folder and converted to nameless serial. Palette 0015 (black) retouched to match KOF2000.
  • New function: file0001(int <iVar> char <cFile> char <cRow> int <iColumn>)
    • Wrapper for basic text file reading; finds row by text passed through <cRow> and returns value located at column number <iColumn>.
    • Step 2 for replacing item based music switching. Will locate music by by being passed music switch obstacle’s <aggression> value. Desired column will be passed as looping numeric cycle (not complete at this time).

12292010

  • New function: musi0001(void <vEnt> int <iNotch>)
    • Locates text file argument by using target entity’s aggression setting as row search and nodrop as column number. Argument is passed to global playmusic() command and <iNotch> is added to nodrop setting to determine column selected next time function is called on target entity. This allows use of obstacle as an interactive switch in general instead of music only. Furthermore, as aggression is a spawn parameter, the same item can be used for multiple sets of music with no modifications, variables, or additional scripts. Additionally, soun0005() is activated on use, passing the obstacle’s maximum health as sound group. In the same manor as aggression setting, adjusting the heath spawn parameter allows choice of sound effect group without any adjustments to model/scripts.
    • Step 3 for replacing item based music switching; will be added to global keyall.c script.
  • New entity: data/chars/misc/pickups/swit0001
    • Is an inert obstacle made to replace item based music switching and other types of stage interactivity as noted above.
  • Sound effects 100_0 and 100_1 (both are radio tuning sound effects) added, and moved to /swit0001/sounds folder.
  • Music switching upgrade complete.

12312010

  • New script: z_datk
    • Called by most entities as their ondoattack script.
  • Script updates:
    • parr0001:
      • Retool in progress to take advantage of engine features available as of version 2.955.
        • Parry animation.
        • Air Parry animation.
        • Pause for Defender and Attacker
        • Switch direction to face Attacker.
        • 30% MP recovery for Defender.
        • Engine default collision disabled.
      • Remaining:
        • Parry flash.

          • 01012011
        • On screen alert?
        • Adjust timing threshold for parry command? Current timing of 0.3 seconds seems too easy at the moment, but test was in controlled environment with single opponent using a predictable attack.

          • 01012011
  • Raiden:
    • Added Drop Kick.

01012011

  • New Entities:
    • bflash: Block flash.
    • pflash: Parry flash.
    • fflash: Fire flash.
    • eflash: Electric flash.
    • iflash: Indirect flash.
  • All flash models now located in folder data/chars/misc/effects/models/flash.
  • Script updates:
    • parr0001:
      • Parry flash.
      • Check for state (can’t be in pain or blockstun).
      • Command mapping finalized: Press Special within 0.3 seconds or less before incoming attack makes contact.
      • On screen prompt?
  • Ray:
    • Old sound calls replaced with soun0005(). Now fully upgraded to self cataloging random sound system.
    • Aggression speed increased from 130 to 0.
    • Shock fatality.
  • Andy Bogard:
    • Minor bbox correcting in BLOCK animation.

01022011

  • Andy Bogard
    • Additional voice effects.
      • 3_0
      • 3_1
      • 3_2
      • 7_4
      • 26_2
      • 27_1
      • 28_2
      • 28_2
      • 103_1 (Geki Hishoken 2)
      • 111_0 (“hatz”)

01032011

  • Andy Bogard
    • Additional voice effects:
      • 110_1 (Zaneiken 2)
      • 112_0 (“zan”)
      • 113_0 (Speaking to Tung Fu Rue)
      • 114_0 (“Master Tung”)
      • 115_0 (“Geese”)
      • 116_0 (“san”)
      • 117_0 (Max attack unleash)
  • New entities:
    • Hyper sparks:
      • Hyper sparks separated back into individual models. Previously a single model (paus0001) contained animations and palettes for all hyper effects. The idea was to reduce memory consumption. While text files are minimal, each model loads its own copy of any given script. However, by separating each into their own models, the sound cataloging system can be implemented in the same manor as normal models (less confusion). Furthermore, this eliminates need for animation scripts within the hyper spark models; only a one time spawn script is needed. The overall result will be slightly greater memory consumption, but with better run time performance. The latter is of greater concern as this module will not run on a memory shy platform anyway due to sheer quantity of animation.
        • hype0001
        • hype0002
        • hype0003
  • New sound files:
    • /hype0001/11_0
    • /hype0002/11_0
    • /hype0003/11_0

01062011

  • Revamp of projectile system in progress to take advantage of ondoattackscript:
    • Projectile models are to be separated back into individual models (previously they were combined, see hyper sparks in 01032011 entry).
    • Current projectile function proj0002 to be greatly simplified, it currently requires 33 parameters.
    • Addition of numeric indexed global vars (see grapple binding) to track all projectiles?
    • Engine modification:
      • Script access to throwframewait property. It is another excellent candidate for Free Variable use.
      • Script access to custom attack flash. Will greatly simplify and improve efficiency of spawning custom flash entities.

01112011

  • New function: debu0002 void <vEnt>
    • Uses script access of attack/bbox properties to display collision boxes during gameplay.
    • Includes temporary sub function shap0001() to perform draw actions.
  • Model updates:
    • Andy Bogard:
      • Updated collision boxes using new debug capability for following animations:
        • attack2
        • attack3
        • attack4
        • attack5
        • attack6
        • attack7
        • attackbackward
        • attackdown
        • attackup
        • block
        • blockpain
        • blockpain3
        • blockpain4
        • bpain
        • burn
        • cant
        • charge
        • chargeattack
        • death
        • duck
        • faint
        • fall
        • fall3
        • fall5
        • fall6
        • fall7
        • fall8
        • fall9
        • follow1
        • follow4
        • follow5
        • follow6
        • follow7 (switched to editor)
        • follow70
        • follow71
        • follow72
        • follow8
        • follow80
        • follow81
        • follow82
        • follow83
        • follow84 (Sidestep Up attack)
        • follow85
        • follow86
        • follow87
        • follow88 (check purpose)
        • follow89
        • follow92
        • forwardjump
        • freespecial
      • Consolidated death animations; removal of following:
        • death11
        • death6
        • death7
        • deaht8
      • Counter block impact remnant removal (long since replaced with dodge and parry).
        • follow2
      • Tall target alternate for Shiranui Spider Clutch removed. Updated bind allows auto adjusting to opponent’s height.
        • follow3

01122011

  • Model updates:
    • Andy Bogard:
      • Updated collision boxes using new debug capability for following animations:
        • freespecial10  (Shoryudan) *LF
        • freespecial12 (Zaneiken)
        • freespecial13 (Shippu Oken)
        • freespecial14 (Gen’ei Shiranui)
        • freespecial15 (Gen’ei Shiranui – Shimo Agito)
        • freespecial16 (Gen’ei Shiranui – Uwa Agito)
        • freespecial17 (Yami Abse Geri)
        • freespecial18 (Cho Reppa Dan)
        • freespecial19 (Bakushin)
        • freespecial2 (Plane Force Up)
        • freespecial21(Ku Bakushin)
        • freespecial3 (Plane force Down)
        • freespecial4 (Plane shift attack up)
        • freespecial40 (Low Step Attack)
        • freespecial41 (Low Dash Attack)
        • freespecial42 (Low Step Attack II – Low side kick)
        • freespecial43 (Low Step Attack III – Low palm strike)
        • freespecial5 (Plane shift attack Down)
        • freespecial6 (Hishoken)
        • freespecial7 (Geki Hishoken)
        • freespecial8 (Ku Ha Dan)
        • freespecial9 (Zaneiken)
        • get
        • grab
        • grabattack
        • grabattack2
        • grabbed
        • grabup
        • idle
        • idle2
        • idle3
        • idle4
        • jump
        • jumpattack
        • jumpsttack2
        • jumpsttack3
        • jumpdelay
        • jumpforward
        • jumpland
      • Low Dash Attack is now shoulder ram. Old low dash attack (a lunging low palm strike) will be used for SDM attack.

01132011

  • Model updates:
    • Andy Bogard:
      • Updated collision boxes using new debug capability for following animations:
        • pain
        • pain2
        • run
        • runattack
        • runjump
        • runjumpattack
        • runslide
        • slide
        • special2
        • walk
      • Sidesteps now have invincible start up.
    • Ray
      • Updated collision boxes using new debug capability for following animations:
        • attack1
        • attack2
        • attack3
        • attack4
        • attackbackward
        • attackdown
        • attackup
        • blockpain
        • blokcpain2
        • blockpain3
        • blockpain4
        • bpain
        • burn
        • chargeattack (wheel kick)
        • fall
        • fall2
        • fall3
        • fall5
        • fall8
        • fall9
        • slide
      • Renamed follow40 to Slide.

01172011

  • Color separation in progress for Ray model. Original model used 16 color sprites with white as a highlight and inappropriate color sharing. New color layout provides 64 colors, separated into individual groups for hair, skin, shirt, pants, gloves and shoes.
    • Complete:
      • aapa0000
      • aapa0011
      • 0001 through 0035

02092011

Notes & Bug List

This is a general work log for my Fatal Fury Chronicles module project. The goal is to replicate game play elements found within SNK’s Fatal Fury series in a side scrolling Final Fight style environment, while presenting the back story in a more cohesive layout then the original. At the start of this log (11292010) the module is in a playable beta state.

Known Bugs/Issues:

Major

  • Andy Bogard’s shadow trails are not palette matched during certain jump frames. This means sprite set as a whole needs re mastering to synchronize palette.
    • 11302010 – All palettes are correct. Problem seems to be specific sprites are corrupted:
      • 0044
      • 0045
      • 0046
      • 0171
      • 0174
      • 0176
      • 0177
      • 0180
      • 0181
      • 0182
      • 0240
    • 12022010 – Fixed itself. After a year and numerous failed attempts on my part. Go figure.
  • As of OpenBOR revision 2717 the reactive command has been removed due to bugs. This means music changing item in Sound Beach stage is now consumed on use. Possible solution is to replace with inert obstacle that triggers animation and music change via keyscript and proximity.

    • 12292010 – Sound switching now based on keyscript according to proximity to obstacle matching certain parameters. See keyall.c and musi0001() function.
  • Andy Bogard’s Bakushin visual flash has incorrect palette and does not disappear if Andy is interrupted during pose.
    • 12052010 – Updated palette parameter. Failure to disappear and release defender on interrupt is result of a singular script binding Andy to defender. It is a temporary solution that will be replaced by complete throw system from Golden Axe Hackjob.
  • Andy Bogard’s Hishoken caused instant shutdown on hit.
    • 12052010 – Caused by removal of superfluous characters and execution of draw0001(). Andy did not have load command for proj0001. When called, projectile was not spawned since its model had not loaded. When draw0001() was subsequently called on non existent model, the use of setdrawmethod() produced error and shutdown. Fixed by verifying entity in draw0001() and adding load command for proj0001() to Andy.
  • Missing back dash animation for Terry Bogard is causing shutdown. Obviously needs animation added, but also need to roll in newest ani0009 to module; this will verify a given animation before applying it and avoid unexpected shutdowns.
    • 12052010 – Missing animation was actually for “power up”, and added to key script for testing. All known animations intended for game play use have verifying script. Testing line removed.
  • Entities are not getting up more quickly when attacked while down.
    • 12022010 – Staydown values had been adjusted out of playable bounds for testing. Readjusted.
  • Nearly every core script has been updated and/or simplified during Golden Axe Remake project. These scripts need merging to Fatal Fury; will be a difficult undertaking to fundamental differences in modules but ease development in the long run.
    • Use of KO Map feature (reduce variables).
      • 12192010
    • Retrieve and apply default color map without storing it in a variable.
      • 12192010
    • Verifying any animation before application.
      • 12052010
    • Debug system.
      • 12132010
    • Group based random sound effects.
      • 12092010 – Some models still need adapting, but scripts are imported and all sound files cataloged.
    • Grappling system:
  • Lateral auto zoom not working on playable Ray.
    • 12182010 – Playable Ray removed. May be added later using model swapping.
  • Parry system is completely broken. Needs re tooling.
  • Sound Beach stage needs editing at start; palm trees and house appear cut off.
    • 12022010 – Added palm frocks and shorted trunks.

Minor

NA

To Do:

  • Add How To Play images.
  • Remaster music to .ogg format.
  • Random personalities for AI characters.
  • Fatalities
    • Pit.
    • Collapse (normal).
    • Sound Beach Stage.
    • Mr. T.
    • Acid.
    • Shock.
    • Bleed out.
    • Bisect.
    • Decapitation.
    • Incineration
  • Spawn system needs parameters
    • Victory animations.
    • Taunt animations.
    • Others, general.
  • Add Block/Parry flash.
  • Random names
  • Shake effect during grab.
  • Character Specific
    • Andy Bogard
      • Portrait fix.
      • Zaneiken causing instant shutdown.
        • 12022010 -Energycost script property now includes a {parameter} setting. Adding setting.
      • Team attacks
      • Zanei’ Reppa Super
      • Roll, running roll, and rolling attacks.
      • Spider clutch throw needs retuning.
      • Instant shutdown when Cho Reppa Dan KOs opponent.
      • Swept animation.
      • Add dust to CHARGEATTACK animation.
      • Bakushin (“facebomb”) throw, with alternate if opponent is in air.
        • 12012010 – Using wrong voice effect. Visual flash palette incorrect.
    • Ray McDougal
      • Spawn Animations
      • Land sound
        • Covered by land flash
      • Voices.
        • 12012010 – Voices work, but need adapting to latest sound system.
    • Raiden
      • Finish move set.
    • Terry Bogard
      • Finish move set.
      • Rising Tackle causes engine shutdown.
        • 12022010 -Energycost script property now includes a {parameter} setting. Adding setting.
      • Team attacks.
  • Need heavy ground impact flash.
  • Scripts failing after repetitions. Memory leak?
  • Special effects moved to onpain script, need attachment to onfall script as well.
  • Stage Specific
    • Sound Beach
      • Estrada Music item needs longer offscreenkill setting.
      • Sinking boat needs initial sound effect.
      • Panels killed due to lack of offscreenkill setting.
      • Gradual time based sunset should be slower.
      • Boats have too many hit points. Needs destruction animation and prize for doing so.
  • Lasthit x/y/z values are not erased until next real hit. This occasionally messes up throws. Need to add check.
  • Special effects (beams, flame, etc.) are not being zoomed by Z axis on spawn.
  • Proximity hit system needs completing with addition of normal/low/medium/high override support.
  • Add “bounce effect” to screen and obstacles.
  • Flash and dust entities occasionally lock in animation. This is an engine bug; add lifespan as a fail-safe.
  • Finish Taunting system.
    • 12012010 – Complete? Original log is marked finished, but I don’t recall doing so. Need to check.
    • Taunting refers to taunting poses, not special effects on opponents. Taunting pose system is in fact completed and only needs the prerequisite animations for playable characters.
  • CHARGEATTACK animation is canceled by alternate idle system. Possible solution would be script access to chargetime.
  • Some special effects no longer use correct remap after 12062010 update to serial name convention. Palette parameters need updating.
  • Create flash spawn function. Currently flash effects during grappling are spawned by generic spawn function. This works, but is somewhat ungainly and does not support custom flash effects certain defenders may use when taking hits.
    • 12092010 – Created bind0022() function.

Work Log:

  • 12182010 – Moved here.

Notes:

Hit Effects (as of 12012010, new system from GA should be merged)

  1. Defender’s onpain & onfall scripts evaluate incoming attack type and any self immunity. If effect is needed, effect function is called. Note this is done here instead of in the takedamage script to accommodate animation forced binding. While takedamage is running, the defender has not yet assumed reactive animation, and effect entity would be killed instantly upon spawn.
  2. Effect function checks BINDHE variable on defender for a previously bound effect entity.
  3. If an effect entity is found in step 2, and is a different model then what would be spawned in step 5, then it is killed.
  4. If an effect is found, but is the same as what would be spawned in step 5, nothing is done and the effect function exits immediately. This prevents pointless spawning/killing and also maintains smooth animation of the effect.
  5. A new effect entity is spawned and bound to caller.
  6. Effect entity’s onkill script clears the defender’s BINDHE variable.

Projectile handling (from old log and script comments. Probably needs separate article):

Default engine projectiles are extreamly limited. Projectiles are therefore scripted to allow following:

  • Single entity acting as different projectiles.
  • All types (enemy, NPC, player, etc) sharing the same projectile command/entity.
  • Projectiles clash and both are destroyed.
  • Projectiles clash and one simply smashes through the other.
  • Projectiles clash and one overpowers the other but is weakened.
  • Projectile is stopped with normal attack.
  • Projectile is hit by normal attack but is not affected.
  • Stationary projectiles/blasts (ex: Andy’s Geki Hishoken).
  • Any combination of the above.
  1. Projectile is obstacle type. It can take hits but is immune to damage. This allows the themselves projectiles be hit, and have the result scripted based on particular needs.
  2. Animation and map is set at spawn. This means a single entity can be used for as many different projectiles as there are maps available.
  3. Candamage is set at spawn. This allows interchangeability between firing of projectile from player, enemy, npc, etc.
  4. Projectile attack box is “no reflect”, “no pause”, “no flash”, and “no damage”. This means unless a reaction is scripted, a hit detection will have virtually no effect.

Directly from script comments:

/*

Since the defender is an obstacle with MP, then it must be another projectile. To simulate projectile priority, we’ll use MP as a free variable.

When two projectiles collide, both must have 2 or more MP, else they will both be unaffected. Otherwise the one with lower MP looses 1HP for each point

of difference. If MP is equal, both take the equal MP amount as HP damage.

0 MP = Only true obstacles have 0 MP.

1 MP = Intangible and has no effect/does not affect other projectiles.

2+MP = Compare. If equal, both take the full MP as HP damage. Otherwise, looser

takes the difference.

Some examples of how to apply this system:

1. Flame (I) vs. Knife (II):

I   = 1MP, 2HP.

II  = 1MP, 1HP.

I & II collide. Both have 1MP, so neither takes any damage from the other.

In Game: A light knife meets a wave of fire, but the fire is immaterial and

so they simply pass through each other.

2. Hadouken (I) vs. Knife (II):

I   = 2MP, 2HP.

II  = 3MP, 3HP.

I & II collide. II has 1 more MP, so I looses the difference (1HP) and is destroyed. II is unaffected.

In Game: A light knife is no match for the Hadouken and gets

knocked cleanly aside while the Hadouken continues unscathed.

3. Hadouken (I) vs. Hadouken (II):

I   = 3MP, 3HP.

II  = 3MP, 3HP.

I & II collide. MP is equal, so both loose 3HP and are destroyed.

In Game: Classic projectile war. Hadoukens hit and negate each other.

4. Hadouken (I) vs. Shinku Hadouken (II):

I   = 3MP, 3HP.

II  = 3MP, 15HP.

I & II collide. MP is equal so both loose 3HP. I is destroyed, II continues

and may withstand 4 more similar collisions.

In Game: Ryu blasts through several enemy projectils with his Shinku Hadouken. It

plows over 4 lesser projectiles and negates head to head with a 5th.

5. Geki Hishoken (I) vs. Hadouken (II):

I   = 20MP, 1000HP

II  = 3MP,  3HP

I & II collide. I has greater MP by 17, so II looses 17HP and is destroyed. I is unaffected.

In Game: Andy’s short range energy attack is effectivly non negatable and easily stops most normal

projectiles while still hitting anyone nearby.

6. Geki Hishoken (I) vs. Haohshokoken (II):

I   = 15MP, 1000HP

II  = 20MP, 20HP

I & II collide. II has greater MP by 5, so I looses 5HP. I easily withstands the loss. II is unaffected.

In Game: Ryo’s Haohshoken and Andy’s Geki Hishoken hit each other with almost no effect. Both

continue unhindered; Andy is almost certain to be hit, but Ryo could be hit as well if he was

close enough to Andy.

7. Haohshokoken (I) vs. Haohshokoken (II):

I   = 20MP, 20HP

II  = 20MP, 20MP

I & II collide. MP is equal, so both loose 20HP. Both are destroyed.

In Game: One Haohshokoken projectile meets another. While both are capable

of overpowering and eliminating most other projectiles, they negate each other.

*/

Attack type handling:

Hit reactions are set using a combination of script and attack type.

  1. When attack hits but does not kill opponent, the appropriate reaction script (onblock/onpain/onfall) will reset the defender’s reaction based on the Y coordinate of impact (see pain/fall in chart) to visually represent an accurate reaction from hit location (face, gut, feet, etc.).
  2. Y coordinate can be overridden with a hitflag (see didhitscript) if desired.
  3. If the attack KOs defender, attack type determines default fatality animation. The resulting fatality may be modified based on Y coordinate, the stage, character and other conditions. See ondeathscript.
  4. Exceptions are attack 6+. If 6 or 7 cause a fall without killing defender, the defender’s animation is NOT reset. This is because resetting a defender’s fall animation does not change the rise type that will be used, and it would be undesirable to change the actual attack type.
  5. 8+ are for special purposes and not used under normal conditions.
Type Pain Fall Death Block Reset to this type (pain/fall/block) condition: Notes
Default: Normal Normal Normal Normal None (default). Bludgeoning (hand to hand, clubs, sword hilts, etc.)
Attack 2 Middle Collapse Bleed out Middle Hit up to 75% of height. Piercing (daggers, arrows, thrown weapons, etc.)
Attack 3 Low Sweep Bisect Low Hit below 30% of height and standing. Slashing (swords, claws, saw blades, etc.)
Attack 4 High Normal Decapitation High Hit 75%+ of height and attacker is airborne.
Attack 5 Normal Flip over end (thrown) Normal
Attack 6 Spin or flip Background fatality
Attack 7 Spin or flip Mr. T fatality
Attack 8 Normal Slammed on head Normal
Attack 9
Attack 10
Shock Shocked Shock Explode Normal
Burn Burned Immolated Incinerated Normal

Sound List (12012010 – no longer relevant due to numeric based sound system; sounds are in conversion process to new naming convention)

Sound List
Generic Sounds
Sound001 Horse Gallop.
Sound002 Soft thump (jump landing).
Sound003 High beep.
Sound004 Electronic “selected” sound.
Sound005 Echo slide (Hanzou slide).
Sound007 Revenge of Shinobi box break.
Sound008 Lighting strike.
Sound009 Liquid spray.
Sound010 NGBC super move start.
Sound011 Blade launch (Hanzou Rekkozan).
Sound012 Loud “raspy” whoosh sound.
Sound013 Electrocution.
Sound014 “Warp/blade”.
Sound015 Fire burst.
Sound016 WH head butt.
Sound018 WH Body Whoosh.
Sound019 Multiple wiffs.
Sound020 Street Fighter 3 super burst.
Sound023 Water splash.
Sound024 Heavy metal klunk.
Sound025 Hydraulic press/drill.
soun0001 Fatal Fury 1 fall land.
soun0002 Fatal Fury 1 jump.
soun0003 Fatal Fury 1 coin.
soun0004 Fatal Fury 1 hit.
soun0005 BOR bike.
soun0006 Fatal Fury 1 block.
soun0007 SOR “gulp” food pick up.
soun0008 SOR indirect hit.
soun0009 Fatal Fury 1 confirmation.
soun0010 World Heroes jump land.
soun0011 WH choke.
soun0012 Bone snap.
soun0013 SF3 Hard ground impact.
soun0014 World Heroes’ hard ground impact.
soun0015 Real Bout maximum power strike.
soun0016 Real Bout multi pitch power up.
soun0017 KOF “catch”/hand clasp.
Assorted Voices
Voic001 DD2 Burnov laugh.
Voic002 DD2 evil double laugh.
Voic003 Female long alto yell (Kasumi high jump).
Voic004 Female short alto yell (Kasumi short jump).
Voic005 Canine growl 1.
Voic006 Canine growl 2.
Voic007 Canine bark 1.
Voic008 Canine howl 1.
Voic009 Horse neigh1.
Voic010 Horse neigh 2.
Voic011 Canine howl 2.
Voic012 Horse neigh 3.
Voic013 Joe Muashi yell with flame burst sound.
Voic035 KOF Yamazaki Snake Hand
Voic036 DD2 Abore Shoulder attack.
Voic037 DD2 Abobo throw.
Voic038 DD2 Ohara shoulder attack.
Voic039 Unused
Voic040 DD1 Abobo throw.
Voic041 Canine howl 3.
Voic042 Shadow Dancer spell scream.
Voic043 Shadow Dancer Jump yell.
Voic044 Shinobi3 Joe run attack.
Voic045 Shinobi3 Joe death kick.
Voic046 Shadow Dancer fire spell chanting with detonation sound.
Voic047 Shadow Dancer wind spell chanting.
Voic048 Shadow Dancer totem spell chanting.
Voic049 Shadow Dancer spell scream with wind and tornado siren sound.
Voic050 Shadow Dancer Yamoto poof, bark, and charge sound.
Voic051 DD2 Chin jump kick.
Voic052 DD2 Chin attack.
Voic053 SO2 Shiva jump attack/throw.
Voic054 SO2 Ninja throw.
Voic055 Dragon roar (Hanzou Ko ryu ha).
Voic056 DD2 Unknown attack.
Voic057 Female soprano scream.
Voic058 Female pain grunt.
Voic059 Vendetta male burned.
Voic060 Vendetta male burned with incineration sound.
Voic061 Male choke.
Voic062 Alto female scream.
Voic063 SOR2 male death 1.
Voic064 SOR2 male death 2.
Voic065 SOR2 Axel death.
Voic066 SOR2 female death.
Voic067 SOR3 male death 1.
Voic068 SOR3 male boss death.
Voic069 SOR2 Max death.
Voic070 Male scream with cut/bisect sound.
Voic071 SOR2 Skate death.
Voic072 Shadow Dancer boss death.
Voic073 Vendetta male falling sound (“owww!!”).
Voic074 Vendetta boss death.
Voic075 Ninja Spirit PC death.
Voic076 Male scream with dog mauling sound.
Voic077 DD2 Burnov death.
Voic078 DD2 Chin death.
Voic079 Male multi-pitch scream.
Voic095 Male “Tuhh!!”
Voic096 Male “Ha!”
Voic097 Male “Humph!”
Voic098 Male “Uegh!”
Voic099 Male “Ummph!”
Voic100 Male “Yeeah!”
Andy Bogard
vand0001 “Seh!”
vand0002 “Huah!”
vand0003 Light exhale
vand0004 “Gah” pain.
vand0005 “Mrah” pain.
vand0006 “Mowah” pain.
vand0007 “Baby cry” pain.
vand0008 Light attack
vand0009 “Shoken!”
vand0010 “Geki”
vand0011 “Shoooooken!!”
vand0012 “Ku ha dan!”
vand0013 “Shoryudan!”
vand0014 “Zaneiken!”
vand0015 Super finish scream.
vand0016 “Humph”
vand0017 “Yoshi!”
vand0018 Exhale.
vand0019 “Sayaaa!”
vand0020 “Cho reppa dan!”
vand0021 Super finish scream 2.
vand0022 “Shetz!”
vand0023 “Namusan”
vand0024 “Ienoash”
vand0025 Prelude to Tung match.
vand0026 “Tung Sensei!”
vand0027 “Zengu Ikkyu!”
vand0028 “Geese!”
vand0029 “Sono tadoka.”
vand0030 Short growl.
vand0031 “Arryaaah!”
vand0032 “Siiiiiiii!”
vand0033 Wild Ambition overdrive initial attack.
vand0034 “Shrureahh!” ***ERROR** Cannot be exported.
vand0035 “Zanei Reppa!”
vand0036 “Hutz!”
vand0037 “Geki!”
vand0038 “Juhn!”
vand0039 “Metsu!”
vand0040 “Son!”
vand0041 “Baaak!”
vand0042 “Meeetsu!”
vand0043 KO 2 (“uhph.. gomen!”).
vand0044 “Oniotaaaah!”
vand0045 “Shuryahhh!”
vand0034 “Shrureahh!”
sand0001 Hishoken
sand0002 Geki Hishoken
sand0003 Special slash/whoosh
sand0004
sand0005 Fire burst
sand0006 Long whoosh
sand0007 Strong fire burst
sand0008 Cho Reppa Dan burst.
Hanzou (WH)
Voic022 WH Hanzou light attack.
Voic023 WH Hanzou med. attack.
Voic024 WH Hanzou heavy attack.
Voic025 WH Hanzou “Nin!”
Voic026 WH Hanzou “Victory.”
Voic027 WH Hanzou “Double Rekkozan!”
Voic028 WH Hanzou “Koh Ryu Ha!”
Voic029 WH Hanzou “Lariat!”
Voic030 WH Hanzou “Slash of Shimmering!”
Voic031 WH Hanzou ‘Ninpo Korin Kazan!”
Voic032 WH Hanzou “Rekkozan!”
Voic033 WH Hanzou KO.
Voic034 WH Hanzou “Come on!”
Kasumi (DOA)
Voic014 Attack 1.
Voic015 Attack 2.
Voic016 Attack 3 (waterwheel kick).
Voic017 Attack 4.
Voic018 Attack 5 (Hard throw).
Voic019 Attack 6.
Voic020 “I have no time to spare.”
Voic021 “Farewell.”
Muscle Power
Voic080 WH Muscle Power “Number one!”
Voic081 WH Muscle Power quick grunt.
Voic082 WH Muscle Power “Dahhh!!”
Voic083 WH Muscle Power “Gwaoow!”
Voic084 WH Muscle Power “Hungah!”
Voic085 WH Muscle Power pain 1.
Voic086 WH Muscle Power Jab.
Voic087 WH Muscle Power KO.
Voic088 WH Muscle Power “Number onnnnne!”
Voic089 WH Muscle Power “Hoawwww!”
Voic090 WH Muscle Power medium grunt.
Voic091 WH Muscle Power pain 2.
Voic092 Real American sound clip.
Raiden (Big Bear)
vrai0001 “I’ll dance on your grave!”
vrai0002 “Say your prayers wimp!”
vrai0003 “You’re dead meat!”
vrai0004 “Come on!”
vrai0005 “Hum!”
vrai0006 “Hyeee!”
vrai0007 “Hey!”
vrai0008 “Jurreahh!”
vrai0009 “Jeeh!”
vrai0010 “Oooowahhhooo!”
vrai0011 “Nwaaoo!”
vrai0012 “Huaah!”
vrai0013 “Bomba!
vrai0014 “Ready…”
vrai0015 “Go!”
vrai0016 “Dropkick!”
vrai0017 “G…End!”
vrai0018 “I am Raiden!”
vrai0019 “Ichimon!”
vrai0020 “Heh hahahaha!”
vrai0021 “Gwah!”
vrai0022 “Gwhaaaa!”
vrai0023 KO.
Rainbow Mika
vmik0001 “Guh!”
vmik0002 “Uggh!”
vmik0003 “Nuuuh!”
vmik0004 “Euuaggh!”
vmik0005 KO with echo.
vmik0006 KO.
vmik0007 “Kuu!”
vmik0008 “Huh!”
vmik0009 “Uuuah!”
vmik0010 “Bombaaah!”
vmik0011 “Attack!”
vmik0012 “Crush!”
vmik0013 “Victory!”
vmik0014 “Igamaaah!”
vmik0015 “Morataaa!”
vmik0016 “Kimatah!”
vmik0017 “Uryou!’
vmik0018 “Shaah!”
vmik0019 “Oraah!”
vmik0020 “Yah!”
vmik0021 “Kuu!”
vmik0022 “Kona!”
vmik0023 “Rainbow!”
vmik0024 “Ikuze”
vmik0025 Happy bounce.
vmik0026 “Doshta.”
Ray McDougal
vray0001 “DDT!”
vray0002 KO.
vray0003 “Wheel Kick!”
vray0004 “All right!”
Vray0005 “Yeah!”
Retsu
Voic093 SF Retsu Grunt
Voic094 SF Retsu Grunt 2
Ryo Sakazaki
Voic101 Ryo Sakazaki attack 1 (heavy).
Voic102 Ryo Sakazaki “Zanretsuken!”
Voic103 Ryo Sakazaki “Hoah Sho Ko Ken!” (low pitched)
Voic104 Ryo Sakazaki “Raijinsetsu!”
Voic105 Ryo Sakazaki “Hoah Sho Ko Ken!” (normal pitch)
Voic106 Ryo Sakazaki attack 2 (light).
Voic107 Ryo Sakazaki attack 3 (light).
Voic108 Ryo Sakazaki pain 1.
Voic109 Ryo Sakazaki “Ko Oh Ken!”
Voic110 Ryo Sakazaki attack 4 (Kohou).
Voic111 Ryo Sakazaki attack 5 (heavy).
Voic112 Ryo Sakazaki “Ora! ora! ora! ora! ora!”
Voic113 Ryo Sakazaki “Ichi!”
Voic114 Ryo Sakazaki “Hissestu”
Voic115 Ryo Sakazaki attack 5 (heavy).
Voic116 Ryo Sakazaki “Ora! ora!”
Voic117 Ryo Sakazaki “Osu!!”
Voic118 Ryo Sakazaki “Hien Shippu kakyu!”
Voic119 Ryo Sakazaki charging.
Voic120 Ryo Sakazaki KO.
Sho (Breakers Revenge)
vsho0001 Jab.
vsho0002 “Mmpuh!”
vsho0003 “Shwop!”
vsho0004 “Hah!”
vsho0005 “Shoo!”
vsho0006 “Eyahh!”
vsho0007 “Hup!”
vsho0008 “Whuyeah!”
Vsho0009 “YEAAHHH!”
vsho0010 “Kureaaah!”
Terry Bogard
vter0001 FF2 KO.
vter0002 CVS KO.
vter0003 “Uuh!”
vter0004 “Owughh!”
vter0005 “Hey! Come on, come on!”
vter0006 “Geese!”
vter0007 “Hey you!”
vter0008 “Okaaay!”
vter0009 “Burn Knuckle!”
vter0010 “Crack shoot!”
vter0011 “Rising tackle!”
vter0012 “Power wave!”
vter0013 “Power dunk!”
vter0014 “Power…!”
vter0015 “Geyser!”
vter0016 “Are you OK?”
vter0017 “Buster wolf!”
vter0018 “Hah!”
vter0019 “Humph!”
vter0020 “Heyyy!”
vter0021 “Agggh!”
Tung Fu Rue
vtun0001 Roid rage.
Generic Female
voif0001 Long KO scream.
Generic Male
voim0001 High pitched “Ewwluah!” KO.
voim0002 Midtone burst KO.
voim0003 Vendetta on fire scream.
voim0004 SOR3 male KO scream.
voim0005 SOR2 male KO scream 1.
voim0006 SOR2 male KO scream 2 (from sword of Vermillion).
voim0007 Ninja spirit PC death.
voim0008 Long large male KO.
voim0009 Large male “erroooooo!”
voim0010 Quick “Ya!”
voim0011 Punisher male KO 1
voim0012 Punisher male KO 2 (high pitched OW!)
voim0013 Punisher male KO 3 (“yeaahhhh!”)
voim0014 AVP soldier KO 1.
voim0015 AVP soldier KO 2.
voim0016 Fatal Fury 1 “GO!”
voim0017 MK Pain 1.
voim0018 MK male long fall 1.
voim0019 MK male long fall 2.
Generic Voice (robot, alien, etc)
voig0001 High pitch alien screech.
voig0002 Crowd cheer.
voig0003 MK crowd in awe.

Reserved Maps

Use Map
Default 0
Death 1
Burn 2
Shock 3
Freeze 4
Poison 5
Reserved 6 – 10
Color selects 11+

Reserved icons

Icon ID
Default icon0001
Death icon0002
Pain icon0003
Acquire icon0004
Weapon icon0005