summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--INSTALL.md8
-rw-r--r--Makefile5
-rw-r--r--audio/pikachu_cries.asm54
-rw-r--r--audio/pikachu_cries/pikachu_cry_1.wavbin18660 -> 18668 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_10.wavbin65572 -> 65580 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_11.wavbin14628 -> 14636 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_12.wavbin27684 -> 27692 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_13.wavbin39972 -> 39980 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_14.wavbin50404 -> 50412 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_15.wavbin42020 -> 42028 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_16.wavbin42212 -> 42220 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_17.wavbin17188 -> 17196 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_18.wavbin30820 -> 30828 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_19.wavbin45476 -> 45484 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_2.wavbin13860 -> 13868 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_20.wavbin65572 -> 65580 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_21.wavbin65540 -> 65548 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_22.wavbin51492 -> 51500 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_23.wavbin30436 -> 30444 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_24.wavbin57700 -> 57708 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_25.wavbin29156 -> 29164 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_26.wavbin27876 -> 27884 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_27.wavbin23268 -> 23276 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_28.wavbin37476 -> 37484 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_29.wavbin24932 -> 24940 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_3.wavbin20644 -> 20652 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_30.wavbin9636 -> 9644 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_31.wavbin15396 -> 15404 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_32.wavbin11364 -> 11372 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_33.wavbin26020 -> 26028 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_34.wavbin43108 -> 43116 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_35.wavbin37220 -> 37228 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_36.wavbin57124 -> 57132 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_37.wavbin28644 -> 28652 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_38.wavbin25444 -> 25452 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_39.wavbin35940 -> 35948 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_4.wavbin32740 -> 32748 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_40.wavbin30884 -> 30892 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_41.wavbin49380 -> 49388 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_42.wavbin44068 -> 44076 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_5.wavbin33316 -> 33324 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_6.wavbin37028 -> 37036 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_7.wavbin28004 -> 28012 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_8.wavbin34404 -> 34412 bytes
-rw-r--r--audio/pikachu_cries/pikachu_cry_9.wavbin27172 -> 27180 bytes
-rw-r--r--tools/Makefile4
-rw-r--r--tools/pcm.c160
47 files changed, 173 insertions, 58 deletions
diff --git a/INSTALL.md b/INSTALL.md
index 0d49fedc..73e1be31 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -39,7 +39,6 @@ Run setup and leave the default settings. At the "**Select Packages**" step, cho
- `make`
- `git`
- `gcc-core`
-- `python`
Double click on the text that says "**Skip**" next to each package to select the most recent version to install.
@@ -82,7 +81,7 @@ Open **Terminal** and enter the following commands, depending on which distro yo
To install the software required for **pokeyellow**:
```bash
-sudo apt-get install make gcc git python
+sudo apt-get install make gcc git
```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.1** from source.
@@ -92,7 +91,7 @@ Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source)
To install the software required for **pokeyellow**:
```bash
-sudo zypper install make gcc git python
+sudo zypper install make gcc git
```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.1** from source.
@@ -102,7 +101,7 @@ Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source)
To install the software required for **pokeyellow**:
```bash
-sudo pacman -S make gcc git python
+sudo pacman -S make gcc git
```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/arch) for Arch Linux to install **rgbds 0.4.1**.
@@ -133,7 +132,6 @@ If your distro is not listed here, try to find the required software in its repo
- `gcc` (or `clang`)
- `git`
- `rgbds`
-- `python`
If `rgbds` is not available, you'll need to follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.1** from source.
diff --git a/Makefile b/Makefile
index 434a3192..52b6e875 100644
--- a/Makefile
+++ b/Makefile
@@ -27,9 +27,6 @@ RGBFIX ?= $(RGBDS)rgbfix
RGBGFX ?= $(RGBDS)rgbgfx
RGBLINK ?= $(RGBDS)rgblink
-PYTHON := python
-pcm := $(PYTHON) tools/pokemontools/pcm.py pcm
-
### Build targets
@@ -140,4 +137,4 @@ gfx/surfing_pikachu/surfing_pikachu_3.2bpp: tools/gfx += --trim-whitespace
%.wav: ;
%.pcm: %.wav
- @$(pcm) $<
+ tools/pcm $< $@
diff --git a/audio/pikachu_cries.asm b/audio/pikachu_cries.asm
index 1f6bc2c4..4ccc6181 100644
--- a/audio/pikachu_cries.asm
+++ b/audio/pikachu_cries.asm
@@ -1,212 +1,172 @@
pcm: MACRO
- dw .End - .Start
-.Start:
+; All of the pcm data has one trailing byte that is never processed.
+ dw .End - .Start - 1
+.Start
\1
-.End:
+.End
ENDM
-; All of the pcm data has one trailing byte that is never processed.
-
SECTION "Pikachu Cries 1", ROMX
PikachuCry1::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_1.pcm"
- db $77 ; unused
PikachuCry2::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_2.pcm"
- db $77 ; unused
PikachuCry3::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_3.pcm"
- db $03 ; unused
PikachuCry4::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_4.pcm"
- db $e0 ; unused
SECTION "Pikachu Cries 2", ROMX
PikachuCry5::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_5.pcm"
- db $77 ; unused
PikachuCry6::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_6.pcm"
- db $77 ; unused
PikachuCry7::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_7.pcm"
- db $ff ; unused
SECTION "Pikachu Cries 3", ROMX
PikachuCry8::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_8.pcm"
- db $f7 ; unused
PikachuCry9::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_9.pcm"
- db $f3 ; unused
PikachuCry10::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_10.pcm"
- db $ff ; unused
SECTION "Pikachu Cries 4", ROMX
PikachuCry11::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_11.pcm"
- db $77 ; unused
PikachuCry12::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_12.pcm"
- db $ff ; unused
PikachuCry13::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_13.pcm"
- db $f0 ; unused
SECTION "Pikachu Cries 5", ROMX
PikachuCry14::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_14.pcm"
- db $fc ; unused
PikachuCry15::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_15.pcm"
- db $77 ; unused
+
SECTION "Pikachu Cries 6", ROMX
PikachuCry16::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_16.pcm"
- db $e7 ; unused
PikachuCry18::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_18.pcm"
- db $00 ; unused
PikachuCry22::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_22.pcm"
- db $7e ; unused
SECTION "Pikachu Cries 7", ROMX
PikachuCry20::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_20.pcm"
- db $07 ; unused
PikachuCry21::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_21.pcm"
- db $ff ; unused
SECTION "Pikachu Cries 8", ROMX
PikachuCry19::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_19.pcm"
- db $06 ; unused
PikachuCry24::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_24.pcm"
- db $e0 ; unused
PikachuCry26::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_26.pcm"
- db $00 ; unused
+
SECTION "Pikachu Cries 9", ROMX
PikachuCry17::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_17.pcm"
- db $00 ; unused
PikachuCry23::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_23.pcm"
- db $00 ; unused
PikachuCry25::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_25.pcm"
- db $03 ; unused
SECTION "Pikachu Cries 10", ROMX
PikachuCry27::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_27.pcm"
- db $ff ; unused
PikachuCry28::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_28.pcm"
- db $1b ; unused
PikachuCry29::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_29.pcm"
- db $87 ; unused
PikachuCry30::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_30.pcm"
- db $00 ; unused
PikachuCry31::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_31.pcm"
- db $00 ; unused
+
SECTION "Pikachu Cries 11", ROMX
PikachuCry32::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_32.pcm"
- db $ff ; unused
PikachuCry33::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_33.pcm"
- db $1f ; unused
PikachuCry34::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_34.pcm"
- db $01 ; unused
PikachuCry41::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_41.pcm"
- db $9b ; unused
SECTION "Pikachu Cries 12", ROMX
PikachuCry35::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_35.pcm"
- db $00 ; unused
PikachuCry36::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_36.pcm"
- db $01 ; unused
PikachuCry39::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_39.pcm"
- db $0f ; unused
SECTION "Pikachu Cries 13", ROMX
PikachuCry37::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_37.pcm"
- db $3f ; unused
PikachuCry38::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_38.pcm"
- db $ff ; unused
PikachuCry40::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_40.pcm"
- db $ff ; unused
PikachuCry42::
pcm INCBIN "audio/pikachu_cries/pikachu_cry_42.pcm"
- db $00 ; unused
diff --git a/audio/pikachu_cries/pikachu_cry_1.wav b/audio/pikachu_cries/pikachu_cry_1.wav
index 98714511..4d384ac7 100644
--- a/audio/pikachu_cries/pikachu_cry_1.wav
+++ b/audio/pikachu_cries/pikachu_cry_1.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_10.wav b/audio/pikachu_cries/pikachu_cry_10.wav
index e51a2979..452def52 100644
--- a/audio/pikachu_cries/pikachu_cry_10.wav
+++ b/audio/pikachu_cries/pikachu_cry_10.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_11.wav b/audio/pikachu_cries/pikachu_cry_11.wav
index 44eece5a..39b6f5c0 100644
--- a/audio/pikachu_cries/pikachu_cry_11.wav
+++ b/audio/pikachu_cries/pikachu_cry_11.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_12.wav b/audio/pikachu_cries/pikachu_cry_12.wav
index cad90cfe..6bdcd74b 100644
--- a/audio/pikachu_cries/pikachu_cry_12.wav
+++ b/audio/pikachu_cries/pikachu_cry_12.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_13.wav b/audio/pikachu_cries/pikachu_cry_13.wav
index 981768b5..1bdbc65c 100644
--- a/audio/pikachu_cries/pikachu_cry_13.wav
+++ b/audio/pikachu_cries/pikachu_cry_13.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_14.wav b/audio/pikachu_cries/pikachu_cry_14.wav
index 3da9a543..38932232 100644
--- a/audio/pikachu_cries/pikachu_cry_14.wav
+++ b/audio/pikachu_cries/pikachu_cry_14.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_15.wav b/audio/pikachu_cries/pikachu_cry_15.wav
index 4ef874c3..7424d663 100644
--- a/audio/pikachu_cries/pikachu_cry_15.wav
+++ b/audio/pikachu_cries/pikachu_cry_15.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_16.wav b/audio/pikachu_cries/pikachu_cry_16.wav
index baddf17c..d703e1e9 100644
--- a/audio/pikachu_cries/pikachu_cry_16.wav
+++ b/audio/pikachu_cries/pikachu_cry_16.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_17.wav b/audio/pikachu_cries/pikachu_cry_17.wav
index f8bd9c73..9558a0ec 100644
--- a/audio/pikachu_cries/pikachu_cry_17.wav
+++ b/audio/pikachu_cries/pikachu_cry_17.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_18.wav b/audio/pikachu_cries/pikachu_cry_18.wav
index 69b2d3b8..08e7a1f3 100644
--- a/audio/pikachu_cries/pikachu_cry_18.wav
+++ b/audio/pikachu_cries/pikachu_cry_18.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_19.wav b/audio/pikachu_cries/pikachu_cry_19.wav
index a9429132..2bc077bd 100644
--- a/audio/pikachu_cries/pikachu_cry_19.wav
+++ b/audio/pikachu_cries/pikachu_cry_19.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_2.wav b/audio/pikachu_cries/pikachu_cry_2.wav
index d95343de..624bf2d4 100644
--- a/audio/pikachu_cries/pikachu_cry_2.wav
+++ b/audio/pikachu_cries/pikachu_cry_2.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_20.wav b/audio/pikachu_cries/pikachu_cry_20.wav
index 1c1842e4..44152d7c 100644
--- a/audio/pikachu_cries/pikachu_cry_20.wav
+++ b/audio/pikachu_cries/pikachu_cry_20.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_21.wav b/audio/pikachu_cries/pikachu_cry_21.wav
index d74ebc12..72b3dde6 100644
--- a/audio/pikachu_cries/pikachu_cry_21.wav
+++ b/audio/pikachu_cries/pikachu_cry_21.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_22.wav b/audio/pikachu_cries/pikachu_cry_22.wav
index 89fa5c77..9c764d04 100644
--- a/audio/pikachu_cries/pikachu_cry_22.wav
+++ b/audio/pikachu_cries/pikachu_cry_22.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_23.wav b/audio/pikachu_cries/pikachu_cry_23.wav
index ea092080..4d88f7ae 100644
--- a/audio/pikachu_cries/pikachu_cry_23.wav
+++ b/audio/pikachu_cries/pikachu_cry_23.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_24.wav b/audio/pikachu_cries/pikachu_cry_24.wav
index ec51d8cb..b7a31857 100644
--- a/audio/pikachu_cries/pikachu_cry_24.wav
+++ b/audio/pikachu_cries/pikachu_cry_24.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_25.wav b/audio/pikachu_cries/pikachu_cry_25.wav
index 77dac608..9b05e306 100644
--- a/audio/pikachu_cries/pikachu_cry_25.wav
+++ b/audio/pikachu_cries/pikachu_cry_25.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_26.wav b/audio/pikachu_cries/pikachu_cry_26.wav
index 9a9a0776..89dec6f3 100644
--- a/audio/pikachu_cries/pikachu_cry_26.wav
+++ b/audio/pikachu_cries/pikachu_cry_26.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_27.wav b/audio/pikachu_cries/pikachu_cry_27.wav
index 44a79ee0..be7d2168 100644
--- a/audio/pikachu_cries/pikachu_cry_27.wav
+++ b/audio/pikachu_cries/pikachu_cry_27.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_28.wav b/audio/pikachu_cries/pikachu_cry_28.wav
index ccf8bde2..1117c422 100644
--- a/audio/pikachu_cries/pikachu_cry_28.wav
+++ b/audio/pikachu_cries/pikachu_cry_28.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_29.wav b/audio/pikachu_cries/pikachu_cry_29.wav
index fb3375b3..df3ab87c 100644
--- a/audio/pikachu_cries/pikachu_cry_29.wav
+++ b/audio/pikachu_cries/pikachu_cry_29.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_3.wav b/audio/pikachu_cries/pikachu_cry_3.wav
index d3423966..20429bfa 100644
--- a/audio/pikachu_cries/pikachu_cry_3.wav
+++ b/audio/pikachu_cries/pikachu_cry_3.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_30.wav b/audio/pikachu_cries/pikachu_cry_30.wav
index 9bdafdc2..d420f509 100644
--- a/audio/pikachu_cries/pikachu_cry_30.wav
+++ b/audio/pikachu_cries/pikachu_cry_30.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_31.wav b/audio/pikachu_cries/pikachu_cry_31.wav
index 2853bc0b..658c48a2 100644
--- a/audio/pikachu_cries/pikachu_cry_31.wav
+++ b/audio/pikachu_cries/pikachu_cry_31.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_32.wav b/audio/pikachu_cries/pikachu_cry_32.wav
index 8ded504e..52ff34bb 100644
--- a/audio/pikachu_cries/pikachu_cry_32.wav
+++ b/audio/pikachu_cries/pikachu_cry_32.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_33.wav b/audio/pikachu_cries/pikachu_cry_33.wav
index 9be38b10..f7a13cb3 100644
--- a/audio/pikachu_cries/pikachu_cry_33.wav
+++ b/audio/pikachu_cries/pikachu_cry_33.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_34.wav b/audio/pikachu_cries/pikachu_cry_34.wav
index 45986668..d6a66bfb 100644
--- a/audio/pikachu_cries/pikachu_cry_34.wav
+++ b/audio/pikachu_cries/pikachu_cry_34.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_35.wav b/audio/pikachu_cries/pikachu_cry_35.wav
index 91b4d35b..0a6a4559 100644
--- a/audio/pikachu_cries/pikachu_cry_35.wav
+++ b/audio/pikachu_cries/pikachu_cry_35.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_36.wav b/audio/pikachu_cries/pikachu_cry_36.wav
index 789f9ca6..d59194e7 100644
--- a/audio/pikachu_cries/pikachu_cry_36.wav
+++ b/audio/pikachu_cries/pikachu_cry_36.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_37.wav b/audio/pikachu_cries/pikachu_cry_37.wav
index bc004c25..ea4f20c4 100644
--- a/audio/pikachu_cries/pikachu_cry_37.wav
+++ b/audio/pikachu_cries/pikachu_cry_37.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_38.wav b/audio/pikachu_cries/pikachu_cry_38.wav
index b7d23e25..63f5a4f8 100644
--- a/audio/pikachu_cries/pikachu_cry_38.wav
+++ b/audio/pikachu_cries/pikachu_cry_38.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_39.wav b/audio/pikachu_cries/pikachu_cry_39.wav
index da02dee2..3d8f17bb 100644
--- a/audio/pikachu_cries/pikachu_cry_39.wav
+++ b/audio/pikachu_cries/pikachu_cry_39.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_4.wav b/audio/pikachu_cries/pikachu_cry_4.wav
index 8cfc1041..8f0ac046 100644
--- a/audio/pikachu_cries/pikachu_cry_4.wav
+++ b/audio/pikachu_cries/pikachu_cry_4.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_40.wav b/audio/pikachu_cries/pikachu_cry_40.wav
index a048a408..719382ca 100644
--- a/audio/pikachu_cries/pikachu_cry_40.wav
+++ b/audio/pikachu_cries/pikachu_cry_40.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_41.wav b/audio/pikachu_cries/pikachu_cry_41.wav
index bbf5eabd..a12208c8 100644
--- a/audio/pikachu_cries/pikachu_cry_41.wav
+++ b/audio/pikachu_cries/pikachu_cry_41.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_42.wav b/audio/pikachu_cries/pikachu_cry_42.wav
index cd18baa0..8cae8eda 100644
--- a/audio/pikachu_cries/pikachu_cry_42.wav
+++ b/audio/pikachu_cries/pikachu_cry_42.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_5.wav b/audio/pikachu_cries/pikachu_cry_5.wav
index a2293acd..64959015 100644
--- a/audio/pikachu_cries/pikachu_cry_5.wav
+++ b/audio/pikachu_cries/pikachu_cry_5.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_6.wav b/audio/pikachu_cries/pikachu_cry_6.wav
index 814d7139..d91e2852 100644
--- a/audio/pikachu_cries/pikachu_cry_6.wav
+++ b/audio/pikachu_cries/pikachu_cry_6.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_7.wav b/audio/pikachu_cries/pikachu_cry_7.wav
index 6ffa781f..4b61cfc5 100644
--- a/audio/pikachu_cries/pikachu_cry_7.wav
+++ b/audio/pikachu_cries/pikachu_cry_7.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_8.wav b/audio/pikachu_cries/pikachu_cry_8.wav
index 04218660..20a4d345 100644
--- a/audio/pikachu_cries/pikachu_cry_8.wav
+++ b/audio/pikachu_cries/pikachu_cry_8.wav
Binary files differ
diff --git a/audio/pikachu_cries/pikachu_cry_9.wav b/audio/pikachu_cries/pikachu_cry_9.wav
index 484c92bc..1f4a8238 100644
--- a/audio/pikachu_cries/pikachu_cry_9.wav
+++ b/audio/pikachu_cries/pikachu_cry_9.wav
Binary files differ
diff --git a/tools/Makefile b/tools/Makefile
index 13bab1fb..f8dceb1a 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -1,9 +1,9 @@
.PHONY: all clean
CC := gcc
-CFLAGS := -O3 -std=c99 -Wall -Wextra
+CFLAGS := -O3 -std=c99 -Wall -Wextra -pedantic
-tools := scan_includes gfx pkmncompress
+tools := scan_includes gfx pkmncompress pcm
all: $(tools)
@:
diff --git a/tools/pcm.c b/tools/pcm.c
new file mode 100644
index 00000000..a14e291d
--- /dev/null
+++ b/tools/pcm.c
@@ -0,0 +1,160 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+#define CHUNKID(b1, b2, b3, b4) \
+ (uint32_t)((uint32_t)(b1) | ((uint32_t)(b2) << 8) | \
+ ((uint32_t)(b3) << 16) | ((uint32_t)(b4) << 24))
+
+size_t file_size(FILE *f) {
+ if (fseek(f, 0, SEEK_END) == -1) return 0;
+ long f_size = ftell(f);
+ if (f_size == -1) return 0;
+ if (fseek(f, 0, SEEK_SET) == -1) return 0;
+ return (size_t)f_size;
+}
+
+int32_t get_uint16le(uint8_t *data, size_t size, size_t i) {
+ return i + 2 >= size ? -1 :
+ (int32_t)data[i] | ((int32_t)data[i+1] << 8);
+}
+
+int64_t get_uint32le(uint8_t *data, size_t size, size_t i) {
+ return i + 4 >= size ? -1 :
+ (int64_t)data[i] | ((int64_t)data[i+1] << 8) |
+ ((int64_t)data[i+2] << 16) | ((int64_t)data[i+3] << 24);
+}
+
+uint8_t *wav2pcm(uint8_t *wavdata, size_t wavsize, size_t *pcmsize) {
+ int64_t fourcc = get_uint32le(wavdata, wavsize, 0);
+ if (fourcc != CHUNKID('R', 'I', 'F', 'F')) {
+ fputs("WAV file does not start with 'RIFF'\n", stderr);
+ return NULL;
+ }
+
+ int64_t waveid = get_uint32le(wavdata, wavsize, 8);
+ if (waveid != CHUNKID('W', 'A', 'V', 'E')) {
+ fputs("RIFF chunk does not start with 'WAVE'\n", stderr);
+ return NULL;
+ }
+
+ size_t sample_offset = 0;
+ int64_t num_samples = 0;
+
+ size_t riffsize = (size_t)get_uint32le(wavdata, wavsize, 4) + 8;
+ for (size_t i = 12; i < riffsize;) {
+ int64_t chunkid = get_uint32le(wavdata, wavsize, i);
+ int64_t chunksize = get_uint32le(wavdata, wavsize, i+4);
+ i += 8;
+ if (chunksize == -1) {
+ fputs("failed to read sub-chunk size\n", stderr);
+ return NULL;
+ }
+
+ // require 22050 Hz 8-bit PCM WAV audio
+ if (chunkid == CHUNKID('f', 'm', 't', ' ')) {
+ int32_t audio_format = get_uint16le(wavdata, wavsize, i);
+ if (audio_format != 1) {
+ fputs("WAV data is not PCM format\n", stderr);
+ return NULL;
+ }
+ int32_t num_channels = get_uint16le(wavdata, wavsize, i+2);
+ if (num_channels != 1) {
+ fputs("WAV data is not mono\n", stderr);
+ return NULL;
+ }
+ int64_t sample_rate = get_uint32le(wavdata, wavsize, i+4);
+ if (sample_rate != 22050) {
+ fputs("WAV data is not 22050 Hz\n", stderr);
+ return NULL;
+ }
+ int32_t bits_per_sample = get_uint16le(wavdata, wavsize, i+14);
+ if (bits_per_sample != 8) {
+ fputs("WAV data is not 8-bit\n", stderr);
+ return NULL;
+ }
+ }
+
+ else if (chunkid == CHUNKID('d', 'a', 't', 'a')) {
+ sample_offset = i;
+ num_samples = chunksize;
+ break;
+ }
+
+ i += (size_t)chunksize;
+ }
+
+ if (!num_samples) {
+ fputs("WAV data has no PCM samples\n", stderr);
+ return NULL;
+ }
+
+ // pack 8 WAV samples per PCM byte, clamping each to 0 or 1
+ *pcmsize = (size_t)((num_samples + 7) / 8);
+ uint8_t *pcmdata = malloc(*pcmsize);
+ for (int64_t i = 0; i < num_samples; i += 8) {
+ uint8_t v = 0;
+ for (int64_t j = 0; j < 8 && i + j < num_samples; j++) {
+ v |= (wavdata[sample_offset + i + j] > 0x80) << (7 - j);
+ }
+ pcmdata[i / 8] = v;
+ }
+
+ return pcmdata;
+}
+
+int main(int argc, char *argv[]) {
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s infile.wav outfile.pcm\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ char *wavname = argv[1];
+ char *pcmname = argv[2];
+
+ FILE *wavfile = fopen(wavname, "rb");
+ if (!wavfile) {
+ fprintf(stderr, "failed to open for reading: '%s'\n", wavname);
+ return EXIT_FAILURE;
+ }
+
+ size_t wavsize = file_size(wavfile);
+ if (!wavsize) {
+ fclose(wavfile);
+ fprintf(stderr, "failed to get file size: '%s'\n", wavname);
+ return EXIT_FAILURE;
+ }
+
+ uint8_t *wavdata = malloc(wavsize);
+ size_t readsize = fread(wavdata, 1, wavsize, wavfile);
+ fclose(wavfile);
+ if (readsize != wavsize) {
+ fprintf(stderr, "failed to read: '%s'\n", wavname);
+ return EXIT_FAILURE;
+ }
+
+ size_t pcmsize;
+ uint8_t *pcmdata = wav2pcm(wavdata, wavsize, &pcmsize);
+ free(wavdata);
+ if (!pcmdata) {
+ fprintf(stderr, "failed to convert: '%s'\n", wavname);
+ return EXIT_FAILURE;
+ }
+
+ FILE *pcmfile = fopen(pcmname, "wb");
+ if (!pcmfile) {
+ fprintf(stderr, "failed to open for writing: '%s'\n", pcmname);
+ return EXIT_FAILURE;
+ }
+
+ size_t writesize = fwrite(pcmdata, 1, pcmsize, pcmfile);
+ free(pcmdata);
+ fclose(pcmfile);
+ if (writesize != pcmsize) {
+ fprintf(stderr, "failed to write: '%s'\n", pcmname);
+ return EXIT_FAILURE;
+ }
+
+ return EXIT_SUCCESS;
+}