Visual pathing for bbs finishers

master
Wynd 2026-03-04 01:13:06 +02:00
parent b8755b847c
commit b606c3b095
6 changed files with 143 additions and 35 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "khguide"
version = "1.4.0"
version = "1.4.1"
edition = "2024"
[dependencies]

View File

@ -11,7 +11,8 @@ name = "Heat Slash 1"
char = ["A", "V", "T"]
level = 2
row = 1
next = ["finish"]
path = [false, false, true]
previous = ["finish"]
goal = "Activate the Firestorm Command Style 8 times"
color = "#d00000"
@ -20,7 +21,8 @@ name = "Heat Slash 2"
char = ["A"]
level = 3
row = 1
next = ["heat-slash-1"]
path = [false, true, false]
previous = ["heat-slash-1"]
goal = "Activate the Firestorm Command Style 12 times"
color = "#d00000"
@ -29,7 +31,8 @@ name = "Rising Rock 1"
char = ["T"]
level = 2
row = 3
next = ["finish"]
path = [false, true, false]
previous = ["finish"]
goal = "Earn 2000 CP"
color = "#683000"
@ -38,7 +41,8 @@ name = "Rising Rock 2"
char = ["T"]
level = 3
row = 3
next = ["rising-rock-1"]
path = [false, true, false]
previous = ["rising-rock-1"]
goal = "Earn 4200 CP"
color = "#683000"
@ -47,7 +51,8 @@ name = "Dark Star 1"
char = ["T"]
level = 4
row = 2
next = ["rising-rock-2"]
path = [false, false, true]
previous = ["rising-rock-2"]
goal = "Defeat 420 enemies"
color = "#683000"
@ -56,7 +61,8 @@ name = "Dark Star 2"
char = ["T"]
level = 5
row = 1
next = ["dark-star-1"]
path = [false, false, true]
previous = ["dark-star-1"]
goal = "Defeat 550 enemies"
color = "#683000"
@ -65,7 +71,8 @@ name = "Air Flair 1"
char = ["V"]
level = 2
row = 3
next = ["finish"]
path = [false, true, false]
previous = ["finish"]
goal = "Earn 2000 CP"
color = "#0088f8"
@ -74,7 +81,8 @@ name = "Air Flair 2"
char = ["V"]
level = 3
row = 3
next = ["air-flair-1"]
path = [false, true, false]
previous = ["air-flair-1"]
goal = "Earn 4000 CP"
color = "#0088f8"
@ -83,7 +91,8 @@ name = "Air Flair 3"
char = ["V"]
level = 4
row = 2
next = ["air-flair-2"]
path = [false, false, true]
previous = ["air-flair-2"]
goal = "Take 4500 steps"
color = "#0088f8"
@ -92,7 +101,8 @@ name = "Air Flair 4"
char = ["V"]
level = 5
row = 1
next = ["air-flair-3"]
path = [false, false, true]
previous = ["air-flair-3"]
goal = "Take 7000 steps"
color = "#0088f8"
@ -101,7 +111,8 @@ name = "Magic Pulse 1"
char = ["A"]
level = 2
row = 3
next = ["finish"]
path = [false, true, false]
previous = ["finish"]
goal = "Earn 2000 CP"
color = "#7000d0"
@ -110,7 +121,8 @@ name = "Magic Pulse 2"
char = ["A"]
level = 3
row = 3
next = ["magic-pulse-1"]
path = [false, true, false]
previous = ["magic-pulse-1"]
goal = "Earn 3800 CP"
color = "#7000d0"
@ -119,7 +131,8 @@ name = "Magic Pulse 3"
char = ["A"]
level = 4
row = 2
next = ["magic-pulse-2"]
path = [false, false, true]
previous = ["magic-pulse-2"]
goal = "Defeat 350 enemies"
color = "#7000d0"
@ -128,7 +141,8 @@ name = "Magic Pulse 4"
char = ["A"]
level = 5
row = 1
next = ["magic-pulse-3"]
path = [false, false, true]
previous = ["magic-pulse-3"]
goal = "Defeat 500 enemies"
color = "#7000d0"
@ -137,7 +151,8 @@ name = "Gold Rush"
char = ["A", "V", "T"]
level = 2
row = 5
next = ["finish"]
path = [true, false, false]
previous = ["finish"]
goal = "Collect 1000 munny"
color = "#e8d800"
@ -146,7 +161,8 @@ name = "Ramuh's Judgement"
char = ["A", "V", "T"]
level = 3
row = 2
next = ["air-flair-1", "magic-pulse-1", "rising-rock-1"]
path = [false, false, true]
previous = ["air-flair-1", "magic-pulse-1", "rising-rock-1"]
goal = "Activate the Thunderbolt Command Style 12 times"
color = "green"
@ -155,7 +171,8 @@ name = "Twisted Hours"
char = ["A", "V", "T"]
level = 3
row = 4
next = ["air-flair-1", "magic-pulse-1", "rising-rock-1", "gold-rush"]
path = [true, false, true]
previous = ["air-flair-1", "magic-pulse-1", "rising-rock-1", "gold-rush"]
goal = "Take 7000 steps"
color = "gray"
@ -164,7 +181,8 @@ name = "Surprise! 1"
char = ["A", "V", "T"]
level = 3
row = 5
next = ["gold-rush"]
path = [false, true, false]
previous = ["gold-rush"]
goal = "Collect 1400 munny"
color = "#e8d800"
@ -172,8 +190,9 @@ color = "#e8d800"
name = "Surprise! 2"
char = ["A", "V", "T"]
level = 4
row = 4
next = ["twisted-hours", "surprise-1"]
row = 5
path = [true, true, false]
previous = ["twisted-hours", "surprise-1"]
goal = "Collect 5200 munny"
color = "#e8d800"
@ -182,7 +201,8 @@ name = "Heal Strike"
char = ["A", "V", "T"]
level = 4
row = 3
next = ["rising-rock-2", "air-flair-2", "magic-pulse-2"]
path = [false, true, false]
previous = ["rising-rock-2", "air-flair-2", "magic-pulse-2"]
goal = "Use the effect of Second Chance or Once More to survive lethal damage 5 times"
color = "green"
@ -191,7 +211,8 @@ name = "Random End"
char = ["T"]
level = 4
row = 4
next = ["twisted-hours"]
path = [false, true, false]
previous = ["twisted-hours"]
goal = "Take 8000 steps"
color = "gray"
@ -200,7 +221,8 @@ name = "Explosion"
char = ["A", "V", "T"]
level = 5
row = 2
next = ["dark-star-1", "air-flair-3", "magic-pulse-3"]
path = [false, true, false]
previous = ["dark-star-1", "air-flair-3", "magic-pulse-3"]
goal = "Earn 6400 CP"
color = "orange"
@ -208,8 +230,9 @@ color = "orange"
name = "Celebration"
char = ["V"]
level = 5
row = 4
next = ["surprise-2"]
row = 5
path = [false, true, false]
previous = ["surprise-2"]
goal = "Collect 7000 munny"
color = "#e8d800"
@ -218,7 +241,8 @@ name = "Ice Burst"
char = ["A"]
level = 5
row = 3
next = ["magic-pulse-3"]
path = [true, false, false]
previous = ["magic-pulse-3"]
goal = "Activate the Diamond Dust Command Style 15 times"
color = "#50b8e8"
@ -227,7 +251,8 @@ name = "Demolition"
char = ["T"]
level = 6
row = 1
next = ["dark-star-2"]
path = [false, true, false]
previous = ["dark-star-2"]
goal = "Earn 10000 CP"
color = "#183050"
@ -236,7 +261,8 @@ name = "Stratosphere"
char = ["V"]
level = 6
row = 1
next = ["air-flair-4"]
path = [false, true, false]
previous = ["air-flair-4"]
goal = "Defeat 800 enemies"
color = "#e8e8d0"
@ -245,6 +271,7 @@ name = "Teleport Spike"
char = ["A"]
level = 6
row = 1
next = ["magic-pulse-4"]
path = [false, true, false]
previous = ["magic-pulse-4"]
goal = "Defeat 800 enemies"
color = "#b830a0"

View File

@ -5,7 +5,7 @@ document.addEventListener("DOMContentLoaded", (event) => {
'input[type="radio"][name="charFilter"]',
);
let detailsField = document.getElementById("finisherDetails");
const detailsField = document.getElementById("finisher-details");
charFilters[0].checked = true;
charFilters.forEach(function (item, _) {

View File

@ -9,6 +9,7 @@ table {
& td,
& td:first-child {
position: relative;
border: 0px;
height: 33px;
text-shadow: 2px 2px #000;
@ -23,9 +24,57 @@ table {
}
}
#finisherDetails {
.path {
position: absolute;
top: -38px;
left: -50%;
font-size: 100px;
width: 100%;
height: 100%;
z-index: 2;
pointer-events: none;
clip-path: circle(22% at 155px 60px);
&::after {
content: "─";
}
&.top {
/* top: -56px; */
z-index: 1;
&::after {
content: "└";
}
}
&.bottom {
/* top: -20px; */
z-index: 1;
&::after {
content: "┌";
}
}
}
#finisher-details {
text-align: center;
font-size: 18px;
margin-top: 16px;
text-shadow: 2px 2px #000;
}
@media (max-width: 768px) {
table {
width: 200%;
}
#finisher-details {
width: 200%;
}
.path {
top: 5px;
font-size: 30px;
clip-path: none;
}
}

View File

@ -2,15 +2,33 @@ use serde::Deserialize;
use super::Character;
type Path = (bool, bool, bool);
#[derive(Debug, Deserialize)]
pub struct Finisher {
pub name: String,
pub char: Vec<Character>,
pub level: u8,
#[serde(default)]
pub next: Vec<String>,
pub previous: Vec<String>,
#[serde(default)]
pub path: Path,
#[serde(default)]
pub row: u8,
pub goal: String,
pub color: String,
}
impl Finisher {
pub fn has_top_path(&self) -> bool {
self.path.0
}
pub fn has_mid_path(&self) -> bool {
self.path.1
}
pub fn has_bottom_path(&self) -> bool {
self.path.2
}
}

View File

@ -28,7 +28,21 @@
{% for lvl in 1..=6u8 %}
{% match get_at(char, *lvl, *row) %}
{% when Some with (val) %}
<td class="finisher" style="color: {{val.color}};" data-goal="{{ val.goal }}">{{ val.name }}</td>
<td class="finisher" style="color: {{val.color}};" data-goal="{{ val.goal }}">
{{ val.name }}
{% if val.has_top_path() %}
<div class="path top"></div>
{% endif %}
{% if val.has_mid_path() %}
<div class="path"></div>
{% endif %}
{% if val.has_bottom_path() %}
<div class="path bottom"></div>
{% endif %}
</td>
{% when None %}
<td></td>
{% endmatch %}
@ -39,6 +53,6 @@
{% endfor %}
</table>
<div id="finisherDetails">---</div>
<div id="finisher-details">---</div>
{% endblock %}