From b874b2dbea0398745744563ff6a1412b0a25036a Mon Sep 17 00:00:00 2001 From: ruben Date: Mon, 30 Jan 2023 22:59:17 +0100 Subject: [PATCH] sus --- web/package.json | 5 +- web/src/lib/operators.ts | 654 ++++++++++++++++++++++++++++++++---- web/src/routes/+page.svelte | 62 +++- web/src/routes/+page.ts | 6 + web/yarn.lock | 35 ++ 5 files changed, 691 insertions(+), 71 deletions(-) create mode 100644 web/src/routes/+page.ts diff --git a/web/package.json b/web/package.json index a8d1d79..412e00a 100644 --- a/web/package.json +++ b/web/package.json @@ -30,6 +30,9 @@ }, "type": "module", "dependencies": { - "dotenv": "^16.0.3" + "@svelteuidev/composables": "^0.8.0", + "@svelteuidev/core": "^0.8.0", + "dotenv": "^16.0.3", + "svelte-icons": "^2.1.0" } } diff --git a/web/src/lib/operators.ts b/web/src/lib/operators.ts index a8ec0a4..8e4304f 100644 --- a/web/src/lib/operators.ts +++ b/web/src/lib/operators.ts @@ -5,14 +5,16 @@ class Operator { roles: Array; speed: number; squad: Squad; + image: string; - constructor(name: string, gender: Gender, side: Side, roles: Array, speed: number, squad: Squad) { + constructor(name: string, gender: Gender, side: Side, roles: Array, speed: number, squad: Squad, image: string) { this.name = name; this.gender = gender; this.side = side; this.roles = roles; this.speed = speed; this.squad = squad; + this.image = image; } } @@ -23,8 +25,8 @@ enum Gender { } enum Side { - attacker, - defender + attacker = `url("data:image/svg+xml;charset=utf8,")`, + defender = `url("data:image/svg+xml;charset=utf8,")` } enum Squad { @@ -57,84 +59,600 @@ enum Role { } const operators: Array = [ - new Operator('Solid', Gender.female, Side.defender, [Role.Intel_Gatherer], 2, Squad.Ghosteyes), - new Operator('Grim', Gender.male, Side.attacker, [Role.Intel_Gatherer, Role.Area_Denial], 3, Squad.Nighthaven), - new Operator('Sens', Gender.divers, Side.attacker, [Role.Covering_Fire, Role.Area_Denial, Role.Crowd_Control], 3, Squad.Wolfguard), - new Operator('Azami', Gender.female, Side.defender, [Role.Area_Denial], 2, Squad.Rainbow), - new Operator('Thorn', Gender.female, Side.defender, [Role.Anchor, Role.Secure], 2, Squad.Rainbow), - new Operator('Osa', Gender.divers, Side.attacker, [Role.Intel_Gatherer, Role.Area_Denial, Role.Anti_Roam], 1, Squad.Nighthaven), - new Operator('Thunderbird', Gender.female, Side.defender, [Role.Secure, Role.Roam, Role.Buff], 2, Squad.Wolfguard), - new Operator('Flores', Gender.male, Side.attacker, [Role.Disable, Role.Soft_Breach, Role.Area_Denial, Role.Back_Line], 2, Squad.Ghosteyes), - new Operator('Aruni', Gender.female, Side.defender, [Role.Intel_Gatherer, Role.Secure, Role.Anchor], 1, Squad.Nighthaven), - new Operator('Zero', Gender.male, Side.attacker, [Role.Intel_Denier, Role.Intel_Gatherer], 3, Squad.Ghosteyes), - new Operator('Ace', Gender.male, Side.attacker, [Role.Front_Line, Role.Hard_Breach], 2, Squad.Nighthaven), - new Operator('Melusi', Gender.female, Side.defender, [Role.Intel_Gatherer, Role.Secure, Role.Crowd_Control], 1, Squad.Wolfguard), - new Operator('Oryx', Gender.male, Side.defender, [Role.Roam, Role.Soft_Breach], 2, Squad.Rainbow), - new Operator('Iana', Gender.female, Side.attacker, [Role.Intel_Denier, Role.Intel_Gatherer], 2, Squad.Ghosteyes), - new Operator('Wamai', Gender.male, Side.defender, [Role.Anchor, Role.Secure], 2, Squad.Nighthaven), - new Operator('Kali', Gender.female, Side.attacker, [Role.Back_Line, Role.Covering_Fire, Role.Disable], 2, Squad.Nighthaven), - new Operator('Amaru', Gender.female, Side.attacker, [Role.Front_Line, Role.Flank], 2, Squad.Rainbow), - new Operator('Goyo', Gender.male, Side.defender, [Role.Area_Denial, Role.Secure], 2, Squad.Rainbow), - new Operator('Nøkk', Gender.female, Side.attacker, [Role.Intel_Denier, Role.Flank], 2, Squad.Ghosteyes), - new Operator('Warden', Gender.male, Side.defender, [Role.Anchor, Role.Intel_Denier], 2, Squad.Ghosteyes), - new Operator('Mozzie', Gender.male, Side.defender, [Role.Intel_Gatherer, Role.Intel_Denier, Role.Secure], 2, Squad.Ghosteyes), - new Operator('Gridlock', Gender.female, Side.attacker, [Role.Anti_Roam, Role.Area_Denial, Role.Crowd_Control], 1, Squad.Rainbow), - new Operator('Nomad', Gender.female, Side.attacker, [Role.Anti_Roam, Role.Trap, Role.Crowd_Control], 2, Squad.Wolfguard), - new Operator('Kaid', Gender.male, Side.defender, [Role.Anti_Hard_Breach, Role.Secure, Role.Anchor], 1, Squad.Rainbow), - new Operator('Clash', Gender.female, Side.defender, [Role.Crowd_Control, Role.Intel_Gatherer, Role.Secure, Role.Shield], 1, Squad.Wolfguard), - new Operator('Maverick', Gender.male, Side.attacker, [Role.Hard_Breach, Role.Back_Line, Role.Disable, Role.Flank], 3, Squad.Ghosteyes), - new Operator('Maestro', Gender.male, Side.defender, [Role.Secure, Role.Anchor, Role.Area_Denial, Role.Intel_Gatherer], 1, Squad.Rainbow), - new Operator('Alibi', Gender.female, Side.defender, [Role.Intel_Denier, Role.Intel_Gatherer, Role.Roam, Role.Trap], 3, Squad.Rainbow), - new Operator('Lion', Gender.male, Side.attacker, [Role.Intel_Gatherer, Role.Back_Line, Role.Anti_Roam, Role.Crowd_Control], 2, Squad.Wolfguard), - new Operator('Finka', Gender.female, Side.attacker, [Role.Back_Line, Role.Buff], 2, Squad.Nighthaven), - new Operator('Vigil', Gender.male, Side.defender, [Role.Intel_Denier, Role.Roam], 3, Squad.Ghosteyes), - new Operator('Dokkaebi', Gender.female, Side.attacker, [Role.Intel_Gatherer, Role.Intel_Denier, Role.Anti_Roam, Role.Flank], 3, Squad.Rainbow), + new Operator( + 'Solis', + Gender.female, + Side.defender, + [Role.Intel_Gatherer], + 2, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/6YOBUP5JMskklFx9nDJQ49/d9d4b0968f581597feaa0ef4ec0891f3/r6s-operators-badge-solis.png' + ), + new Operator( + 'Grim', + Gender.male, + Side.attacker, + [Role.Intel_Gatherer, Role.Area_Denial], + 3, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/5VoAYPvRZXIwjcwTD3PWaZ/b9748f007c0c116ca1bcd77b0f91e766/r6s-operators-badge-grim.png' + ), + new Operator( + 'Sens', + Gender.divers, + Side.attacker, + [Role.Covering_Fire, Role.Area_Denial, Role.Crowd_Control], + 3, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7pqZFaPgQwaLi1pFKuAv7e/d3d9af214737fe6a069e5346c50bfd20/r6s-operators-badge-sens.png' + ), + new Operator( + 'Azami', + Gender.female, + Side.defender, + [Role.Area_Denial], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7KWTXHTk8rxLS5qtyX4Xu4/b51f8691b932fd2b83260ef3fbcd1154/r6s-operators-badge-azami.png' + ), + new Operator( + 'Thorn', + Gender.female, + Side.defender, + [Role.Anchor, Role.Secure], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/1pzBJsbL1vQT8is7B0Xjxz/440335c080e54ca28eba24858361a03a/r6s-operators-badge-thorn.png' + ), + new Operator( + 'Osa', + Gender.divers, + Side.attacker, + [Role.Intel_Gatherer, Role.Area_Denial, Role.Anti_Roam], + 1, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/5tt27EFHYjiDLo2qbYEgXG/2f1acbb8209e45b136ca7b0e2e5eb1f9/r6s-operators-badge-osa.png' + ), + new Operator( + 'Thunderbird', + Gender.female, + Side.defender, + [Role.Secure, Role.Roam, Role.Buff], + 2, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/YQfDJ42B2IKcKnb0lRaXq/0cedb53c439b0fe448be95713a836b29/r6s-operators-badge-thunderbird.png' + ), + new Operator( + 'Flores', + Gender.male, + Side.attacker, + [Role.Disable, Role.Soft_Breach, Role.Area_Denial, Role.Back_Line], + 2, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/75vqJXXKCM2EDO0iiNqRDe/d6289dc9a4fed72ef72b9c1e11738456/Y6S1_BADGE_Flores_L.png' + ), + new Operator( + 'Aruni', + Gender.female, + Side.defender, + [Role.Intel_Gatherer, Role.Secure, Role.Anchor], + 1, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/5rOLCYQOh5HH0Nv6NHe38H/29681f901ff71ae5decb5ccb1b9f8a29/Y5S4_BADGE_Aruni_L.png' + ), + new Operator( + 'Zero', + Gender.male, + Side.attacker, + [Role.Intel_Denier, Role.Intel_Gatherer], + 3, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/4ZbzOZt1Sur77RZTFwYVJ4/30037e84b2948449652547f06df146e0/Y5S3_BADGE_Zero_L.png' + ), + new Operator( + 'Ace', + Gender.male, + Side.attacker, + [Role.Front_Line, Role.Hard_Breach], + 2, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/dgG7GmXY1HgfeEE2gI1H9/06bd3917c8fc19f61654490019ef25fb/Y5S2_BADGE_Ace_L.png' + ), + new Operator( + 'Melusi', + Gender.female, + Side.defender, + [Role.Intel_Gatherer, Role.Secure, Role.Crowd_Control], + 1, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/74H52a9GMql8wamIy6WqH5/9fddba49258152835da7cdac8c566663/Y5S2_BADGE_Melusi_L.png' + ), + new Operator( + 'Oryx', + Gender.male, + Side.defender, + [Role.Roam, Role.Soft_Breach], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7mLA8GY9ZKlUfDXrfo9Nek/e3dfd0759414f36866a8c80b61a67722/Y5S1_BADGE_Oryx_L.png' + ), + new Operator( + 'Iana', + Gender.female, + Side.attacker, + [Role.Intel_Denier, Role.Intel_Gatherer], + 2, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/6deSi1vse5iJTkErFksrGq/75bf1038e9698b6b2be75aa0493b092d/Y5S1_BADGE_Iana_L.png' + ), + new Operator( + 'Wamai', + Gender.male, + Side.defender, + [Role.Anchor, Role.Secure], + 2, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/1vQZ4WsAjhc6M7qNOS4ahQ/92fc4d89632fb87aec0f102d7adbfe26/Y4S4_BADGE_Wamai_L.png' + ), + new Operator( + 'Kali', + Gender.female, + Side.attacker, + [Role.Back_Line, Role.Covering_Fire, Role.Disable], + 2, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/6r1hk1EunQirF1IcY4TG8T/0d3fbb7508a7747fd51249b1b8ea9779/Y4S4_BADGE_Kali_L.png' + ), + new Operator( + 'Amaru', + Gender.female, + Side.attacker, + [Role.Front_Line, Role.Flank], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/2K1uxROLvHGxOIOMpNRFeU/7b4afc5ded3d1b9a937d1b504b5d4d0d/Y4S3_BADGE_Amaru_L.png' + ), + new Operator( + 'Goyo', + Gender.male, + Side.defender, + [Role.Area_Denial, Role.Secure], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/6AAY4FZt5piHdabOdDokE4/f7f8bd90c20b8a429c78a08684b75aca/Y4S3_BADGE_Goyo_L.png' + ), + new Operator( + 'Nøkk', + Gender.female, + Side.attacker, + [Role.Intel_Denier, Role.Flank], + 2, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/2qfSHHTdCRVhx9EWycVDNr/9e361e73fb91e571f7470de21edf5c7a/Y4S2_BADGE_Nokk_L.png' + ), + new Operator( + 'Warden', + Gender.male, + Side.defender, + [Role.Anchor, Role.Intel_Denier], + 2, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/hx1Ljf1qIWbjpgCNmfJbu/2217283b569ef316dc12b93e86649f8f/Y4S2_BADGE_Warden_L.png' + ), + new Operator( + 'Mozzie', + Gender.male, + Side.defender, + [Role.Intel_Gatherer, Role.Intel_Denier, Role.Secure], + 2, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/15hUu2PsypX2c1LIJFQNUT/8538c52057420dbf3995cf3117b155c5/Y4S1_BADGE_Mozzie_L.png' + ), + new Operator( + 'Gridlock', + Gender.female, + Side.attacker, + [Role.Anti_Roam, Role.Area_Denial, Role.Crowd_Control], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/5LIyheUROsdMDkX6o0zh6R/f201ce65af771459c374ef71c89827b4/Y4S1_BADGE_Gridlock_LL.png' + ), + new Operator( + 'Nomad', + Gender.female, + Side.attacker, + [Role.Anti_Roam, Role.Trap, Role.Crowd_Control], + 2, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/UxfU1gJDoZGDrzT3iBsIp/b1aa522cc08e4631b9a857b52afa4f99/Y3S4_BADGE_Nomad_L.png' + ), + new Operator( + 'Kaid', + Gender.male, + Side.defender, + [Role.Anti_Hard_Breach, Role.Secure, Role.Anchor], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/5Qblb1ZqAqkN3Wa0Qw5qBq/05630c80672105a1195282d276e8eb05/Y3S4_BADGE_L.png' + ), + new Operator( + 'Clash', + Gender.female, + Side.defender, + [Role.Crowd_Control, Role.Intel_Gatherer, Role.Secure, Role.Shield], + 1, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7G4lGl5HPLFTTUdcZW8UOK/3901b44cf2a9423486ffd78531e42f87/Y3S3_BADGE_Clash_L.png' + ), + new Operator( + 'Maverick', + Gender.male, + Side.attacker, + [Role.Hard_Breach, Role.Back_Line, Role.Disable, Role.Flank], + 3, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/3DXiYgVT71qGscYmFMgayj/d6c40a7dabdfecb92b637bec83003a58/Y3S3_BADGE_Maverick_L.png' + ), + new Operator( + 'Maestro', + Gender.male, + Side.defender, + [Role.Secure, Role.Anchor, Role.Area_Denial, Role.Intel_Gatherer], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/XK43imgD0tc0xrk0tgTCQ/0402cc95cbd525debafa1aab0fdd8385/Y3S2_BADGE_Maestro_L.png' + ), + new Operator( + 'Alibi', + Gender.female, + Side.defender, + [Role.Intel_Denier, Role.Intel_Gatherer, Role.Roam, Role.Trap], + 3, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/3DgGV3hETnXiEvVFOYZrbm/55a6be47761b5cf2c7ff8aaa7991cc7f/Y3S2_BADGE_Alibi_L.png' + ), + new Operator( + 'Lion', + Gender.male, + Side.attacker, + [Role.Intel_Gatherer, Role.Back_Line, Role.Anti_Roam, Role.Crowd_Control], + 2, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/3gfdjXFezusaerCakMpfQ2/4565b28edd241b7fd3b0eba9c97d54f2/Y3S1_BADGE_Lion_L.png' + ), + new Operator( + 'Finka', + Gender.female, + Side.attacker, + [Role.Back_Line, Role.Buff], + 2, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/6CzQHWePD3Mi8HE5bdx5ic/2a6b5a6cc653ebf99d062725368eae2a/Y3S1_BADGE_Finka_L.png' + ), + new Operator( + 'Vigil', + Gender.male, + Side.defender, + [Role.Intel_Denier, Role.Roam], + 3, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/56A3hXhWZdwO623g3ejeku/a40a0582a7841abfeed723d8fbe238d3/Y2S4_BADGE_Vigil_L.png' + ), + new Operator( + 'Dokkaebi', + Gender.female, + Side.attacker, + [Role.Intel_Gatherer, Role.Intel_Denier, Role.Anti_Roam, Role.Flank], + 3, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/aoQeHLohcuqvubBoyrzsM/d4a230ecba495c58c5521e10d5d84baa/Y2S4_BADGE_Dokkaebi_L.png' + ), new Operator( 'Zofia', Gender.female, Side.attacker, [Role.Anti_Roam, Role.Crowd_Control, Role.Disable, Role.Flank, Role.Soft_Breach], 1, - Squad.Ghosteyes + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/1k09nbCCu2avlIWpK3cJz9/35d60746d67750230f2a020a7be78795/Y2S3_BADGE_Zofia_L.png' + ), + new Operator( + 'Ela', + Gender.female, + Side.defender, + [Role.Crowd_Control, Role.Trap, Role.Roam], + 2, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7zbkJJWMCOj04DNhYDz994/d2cba213d30d7b8cf2ba8cd568c78f20/Y2S3_BADGE_Ela_L.png' + ), + new Operator( + 'Ying', + Gender.female, + Side.attacker, + [Role.Crowd_Control, Role.Front_Line], + 2, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/6ZVB1OJxNgs0pR0Fd7Kzt0/74721fe9fd743167508f98dc280a17a3/Y2S2_BADGE_Ying_L.png' ), - new Operator('Ela', Gender.female, Side.defender, [Role.Crowd_Control, Role.Trap, Role.Roam], 2, Squad.Nighthaven), - new Operator('Ying', Gender.female, Side.attacker, [Role.Crowd_Control, Role.Front_Line], 2, Squad.Wolfguard), new Operator( 'Lesion', Gender.male, Side.defender, [Role.Crowd_Control, Role.Trap, Role.Roam, Role.Anchor, Role.Intel_Gatherer], 2, - Squad.Ghosteyes - ), - new Operator('Mira', Gender.female, Side.defender, [Role.Secure, Role.Anchor, Role.Intel_Gatherer], 1, Squad.Rainbow), - new Operator('Jackal', Gender.male, Side.attacker, [Role.Anti_Roam, Role.Intel_Gatherer], 2, Squad.Rainbow), - new Operator('Hibana', Gender.female, Side.attacker, [Role.Hard_Breach, Role.Back_Line, Role.Front_Line], 3, Squad.Rainbow), - new Operator('Echo', Gender.male, Side.defender, [Role.Anchor, Role.Crowd_Control, Role.Intel_Gatherer, Role.Secure], 2, Squad.Rainbow), - new Operator('Caveira', Gender.female, Side.defender, [Role.Intel_Denier, Role.Intel_Gatherer, Role.Roam], 3, Squad.Ghosteyes), - new Operator('Capitão', Gender.male, Side.attacker, [Role.Area_Denial, Role.Flank, Role.Front_Line], 3, Squad.Rainbow), - new Operator('Blackbeard', Gender.male, Side.attacker, [Role.Back_Line, Role.Covering_Fire, Role.Shield], 2, Squad.Rainbow), - new Operator('Valkyrie', Gender.female, Side.defender, [Role.Intel_Gatherer, Role.Roam], 2, Squad.Ghosteyes), - new Operator('Buck', Gender.male, Side.attacker, [Role.Flank, Role.Soft_Breach], 2, Squad.Rainbow), - new Operator('Frost', Gender.female, Side.defender, [Role.Crowd_Control, Role.Trap], 2, Squad.Wolfguard), - new Operator('Mute', Gender.male, Side.defender, [Role.Anti_Hard_Breach, Role.Secure, Role.Intel_Denier], 1, Squad.Rainbow), - new Operator('Sledge', Gender.male, Side.attacker, [Role.Flank, Role.Soft_Breach], 1, Squad.Rainbow), - new Operator('Smoke', Gender.male, Side.defender, [Role.Anchor, Role.Secure, Role.Area_Denial], 2, Squad.Nighthaven), - new Operator('Thatcher', Gender.male, Side.attacker, [Role.Back_Line, Role.Disable], 1, Squad.Rainbow), - new Operator('Ash', Gender.female, Side.attacker, [Role.Flank, Role.Front_Line, Role.Disable, Role.Soft_Breach], 3, Squad.Rainbow), - new Operator('Castle', Gender.male, Side.defender, [Role.Anchor, Role.Secure], 2, Squad.Wolfguard), - new Operator('Pulse', Gender.male, Side.defender, [Role.Intel_Gatherer, Role.Roam], 3, Squad.Nighthaven), - new Operator('Thermite', Gender.male, Side.attacker, [Role.Hard_Breach, Role.Back_Line], 2, Squad.Rainbow), - new Operator('Montagne', Gender.male, Side.attacker, [Role.Shield], 1, Squad.Wolfguard), - new Operator('Twitch', Gender.female, Side.attacker, [Role.Back_Line, Role.Disable, Role.Front_Line, Role.Intel_Gatherer], 2, Squad.Wolfguard), - new Operator('Doc', Gender.male, Side.defender, [Role.Anchor, Role.Buff], 1, Squad.Wolfguard), - new Operator('Rook', Gender.male, Side.defender, [Role.Anchor, Role.Buff], 1, Squad.Rainbow), - new Operator('Jäger', Gender.male, Side.defender, [Role.Roam, Role.Secure], 2, Squad.Rainbow), - new Operator('Bandit', Gender.male, Side.defender, [Role.Anti_Hard_Breach, Role.Roam, Role.Secure], 3, Squad.Wolfguard), - new Operator('Blitz', Gender.male, Side.attacker, [Role.Anti_Roam, Role.Crowd_Control, Role.Front_Line, Role.Shield], 2, Squad.Rainbow), - new Operator('IQ', Gender.female, Side.attacker, [Role.Disable, Role.Front_Line, Role.Intel_Gatherer, Role.Flank], 3, Squad.Nighthaven), - new Operator('Fuze', Gender.male, Side.attacker, [Role.Area_Denial, Role.Disable, Role.Flank], 1, Squad.Rainbow), - new Operator('Glaz', Gender.male, Side.attacker, [Role.Back_Line, Role.Covering_Fire, Role.Soft_Breach], 2, Squad.Ghosteyes) + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/2CWYSySnPAhsOHdq2OLSjv/f9e54debcfa0c8fe76012d9097b98e6e/Y2S2_BADGE_Lesion_L.png' + ), + new Operator( + 'Mira', + Gender.female, + Side.defender, + [Role.Secure, Role.Anchor, Role.Intel_Gatherer], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/u1KR6aogjLncAtaVOciTc/ba730583f9c20cad6d3ca996d366a707/Y2S1_BADGE_Mira_L.png' + ), + new Operator( + 'Jackal', + Gender.male, + Side.attacker, + [Role.Anti_Roam, Role.Intel_Gatherer], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/28k7LKWK70lxib7CimPJaZ/f34b2065811df8f0339838922f8c94b1/Y2S1_BADGE_Jackal_L.png' + ), + new Operator( + 'Hibana', + Gender.female, + Side.attacker, + [Role.Hard_Breach, Role.Back_Line, Role.Front_Line], + 3, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/1TSA4pMR58vgfrEai69REl/f82b1eba6694b4aa77259d3d0fe8cc08/Y1S4_BADGE_Hibana_L.png' + ), + new Operator( + 'Echo', + Gender.male, + Side.defender, + [Role.Anchor, Role.Crowd_Control, Role.Intel_Gatherer, Role.Secure], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/3MRqAdUybJ7GR9gX4wPAI4/992938a70a4e53b91478358634e77ca7/Y1S4_BADGE_Echo_L.png' + ), + new Operator( + 'Caveira', + Gender.female, + Side.defender, + [Role.Intel_Denier, Role.Intel_Gatherer, Role.Roam], + 3, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/4H1dOkcdZIKblKkAWjD390/10e57f4829eabda30f4aa1044e49893d/Y1S3_BADGE_Caveira_L.png' + ), + new Operator( + 'Capitão', + Gender.male, + Side.attacker, + [Role.Area_Denial, Role.Flank, Role.Front_Line], + 3, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/73R4IrWJyn0xdkJ0fjOODA/fc70d200a7530dccae2847ab7962e394/Y1S3_BADGE_Capitao_L.png' + ), + new Operator( + 'Blackbeard', + Gender.male, + Side.attacker, + [Role.Back_Line, Role.Covering_Fire, Role.Shield], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/4BTbmcs1EtoUbnpk5Am22Y/b7bd4d0708245c78b98455505c0d51a8/Y1S2_BADGE_Blackbeard_L.png' + ), + new Operator( + 'Valkyrie', + Gender.female, + Side.defender, + [Role.Intel_Gatherer, Role.Roam], + 2, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/44qXJmZmAwaD4w44JnPuOx/c54c8b9d3a6813ab8ce3e3f1dd4ef408/Y1S2_BADGE_Valkyrie_L.png' + ), + new Operator( + 'Buck', + Gender.male, + Side.attacker, + [Role.Flank, Role.Soft_Breach], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/2oZZBEZzVLFpRY7Mp85MWq/f62287872dd61b4e0697a93d703b2beb/Y1S1_BADGE_Buck_L.png' + ), + new Operator( + 'Frost', + Gender.female, + Side.defender, + [Role.Crowd_Control, Role.Trap], + 2, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/1OWFtfiEXleLSENciCSQQR/8fcced59c0125073e506f2dee0201015/Y1S1_BADGE_Frost_L.png' + ), + new Operator( + 'Mute', + Gender.male, + Side.defender, + [Role.Anti_Hard_Breach, Role.Secure, Role.Intel_Denier], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/3exeHnxH1tmUmQTequWRKa/e1b6c6f057eb24722dd7860af0276316/Y0R6_BADGE_Mute_L.png' + ), + new Operator( + 'Sledge', + Gender.male, + Side.attacker, + [Role.Flank, Role.Soft_Breach], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/4lgK1mOTVAoBhoj5qjYuyd/83c83d56e977f96ac0e9621c0d1c07d2/Y0R6_BADGE_Sledge_L.png' + ), + new Operator( + 'Smoke', + Gender.male, + Side.defender, + [Role.Anchor, Role.Secure, Role.Area_Denial], + 2, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/6mOMxoc3t27R9Gr9wFtt6T/f5f90a6be6a6710bee686ce69df29906/Y0R6_BADGE_Smoke_L.png' + ), + new Operator( + 'Thatcher', + Gender.male, + Side.attacker, + [Role.Back_Line, Role.Disable], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/5NbqTdEPmYy9qOZmN9StVT/f75b0f2610a37f9e5bdcb8ba9d551a38/Y0R6_BADGE_Thatcher_L.png' + ), + new Operator( + 'Ash', + Gender.female, + Side.attacker, + [Role.Flank, Role.Front_Line, Role.Disable, Role.Soft_Breach], + 3, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/58Y4Q2x7msL8uQUoiA7LGM/b204acc9c5a015029140723ef2e435bb/Y0R6_BADGE_Ash_L.png' + ), + new Operator( + 'Castle', + Gender.male, + Side.defender, + [Role.Anchor, Role.Secure], + 2, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/kzznLctjOsXJZAg0F2HPB/dea28fa008515d6ddaa0d2659f4dc253/Y0R6_BADGE_Castle_L.png' + ), + new Operator( + 'Pulse', + Gender.male, + Side.defender, + [Role.Intel_Gatherer, Role.Roam], + 3, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/ChAeJzdmwxuvhZTrV81rK/8c16116f4c719a3df864df6639e2f52e/Y0R6_BADGE_Pulse_L.png' + ), + new Operator( + 'Thermite', + Gender.male, + Side.attacker, + [Role.Hard_Breach, Role.Back_Line], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/6tow5mqLao5TrJVL52csSc/46aa934c9f3f02189e9c04df0114a081/Y0R6_BADGE_Thermite_L.png' + ), + new Operator( + 'Montagne', + Gender.male, + Side.attacker, + [Role.Shield], + 1, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7qWONT0mrNYtUZVTVVT8Yj/e0da552d6bb6548ddf74cf4cc44d75c5/Y0R6_BADGE_Montagne_L.png' + ), + new Operator( + 'Twitch', + Gender.female, + Side.attacker, + [Role.Back_Line, Role.Disable, Role.Front_Line, Role.Intel_Gatherer], + 2, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/3YgCpOSM2R4SDgExstxm7P/ff84e6ac53bd9f690deee78870f9c23b/Y0R6_BADGE_Twitch_L.png' + ), + new Operator( + 'Doc', + Gender.male, + Side.defender, + [Role.Anchor, Role.Buff], + 1, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/71Nl3v0LqHyo9eXV6xTFQd/1ba4f057b6acad3ec700ca9e60b53d6c/Y0R6_BADGE_Doc_L.png' + ), + new Operator( + 'Rook', + Gender.male, + Side.defender, + [Role.Anchor, Role.Buff], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/3Yk1noMd9re0RLlrXJSWtR/7a55e80593c487827293a114835dba63/Y0R6_BADGE_Rook_L.png' + ), + new Operator( + 'Jäger', + Gender.male, + Side.defender, + [Role.Roam, Role.Secure], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/1cCvTmKwnnovVmpZmDyPkA/b064f5ad6b9e7398d820d9ea90ff9366/Y0R6_BADGE_Jager_L.png' + ), + new Operator( + 'Bandit', + Gender.male, + Side.defender, + [Role.Anti_Hard_Breach, Role.Roam, Role.Secure], + 3, + Squad.Wolfguard, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/4Vasjq82J1TNjNE38J7LmV/e1725f8d9ea2b85565e40b54faac85b8/Y0R6_BADGE_Bandit_L.png' + ), + new Operator( + 'Blitz', + Gender.male, + Side.attacker, + [Role.Anti_Roam, Role.Crowd_Control, Role.Front_Line, Role.Shield], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/2YTGfm1Df9PtldLcGodcTV/9a235b550cdf5066d686cef750eba090/Y0R6_BADGE_Blitz_L.png' + ), + new Operator( + 'IQ', + Gender.female, + Side.attacker, + [Role.Disable, Role.Front_Line, Role.Intel_Gatherer, Role.Flank], + 3, + Squad.Nighthaven, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/4xnVj2iZB8Otchiw7j69UO/13c864a4e2eb976c1978dc79411b450c/Y0R6_BADGE_IQ_L.png' + ), + new Operator( + 'Fuze', + Gender.male, + Side.attacker, + [Role.Area_Denial, Role.Disable, Role.Flank], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/1wkdQ0viuTEguji14qXMJG/5858418baa8cca04a6e42a2d6256c093/Y0R6_BADGE_Fuze_L.png' + ), + new Operator( + 'Glaz', + Gender.male, + Side.attacker, + [Role.Back_Line, Role.Covering_Fire, Role.Soft_Breach], + 2, + Squad.Ghosteyes, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/5UAZVgyOutPh6bLTV3fGXf/c59d484fd599d09a947ec423b2119620/Y0R6_BADGE_Glaz_L.png' + ), + new Operator( + 'Tachanka', + Gender.male, + Side.defender, + [Role.Anchor, Role.Covering_Fire, Role.Crowd_Control], + 1, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7hpI2mcmvyjC2vG6ieltLo/f217b1dc449c0514b55e471193a38c91/Y0R6_BADGE_Tachanka_L.png' + ), + new Operator( + 'Kapkan', + Gender.male, + Side.defender, + [Role.Trap], + 2, + Squad.Rainbow, + 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/797q7C5YA89eFqw4RB40ka/f9435d1b4d13d41472e22d305c961cb9/Y0R6_BADGE_Kapkan_L.png' + ) ]; export { operators }; diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index 5982b0a..8de0304 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -1,2 +1,60 @@ -

Welcome to SvelteKit

-

Visit kit.svelte.dev to read the documentation

+ + +
+
+ +
+
+ +
+
+ +
+
+
+
+ + Siegedle + + ({ + label: operator.name, + value: operator.image, + }))} + bind:value={selectedOpIcon} + icon={leftIcon} + override={{ + width: '100%', + maxWidth: '20rem', + minWidth: '10rem', + }} + on:change={() => { + leftIcon.src = selectedOpIcon; + }} + description='Select an operator' + /> +
+
+
\ No newline at end of file diff --git a/web/src/routes/+page.ts b/web/src/routes/+page.ts new file mode 100644 index 0000000..ecc9f48 --- /dev/null +++ b/web/src/routes/+page.ts @@ -0,0 +1,6 @@ +import type { PageLoad } from './$types'; +import { operators } from '../lib/operators'; + +export const load = (async () => { + return { operators }; +}) satisfies PageLoad; diff --git a/web/yarn.lock b/web/yarn.lock index 7c48649..1c68a0a 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -127,6 +127,18 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@floating-ui/core@^0.7.2": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-0.7.3.tgz#d274116678ffae87f6b60e90f88cc4083eefab86" + integrity sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg== + +"@floating-ui/dom@0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-0.5.2.tgz#908f3febbfc0d6696d70921616ec194fe07af183" + integrity sha512-z1DnEa7F3d8Fm/eXSbii8UEGpcjZGkQaYYUI0WpEVgD3vBfebDW8j/3ysusxonuMexoigA+A3b/fYH7sEqiwyg== + dependencies: + "@floating-ui/core" "^0.7.2" + "@humanwhocodes/config-array@^0.11.8": version "0.11.8" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" @@ -230,6 +242,11 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@stitches/core@1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@stitches/core/-/core-1.2.8.tgz#dce3b8fdc764fbc6dbea30c83b73bfb52cf96173" + integrity sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg== + "@sveltejs/adapter-auto@^1.0.0": version "1.0.2" resolved "https://registry.yarnpkg.com/@sveltejs/adapter-auto/-/adapter-auto-1.0.2.tgz#c44591b1b1ef75e66c158067bab9d2789836fa54" @@ -278,6 +295,19 @@ svelte-hmr "^0.15.1" vitefu "^0.2.3" +"@svelteuidev/composables@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@svelteuidev/composables/-/composables-0.8.0.tgz#f3ecffea8a14968db698d3269f365f02def60bbf" + integrity sha512-ZIPu3zu6qEN9SUbtTTYEkfXaoeeUYd2pVU1IBRkvk80Tf4AXe8UPcEeRqf0TxA8znQKWpzFkGQetDJ8TUvYh4A== + +"@svelteuidev/core@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@svelteuidev/core/-/core-0.8.0.tgz#51913bd43eabd3fdf105b1d0a9ddca5d4d3246c5" + integrity sha512-U6C7s+qo8mjmSPUcz2I0GmFB00aZ4KkxC040khVQ4j6HEVvpsWrlWjT9peYjISnXwiI4L/Vb6CBth0CiZbcA2A== + dependencies: + "@floating-ui/dom" "0.5.2" + "@stitches/core" "1.2.8" + "@types/cookie@^0.5.1": version "0.5.1" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.1.tgz#b29aa1f91a59f35e29ff8f7cb24faf1a3a750554" @@ -1491,6 +1521,11 @@ svelte-hmr@^0.15.1: resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.15.1.tgz#d11d878a0bbb12ec1cba030f580cd2049f4ec86b" integrity sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA== +svelte-icons@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/svelte-icons/-/svelte-icons-2.1.0.tgz#6f2ec72f1d5c8b2de1a4b8a822c95bcb2f701aca" + integrity sha512-rHPQjweEc9fGSnvM0/4gA3pDHwyZyYsC5KhttCZRhSMJfLttJST5Uq0B16Czhw+HQ+HbSOk8kLigMlPs7gZtfg== + svelte-preprocess@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz#3dd21a17eb508347d4b26a0d98059d23e2d1b9a0"