User:Zzo38
I agree to release my contributions to this wiki as public domain when possible.
The following are mostly obsolete and probably should not be used without further discussion. However, they are retained for historical reference. Some are already implemented, some are implemented in better ways, etc. Some are probably unnecessary, or bad ideas. However, some may be good ideas which are not implemented yet.
Feature wish (mainly in the order they have been added; this isn't a priority order):
- Option to specify whether or not Vancian (Level MP) casting can use a higher level slot when the available slot is not available
- Battle script (see my talk (as well as everyone else's talk) on that page for more info)
- Allow experience awards to be negative (currently they are 0 to 32767, so in a signed 16-bit value you could go as low as -32768)
- Fast-forward key even if debugging is turned off (see below configuration list)
- More customization of equipment slots (whether or not it is a weapon slot (and then battle menus can select which equipment slot for a "weapon" type menu), how many of each slot which heroes have, and set how many (negative numbers are allowed too) of up to two kind of slots which an item would take up when equipped, as well as whether it is a "AND" or "OR" condition of equipping in these two kind of slots, for each item)
- Target class "any except self"
- Hero extra fields 0,1,2
- Set whether currency symbol is a prefix or suffix (for example "$500")
- Spell lists that delete a spell whenever it is used (can be used for lists that are prepared by script?)
- Seperate string and blob types in RELOAD
- Bitsets to tell enemies to provide cover against attacks that do or do not have specific element bitsets (for example, cover against all non-flying, or cover against all psychic); this prevents heroes from targeting enemies which are farther away from the one providing cover, so once they die it will be possible to target those beyond him
- Allow heroes to auto-perform an attack upon death (for example this may be used to perform an attack which kills all other heroes in case the game is you are supposed to keep a specific hero alive; another example is a simple counterattack; another example is to allow one of his body-parts to be used as an item in the current battle; yet another example is for that attack to instead-chain into a script)
- Absorption ratio instead of just a bitset (so, absorb off becomes 0% and obsorb on becomes 100%; negative absorptions could perhaps be used to implement a kind of recoil?)
- Allow damage absorption even if the attack is programmed not to actually inflict damage (combined with the above, you could cause an attack to chain into one which causes the target to attack the attacker back for their attack points in damage, ignoring defense)
- Allow poison/stun/mute/regen register to be used as attack/defense stats
- Allow changing which stat (or register) is used for aim/dodge
- True FM emulation (rather than just converting BAM to MIDI)
- New elemental resistance calculations for equipment can be defined: "true multiplication" (similar to existing one, but if there are an even number of negative percentages involved the total will be positive instead of negative), "smallest value" (whichever of the base and equipment values is smallest will be used instead of multiplying/adding them), "nonstacking bonuses" (additive, but only the most positive and most negative equipment values are used and all others are ignored)
- Attack bitset that records the old target's stat value before costs (if the attack targets the user and damages or cures the user's HP or MP on hit) and resetting to max (if programmed to do so by the corresponding bitset) and inflicting damage, and then afterward if the new value is greater than the old one, change it back to the old value (example: if you have an attack with this bitset and reset to max, and deals 20 stun damage to the target but the target is currently stunned by 30 points, it doesn't affect it but if they are currently stunned by 15 points then it changes to 20); however the amount of damage recorded as the "last damage dealt" should ignore this bitset and be recorded as the amount as if this wasn't used
- Script command LOADMENUSLICE to load a menu as a slice collection; it doesn't actually open the menu
- Map bitset to make it to save the persistent map state in the save game file
- Option to disable lossy compression for audio (may be appropriate for small sound effects?)
- Script command to tell you whether or not a spell on a spell list would currently be castable outside of battle
- Chain conditions based on target's stats
- Chain conditions based on whether or not the attacker is wearing a particular piece of equipment (tags don't work as they don't distinguish between who is wearing it)
- Script commands to directly access buy, sell, and hire menus (instead of accessing the shop menu and going through there)
- Menu item bitset to display the current state of the tag that can be toggled with that menu
- Script command GETITEMVALUE to receive the "value" of the item (which can be used as an extra parameter if you do not need it for the default price)
- Script command RESTOREENEMIESANDFORMATIONS to restore all changes to enemies and formations done with the enemy and formation functions in the script
- Tag conditions for disabling/hiding battle menu items
- TMC: An oversight
- Macro preprocessor for Hamster Speak
- TMC: Thought about it... maybe someday. hspeak already has a couple hardcoded macros like tracevalues. I'm a big fan of ability to generate code at compile time but also keen to keep HS as simple as practical. (Note: the C preprocessor is an ABOMINATION, would never emulate that. tracevalues is a better model.)
- Ability to globally set certain elements as not displaying their values in the status screen during the game
- Submenu of the secret menu for editing FIXBITS.BIN
- TMC: It is a nuisance to examine several lumps which don't correspond to menus. Only going to add that sort of thing as needed
- Allow map general info (scripts, harm, foot offset, etc) to be copied from other maps in the editor
- If you call GAME.EXE or CUSTOM.EXE with a directory name where the directory name has .RPG at the end (or if GAME.EXE is renamed to a such) then don't automatically do lump/unlump; .HSP files also are not lumped if the .HSP happens to be a directory
- Textbox line speed option (including instant); a global setting which can also have a local option in each textbox to make it instant instead of the global setting (which, if also instant, makes it redundant)
- TMC: Planned, and much, much more!
- Script command to write automatic use global strings (especially one for the script pick hero prompt)
- TMC: Actually, I've been meaning to add an argument to pickhero to set the prompt text.
- Textbox code to enter name of item; if called from an item it is that item name and if called from NPC then it is name of item given by NPC parameters; also a script command to access the item number which would result same thing
- TMC: This has been suggested several times and is a good idea
- Allow the ${} codes in the secret menu to be used in textboxes in the game (text color, text outline, margin setting)
- TMC:That's the whole idea! Not ready yet
- Allow heroes to have elemental counters assigned
- Attack bitset to make it count as a miss if the amount of damage is zero (or if it would be, in case this bit is set even though damage isn't set to allowed to be zero)
- Script command to read item description string
- TMC:Will have whole set of item commands eventually
- Allow heroes to have bequest attacks assigned
- Attack animation mode for "true null", in order to cause it to not implicitly wait a frame or do anything else other than simply inflict the attack, evaluate the chain, and get done with it
- Damage math "simple": attack minus defense
- TMC: I want to make the multiplier customisable
- Purely defense-based percentage-based aim math settings
- Addition value setting for aim math (for percent-based aim math, the addition value is added to the aim value and subtracted from the dodge value; of course it can also be negative)
- TMC: As above
- Attack bitsets for fudging chain probabilities (including instead-chain) if the aim/dodge stats exceed 100 (one of these bitsets would be used in case it is a percentage-based-aim-math-attack which chains into an attack which always hits; the other would be used in case it chains into an attack which always misses; however you could do more complicated/confusing things with these same two bitsets)
- Program levelup bug per item
- Door sound
- Script command to check availability of input devices (keyboard, mouse, gamepad, joystick, touch-screen, Android hardware back button, Android hardware menu button)
- Allow textboxes to contain more lines (by appending to the SAY lump perhaps) so that you can write a lot of text without having to advance the text box a lot
- TMC: The new textbox file format won't have a length limit
- Attack bitset to cause it to chain individually for each target
- Attack bitset to cause two negatives multiplied to result in a positive number instead of negative
- Bitsets to emulate several bugs: 968 (bitset per attack), 945 (bitset per attack), 819 (bitset per attack), 9 (bitset per attack), 486 (bitset per attack), 650, 330, "Shops no longer allow you to buy items if you don't have room for them in your inventory", "If your whole party died outside of battle a game over wasn't triggered", "Didn't trigger [harm tiles] when crossing over them using walkhero with distance more than 1"
- TMC: I had a look at all of these bugs. Ones I don't see any benefit to: bug 819, walkhero-harmtiles bug, being able to waste money at shops. The following can be easily emulated so aren't worth adding: bug 9 (attack elements don't work OOB: just create a separate OOB version of the attack), bug 968 (reset stat to max even if attack fails: use a chain), bug 650 (use non-disabled NPCs instead). Possibly useful effects: 945 (use average party stats for oob attacks), 486 (stored target attacks fail if the target has died), 330 (can sometimes push NPCs through each other). Also, it would be a good idea to add a bitset to add death-checking after setherostat, but that's the opposite of what you suggested.
- Document what several of the bitsets that emulate bugs and old features are actually doing
Idea of configuration file (a plain text file, to allow easily editing; possibly not all such options are needed, or more options might help too; command-line option could be used to override what configuration file to read and possibly also to override individual options):
- ARCHINYM=OHRRPGCE (override the default lump basename)
- TMC: Not needed by anyone
- ARCHIVEDEBUG=YES (whether to create c_debug_archive.txt to archive previous debug logs)
- BACKUPWARNING=YES (whether or not to display the backup warning when the editor is quitting)
- COLORDEPTH= (attempt to set the color depth in bits per pixel; if not set determine automatically (currently always should be 8))
- CONFIRMUNSAVED=YES (show another prompt if you try to quit without saving)
- CUSTOM.FULLSCREEN=NO (try to use fullscreen mode when possible)
- CUSTOM.HEIGHT= (if set, forces editor to use this screen height)
- CUSTOM.MOUSE=YES (if no, disable mouse in editor)
- CUSTOM.WIDTH= (if set, forces editor to use this screen width)
- CUSTOM.ZOOM= (if set, forces editor to use this level of pixel zooming)
- DELETENAMES=NO (if yes, deletes SLICELOOKUP.TXT, TMN, PLOTSCR.LST, and LOOKUP1.BIN and just allows arbitrary numeric values when selecting them in menus instead)
- TMC: No point deleting anything, but ability to type in slice lookup codes would be nice. Maybe tag numbers. Script ID numbers are obsolete (but will always be supported) and not going to do anything to encourage them.
- Deleting them saves disk space and helps if you are performing arithmetic on any of these numbers (including script ID numbers); in such a case you want to number them in a special way rather than just assigning numbers arbitrarily.
- TMC: Adding a feature to save a few KB just for one user is not worth it. I definitely agree that begin able to type in other ID numbers is useful. BTW, whenever I encounter the situation of needing a sequence of scripts (e.g. one per map), I often just use a single script which branches appropriately.
- Deleting them saves disk space and helps if you are performing arithmetic on any of these numbers (including script ID numbers); in such a case you want to number them in a special way rather than just assigning numbers arbitrarily.
- TMC: No point deleting anything, but ability to type in slice lookup codes would be nice. Maybe tag numbers. Script ID numbers are obsolete (but will always be supported) and not going to do anything to encourage them.
- EDITFULLFONT=NO (if yes, edit all 256 characters of the font)
- EDITFULLFORM=NO (if yes, edit all 256 formations)
- TMC: I think what you want is a fast way to add lots (255) formations/NPCs/items/etc. at once. This is a common problem. The way that you can add lots of NPC definitions in the map editor by holding down ENTER and DOWN is intentional; someone wanted to use certain IDs.
- EXPERTDIST=NO (if yes, deletes the distribution menu and distrib.reld)
- TMC: Can't imagine the intention
- EXPERTFILE=NO (if yes, in the editor only, disables the file picker menu and file save prompt and instead uses a common prompt that allows typing an entire file path including extension, and uses tab completion to list files)
- Being able to specify output directory would be nice, as would a way to type in a directory to jump to it, but this isn't a small task
- EXPERTKEYS=NO (if yes, changes keyboard commands in editor to ones which are more difficult to understand but results in faster editing (similar to how vi and much UNIX stuff works))
- EXPERTMENUS=NO (if yes, editor menus are abbreviated to fit more onto the screen at once)
- TMC:Won't be a need if the resolution is increased, if you're talking about horizontal space. Might make the editor font (including size) customisable, which would allow more vertical items
- FADER=AUTO (can change the rate of fading, including can be set instantly)
- GAMMA=1.0 (gamma correct the master palette (for display only; does not affect the contents of the .RPG file, of picture importing/exporting, etc))
- GAME.ANIMSKIP=0 (if nonzero, causes animations to frameskip whenever the controls are locked (including during battle animations))
- TMC: sounds tricky, I suggest just holding shift+tab
- Again this fails if debug keys are turned off, as I mentioned many times before. It needs to somehow allow fast-forward without needing debug keys (like many programs that emulate other game systems do); enabling debug keys may encourage cheating (many people complain about this, not only me) and that is why it should be independent; game should not tell the difference therefore sound effects may have to speed up (or be cut off early) too
- TMC: sounds tricky, I suggest just holding shift+tab
- GAME.DEBUG=AUTO (if set to yes or no, override the debug setting in the .RPG file)
- TMC: a semi-hidden option to override the debug keys setting would be nice
- GAME.FASTFORWARD= (if set to a scancode, GAME.EXE will allow a key to be held down at absolutely any time to increase frameskip and framerate until the key is released)
- GAME.FULLSCREEN=NO (try to use fullscreen mode when possible)
- GAME.MOUSE=YES (if no, game cannot use mouse functions; assumes the computer doesn't have a mouse)
- GAME.MWARP=YES (if no, game cannot change mouse position or mouse limits or do any other tampering with the mouse driver (in case any others are defined later on))
- GAME.SANDBOX=AUTO (currently does nothing; used in case future implementation (although probably a bad idea?) of scripts allowing to: network access, filesystem access, printer, moving and resizing the window at runtime, executing external programs, MAC address, advertisements, telephone call, battery, app store, etc)
- TMC: No plans to ever allow any of that except very restrictive network access and file access (and in-app purchases). Those will definitely need options to configure
- GAME.ZOOM= (if set, forces the game to use this level of pixel zooming)
- HIDEGAMEPAD=NO (if yes, always hides virtual gamepad regardless of setting in general.reld and scripts and whatever)
- TMC: Currently the virtual gamepad options are configured through the java code in sdl-android, which is awkward; more options are probably best put there for now
- HSPEAKARGS= (set what switches are passed to HSPEAK when called from within the editor)
- TMC: niche but would be sometimes useful, although there's probably only 2 options people would actually want to set: -f and -n
- To me looks like the only options that wouldn't be useful when called from within the editor are -k, -y, and -c (these options are useful when called from outside of the editor though)
- TMC: You're right; I'd forgotten that there were other useful ones.
- To me looks like the only options that wouldn't be useful when called from within the editor are -k, -y, and -c (these options are useful when called from outside of the editor though)
- TMC: niche but would be sometimes useful, although there's probably only 2 options people would actually want to set: -f and -n
- LOG= (set where log files belong)
- LONGNAMES=YES (if no, displays actual filenames when picking which .RPG file you want, rather than long names)
- TMC: Both are already displayed, so don't see much need
- But the filenames aren't displayed in the list like other file picker menus
- TMC: Both are already displayed, so don't see much need
- MACRO.menu.functionkey=action (defines editor macros; if F1 is defined as a macro then it is no longer usable for the help screen on affected menus unless F1 is defined as a macro to do the same thing as it normally does anyways)
- MUSICON=YES (if no, don't play any background music)
- OSSPOOF= (if set, causes it to lie to the game about what kind of operating-system/device it is running on)
- TMC: Will be useful, though actually emulating the behaviour of that platform would be quite hard (though very useful for testing games)
- Well, run it in an emulator if you actually need to emulate it; I was only talking about lying and not emulating though (a quick and easy way to fake it if full emulation isn't required; this option may be used if a game improperly refuses to function correctly on a certain platform)
- TMC: Fair enough
- Well, run it in an emulator if you actually need to emulate it; I was only talking about lying and not emulating though (a quick and easy way to fake it if full emulation isn't required; this option may be used if a game improperly refuses to function correctly on a certain platform)
- TMC: Will be useful, though actually emulating the behaviour of that platform would be quite hard (though very useful for testing games)
- PARANOIDKEYS=NO (if yes, forces CTRL and ALT to be filtered in-game and disables the NUM LOCK, SCROLL LOCK, PRINT SCREEN, CAPS LOCK, global function keys, and both Windows logo keys and context menu key from being detected by scripts in-game)
- RELOAD.DEBUG=NO (if yes, extra debug all RELOAD files being read/written)
- TMC: Obviously proactive debug options are a good idea... but are they worth the time? Probably are, I guess. You can define DEBUG_FILE_IO in util.bas to get some quite useful but incomplete info
- RELOAD.INTSIZE=1 (minimum integer size (in bytes) in RELOAD files; smaller ones are padded)
- TMC: Can't see the point, certainly wouldn't add
- Actually, you are right it won't help one bit if the same file contains strings/blobs as well as numbers (and probably all of the RELOAD files contain strings/blobs), or if you are going to add new nodes to anything; the original idea was to avoid requiring external tools to parse the entire file to find where something is (a problem the older binary formats don't have), although this is probably impossible and worthless anyways, so OK.
- Another reason for this, however, would be to use a hex editor to add larger numbers into a RELOAD file, which it would help with more than the above. Still probably not much help though, since better ways probably exist.
- TMC: Can't see the point, certainly wouldn't add
- RELOAD.UTF8=YES (if yes, writes using UTF-8 data type if defined and applicable)
- RTCSPOOF= (if set, spoof the system's date/time)
- SCREENBORDER=NO (set the screen border, if implemented by the backend)
- SCREENFORMAT=PNG (set default screenshot format)
- TMC: Only gfx_directx supports file formats other than .bmp, and even that requires a dll that might not be installed on the system. Would like to support reading/writing pngs
- SMOOTH=NO (turn on/off smooth graphics mode)
- SOUNDON=YES (if no, don't play any sound effects)
- SOUNDPREVIEW=YES (if no, disables previewing sound/music in the file picker)
- SUPPORTURL=http://HamsterRepublic.com/ohrrpgce/support/ (URL to download support programs from; if blank then don't try to download)
- TEMPLATE=ohrrpgce.new (name of file to create new games from)
- TMC:Was once thinking of prompting for a template file to use, but it's pretty pointless as you can just distribute a template as an .rpg
- I have just used the COPY command in the Windows Command Prompt to work-around both this and the inability to enter directory names when creating a new file
- TMC:Was once thinking of prompting for a template file to use, but it's pretty pointless as you can just distribute a template as an .rpg
- TESTWARNING=YES (whether or not to display the warning about live test mode)
- TMC:Yeah, it is annoying, and I think I'll fix that directly rather than add an option to hide the warning
- UNICODE=YES (whether or not editor and text-input should try to use Unicode if possible)
- USKEYS=NO (if yes, forces US keyboard layout)
- VHISTORY=YES (writes the prev_editor_versions node in general.reld; if turned off, deletes that node)
- VSYNC=YES (turn on/off vsync mode)
- VOLUMEINIT=AUTO (initial volume setting, 0 to 255)
- VOLUMECAP=255 (disables any attempt to increase volume beyond this range)
Text RELOAD format idea (called TRELOAD):
- Comment starts with # and goes to end of line (ignored when parsing)
- Integer, with an optional - or + and then number in decimal format, or 0x (or 0X) and hex codes
- Floating point as a number with a . in it; scientific notation also possible
- Identifier as a bare word starting with a letter or underscore and containing letters, underscores, and digits; or any text in " marks, using "" to represent a literal " (the delimiters aren't part of the identifier name) (this is needed to represent empty node names)
- String with ' surrounding it; you can use '' to represent a literal ' (no other escapes are possible)
- Blob, starting with x' or X' followed by hex codes of the blob data; put another ' at the end
- Equal sign = after an identifier put a value in a node
- Braces { and } after a node to include a list of children nodes inside of the braces
- Brackets [ and ] after an identifier to make a list of nodes without specifying their name (these are children of the current parent; it isn't a new parent; the name before the [ becomes the name of all of these nodes) (so values have no delimiters not even equal sign; they can still have child nodes themselves though as normal)
- The sign $ represents a null value; it is only necessary inside of bracketed lists
- Escaping codes?
Ideas about aim math:
- Parameters can be: Attack stat, Defense stat, Attack multiplier, Defense multiplier, Bias, Random variance, Type.
- The stat parameters are a stat (or the constant 1); type is one of (Compare, Percent, Gaussian, Division, Dungeons); others are numeric (including fractions and negatives).
- Random variance is a percentage.
- Attack value is attack stat times attack multiplier, plus or minus a percentage of it as the random variance (for example, if random variance is 75% then it is plus/minus 75% of the value).
- Defense value is attack stat times defense multiplier, plus or minus a percentage of it as the random variance.
- Hit chance depend on type:
- Compare: It hits if (attack+bias) is greater than or equal to (defense).
- Percent: The probability of hitting is ((1-defense)*attack+bias).
- Gaussian: The probability of hitting is ((erf(attack+bias-defense)+1)/2) where erf is the error function.
- Division: The probability of hitting is ((attack+1)/(defense+bias)); it always hits if division by zero results.
- Dungeons: Roll 1d20; if 1 it misses, if 20 it hits, otherwise it hits if (attack+bias) is greater than or equal to (defense-dice).