mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-06-02 22:26:57 -05:00
240 lines
5.3 KiB
TypeScript
240 lines
5.3 KiB
TypeScript
import { assertUnreachable } from "~/utils/types";
|
|
import type { MainWeaponId, SpecialWeaponId, SubWeaponId } from "./types";
|
|
|
|
export const weaponCategories = [
|
|
{
|
|
name: "SHOOTERS",
|
|
weaponIds: [
|
|
0, 1, 10, 11, 20, 21, 30, 31, 40, 41, 45, 46, 47, 50, 51, 60, 61, 70, 71,
|
|
80, 81, 90, 91, 100, 101, 300, 301, 310, 311, 400, 401,
|
|
],
|
|
},
|
|
{
|
|
name: "BLASTERS",
|
|
weaponIds: [
|
|
200, 201, 205, 210, 211, 220, 230, 231, 240, 241, 250, 251, 260, 261,
|
|
],
|
|
},
|
|
{
|
|
name: "ROLLERS",
|
|
weaponIds: [
|
|
1000, 1001, 1010, 1011, 1015, 1020, 1021, 1030, 1031, 1040, 1041,
|
|
],
|
|
},
|
|
{
|
|
name: "BRUSHES",
|
|
weaponIds: [1100, 1101, 1110, 1111, 1115, 1121, 1120],
|
|
},
|
|
{
|
|
name: "CHARGERS",
|
|
weaponIds: [
|
|
2000, 2001, 2010, 2011, 2015, 2020, 2021, 2030, 2031, 2040, 2041, 2050,
|
|
2060, 2061, 2070, 2071,
|
|
],
|
|
},
|
|
{
|
|
name: "SLOSHERS",
|
|
weaponIds: [
|
|
3000, 3001, 3005, 3010, 3011, 3020, 3021, 3030, 3031, 3040, 3041, 3050,
|
|
3051,
|
|
],
|
|
},
|
|
{
|
|
name: "SPLATLINGS",
|
|
weaponIds: [
|
|
4000, 4001, 4010, 4011, 4015, 4020, 4030, 4031, 4040, 4041, 4050,
|
|
],
|
|
},
|
|
{
|
|
name: "DUALIES",
|
|
weaponIds: [
|
|
5000, 5001, 5010, 5015, 5011, 5020, 5021, 5030, 5031, 5040, 5041, 5050,
|
|
],
|
|
},
|
|
{
|
|
name: "BRELLAS",
|
|
weaponIds: [6000, 6001, 6005, 6010, 6011, 6020, 6021, 6030],
|
|
},
|
|
{
|
|
name: "STRINGERS",
|
|
weaponIds: [7010, 7011, 7015, 7020, 7021],
|
|
},
|
|
{
|
|
name: "SPLATANAS",
|
|
weaponIds: [8000, 8001, 8005, 8010, 8011],
|
|
},
|
|
] as const;
|
|
|
|
export const mainWeaponIds = weaponCategories
|
|
.flatMap((category) => category.weaponIds)
|
|
.sort((a, b) => a - b);
|
|
|
|
export const weaponIdToAltId = new Map<
|
|
MainWeaponId,
|
|
MainWeaponId | MainWeaponId[]
|
|
>([
|
|
[40, [45, 47]],
|
|
[41, 46],
|
|
[200, 205],
|
|
[1010, 1015],
|
|
[1110, 1115],
|
|
[2010, 2015],
|
|
[3000, 3005],
|
|
[4010, 4015],
|
|
[5010, 5015],
|
|
[6000, 6005],
|
|
[7010, 7015],
|
|
[8000, 8005],
|
|
]);
|
|
export const altWeaponIdToId = new Map<MainWeaponId, MainWeaponId>([
|
|
[45, 40],
|
|
[47, 40],
|
|
[46, 41],
|
|
[205, 200],
|
|
[1015, 1010],
|
|
[1115, 1110],
|
|
[2015, 2010],
|
|
[3005, 3000],
|
|
[4015, 4010],
|
|
[5015, 5010],
|
|
[6005, 6000],
|
|
[7015, 7010],
|
|
[8005, 8000],
|
|
]);
|
|
|
|
const altWeaponIds = new Set(altWeaponIdToId.keys());
|
|
export const weaponIdIsNotAlt = (weaponId: MainWeaponId) =>
|
|
!altWeaponIds.has(weaponId);
|
|
|
|
export const SPLAT_BOMB_ID = 0;
|
|
export const SUCTION_BOMB_ID = 1;
|
|
export const BURST_BOMB_ID = 2;
|
|
export const SPRINKLER_ID = 3;
|
|
export const SPLASH_WALL_ID = 4;
|
|
export const FIZZY_BOMB_ID = 5;
|
|
export const CURLING_BOMB_ID = 6;
|
|
export const AUTO_BOMB_ID = 7;
|
|
export const SQUID_BEAKON_ID = 8;
|
|
export const POINT_SENSOR_ID = 9;
|
|
export const INK_MINE_ID = 10;
|
|
export const TOXIC_MIST_ID = 11;
|
|
export const ANGLE_SHOOTER_ID = 12;
|
|
export const TORPEDO_ID = 13;
|
|
|
|
export const subWeaponIds = [
|
|
SPLAT_BOMB_ID,
|
|
SUCTION_BOMB_ID,
|
|
BURST_BOMB_ID,
|
|
SPRINKLER_ID,
|
|
SPLASH_WALL_ID,
|
|
FIZZY_BOMB_ID,
|
|
CURLING_BOMB_ID,
|
|
AUTO_BOMB_ID,
|
|
SQUID_BEAKON_ID,
|
|
POINT_SENSOR_ID,
|
|
INK_MINE_ID,
|
|
TOXIC_MIST_ID,
|
|
ANGLE_SHOOTER_ID,
|
|
TORPEDO_ID,
|
|
] as const;
|
|
|
|
export const nonBombSubWeaponIds = [
|
|
SPRINKLER_ID,
|
|
SPLASH_WALL_ID,
|
|
SQUID_BEAKON_ID,
|
|
POINT_SENSOR_ID,
|
|
TOXIC_MIST_ID,
|
|
] as SubWeaponId[];
|
|
|
|
export const TRIZOOKA_ID = 1;
|
|
export const BIG_BUBBLER_ID = 2;
|
|
export const ZIPCASTER_ID = 3;
|
|
export const TENTA_MISSILES_ID = 4;
|
|
export const INK_STORM_ID = 5;
|
|
export const BOOYAH_BOMB_ID = 6;
|
|
export const WAVE_BREAKER_ID = 7;
|
|
export const INK_VAC_ID = 8;
|
|
export const KILLER_WAIL_ID = 9;
|
|
export const INKJET_ID = 10;
|
|
export const ULTRA_STAMP_ID = 11;
|
|
export const CRAB_TANK_ID = 12;
|
|
export const REEF_SLIDER_ID = 13;
|
|
export const TRIPLE_INKSTRIKE_ID = 14;
|
|
export const TACTICOOLER_ID = 15;
|
|
export const SUPER_CHUMP_ID = 16;
|
|
export const KRAKEN_ROYALE_ID = 17;
|
|
export const TRIPLE_SPLASHDOWN_ID = 18;
|
|
export const SPLATTERCOLOR_SCREEN_ID = 19;
|
|
|
|
export const specialWeaponIds = [
|
|
TRIZOOKA_ID,
|
|
BIG_BUBBLER_ID,
|
|
ZIPCASTER_ID,
|
|
TENTA_MISSILES_ID,
|
|
INK_STORM_ID,
|
|
BOOYAH_BOMB_ID,
|
|
WAVE_BREAKER_ID,
|
|
INK_VAC_ID,
|
|
KILLER_WAIL_ID,
|
|
INKJET_ID,
|
|
ULTRA_STAMP_ID,
|
|
CRAB_TANK_ID,
|
|
REEF_SLIDER_ID,
|
|
TRIPLE_INKSTRIKE_ID,
|
|
TACTICOOLER_ID,
|
|
SUPER_CHUMP_ID,
|
|
KRAKEN_ROYALE_ID,
|
|
TRIPLE_SPLASHDOWN_ID,
|
|
SPLATTERCOLOR_SCREEN_ID,
|
|
] as const;
|
|
|
|
export const nonDamagingSpecialWeaponIds = [BIG_BUBBLER_ID, TACTICOOLER_ID];
|
|
|
|
export const exampleMainWeaponIdWithSpecialWeaponId = (
|
|
specialWeaponId: SpecialWeaponId,
|
|
): MainWeaponId => {
|
|
switch (specialWeaponId) {
|
|
case TRIZOOKA_ID:
|
|
return 40;
|
|
case BIG_BUBBLER_ID:
|
|
return 10;
|
|
case ZIPCASTER_ID:
|
|
return 8000;
|
|
case TENTA_MISSILES_ID:
|
|
return 1030;
|
|
case INK_STORM_ID:
|
|
return 3040;
|
|
case BOOYAH_BOMB_ID:
|
|
return 3020;
|
|
case WAVE_BREAKER_ID:
|
|
return 220;
|
|
case INK_VAC_ID:
|
|
return 2010;
|
|
case KILLER_WAIL_ID:
|
|
return 50;
|
|
case INKJET_ID:
|
|
return 3010;
|
|
case ULTRA_STAMP_ID:
|
|
return 4000;
|
|
case CRAB_TANK_ID:
|
|
return 20;
|
|
case REEF_SLIDER_ID:
|
|
return 5040;
|
|
case TRIPLE_INKSTRIKE_ID:
|
|
return 41;
|
|
case TACTICOOLER_ID:
|
|
return 60;
|
|
case SUPER_CHUMP_ID:
|
|
return 61;
|
|
case KRAKEN_ROYALE_ID:
|
|
return 4011;
|
|
case TRIPLE_SPLASHDOWN_ID:
|
|
return 211;
|
|
case SPLATTERCOLOR_SCREEN_ID:
|
|
return 401;
|
|
default: {
|
|
assertUnreachable(specialWeaponId);
|
|
}
|
|
}
|
|
};
|