M.U.G.E.N Updates ------------------ Updates are in order of most recent first. 1 Jan 2000 ========== At a glance: - Began testing of helpers. Helpers can be used to create and control player-type objects that have their own states. Assisting characters such as pets can be done using helpers, but one might find other uses too. - Training dummy controls - Press 'M' while paused in training mode. - Complete documentation is available for state triggers. - Stages now support reflections for a shiny-smooth effect. - Explods bugs have been fixed. Explods let you create simple effects. - Lots of engine updates Known issues ------------ - Camera make shake horizontally when there are opposing players standing very close to the tension lines on either end of the screen. This problem goes away if one of the characters move. - Dust is drawn over the foreground layer of a stage - Lifebars are not very customizable, especially in team mode - No tools are available for creating fonts Docs ---- - cns documentation has been updated. Minor points have been clarified or elaborated on. Trigger documentation has been moved out of cns.txt. - full trigger documentation is in trigger.txt. We do not have full controller documentation yet - incompatibility issues are addressed in incompat.txt - a html table of contents is available in docs/ as mugen.htm Code ---- - *** changed from previous version *** Intro is no longer held by using var9. Instead, use the new AssertSpecial controller to assert the "Intro" flag: [State 191, 1] ;In the intro state type = AssertSpecial trigger1 = Time = [0,70] flag = Intro More on the AssertSpecial controller below. - *** changed from previous version *** CNS: MakeExplod controller renamed to Explod Lots of explod updates - *** changed from previous version *** Palette ordering is now: X Y Z 4 5 6 A B C 1 2 3 As before, holding down start while selecting gives you the extra palettes (palno+6) - mugen.cfg: [Arcade] group: "AI.Cheat" added. Check mugen.cfg for a description of it. You may want to turn this off if a AI that cheats offends you. - Players now cannot guard a hit that does enough guard damage to KO them. - Triggers now allow retargeting. See trigger.txt for details. - CNS: New controllers: Helper, DestroySelf See incompat.txt for a mini-guide on helpers. - CNS: New controller: HitOverride Overrides the player's gethit state. Useful for preventing helper characters from changing into clones of p1 if they are hit. Still under development, so format may change. - CNS: HitDef controller Added new optional parameter "AffectTeam". This lets you choose who you can hit. Valid values are "Enemy", "Friendly" and "Both". Defaults to "Enemy" if omitted. - CNS: Projectile controller Added optional "projcancelanim" parameter. It is the animation to play when the projectile is canceled out by another. - CNS: ProjHit, ProjContact, ProjGuarded controllers Format has changed. Please see docs/trigger.txt for more information. - CNS: ScreenBound controller Minor change in parameter "movecamera". It now takes two arguments, the first for x and the second for y. For example, if you only want the camera to follow your character horizontally but not vertically, you would use "movecamera = 1, 0". This defaults to 0,0 if omitted (camera does not follow at all) - CNS: New trigger: NumExplod Returns the number of explods belonging to the player. If you append an ID number to the trigger name, it counts only explods with a matching ID. For example, trigger1 = NumExplod1000 < 2 will trigger if there are fewer than 2 explods with ID 1000 - CNS: New controller: MoveHitReset Resets MoveHit, MoveGuarded and MoveContact flags. - CNS: New trigger: Lose Works like the win trigger, except detects if p1's team has lost. - CNS: Hitdef controller: Velocity parameters can now take the letter 'n' in place of a velocity component. This keeps the opponent's velocity unchanged when he is hit. For example, ground.velocity = n, -5 x-velocity is unchanged, but y-velocity is set to -5. - CNS: [Size] group: Added optional "shadowoffset" parameter. This is the amount by which the shadow of the character will be offset as it is drawn. Use to prevent characters from "floating" in the air. - CNS: New controllers: BindToParent, BindToRoot Binds a player's position to its parent or root. Takes parameters: pos = x,y time = t facing = f x,y is the offset to the position you are binding to t is the time to bind (default 1). Set to -1 to bind indefinitely f is the direction to face relative to the parent/root. Valid values are 1, -1 and 0. Set to 0 to ignore the parent/root's facing direction. - CNS: New controller: BindToTarget Takes parameters: pos = x,y [, relpos] time = t x,y is the offset to the position you are binding to The optional relpos parameter is one of {foot, mid, head}. Defaults to "foot". t is the time to bind (default 1). Set to -1 to bind indefinitely For example, pos = 5,20, head time = 10 - CNS: Added parameters to constants: [Size] group: head.pos = x, y ;Def: -5,-90 mid.pos = x, y ;Def: -5,-60 head.pos is the approximate position of the head of your character in one of his light gethit frames. head.pos is the approximate position of the midsection of your character in a light gethit frame. May be used in the BindToTarget controller to position yourself at the corresponding positions of the opponent. All positions are relative to the player's axis. - Ctrl-D now cycles through all active players and helpers. - Fixed some rounding errors in drawing sprites. You may need to check your background and character offsets again. - CNS: New trigger: Matchover Returns 1 if the match has ended, 0 if not. We say a match has ended when either side has won enough rounds necessary to proceed to the next stage. Might be useful for win poses that only occur when a player wins a match. - CNS: Controllers in general: Added "ignorehitpause" paremeter. If set to 1, then that state controller will continue to be updated during the pausetime of the player, that is, when the player is frozen for a short time on a successful attack. Example uses: play sounds, flash screen white, create explods, etc Be careful not to abuse this parameter; it may cause difficult-to-trace character problems when used incorrectly - CNS: AfterImage controller: Added optional "trans" parameter. Set to "add", "sub" or "add1" to make the after images transparent. - Stages: Added "reflect" parameter to [Shadow] group. If set to 1, a "reflection" effect will be applied to all players, as well as their projectiles and explods that have a non-zero shadow paremeter. See KFM's updated stage. - Improved loading time by pre-caching sound and graphics files. Also fixed bug that made large sound files load very slowly - CNS: PalFX controller: Added optional parameter "sinadd". Creates "blinking" or "slow blinking" effects by applying color offsets to the player's palette using sinusoidal enveloping. sinadd = r, g, b, P r,g,b are the maximum amounts of red, green and blue to add/subtract from the palette. P is the period of the sine wave in game ticks. You might like to use this for fireballs that "burn" people. - CNS: HitDef controller: animtype, air.animtype and fall.animtype now accept "Up" as a value. This makes the opponent go into an animation where he is knocked straight up (anim action 5060), and then arcs over and comes down head-first (action 5061). If you have the optional actions 5101 and 5016, these will replace 5100 (hit ground and bounce into air) and 5105 (hit ground from bounce) in the case of "Up" anim types. If the opponent does not have these animations, then he will default to the normal falling animations. - CNS: Projectile controller: Added "projsprpriority" parameter. It is the sprite drawing priority of the projectile. Defaults to 2. - CNS: New Controller: AssertSpecial Lets you assert special flags, such as ones to keep the fight from starting (Intro) as well ones to keep the round from ending (RoundNotOver). Asserted flags are valid only for one game tick; for most flags, you may need to continuously assert it over a period of time. The required parameter is "flag", and its value must be one of: Intro RoundNotOver NoStandGuard NoCrouchGuard NoAirGuard To assert multiple flags in a single controller (up to 3), you can use the optional parameters "flag2" and "flag3", which take the same values as "flag". For example, this is one you might find useful for very long win poses. [State 181, 1] ;During the win state type = AssertSpecial trigger1 = Time = [0,500] flag = RoundNotOver - Training mode: Training dummy control added - see readme.txt - Camera shaking slightly changed (does it look better?) - CNS: StateDef: Added new parameters: hitdefpersist, movehitpersist - AIR: added new transparency mode: A1 Fades background to 50% intensity before adding the sprite. So far all transparency functions do not work for vertically-flipped sprites eg. [Begin Action 1] 10,0, 0,0, 5, , A1 - Fixed problem with slow camera panning. Basically, the camera will pan quickly if the player at the edges have an x-velocity that moves the player towards the edge. Camera will still pan slowly if you use PosAdd to move the players towards the edges (this is intentional) - CNS: New trigger: palno Gives you the palette number of the player, starting from 1. - Projectiles: Projectiles that have an animation action with infinite looptime (when set to the remove state) are now immediately deleted. Projectiles can simultaneously affect multiple opponents (in team battle) Misc ---- - name1.fnt has most characters now Bug fixes --------- - Fixed minor anim bug in SelfState - Recoded some palette-handling functions - More camera problems have been fixed. Camera should be able to scroll quickly if needed, but stage tension should be kept around 50 in order for it to look right. - Rewrote combo-counting code. The counter should work properly in team mode now. 19 Oct 99 ========= At a glance: - Added Team Battle mode. Go against two computers at a time if the game's too easy for you. - More background control - Implemented explods - Slightly more control over projectiles - Playstation joypad support with force-feedback (through converter) - Updated some documentation - Improved camera movement - Several bug fixes Known bugs ---------- - In team battle, players may occasionally get stuck in a "thrown" state if the attacker was hit out of start of the throw state. Docs ---- - cns: more trigger information in Appendix A full documentation of the HitDef controller in Appendix B - readme: Added HotKeys info - added mugen.htm, a - more FAQs in the FAQ - added spr.gif. Refer to this for required sprites and their axes. - updated spr.txt - For cmd docs: see player.cmd - For background: see stages/stage0.def Code ---- - CNS: Implemented "MakeExplod" controller, which is a more flexible version of GameMakeAnim. Format may change; we recommend you do not use it yet. - Background controllers implemented. Still under testing. These let you have more control over how the background elements behave. Format may change. - CNS: Variable added to [Size]: proj.doscale = ? Set to 1 if you want to apply scaling to your projectiles. The scale factor will be the same as the character's. - CNS: LifeAdd and TargetLifeAdd controllers damages are now affected by the the player's defense multiplier. - The players no longer continually update at time 0 of the intro state during the initial fade-in. Any controller at state time 0 of the intro states will be executed once at the beginning of the fade-in, and the character will be frozen until the fade-in is complete. - Training mode: Training dummy no longer gets KOed. Life will return to full after 1 second of idle time. - CNS: [Data]: Added "volume" parameter. Adjust the volume of individual players' voices using this. - Support for PSX controllers in place. Final implementation of input devices still not decided. - CNS: Projectile controller: -Added optional "ProjHeightBound" parameter. Has two values: ProjHeightBound = y1, y2 y1 is the upper bound of the projectile, and y2 is the lower bound. If the projectile vertically leaves the range between y1 and y2 it will remove itself. Default value is -240, 1 -Added optional "ProjStageBound" parameter. The value is the the distance the projectile can travel off the edge of the stage (not screen) before being deleted. Default value is 40. -Added optional "ProjRemAnim" parameter. It is the action number of the animation to play when the projectile removes itself, or when it hits another projectile. Defaults to the same value as "ProjHitAnim" parameter. Set to -1 if you do not want an animation to play. -Also, projectile now plays the remove-animation when it deletes itself, either when its time runs out, or when it leaves its set boundary ("projedgebound" and "projheightbound" parameters) -Added projpriority controller. If projectile collides with another projectile of equal priority, they will cancel. If it collides with another of lower priority, it will cancel the lower-priority projectile, and the higher-priority one will have its priority decreased by 1. Defaults to 4. - data/mugen.cfg: Tweaked default volume settings. Added mp3 volume control. - *** changed from previous version *** BG on title, options, select and versus screens no longer move on their own. Assign velocities if you want the background to move. - Added a few more parameters to data/select.cfg under [Portrait] and [VS Screen] and [Dimensions] - Slight update on select screen graphics - CNS: Projectile controller: Added "projedgebound" parameter. The value is distance off the edge of the screen before projectile is deleted. Default value is 40. - Changed palette controllers to a dynamically-sized array. Will handle palette effect on an arbitrary number of sprites now (instead of the old 64) - You can now load up a different def file within a player's directory. This will allow for distribution of different versions of a character that use some common files, such as the sff and snd. Within a different def file, you can specify different cns and air files. See data/select.cfg for details. - Better camera algorithm - Key Config now displays key names instead of scancodes 6x9 FNT files updated with '*' and '~' characters - CNS: HitDef controller: hitflag parameter: Added '+' to the list of possible options. If '+' is added, then hit can only affect people who are in a gethit state - CNS: HitDef: All moves with "throw" attribute can now only hit one opponent at a time. This is so you cannot throw 2 people at the same time in Team Battle. - CNS: HitDef controller: Added new parameter "ID". You can assign an ID number to the hit. May be used to test if an opponent was last hit by a certain move. If omitted defaults to 0 - CNS: HitDef controller: Added new parameter "chainID". If included, then the hit can only hit people that were previously hit by a hit with the same ID value. Use in conjunction with a hit that has the "ID" parameter. - CNS: Added TargetDrop controller: Removes all targets from P1's list of targets (you hit Ctrl-C to see the list). You should drop unwanted targets if you do not want them to be affected by controllers such as TargetBind. This is an advanced controller. You may see little use for it unless you are making complex chain-type moves. This is mainly intended to make moves work correctly during Team Battle modes. No required args. Optional Args: excludeID = ? If an opponent was last hit by a move which has the hitID number (parameter "ID" of attacker's HitDef controller) equal to the excludeID value, then he will not be dropped from the list of the attacker's targets. - data/fight.def: Added to [Round]: win2text - Added Team battle mode. - CNS: Minor change in "target???" controllers: these controllers no longer affect targets who are guarding. eg. TargetLifeAdd will change the life of a target being hit, but not of one who is guarding - Updated to link with Allegro 3.9.25 - BG: Element: Added optional "positionlink" parameter Set to 1 to link that bg element's position to the previous element. The "velocity" and "delta" parameters will be ignored. The "start" parameter becomes the offset from the previous element. - BG: Element: Added optional "sin.x" and "sin.y" parameters Offsets the background position using a sine function. "sin.x" and "sin.y" are for offsetting the x and y positions respectively. Each has 3 parameters, ie: sin.x = M, P, O M (decimal) is the magnitude in pixels P (decimal) is the period in game ticks O (decimal) is the time offset in game ticks Specifically, the function is computed as such: offset = M * sine ((ticks+O)/P * 2 * Pi) - DEF: Added optional "displayname" parameter to [Info]. It is the name to display on the select screen, fight screen, etc. If omitted, will be same as "name" parameter. - CNS: Added "p1name" and "p2name" triggers. p1name returns the name of the player (in the DEF file, under [Info]: name) p2name returns the name of the opponent Eg: trigger1 = p1name = KFM Case insensitive, so "KFM" is the same as "kfM" and "kfm". Example use for p1name: Special reactions for certain characters when they are throw. Ie, use "p1name" in the states that p2 will get from p1's CNS. Example use for p2name: Special reactions towards certain characters, or special intros. - Background: The "mask" parameter is no longer ignored for parallax background elements. An example use for this could be clouds, where you can see the sky through holes in the clouds. - CNS: TargetBind controller: Default value of "time" parameter changed from 0 to 1. - CNS: HitDef controller: If the "ground.velocity" parameter has a non-zero y value, then the "forcestand" parameter's value will default to 1 instead of 0. It can still be overridden by setting it to 0, but it will look strange. - You can now type: mugen [stagename] For example, if you type: mugen kfm kfm mystage Then the game will load stages/mystage.def for the quickvs stage. - P2 is now invincible during the p1pausetime of p1's reversal. Stops projectiles from interrupting the reversal. - Can now change states right away in intro (state 191). You can use "p2name" trigger for special intros between people. Bugfixes -------- - Fixed the floating point exception from having topz and botz being equal in the stage definition. - You can't "influence" the AI by whacking its buttons anymore - Fixed a nasty bug where missing characters would cause Mugen to crash at the versus screen. - Fixed problems where P2 bound to P1 by the TargetBind controller would not fall down if P1 was hit. - Fixed some problems with reversals. Mainly, some parameters such as fall and fall.yvelocity, etc were not working before. 3 Sep 99 ======== A lot of engine updates this time. At a glance: -Added reversal attacks -Guard cancels -Character palette effects -Added Training mode to main menu -Stage select in all but Arcade mode -Sound device configuration -MOD and S3M music capability (thanks to Guan Foo Wah's JGMOD) -Projectile control improvements -Lots of updates to state control -Various bug fixes Misc ---- - Added new hit spark: Use spark 0,6 for blood - Updated action numbers in docs/air.txt. Also added something about flipping and transparency in air. Code ---- - Added Training Mode. Will add more functionality later. If you want to turn on the CPU, Hit Ctrl-1 (p1) or Ctrl-2 (p2) - Select-cursor positions are now remembered in VS, Watch and Training. - CNS: Put in mod-playing capability. Supports, MOD, S3M and whatever works with JGMOD. New in data/mugen.cfg: [Sound] playmod = ? modvolume = ? - CNS: Added "height" to [Size] group. Say you set "height = 60", then it means that if p2 is jumping over p1 (p1 is standing), and p2's y-pos is < -60, then p2 will pass through p1. This makes it easy to jump over tall people. If omitted, defaults to 60. - CNS: "Projectile" controller: Added "projID" parameter. Set to a number that you want to identify the projectile with. If omitted, defaults to 0. Can ignore this parameter if you don't want to do advanced projectile stuffs. - CNS: "Projectile" controller: "postype" parameter: Added value "p2". If use "p2", then projectile is created relative to the opponent. Useful for explosions that appear under the other guy's feet and stuff. - CNS: Added "NumProjID" trigger. Returns the number of projectiles that currently exist (doesn't count the other player's projectiles, only yours), and have the specified ID number. Place the ID number right after "NumProjID" (no spaces). Eg, trigger1 = NumProjID500 = 0 Triggers if there are no projectiles with ID number 500. Note: If the ID number is omitted, defaults to 0. - CNS: Added "ProjHit", "ProjGuarded" and "ProjContact" triggers. Works like MoveHit, etc, except it detects if a projectile with the specified ID has hit. Like NumProjID, place the ID number after the triggername. Eg, trigger1 = ProjContact1000 = 0 Triggers if a projectile with ID 1000 has come in contact with p2. Note: It will trigger once for each hit of the projectile, so a multi-hit projectile can activate the trigger multiple times. Note2: Unlike "MoveHit", etc, the "Projhit" triggers are valid only for one game-tick after hit/contact. - CNS: "Superpause" controller: Added "movetime" parameter. Set to the number of game-ticks to allow the player to move DURING the superpause. Eg, "movetime = 30" lets the player continue moving during the first 30 ticks of the pause, while everything else in the game is frozen. - select.cfg: [Characters]: stagefilename made optional. If you omit the stagefilename, a random stage will be chosen. - CNS: "Projectile" controller: p1stateno and p2stateno parameters now work properly - CMD: You can now interrupt guard by using a trigger like: triggerall = command = some_command trigger1 = stateno >= 150 ; These are the guard trigger1 = stateno <= 153 ; states. - Added stage select to versus and watch modes. To name your stage, add a group [Info] to your stage def, and put the name in a parameter called "name". eg: [Info] name = My Stage Name - CNS: Added new controller "statetypeset". Lets you change the statetype and/or the movetype in the middle of a state. Params: value = state_type movetype = move_type state_type is S, C, A or L move_type is A, H or I - Changed to dynamically-allocated array for characters in charsel.c - Fixed bug where you could not guard a hit after being hit in the air (common1.cns problem that came up when fixing a small combo-count bug last time) - Fixed bug where guard sounds played from the hit sound bank instead of its own - Fixed bug in tiled backgrounds that had tilespacing - Allowed animated backgrounds to tile (the tilespacing parameter must have values > 0) - Added sound configuration routines to data/mugen.cfg See for details. - CNS: Added trigger "p2life" returns amount of life that p2 has - CNS: "LifeAdd" and "TargetLifeAdd" controllers: Added "kill" parameter. Set "kill = 0" if you do not want the player's life to go below 1. - CNS: "HitDef" controller: Added "guard.pausetime" parameter. Like "pausetime", except values are for guarded hits. - Added "Draw Game" state (state 175 in common1.cns) Will go to this state if both players have same life when time runs out. If player does not have anim 175, defaults to "Time Over" state (state 170) - You can jump over people lying down in the corner now. - CMD: Added "s" button, for start. Use it like any other button. If you want to make a taunt, you'll need to program it into the CMD and CNS. Use state 195 for taunt. - CNS: Added "facep2" parameter to StateDef. If set to "1", the player will turn to face p2 at the start of the state (see cns docs). - CNS: Added new triggers: "FrontEdgeDist", "BackEdgeDist", "FrontEdgeBodyDist", "BackEdgeBodyDist". "FrontEdgeDist" is the x-distance of the player's x-axis from the edge of the screen that is in front of the player. "FrontEdgeDist" is the x-distance of the player's x-axis from the edge of the screen that is behind the player. "FrontEdgeBodyDist" and "BackEdgeBodyDist" are almost the same as the other two, except it takes the distance from the edge to the sides of the players, instead of the x-axis. - CNS: Added new controller: "PalFX" Adjusts palette of player. Params: time = time mul = mulr, mulg, mulb add = addr, addg, addb time (int) - Time to keep the palette effect mul? (int) - 0 for dark, 256 for normal, >256 for contrast add? (int) - 0 for normal, -1 to -256 for dark, 1 to 256 for bright - CNS: HitDef controller: Added new parameters: palfx.time palfx.mul palfx.add These are the same as "PalFX". It will do palette effects on the opponent if the move hits. - common1.cns: player blinks white when recovering from fall - CNS: Projectile trigger: Added optional "projshadow" parameter. Set to color of shadow: eg. projshadow = 64,64,64 To use stage's shadow color settings, set to -1, eg. projshadow = -1 - CNS: Added "Reversal" controller Like HitDef, but with limited parameters P1's clsn1 box catches p2's clsn1 box (attack). New parameter: p2attr = attr_list attr_list is the list of attributes of p2's hitdef that p1 can catch. eg. p2attr = SA, NA,SA means Stand+Air, NormalAttack,SpecialAttack Use with p1stateno (and optionally p2stateno) for creating reversal attacks. Use a "targetbind" controller in p1's reversal-success-state to bind p2, if necessary. - Fixed minor guard problem, where you could not immediately guard low attacks if you weren't already crouching 16 Aug 99 ========= At a glance: - Animated backgrounds - Change background implementation - Lots of doc updates, but still far from done - Music in title, select and versus screens - Lots of small fixes Misc ---- - Updated docs for most things - New suggested life for players is 1000, instead of 256. - Moved all stage defs and sffs from data/ into the stages/ directory If you made backgrounds, check your defs to set the files to the stages/ directory. - Added new hit spark. Code ---- - Added BGM capability at Char Select and VS Screen. Check select.cfg, under [Music]. - Added BGM capability at Title Screen. Check system.def, under [Music]. - Does not require "sound = blah.snd" in the DEF file to run - Added screenshot to title screen - Changed implementation of backgrounds. Now a background x-position of 0 corresponds to the middle of the screen. It can move left (negative) and right (positive). This makes it much easier to do the def for the backgrounds. Parallax works slightly different now. If you use "width = ?,?" it acts like it did before: scales the background to create a perspective effect. If you use "xscale = ?,?" it doesn't pull off the scaling. That way if you have a floor that already looks "3D", it leaves it alone. Player start x-positions should now be -70 and 70 for all stages. - Animated BGs at last! The anim data is kept in the def file for the BGs. - Added "boundhigh", "boundlow" and "verticalfollow" to [Camera] in stage0.def. Controls vertical movement. - Added key config to options - Now there's a line-fade when you skip the intro - CNS: Hitdef: Added "P" type to hitflag. If you have a hitflag with "P" in it, the attack can cancel out projectiles. - CNS: Added new trigger: AnimExist = actionno 1 if actionno exists in P1's AIR, 0 if not. Used this to fix small animation bug in common1.cns. KFM --- - Changed life and damage to match new 1000 life. Bugfixes -------- - Fixed skipping intro multiple times - Fixed another bug in common1.cns, where action 5040 would repeat over and over in state 5040 (air recover) - Fixed the problem where you don't really get pushed back from the corner if you're doing a combo. So now in the CNS, if you have a "velset = 0" in the StateDef, it sets your x-velocity to 0 as usual, except if the other guy is being hit in the corner. - Fixed bugs on timeover, where characters did not stop guarding or crouching - Deletes projectiles if skipping intro (no more leftover KFM wood pieces) - Fixed a bug it did not check hold-commands for buttons. Like, /a and /b etc were not being detected - Fixed bug where keypresses are lost during game slowdown - Fixed the problem where the "command" state controller doesn't work in the win pose -- useful for selecting the win pose by holding buttons