Mercurial > touhou-doc
view 06/ecl.xml @ 6:578e67aa3c03
Minor ECL fixes.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Tue, 23 Aug 2011 20:52:55 +0200 |
parents | b3644dff344c |
children | 2a7b9d62c0c4 |
line wrap: on
line source
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="../html.xsl"?> <?xml-stylesheet type="text/css" href="../style.css"?> <!DOCTYPE html> <opcodes xmlns="urn:opcodes:description"> <title>ECL Sub format</title> <text> <div xmlns="http://www.w3.org/1999/xhtml"> <h2>Lvalues and Rvalues / direct vs memory indirect addressing</h2> <p>In EoSD, most 32-bits arguments passed to instructions may be actual values or variable/register indexes.<br/> [TODO: verify] values inferior to -10000 are variable/register indexes, whereas values superior to this are actual values.<br/> Values passed through variable/register indexes are Lvalues, other values are not. Some instructions require some of their operands to be Lvalues.<br/> Another way to look at it would be C++-style references. <code>ins_20</code> would then be <code>ins_20(int32 &value, float a, float b);</code></p> <p>Note: variables seems to be somehow superposed to the enemy's state structure, with <code>-10015 = x</code> and <code>-10016 = y</code>.</p> <h2>Accessing values</h2> <p>[TODO: verify] How the game accesses values passed as argument is as follows:<br/> TYPE is the type of the argument (float, int32, ...):</p> <pre>if ((TYPE) argument < -10000) return *(TYPE*) &variables[(int)(-10000-(TYPE) argument)]; else return (TYPE) argument;</pre> <h2>Variables</h2> <p>Only variables in the range [-10001, -10025] without -10014, -10020 and -10023 are used in the game.</p> <h3>Local variables</h3> <table> <tr><th>Number</th><th>Type</th></tr> <tr><td>-10001</td><td>int</td></tr> <tr><td>-10002</td><td>int</td></tr> <tr><td>-10003</td><td>int</td></tr> <tr><td>-10004</td><td>int</td></tr> <tr><td>-10005</td><td>float</td></tr> <tr><td>-10006</td><td>float</td></tr> <tr><td>-10007</td><td>float</td></tr> <tr><td>-10008</td><td>float</td></tr> <tr><td>-10009</td><td>int</td></tr> <tr><td>-10010</td><td>int</td></tr> <tr><td>-10011</td><td>int</td></tr> <tr><td>-10012</td><td>int</td></tr> </table> <h3>Special variables</h3> <table> <tr><th>Number</th><th>Type</th> <th>Name</th> <th>RW/RO</th> <th>Notes</th></tr> <tr><td>-10013</td><td>int</td> <td>rank</td> <td>ro</td> <td></td></tr> <tr><td>-10014</td><td>int</td> <td>difficulty</td> <td>ro</td> <td>Unused.</td></tr> <tr><td>-10015</td><td>float</td> <td>x</td> <td>rw</td> <td></td></tr> <tr><td>-10016</td><td>float</td> <td>y</td> <td>rw</td> <td></td></tr> <tr><td>-10017</td><td>float</td> <td>z</td> <td>rw</td> <td></td></tr> <tr><td>-10018</td><td>float</td> <td>player_x</td> <td>ro</td> <td></td></tr> <tr><td>-10019</td><td>float</td> <td>player_y</td> <td>ro</td> <td></td></tr> <tr><td>-10020</td><td>float</td> <td></td> <td>ro</td> <td>Unused.</td></tr> <tr><td>-10021</td><td>float</td> <td>enemy_player_angle</td> <td>ro</td> <td></td></tr> <tr><td>-10022</td><td>int</td> <td>last_frame</td> <td>rw</td> <td></td></tr> <tr><td>-10023</td><td>float</td> <td>enemy_player_distance</td><td>ro</td><td>Unused.</td></tr> <tr><td>-10024</td><td>int</td> <td>life</td> <td>rw</td> <td></td></tr> <tr><td>-10025</td><td>int</td> <td>player</td> <td>ro</td> <td>0 = ReimuA, 1 = ReimuB, 2 = MarisaA, 3 = MarisaB</td></tr> </table> <h2>Opcodes</h2> </div> </text> <op> <num>0</num> <name>noop</name> <desc>Do nothing.</desc> </op> <op> <num>1</num> <name>delete</name> <params> <param type="S" values="0">Unknown</param> </params> <desc>Delete the sprite and perhaps free the memory used.</desc> </op> <op> <num>2</num> <name>relative_jump</name> <params> <param type="S" name="new_frame" unit="frame" values="0 to 360"/> <param type="S" name="relative_offset" unit="bytes" values="-2032 to 632">Starting from the start of the current opcode.</param> </params> <desc>Unconditionally jump to relative_offset with new frame counter. Used as a while.</desc> </op> <op> <num>3</num> <name>relative_jump_ex</name> <params> <param type="S" name="new_frame" unit="frame" values="0 to 532"/> <param type="S" name="relative_offset" unit="bytes" values="-1376 to -12"/> <param type="S" name="counter_id" unit="var_id" var="must" values="-10011 to -10009"/> </params> <desc>If the counter is non-null, jump to relative_offset with new frame counter, and decrease counter counter_id by 1. Used as a for.</desc> </op> <op> <num>4</num> <name>set_int</name> <params> <param type="S" name="variable" unit="var_id" var="must" values="-10012 to -10001"/> <param type="S" name="value" var="can" values="-10005 to -10021, 0 to 300"/> </params> <desc>Assign a value to the variable. Sometimes, value can be another variable.</desc> </op> <op> <num>5</num> <name>set_float</name> <params> <param type="S" name="variable" unit="var_id" var="must" values="-10005 to -10017"/> <param type="f" name="value" var="can" values="-12.0f to 460.0f"/> </params> <desc>Like <ref>4</ref>, but with a float as value.</desc> </op> <op> <num>6</num> <name>set_random_int</name> <params> <param type="S" name="variable" unit="var_id" var="must" values="-10001"/> <param type="S" name="value" var="can" values="2, 3"/> </params> <desc>Assign an integer in the [0, value) range to the variable.</desc> </op> <op> <num>8</num> <name>set_random_float</name> <params> <param type="S" name="variable" unit="var_id" var="must"/> <param type="f" name="maximum" var="can" values="1.0f to 2pi to 384.0f"/> </params> <desc>Like <ref>6</ref>, but with a float as value.</desc> </op> <op> <num>9</num> <name></name> <params> <param type="S"/> <param type="f"/> <param type="f"/> </params> <desc></desc> </op> <op> <num>10</num> <name></name> <params> <param type="S" var="can/must" values="-10005"/> </params> <desc>Used only one time, in <stage>2</stage>.</desc> </op> <op> <num>13</num> <name></name> <params> <param type="S"/> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>14</num> <name></name> <params> <param type="S"/> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>15</num> <name></name> <params> <param type="S" var="can/must" values="-10001"/> <param type="S" var="can/must" values="-10012"/> <param type="S" values="1 to 5"/> </params> <desc></desc> </op> <op> <num>16</num> <name></name> <params> <param type="S"/> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>17</num> <name></name> <params> <param type="S" name="variable1?"/> <param type="S" name="variable2?"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>18</num> <name></name> <params> <param type="S" name="variable?" var="can/must" values="-10012, -10004, -10002, -10001"/> </params> <desc></desc> </op> <op> <num>20</num> <name>add</name> <params> <param type="S" name="variable" unit="var_id" var="must"/> <param type="f" name="a"/> <param type="f" name="b"/> </params> <desc>variable = a + b; Warning: a and b will be dereferenced as integers (not converted) if variable is an integer!</desc> </op> <op> <num>21</num> <name></name> <params> <param type="S" name="variable" unit="var_id" var="must"/> <param type="f" name="a"/> <param type="f" name="b"/> </params> <desc>variable = a - b; Warning: a and b will be dereferenced as integers (not converted) if variable is an integer!</desc> </op> <op> <num>23</num> <name></name> <params> <param type="S"/> <param type="f"/> <param type="f"/> </params> <desc></desc> </op> <op> <num>25</num> <name></name> <params> <param type="S" var="can/must" values="-10005"/> <param type="f"/> <param type="f"/> <param type="f" values="192.0f"/> <param type="f" values="224.0f"/> </params> <desc></desc> </op> <op> <num>26</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>27</num> <name>compare_ints</name> <params> <param type="S" name="a"/> <param type="S" name="b"/> </params> <desc>Compare a and b, store the result (-1 if a < b, 0 if a == b, 1 if a > b) in the "comparison register".</desc> </op> <op> <num>28</num> <name></name> <params> <param type="f"/> <param type="f"/> </params> <desc></desc> </op> <op> <num>29</num> <name></name> <params> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>30</num> <name></name> <params> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>31</num> <name>relative_jump_if_equal</name> <params> <param type="S" name="new_frame" unit="frame" values="0, 2, 60"/> <param type="S" name="relative_offset" unit="bytes" values="44, 176, 324">Starting from the start of the current opcode.</param> </params> <desc>Jump if the "comparison register" equals to 0, that is, if the compared values are equal.</desc> </op> <op> <num>32</num> <name></name> <params> <param type="S" value="120"/> <param type="S" value="64"/> </params> <desc>Used only one time in <stage>4</stage></desc> </op> <op> <num>33</num> <name></name> <params> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>34</num> <name></name> <params> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>35</num> <name>call</name> <params> <param type="S" name="function" unit="sub"/> <param type="S" name="param1"/> <param type="f" name="param2" values="-0.31415927f to 0.31415927f"/> </params> <desc>Call given sub with -10001 = param1, -10005 = param2.</desc> </op> <op> <num>36</num> <name>return</name> <desc>Almost always called at the end of the function. See stage3 for two times where it is called before <ref>1</ref>.</desc> </op> <op> <num>39</num> <name>call_if_equal</name> <params> <param type="S" name="function" unit="sub"/> <param type="S" values="0" name="param1"/> <param type="f" values="0" name="param2"/> <param type="S" name="a"/> <param type="S" name="b"/> </params> <desc>Call given sub with -10001 = param1, -10005 = param2 if a == b.</desc> </op> <op> <num>43</num> <name>set_position</name> <params> <param type="f" name="x"/> <param type="f" name="y"/> <param type="f" name="y" values="0">Ignored</param> </params> <desc>Move the enemy to a new position, using interpolation.</desc> </op> <op> <num>45</num> <name>set_angle_speed</name> <params> <param type="f" name="angle" unit="radian">0.0f is left, PI/2 is down.</param> <param type="f" name="speed" unit="pixels/frame"/> </params> <desc>Set the angular trajectory and speed of the enemy.</desc> </op> <op> <num>46</num> <name>set_rotation_speed</name> <params> <param type="f" name="speed" unit="radian/frame"/> </params> <desc>Change the angular trajectory of the enemy. It continues to turn until this function is called again.</desc> </op> <op> <num>47</num> <name>set_speed</name> <params> <param type="f" name="speed" unit="pixels/frame"/> </params> <desc>Change the speed of the enemy.</desc> </op> <op> <num>48</num> <name>set_acceleration</name> <params> <param type="f" name="step" unit="pixels/frame"/> </params> <desc>Change the speed of the enemy step by step, at each frame.</desc> </op> <op> <num>49</num> <name>set_random_?</name> <params> <param type="f" values="0.7853982f">The new angle?</param> <param type="f" values="2.3561945f">Some deplacement?</param> </params> <desc>Used only five times, in <stage>2</stage>. Seems to involve some randomness.</desc> </op> <op> <num>50</num> <name></name> <params> <param type="f" values="-PI (-3.1415927f)"/> <param type="f" values="PI (3.1415927f)"/> </params> <desc></desc> </op> <op> <num>51</num> <name>set_speed_forward_player</name> <params> <param type="S" value="0">Ignored</param> <param type="f" name="speed" unit="pixels/frame"/> </params> <desc>Sets the speed of the enemy, and change its direction to where the player is at that frame. Used only one time in <stage>2</stage>.</desc> </op> <op> <num>52</num> <name></name> <params> <param type="S"/> <param type="f"/> <param type="f"/> </params> <desc></desc> </op> <op> <num>56</num> <name></name> <params> <param type="S"/> <param type="f"/> <param type="f"/> <param type="S" values="0"/> </params> <desc>Used only two times in <stage>7</stage></desc> </op> <op> <num>57</num> <name>move_to</name> <params> <param type="S" name="duration" unit="frames"/> <param type="f" name="x" unit="pixels"/> <param type="f" name="y" unit="pixels"/> <param type="f" name="z" unit="pixels" values="0.0f">Ignored</param> </params> <desc>Move the enemy to the new position in this amount of frames.</desc> </op> <op> <num>59</num> <name>move_to2</name> <params> <param type="S" name="duration" unit="frames"/> <param type="f" name="x" unit="pixels" values="192.0f"/> <param type="f" name="y" unit="pixels" values="-64.0f, 150.0f"/> <param type="f" name="z" unit="pixels" values="0.0f"/> </params> <desc>Move the enemy to the new position in this amount of frames. TODO: how it is different from move_to?</desc> </op> <op> <num>61</num> <name>stop_in_decel</name> <params> <param type="S" name="duration" unit="frames"/> </params> <desc>Keep a straight trajectory with decelerating speed to stop in duration frames.</desc> </op> <op> <num>63</num> <name>stop_in_accel</name> <params> <param type="S" name="duration" unit="frames"/> </params> <desc>Like <ref>61</ref> but with acceleration instead of deceleration.</desc> </op> <op> <num>65</num> <name>set_screen_box</name> <params> <param type="f" name="x1" unit="pixels"/> <param type="f" name="y1" unit="pixels"/> <param type="f" name="x2" unit="pixels"/> <param type="f" name="y2" unit="pixels"/> </params> <desc>Disallow an enemy to quit the defined rectangle. If it goes outside it is destroyed. By default this rectangle is the displayed screen.</desc> </op> <op> <num>66</num> <name>clear_screen_box</name> <desc>Remove the limit set in <ref>65</ref>.</desc> </op> <op> <num>67</num> <name>set_bullet_attributes</name> <params> <param type="s" name="bullet" unit="script"/> <param type="s" name="launch" unit="script"/> <param type="S" name="bullets_per_shot"/> <param type="S" name="number_of_shots"/> <param type="f" name="speed" unit="pixels/frame"/> <param type="f"/> <param type="f" name="launch_angle" unit="radian"/> <param type="f" name="angle_between_two_bullets" unit="radian"/> <param type="S" name="flags">>= 64, freezed</param> </params> <desc>Modify the attributes of the next enemy attack. Directs it to the player.</desc> </op> <op> <num>68</num> <name></name> <params> <param type="s"/> <param type="s"/> <param type="S"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="S"/> </params> <desc>The same as <ref>67</ref>, except the shot is directed to the right of the enemy.</desc> </op> <op> <num>69</num> <name></name> <params> <param type="s"/> <param type="s"/> <param type="S"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="S"/> </params> <desc>No visible difference from <ref>67</ref>.</desc> </op> <op> <num>70</num> <name></name> <params> <param type="s"/> <param type="s"/> <param type="S"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="S"/> </params> <desc>No visible difference from <ref>68</ref>.</desc> </op> <op> <num>71</num> <name></name> <params> <param type="s"/> <param type="s"/> <param type="S"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="S"/> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>74</num> <name></name> <params> <param type="s"/> <param type="s"/> <param type="S"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="S"/> <param type="S"/> <param type="S"/> </params> <desc>Used only one time, in <stage>3</stage>.</desc> </op> <op> <num>75</num> <name></name> <params> <param type="s"/> <param type="s"/> <param type="S"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="S"/> </params> <desc>Seems like <ref>68</ref>, but with some differences in speed.</desc> </op> <op> <num>76</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>77</num> <name>bullet_interval</name> <params> <param type="S" name="interval" unit="frames"/> </params> <desc>Time between two shots.</desc> </op> <op> <num>78</num> <name>delay_attack</name> <desc>If present, delays the first attack of the amount of frames defined by <ref>77</ref>. If not, the enemy shoots instantly after setting the bullets attributes.</desc> </op> <op> <num>79</num> <name>no_delay_attack</name> <desc></desc> </op> <op> <num>81</num> <name>bullet_launch_offset</name> <params> <param type="f" name="x" unit="pixels"/> <param type="f" name="y" unit="pixels"/> <param type="f" name="z" unit="pixels" values="0">Ignored</param> </params> <desc>Change the offset of the launch of bullets.</desc> </op> <op> <num>82</num> <name></name> <params> <param type="S"/> <param type="S"/> <param type="S"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f" values="-1.0f"/> <param type="f" values="-1.0f"/> </params> <desc></desc> </op> <op> <num>83</num> <name></name> <desc>No-op? Doesn't seem to change anything.</desc> </op> <op> <num>84</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>85</num> <name>laser</name> <params> <param type="s"/> <param type="s"/> <param type="f"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="S"/> <param type="S"/> <param type="S"/> <param type="S"/> <param type="S"/> <param type="S" values="0"/> </params> <desc></desc> </op> <op> <num>86</num> <name></name> <params> <param type="s"/> <param type="s"/> <param type="f"/> <param type="f"/> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="S"/> <param type="S"/> <param type="S"/> <param type="S"/> <param type="S"/> <param type="S" values="0"/> </params> <desc></desc> </op> <op> <num>87</num> <name>set_upcoming_id</name> <params> <param type="S" name="laser" unit="laser_id"/> </params> <desc>Sets upcoming laser to a given id, in order to manipulate it later.</desc> </op> <op> <num>88</num> <name>alter_laser_angle</name> <params> <param type="S" name="laser" unit="laser_id"/> <param type="f" name="delta" unit="radian"/> </params> <desc>Adds delta to the laser's angle.</desc> </op> <op> <num>90</num> <name></name> <params> <param type="S" values="0 to 3"/> <param type="S" values="0"/> <param type="S" values="0"/> <param type="S" values="0"/> </params> <desc>Used only one time, in <stage>7</stage>.</desc> </op> <op> <num>92</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>93</num> <name>set_spellcard</name> <params> <param type="s"/> <param type="s" name="number">As in the captured spellcards screen, minus 1.</param> <param type="z" name="name">In SHIFT_JIS</param> </params> <desc></desc> </op> <op> <num>94</num> <name></name> <desc></desc> </op> <op> <num>95</num> <name></name> <params> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="s"/> <param type="s"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>96</num> <name></name> <desc></desc> </op> <op> <num>97</num> <name>set_enemy_anim</name> <params> <param type="S" name="anim" unit="script"/> </params> <desc>Set a sprite (taken from current anm) for the enemy.</desc> </op> <op> <num>98</num> <name>set_boss_anims</name> <params> <param type="s" name="default" unit="script"/> <param type="s" name="far_left" unit="script"/> <param type="s" name="far_right" unit="script"/> <param type="s" name="left" unit="script"/> <param type="S" name="right" unit="script">Perhaps two int16_t instead.</param> </params> <desc>Give a set of animations for a boss deplacements.</desc> </op> <op> <num>99</num> <name></name> <params> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>100</num> <name>set_death_anim</name> <params> <param type="S" name="anim" unit="script" values="768, 769, 258">In fact, any 256n+[0-2] works and is the same; other values make the program crash.</param> </params> <desc>When the enemy is destroyed, the animation used.</desc> </op> <op> <num>101</num> <name>set_boss_mode</name> <params> <param type="S" values="-1, 0">Unknown meaning, seems to be 0 for mid-boss and -1 for real boss.</param> </params> <desc>Activates the boss mode, with her life bar and lives number displayed on the top. Doesn't do anything before calling <ref>126</ref>.</desc> </op> <op> <num>102</num> <name></name> <params> <param type="S"/> <param type="f"/> <param type="f"/> <param type="f"/> <param type="f" values="48.0f"/> </params> <desc>Create the "squares" running around Rumia ???</desc> </op> <op> <num>103</num> <name>set_enemy_hitbox</name> <params> <param type="f" name="width" unit="pixels" values="16 to 56"/> <param type="f" name="height" unit="pixels" values="16 to 56"/> <param type="f" name="depth" unit="pixels" values="32.0f">Ignored</param> </params> <desc></desc> </op> <op> <num>104</num> <name></name> <params> <param type="S" values="0, 1"/> </params> <desc>noop?</desc> </op> <op> <num>105</num> <name>set_vulnerable</name> <params> <param type="S" name="x" values="0, 1"/> </params> <desc>if x & 1, the enemy can take damage, else it cannot.</desc> </op> <op> <num>106</num> <name>play_sound</name> <params> <param type="S"/> </params> <desc>Play a sound.</desc> </op> <op> <num>107</num> <name>set_death_flags</name> <params> <param type="S"/> </params> <desc>Control what to do when life falls to zero. 0 = normal, 1 = don't clean the sprite, 2 = don't die, 4 (unused) = don't die and don't drop bonus. These are flags that can be combined.</desc> </op> <op> <num>108</num> <name>call_when_killed</name> <params> <param type="S" name="function" unit="sub"/> </params> <desc>Specify the subroutine to call when the enemy is killed.</desc> </op> <op> <num>109</num> <name></name> <params> <param type="S"/> <param type="S" values="0"/> </params> <desc></desc> </op> <op> <num>111</num> <name>set_life</name> <params> <param type="S" name="life"/> </params> <desc>equivalent to <ref>4</ref>(-10024, life).</desc> </op> <op> <num>112</num> <name></name> <params> <param type="S" values="0, 99999"/> </params> <desc></desc> </op> <op> <num>113</num> <name>set_boss_lower_life_limit</name> <params> <param type="S" name="limit" unit="life" values="-1, 500-3400"/> </params> <desc>When enemy's life gets lower or equal to the limit, the callback set by <ref>114</ref> is called.</desc> </op> <op> <num>114</num> <name>set_boss_callback</name> <params> <param type="S" name="callback" unit="sub" values="9-68"/> </params> <desc>Specify the sub to call when the enemy's life gets below a certain amount set by a <ref>113</ref>.</desc> </op> <op> <num>115</num> <name>set_timeout</name> <params> <param type="S" name="timeout" unit="frame"/> </params> <desc>Sets the timeout of the current boss attack.</desc> </op> <op> <num>116</num> <name></name> <params> <param type="S"/> </params> <desc>Doesn't seem to do anything. Tried to remove it, use 0, 1, 127, 1023, 1024, 4096 as an argument, nothing... ???</desc> </op> <op> <num>117</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>118</num> <name></name> <params> <param type="S"/> <param type="S"/> <param type="s"/> <param type="s"/> </params> <desc>TODO: "explosion" (dying boss).</desc> </op> <op> <num>119</num> <name>drop_bonus</name> <params> <param type="S" name="number" values="3, 4, 5, 6, 8, 10, 12, 20"/> </params> <desc>Drop a certain number of bonus at the frame it is called. If the power is not max, drop power items, else drop point items.</desc> </op> <op> <num>120</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>121</num> <name></name> <params> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>122</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>123</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>124</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>125</num> <name></name> <desc></desc> </op> <op> <num>126</num> <name>set_boss_lives</name> <params> <param type="S" name="lives">Can even be negative. :D</param> </params> <desc>Sets the remaining lives of a boss. Should be called at the start of each round.</desc> </op> <op> <num>127</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>128</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>129</num> <name></name> <params> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>130</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>131</num> <name></name> <params> <param type="f"/> <param type="f"/> <param type="S"/> <param type="S"/> <param type="S"/> <param type="S"/> </params> <desc></desc> </op> <op> <num>132</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> <op> <num>133</num> <name></name> <desc></desc> </op> <op> <num>134</num> <name></name> <desc></desc> </op> <op> <num>135</num> <name></name> <params> <param type="S"/> </params> <desc></desc> </op> </opcodes>