MGQ3 GC345's patch testing

Summary

 * Alpha 14.02 is out. Please reupload if you have used earlier versions.


 * Warning: if you have installed the new patch version - please use "Extras"/"Autosave Data" before continuing the story. "Load game" can cause glitches.


 * Warning: beta 11 have changed Ilias (1) Monsterpedia entry conditions. You need 50 evaluations from 50 different Chapter 1 enemies. And the count is 0 by default. Sorry.


 * Alpha 14.02 - the patch (0.txt and 2 system files), changes.txt and the test side story (Map). Unpack this archive in the main MGQ3 directory.


 * To uninstall this patch - just delete / move 0.txt from the MGQ3 directory.

Spin-offs list

 * The list supports several pages.
 * Long names are trimmed (with >> symbols).
 * BELs (07h) are displayed as spaces.

Text output

 * You can use @, ~, \, @/ and / at the end of text lines in Spin-off text sections (warning: not in battle messages). "@" is the new line wait state, "@/" waits then continues in the same line, "~" starts a new line w/o a wait state, "/" just continues the same line w/o a wait state. "\" forces the default new page wait state.
 * Warning: "@/" and "/" may add 1 space because wait states are aligned to the full-width characters grid.


 * Warning: the word wrap can add 2 spaces before a wait state. Use manual wrapping to fix this.


 * Warning: use "@", "~", "@/" and "/" with caution. You can break the 4-rows limit (3 rows for the battle itself) and the game will crash.


 * The game automatically deletes all ending spaces (until a first letter or a wait state). Example: ="test @    " and ="test @" results are identical.
 * The game automatically deletes 1 space before a wait state. Example: ="test \" and ="test\" results are identical.

Effects

 * Drawing commands ("bg", "sp" (5 variants), "sp_del", "sp_del_multi", "face", "vsp", "vsp_multi", "syasei" (5 variants), "syasei2", "sp2" (5 variants), "sp2_del", "vsp2", "strsp", "win_set", "win_del", "win2_set", "win2_del") support plugin effects. Use 99 as the value. The syntax is ,99, ,.
 * You can use "1", "2", "3" and "4" as library name aliases:
 * 1 uses "system\breakup.dll/urb" - standard monster sealing.
 * 2 uses "system\breakup.dll/lrB" - angel sealing.
 * 3 uses "system\lngtwave.dll/vwi" - wave like Ilias in a dreams.
 * 4 uses "system\trvswave.dll/h" - Black Alice's wave.
 * Examples: 100="bg,bg045,99,1000,3", 100="sp_del,0,99,500,system\breakup.dll/lrB".


 * Warning: the start path is the main MGQ directory.


 * Drawing commands support mask fade and mask crossfade effects. Use 15 or 18 as the value. The syntax is ,15, , for the mask fade and ,18, , for the mask crossfade.
 * Example: 100="sp_del,-698,18,3000,system\mask01.jpg".


 * Warning: the  start path is the MGQ directory. The game not adds the filename extension if the extension isn't present.


 * You can use all sp, sp2 and syasei variants with the different opacity. The default value is 255. To change the opacity - use the  ="change,opacity,X" command. Each sp, sp2 or syasei command resets the opacity value back to the default value (255). The "change,opacity,X" command works even before the "battle" command.
 * Warning: the "syasei2" command uses 1 opacity value for both sprites.


 * You can use the monocro_on command with any basic color. The new syntax is  ="monocro_on[, ]". #888888 is used by default (if the parameter is absent).
 * The flushout command draws the flushout effect. The syntax is  ="flushout, ".

Sprites

 * Sp_alpha, sp_leftup and sp_rightup commands. Are added because the "sp" command always uses the alpha transparency mode for NSA files and the default (leftup) transparency mode for custom files. These commands always use the defined mode (alpha, leftup, rightup). The syntax is identical to the "sp" command syntax ( =" ,,,,, [, [, ]]").
 * The sp_non_alpha command can use the "sp" command syntax to use the copy transparency mode always and use any  and  (the old syntax uses the copy transparency mode for NSA files and the default (leftup) transparency mode for custom files plus  and  are always 0). The old syntax ( ="sp_non_alpha,,, [, ]" with from 1 to 14) is still supported for the compatibility.
 * Sp2_non_alpha, sp2_alpha, sp2_leftup, sp2_rightup commands - same as above but for advanced sprites. The syntax is identical to the "sp2" command syntax.
 * 4 more variants of the "syasei" command. Syasei_non_alpha, syasei_alpha, syasei_leftup, syasei_rightup. Again the only difference is the transparency mode. The syntax is identical to the "syasei" command syntax.
 * The strsp command creates and draws a sprite from the given text line. The syntax:  ="strsp,,,<sprite_x>,<sprite_y>,<font_size>,<x_spacing>,, , [, [, [, ]]]".
 * <text_line> - it is what you want to convert to the sprite. Warning: if this line includes commas - put \ at the start and the end of the line.
 * <sprite_x>, <sprite_y> - coordinates of the sprite upper-left corner.
 * <font_size> - font height in pixels.
 * <x_spacing> - character interval (in pixels).
 * - font parameters. 0 - no shadow and no boldface, 1 - shadow and no boldface, 2 - boldface and no shadow, 3 - shadow and boldface.
 * - sprite color in the "#RRGGBB" format. You can use "white" as the "#FFFFFF" alias.
 * - optional, the sprite changes its color to this value if the sprite button is active.
 * , and - draw effect parameters. The default effect is 1 (instant draw).
 * Example: 100="strsp,\Yeah, right!\,0,0,20,0,3,#FF4444,white" creates red "Yeah, right!" text in the upper-left corner. The font size is 20 pixels. The text will change its color to white after you move cursor to it (if a button was linked with the spbtn command).


 * Vsp and vsp2 commands hide/show sprites/advanced sprites. The syntax:  =" ,<sprite_number>,0, [, [, ]]" to hide and  ="vsp,<sprite_number>,1, [,duration>[, ]]" to show a sprite.
 * The sp_del_multi command deletes several sprites at once. The syntax:  ="sp_del_multi,<start_number>,<end_number>, [, [, ]]".
 * The vsp_multi command hide/shows several sprites at once. The syntax:  ="vsp_multi,<start_number>,<end_number>,0[, [, [, ]]]" to hide and  ="vsp_multi,<start_number>,<end_number>,1[, [, [, ]]]" to show.
 * The move_sp command is the move command analog for non-advanced sprites. The syntax is  ="move_sp,<sprite_number>,<x_offset>,<y_offset>,<opacity_offset>,, ".

Sound

 * The loopbgm command is added. The syntax is  ="loopbgm,, ". This comand plays the part once then loops the part.

Support

 * Win2_del and win2_set commands. The 1st one deletes the story text window, the 2nd one - restores it. The syntax is  =" [, ,[ ,[ ]]]". The default effect is 1 (instant draw).
 * Win_set and win_del commands support all drawing effects. The default effect is 1 (instant draw). The syntax is similar to the win2_set syntax.
 * The element command supports artifical spirits. Use 5 for Zylphe, 6 for Gnomaren, 7 for Grandine and 8 for Gigamander.
 * The element command uses correct sprites for Spirits (similar to the main story).
 * The face command draws enemy sprites for the selected stance. This command supports multienemy battles and automatically reacts to some triggers (uses happy stance if a hero surrenders or hero HPs are very low etc). The syntax is  ="face, [, ,[ ,[ ]]]", is 1 for normal, 2 for happy or 3 for sad stances. The default effect is "10,500". This command works only after the "battle" command.
 * Name and skillname commands automatically delete 1 ending space.
 * The cls_text command clears text in the text window. No arguments are needed.
 * Hide_text and show_text commands hide and shown the text window itself. No arguments are needed.
 * The delay command - same as the wait command but can be skipped with FF/click. The syntax is  ="delay, ".
 * Enemylife and enemykaihuku commands to damage/heal enemy. "Enemylife" flashes the default enemy sprite ("0") three times, prints "<hero_name> deals damage!" and actually changes enemy HPs/lifebar if the battle was started (after the "battle_st" command). "Enemykaihuku" prints "<enemy_name> recovered HP!" and actually changes enemy HPs/lifebar if the battle is on. The syntax:  ="enemylife, [, ]" and  ="enemykaihuku, [, ]".
 * If is absent - the exact value will be dealed/recovered. Otherwise the value will be random number between and.

Program logic

 * Gotoline ( ="gotoline, ") and var_jumpline ( ="var_jumpline, ") commands jumps to the line in the same section. "Var_jumpline" (same as "var_jump") works only if %mon_labo_var_flag was set by the "var_cpa" command (the var_cpa equation was true).
 * The spbtn command. Uses sprite as a button and jumps to the linked story.ini section. The syntax is  ="spbtn,, ".
 * - the button will be linked to this sprite and will be used if you left click this sprite.
 * - the section name in story.ini.
 * you can use "lclk" and "rclk" as sprite numbers. As the result - the 2nd variant jumps to the defined section if you press the right mouse button. The 1st one will be used if you press the left mouse button and the cursor is not above any of defined sprite buttons.
 * The "spbtn" command finishes the current story.ini section, all strings except others "spbtn" commands will be ignored.


 * Spbtn automatically deletes text window. Use the "win2_set" command to return it.


 * Warning: you must have 1 non-empty command after the last spbtn. Or the game will freeze. The best way is to use the "end" command.


 * 10 more variables ("v10" - "v19") can be used with all "var_" commands.
 * The var_out2 command is the var_out analog. But the output uses half-width digits. Plus this command supports all 5 wait states (@, \, ~,@/ and /, similar to text strings). The syntax is  ="var_out2,<begin_text>,<vX>,<end_text>".
 * The var_dice2 command is the var_dice analog but the lowest value can be any value (var_out always uses 1). The syntax:  ="var_dice2,<vX>,<lowest_value>,<highest_value>".
 * Var_90110 gets a value and multiply it to the random number between 0.9 and 1.1. The syntax:  ="var_90110,<vX>[, ]". If is absent then the command get the <vX>value as the source.
 * The var_damage command gets the damage value from the standard damage subroutine of MGQ (applies hero level, enemy defence, Gnomaren and Grandine enemy defence bonus, then multiply to the random value between 0.9 and 1.1 and add 1 if the result was 0). Used for custom attacks/skills. The syntax is  ="var_damage,<vX>,<base_factor>".
 * The var_damage2 command is similar to the var_damage command but this command only apply Gnomaren/Grandine bonus and adds 1 if the result was 0. The syntax is  ="var_damage2,<vX>,<base_factor>".

Game variables

 * The change command can be used to change many in-game values on-the-fly. Its syntax is  ="change,, [, ]". This command works only after the "battle" command except the ="change,opacity,X" variant.
 * Supported aliases:
 * "Kousan_anno1", "onedari_list1", "mogaku_anno1" - "mogaku_anno4", "mogaku_sel1" - "mogaku_sel5", "mogaku_dassyutu1, "mogaku_dassyutu2", "mogaku_earth_dassyutu1", "mogaku_earth_dassyutu2", "mogaku_kaisin1", "mogaku_kaisin2", and "tatie1" - "tatie4" - change associated battle section strings.
 * "Tatie1b" - "tatie3b", "tatie1c" - "tatie3c" and "tatie1d" - "tatie3d" are used for multienemy (multisprite) battles.
 * "Name" changes the current enemy name set by [data]\name= and [data]\short_name= keys.
 * "First_sel1" - "first_sel10" switch 10 boolean keys. The syntax is  ="change,first_selX" for activating the key and  ="change,first_selX,0" to reset it. These 10 keys are used in custom dialogues only.
 * "Skilla1" - "skilla8", "skillb1" - "skillb4", "skillc1" - "skill4", "skilld1" - "skilld4", "skilltame0", "skillcounter0" and "skillcounter2" - "skillcounter5" changes the odds ("skill_kakuritu") for associated skill.
 * "Sinkou", "customattack", "customskill", "customguard", "customwait" and "customstruggle" switch sections for triggers and customized attacks/skills/guards/waits/struggles. See below...
 * "Skill_sub" changes the result of "commonattack", "commonattack1", "commonskill" and "commonskill1" commands. See customized attack/skills.
 * All below aliases can be used as var_ld source.
 * "Monster_x", "monster_y", "tukix", "alice", "keigen", "earth_keigen", "kaihi", "alice_skill1" - "alice_skill3", "skill", "skill_wind", "skill_earth", "skill_aqua", "skill_fire" and "tikei" - change corresponding battle section values.
 * "Monster_xb", "monster_xc", "monster_xd", "monster_yb", "monster_yc", "monster_yd" and "tekikazu" - change multienemy (multisprite) battles parameters.
 * "Henka1" - "henka3" changes HP levels for 3 HP traps.
 * "Kousoku" changes the bind level and draws bind sprite/bind icon. Can be used with the "0" (changes sprites but not redraws the screen) and "-1" (only changes the value) methods. Enemy will use skillb1 - skillb4 with %kousoku=1, skillc1 - skillc4 with %kousoku=2 and skilld1 - skilld4 (constantly) with %kousoku=3.
 * "Status" changes hero status and draws the corresponding icons.
 * "Action" changes the result of "commonattack", "commonattack1", "commonskill" and "commonskill1" commands. See customized attack/skills.
 * "Kousoku_type" changes the bind type ("0" for a standard bind, "1" for a "charged" bind, "2" for a "special" bind).
 * "Wind", "earth", "aqua" and "fire" change active Spirits and draws spirit icons. Can be used with "0" (no redraws) and "-1" (only changes the value) methods.
 * "Kadora_damage". Now you can continue Quadruple Giga even if an enemy damages you. Or stop Quadruple Giga manually.
 * "Charge" controls the charged attack flag (the %bougyo_attack variable).
 * "Kaihi_el" changes the value of hero's accuracy versus Zylphe. 0 - always miss, 100 - always hit.
 * "Damage_el" changes the multiplicator for hero's damage if Gnomaren or Grandine are active. 100 - no penalty, 0 - can't damage.
 * "Earth_el" changes the value for Zylphe damage penalty versus Gnome. 0 - no penalty, 100 - enemy attacks are nullified.
 * "Fire_el" changes the value for Grandine damage penalty versus Salamander. 0 - no penalty, 100 - all damage is nullified.
 * All below aliases can be used as var_ld source and support "+" (add the value) and "-" (sub the value) methods:
 * "Mp" and "max_mp" control SPs current/maximum values and redraws SP icons. The game now supports any SPs value (16 and above SPs use numbers not icons).
 * "Mylife" and "max_mylife" control hero current/maximum HPs and redraws the hero HPs bar (with the "10,500" effect).
 * "Enemylife" and "max_enemylife" control enemy current/maximum HPs and redraws the enemy HPs bar (with the "10,500" effect).
 * "Wind_turn", "earth_turn", "aqua_turn" and "fire_turn" changes number of turns to spirit canceling.
 * "Genmogaku", "kousoku_hp" and "abairitu" change bind attributes.
 * "Status_turn" and "poison" change status attack attributes.
 * "Counter" controls an enemy couterstance.
 * "Counta1" - "counta8", "countb1" - "countb4", "countc1" - "countc4", "counttame0" and "countcounter0" set colldowns for corresponding skills. You can't change the limit (set with the skill_count= key) but you can change the current value.
 * "Enemy_wind", "enemy_earth", "enemy_aqua" and "enemy_fire" control Artifical Spirits. Artifical Spirits icons aren't displayed, you must draw them manually.


 * The var_ld command can use 3 more aliaces except above ones:
 * "Kousan" checks surrender/request level. Surrender sets %kousan=1, Requests set %kousan=2, overkill sets %kousan=3.
 * "Hit" is used for enemy attack linking. See below.
 * "Move".

V0 - v19 as arguments

 * You can use "v0" - "v19" as numeric parameters. The game replaces the "vX" string to the "vX" value.


 * Supported commands are: "wait", "delay", "se", "se_stop", "flash", "quake", "flushout", "gotoline", "movie", "element", "var_ld", "var_cal", "var_cpa", "var_jumpline", "var_dice", "var_dice2", "var_90110", "var_damage", "var_damage2", "damage", "kaihuku", "enemylife", "enemykaihuku", "change", "spbtn".


 * Custom dialogues "first", "second", "jumpfirst", "jumpfirstline" commands support this feature too.

Autoreplacing BELs to spaces

 * The patch always displays BELs (07h) as spaces for text-to-sprite commands. The feature is added to "name", "skillname", "select", "strsp" and "listX" commands.

Enemy attacks

 * The vanilla game supports 22 attacks and 5 attack queries:
 * the unbinded query with 8 unbinded attacks ([skilla1] - [skilla8]), the counterstance start ([skillcounter0], the charge ([skilltame0]) and the charged attack ([skilltame1])
 * 2 bind queries with 4 bind attacks for each ([skillb1] - [skillb4] and [skillc1] - [skillc4]).
 * the OHKO query with 4 attacks ([skilld1] - [skilld4]).
 * the counterstance query with [skillcounter0] as the "attack" and the counterstance end.
 * the counter ([skillcounter1]).
 * The vanilla game supports the very basic request routine:
 * the requested skill is used continuously except "a<X>", "tame1" and "counter1" skills with the undefined skill_damage1_1= key (used once then an enemy attacks with the defined routine).
 * if you request a binded skill - the game breaks the bind if the requested skill query and the current bind query aren't same. So OHKO request always break binds.
 * counterstance and charged statuses are ignored.
 * the game can fail re-binding (the game not tries "a<X>"->"c<X>" for "b<X>" requests, "a<X>"->"b<X>" for "c<X>" requests, "a<X>"->"b<X>"->"c<X>" and "a<X>"->"c<X>"->"b<X>" for OHKO requests).

New attacks

 * The full counterstance attacks query is added. It uses [skillcounter2] - [skillcounter5] skills. These skills can't be a binding skills (binding keys are ignored). "Skill_kakuritu=" and "skill_count=" keys are supported.
 * Warning: if the [skillcounter2]/skill_kakuritu= value is 0 or isn't defined - the game uses the old "counterstance attack" method (skill_sel_counter_midX= and skill_anno_counter_midX= keys in the [skillcounter0] section).


 * The [skilltame2] skill is added. If this skill is detected - it will be used if a charged attack misses.
 * The win skillname is added. This "skill" ends the battle with the hero's victory. Can be used with HP traps, triggers and followups (except followup_instant= and skill_finish= keys). Example: henka1="1000,win".
 * The pass skillname is added. This "skill" make an enemy pass 1 turn. Can be used with HP traps, triggers and followups (except followup_instant= and skill_finish= keys). Example: followup_guard="pass".
 * Now the game supports unlimited number of skills for all 5 queries. These skills not support skill_kakuritu= and skill_count= keys. Use HP traps, the preemptive= key, triggers, links and instant links to start these attacks.

The convention

 * All enemy attacks must use the format for names and the [skill  ] format for skill bodies. <Query> can be "a", "b", "c", "d", "counter" and "tame" only. <Number> is any positive for "aX", "bX", "cX" and "dX" skills; "0" or any positive for "counterX" skills and "0", "1" or "2" for "tameX" skills.
 * Warning: if you try to use an incorrect name - the Spin-off will stop (with the debug message).


 * Followup_instant= and skill_finish= keys, "execute" (link) and "execute" (request) commands must use correct skills for current bind and counterstance statuses:
 * "counterX" if an enemy in the counterstance.
 * "bX" if a hero is binded and the 1st bind query is active.
 * "cX" if a hero is binded and the 2nd bind query is active.
 * "dX" if the OHKO query is active.
 * "aX", "counter0", "counter1", "tame0", "tame1", "tame2" for the free stance (no counterstance, no bind).
 * Warning: if you try to use an incorrect name - the Spin-off will stop (with the debug message).


 * An enemy attack is defined if any of skill_name=, skill_kouka=, skill_kakuritu= or skill_damage1_1= keys aren't empty.

Enemy attack queries

 * Original japan version and Rogue's patch use the very strange attack selection method:

rnd2 %ransu,1,100 if %ransu<=%tuika_skilla1 && %tuika_owaza_count1a>=%max_owaza_count1a && %tuika_skilla1>0 gosub *tuika_a1:goto *common_main sub %ransu,%tuika_skilla1 if %ransu<=%tuika_skilla2 && %tuika_owaza_count1b>=%max_owaza_count1b && %tuika_skilla2>0 gosub *tuika_a2:goto *common_main sub %ransu,%tuika_skilla2 if %ransu<=%tuika_skilla3 && %tuika_owaza_count1c>=%max_owaza_count1c && %tuika_skilla3>0 gosub *tuika_a3:goto *common_main sub %ransu,%tuika_skilla3 if %ransu<=%tuika_skilla4 && %tuika_owaza_count1d>=%max_owaza_count1d && %tuika_skilla4>0 gosub *tuika_a4:goto *common_main sub %ransu,%tuika_skilla4 ...
 * The first trouble - cooldowns use the >= equation. So - there is no difference between skill_count="0" and skill_count="1". And the game uses "once per <skill_count> turns" condition, not the "<skill_count> turns between repeats" one. Plus enemy attacks with cooldowns can be used in the 1st turn.


 * The second trouble - if a skill can't be executed because of the coodown - next skill chances are enlarged. The cause is - sub %ransu,tuika_skillXX command is executed always, even if a skill is cooldowned. And the effect is cumulative.


 * The third trouble - the counterstance cooldown (%tuika_owaza_count4b) increases after each turn. Story battles stop the increment if a hero is binded in this turn.


 * And the last one - cooldowns aren't resetted after you escape from a "special" bind.


 * [data]/query_new="2" forces the fixed enemy attacks query. It still uses the >= equation but skill chances are constant.
 * [data]/query_new="1" is similar to the story battles query. It uses the > equation and constant skill chances. The enemy skills order is [skillcount0], [skilltame0], [skilla1] - [skilla8]. After you escape from a special bind - cooldowns are resetted to 0. The [skillcount0] count not increases if a hero is binded.
 * The last difference - normal and charged binds not set the bind length to 0 by default. If you not define skill_mogaku= and skill_mogaku_earth= keys - %genmogaku value not changes.


 * Query_new="1" is recommended.

General changes

 * Query_new="1" supports pass turns for both bind queries. If all enemy attacks in the current query have active cooldowns - an enemy skips 1 turm (the original game just freezes).
 * The counterstance query ([skillcounter2] - [skillcounter5]) uses [skillcounter0] as the "attack" if all cooldowns for counterstance attacks are active.
 * [Skillcounter1], [skilltame1] and [skilltame2] attacks can't miss. Skill_aqua= and skill_wind= keys are ignored for these attacks.

General changes for requests

 * The counterstance status is now checked. If you request "counter<X>" (X>1) in the normal stance - the game uses [skillcounter0] once (starts the counter) then try the requested skill. If you request anything except "counter<X>" (X>0) in the counterstance - the game uses [skillcounter0] once (finish the counter) then try the requested skill. [Skillcounter1] can be used in both stances so [skillcounter0] isn't forced.
 * The charge status is now checked. If you request [skilltame1] and the previous enemy attack wasn't [skilltame0] - [skilltame0] is used once. For all others requests the charge status is resetted.
 * Only normal, drain and level drain attacks can be used continuously in requests. All others types of attacks are used once then an enemy returns to the defined attack pattern.
 * Undefined skill_damage1_1= key forces the "use once" behavior for all requests.
 * The skill_onedari_use= key cab be used to fully control the request routine (see below).

Custom dialogues

 * By default skill_selX=/skill_annoX=/skill_selxX= keys just define a text line which will be printed. You can't change the nametag, you can't use more than 2 text lines, you can only print text. A custom dialogue jumps to a section in story.ini when you can use almost all supported commands. Then returns and continues the enemy attack. In other words a custom dialogue "length" is equal to 1 text key.


 * To start a custom dialogue - use "!<section_name>" as the key value. The game goes to the [<section_name>] in current story.ini.


 * If you need to print something starting from "!" - use "!!".


 * You can start custom dialogues with these keys: skill_selX= ([hero_skillX] and [skillX] sections), skill_annoX_X=, skill_selxX=, skill_selmissX=, skill_sel_counter_midX=, skill_sel_counter_endX=, skill_anno_counter_midX=, skill_anno_counter_endX=, mogaku_dassyutu1=, mogaku_earth_dassyutu1=, mogaku_kaisin1=, half_s1=, kiki_s1=, vic_sel1=, vic_anno1=, kousan1=, skill_onedari1=, skill_lose_start1=, skill_lose_anno1=, skill_lose_sel1=, mogaku_annoX=, mogaku_selX=, skill_kousoku_anno0=, skill_kousoku_anno=, skill_kousoku_grandine=, skill_status_anno=, skill_status_mid=, skill_status_end=, skill_windanno=.


 * You can start a special version of custom dialogues with these keys: kousan_anno1=, onedari_list1=, skill_onedari_use=, followup_instant=, skill_aqua= (not in the [ruka] section), skill_wind= (not in the [ruka] section).


 * No custom dialogues support for keys: hero_loseX_X=, hero_lose_lvdrain=, hero_lose_konran=, hero_attackX=, hero_kaisinX=, hero_missX=, hero_stbladeX=, hero_mogaku_hitX=, hero_mogakuX=, hero_mogaku_winX=, hero_mogaku_earthX=, hero_mogaku_earth_winX=, hero_unchargeX=, hero_freedomX=, hero_konran_X=, hero_kikiX_X=, skill_tikei=, skill_status_hit=.


 * Warning: if you define 2 similar keys - custom dialogue will not start, just 2 text lines will be printed. You must define 1 or more than 2 keys. P.S. [Hero_skillX]\skill_selX is the exception, if 2 keys are defined - it just selects 1 of defined keys.


 * Custom dialogues work different for kousan_anno1= and onedari_list1= keys. After dialogue section is finished - the game returns to the hero's commands menu. This is used for special surrender/requests.


 * Custom dialogue in the skill_onedari_use= key starts an advanced request (see below).


 * Custom dialogue in the followup_instant= key starts an advanced link (see below).


 * Custom dialogues in skill_aqua= and skill_wind= keys (in enemy attacks) start an advanced evade (see below).


 * Custom dialogues can be HP traps (henkaX=) or triggers (sinkou_listX=) targets.


 * Customized attacks, skills, guards and waits ([customattackX], [customattackX]\listX=, [customskillX]\skillX=, [customguardX] and [customwaitX]) are custom dialogues too and use similar syntax.

Custom dialogues commands

 * These commands: end, name, skillname, bg, sp, sp_non_alpha, sp_alpha, sp_leftup, sp_rightup, sp_del, sp_del_multi, face, vsp, vsp_multi, wait, delay, bgm, loopbgm, bgm_stop, se, se_stop, syasei, syasei_non_alpha, syasei_alpha, syasei_leftup, syasei_rightup, syasei2, syasei_clear, flash, monocro_on, monocro_off, quake, flushout, select, goto, gotoline, sp2, sp2_non_alpha, sp2_alpha, sp2_leftup, sp2_rightup, sp2_del, vsp2, move, move_sp, movie, element, var_ld, var_cal, var_cpa, var_out, var_out2, var_jump, var_jumpline, var_dice, var_dice2, var_90110, var_damage, var_damage2, damage, kaihuku, enemylife, enemykaihuku, change, strsp, cls_text, hide_text, show_text can be used w/o limitations. So you can't use win2_set, win_set, win2_del, win_del, restart, anten, battle, battle_st, overkill_end and spbtn commands.
 * First and second commands are used to change printed lines if the dialogue used more than once. The syntax is  ="first,, " and  ="second, , ". <Key> is the boolean switch number, from 1 to 10. The "first" command prints only if the switch isn't activated. The "second" command prints only if the switch was activated. To manipulate switches - use the "change,first_selX" command.
 * Jumpfirst ( ="jumpfirst,, ") and jumpfirstline ( ="jumpfirst, , ") commands are var_jump/var_jumpline analogs but use one of 10 boolean switches. These commands go to or line if the boolean key with the number isn't activated.
 * Warning: I repeat, jumps only if the key isn't activated.


 * There are some commands (list1, commonattack, commonattack1, commonskill, commonskill1) used in customized hero attacks / skills only. See below.
 * The name command works differently in advanced links. See below.
 * The execute command is used (differently) in advanced links, advanced requests, triggers, custom attacks, custom skills and advanced evades. See correcponding sections.
 * The finish command is used for advanced wind multi-evades). See below.
 * And of course you can just print text. "@", "~", "\", "@/" and "/" wait states are supported.

[data]

 * The game uses type="0" and vic_effevt="0" if these keys aren't defined.
 * The vic_effevt="3" support is added. It replaces the "was/were defeated!" message to the "was/were chased away!" message.
 * The vic_effevt="4" support is added. It supress the fanfare sound and the "was/were defeated/chased away!" message.
 * The type="2" Replaces "was defeated/was chased away" to "were defeated/were chased away".
 * The query_new= key forces the new enemy skills order. See above.
 * The short_name= key is added. It's value used as the monster name after the battle starts. As the example - [data]\name="Archangel Ariel", [data]\short_name="Ariel", [data]\type="0". Then we have the "Archangel Ariel appears!" message at the battle start but "Ariel" as the nametag.
 * The game re-reads the [data]\name key before the victory routine.


 * The difficult= key is added. The syntax is diffficult="1". Sets the difficulty level to Hard. The only difference is 10% chance to fail a successful struggle.
 * The preemptive= key is added. The syntax is preemptive="<skill_alias>". <Skill_alias> can be "aX", "tame0", "counter0", X>0. Enemy uses [skill<skill_alias>] before hero's first turn.
 * Henka1=, henka2=, henka3= keys set 3 HP traps. See below.
 * Tekikazu=, tatie1b= - tatie3b=, tatie1c= - tatie3c=, tatie1d= - tatie3d=, monster_xb=, monster_xc=, monster_xd, monstery_b=, monster_yc=, monster_yd= keys are added for the multi-enemy (multi-sprite) battles support. See below.
 * BELs (07h) are displayed as spaces for name= and shortname= values.

[ruka]

 * You can use name="1" (in the [ruka] section) to play as Alice and name="2" - name="5" to play as Alma Elma/Tamamo/Erubetie/Granberia. By default Heavenly Knights have constant HPs/SPs maximums, Alice have the constant HPs maximum but SPs are level related.
 * The tukix= key works ok now.
 * The hp= key overloads the maximum of HPs for hero.
 * The mp= key overloads the maximum of SPs for hero. 16 and more SPs are displayed correctly now.
 * BELs (07h) are displayed as spaces for the name= value.

[anno]

 * Kousan_anno1= and kousan_anno2= keys are added. Used when hero have surrendered. "Xxx completedly drops all resistance" is used by default.
 * If mogaku_anno1= - mogaku_anno4= keys aren't defined - there is no extra wait states in the struggle routine.
 * The mogaku_anno2= content is printed when you escape the normal bind w/o Gnome (was always "struggles intensely, and breaks free!"). Works for the main story batles too.

[hero_sel]

 * Hero_attack1 - hero_attack3 keys are used only with standard attack and self-damage (when confused). Hero_mogaku1 - hero_mogaku3 keys are used only when you try to break a bind w/o Gnome. New keys are added:
 * hero_kaisin1= - hero_kaisin3= - used with critical hits.
 * hero_miss1= - hero_miss3= - used if hero missed.
 * hero_stblade1= - hero_stblade3= - used for Blade of Still Water.
 * hero_mogaku_hit1= - hero_mogaku_hit3= - used if you try to attack in a standard bind.
 * hero_mogaku_win1= - hero_mogaku_win3= - used when hero breaks a standard bind w/o Gnome.
 * hero_mogaku_earth1= - hero_mogaku_earth3= - used if you try to break a bind with Gnome.
 * hero_mogaku_earth_win1= - hero_mogaku_earth_win3= - used if you break a bind with Gnome.
 * hero_uncharge1= - hero_uncharge3= - used when you break a special bind (kousoku_type=1).
 * hero_freedom1= - hero_freedom3= - used when you break a special bind (kousoku_type=2).
 * hero_konran4= - hero_konran6= keys are added, so now you can customize up to 6 confuse messages.
 * The game uses default messages if custom ones aren't defined in [hero_skillX] and [hero_sel] sections.
 * You can define not all 3 (or 6) custom messages, the game will use defined ones only.

[hero_skillX]

 * Customized hero announcements work always (even if you not define [ruka]/name).
 * Customized hero announcements work for all skills ("Meditation" ([hero_skill4]), "Quadruple Giga" ([hero_skill15]), "Flash Kill" ([hero_skill19]), Quad Spirit Summon ([hero_skill25])).
 * All 5 levels of Sylph and Undine use [hero_skill7] and [hero_skill10] now.
 * The skill_tikei= key was added in the [hero_skill5] section. Demon Skull Beheading is activated if this key is defined. Use "1", "2", "3", "4", "5" to select the predefined message or set the message completely.
 * 1 - " climbs the mast and jumps off from the top!"
 * 2 - " climbs a tree and jumps off from the top!"
 * 3 - " climbs onto the ceiling and jumps off!"
 * 4 - " climbs a pillar and jumps off from the top!"
 * 5 - " climbs a building and jumps off from the top!"

[onedari]

 * You can use any enemy skill in the request menu (the old routine can use "a1" - "a8", "b1" - "b4", "c1" - "c4", "d1" - "d4", "tame1" and "counter1" only). Use the [onedari]\onedari_listX="<skill_name>,<skill_alias>" syntax. This method forces the [skill<skill_alias>]\skill_onedari_use= key.

HP traps

 * You can define up to 3 "if enemy HPs are lower of value - do something once" triggers.


 * The syntax: henkaX=", [, ]" in the [data] section. "X" can be "1", "2" or "3".


 * - enemy HPs. Warning - the condition is "lower of value" not "lower or equal of value".
 * - can be an enemy attack name ("aX", "bX", "cX", "dX", "counterX", "tame0", "tame1", "tame2", "win", "pass") or a custom dialogue link ("!<section_name>").
 * can be "1" or "2". Mode 1 and 2 force the HP trap even if enemy HPs are 0 after your attack. Mode 2 not resets the HP trap, it will execute until you manually disable it (with the "change" command).
 * If you use a custom dialog as the henkaX= key target - you can use the execute command as the custom dialog finisher. This command ends the custom dialog and sets the enemy attack link. The syntax is  ="execute, ", must be "aX", "bX", "cX", "dX", "counterX", "tame0" - "tame2", "win" or "pass".


 * Warning: HP traps, triggers, links, custom attacks and custom skills share the "enemy attack link" value. So only the last change will be applied.


 * Warning: only 1 HP trap can be active. If the henka1= key is active - henka2= and henka3= keys are ignored. If the henka2= key is active - the henka3= key is ignored. HP traps deactivates after applying (if isn't "2") or with the "change,henkaX,0" command.


 * Warning: HP traps are active only if hero isn't binded. Use "enemylife" / "enemylife1" triggers if you need the check for a binded state.

Multi-enemy (multi-sprite) battles

 * By default the game uses the sprite number 0 (700) for the enemy. There are 4 stances for the enemy (defined with [data]\tatie1= - [data]\tatie4= keys) and 2 coordinates (defined with [data]\monster_x= and [data]\monster_y= keys).


 * But the main story supports up to 4 sprites. Some examples are: Angel Soldiers fight, Akaname fight etc.


 * I have added this feature to my patch.


 * To use this feature - define the tekikazu= key in the [data] section. Tekikazu="2" uses 2 sprites (0 and 2), tekikazu="3" uses 3 sprites (0, 2 and 4) and tekikazu="4" uses all 4 sprites (0, 2, 4 and 6).


 * Then you must define 3 stances and 2 coordinates for the corresponding sprite with [data] section keys:
 * tatie1b=, tatie2b=, tatie3b=, monster_xb= and monster_yb= define normal / happy / sad resource and coordinates of the upper-left corner for the 2nd enemy sprite.
 * tatie1c=, tatie2c=, tatie3c=, monster_xc= and monster_yc= for the 3rd.
 * tatie1d=, tatie2d=, tatie3d=, monster_xd= and monster_yd= for the 4th.
 * The game will automatically draws all enemy sprites at the battle start and will change all sprites if happy/sad stance was used.


 * You can change above keys with the "change" command.


 * Warning: the binding stance (tatie4) not have the multi-enemy support so you must process it manually.


 * Warning: the victory effect will be used only on the 1st enemy sprite (0). If you want to seal/chase away multiple enemy sprites - use custom dialogue for the [sel]\vic_sel1= key and add "sp_del,X,0" commands for the corresponding enemy sprite.

Full path support for resources

 * There were 2 methods to link a resourse file in the game. The 1st was "resource name only", the 2nd - "file name with the extension".


 * Both methods have flaws. The 1st one uses fixed locations (se\ for sound files, bgm\ for music etc). As the example - you can't use standard icons, effects etc (effect\ and system\), you can't use NSA voices (voices\).


 * The 2nd one can use files only in the current story.ini directory. So if you have several battles - you must copy resources to all subfolders.


 * Now the 2nd method is updated:
 * Use "\" to force the search point to the main game directory. Example -  ="se,1,\voice\alice1_01.ogg" plays this .ogg from the .NSA voice directory.
 * Use "." to force the search point to the main story.ini directory. So if your Spin-off have subfolders (like Cecil's Quest) - you can store all resources in 1 folder.


 * Example - you have the main directory Test with 2 subfolder for battles (Test\Fight1 and Test\Fight2). Each have a separate story.ini. And you want to load the file bg001.bmp from the Test folder when you have started the first fight. Use  ="bg,.bg001.bmp,10,500"


 * This feature was added for these keys: tatie1= - tatie4=, haikei=, music=, skill_se1= - skill_se9=, skill_ct1=, skill_ct1_1= - skill_ct1_9=, skill_ct2=, skill_bukkake=, skill_counter_tatie=.


 * This feature was added to these commands: "bg", "sp", "sp_non_alpha", "sp_alpha", "sp_leftup", "sp_rightup", "bgm", "loopbgm", "se", "syasei", "syasei_non_alpha", "syasei_alpha", "syasei_leftup", "syasei_rightup", "syasei2", "sp2", "sp2_non_alpha", "sp2_alpha", "sp2_leftup", "sp2_rightup", "movie".


 * Now all keys are independent. As the example you can use the "name only" method for the "tatie1" key and the "name with extension" method for "tatie2" key simultaneously.

Triggers

 * Triggers are used to program enemy reactions to battle events. The trigger can start a custom dialog, force enemy skill or end the battle.


 * To configure triggers use sinkou_listX= keys in [sinkouX] sections:

[sinkou1] sinkou_list1=... sinkou_list2=... ... [sinkou2] sinkou_list1=... ...
 * Sinkou_listX= keys must use sequental numeration (sinkou_list1=, sinkou_list2= etc) and are checked in this order.


 * Warning: by default if a key is activated (the condition is true) - the game executes this key then continues the standard battle routine. All remaining sinkoulistX= keys will be ignored. You can return to the next trigger if the trigger destination is a custom dialogue (see below).


 * Use the ="change,sinkou,<section_number>" command to activate the [sinkou<section_number>] section. You can use ="change,sinkou,0" to disable triggers.


 * By default the game checks [sinkou1]/sinkou_list1= key when the battle starts and disables triggers if this key isn't defined.


 * Warning: the "Request" command disables all triggers so if you need them in the request routine - force them with the "change,sinkou" command.


 * The trigger keys syntax is sinkou_listX="<trigger_name>,, [, ]", sinkoulistX="element, , , [, ]" or sinkou_listX="petrified, [, ]".


 * <Trigger_name>:
 * "enemylife" and "enemylife2" - activates if enemy HPs are lower or equal of . Enemylife2 works only if hero isn't binded.
 * "element" - uses different syntax. The parameter chooses spirits for the check. Same as for spirit canceling: 1 for Sylph / FAD, 2 for Gnome, 4 for Undine / Serene Mind C, 8 for Salamander. Then the game compute total sum of levels for choosed and active spirits. And if this sum is bigger then - the trigger activates.


 * Examples: "sinkou_list1=element,1,0,a9" activates if Sylph ("1") was summoned with any level. And enemy uses skilla9. "Sinkou_list1=element,15,5,a9" is the analog of Alice 8th (final) Spirit Canceling - if %wind+%earth+%aqua+%fire>5.


 * "mylife" - activates if hero HPs are lower than.
 * "action" - each hero action/skill have corresponding value (stored in the %before_action variable). So enemy can react differently to player actions. The trigger is activated if %before_action=.


 * Possible values are:
 * "1" - normal attack.
 * "2" - critical attack.
 * "3" - miss.
 * "4" - Blade of Still Water.
 * "7" - unsuccessful Struggle (or attack in a standard bind).
 * "8" - successful Struggle.
 * "9" - attack in a "charged" bind.
 * "10" - attack in a "special" bind.
 * "35" - Word of Dispel: Omega Blaze.
 * "36" - Word of Dispel: Frost Ozma.
 * "37" - Word of Dispel: Monster Lord's Cruelty.
 * "51" - Guard.
 * "52" - Wait.
 * "53" - Surrender.
 * "54" - Requests.
 * "58" - Word of Dispel: Eyes of Recovery.
 * action for others hero skills can be found in the "Customized hero skills" section.


 * "turn" - activates if the turn number equals.
 * "status" - activates if the hero status equals.
 * "petrified" - activates when delayed or gradual petrifications turn a hero entirely to stone.
 * These triggers are checked before enemy attacks. If you want to check after enemy attack - use "enemylife1", "enemylife3", "element1", "mylife1", "action1", "turn1", "status1" and "petrified1" triggers names. Again, "enemylife3" works only if hero isn't binded.


 * Warning: there are no post triggers after the counterstance end, successful Struggle (with or w/o Gnome) and successful escape from a "special" bind.


 * <Destination>:
 * an enemy attack name ("aX", "bX", "cX", "dX", "counterX", "tame0", "tame1", "tame2", "win" or "pass").
 * a custom dialogue link ("!<section_name>"). The "execute" command is supported (see HP traps ).
 * <Switch>:
 * a number. The number changes the current trigger section to [sinkou ]. Use "0" to disable triggers.
 * "back". Can be used only if is a custom dialogue link. Checks the next key in the current section (until there is no keys or a key is activated).

Compatibility

 * There are some old keys that will be removed later and must be avoided/replaced.
 * ignoredef= and skill_ignoredef= are skill_message_mode= analogs.
 * mogaku_anno1=, mogaku_anno2=, mogaku_anno3=, mogaku_anno4=, mogaku_sel1=, mogaku_sel2=, mogaku_sel3=, mogaku_sel4=, mogaku_sel5=, mogaku_dassyutu1=, mogaku_dassyutu2=, mogaku_earth_dassyutu1=, mogaku_earth_dassyutu2=, mogaku_kaisin1= and mogaku_kaisin2= keys change corresponding messages for bind skills.
 * "cls" is the "cls_text" analog.

GC345 (talk) 15:36, December 8, 2016 (UTC)