claude-code-sounds 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -290
- package/package.json +1 -1
- package/themes/mario/download.sh +123 -0
- package/themes/mario/theme.json +110 -0
- package/themes/mgs/download.sh +74 -0
- package/themes/mgs/theme.json +103 -0
- package/themes/pokemon-gen1/download.sh +75 -0
- package/themes/pokemon-gen1/theme.json +112 -0
- package/themes/portal/download.sh +95 -0
- package/themes/portal/theme.json +105 -0
- package/themes/star-wars/download.sh +119 -0
- package/themes/star-wars/theme.json +99 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Metal Gear Solid",
|
|
3
|
+
"description": "Iconic Metal Gear Solid sound effects — codec calls, alert sounds, and Snake voice lines",
|
|
4
|
+
"author": "ryparker",
|
|
5
|
+
"srcBase": "MGS",
|
|
6
|
+
"sounds": {
|
|
7
|
+
"start": {
|
|
8
|
+
"description": "Session starting — codec call incoming",
|
|
9
|
+
"files": [
|
|
10
|
+
{ "src": "@myinstants/codec.mp3", "name": "codec-call.mp3" },
|
|
11
|
+
{ "src": "@myinstants/metalgearcodec.mp3", "name": "codec-ring.mp3" },
|
|
12
|
+
{ "src": "@myinstants/mgs2-snake-kept-you-waiting-huh.mp3", "name": "kept-you-waiting-huh.mp3" },
|
|
13
|
+
{ "src": "@myinstants/codec-send.mp3", "name": "this-is-snake.mp3" }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"end": {
|
|
17
|
+
"description": "Session over — mission complete",
|
|
18
|
+
"files": [
|
|
19
|
+
{ "src": "@myinstants/metal_gear_solid_exit_sound_effect.mp3", "name": "codec-exit.mp3" },
|
|
20
|
+
{ "src": "@myinstants/metal_gear_solid_exit_sound_effect_EQbXTbY.mp3", "name": "codec-close.mp3" },
|
|
21
|
+
{ "src": "@myinstants/mgs2-snake-sweet-dreams-boyscout.mp3", "name": "sweet-dreams.mp3" },
|
|
22
|
+
{ "src": "@myinstants/sfx_s_mission_qualify.mp3", "name": "mission-complete.mp3" }
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"prompt": {
|
|
26
|
+
"description": "User submitted prompt — acknowledging orders",
|
|
27
|
+
"files": [
|
|
28
|
+
{ "src": "@myinstants/mgs2-snake-roger-that-sir.mp3", "name": "roger-that.mp3" },
|
|
29
|
+
{ "src": "@myinstants/mgs2-snake-sounds-like-a-plan.mp3", "name": "sounds-like-a-plan.mp3" },
|
|
30
|
+
{ "src": "@myinstants/mgs2-snake-ill-do-my-best.mp3", "name": "ill-do-my-best.mp3" },
|
|
31
|
+
{ "src": "@myinstants/mgs2-snake-if-you-say-so.mp3", "name": "if-you-say-so.mp3" }
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"stop": {
|
|
35
|
+
"description": "Done responding — codec transmission end",
|
|
36
|
+
"files": [
|
|
37
|
+
{ "src": "@myinstants/metal_gear_solid_exit_sound_effect.mp3", "name": "codec-hangup.mp3" },
|
|
38
|
+
{ "src": "@myinstants/mgs2-snake-roger-that-sir.mp3", "name": "roger-that.mp3" },
|
|
39
|
+
{ "src": "@myinstants/mgs2-snake-good-shooting.mp3", "name": "good-shooting.mp3" }
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"permission": {
|
|
43
|
+
"description": "Permission prompt — alert detected",
|
|
44
|
+
"files": [
|
|
45
|
+
{ "src": "@myinstants/tindeck_1.mp3", "name": "alert.mp3" },
|
|
46
|
+
{ "src": "@myinstants/metal-gear-alert-sound-effect_XKoHReZ.mp3", "name": "alert-sfx.mp3" },
|
|
47
|
+
{ "src": "@myinstants/what-was-that-noise.mp3", "name": "what-was-that-noise.mp3" },
|
|
48
|
+
{ "src": "@myinstants/untitled_1150.mp3", "name": "alert-mode.mp3" }
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"idle": {
|
|
52
|
+
"description": "Waiting for input — standing by",
|
|
53
|
+
"files": [
|
|
54
|
+
{ "src": "@myinstants/mgs2-snake-kept-you-waiting-huh.mp3", "name": "kept-you-waiting.mp3" },
|
|
55
|
+
{ "src": "@myinstants/why_are_we_still_here_just_to_suffer_2.mp3", "name": "just-to-suffer.mp3" },
|
|
56
|
+
{ "src": "@myinstants/cigar.mp3", "name": "cigar.mp3" }
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
"subagent": {
|
|
60
|
+
"description": "Spawning subagent — calling for backup",
|
|
61
|
+
"files": [
|
|
62
|
+
{ "src": "@myinstants/codec.mp3", "name": "codec-call-out.mp3" },
|
|
63
|
+
{ "src": "@myinstants/metalgearcodec.mp3", "name": "codec-dial.mp3" },
|
|
64
|
+
{ "src": "@myinstants/mgs2-snake-sounds-like-a-plan.mp3", "name": "sounds-like-a-plan.mp3" }
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"error": {
|
|
68
|
+
"description": "Tool failure — game over",
|
|
69
|
+
"files": [
|
|
70
|
+
{ "src": "@myinstants/metalgeargameov5235.mp3", "name": "game-over.mp3" },
|
|
71
|
+
{ "src": "@myinstants/metal-gear-solid-solid-snake-scream.mp3", "name": "snake-scream.mp3" },
|
|
72
|
+
{ "src": "@myinstants/snake-dies-game-over.mp3", "name": "snake-dies.mp3" },
|
|
73
|
+
{ "src": "@myinstants/metal_gear_solid_game_over_screen_clean_background-1.mp3", "name": "game-over-screen.mp3" },
|
|
74
|
+
{ "src": "@myinstants/mgs2-snake-what-the-hell-is-going-on-here.mp3", "name": "what-the-hell.mp3" }
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"task-completed": {
|
|
78
|
+
"description": "Task finished — mission accomplished",
|
|
79
|
+
"files": [
|
|
80
|
+
{ "src": "@myinstants/youre-pretty-good_I5kzLtx.mp3", "name": "youre-pretty-good.mp3" },
|
|
81
|
+
{ "src": "@myinstants/sfx_s_mission_qualify.mp3", "name": "mission-qualify.mp3" },
|
|
82
|
+
{ "src": "@myinstants/mgs2-snake-good-shooting.mp3", "name": "good-shooting.mp3" },
|
|
83
|
+
{ "src": "@myinstants/metal-gear-item-drop.mp3", "name": "item-drop.mp3" }
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"compact": {
|
|
87
|
+
"description": "Context compaction — stealth camo engaged",
|
|
88
|
+
"files": [
|
|
89
|
+
{ "src": "@myinstants/metalgearsolid.swf.mp3", "name": "game-over-fade.mp3" },
|
|
90
|
+
{ "src": "@myinstants/original-metal-gear-solid-game-over-screen.mp3", "name": "original-game-over.mp3" },
|
|
91
|
+
{ "src": "@myinstants/ocelot-meowing.mp3", "name": "ocelot-meow.mp3" }
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"teammate-idle": {
|
|
95
|
+
"description": "Teammate went idle — waiting on comms",
|
|
96
|
+
"files": [
|
|
97
|
+
{ "src": "@myinstants/codec.mp3", "name": "codec-beep.mp3" },
|
|
98
|
+
{ "src": "@myinstants/mgs2-snake-friendly-fire.mp3", "name": "friendly-fire.mp3" },
|
|
99
|
+
{ "src": "@myinstants/what-was-that-noise.mp3", "name": "what-was-that.mp3" }
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Downloads sound files for the pokemon-gen1 theme.
|
|
4
|
+
# Called by install.sh with $1 = target sounds directory, $2 = temp directory.
|
|
5
|
+
#
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# shellcheck disable=SC2034 # passed by install.sh, reserved for theme use
|
|
9
|
+
SOUNDS_DIR="$1"
|
|
10
|
+
TMP_DIR="$2"
|
|
11
|
+
PKM_DIR="$TMP_DIR/PokemonGen1"
|
|
12
|
+
|
|
13
|
+
mkdir -p "$PKM_DIR/SFX" "$PKM_DIR/Cries" "$PKM_DIR/Attacks"
|
|
14
|
+
|
|
15
|
+
# --- General sound effects (menu, items, battle UI) ---
|
|
16
|
+
echo " Downloading Pokemon Red/Blue general sound effects..."
|
|
17
|
+
SFX_ZIP="$TMP_DIR/pokemon-sfx.zip"
|
|
18
|
+
curl -sL -o "$SFX_ZIP" \
|
|
19
|
+
"https://sounds.spriters-resource.com/media/assets/408/410769.zip?updated=1755537434"
|
|
20
|
+
|
|
21
|
+
if ! file "$SFX_ZIP" | grep -q "Zip"; then
|
|
22
|
+
echo " Error: Failed to download general sound effects pack."
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
unzip -qo "$SFX_ZIP" -d "$TMP_DIR"
|
|
27
|
+
cp "$TMP_DIR/Pokemon Red_Blue Sound Effects/"*.wav "$PKM_DIR/SFX/"
|
|
28
|
+
|
|
29
|
+
# --- Pokemon cries (151 original cries) ---
|
|
30
|
+
echo " Downloading Pokemon Gen 1 cries..."
|
|
31
|
+
CRIES_ZIP="$TMP_DIR/pokemon-cries.zip"
|
|
32
|
+
curl -sL -o "$CRIES_ZIP" \
|
|
33
|
+
"https://sounds.spriters-resource.com/media/assets/411/413821.zip?updated=1755538954"
|
|
34
|
+
|
|
35
|
+
if ! file "$CRIES_ZIP" | grep -q "Zip"; then
|
|
36
|
+
echo " Error: Failed to download Pokemon cries pack."
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
unzip -qo "$CRIES_ZIP" -d "$TMP_DIR"
|
|
41
|
+
cp "$TMP_DIR/Pokemon RBY Cries/"*.wav "$PKM_DIR/Cries/"
|
|
42
|
+
|
|
43
|
+
# --- Attack move sound effects ---
|
|
44
|
+
echo " Downloading Pokemon Gen 1 attack move sounds..."
|
|
45
|
+
ATTACKS_ZIP="$TMP_DIR/pokemon-attacks.zip"
|
|
46
|
+
curl -sL -o "$ATTACKS_ZIP" \
|
|
47
|
+
"https://sounds.spriters-resource.com/media/assets/408/410768.zip?updated=1755537433"
|
|
48
|
+
|
|
49
|
+
if ! file "$ATTACKS_ZIP" | grep -q "Zip"; then
|
|
50
|
+
echo " Error: Failed to download attack move sound effects pack."
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
unzip -qo "$ATTACKS_ZIP" -d "$TMP_DIR/pokemon-attacks-raw"
|
|
55
|
+
|
|
56
|
+
# Copy only the specific attack sounds used by this theme
|
|
57
|
+
ATTACK_FILES=(
|
|
58
|
+
"Screech.wav"
|
|
59
|
+
"Rest.wav"
|
|
60
|
+
"Teleport.wav"
|
|
61
|
+
"Confused.wav"
|
|
62
|
+
"SelfDestruct.wav"
|
|
63
|
+
"Splash.wav"
|
|
64
|
+
"Substitute.wav"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
for FILE in "${ATTACK_FILES[@]}"; do
|
|
68
|
+
if [ -f "$TMP_DIR/pokemon-attacks-raw/$FILE" ]; then
|
|
69
|
+
cp "$TMP_DIR/pokemon-attacks-raw/$FILE" "$PKM_DIR/Attacks/"
|
|
70
|
+
else
|
|
71
|
+
echo " Warning: Attack sound $FILE not found in archive."
|
|
72
|
+
fi
|
|
73
|
+
done
|
|
74
|
+
|
|
75
|
+
echo " Download complete."
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Pokemon Gen 1",
|
|
3
|
+
"description": "Pokemon Red/Blue/Yellow sound effects — cries, battle sounds, and menu bleeps from Kanto",
|
|
4
|
+
"author": "ryparker",
|
|
5
|
+
"srcBase": "PokemonGen1",
|
|
6
|
+
"sounds": {
|
|
7
|
+
"start": {
|
|
8
|
+
"description": "Session starting — a wild Claude appeared!",
|
|
9
|
+
"files": [
|
|
10
|
+
{ "src": "SFX/SFX_INTRO_LUNGE.wav", "name": "intro-lunge.wav" },
|
|
11
|
+
{ "src": "SFX/SFX_BALL_TOSS.wav", "name": "ball-toss.wav" },
|
|
12
|
+
{ "src": "SFX/SFX_BALL_POOF.wav", "name": "ball-poof.wav" },
|
|
13
|
+
{ "src": "Cries/025.wav", "name": "pikachu-cry.wav" },
|
|
14
|
+
{ "src": "SFX/SFX_INTRO_WHOOSH.wav", "name": "intro-whoosh.wav" }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"end": {
|
|
18
|
+
"description": "Session over — Pokemon Center healed up",
|
|
19
|
+
"files": [
|
|
20
|
+
{ "src": "SFX/SFX_HEAL_UP.wav", "name": "heal-up.wav" },
|
|
21
|
+
{ "src": "SFX/SFX_SAVE.wav", "name": "save-game.wav" },
|
|
22
|
+
{ "src": "SFX/SFX_GO_OUTSIDE.wav", "name": "go-outside.wav" },
|
|
23
|
+
{ "src": "SFX/SFX_TURN_OFF_PC.wav", "name": "turn-off-pc.wav" }
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"prompt": {
|
|
27
|
+
"description": "User submitted prompt — menu select acknowledgment",
|
|
28
|
+
"files": [
|
|
29
|
+
{ "src": "SFX/SFX_PRESS_AB.wav", "name": "press-ab.wav" },
|
|
30
|
+
{ "src": "SFX/SFX_START_MENU.wav", "name": "start-menu.wav" },
|
|
31
|
+
{ "src": "SFX/SFX_TINK.wav", "name": "tink.wav" },
|
|
32
|
+
{ "src": "SFX/SFX_SWAP.wav", "name": "swap.wav" }
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"stop": {
|
|
36
|
+
"description": "Done responding — move learned, task complete",
|
|
37
|
+
"files": [
|
|
38
|
+
{ "src": "SFX/SFX_GET_ITEM_1.wav", "name": "get-item.wav" },
|
|
39
|
+
{ "src": "SFX/SFX_DEX_PAGE_ADDED.wav", "name": "dex-page-added.wav" },
|
|
40
|
+
{ "src": "SFX/SFX_PURCHASE.wav", "name": "purchase.wav" },
|
|
41
|
+
{ "src": "SFX/SFX_HEAL_AILMENT.wav", "name": "heal-ailment.wav" }
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"permission": {
|
|
45
|
+
"description": "Permission prompt — wild encounter alert!",
|
|
46
|
+
"files": [
|
|
47
|
+
{ "src": "SFX/SFX_COLLISION.wav", "name": "collision.wav" },
|
|
48
|
+
{ "src": "SFX/SFX_SILPH_SCOPE.wav", "name": "silph-scope.wav" },
|
|
49
|
+
{ "src": "SFX/SFX_DENIED.wav", "name": "denied.wav" },
|
|
50
|
+
{ "src": "Attacks/Screech.wav", "name": "screech.wav" }
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"idle": {
|
|
54
|
+
"description": "Waiting for input — idle Pokemon waiting",
|
|
55
|
+
"files": [
|
|
56
|
+
{ "src": "SFX/SFX_SLOTS_STOP_WHEEL.wav", "name": "slots-stop.wav" },
|
|
57
|
+
{ "src": "SFX/SFX_POISONED.wav", "name": "poisoned.wav" },
|
|
58
|
+
{ "src": "Cries/054.wav", "name": "psyduck-cry.wav" },
|
|
59
|
+
{ "src": "Attacks/Rest.wav", "name": "rest.wav" }
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"subagent": {
|
|
63
|
+
"description": "Spawning subagent — I choose you!",
|
|
64
|
+
"files": [
|
|
65
|
+
{ "src": "SFX/SFX_BALL_TOSS.wav", "name": "pokeball-throw.wav" },
|
|
66
|
+
{ "src": "SFX/SFX_BALL_POOF.wav", "name": "pokeball-open.wav" },
|
|
67
|
+
{ "src": "SFX/SFX_SWITCH.wav", "name": "pokemon-switch.wav" },
|
|
68
|
+
{ "src": "Cries/006.wav", "name": "charizard-cry.wav" },
|
|
69
|
+
{ "src": "Attacks/Teleport.wav", "name": "teleport.wav" }
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"error": {
|
|
73
|
+
"description": "Tool failure — it's not very effective...",
|
|
74
|
+
"files": [
|
|
75
|
+
{ "src": "SFX/SFX_FAINT_FALL.wav", "name": "faint-fall.wav" },
|
|
76
|
+
{ "src": "SFX/SFX_FAINT_THUD.wav", "name": "faint-thud.wav" },
|
|
77
|
+
{ "src": "Attacks/Confused.wav", "name": "confused.wav" },
|
|
78
|
+
{ "src": "Attacks/SelfDestruct.wav", "name": "self-destruct.wav" },
|
|
79
|
+
{ "src": "Attacks/Splash.wav", "name": "splash.wav" }
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"task-completed": {
|
|
83
|
+
"description": "Task finished — badge earned, level up!",
|
|
84
|
+
"files": [
|
|
85
|
+
{ "src": "SFX/SFX_LEVEL_UP.wav", "name": "level-up.wav" },
|
|
86
|
+
{ "src": "SFX/SFX_GET_KEY_ITEM.wav", "name": "get-key-item.wav" },
|
|
87
|
+
{ "src": "SFX/SFX_GET_ITEM_2.wav", "name": "get-item-fanfare.wav" },
|
|
88
|
+
{ "src": "SFX/SFX_CAUGHT_MON.wav", "name": "caught-mon.wav" },
|
|
89
|
+
{ "src": "SFX/SFX_POKEDEX_RATING.wav", "name": "pokedex-rating.wav" }
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
"compact": {
|
|
93
|
+
"description": "Context compaction — PC storage and transformation",
|
|
94
|
+
"files": [
|
|
95
|
+
{ "src": "SFX/SFX_ENTER_PC.wav", "name": "enter-pc.wav" },
|
|
96
|
+
{ "src": "SFX/SFX_WITHDRAW_DEPOSIT.wav", "name": "withdraw-deposit.wav" },
|
|
97
|
+
{ "src": "SFX/SFX_SHRINK.wav", "name": "shrink.wav" },
|
|
98
|
+
{ "src": "Attacks/Substitute.wav", "name": "substitute.wav" },
|
|
99
|
+
{ "src": "SFX/SFX_TRADE_MACHINE.wav", "name": "trade-machine.wav" }
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"teammate-idle": {
|
|
103
|
+
"description": "Teammate went idle — a Pokemon is waiting",
|
|
104
|
+
"files": [
|
|
105
|
+
{ "src": "Cries/025.wav", "name": "pikachu-cry.wav" },
|
|
106
|
+
{ "src": "Cries/039.wav", "name": "jigglypuff-cry.wav" },
|
|
107
|
+
{ "src": "SFX/SFX_SLOTS_NEW_SPIN.wav", "name": "slots-new-spin.wav" },
|
|
108
|
+
{ "src": "SFX/SFX_LEDGE.wav", "name": "ledge.wav" }
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Downloads sound files for the portal theme.
|
|
4
|
+
# Called by install.sh with $1 = target sounds directory, $2 = temp directory.
|
|
5
|
+
#
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# shellcheck disable=SC2034 # passed by install.sh, reserved for theme use
|
|
9
|
+
SOUNDS_DIR="$1"
|
|
10
|
+
TMP_DIR="$2"
|
|
11
|
+
PORTAL_DIR="$TMP_DIR/Portal2"
|
|
12
|
+
|
|
13
|
+
BASE_URL="https://raw.githubusercontent.com/sourcesounds/portal2/master/sound"
|
|
14
|
+
|
|
15
|
+
# All unique sound files needed by this theme, organized by subdirectory
|
|
16
|
+
declare -A DIRS
|
|
17
|
+
DIRS=(
|
|
18
|
+
[weapons/portalgun]="
|
|
19
|
+
portalgun_powerup1.wav
|
|
20
|
+
portal_open1.wav
|
|
21
|
+
portal_close1.wav
|
|
22
|
+
portal_close2.wav
|
|
23
|
+
portal_enter_01.wav
|
|
24
|
+
portal_exit_01.wav
|
|
25
|
+
portalgun_shoot_blue1.wav
|
|
26
|
+
portalgun_shoot_red1.wav
|
|
27
|
+
portal_fizzle_01.wav
|
|
28
|
+
portal_invalid_surface_01.wav
|
|
29
|
+
"
|
|
30
|
+
[npc/turret_floor]="
|
|
31
|
+
active.wav
|
|
32
|
+
alert.wav
|
|
33
|
+
ping.wav
|
|
34
|
+
retract.wav
|
|
35
|
+
turret_active_1.wav
|
|
36
|
+
turret_autosearch_1.wav
|
|
37
|
+
turret_autosearch_2.wav
|
|
38
|
+
turret_search_1.wav
|
|
39
|
+
turret_search_2.wav
|
|
40
|
+
turret_deploy_1.wav
|
|
41
|
+
turret_retire_1.wav
|
|
42
|
+
turret_retire_2.wav
|
|
43
|
+
turret_shotat_1.wav
|
|
44
|
+
turret_disabled_1.wav
|
|
45
|
+
"
|
|
46
|
+
[npc/sphere]="
|
|
47
|
+
corrupt_core_attach_01.wav
|
|
48
|
+
sphere_attach.wav
|
|
49
|
+
"
|
|
50
|
+
[buttons]="
|
|
51
|
+
button_synth_positive_01.wav
|
|
52
|
+
button_synth_negative_01.wav
|
|
53
|
+
portal_button_down_01.wav
|
|
54
|
+
portal_button_up_01.wav
|
|
55
|
+
og_test_chamber_pos_01.wav
|
|
56
|
+
"
|
|
57
|
+
[ui]="
|
|
58
|
+
buttonclick.wav
|
|
59
|
+
"
|
|
60
|
+
[alarms]="
|
|
61
|
+
klaxon1.wav
|
|
62
|
+
"
|
|
63
|
+
[vfx]="
|
|
64
|
+
fizzler_start_01.wav
|
|
65
|
+
fizzler_shutdown_01.wav
|
|
66
|
+
"
|
|
67
|
+
[props]="
|
|
68
|
+
material_emancipation_01.wav
|
|
69
|
+
post_message_announcer_01.wav
|
|
70
|
+
"
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
echo " Downloading Portal 2 sounds..."
|
|
74
|
+
|
|
75
|
+
FAILED=0
|
|
76
|
+
TOTAL=0
|
|
77
|
+
|
|
78
|
+
for DIR in "${!DIRS[@]}"; do
|
|
79
|
+
mkdir -p "$PORTAL_DIR/$DIR"
|
|
80
|
+
for FILE in ${DIRS[$DIR]}; do
|
|
81
|
+
TOTAL=$((TOTAL + 1))
|
|
82
|
+
curl -sL -o "$PORTAL_DIR/$DIR/$FILE" "$BASE_URL/$DIR/$FILE"
|
|
83
|
+
if [ ! -s "$PORTAL_DIR/$DIR/$FILE" ]; then
|
|
84
|
+
echo " Warning: Failed to download $DIR/$FILE"
|
|
85
|
+
rm -f "$PORTAL_DIR/$DIR/$FILE"
|
|
86
|
+
FAILED=$((FAILED + 1))
|
|
87
|
+
fi
|
|
88
|
+
done
|
|
89
|
+
done
|
|
90
|
+
|
|
91
|
+
if [ "$FAILED" -gt 0 ]; then
|
|
92
|
+
echo " Warning: $FAILED of $TOTAL file(s) failed to download."
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
echo " Download complete ($((TOTAL - FAILED))/$TOTAL files)."
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Portal",
|
|
3
|
+
"description": "Portal 2 sound effects — turrets, portal guns, GLaDOS alerts, and Aperture Science ambiance",
|
|
4
|
+
"author": "ryparker",
|
|
5
|
+
"srcBase": "Portal2",
|
|
6
|
+
"sounds": {
|
|
7
|
+
"start": {
|
|
8
|
+
"description": "Session starting — test chamber initiated",
|
|
9
|
+
"files": [
|
|
10
|
+
{ "src": "weapons/portalgun/portalgun_powerup1.wav", "name": "portalgun-powerup.wav" },
|
|
11
|
+
{ "src": "npc/turret_floor/active.wav", "name": "turret-activated.wav" },
|
|
12
|
+
{ "src": "weapons/portalgun/portal_open1.wav", "name": "portal-open.wav" },
|
|
13
|
+
{ "src": "buttons/og_test_chamber_pos_01.wav", "name": "test-chamber-start.wav" }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"end": {
|
|
17
|
+
"description": "Session over — test complete",
|
|
18
|
+
"files": [
|
|
19
|
+
{ "src": "weapons/portalgun/portal_close1.wav", "name": "portal-close.wav" },
|
|
20
|
+
{ "src": "weapons/portalgun/portal_close2.wav", "name": "portal-close-alt.wav" },
|
|
21
|
+
{ "src": "npc/turret_floor/turret_retire_1.wav", "name": "turret-goodbye.wav" },
|
|
22
|
+
{ "src": "vfx/fizzler_shutdown_01.wav", "name": "fizzler-shutdown.wav" }
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"prompt": {
|
|
26
|
+
"description": "User submitted prompt — input received",
|
|
27
|
+
"files": [
|
|
28
|
+
{ "src": "buttons/button_synth_positive_01.wav", "name": "button-positive.wav" },
|
|
29
|
+
{ "src": "buttons/portal_button_down_01.wav", "name": "button-press.wav" },
|
|
30
|
+
{ "src": "ui/buttonclick.wav", "name": "ui-click.wav" },
|
|
31
|
+
{ "src": "weapons/portalgun/portal_enter_01.wav", "name": "portal-enter.wav" }
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"stop": {
|
|
35
|
+
"description": "Done responding — task acknowledged",
|
|
36
|
+
"files": [
|
|
37
|
+
{ "src": "buttons/button_synth_positive_01.wav", "name": "synth-positive.wav" },
|
|
38
|
+
{ "src": "buttons/portal_button_up_01.wav", "name": "button-release.wav" },
|
|
39
|
+
{ "src": "weapons/portalgun/portal_exit_01.wav", "name": "portal-exit.wav" },
|
|
40
|
+
{ "src": "npc/turret_floor/turret_retire_2.wav", "name": "turret-done.wav" }
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"permission": {
|
|
44
|
+
"description": "Permission prompt — turret alert",
|
|
45
|
+
"files": [
|
|
46
|
+
{ "src": "npc/turret_floor/turret_search_1.wav", "name": "turret-whos-there.wav" },
|
|
47
|
+
{ "src": "npc/turret_floor/alert.wav", "name": "turret-alert.wav" },
|
|
48
|
+
{ "src": "alarms/klaxon1.wav", "name": "klaxon-alarm.wav" },
|
|
49
|
+
{ "src": "npc/turret_floor/turret_active_1.wav", "name": "turret-i-see-you.wav" }
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"idle": {
|
|
53
|
+
"description": "Waiting for input — are you still there?",
|
|
54
|
+
"files": [
|
|
55
|
+
{ "src": "npc/turret_floor/turret_autosearch_1.wav", "name": "turret-are-you-still-there.wav" },
|
|
56
|
+
{ "src": "npc/turret_floor/turret_autosearch_2.wav", "name": "turret-searching.wav" },
|
|
57
|
+
{ "src": "npc/turret_floor/turret_search_2.wav", "name": "turret-hello.wav" },
|
|
58
|
+
{ "src": "npc/turret_floor/ping.wav", "name": "turret-ping.wav" }
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"subagent": {
|
|
62
|
+
"description": "Spawning subagent — deploying through portal",
|
|
63
|
+
"files": [
|
|
64
|
+
{ "src": "weapons/portalgun/portalgun_shoot_blue1.wav", "name": "shoot-blue-portal.wav" },
|
|
65
|
+
{ "src": "weapons/portalgun/portalgun_shoot_red1.wav", "name": "shoot-orange-portal.wav" },
|
|
66
|
+
{ "src": "npc/turret_floor/turret_deploy_1.wav", "name": "turret-deploy.wav" },
|
|
67
|
+
{ "src": "npc/sphere/corrupt_core_attach_01.wav", "name": "core-attach.wav" }
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
"error": {
|
|
71
|
+
"description": "Tool failure — fizzled",
|
|
72
|
+
"files": [
|
|
73
|
+
{ "src": "npc/turret_floor/turret_shotat_1.wav", "name": "turret-ow.wav" },
|
|
74
|
+
{ "src": "weapons/portalgun/portal_fizzle_01.wav", "name": "portal-fizzle.wav" },
|
|
75
|
+
{ "src": "props/material_emancipation_01.wav", "name": "emancipation-grill.wav" },
|
|
76
|
+
{ "src": "buttons/button_synth_negative_01.wav", "name": "synth-negative.wav" },
|
|
77
|
+
{ "src": "weapons/portalgun/portal_invalid_surface_01.wav", "name": "invalid-surface.wav" }
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"task-completed": {
|
|
81
|
+
"description": "Task finished — test chamber complete",
|
|
82
|
+
"files": [
|
|
83
|
+
{ "src": "buttons/og_test_chamber_pos_01.wav", "name": "test-chamber-complete.wav" },
|
|
84
|
+
{ "src": "npc/sphere/sphere_attach.wav", "name": "core-complete.wav" },
|
|
85
|
+
{ "src": "props/post_message_announcer_01.wav", "name": "announcer-post.wav" }
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"compact": {
|
|
89
|
+
"description": "Context compaction — memory fizzling",
|
|
90
|
+
"files": [
|
|
91
|
+
{ "src": "vfx/fizzler_start_01.wav", "name": "fizzler-start.wav" },
|
|
92
|
+
{ "src": "npc/turret_floor/retract.wav", "name": "turret-retract.wav" },
|
|
93
|
+
{ "src": "weapons/portalgun/portal_close1.wav", "name": "portal-whoosh-close.wav" }
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"teammate-idle": {
|
|
97
|
+
"description": "Teammate went idle — turret lost target",
|
|
98
|
+
"files": [
|
|
99
|
+
{ "src": "npc/turret_floor/turret_search_1.wav", "name": "turret-target-lost.wav" },
|
|
100
|
+
{ "src": "npc/turret_floor/turret_autosearch_1.wav", "name": "turret-hellooo.wav" },
|
|
101
|
+
{ "src": "npc/turret_floor/turret_disabled_1.wav", "name": "turret-no-hard-feelings.wav" }
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Downloads sound files for the star-wars theme.
|
|
4
|
+
# Called by install.sh with $1 = target sounds directory, $2 = temp directory.
|
|
5
|
+
#
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# shellcheck disable=SC2034 # passed by install.sh, reserved for theme use
|
|
9
|
+
SOUNDS_DIR="$1"
|
|
10
|
+
TMP_DIR="$2"
|
|
11
|
+
SW_DIR="$TMP_DIR/StarWars"
|
|
12
|
+
|
|
13
|
+
mkdir -p "$SW_DIR/empire" "$SW_DIR/return"
|
|
14
|
+
|
|
15
|
+
BASE_URL="https://www.thesoundarchive.com/starwars"
|
|
16
|
+
WAVSOURCE_URL="https://www.wavsource.com/snds_2020-10-01_3728627494378403/movies/star_wars"
|
|
17
|
+
|
|
18
|
+
# ── thesoundarchive.com — root-level files ──────────────────────────
|
|
19
|
+
ROOT_FILES=(
|
|
20
|
+
light-saber-on.wav
|
|
21
|
+
light-saber-off.wav
|
|
22
|
+
light-saber-battle.wav
|
|
23
|
+
blaster-firing.wav
|
|
24
|
+
set-for-stun.wav
|
|
25
|
+
force.wav
|
|
26
|
+
forcestrong.wav
|
|
27
|
+
forceisstrong.wav
|
|
28
|
+
disturbence.wav
|
|
29
|
+
chewy_roar.wav
|
|
30
|
+
Chewie-chatting.wav
|
|
31
|
+
R2D2.wav
|
|
32
|
+
R2D2-do.wav
|
|
33
|
+
R2D2-hey-you.wav
|
|
34
|
+
R2D2-yeah.wav
|
|
35
|
+
swvader01.wav
|
|
36
|
+
swvader02.wav
|
|
37
|
+
swvader03.wav
|
|
38
|
+
swvader04.wav
|
|
39
|
+
WilhelmScream.wav
|
|
40
|
+
alwaystwo.wav
|
|
41
|
+
Muchfear.wav
|
|
42
|
+
Revenge.wav
|
|
43
|
+
wipthemout.wav
|
|
44
|
+
obiwan_chosenone.wav
|
|
45
|
+
emp_lordvaderrise.wav
|
|
46
|
+
dange-disturb.wav
|
|
47
|
+
yoda_twisted.wav
|
|
48
|
+
rescue.wav
|
|
49
|
+
swluke01.wav
|
|
50
|
+
fool.wav
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
echo " Downloading Star Wars sounds from thesoundarchive.com..."
|
|
54
|
+
|
|
55
|
+
FAILED=0
|
|
56
|
+
for FILE in "${ROOT_FILES[@]}"; do
|
|
57
|
+
curl -sL -o "$SW_DIR/$FILE" "$BASE_URL/$FILE"
|
|
58
|
+
if [ ! -s "$SW_DIR/$FILE" ]; then
|
|
59
|
+
echo " Warning: Failed to download $FILE"
|
|
60
|
+
rm -f "$SW_DIR/$FILE"
|
|
61
|
+
FAILED=$((FAILED + 1))
|
|
62
|
+
fi
|
|
63
|
+
done
|
|
64
|
+
|
|
65
|
+
# ── thesoundarchive.com — subdirectory files ────────────────────────
|
|
66
|
+
EMPIRE_FILES=(
|
|
67
|
+
yodalaughing.wav
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
for FILE in "${EMPIRE_FILES[@]}"; do
|
|
71
|
+
curl -sL -o "$SW_DIR/empire/$FILE" "$BASE_URL/empire/$FILE"
|
|
72
|
+
if [ ! -s "$SW_DIR/empire/$FILE" ]; then
|
|
73
|
+
echo " Warning: Failed to download empire/$FILE"
|
|
74
|
+
rm -f "$SW_DIR/empire/$FILE"
|
|
75
|
+
FAILED=$((FAILED + 1))
|
|
76
|
+
fi
|
|
77
|
+
done
|
|
78
|
+
|
|
79
|
+
RETURN_FILES=(
|
|
80
|
+
jabba-the-hutt-laughing.wav
|
|
81
|
+
900yearsold.wav
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
for FILE in "${RETURN_FILES[@]}"; do
|
|
85
|
+
curl -sL -o "$SW_DIR/return/$FILE" "$BASE_URL/return/$FILE"
|
|
86
|
+
if [ ! -s "$SW_DIR/return/$FILE" ]; then
|
|
87
|
+
echo " Warning: Failed to download return/$FILE"
|
|
88
|
+
rm -f "$SW_DIR/return/$FILE"
|
|
89
|
+
FAILED=$((FAILED + 1))
|
|
90
|
+
fi
|
|
91
|
+
done
|
|
92
|
+
|
|
93
|
+
# ── wavsource.com — supplemental clips ──────────────────────────────
|
|
94
|
+
echo " Downloading supplemental clips from wavsource.com..."
|
|
95
|
+
|
|
96
|
+
WAVSOURCE_FILES=(
|
|
97
|
+
bad_feeling.wav
|
|
98
|
+
trap.wav
|
|
99
|
+
your_father.wav
|
|
100
|
+
do_or_do_not.wav
|
|
101
|
+
dark_side.wav
|
|
102
|
+
destroy_you.wav
|
|
103
|
+
destiny.wav
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
for FILE in "${WAVSOURCE_FILES[@]}"; do
|
|
107
|
+
curl -sL -o "$SW_DIR/$FILE" "$WAVSOURCE_URL/$FILE"
|
|
108
|
+
if [ ! -s "$SW_DIR/$FILE" ]; then
|
|
109
|
+
echo " Warning: Failed to download $FILE from wavsource"
|
|
110
|
+
rm -f "$SW_DIR/$FILE"
|
|
111
|
+
FAILED=$((FAILED + 1))
|
|
112
|
+
fi
|
|
113
|
+
done
|
|
114
|
+
|
|
115
|
+
if [ "$FAILED" -gt 0 ]; then
|
|
116
|
+
echo " Warning: $FAILED file(s) failed to download."
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
echo " Download complete."
|