GameMaker Touhou Engine   Home   Downloads   Documentation
Jump to:

Alpha 2.0pre Changelog


Added:


-Replay System (NOT IN FUNCTIONAL STATE):

   -New objects: _REPLAY_RECORDER/_REPLAY_PLAYBACK.

      -Objects that record/play replays as their names suggest.

      -Replays are stored in a binary file format created specifically for use in GMTE.

      -Playback is done in a special room intended for use with a special object that mimics player actions based on recorded inputs (see _REIMU_REPLAY_GHOST for an example).

   -New object: _SAVE_REPLAY.

      -Serves the same function as _INPUT_RESULTS, but for replays.

   -New global variables:

      -global._REPLAY_DATA is a buffer that stores data about a play sesssion while a replay is being recorded.

      -global._REPLAY_EV... is a set of variables that stores data about which inputs are being pressed during a replay's playback.

-Laser Flexibility:

   -Lasers now have death animations, just like bullets do.

   -Instance IDs of lasers can now also be grabbed after they're created using a new script: _BULLET_GET_LASER().

-Heavily Streamlined Bullets:

   -Removed the need for separate bullet objects entirely save for bullets with special behavior or bomb-immune bullets.

   -Bullets can now have their sprites and death effects set upon creation.

   -They also have a new variable _SYNC_ANGLE that dictates whether their sprite should rotate with them.

   -New global variable, global._STANDARD_BULLET_DEPTH which dictates the depth that bullets are drawn at by default.

-Even Better Particles:

   -Objects that inherit from either of the _DISAPPEARING_PARTICLE objects can now have dynamically created sprites.

   -They have a new variable, _SPRITE_DYNAMIC which dictates whether the resources used by the sprite should be freed upon the particle being destroyed.

      -Be very careful, as using this wrongly can lead to resources being permantently deleted from the game.


Modified:


-Script changes:

   -In accordance to the bullet changes, the _BULLET_CREATE...() now take additional arguments, i.e. the sprites, death effects and whether to sync the image angle with the bullets' movement angle.

      -_BULLET_CREATE_LASER() only has a new argument for the death effect however.

   -_DRAW_CREATE_DISAPPEARING_PARTICLE() also has a new argument that says whether or not the sprite used for the particle is a dynamic resource.

-Changes related to replays:

   -Several objects that relied on input-based events have been modified in accordance to the newly-added replay system.

      -Examples include _HITBOX_OBJECT and the dialogue-related _SYSTEM objects.

      -The events that used to trigger based on keyboard inputs now have user-defined triggers.

      -They are manually triggered within the keyboard events unless a replay is being played back.

-Bugfixes/Optimization:

   -Fixed a bug where bosses were being drawn on top of their bullets.

   -Fixed several instances of ord() being used with keyboard_check in a non-standard way.

   -Fixed the inconsistent variable types inside the _REIMU object.

   -Replaced all instances of round(random_range()) with irandom_range() for better readability and to avoid potential inconsistencies related to decimal rounding.


Alpha 1.7 Changelog


Added:


-Loose Lasers:

   -New object: _LASER_PARENT.

      -Effectively just a bullet that uses a duplicated sprite.

   -New object: _LASER_GENERATOR_PARENT.

      -An object that fires lasers.

      -Handles most of the logic in relation to creating them, much like delay clouds.

-Survival Cards:

   -New global variable: global._SURVIVAL_CARD.

      -Indicates whether or not the ongoing spellcard is a survival card.

      -If it is, the spell bonus will be given even if the boss' timer runs out.

-Streamlined Particle Effects:

   -New objects: _DISAPPEARING_PARTICLE and _DISAPPEARING_PARTICLE_ALARM.

      -Can be used to create particle effects without the need for a specific object for each one.

      -In accordance to this, a lot of objects which were simply used as particles have been removed.

-New Scripts:

   -_ENEMY_SET_UNTARGETABLE(): Makes a given stage enemy or boss untargetable. (see below)

   -_DRAW_CREATE_DISAPPEARING_PARTICLE(): Creates a particle effect with a given sprite, depth etc.

   -_BULLET_CREATE_LASER(): A script that fires a laser.


Modified:


-Script changes:

   -_ENEMY_DECLARE_SPELL() now requires you to specify whether or not the spell is a survival card.

   -The _BULLET_CREATE...() scripts now take a sprites instead of an object for the delay clouds, removing the need for separate objects entirely.

      -In accordance to this, all of the different delay cloud objects have been removed.

   -_DESTROY_BULLET_ALL() now destroys laser generators too, as otherwise they'd stay in their animation forever after the lasers themselves are gone.

-Enemy changes:

   -Enemies and bosses can now be made untargetable.

   -This means player shots will simply phase through them, and they will not hurt the player upon collision.

-Bullet changes:

   -Bomb immune bullets now inherit from normal bullets to reduce the amount of duplicate code.

   -They also no longer disappear when hitting the player.

-Bugfixes/Optimization:

   -Fixed a bug where bullets sometimes wouldn't deaccelerate properly.

   -Fixed a bug where bomb immune bullets wouldn't get grazed properly.

   -_RESULTS_SCREEN no longer restarts the room when you exit it, instead returning to the title screen like the other menu objects.


Alpha 1.5 Changelog


Added:


-Dialogue System:

   -New object: _DIALOGUE_CONTROLLER.

      -Controls and draws a given dialogue sequence.

      -Dialogue sequences are dictated by special strings for which characters are speaking and what the text is.

   -New object: _DIALOGUE_EVENT_HANDLER_STG1.

      -An example object that shows how one would go about making specific things happen in the middle of a dialogue sequence.

   -New global variable: global._DIALOGUE_ACTIVE.

      -Signifies whether or not dialogue is in progress.

      -While dialogue is in progress, the player and bosses cannot attack, and bosses cannot move.

-Spell Card History System:

   -New global variable: global._SPELL_MAP_TEMP.

      -A ds_map that stores values for how many each spell card has been attempted/captured during play.

      -Similar to the high score, the content of this map is added into global._DATA_MAP after the results input screen, then saved into "score.dat".

      -The keys are unique arbitrary names for each spell, represented by short strings.

-New Globals:

   -global._PLAYER_FAMILIAR: Stores the object used for shooting the player's secondary shots, such as Reimu's Yin-Yang orbs.

   -global._DATA_MAP: The ds_map that stores data such as the high score.

      -It's declared in a new room _DATA_LOAD_ROOM which is loaded before everything else, by a new persistent object _DATA_LOADER.

-New Scripts:

   -_UPDATE_INIT_DIALOGUE(): Begins a given dialogue sequence.

   -_UPDATE_UNINIT_DIALOGUE(): Ends the active dialogue sequence.

   -_ENEMY_SPELL_GET_...(): Returns the amount of times a given spell card has been attempted/captured.

   -_UPDATE_SPELL_...(): Updates the amount of times a given spell card has been attempted/captured.


Modified:


-Script changes:

   -_DRAW_TEXT_BORDER() now supports custom alpha values.

   -Scripts that change values within ds_maps now use accessors.

   -_ENEMY_DECLARE_SPELL() now requires an "internal name" for the spell which tells the game how to refer to the specific spell being declared and a ds_map to update the amount of times the given spell has been attempted.

-Boss changes:

   -Bosses now have a new variable: _CURRENT_SPELL_NAME.

   -Signifies the "internal name" of the active spell card, and should be updated through timelines.

-Bugfixes/Optimization:

   -Items now move to the player's hitbox properly when they are collected, rather than disappearing at a distance.

   -The ..._TIMER... variables in _REIMU are now booleans.

   -The example bosses no longer occasionally fire off a few extra bullets after death if they are killed at a specific moment.

   -Bosses now have enough delay between patterns to ignore potential bomb damage that carries over from a previous pattern.

   -If a bomb does manage to damage them in this way, the spell card bonus now properly gets set to 0 in this scenario too.

   -The player's power is now an integer that goes up to 400 rather than a real value that goes up to 4, in order to make calculations easier.

   -The ds_map that stores the data such as the high score is now one global variable for ease of access. This also makes it so all data can be stored inside one file.

   -Fixed a bug where the player could keep their hitbox visible while unfocused if they paused while holding shift, and cleaned the code that regulates the animations up.

      -Cleaned the code that regulates the animations for _FOCUS_AURA up as well.


Alpha 1.3 Changelog


Added:


-Parent object for delay clouds, _DELAY_CLOUD_PARENT:

   -Delay clouds now have two new variables: _FIRST_ANIMATION and _SECOND_ANIMATION.

      -_DELAY_CLOUD_PARENT performs a more generalized version of the code that each delay cloud used to call at the end of their animations.

      -_FIRST_ANIMATION is set to sprite_index on creation by default.

      -Child delay clouds now only call event_inherited() and set their _SECOND_ANIMATION upon being created.

-Hi-Score system:

   -New global variable: global._HI_SCORE, which stores the high score during play.

   -New object: _HI_SCORE_CONTROLLER, which monitors the high score and displays it on the HUD.

      -Results are permanently stored in the file score.dat.

      -score.dat works like a standard INI file, encrypted using the built-in ds_map system. It stores the 10 best achieved scores in rank1 through rank10.

      -It also stores the names corresponding to each score in name1 through name10.

      -There's also plrank which stores the best player-achieved score.

   -New object: _RESULTS_SCREEN which simpy loads and draws the top 10 scores stored in score.dat.

      -_RESULTS_SCREEN is meant to be used in conjunction with the other menu screen objects like _TITLE_OBJECT and _CHARACTER_SELECT.

   -New object: _INPUT_RESULTS which the player is meant to access after beating the game, not continuing after running out of lives, or running out of continues.

      -_INPUT_RESULTS is stored in a separate room, _RESULTS_ROOM. It allows the player to input a name, if they've made it into the top 10 scores. It then stores the updated info in score.dat.

-New Scripts:

   -_BULLET_GET(): returns the bullet created by a given delay cloud. (see below)

   -_UPDATE_RESULTS_FIRST_TIME(): writes the default score values into a given ds_map.

   -_UPDATE_RESULTS(): inserts a given name and score into the proper position inside a given ds_map.


Modified:


-Script changes:

   -All of the previously existing _ENEMY_CREATE...() scripts have been combined into _ENEMY_CREATE().

      -The alarm/path-related arguments can be ignored by setting them to noone.

   -All of the _BULLET_CREATE...() scripts now return the id (or array of ids) for the delay clouds set to create the bullets themselves.

   -_DESTROY_IF_OUTSIDE_BOUNDS(): Now setting an argument to noone will make the script ignore it (as opposed to setting it to -1).

   -_FAMILIAR_CREATE(): Now setting alrm to noone will make the script ignore it.

   -_DRAW_DIGIT...() and _DRAW_COLLECTIBLE(): Now sensically return void instead of an integer/real number.

-Delay cloud changes:

   -Delay clouds have a new variable: _CREATED_BULLET_ID.

      -This variable stores the id of the bullet that it's created after finishing its _FIRST_ANIMATION.

      -Beware: this variable is empty until the bullet has actually been created, so you should wait a bit before trying to access it.

-Player bullet changes:

   -_PLAYER_BULLET_PARENT now executes a more generalized version of the code that each player bullet used to call every step.

      -The effect the player bullets are set to create before destroying themselves is stored in a new variable: _DEATH_EFF.

      -Both _DEATH_EFF and _DAMAGE_VALUE are meant to be set for each bullet during their create events.

-Bugfixes/Optimization:

   -Replaced some instances of _REIMU and _PLAYER_PARENT with global._PLAYER to prevent potential issues and for consistency reasons.

   -Fixed a bug where the player would sometimes not respawn after continuing.

   -Fixed a bug where graze wouldn't properly increase more if there were a lot of nearby bullets.

   -Added a limit for the origin point x and y coordinates of _SPELL_BG to prevent overflowing.

   -Made diagonal movement using _MOVE_OBJECT() more accurate math-wise.