fix(plymouth): center logo+entry as group on password prompt, fix theme name
- commit
- a53fe57e9b781270f924f5abc5551c5799c1ac74
- author
- brice · · 2026-02-27 19:41 UTC
- parent
- a2309fb
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +47 -27
M assets/plymouth/archup.plymouth +2 -2
| @@ -1,6 +1,6 @@ | |||
| 1 | 1 | [Plymouth Theme] | |
| 2 | - | Name=ArchUp | |
| 3 | - | Description=ArchUp splash screen. | |
| 2 | + | Name=Arch Linux | |
| 3 | + | Description=Arch Linux splash screen. | |
| 4 | 4 | ModuleName=script | |
| 5 | 5 | ||
| 6 | 6 | [script] | |
| @@ -1,6 +1,6 @@ | |||||
| 1 | [Plymouth Theme] | 1 | [Plymouth Theme] | ||
| 2 | - | Name=ArchUp | 2 | + | Name=Arch Linux |
| 3 | - | Description=ArchUp splash screen. | 3 | + | Description=Arch Linux splash screen. |
| 4 | ModuleName=script | 4 | ModuleName=script | ||
| 5 | 5 | ||||
| 6 | [script] | 6 | [script] | ||
M assets/plymouth/archup.script +45 -25
| @@ -1,13 +1,16 @@ | |||
| 1 | - | # Omarchy Plymouth Theme Script | |
| 1 | + | # Arch Linux Plymouth Theme Script | |
| 2 | 2 | ||
| 3 | 3 | Window.SetBackgroundTopColor(0.020, 0.039, 0.078); | |
| 4 | 4 | Window.SetBackgroundBottomColor(0.020, 0.039, 0.078); | |
| 5 | 5 | ||
| 6 | 6 | logo.image = Image("logo.png"); | |
| 7 | 7 | logo.sprite = Sprite(logo.image); | |
| 8 | - | logo.sprite.SetX (Window.GetWidth() / 2 - logo.image.GetWidth() / 2); | |
| 9 | - | logo.sprite.SetY (Window.GetHeight() / 2 - logo.image.GetHeight() / 2); | |
| 10 | - | logo.sprite.SetOpacity (1); | |
| 8 | + | ||
| 9 | + | # Center the logo during boot | |
| 10 | + | logo.normal_x = Window.GetWidth() / 2 - logo.image.GetWidth() / 2; | |
| 11 | + | logo.normal_y = Window.GetHeight() / 2 - logo.image.GetHeight() / 2; | |
| 12 | + | logo.sprite.SetPosition(logo.normal_x, logo.normal_y, 1); | |
| 13 | + | logo.sprite.SetOpacity(1); | |
| 11 | 14 | ||
| 12 | 15 | # Use these to adjust the progress bar timing | |
| 13 | 16 | global.fake_progress_limit = 0.7; # Target percentage for fake progress (0.0 to 1.0) | |
| @@ -25,25 +28,25 @@ global.max_progress = 0.0; # Track the maximum progress reached to prevent back | |||
| 25 | 28 | fun refresh_callback () | |
| 26 | 29 | { | |
| 27 | 30 | global.animation_frame++; | |
| 28 | - | ||
| 31 | + | ||
| 29 | 32 | # Animate fake progress to limit over time with easing | |
| 30 | 33 | if (global.fake_progress_active == 1) | |
| 31 | 34 | { | |
| 32 | 35 | # Calculate elapsed time since start | |
| 33 | 36 | elapsed_time = global.animation_frame / 50.0; # Convert frames to seconds (50 FPS) | |
| 34 | - | ||
| 37 | + | ||
| 35 | 38 | # Calculate linear progress ratio (0 to 1) based on time | |
| 36 | 39 | time_ratio = elapsed_time / global.fake_progress_duration; | |
| 37 | 40 | if (time_ratio > 1.0) | |
| 38 | 41 | time_ratio = 1.0; | |
| 39 | - | ||
| 42 | + | ||
| 40 | 43 | # Apply easing curve: ease-out quadratic | |
| 41 | 44 | # Formula: 1 - (1 - x)^2 | |
| 42 | 45 | eased_ratio = 1 - ((1 - time_ratio) * (1 - time_ratio)); | |
| 43 | - | ||
| 46 | + | ||
| 44 | 47 | # Calculate fake progress based on eased ratio | |
| 45 | 48 | global.fake_progress = eased_ratio * global.fake_progress_limit; | |
| 46 | - | ||
| 49 | + | ||
| 47 | 50 | # Update progress bar with fake progress | |
| 48 | 51 | update_progress_bar(global.fake_progress); | |
| 49 | 52 | } | |
| @@ -62,7 +65,7 @@ fun update_progress_bar(progress) | |||
| 62 | 65 | global.max_progress = progress; | |
| 63 | 66 | width = Math.Int(progress_bar.original_image.GetWidth() * progress); | |
| 64 | 67 | if (width < 1) width = 1; # Ensure minimum width of 1 pixel | |
| 65 | - | ||
| 68 | + | ||
| 66 | 69 | progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight()); | |
| 67 | 70 | progress_bar.sprite.SetImage(progress_bar.image); | |
| 68 | 71 | } | |
| @@ -118,14 +121,24 @@ lock.image = Image("lock.png"); | |||
| 118 | 121 | entry.image = Image("entry.png"); | |
| 119 | 122 | bullet.image = Image("bullet.png"); | |
| 120 | 123 | ||
| 124 | + | # Gap between logo bottom and entry top when password dialog is shown | |
| 125 | + | dialog_gap = 32; | |
| 126 | + | ||
| 127 | + | # Total height of logo + gap + entry when grouped for password dialog | |
| 128 | + | dialog_group_height = logo.image.GetHeight() + dialog_gap + entry.image.GetHeight(); | |
| 129 | + | ||
| 130 | + | # Vertical start so the group is centered on screen | |
| 131 | + | dialog_group_y = Window.GetHeight() / 2 - dialog_group_height / 2; | |
| 132 | + | ||
| 133 | + | # Entry sits below the logo in password mode | |
| 134 | + | entry.dialog_y = dialog_group_y + logo.image.GetHeight() + dialog_gap; | |
| 135 | + | entry.x = Window.GetWidth() / 2 - entry.image.GetWidth() / 2; | |
| 136 | + | ||
| 121 | 137 | entry.sprite = Sprite(entry.image); | |
| 122 | - | entry.x = Window.GetWidth()/2 - entry.image.GetWidth() / 2; | |
| 123 | - | entry.y = logo.sprite.GetY() + logo.image.GetHeight() + 40; | |
| 124 | - | entry.sprite.SetPosition(entry.x, entry.y, 10001); | |
| 138 | + | entry.sprite.SetPosition(entry.x, entry.dialog_y, 10001); | |
| 125 | 139 | entry.sprite.SetOpacity(0); | |
| 126 | 140 | ||
| 127 | - | # Scale lock to be slightly shorter than entry field height | |
| 128 | - | # Original lock is 84x96, entry height determines scale | |
| 141 | + | # Scale lock icon to match entry field height | |
| 129 | 142 | lock_height = entry.image.GetHeight() * 0.8; | |
| 130 | 143 | lock_scale = lock_height / 96; | |
| 131 | 144 | lock_width = 84 * lock_scale; | |
| @@ -133,7 +146,7 @@ lock_width = 84 * lock_scale; | |||
| 133 | 146 | scaled_lock = lock.image.Scale(lock_width, lock_height); | |
| 134 | 147 | lock.sprite = Sprite(scaled_lock); | |
| 135 | 148 | lock.x = entry.x - lock_width - 15; | |
| 136 | - | lock.y = entry.y + entry.image.GetHeight()/2 - lock_height/2; | |
| 149 | + | lock.y = entry.dialog_y + entry.image.GetHeight() / 2 - lock_height / 2; | |
| 137 | 150 | lock.sprite.SetPosition(lock.x, lock.y, 10001); | |
| 138 | 151 | lock.sprite.SetOpacity(0); | |
| 139 | 152 | ||
| @@ -143,10 +156,13 @@ bullet.sprites = []; | |||
| 143 | 156 | fun display_normal_callback () | |
| 144 | 157 | { | |
| 145 | 158 | hide_password_dialog(); | |
| 146 | - | ||
| 159 | + | ||
| 160 | + | # Restore logo to center when back to normal boot screen | |
| 161 | + | logo.sprite.SetPosition(logo.normal_x, logo.normal_y, 1); | |
| 162 | + | ||
| 147 | 163 | # Get current mode | |
| 148 | 164 | mode = Plymouth.GetMode(); | |
| 149 | - | ||
| 165 | + | ||
| 150 | 166 | # Only show progress bar for boot and resume modes | |
| 151 | 167 | if ((mode == "boot" || mode == "resume") && global.password_shown == 1) | |
| 152 | 168 | { | |
| @@ -158,7 +174,11 @@ fun display_normal_callback () | |||
| 158 | 174 | fun display_password_callback (prompt, bullets) | |
| 159 | 175 | { | |
| 160 | 176 | global.password_shown = 1; # Mark that password dialog has been shown | |
| 161 | - | ||
| 177 | + | ||
| 178 | + | # Move logo up so logo + entry are centered together as a group | |
| 179 | + | logo_dialog_y = dialog_group_y; | |
| 180 | + | logo.sprite.SetPosition(logo.normal_x, logo_dialog_y, 1); | |
| 181 | + | ||
| 162 | 182 | # Reset progress when password dialog appears | |
| 163 | 183 | stop_fake_progress(); | |
| 164 | 184 | hide_progress_bar(); | |
| @@ -166,17 +186,17 @@ fun display_password_callback (prompt, bullets) | |||
| 166 | 186 | global.fake_progress = 0.0; | |
| 167 | 187 | global.real_progress = 0.0; | |
| 168 | 188 | show_password_dialog(); | |
| 169 | - | ||
| 189 | + | ||
| 170 | 190 | # Clear all bullets first | |
| 171 | 191 | for (index = 0; bullet.sprites[index]; index++) | |
| 172 | 192 | bullet.sprites[index].SetOpacity(0); | |
| 173 | - | ||
| 193 | + | ||
| 174 | 194 | # Create and show bullets for current password (max 21) | |
| 175 | 195 | max_bullets = 21; | |
| 176 | 196 | bullets_to_show = bullets; | |
| 177 | 197 | if (bullets_to_show > max_bullets) | |
| 178 | 198 | bullets_to_show = max_bullets; | |
| 179 | - | ||
| 199 | + | ||
| 180 | 200 | for (index = 0; index < bullets_to_show; index++) | |
| 181 | 201 | { | |
| 182 | 202 | if (!bullet.sprites[index]) | |
| @@ -185,7 +205,7 @@ fun display_password_callback (prompt, bullets) | |||
| 185 | 205 | scaled_bullet = bullet.image.Scale(7, 7); | |
| 186 | 206 | bullet.sprites[index] = Sprite(scaled_bullet); | |
| 187 | 207 | bullet.x = entry.x + 20 + index * (7 + 5); | |
| 188 | - | bullet.y = entry.y + entry.image.GetHeight() / 2 - 3.5; | |
| 208 | + | bullet.y = entry.dialog_y + entry.image.GetHeight() / 2 - 3.5; | |
| 189 | 209 | bullet.sprites[index].SetPosition(bullet.x, bullet.y, 10002); | |
| 190 | 210 | } | |
| 191 | 211 | bullet.sprites[index].SetOpacity(1); | |
| @@ -201,7 +221,7 @@ progress_box.image = Image("progress_box.png"); | |||
| 201 | 221 | progress_box.sprite = Sprite(progress_box.image); | |
| 202 | 222 | ||
| 203 | 223 | progress_box.x = Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2; | |
| 204 | - | progress_box.y = entry.y + entry.image.GetHeight() / 2 - progress_box.image.GetHeight() / 2; | |
| 224 | + | progress_box.y = logo.normal_y + logo.image.GetHeight() + 40; | |
| 205 | 225 | progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0); | |
| 206 | 226 | progress_box.sprite.SetOpacity(0); | |
| 207 | 227 | ||
| @@ -217,7 +237,7 @@ progress_bar.sprite.SetOpacity(0); | |||
| 217 | 237 | fun progress_callback (duration, progress) | |
| 218 | 238 | { | |
| 219 | 239 | global.real_progress = progress; | |
| 220 | - | ||
| 240 | + | ||
| 221 | 241 | # If real progress is above limit, stop fake progress and use real progress | |
| 222 | 242 | if (progress > global.fake_progress_limit) | |
| 223 | 243 | { | |
| @@ -1,13 +1,16 @@ | |||||
| 1 | - | # Omarchy Plymouth Theme Script | 1 | + | # Arch Linux Plymouth Theme Script |
| 2 | 2 | ||||
| 3 | Window.SetBackgroundTopColor(0.020, 0.039, 0.078); | 3 | Window.SetBackgroundTopColor(0.020, 0.039, 0.078); | ||
| 4 | Window.SetBackgroundBottomColor(0.020, 0.039, 0.078); | 4 | Window.SetBackgroundBottomColor(0.020, 0.039, 0.078); | ||
| 5 | 5 | ||||
| 6 | logo.image = Image("logo.png"); | 6 | logo.image = Image("logo.png"); | ||
| 7 | logo.sprite = Sprite(logo.image); | 7 | logo.sprite = Sprite(logo.image); | ||
| 8 | - | logo.sprite.SetX (Window.GetWidth() / 2 - logo.image.GetWidth() / 2); | 8 | + | |
| 9 | - | logo.sprite.SetY (Window.GetHeight() / 2 - logo.image.GetHeight() / 2); | 9 | + | # Center the logo during boot |
| 10 | - | logo.sprite.SetOpacity (1); | 10 | + | logo.normal_x = Window.GetWidth() / 2 - logo.image.GetWidth() / 2; |
| 11 | + | logo.normal_y = Window.GetHeight() / 2 - logo.image.GetHeight() / 2; | |||
| 12 | + | logo.sprite.SetPosition(logo.normal_x, logo.normal_y, 1); | |||
| 13 | + | logo.sprite.SetOpacity(1); | |||
| 11 | 14 | ||||
| 12 | # Use these to adjust the progress bar timing | 15 | # Use these to adjust the progress bar timing | ||
| 13 | global.fake_progress_limit = 0.7; # Target percentage for fake progress (0.0 to 1.0) | 16 | global.fake_progress_limit = 0.7; # Target percentage for fake progress (0.0 to 1.0) | ||
| @@ -25,25 +28,25 @@ global.max_progress = 0.0; # Track the maximum progress reached to prevent back | |||||
| 25 | fun refresh_callback () | 28 | fun refresh_callback () | ||
| 26 | { | 29 | { | ||
| 27 | global.animation_frame++; | 30 | global.animation_frame++; | ||
| 28 | - | 31 | + | ||
| 29 | # Animate fake progress to limit over time with easing | 32 | # Animate fake progress to limit over time with easing | ||
| 30 | if (global.fake_progress_active == 1) | 33 | if (global.fake_progress_active == 1) | ||
| 31 | { | 34 | { | ||
| 32 | # Calculate elapsed time since start | 35 | # Calculate elapsed time since start | ||
| 33 | elapsed_time = global.animation_frame / 50.0; # Convert frames to seconds (50 FPS) | 36 | elapsed_time = global.animation_frame / 50.0; # Convert frames to seconds (50 FPS) | ||
| 34 | - | 37 | + | ||
| 35 | # Calculate linear progress ratio (0 to 1) based on time | 38 | # Calculate linear progress ratio (0 to 1) based on time | ||
| 36 | time_ratio = elapsed_time / global.fake_progress_duration; | 39 | time_ratio = elapsed_time / global.fake_progress_duration; | ||
| 37 | if (time_ratio > 1.0) | 40 | if (time_ratio > 1.0) | ||
| 38 | time_ratio = 1.0; | 41 | time_ratio = 1.0; | ||
| 39 | - | 42 | + | ||
| 40 | # Apply easing curve: ease-out quadratic | 43 | # Apply easing curve: ease-out quadratic | ||
| 41 | # Formula: 1 - (1 - x)^2 | 44 | # Formula: 1 - (1 - x)^2 | ||
| 42 | eased_ratio = 1 - ((1 - time_ratio) * (1 - time_ratio)); | 45 | eased_ratio = 1 - ((1 - time_ratio) * (1 - time_ratio)); | ||
| 43 | - | 46 | + | ||
| 44 | # Calculate fake progress based on eased ratio | 47 | # Calculate fake progress based on eased ratio | ||
| 45 | global.fake_progress = eased_ratio * global.fake_progress_limit; | 48 | global.fake_progress = eased_ratio * global.fake_progress_limit; | ||
| 46 | - | 49 | + | ||
| 47 | # Update progress bar with fake progress | 50 | # Update progress bar with fake progress | ||
| 48 | update_progress_bar(global.fake_progress); | 51 | update_progress_bar(global.fake_progress); | ||
| 49 | } | 52 | } | ||
| @@ -62,7 +65,7 @@ fun update_progress_bar(progress) | |||||
| 62 | global.max_progress = progress; | 65 | global.max_progress = progress; | ||
| 63 | width = Math.Int(progress_bar.original_image.GetWidth() * progress); | 66 | width = Math.Int(progress_bar.original_image.GetWidth() * progress); | ||
| 64 | if (width < 1) width = 1; # Ensure minimum width of 1 pixel | 67 | if (width < 1) width = 1; # Ensure minimum width of 1 pixel | ||
| 65 | - | 68 | + | ||
| 66 | progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight()); | 69 | progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight()); | ||
| 67 | progress_bar.sprite.SetImage(progress_bar.image); | 70 | progress_bar.sprite.SetImage(progress_bar.image); | ||
| 68 | } | 71 | } | ||
| @@ -118,14 +121,24 @@ lock.image = Image("lock.png"); | |||||
| 118 | entry.image = Image("entry.png"); | 121 | entry.image = Image("entry.png"); | ||
| 119 | bullet.image = Image("bullet.png"); | 122 | bullet.image = Image("bullet.png"); | ||
| 120 | 123 | ||||
| 124 | + | # Gap between logo bottom and entry top when password dialog is shown | |||
| 125 | + | dialog_gap = 32; | |||
| 126 | + | ||||
| 127 | + | # Total height of logo + gap + entry when grouped for password dialog | |||
| 128 | + | dialog_group_height = logo.image.GetHeight() + dialog_gap + entry.image.GetHeight(); | |||
| 129 | + | ||||
| 130 | + | # Vertical start so the group is centered on screen | |||
| 131 | + | dialog_group_y = Window.GetHeight() / 2 - dialog_group_height / 2; | |||
| 132 | + | ||||
| 133 | + | # Entry sits below the logo in password mode | |||
| 134 | + | entry.dialog_y = dialog_group_y + logo.image.GetHeight() + dialog_gap; | |||
| 135 | + | entry.x = Window.GetWidth() / 2 - entry.image.GetWidth() / 2; | |||
| 136 | + | ||||
| 121 | entry.sprite = Sprite(entry.image); | 137 | entry.sprite = Sprite(entry.image); | ||
| 122 | - | entry.x = Window.GetWidth()/2 - entry.image.GetWidth() / 2; | 138 | + | entry.sprite.SetPosition(entry.x, entry.dialog_y, 10001); |
| 123 | - | entry.y = logo.sprite.GetY() + logo.image.GetHeight() + 40; | |||
| 124 | - | entry.sprite.SetPosition(entry.x, entry.y, 10001); | |||
| 125 | entry.sprite.SetOpacity(0); | 139 | entry.sprite.SetOpacity(0); | ||
| 126 | 140 | ||||
| 127 | - | # Scale lock to be slightly shorter than entry field height | 141 | + | # Scale lock icon to match entry field height |
| 128 | - | # Original lock is 84x96, entry height determines scale | |||
| 129 | lock_height = entry.image.GetHeight() * 0.8; | 142 | lock_height = entry.image.GetHeight() * 0.8; | ||
| 130 | lock_scale = lock_height / 96; | 143 | lock_scale = lock_height / 96; | ||
| 131 | lock_width = 84 * lock_scale; | 144 | lock_width = 84 * lock_scale; | ||
| @@ -133,7 +146,7 @@ lock_width = 84 * lock_scale; | |||||
| 133 | scaled_lock = lock.image.Scale(lock_width, lock_height); | 146 | scaled_lock = lock.image.Scale(lock_width, lock_height); | ||
| 134 | lock.sprite = Sprite(scaled_lock); | 147 | lock.sprite = Sprite(scaled_lock); | ||
| 135 | lock.x = entry.x - lock_width - 15; | 148 | lock.x = entry.x - lock_width - 15; | ||
| 136 | - | lock.y = entry.y + entry.image.GetHeight()/2 - lock_height/2; | 149 | + | lock.y = entry.dialog_y + entry.image.GetHeight() / 2 - lock_height / 2; |
| 137 | lock.sprite.SetPosition(lock.x, lock.y, 10001); | 150 | lock.sprite.SetPosition(lock.x, lock.y, 10001); | ||
| 138 | lock.sprite.SetOpacity(0); | 151 | lock.sprite.SetOpacity(0); | ||
| 139 | 152 | ||||
| @@ -143,10 +156,13 @@ bullet.sprites = []; | |||||
| 143 | fun display_normal_callback () | 156 | fun display_normal_callback () | ||
| 144 | { | 157 | { | ||
| 145 | hide_password_dialog(); | 158 | hide_password_dialog(); | ||
| 146 | - | 159 | + | ||
| 160 | + | # Restore logo to center when back to normal boot screen | |||
| 161 | + | logo.sprite.SetPosition(logo.normal_x, logo.normal_y, 1); | |||
| 162 | + | ||||
| 147 | # Get current mode | 163 | # Get current mode | ||
| 148 | mode = Plymouth.GetMode(); | 164 | mode = Plymouth.GetMode(); | ||
| 149 | - | 165 | + | ||
| 150 | # Only show progress bar for boot and resume modes | 166 | # Only show progress bar for boot and resume modes | ||
| 151 | if ((mode == "boot" || mode == "resume") && global.password_shown == 1) | 167 | if ((mode == "boot" || mode == "resume") && global.password_shown == 1) | ||
| 152 | { | 168 | { | ||
| @@ -158,7 +174,11 @@ fun display_normal_callback () | |||||
| 158 | fun display_password_callback (prompt, bullets) | 174 | fun display_password_callback (prompt, bullets) | ||
| 159 | { | 175 | { | ||
| 160 | global.password_shown = 1; # Mark that password dialog has been shown | 176 | global.password_shown = 1; # Mark that password dialog has been shown | ||
| 161 | - | 177 | + | ||
| 178 | + | # Move logo up so logo + entry are centered together as a group | |||
| 179 | + | logo_dialog_y = dialog_group_y; | |||
| 180 | + | logo.sprite.SetPosition(logo.normal_x, logo_dialog_y, 1); | |||
| 181 | + | ||||
| 162 | # Reset progress when password dialog appears | 182 | # Reset progress when password dialog appears | ||
| 163 | stop_fake_progress(); | 183 | stop_fake_progress(); | ||
| 164 | hide_progress_bar(); | 184 | hide_progress_bar(); | ||
| @@ -166,17 +186,17 @@ fun display_password_callback (prompt, bullets) | |||||
| 166 | global.fake_progress = 0.0; | 186 | global.fake_progress = 0.0; | ||
| 167 | global.real_progress = 0.0; | 187 | global.real_progress = 0.0; | ||
| 168 | show_password_dialog(); | 188 | show_password_dialog(); | ||
| 169 | - | 189 | + | ||
| 170 | # Clear all bullets first | 190 | # Clear all bullets first | ||
| 171 | for (index = 0; bullet.sprites[index]; index++) | 191 | for (index = 0; bullet.sprites[index]; index++) | ||
| 172 | bullet.sprites[index].SetOpacity(0); | 192 | bullet.sprites[index].SetOpacity(0); | ||
| 173 | - | 193 | + | ||
| 174 | # Create and show bullets for current password (max 21) | 194 | # Create and show bullets for current password (max 21) | ||
| 175 | max_bullets = 21; | 195 | max_bullets = 21; | ||
| 176 | bullets_to_show = bullets; | 196 | bullets_to_show = bullets; | ||
| 177 | if (bullets_to_show > max_bullets) | 197 | if (bullets_to_show > max_bullets) | ||
| 178 | bullets_to_show = max_bullets; | 198 | bullets_to_show = max_bullets; | ||
| 179 | - | 199 | + | ||
| 180 | for (index = 0; index < bullets_to_show; index++) | 200 | for (index = 0; index < bullets_to_show; index++) | ||
| 181 | { | 201 | { | ||
| 182 | if (!bullet.sprites[index]) | 202 | if (!bullet.sprites[index]) | ||
| @@ -185,7 +205,7 @@ fun display_password_callback (prompt, bullets) | |||||
| 185 | scaled_bullet = bullet.image.Scale(7, 7); | 205 | scaled_bullet = bullet.image.Scale(7, 7); | ||
| 186 | bullet.sprites[index] = Sprite(scaled_bullet); | 206 | bullet.sprites[index] = Sprite(scaled_bullet); | ||
| 187 | bullet.x = entry.x + 20 + index * (7 + 5); | 207 | bullet.x = entry.x + 20 + index * (7 + 5); | ||
| 188 | - | bullet.y = entry.y + entry.image.GetHeight() / 2 - 3.5; | 208 | + | bullet.y = entry.dialog_y + entry.image.GetHeight() / 2 - 3.5; |
| 189 | bullet.sprites[index].SetPosition(bullet.x, bullet.y, 10002); | 209 | bullet.sprites[index].SetPosition(bullet.x, bullet.y, 10002); | ||
| 190 | } | 210 | } | ||
| 191 | bullet.sprites[index].SetOpacity(1); | 211 | bullet.sprites[index].SetOpacity(1); | ||
| @@ -201,7 +221,7 @@ progress_box.image = Image("progress_box.png"); | |||||
| 201 | progress_box.sprite = Sprite(progress_box.image); | 221 | progress_box.sprite = Sprite(progress_box.image); | ||
| 202 | 222 | ||||
| 203 | progress_box.x = Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2; | 223 | progress_box.x = Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2; | ||
| 204 | - | progress_box.y = entry.y + entry.image.GetHeight() / 2 - progress_box.image.GetHeight() / 2; | 224 | + | progress_box.y = logo.normal_y + logo.image.GetHeight() + 40; |
| 205 | progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0); | 225 | progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0); | ||
| 206 | progress_box.sprite.SetOpacity(0); | 226 | progress_box.sprite.SetOpacity(0); | ||
| 207 | 227 | ||||
| @@ -217,7 +237,7 @@ progress_bar.sprite.SetOpacity(0); | |||||
| 217 | fun progress_callback (duration, progress) | 237 | fun progress_callback (duration, progress) | ||
| 218 | { | 238 | { | ||
| 219 | global.real_progress = progress; | 239 | global.real_progress = progress; | ||
| 220 | - | 240 | + | ||
| 221 | # If real progress is above limit, stop fake progress and use real progress | 241 | # If real progress is above limit, stop fake progress and use real progress | ||
| 222 | if (progress > global.fake_progress_limit) | 242 | if (progress > global.fake_progress_limit) | ||
| 223 | { | 243 | { | ||