NOTE: This is a GUI version of the VSCC (character creator). It creates the same exact .VSC file upon completion, but it's supposed to be easier to use than a script language. The source code has bugs and is not usable, IMO.
ASCII.VS is the font used in the GUI. See the FONT UTILITY for how to use the VSSC2 to recreate this file if need be.
VSCC.ICO is a pretty Windows Icon. Delete it if you're not using any kind of Windows.


VersuS Character Creator
======================================================================================

This may be my last, final stab at the complex VSCC program. It will be created using the DJGPP 32-bit C compiler for DOS, so its market has a larger installed base. This design document hopes to pin down exactly what is implemented in the VSCC. By doing this document, I hope to avoid large mistakes and blind alleys in the coding. It will be my map to my destination: a functional character creation tool for VersuS.

  - Ron Newcomb, 18 Dec 1997

--------------------------------------------------------------------------------------

Major points:
Vscc needs to be able to manipulate many graphics (in various formats), sounds, snippets of animotion, and input, all linked together to act as one unit. [AI is still not covered yet. It may be added later.]

Each character is created within its own subdirectory, where all its files - graphic, sound, and otherwise - are contained. All files within are considered "imported" into the character's design. Perhaps code to remove unused pictures could be used. Same for sound FX. "Importing" GFX & S-FX simply involves moving the file from its original directory to the Character-In-Progress's directory. [Optionally, copy the file.]

Therefore, only certain file types should be found within the character's directory. VSCC could flag to the user any file-types which do not belong. This is helpful in case importing a unsupported GFX format leaves the user wondering where the file went. Importing should only list available those file-types which belong.

Text files are allowed in the directory. [If possible, VSCC should be able to call a user-specified text editor. Else, creating one is an option.]

Since VS uses a different color palette, the palette is saved as a separate file in the VS directory in case a drawing program is capable of loading it. Otherwise, VSCC should have a minimal graphic editor. This editor displays a zoomed version of the character (probably in a window, if it is large), and real-size. Optionally, 8 real-size images can be displayed simutaneously, each using one of the "palette options" VS uses.

Sound files are used as-is, so no sound editor is included. If a person has the hardware to do sampling, then it came with the software to create/edit sound files.

A possible Main display would include a "comic-strip" view of animation. The attributes that accompany each picture are edited below the comic strip. The mouse selects a Current Pane of the comic-strip to view/edit the attributes. Attributes include: GFK used, change GFK facing, S-FK used, movement data, collision data, end-of-animotion? data, looping w/other advanced data, and input data (what input triggers the animotion). If feasible, all should be simutaneously displayed, or split into "basic" and "advanced".

--------------------------------------------------------------------------------------
The data structures are what VSCC operates around. They have a major impact upon the complexity of the program.

GFX: stored as an array of strings, where each string is the filename of the picture. When a GFK is needed on-screen, it is loaded into memory and displayed. The GFX Array is saved on disk when VSCC is not in operation, to keep the same indicies with the same GFX. If a GFK is not found when it is needed, the picture is replaced by an error message indicating the name of the missing file. Upon loading a character, the GFX Array is "refreshed" by finding all files of all supported file-types and making sure they exist in the array. New files are added automatically in the next available slot, while old ones are indicated to the user. It is up to the user to delete the erroneous entry.

S-FX: stored identically to the GFX. Refresh checks the entries, notifiying the user of erroneous ones, since they are not displayed on-screen. [In the Attributes section of the main display, the sound filename should be displayed somewhere. Either the filename is in red if is it missing, or a error message is added to the end of the filename.]

Deleting an entry in the file arrays inserts a blank string "\0" into the entry. Never re-index the above arrays, or the user's work will be corrupted.

Animotion Attributes: a special struct contains the info for one frame of animotion, including the index into the GFK and S-FK arrays. All animotion is stored in a large array of these structs, with consecutive frames of animotion being stored consecutively. Unlike the other arrays, this array can be re-indexed, as long as consecutive entries are kept consecutive.

--------------------------------------------------------------------------------------
A .VSC file usable by VS is not created until 1) the user selects "Compile", 2) upon Refreshing, no bad entries exist in the GFX and S-FX arrays, 3) the Animotion array is re-indexed to remove empty slots, 4) no animotion references empty GFX/S-FX slots, and 5) all required animotions such as OUCH and INTRO are completed [at least one frame?].

At this time, a checklist appears containing the tasks to be done, and are checked off as VSCC goes through the compilation process. [A percent complete value for the GFX would be really nice.] The items on the list, and what VSCC is doing, is:

1) Header : VSCC opens a new file, which has the same name as the directory, with the .VSC extension. Header info is added if it can be.
2) Move List : VSCC steps down the Animotion list, writing the relevant attributes to disk. Input data is not written here.
3) Input List : VSCC writes the array of inputs (the joystick array) and the array of pointers to the first frame of each move (the mvs array).
4) GFX List : VSCC steps down the GFX array. The file is loaded, converted from its native format to VS's, then written to the VSC file. The header contains an array of pointers pointing to where in the file a GFK's final resting place is. Empty GFX entries waste entries in the Header, but the loss is minimal [unless the user never deletes bad entries?].
5) S-FX List : Done the same as the GFX array. S-FX are kept in their native format within the VSC file, so no conversions are necessary.
6) Clean-up : VSCC enters any info into the header which couldn't be done in stage 1, closes the file, and does whatever housekeeping needs done.

--------------------------------------------------------------------------------------
Q's : Can the moves be named? How do I go about finding a finished move again? How do I browse the moves? How are frames, and entire animotions, added and subtracted from the character? How is the input represented? Required inputs?

--------------------------------------------------------------------------------------
Damage, Balance, Karma, and Yin-Yang

When the player creates a particular [attack] move, the move is scored on how powerful it is by looking at attack area, vulnerable area, movement distance. The damage to the move is calculated to balance these variables out. The damage can be raised/lowered, but doing so unbalances the character, as displayed by the Yin-Yang.

A number beside the Yin-Yang indicates how far away from the norm the character is. A black number indicates power, for power is evil. A white number indicates a weaker character. No number indicates the character is in balance.

Damage =
 (area of vulnerability) - (area of attack) - (x/y movement) + (movement norm.) [multiplied by iterations of the loop it's contained within]  Negative numbers indicate power, positive indicates weaker.

For blocking, the attack area is redefined as the block area; the block area negates any attack it comes into contact with (for that character only, of course).

--------------------------------------------------------------------------------------
Other File types

A .GFX file contains the GFX array.
A .SFX file contains the S-FX array.
A .MVS file contains the animotion array.
A .NAM file contains the character's name, and the names of each animotion.

--------------------------------------------------------------------------------------
Main Display:

The main display should have 3 main sections: Task buttons (kinda like speed buttons on windows programs' toolbar); the display section (which shows the current graphics); and the attribute section, where all attributes for a frame are edited.

The Task buttons include Save, Import, Refresh, Compile, Exit. 'Save' saves the current state of the character to disk. Import allows user to copy a file into the character's subdirectory, after which a Refresh is done. Refresh checks the integrity of the GFX and SFX arrays, verifying all files exist, and taking note of new ones. Compile attempts to create a usable VSC file. Exit terminates the program.

Possible options affecting the taskbar would be "Autosave; Autosave on exit".

The display shows one or more of the graphics used for the character. It is important so the user is sure of the move s/he is assembling. Multiple panes may be shown to reinforce the idea that a move is several frames in sequence. Clicking upon the side pictures causes it to become current. Right-clicking in-between two pictures displays a popup menu, allowing insertion of a new frame (copied from prev., next, clipboard, or just plain blank). Right-clicking a picture brings a pop-up menu, including Cut, Copy, Paste, Choose, Edit.

The attribute section is a conglomeration of different buttons, edit boxes, etc. It contains:

Input section - choose the joystick inputs, or system inputs, which trigger the animotion.
Misc section - Change Facing checkbox, select sound effect
Movement section - Determine change in x/y velocities, x/y offsets.
Collision section - Select collision boxes, damage, blocking checkbox, x/y/z impact

Main Display, outline

I.   Taskbar
   A. Save - saves character data
   B. Import - copies a file to the character's directory
   C. Refresh - checks what files are within directory; validates arrays
   D. Compile - attempts to create final VSC file
   E. Exit - terminates program
II.  Graphical Display
   A. Current picture
     1. Choose
     2. Edit
     3. Remove
   [B. Non-current picture(s)
   C. Between pictures
     1. Insert]
III. Attribute Editor
   A. Move Control Group
     1. Move name (Selectbox)
        i. Moves already included: Intro, Struck, Knockdown, Win, Die
     2. Rename / New Move / Search Moves (buttons)
     3. Test (button)
     4. Yin-Yang Picture & # representing Karma of this move
   B. Input Group
     1. Joystick (picture(s) of arrows or Sys commands HIT, KNOCKDOWN, BLOCK)
     2. Buttons (CheckEditBox - click on space for button to dis/appear) (SYSTEM is a 'button')
     3. Environment Select (picture)
   C. Basic Group
     1. New Frame Before / Prev. Frame / Next Frame / New Frame After (buttons)
     2. Select sound effect (Combobox)
     3. Change character facing? (checkbox)
     4. Select graphic (Combobox)
     5. Edit graphic (Button)
     6. Remove graphic (Button)
     7. Picture of graphic
   D. Movement group
     1. Zero-out X velocity? (checkbox)
     2. Zero-out Y velocity? (checkbox)
     3. Change in X/Y velocity (picture of arrow, leading from previous arrow)
     4. X/Y offsets (picture? adj. graphic?)
   E. Collision group
     1. Attack? (checkbox)
     2. Damage w/Adjust (buttons)
     3. Block? (checkbox)
     4. Edit attack box (button: box appears, L/R shift + arrows move/resize)
     5. Z impact? (checkbox)
     6. Edit target box (button: ditto)
     7. x/y impact (picture of arrow; shaded if Z)
IV.  Message Box - text at bottom gives quick-help (easier than pop-up tips)


Joystick pic at bottom, w/ buttons underneath or on right side. Move Name at top, New Move and Search Move buttons next, NewFrameBefore/PrevFrame/NextFrame/NewFrameAfter button bar next, Environment-Selection bar next, Player/System toggle on top of Joystick Pic.  

Movement pic at bottom, w/ numerical representation beneath. Reset X/Y velocity checkboxes above. Change Facing checkbox at top. Select Sound FX underneath.

Impact pic at bottom, w/ numerical representation beneath. Attack checkbox at top, box edit button to right. Block checkbox underneath, target box edit button to right. Damage & adj. buttons next. Z-impact checkbox next, above Impact pic.


A Selectbox is a text field with an arrowed button on each side. Clicking upon the arrow buttons moves back & forth among the selections.

