546 - bombShield(int a, int script)
Sets the bomb invulnerability flag (a=0 false, a=1 true), the caller's ANM script will change to script when a bomb is active.
611 - etEx(int etId, int async, int type, float a, float b)
Adds bullet transformation to bullet manager etId, Transformation of flag type determines the specific behaviour of the bullet. Documentation can be found here.
BulletEffectType-67108864 - etExDelay(string et, string isAsync, string time)
Hide the bullet for time frames. During this time, it will not move, will be invisible and won't have a hitbox. If used as a first transformation, can be used to delay when the bullet actually appears.
6 - isDelayedSpawn
While this flag is set, the bullet will be invisible and not have a hitbox. This flag is cleared once the delay timer ends.
4 - short_timer
Integer value between -1 and 15 inclusive (by default -1). If non-negative, shooters using short_timer shoot their bullets and timer increments by 1 per frame until 15 is reached. Once 15, timer reset to -1 or 0 depending on Z key state.
5 - long_timer
Integer value between -1 and 120 inclusive (by default -1). If non-negative, shooters using long_timer shoot their bullets and timer increments by 1 per frame until 120 is reached. Once 120, timer reset to -1 or 0 depending on Z key state.
91 - floatTime(int slot, float var, int time, int mode, float start, float final)
In time frames using mode mode, variable var changes from start to final. slot is used to set the slot to be used by this ins, every enemy has 8 slots.
-9980 - F1
Local float variable, inherited by spawned enemies.
-9984 - I1
Local integer variable, inherited by spawned enemies.
-9989 - ANGLE_PLAYER
Angle from the enemy to the player.
-9962 - BOSS_Y
Final Y position of the boss.
-9990 - PLAYER_Y
Player's Y position.
-9963 - BOSS_X
Final X position of the boss.
-9991 - PLAYER_X
Player's X position.
81 - circlePos(float varX, float varY, float angle, float radius)
Performs following operation: varX = cos(angle) * radius and varY = cos(angle) * radius
-9981 - F0
Local float variable, inherited by spawned enemies.
300 - enmCreate(string sub, float x, float y, int hp, int score, int item)
Creates an enemy using subroutine sub at coordinates (x, y) (relative to position of the parent), health of created enemy is hp, score bonus is score and item drop is item.
601 - etOn(int etId)
Shoots bullet(s) using properties from bullet manager etId.
23 - wait(int time)
Stops sub execution for time frames.
1 - delete()
Returns to the top of current call stack.
2 - GAME_SPEED
The value controls by how much faster the game speed is run. This variable is often set to a number between 0 and 1. This value is often changed when a (final) boss dies or when a photo is taken. Its default value is 1.
Reisen Desync
Specifications
- Versions:
1.00a -
1.00b
- Difficulty:
Easy -
Normal -
Hard -
Lunatic -
Extra - Mode:
Legacy mode -
Point Device mode-Practice mode - Shottype:
Reimu-Marisa-Sanae-Reisen
What happens
Very rarely, when starting a replay from either Stage 3, Stage 4, Stage 5 or Stage 6, the replay desyncs. This only happens with Reisen.
How it happens
This event happens conditionally, meaning this can be replicated consistently. The steps to replicate the desync are as follows:
- Play as Reisen on Legacy mode.
- On Stage 2/3/4/5, exit the stage with at least 1 shield.
- On the next stage (Stage 3/4/5/6), make sure to not use a bomb. Though, you are allowed to die.
- Survive until the player is able to graze some lasers.
The replay might desynchronise when starting the replay from the stage in which the steps were performed on.
Why it happens
The shields of Reisen provide the following features:
- Reisen's hitbox grows larger, meaning Reisen is more susceptible to being hit.
- Reisen's grazebox grows larger, meaning Reisen is able to graze more efficiently.
Reisen's hitbox and grazebox grow larger as Reisen has more shields. This also means that Reisen's hitbox and grazebox reduce in size when Reisen loses shields.
Reisen can lose shields in the following ways:
- Reisen gets hit, either by an enemy/bullet/laser.
- Reisen goes through a stage transition.
When Reisen loses her shields in one of the two ways, her hitbox and grazebox for bullets are reduced. However, when Reisen loses her shields through a stage transition, it works differently. Instead, Reisen's hitbox and grazebox for lasers are not reset on a stage transition. This is stays true until the player bombs as Reisen, in which case Reisen's hitbox and grazebox for lasers are updated.
Since Reisen retains her hitbox and grazebox for lasers from the previous stage, it means there are two ways for a desync to happen:
- Reisen gets hit by a laser during the non-desynced playback, whereas Reisen does not get hit by a laser during the desynced playback.
- Reach maximum lives and 4/5 bomb pieces. On a chapter, the non-desynced playback ends up getting an additional bomb before the desynced playback does from the chapter bonus. The non-desynced playback has an extra bomb over the desynced playback.
Note that grazing lasers does not change RNG. Furthermore, the influence of score and PIV does not affect RNG as well.
Links
Replays
- Replay
Nylilsaby "Nylilsa". Lunatic, Reisen, 1.00b. 「August 28, 2022」. Download link
Videos
- Nylilsa. 「September 4, 2022」. "東方紺珠伝~鈴仙リプレイバグ" https://www.youtube.com/watch?v=T-HlzAVw8-o
All Legacy of Lunatic Kingdom pages: | |
|---|---|
| Sagume Skip · Red Background · Doremy's First Non-spell Typo · Hecatia opener 50% shootdown · Reisen Desync · Slowdown Item Duplication · Sanae Frogs Not Working | All Desync-related pages: | All Shottype-related pages: | All Stage transition-related pages: |