Repository: DeerTears/GB-Studio-Community-Assets Branch: master Commit: 7583b5a4235f Files: 113 Total size: 71.7 KB Directory structure: gitextract_xbofjviu/ ├── .gitattributes ├── .gitignore ├── Backgrounds/ │ └── README.md ├── COMMUNITY_LINKS.md ├── CONTRIBUTING.md ├── Engine/ │ └── GBT Player Banks/ │ ├── Ember Triangle.s │ └── README.md ├── Fonts/ │ └── README.md ├── LICENSE ├── Music/ │ ├── Action/ │ │ ├── Boss fight1.mod │ │ ├── Boss fight2.mod │ │ ├── Compression.mod │ │ ├── Dancing and Infiltrating.mod │ │ ├── Free OST 1 - Backstreets.mod │ │ ├── Free OST 1 - Fighting.mod │ │ ├── Joyous Takeoff.mod │ │ ├── Monty's Overheating Spaceship.mod │ │ ├── Serious Ping Pong Matches.mod │ │ ├── Sneaking Around.mod │ │ ├── Sugar Craze.mod │ │ ├── Tape It Together.mod │ │ └── Tense Boss Battle.mod │ ├── Drumbeats/ │ │ ├── Backbeat Metal Drumming.mod │ │ ├── Boots Cats.mod │ │ ├── Breakbeat with Hats.mod │ │ ├── Duck Tales Drumbeat.mod │ │ ├── Halftime Metal Drumming.mod │ │ ├── Kick Kick Kick Crash.mod │ │ ├── Kick Kick Snare.mod │ │ ├── Kick Stutter.mod │ │ ├── Messy 90s Uptempo Hiphop.mod │ │ ├── Supa-Hip Breakbeat.mod │ │ └── Upbeat Metal Drumming.mod │ ├── Exploration/ │ │ ├── Determined.mod │ │ ├── Peppy Pop Song.mod │ │ ├── Scrolling Text.mod │ │ └── Twilight Drive.mod │ ├── Jingles/ │ │ ├── Awkward Death.mod │ │ ├── Battle Encounter.mod │ │ ├── Battle Motif.mod │ │ ├── Excited Suspense.mod │ │ ├── Falling Asleep.mod │ │ ├── Nursery Rhyme with pauses.mod │ │ ├── Out of Energy Game Over.mod │ │ ├── Pitfall Death.mod │ │ ├── Radical Intro.mod │ │ ├── Radical Victory.mod │ │ ├── Rascal's Ditty.mod │ │ ├── Short Lullaby with Key Modulation.mod │ │ ├── Short SML2-Style Jingle.mod │ │ ├── Silly Death.mod │ │ ├── Slow death.mod │ │ ├── Swing into Victory.mod │ │ ├── The Sad Truth.mod │ │ ├── Victory Fanfare.mod │ │ └── Victory Lap.mod │ ├── Menu Themes/ │ │ ├── Free OST 1 - Character Select.mod │ │ ├── Free OST 1 - Ending Theme.mod │ │ ├── Free OST 1 - Fanfare.mod │ │ └── MBR Settings.mod │ ├── National Anthems/ │ │ ├── France Intro.mod │ │ ├── Germany Intro.mod │ │ ├── Italy Intro.mod │ │ ├── United Kingdom Intro.mod │ │ └── United States of America Intro.mod │ ├── Overworld/ │ │ ├── Darkstone.mod │ │ ├── Darkstone_Remix.mod │ │ ├── FridgeMusic.mod │ │ ├── Great Melody 01.mod │ │ ├── Great Melody02.mod │ │ ├── In the Town.mod │ │ ├── Little Tune 11.mod │ │ ├── ParkMusic.mod │ │ ├── Peppy Regal Overworld.mod │ │ ├── The Gang's All Here.mod │ │ ├── Villains of Hiphop.mod │ │ └── my_streets2.mod │ ├── Readme.md │ ├── SFX/ │ │ ├── Alarm Clock.mod │ │ ├── Alarm System.mod │ │ ├── Clock.mod │ │ ├── Clock2.mod │ │ ├── EuroCop.mod │ │ ├── Explosion1.mod │ │ ├── Missile Alert.mod │ │ ├── Nokia Tune.mod │ │ ├── Phone Ring.mod │ │ ├── Pickup_Coin.mod │ │ ├── Powerup.mod │ │ ├── Powerup2.mod │ │ ├── Powerup3.mod │ │ ├── Readme.md │ │ ├── Squeal Door.mod │ │ ├── Vibration Alarm.mod │ │ ├── fast wind gust.mod │ │ ├── harsh wind gust.mod │ │ ├── menu no thanks.mod │ │ ├── nuh-uh.mod │ │ ├── odd open inventory.mod │ │ ├── old telephone 1.mod │ │ ├── racecar zoom.mod │ │ └── smb3okay.mod │ └── Spooky/ │ ├── Detective Intro.mod │ └── Short Hauntings.mod ├── README.md ├── Scripts/ │ └── Camera/ │ ├── Screenscroll/ │ │ ├── screenscroll_scene_init.txt │ │ └── screenscroll_trigger.txt │ └── break camera from player.txt ├── Sprites/ │ ├── Animated/ │ │ └── README.md │ └── Static/ │ ├── Cats/ │ │ └── README.md │ └── README.md ├── Tilesets/ │ └── Credits.md └── UI/ └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # GitHub Language Detection *.gbsproj linguist-language=JSON # Normalize Line Endings to LineFeed *.md text=auto *.text text=auto *.txt text=auto *.xml text=auto LICENSE text=auto # LFS *.7z filter=lfs diff=lfs merge=lfs -text *.apk filter=lfs diff=lfs merge=lfs -text *.app filter=lfs diff=lfs merge=lfs -text *.dll filter=lfs diff=lfs merge=lfs -text *.docx filter=lfs diff=lfs merge=lfs -text *.exe filter=lfs diff=lfs merge=lfs -text *.mod filter=lfs diff=lfs merge=lfs -text *.mp3 filter=lfs diff=lfs merge=lfs -text *.ogg filter=lfs diff=lfs merge=lfs -text *.otf filter=lfs diff=lfs merge=lfs -text *.pages filter=lfs diff=lfs merge=lfs -text *.rar filter=lfs diff=lfs merge=lfs -text *.svg filter=lfs diff=lfs merge=lfs -text *.ttf filter=lfs diff=lfs merge=lfs -text *.wav filter=lfs diff=lfs merge=lfs -text *.xnb filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text ================================================ FILE: .gitignore ================================================ [Bb]uild/ *.bak ~* ================================================ FILE: Backgrounds/README.md ================================================ # Credits: **Chris Maltby:** - `stars.png` **Ember/DeerTears:** - `big_checkers.png` **GumpyFunction:** - `Cabin(Exterior).png` - `Cabin(Interior).png` - `Forest (day).png` - `Forest (night).png` ================================================ FILE: COMMUNITY_LINKS.md ================================================ # Community Links None of these links are endorsed officially by GB Studio or Chris Maltby. Not all of the contents following these links are usable under the MIT licence. Refer to each page for licence details. As always with the internet, enter at your own risk. ## Free Software Name | Author | Use | Website | From GB Community ---- | ------ | --- | ------- | ------ GylphBoy Swap | sododev | Hacks non-Latin Glyphs into GBS | https://sododev.itch.io/glyphboyswap | Yes Gameboy Sprite Exporter | momeka | Counts and Manages Unique 8x8 Background Tiles | https://momeka.itch.io/gameboy-tools | Yes RotSprite | Xenowhirl | Rotates pixel art | http://info.sonicretro.org/RotSprite | No Ft2Mod | James Park | Converts Famitracker text export into OpenMPT paste data | https://gb.jamespark.ninja/ft2mod/ | Yes MaxBgCalc | James Park | Calculates X or Y image dimensions to help you maximize your background size | https://gb.jamespark.ninja/maxbgcalc/ | Yes GbBgTxt | James Park | Generates images with text using your GB Studio font assets | https://gb.jamespark.ninja/gbbgtxt/ | Yes MIDI2MOD | James Park | Convert MIDI files to .mod compatible tracker output you can copy and paste! | https://gb.jamespark.ninja/midi2mod/ | Yes 2BitCharactersGenerator | 0x72 | Generate (human) Sprites for GBC with multiple Frames from slider-inputs (CC0 Licence) | https://0x72.itch.io/2bitcharactergenerator | ? ## Project Templates Name | Author | Latest Compatible Version | Link ---- | ------ | -------------- | ---- Actor Switching | digthezig | 1.1.0 | https://digthezig.itch.io/switching 3D Maze | jojoruteon | 1.2.1 | https://jojoruteon.itch.io/3dmaze-gbstudio Battle System | manugamesdev | 1.1.0 | https://manugamesdev.itch.io/battle-system Dungeon Crawler Template | TOXWORKS | 1.2.0 | https://toxworks.itch.io/dungeon-crawler-in-gb Real Time Combat | manugamesdev | 1.1.0 | https://manugamesdev.itch.io/real-time-combat Menu/Inventory System | TOXWORKS | 1.1.0 | https://toxworks.itch.io/menu-system-in-gb Portal Gun System for GB Studio | TOXWORKS | 1.2.0 | https://toxworks.itch.io/portal-gun-system-in-gb Sododev Text Input | SodoDev | 2.0.0 | https://sododev.itch.io/sododev-text-input Text Input | TOXWORKS | 1.1.0 | https://toxworks.itch.io/text-input-system-in-gb Text Entry Template | Setsune Wave | 2.0.0 | https://setsune.itch.io/textinputgbs2 Jumping for Other Actors (Platformer) | Bumbiss | 2.0.0 | https://bumbiss.itch.io/jumping-for-actors-in-gb-studio ## Free Asset Packs Name | Author | Contains | Link ---- | ------ | ---- | ---- Retro Horror Asset Pack | catladycreates | Animated Actors, Tilesets, Tiled Working File | https://catladycreates.itch.io/horror-assest-gb-studio GB Studio Fence Tiles | cobgoblin | Tilesets | https://cobgoblin.itch.io/gbfences Gio Ex's GB studio Resource Pack | Gio-Ex | UI Elements, Background, Actor, | https://gio-ex.itch.io/gb-studio-resource-pack Where's Naldo + Extra | moshuo | Tileset | https://moshuo.itch.io/gbstudio-sprites GB Studio Tiles - Woodland | pixelmech | Tilemap, Tiled Working File | https://pixelmech.itch.io/gb-studio-tiles sprite-pack-1 | pollorenzo | Animated Actors, UI Elements | https://pollorenzo.itch.io/sprite-pack-1 Fairy Fountain.mod | Skittles | Free song | https://cdn.discordapp.com/attachments/554713715942096916/864917924707696640/Fairy_Fountain_by_Skittles.mod GB Studio Sprites 16x16 | rekkimaru | Actors | https://rekkimaru.itch.io/gb-studio-sprites-16x16 GB Studio Dungeon Tileset | rekkimaru | Tilemap, Actors, Tiled Working File | https://rekkimaru.itch.io/gb-studio-dungeon-tileset-8x8 DIALOG BOXES + MORE FOR GB STUDIO | wyatt199x | UI Elements, Default Font Alterations | https://wyatt199x.itch.io/dialog-boxes-more-for-gb-studio Route1 Song.mod | copperine | Free song | https://cdn.discordapp.com/attachments/570924885291827200/759130941532274708/route1.mod GB Studio Sprites | rustedparadigm | Animated Actors | https://rustedparadigm.itch.io/gbstudio-sprites GB Studio Tilesets | rustedparadigm | Tilesets | https://rustedparadigm.itch.io/gbstudio-tilesets GB Studio Spartan Templates | rustedparadigm | Spartan Working Files | https://rustedparadigm.itch.io/gbs-spartan-templates GameBoy Assets and Sprites | materialfuture | Outdoor foliage, rocks, Actor, Tileset | https://materialfuture.itch.io/gameboy-assets ## Free Fonts ### .ttf Name | Author | Licence | Link ---- | ------ | ------- | ---- Press Start 2P | CodeMan38 | [OFL](https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL) | https://fonts.google.com/specimen/Press+Start+2P#license ### .png Name | Author | Licence | Link ---- | ------ | ------- | ---- Fonts for GB Studio | jeremyoduber | none, see .zip Readme | https://jeremyoduber.itch.io/fonts-for-gb-studio ================================================ FILE: CONTRIBUTING.md ================================================ # How-To Contribute ## #1 Filenames Make sure the file you're adding has a unique and distinctive name. If you're using a common name ("cactus", "apple", "dance") put a number at the end of it so others may use the same name. **Good filename examples:** - "short_cactus_1.png" - "short_cactus_2.png" - "husky_howling.mod" - "wolf_howl_1.mod" - "jenna's_house.png" **Bad filename examples:** - "ascii.png" - "plant27.png" - "background2.png - "template.mod" - "mysong.mod" ## #2 Filetypes No working files (.psd, .ai, .pdn, .gimp, .etc). Please only add .png images and .mod music files if you're submitting assets to be used. Don't make anybody else have to do the file-conversion process! ## #3 The Github Process 1. Have a Github account with all your files ready to be added 2. Make a fork of this repository 3. Upload your own files to your own fork (using the appropriate folders too) 4. Edit the README.md of the folder that has your new files to include the following formatting: **Your Name:** ``Your file`` - And a little blurb describing it 5. Make a pull request across forks. Make sure the page is showing `[my repository] <== [your fork]` 6. If you'd like to be added to the contributors list so you can approve your own pull requests or approve others', just let me know in your pull request. I'm happy to have more people contribute often. ================================================ FILE: Engine/GBT Player Banks/Ember Triangle.s ================================================ ;------------------------------------------------------------------------------- ; ; GBT Player v2.2.0 ; ; SPDX-License-Identifier: MIT ; ; Copyright (c) 2009-2020, Antonio Niño Díaz ; ;------------------------------------------------------------------------------- .NR10 = 0xFF10 .NR11 = 0xFF11 .NR12 = 0xFF12 .NR13 = 0xFF13 .NR14 = 0xFF14 .NR21 = 0xFF16 .NR22 = 0xFF17 .NR23 = 0xFF18 .NR24 = 0xFF19 .NR30 = 0xFF1A .NR31 = 0xFF1B .NR32 = 0xFF1C .NR33 = 0xFF1D .NR34 = 0xFF1E .NR41 = 0xFF20 .NR42 = 0xFF21 .NR43 = 0xFF22 .NR44 = 0xFF23 .NR50 = 0xFF24 .NR51 = 0xFF25 .NR52 = 0xFF26 ;------------------------------------------------------------------------------- .area _CODE_1 ;------------------------------------------------------------------------------- gbt_wave: ; 8 sounds .DB 0xA5,0xD7,0xC9,0xE1,0xBC,0x9A,0x76,0x31,0x0C,0xBA,0xDE,0x60,0x1B,0xCA,0x03,0x93 ; random :P .DB 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11 ; ember triangle .DB 0xFD,0xEC,0xDB,0xCA,0xB9,0xA8,0x97,0x86,0x79,0x68,0x57,0x46,0x35,0x24,0x13,0x02 ; little up-downs .DB 0xDE,0xFE,0xDC,0xBA,0x9A,0xA9,0x87,0x77,0x88,0x87,0x65,0x56,0x54,0x32,0x10,0x12 .DB 0xAB,0xCD,0xEF,0xED,0xCB,0xA0,0x12,0x3E,0xDC,0xBA,0xBC,0xDE,0xFE,0xDC,0x32,0x10 ; triangular broken .DB 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00 ; triangular .DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; square 50% .DB 0x79,0xBC,0xDE,0xEF,0xFF,0xEE,0xDC,0xB9,0x75,0x43,0x21,0x10,0x00,0x11,0x23,0x45 ; sine ; gbt_noise: ; Moved to Mod2GBT for better note range & performance ; 7 bit, can adjust with pitch C D# F# A# C ;.DB 0x5F,0x4E,0x3E,0x2F,0x2E,0x2C,0x1F,0x0F ; 15 bit ;.DB 0x64,0x54,0x44,0x24,0x00 ;.DB 0x67,0x56,0x46 gbt_frequencies: .DW 44, 156, 262, 363, 457, 547, 631, 710, 786, 854, 923, 986 .DW 1046, 1102, 1155, 1205, 1253, 1297, 1339, 1379, 1417, 1452, 1486, 1517 .DW 1546, 1575, 1602, 1627, 1650, 1673, 1694, 1714, 1732, 1750, 1767, 1783 .DW 1798, 1812, 1825, 1837, 1849, 1860, 1871, 1881, 1890, 1899, 1907, 1915 .DW 1923, 1930, 1936, 1943, 1949, 1954, 1959, 1964, 1969, 1974, 1978, 1982 .DW 1985, 1988, 1992, 1995, 1998, 2001, 2004, 2006, 2009, 2011, 2013, 2015 ;------------------------------------------------------------------------------- _gbt_get_freq_from_index: ; a = index, bc = returned freq ld hl,#gbt_frequencies ld c,a ld b,#0 add hl,bc add hl,bc ld c,(hl) inc hl ld b,(hl) ret ;------------------------------------------------------------------------------- ;---------------------------------- Channel 1 ---------------------------------- ;------------------------------------------------------------------------------- gbt_channel_1_handle:: ; de = info ld a,(gbt_channels_enabled) and a,#0x01 jr nz,channel1_enabled$ ; Channel is disabled. Increment pointer as needed ld a,(de) inc de bit 7,a jr nz,ch1_more_bytes$ bit 6,a jr z,ch1_no_more_bytes_this_channel$ jr ch1_one_more_byte$ ch1_more_bytes$: ld a,(de) inc de bit 7,a jr z,ch1_no_more_bytes_this_channel$ ch1_one_more_byte$: inc de ch1_no_more_bytes_this_channel$: ret channel1_enabled$: ; Channel 1 is enabled ld a,(de) inc de bit 7,a jr nz,ch1_has_frequency$ ; Not frequency bit 6,a jr nz,ch1_instr_effects$ ; Set volume or NOP bit 5,a jr nz,ch1_just_set_volume$ ; NOP ret ch1_just_set_volume$: ; Set volume and a,#0x0F swap a ; Preserve envelope data ld b,a ; save byte ld a,(gbt_vol+0) and a,#0x0F ; mask envelope or a,b ld (gbt_vol+0),a jr refresh_channel1_regs_trig$ ch1_instr_effects$: ; Set instrument and effect ld b,a ; save byte and a,#0x30 sla a sla a ld (gbt_instr+0),a ; Instrument ld a,b ; restore byte and a,#0x0F ; a = effect call gbt_channel_1_set_effect and a,a ret z ; if 0, don't refresh registers jr refresh_channel1_regs_notrig$ ch1_has_frequency$: ; Has frequency and a,#0x7F ld (gbt_arpeggio_freq_index+0*3),a ; This destroys hl and a. Returns freq in bc call _gbt_get_freq_from_index ld a,c ld (gbt_freq+0*2+0),a ld a,b ld (gbt_freq+0*2+1),a ; Get frequency ld a,(de) inc de bit 7,a jr nz,ch1_freq_instr_and_effect$ ; Freq + Instr + Volume ld b,a ; save byte and a,#0x30 sla a sla a ld (gbt_instr+0),a ; Instrument ld a,b ; restore byte and a,#0x0F ; a = volume swap a ; Preserve envelope data ld b,a ; save byte ld a,(gbt_vol+0) and a,#0x0F ; mask envelope or a,b ld (gbt_vol+0),a jr refresh_channel1_regs_trig$ ch1_freq_instr_and_effect$: ; Freq + Instr + Effect ld b,a ; save byte and a,#0x30 sla a sla a ld (gbt_instr+0),a ; Instrument ld a,b ; restore byte and a,#0x0F ; a = effect call gbt_channel_1_set_effect ;jr refresh_channel1_regs_trig$ ; fall through! ; ----------------- refresh_channel1_regs_trig$: channel1_refresh_registers_trig: xor a,a ld (#.NR10),a ld a,(gbt_instr+0) ld (#.NR11),a ld a,(gbt_vol+0) ld (#.NR12),a ld a,(gbt_freq+0*2+0) ld (#.NR13),a ld a,(gbt_freq+0*2+1) or a,#0x80 ; start ld (#.NR14),a ret refresh_channel1_regs_notrig$: channel1_refresh_registers_notrig: xor a,a ld (#.NR10),a ld a,(gbt_instr+0) ld (#.NR11),a ld a,(gbt_freq+0*2+0) ld (#.NR13),a ld a,(gbt_freq+0*2+1) ld (#.NR14),a ret ; ------------------ channel1_update_effects: ; returns 1 in a if it is needed to update sound registers ; Cut note ; -------- ld a,(gbt_cut_note_tick+0) ld hl,#gbt_ticks_elapsed cp a,(hl) jp nz,ch1_dont_cut$ dec a ; a = 0xFF ld (gbt_cut_note_tick+0),a ; disable cut note xor a,a ; vol = 0 ld (#.NR12),a ld a,#0x80 ; start ld (#.NR14),a ch1_dont_cut$: ; Arpeggio or Sweep ; -------- ld a,(gbt_arpeggio_enabled+0) and a,a ret z ; a is 0, return 0 ; Check if Sweep or Arpeggio (4-5 cycles) and a,#1 jr z,gbt_ch1_sweep_run$ ; If enabled arpeggio, handle it ld a,(gbt_arpeggio_tick+0) and a,a jr nz,ch1_not_tick_0$ ; Tick 0 - Set original frequency ld a,(gbt_arpeggio_freq_index+0*3+0) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+0*2+0),a ld a,b ld (gbt_freq+0*2+1),a ; Set frequency ld a,#1 ld (gbt_arpeggio_tick+0),a ret ; ret 1 ch1_not_tick_0$: cp a,#1 jr nz,ch1_not_tick_1$ ; Tick 1 ld a,(gbt_arpeggio_freq_index+0*3+1) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+0*2+0),a ld a,b ld (gbt_freq+0*2+1),a ; Set frequency ld a,#2 ld (gbt_arpeggio_tick+0),a dec a ret ; ret 1 ch1_not_tick_1$: ; Tick 2 ld a,(gbt_arpeggio_freq_index+0*3+2) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+0*2+0),a ld a,b ld (gbt_freq+0*2+1),a ; Set frequency xor a,a ld (gbt_arpeggio_tick+0),a inc a ret ; ret 1 gbt_ch1_sweep_run$: ; PortA Pitch Sweep ; ----------- ld hl,#(gbt_freq+0*2+0) ld a,(gbt_sweep+0) bit 7,a ; bit 7, if nz, sweep up. jr z,gbt_ch1_sweep_up$ ; Sweep down - sub a,#0x80 ld b,a ld a,(hl) ; Get frequency small (gbt_freq+0*2+0) sub a,b ; subtract b from a ld (hl+),a ; Set frequency small (gbt_freq+0*2+0) ld a,#1 jr c,gbt_ch1_sweep_dec$ ret ; ret 1, update without trigger ; Sweep down -- gbt_ch1_sweep_dec$: dec (hl) ; DEC frequency large (gbt_freq+0*2+1) 3cy ld a,(hl) inc a ; find if decremented past 0 to exactly 255 ret nz ; ret/update unless 0 ld (hl-),a ; fix frequency large 0x0 ld (hl),a ; fix frequency small 0x0 ld (gbt_arpeggio_enabled+0),a ; disable sweep ret ; ret 0, no update ; Sweep up + gbt_ch1_sweep_up$: add a,(hl) ; add frequency small (gbt_freq+0*2+0) ld (hl+),a ; Set frequency small (gbt_freq+0*2+0) jr c,gbt_ch1_sweep_inc$ ld a,#1 ret ; ret 1, update without trigger ; Sweep up ++ gbt_ch1_sweep_inc$: inc (hl) ; inc frequency large (gbt_freq+0*2+1) 2cy ld a,(hl-) and a,#0x07 ; check if wrapped to 0x08 00001000 ret nz ; ret/update unless 0 ld (gbt_arpeggio_enabled+0),a ; disable sweep ld (#.NR12),a ; vol = 0 ld a,#0x80 ; start ld (#.NR14),a ret ; ret 0x80, update without trigger ; ----------------- ; returns a = 1 if needed to update registers, 0 if not gbt_channel_1_set_effect: ; a = effect, de = pointer to data. ld hl,#gbt_ch1_jump_table$ ld c,a ld b,#0 add hl,bc add hl,bc ld a,(hl+) ld h,(hl) ld l,a ld a,(de) ; load args inc de jp (hl) gbt_ch1_jump_table$: .DW gbt_ch1_pan$ .DW gbt_ch1_arpeggio$ .DW gbt_ch1_cut_note$ .DW gbt_ch1234_nop .DW gbt_ch1_sweep$ .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_jump_pattern .DW gbt_ch1234_jump_position .DW gbt_ch1234_speed .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1_NRx2_VolEnv$ gbt_ch1_pan$: and a,#0x11 ld (gbt_pan+0),a xor a,a ret ; ret 0 do not update registers, only NR51 at end. gbt_ch1_arpeggio$: ld b,a ; b = params ld hl,#gbt_arpeggio_freq_index+0*3 ld c,(hl) ; c = base index inc hl ld a,b swap a and a,#0x0F add a,c ld (hl+),a ; save first increment ld a,b and a,#0x0F add a,c ld (hl),a ; save second increment ld a,#1 ld (gbt_arpeggio_enabled+0),a ld (gbt_arpeggio_tick+0),a ret ; ret 1 gbt_ch1_cut_note$: ld (gbt_cut_note_tick+0),a xor a,a ; ret 0 ret gbt_ch1_NRx2_VolEnv$: ; Raw data into volume, VVVV APPP, bits 4-7 vol ld (gbt_vol+0),a ; bit 3 true = add, bits 0-2 wait period xor a,a ; ret 0 ; 0xF1 = max volume, sub 1 every 1 tick. ret ; 0x0A = min volume, add 1 every 2 ticks. gbt_ch1_sweep$: ld (gbt_sweep+0),a ld a,#2 ld (gbt_arpeggio_enabled+0),a xor a,a ; ret 0 ret ;------------------------------------------------------------------------------- ;---------------------------------- Channel 2 ---------------------------------- ;------------------------------------------------------------------------------- gbt_channel_2_handle:: ; de = info ld a,(gbt_channels_enabled) and a,#0x02 jr nz,channel2_enabled$ ; Channel is disabled. Increment pointer as needed ld a,(de) inc de bit 7,a jr nz,ch2_more_bytes$ bit 6,a jr z,ch2_no_more_bytes_this_channel$ jr ch2_one_more_byte$ ch2_more_bytes$: ld a,(de) inc de bit 7,a jr z,ch2_no_more_bytes_this_channel$ ch2_one_more_byte$: inc de ch2_no_more_bytes_this_channel$: ret channel2_enabled$: ; Channel 2 is enabled ld a,(de) inc de bit 7,a jr nz,ch2_has_frequency$ ; Not frequency bit 6,a jr nz,ch2_instr_effects$ ; Set volume or NOP bit 5,a jr nz,ch2_just_set_volume$ ; NOP ret ch2_just_set_volume$: ; Set volume and a,#0x0F swap a ; Preserve envelope data ld b,a ; save byte ld a,(gbt_vol+1) and a,#0x0F ; mask envelope or a,b ld (gbt_vol+1),a jr refresh_channel2_regs_trig$ ch2_instr_effects$: ; Set instrument and effect ld b,a ; save byte and a,#0x30 sla a sla a ld (gbt_instr+1),a ; Instrument ld a,b ; restore byte and a,#0x0F ; a = effect call gbt_channel_2_set_effect and a,a ret z ; if 0, don't refresh registers jr refresh_channel2_regs_notrig$ ch2_has_frequency$: ; Has frequency and a,#0x7F ld (gbt_arpeggio_freq_index+1*3),a ; This destroys hl and a. Returns freq in bc call _gbt_get_freq_from_index ld a,c ld (gbt_freq+1*2+0),a ld a,b ld (gbt_freq+1*2+1),a ; Get frequency ld a,(de) inc de bit 7,a jr nz,ch2_freq_instr_and_effect$ ; Freq + Instr + Volume ld b,a ; save byte and a,#0x30 sla a sla a ld (gbt_instr+1),a ; Instrument ld a,b ; restore byte and a,#0x0F ; a = volume swap a ; Preserve envelope data ld b,a ; save byte ld a,(gbt_vol+1) and a,#0x0F ; mask envelope or a,b ld (gbt_vol+1),a jr refresh_channel2_regs_trig$ ch2_freq_instr_and_effect$: ; Freq + Instr + Effect ld b,a ; save byte and a,#0x30 sla a sla a ld (gbt_instr+1),a ; Instrument ld a,b ; restore byte and a,#0x0F ; a = effect call gbt_channel_2_set_effect ;jr .refresh_channel2_regs_trig ; fall through! ; ----------------- refresh_channel2_regs_trig$: channel2_refresh_registers_trig: ld a,(gbt_instr+1) ld (#.NR21),a ld a,(gbt_vol+1) ld (#.NR22),a ld a,(gbt_freq+1*2+0) ld (#.NR23),a ld a,(gbt_freq+1*2+1) or a,#0x80 ; start ld (#.NR24),a ret refresh_channel2_regs_notrig$: channel2_refresh_registers_notrig: ld a,(gbt_instr+1) ld (#.NR21),a ld a,(gbt_freq+1*2+0) ld (#.NR23),a ld a,(gbt_freq+1*2+1) ld (#.NR24),a ret ; ------------------ channel2_update_effects: ; returns 1 in a if it is needed to update sound regs ; Cut note ; -------- ld a,(gbt_cut_note_tick+1) ld hl,#gbt_ticks_elapsed cp a,(hl) jp nz,ch2_dont_cut$ dec a ; a = 0xFF ld (gbt_cut_note_tick+1),a ; disable cut note xor a,a ; vol = 0 ld (#.NR22),a ld a,#0x80 ; start ld (#.NR24),a ch2_dont_cut$: ; Arpeggio or Sweep ; -------- ld a,(gbt_arpeggio_enabled+1) and a,a ret z ; a is 0, return 0 ; Check if Sweep or Arpeggio (5-6 cycles) and a,#1 jr z,gbt_ch2_sweep_run$ ; If enabled arpeggio, handle it ld a,(gbt_arpeggio_tick+1) and a,a jr nz,ch2_not_tick_0$ ; Tick 0 - Set original frequency ld a,(gbt_arpeggio_freq_index+1*3+0) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+1*2+0),a ld a,b ld (gbt_freq+1*2+1),a ; Set frequency ld a,#1 ld (gbt_arpeggio_tick+1),a ret ; ret 1 ch2_not_tick_0$: cp a,#1 jr nz,ch2_not_tick_1$ ; Tick 1 ld a,(gbt_arpeggio_freq_index+1*3+1) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+1*2+0),a ld a,b ld (gbt_freq+1*2+1),a ; Set frequency ld a,#2 ld (gbt_arpeggio_tick+1),a dec a ret ; ret 1 ch2_not_tick_1$: ; Tick 2 ld a,(gbt_arpeggio_freq_index+1*3+2) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+1*2+0),a ld a,b ld (gbt_freq+1*2+1),a ; Set frequency xor a,a ld (gbt_arpeggio_tick+1),a inc a ret ; ret 1 gbt_ch2_sweep_run$: ; PortA Pitch Sweep ; ----------- ld hl,#(gbt_freq+1*2+0) ld a,(gbt_sweep+1) bit 7,a ; bit 7, if nz, sweep up. jr z,gbt_ch2_sweep_up$ ; Sweep down - sub a,#0x80 ld b,a ld a,(hl) ; Get frequency small (gbt_freq+0*2+0) sub a,b ; subtract b from a ld (hl+),a ; Set frequency small (gbt_freq+0*2+0) ld a,#1 jr c,gbt_ch2_sweep_dec$ ret ; ret 1, update without trigger ; Sweep down -- gbt_ch2_sweep_dec$: dec (hl) ; DEC frequency large (gbt_freq+0*2+1) 3cy ld a,(hl) inc a ; find if decremented past 0 to exactly 255 ret nz ; ret/update unless 0 ld (hl-),a ; fix frequency large 0x0 ld (hl),a ; fix frequency small 0x0 ld (gbt_arpeggio_enabled+1),a ; disable sweep ret ; ret 0, no update ; Sweep up + gbt_ch2_sweep_up$: add a,(hl) ; add frequency small (gbt_freq+0*2+0) ld (hl+),a ; Set frequency small (gbt_freq+0*2+0) jr c,gbt_ch2_sweep_inc$ ld a,#1 ret ; ret 1, update without trigger ; Sweep up ++ gbt_ch2_sweep_inc$: inc (hl) ; inc frequency large (gbt_freq+0*2+1) 2cy ld a,(hl-) and a,#0x07 ; check if wrapped to 0x08 00001000 ret nz ; ret/update unless 0 ld (gbt_arpeggio_enabled+1),a ; disable sweep ld (#.NR22),a ; vol = 0 ld a,#0x80 ; start ld (#.NR24),a ret ; ret 0x80, update without trigger ; ----------------- ; returns a = 1 if needed to update registers, 0 if not gbt_channel_2_set_effect: ; a = effect, de = pointer to data ld hl,#gbt_ch2_jump_table$ ld c,a ld b,#0 add hl,bc add hl,bc ld a,(hl+) ld h,(hl) ld l,a ld a,(de) ; load args inc de jp (hl) gbt_ch2_jump_table$: .DW gbt_ch2_pan$ .DW gbt_ch2_arpeggio$ .DW gbt_ch2_cut_note$ .DW gbt_ch1234_nop .DW gbt_ch2_sweep$ .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_jump_pattern .DW gbt_ch1234_jump_position .DW gbt_ch1234_speed .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch2_NRx2_VolEnv$ gbt_ch2_pan$: and a,#0x22 ld (gbt_pan+1),a xor a,a ; ret 0 ret ; Should not update registers, only NR51 at end. gbt_ch2_arpeggio$: ld b,a ; b = params ld hl,#gbt_arpeggio_freq_index+1*3 ld c,(hl) ; c = base index inc hl ld a,b swap a and a,#0x0F add a,c ld (hl+),a ; save first increment ld a,b and a,#0x0F add a,c ld (hl),a ; save second increment ld a,#1 ld (gbt_arpeggio_enabled+1),a ld (gbt_arpeggio_tick+1),a ret ; ret 1 gbt_ch2_cut_note$: ld (gbt_cut_note_tick+1),a xor a,a ; ret 0 ret gbt_ch2_NRx2_VolEnv$: ; raw volumeEnv, VVVV APPP, bits 7-4 vol ld (gbt_vol+1),a ; bit 3 true = add, bits 2-0 wait period xor a,a ; ret 0 ; 0xF1 = max volume, sub 1 every 1 tick. ret ; 0x0A = min volume, add 1 every 2 ticks. gbt_ch2_sweep$: ld (gbt_sweep+1),a ld a,#2 ld (gbt_arpeggio_enabled+1),a xor a,a ; ret 0 ret ;------------------------------------------------------------------------------- ;---------------------------------- Channel 3 ---------------------------------- ;------------------------------------------------------------------------------- gbt_channel_3_handle:: ; de = info ld a,(gbt_channels_enabled) and a,#0x04 jr nz,channel3_enabled$ ; Channel is disabled. Increment pointer as needed ld a,(de) inc de bit 7,a jr nz,ch3_more_bytes$ bit 6,a jr z,ch3_no_more_bytes_this_channel$ jr ch3_one_more_byte$ ch3_more_bytes$: ld a,(de) inc de bit 7,a jr z,ch3_no_more_bytes_this_channel$ ch3_one_more_byte$: inc de ch3_no_more_bytes_this_channel$: ret channel3_enabled$: ; Channel 3 is enabled ld a,(de) inc de bit 7,a jr nz,ch3_has_frequency$ ; Not frequency bit 6,a jr nz,ch3_effects$ ; Set volume or NOP bit 5,a jr nz,ch3_just_set_volume$ ; NOP ret ch3_just_set_volume$: ; Set volume swap a ld (gbt_vol+2),a jr refresh_channel3_regs_trig$ ch3_effects$: ; Set effect and a,#0x0F ; a = effect call gbt_channel_3_set_effect and a,a ret z ; if 0, don't refresh registers jr refresh_channel3_regs_notrig$ ch3_has_frequency$: ; Has frequency and a,#0x7F ld (gbt_arpeggio_freq_index+2*3),a ; This destroys hl and a. Returns freq in bc call _gbt_get_freq_from_index ld a,c ld (gbt_freq+2*2+0),a ld a,b ld (gbt_freq+2*2+1),a ; Get frequency ld a,(de) inc de bit 7,a jr nz,ch3_freq_instr_and_effect$ ; Freq + Instr + Volume ld b,a ; save byte and a,#0x0F ld (gbt_instr+2),a ; Instrument ld a,b ; restore byte and a,#0x30 ; a = volume sla a ld (gbt_vol+2),a jr refresh_channel3_regs_trig$ ch3_freq_instr_and_effect$: ; Freq + Instr + Effect ld b,a ; save byte and a,#0x0F ld (gbt_instr+2),a ; Instrument ld a,b ; restore byte and a,#0x70 swap a ; a = effect (only 0-7 allowed here) call gbt_channel_3_set_effect ;jr .refresh_channel3_regs ; fall through! ; ----------------- refresh_channel3_regs_trig$: channel3_refresh_registers_trig: xor a,a ld (#.NR30),a ; disable ld a,(gbt_channel3_loaded_instrument) ld b,a ld a,(gbt_instr+2) cp a,b call nz,gbt_channel3_load_instrument ; a = instrument ld a,#0x80 ld (#.NR30),a ; enable xor a,a ld (#.NR31),a ld a,(gbt_vol+2) ld (#.NR32),a ld a,(gbt_freq+2*2+0) ld (#.NR33),a ld a,(gbt_freq+2*2+1) or a,#0x80 ; start ld (#.NR34),a ret refresh_channel3_regs_notrig$: ; Don't Restart Waveform! channel3_refresh_registers_notrig: ld a,(gbt_freq+2*2+0) ld (#.NR33),a ld a,(gbt_freq+2*2+1) ld (#.NR34),a ret ; ------------------ gbt_channel3_load_instrument: ld (gbt_channel3_loaded_instrument),a swap a ; a = a * 16 ld c,a ld b,#0 ld hl,#gbt_wave add hl,bc ld c,#0x30 ld b,#16 ch3_loop$: ld a,(hl+) ldh (c),a inc c dec b jr nz,ch3_loop$ ret ; ------------------ channel3_update_effects: ; returns 1 in a if it is needed to update sound regs ; Cut note ; -------- ld a,(gbt_cut_note_tick+2) ld hl,#gbt_ticks_elapsed cp a,(hl) jp nz,ch3_dont_cut$ dec a ; a = 0xFF ld (gbt_cut_note_tick+2),a ; disable cut note xor a,a ; vol = 0 ld (#.NR30),a ; disable ld (#.NR32),a ld a,#0x80 ; start ld (#.NR34),a ch3_dont_cut$: ; Arpeggio or Sweep ; -------- ld a,(gbt_arpeggio_enabled+2) and a,a ret z ; a is 0, return 0 ; Check if Sweep or Arpeggio (5-6 cycles) and a,#1 jp z,gbt_ch3_sweep_run$ ; If enabled arpeggio, handle it ld a,(gbt_arpeggio_tick+2) and a,a jr nz,ch3_not_tick_0$ ; Tick 0 - Set original frequency ld a,(gbt_arpeggio_freq_index+2*3+0) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+2*2+0),a ld a,b ld (gbt_freq+2*2+1),a ; Set frequency ld a,#1 ld (gbt_arpeggio_tick+2),a ret ; ret 1 ch3_not_tick_0$: cp a,#1 jr nz,ch3_not_tick_1$ ; Tick 1 ld a,(gbt_arpeggio_freq_index+2*3+1) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+2*2+0),a ld a,b ld (gbt_freq+2*2+1),a ; Set frequency ld a,#2 ld (gbt_arpeggio_tick+2),a dec a ret ; ret 1 ch3_not_tick_1$: ; Tick 2 ld a,(gbt_arpeggio_freq_index+2*3+2) call _gbt_get_freq_from_index ld a,c ld (gbt_freq+2*2+0),a ld a,b ld (gbt_freq+2*2+1),a ; Set frequency xor a,a ld (gbt_arpeggio_tick+2),a inc a ret ; ret 1 gbt_ch3_sweep_run$: ; PortA Pitch Sweep ; ----------- ld hl,#(gbt_freq+2*2+0) ld a,(gbt_sweep+2) bit 7,a ; bit 7, if nz, sweep up. jr z,gbt_ch3_sweep_up$ ; Sweep down - sub a,#0x80 ld b,a ld a,(hl) ; Get frequency small (gbt_freq+0*2+0) sub a,b ; subtract b from a ld (hl+),a ; Set frequency small (gbt_freq+0*2+0) ld a,#1 jr c,gbt_ch3_sweep_dec$ ret ; ret 1, update without trigger ; Sweep down -- gbt_ch3_sweep_dec$: dec (hl) ; DEC frequency large (gbt_freq+0*2+1) 3cy ld a,(hl) inc a ; find if decremented past 0 to exactly 255 ret nz ; ret/update unless 0 ld (hl-),a ; fix frequency large 0x0 ld (hl),a ; fix frequency small 0x0 ld (gbt_arpeggio_enabled+2),a ; disable sweep ret ; ret 0, no update ; Sweep up + gbt_ch3_sweep_up$: add a,(hl) ; add frequency small (gbt_freq+0*2+0) ld (hl+),a ; Set frequency small (gbt_freq+0*2+0) jr c,gbt_ch3_sweep_inc$ ld a,#1 ret ; ret 1, update without trigger ; Sweep up ++ gbt_ch3_sweep_inc$: inc (hl) ; inc frequency large (gbt_freq+0*2+1) 2cy ld a,(hl-) and a,#0x07 ; check if wrapped to 0x08 00001000 ret nz ; ret/update unless 0 ld (gbt_arpeggio_enabled+2),a ; disable sweep ld (#.NR32),a ; vol = 0 ld a,#0x80 ; start ld (#.NR34),a ret ; ret 1, update without trigger ; ----------------- ; returns a = 1 if needed to update registers, 0 if not gbt_channel_3_set_effect: ; a = effect, de = pointer to data ld hl,#gbt_ch3_jump_table$ ld c,a ld b,#0 add hl,bc add hl,bc ld a,(hl+) ld h,(hl) ld l,a ld a,(de) ; load args inc de jp (hl) gbt_ch3_jump_table$: .DW gbt_ch3_pan$ .DW gbt_ch3_arpeggio$ .DW gbt_ch3_cut_note$ .DW gbt_ch1234_nop .DW gbt_ch3_sweep$ .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_jump_pattern .DW gbt_ch1234_jump_position .DW gbt_ch1234_speed .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop gbt_ch3_pan$: and a,#0x44 ld (gbt_pan+2),a xor a,a ; ret 0 ret ; do not update registers, only NR51 at end. gbt_ch3_arpeggio$: ld b,a ; b = params ld hl,#gbt_arpeggio_freq_index+2*3 ld c,(hl) ; c = base index inc hl ld a,b swap a and a,#0x0F add a,c ld (hl+),a ; save first increment ld a,b and a,#0x0F add a,c ld (hl),a ; save second increment ld a,#1 ld (gbt_arpeggio_enabled+2),a ld (gbt_arpeggio_tick+2),a ret ; ret 1 gbt_ch3_cut_note$: ld (gbt_cut_note_tick+2),a xor a,a ; ret 0 ret gbt_ch3_sweep$: ld (gbt_sweep+2),a ld a,#2 ld (gbt_arpeggio_enabled+2),a xor a,a ; ret 0 ret ;------------------------------------------------------------------------------- ;---------------------------------- Channel 4 ---------------------------------- ;------------------------------------------------------------------------------- gbt_channel_4_handle:: ; de = info ld a,(gbt_channels_enabled) and a,#0x08 jr nz,channel4_enabled$ ; Channel is disabled. Increment pointer as needed ld a,(de) inc de bit 7,a jr nz,ch4_more_bytes$ bit 6,a jr z,ch4_no_more_bytes_this_channel$ jr ch4_one_more_byte$ ch4_more_bytes$: ld a,(de) inc de bit 7,a jr z,ch4_no_more_bytes_this_channel$ ch4_one_more_byte$: inc de ch4_no_more_bytes_this_channel$: ret channel4_enabled$: ; Channel 4 is enabled ld a,(de) inc de bit 7,a jr nz,ch4_has_instrument$ ; Not instrument bit 6,a jr nz,ch4_effects$ ; Set volume or NOP bit 5,a jr nz,ch4_just_set_volume$ ; NOP ret ch4_just_set_volume$: ; Set volume and a,#0x0F swap a ; Preserve envelope data ld b,a ; save byte ld a,(gbt_vol+3) and a,#0x0F ; mask envelope or a,b ld (gbt_vol+3),a jr refresh_channel4_regs$ ch4_effects$: ; Set effect and a,#0x0F ; a = effect call gbt_channel_4_set_effect and a,a ret z ; if 0, don't refresh registers jr refresh_channel4_regs$ ch4_has_instrument$: ; Has instrument raw frequency data and a,#0x7F ; mask out bit 7 ld b,a ld a,(de) ; load next byte inc de ld c,a rla and a,#0x80 ; Mask only bit 7 or a,b ; Append noise bit ld (gbt_instr+3),a ld a,c ; restore byte2 bit 7,a jr nz,ch4_instr_and_effect$ ; Instr + Volume and a,#0x0F ; a = volume swap a ; Preserve envelope data ld b,a ; save byte ld a,(gbt_vol+3) and a,#0x0F ; mask envelope or a,b ld (gbt_vol+3),a jr refresh_channel4_regs$ ch4_instr_and_effect$: ; Instr + Effect and a,#0x0F ; a = effect call gbt_channel_4_set_effect ;jr ch4_refresh_channel4_regs$ refresh_channel4_regs$: ; fall through! ; ----------------- channel4_refresh_registers: xor a,a ld (#.NR41),a ld a,(gbt_vol+3) ld (#.NR42),a ld a,(gbt_instr+3) ld (#.NR43),a ld a,#0x80 ; start ld (#.NR44),a ret ; ------------------ channel4_update_effects: ; returns 1 in a if it is needed to update sound regs ; Cut note ; -------- ld a,(gbt_cut_note_tick+3) ld hl,#gbt_ticks_elapsed cp a,(hl) jp nz,ch4_dont_cut$ dec a ; a = 0xFF ld (gbt_cut_note_tick+3),a ; disable cut note xor a,a ; vol = 0 ld (#.NR42),a ld a,#0x80 ; start ld (#.NR44),a ch4_dont_cut$: xor a,a ret ; a is 0, return ; ----------------- ; returns a = 1 if needed to update registers, 0 if not gbt_channel_4_set_effect: ; a = effect, de = pointer to data ld hl,#gbt_ch4_jump_table$ ld c,a ld b,#0 add hl,bc add hl,bc ld a,(hl+) ld h,(hl) ld l,a ld a,(de) ; load args inc de jp (hl) gbt_ch4_jump_table$: .DW gbt_ch4_pan$ .DW gbt_ch1234_nop ; gbt_ch4_arpeggio .DW gbt_ch4_cut_note$ .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_jump_pattern .DW gbt_ch1234_jump_position .DW gbt_ch1234_speed .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch1234_nop .DW gbt_ch4_NRx2_VolEnv$ gbt_ch4_pan$: and a,#0x88 ld (gbt_pan+3),a xor a,a ; ret 0 ret ; do not update registers, only NR51 at end. gbt_ch4_cut_note$: ld (gbt_cut_note_tick+3),a xor a,a ; ret 0 ret gbt_ch4_NRx2_VolEnv$: ; Raw data into volume, VVVV APPP, bits 4-7 vol ld (gbt_vol+3),a ; bit 3 true = add, bits 0-2 wait period xor a,a ; ret 0 ; 0xF1 = max volume, sub 1 every 1 tick. ret ; 0x0A = min volume, add 1 every 2 ticks. ;------------------------------------------------------------------------------- ; Common effects go here: gbt_ch1234_nop: xor a,a ;ret 0 ret gbt_ch1234_jump_pattern: ld (gbt_current_pattern),a xor a,a ld (gbt_current_step),a ld (gbt_have_to_stop_next_step),a ; clear stop flag ld a,#1 ld (gbt_update_pattern_pointers),a xor a,a ;ret 0 ret gbt_ch1234_jump_position: ld (gbt_current_step),a ld hl,#gbt_current_pattern inc (hl) ; Check to see if jump puts us past end of song ld a,(hl) call gbt_get_pattern_ptr_banked ld a,#1 ; tell gbt_player.s to do this next cycle ld (gbt_update_pattern_pointers),a xor a,a ;ret 0 ret gbt_ch1234_speed: ld (gbt_speed),a xor a,a ld (gbt_ticks_elapsed),a ret ;ret 0 ;------------------------------------------------------------------------------- gbt_update_bank1:: ld de,#gbt_temp_play_data ; each function will return in de the pointer to next byte call gbt_channel_1_handle call gbt_channel_2_handle call gbt_channel_3_handle call gbt_channel_4_handle ; end of channel handling ld hl,#gbt_pan ld a,(hl+) or a,(hl) inc hl or a,(hl) inc hl or a,(hl) ld (#.NR51),a ; handle panning... ret ;------------------------------------------------------------------------------- gbt_update_effects_bank1:: call channel1_update_effects and a,a call nz,channel1_refresh_registers_notrig call channel2_update_effects and a,a call nz,channel2_refresh_registers_notrig call channel3_update_effects and a,a call nz,channel3_refresh_registers_notrig call channel4_update_effects and a,a call nz,channel4_refresh_registers ret ;------------------------------------------------------------------------------- ================================================ FILE: Engine/GBT Player Banks/README.md ================================================ # Credits **Ember:** - `Ember Triangle.s` - The usual waveforms, but instrument 9 (Ringy) is replaced with a stuttery triangle wave that goes from 0hx to 8hx and back. I like low-fidelity triangle waves and this has been a long time coming. ## How to alter GBT Player Banks for Channel 3 [It is highly recomended you read the music documentation before continuing.](https://gbstudio.dev/docs/music) GBT Player can be compiled to use a different set of 8 pre-determined waveforms for Channel 3, compared to the defaults that are mentioned in the music docs. This lets you edit all 8 waveforms for Channel 3 on a per-game basis. These 8 waveforms can not be swapped-out during gameplay. After using Engine Eject (2.0.0 and above) the file `gbt_player_bank1.s` can be found inside of `assets/engine/src/core`. Lines 40 to 47 contain sets of nibbles that determine the waveform shape for each of Channel 3's instruments. Each line contains 32 nibbles joined together in groups of 2. Each nibble represents the amplitude of a sample from 0 to F. **Example:** ``` gbt_wave: ; unofficial edit .DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; square wave .DB 0x79,0xBC,0xDE,0xEF,0xFF,0xEE,0xDC,0xB9,0x75,0x43,0x21,0x10,0x00,0x11,0x23,0x45 ; sine wave .DB 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00 ; sawtooth .DB 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11 ; triangle .DB 0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,0x12,0x34,0x45,0x56,0x78,0x9A,0xBC,0xDE ; double-speed triangle ``` **Example**: 0xFF represents two samples of maximum amplitude. One set to `F` amplitude, the other set to `F` amplitude. **Example**: 0x00 represents two samples of minimum amplitude. One set to `0` amplitude, the other set to `0` amplitude. **Example**: 0x0F represents two samples of mixed amplitude. One set to `0` amplitude, the other set to `F` amplitude. So long as the formatting of the nibbles remain the same, their values can be changed to any 16-bit value to create waveforms other than the GBT Player defaults. Changing the in-game samples here will not update the samples in template.mod, so adjust these samples with this in mind. hUGETracker features a sample-drawing tool that shows the necessary nibbles to create your desired waveform. Here's a new waveform that can not be found in GBT Player by default: ``` gbt_wave: ; unofficial edit .DB 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11 ; triangle wave ``` Replacing one of the instruments with the above code will change the corrosponding instrument to your new waveform. ================================================ FILE: Fonts/README.md ================================================ # Credits: **TommysezSoWhat:** - `d20_ascii.png`: Modified character set to include a D20 outline and single-character representations of the numbers 10-20. **Chris Maltby:** - `default ascii.png`: The default character set that comes with GB Studio. **krümel:** - `Kirby's Adventure Ability Help` - `Love Story and Theremin` - `Multiboot Menu (GBA)` - `Trolls on Treasure Island` - `Zero Wing` **DigiDuncan:** - `hex.png`: A debugging tool to help you find the location of special characters on the sheet. - `Gothic`: A rough conversion of the MS Gothic font, with some liberties taken for the format. Also included, single characters for 10-20. **Anima/Animaloser/SodoDev:** - `modifiedfinalfantasylegends.png`: Modified Final Fantasy Legends font. - `thinrpg.png`: Thin font. For easy reading. **LoftyAu:** - `spongebob.png`: A Spongebob-esque GB font. **Paige Ashlynn:** - `DotGothic8.png`: A slim font adapted from Kokiabe/Fontworks Inc.'s DotGothic16. **KizulEmeraldfire** - `ascii_thick.png`: A bold font. (Dark characters on a light background.) - `ascii_thick_inverted.png`: A bold font. (Light characters on a dark background.) - `ascii_thick_italic.png`: A bold font, italicized... albeit rather lazily. (Dark characters on a light background.) - `ascii_thick_italic_inverted.png`: A bold font, italicized... albeit rather lazily. (Light characters on a dark background.) **MOL:** - `Commodore 64 ASCII.png`: A rip of the Commodore 64 ASCII files - `Commodore 64 ASCII - Dark.png`: A dark version of the Commodore 64 ASCII files **Santiago Crespo:** - `ACM-VGA.png`: A bold font, based on the [Chromatic Research MPACT 2 VGA BIOS font](https://int10h.org/oldschool-pc-fonts/fontlist/font?acm_vga_8x8) - `CompaqThin.png`: A thin font, based on a [custom DOS font made by Compaq](https://int10h.org/oldschool-pc-fonts/fontlist/font?compaqthin_8x8) ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2019 Ember Bland Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Music/Action/Boss fight1.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:d08be31164c5e73b962ba8c2748c6a5845701a3ca2f1457af2e67f3501cb0c1e size 82160 ================================================ FILE: Music/Action/Boss fight2.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:08e1f5c1b643b617fc309926403a47f55b0b6dffc5ef2b1f7faf0cc40f1c09e1 size 87280 ================================================ FILE: Music/Action/Compression.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:4946292612932fc1f11133d929fba0db564bb966f362620da468cf0607621a96 size 82160 ================================================ FILE: Music/Action/Dancing and Infiltrating.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:2a45a3981fdde41bbda055d1a07fdca811133d454b432d48fa5b5b0ea9cf3814 size 74992 ================================================ FILE: Music/Action/Free OST 1 - Backstreets.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:aa957d46f07436fade5d5be667c878fee3bc385ffa960c11450e3682ba4d5299 size 73968 ================================================ FILE: Music/Action/Free OST 1 - Fighting.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:602de66e3f12b49928a78c69a12b46fb67cd33c0f39eab723a0abd07117c2ffe size 74992 ================================================ FILE: Music/Action/Joyous Takeoff.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:74f5abd0476049851469c7c30e98cfa6d90e2694c0d944ba5dccda92cf66eebd size 81136 ================================================ FILE: Music/Action/Monty's Overheating Spaceship.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:051e0e766076ba29979abbeb9c912eaeedeeef91fbee7a4bfde4345ef89a5554 size 77040 ================================================ FILE: Music/Action/Serious Ping Pong Matches.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:e112bf2c026fc30ddd0f5183cbcf260d6eb33fbcd7ee58bbb984bf2f19fcc0df size 11516 ================================================ FILE: Music/Action/Sneaking Around.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:e2c180dcc8529aeb897641573c8fa458f7b242582ffc5ee2ad1d12c01cd82674 size 72944 ================================================ FILE: Music/Action/Sugar Craze.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:d1cde65c34a78307f4de76eb821c2a14f2133a95e94d0b499a3624343cd37f2f size 76016 ================================================ FILE: Music/Action/Tape It Together.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:d1eeb3b20e40b79d0c806caee62fdb95dae0acba1006d351dd407d2e928f5c9d size 7972 ================================================ FILE: Music/Action/Tense Boss Battle.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:1cdc33dc93acf05ad18274715e920b8d60be633464a215c52960c97affe18aa9 size 82160 ================================================ FILE: Music/Drumbeats/Backbeat Metal Drumming.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:208fec4efed2c5007b2514bd883d1d6a674ac3acedbb36f30f461cd5ba5c0dd4 size 69872 ================================================ FILE: Music/Drumbeats/Boots Cats.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:a66adaeaa731b8d4773ac4cd2d3c23ed30105bc6fdc7859a9df41161009ab816 size 69872 ================================================ FILE: Music/Drumbeats/Breakbeat with Hats.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:4b1f2f10a99a1fbc1736db8915dd9883cdc012a8c844f0367266981b4e178bb5 size 69872 ================================================ FILE: Music/Drumbeats/Duck Tales Drumbeat.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:540c17b8f0e7eba3dc3d2016d98dc093ec2b0bc01f2c80d27d09d7b735c2c23d size 69872 ================================================ FILE: Music/Drumbeats/Halftime Metal Drumming.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:661b29ffc2ed54f38246c3a03df8eddfe74ee0571afeb60fb59985ee1622ff09 size 69872 ================================================ FILE: Music/Drumbeats/Kick Kick Kick Crash.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:b591d788670ac9e33d2d58543e2df8f2b4b464e5d98a7f26451802c709abdb46 size 69872 ================================================ FILE: Music/Drumbeats/Kick Kick Snare.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:56da221f4ecbf702148b9741798735f38c9c5d37382e1d9b2e86c028fa28ec5b size 69872 ================================================ FILE: Music/Drumbeats/Kick Stutter.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:4903dd242fc19bf47b4c9417bda8047a015bcc68e82f7b89568f97cf434cfe62 size 69872 ================================================ FILE: Music/Drumbeats/Messy 90s Uptempo Hiphop.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:3325179be3cf95b572af4c10ab9754b5c99ce3aa7447bfb79fd613dbe74307b0 size 69872 ================================================ FILE: Music/Drumbeats/Supa-Hip Breakbeat.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:5345b47de34b4a75fb1505ac66bfbbf7b29d9775aa5221a59a73513a31e10c9e size 69872 ================================================ FILE: Music/Drumbeats/Upbeat Metal Drumming.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:b3ccf41358acc18b3a99e690bf6fc90ad76e0e4dfc93c50ec603ba41346afa88 size 69872 ================================================ FILE: Music/Exploration/Determined.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:f26dacec33a4598096d154603e656f2a42fe02f9a03102c6284d836c47bf2201 size 77040 ================================================ FILE: Music/Exploration/Peppy Pop Song.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:84cfe8cfcc9c0216b9038e8f40b2aad5b7d134a690fc6deb4356d241349bef01 size 82160 ================================================ FILE: Music/Exploration/Scrolling Text.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:6400445f903c756145157353c6b778edb8f7ce0209b5b7be45ef540fbca34650 size 79088 ================================================ FILE: Music/Exploration/Twilight Drive.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:98376c5ad78d15d70171127b150eace848789e2c32d9cfec3fb1b7a68f66e355 size 78064 ================================================ FILE: Music/Jingles/Awkward Death.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:ed8420034b62907d0e70e440ef333faddb700d80363a2ee5e974b836d13ab072 size 72944 ================================================ FILE: Music/Jingles/Battle Encounter.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:5966293203fab049a675e54dddf6271352e8e0123406f8e53c7b90134178fac7 size 69872 ================================================ FILE: Music/Jingles/Battle Motif.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:d402e1f6778804558cf315874160d7a66ffd73c35b25b2740fdb3a7687ee4b66 size 73968 ================================================ FILE: Music/Jingles/Excited Suspense.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:30cd67a56d592c1f33c9c6fc01e8bf780baeebba98e88f8a6c2f54f2aa333102 size 69872 ================================================ FILE: Music/Jingles/Falling Asleep.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:b106e161292cb638a0ff3425c10702f853f70f634eccf56aed2e2da6bb87567f size 69872 ================================================ FILE: Music/Jingles/Nursery Rhyme with pauses.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:c2c1b751150d6c842fca1c2a9ec465fa0d5f36f197eac4b6f72038fe7de10348 size 76016 ================================================ FILE: Music/Jingles/Out of Energy Game Over.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:a1e197301d636c2dc60a2978ad2d0af394c3f98770bad84dff12cbe52289b03d size 69872 ================================================ FILE: Music/Jingles/Pitfall Death.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:1deeac81f9f6993701f47bce3105b79277f051fa7f602d19fb7e34909f29a911 size 69872 ================================================ FILE: Music/Jingles/Radical Intro.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:4c7830fd24e04e46361da7fbda92d579ab17d5a506ffa4e14ed849c1bbdd73ec size 70896 ================================================ FILE: Music/Jingles/Radical Victory.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:02b2b7b91feeab55bed9874bfbc2bac68683c60da03583a090f9bc187fc605ff size 69872 ================================================ FILE: Music/Jingles/Rascal's Ditty.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:104dce932a6e236b5ec0b9f12f03b4945aab41dbc3b472260b70ab28cbde7e7e size 78064 ================================================ FILE: Music/Jingles/Short Lullaby with Key Modulation.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:3fc87c55c261dd7aa73bb64f43244b27aa2a9f78d40c4e06d7f80378a03679ca size 74992 ================================================ FILE: Music/Jingles/Short SML2-Style Jingle.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:c0b75ff5210183100f120bee790daf31ff7651b5b3b35318afe37a332addb0b3 size 70896 ================================================ FILE: Music/Jingles/Silly Death.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:3ce62c85756300125faa2d19dfa2c3e7c9dc2114d0e8dccf1fb7f598ef0e81f9 size 69872 ================================================ FILE: Music/Jingles/Slow death.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:02790e392331c5ffa6543c8ed788688a525c13641974c2a6d4f36d51e3d6d539 size 69872 ================================================ FILE: Music/Jingles/Swing into Victory.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:cfe6f756382e9ccc4caea6a59cf74a168bb62b39f0a9b7e2a89f6b6b4120c09d size 69872 ================================================ FILE: Music/Jingles/The Sad Truth.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:eb6be515ddbb38cabea188f0b49bd4b3c885eacad93a2ad788393777622b17c1 size 69872 ================================================ FILE: Music/Jingles/Victory Fanfare.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:8b31e90949094b57e97e7e4acb135b1bf9807fb07fc6132ff322a1e975591f5e size 69872 ================================================ FILE: Music/Jingles/Victory Lap.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:1e9a3f4930c1a476fce7ad864e71c5bb259b57bf5e2956f20f30a217efe97b56 size 71920 ================================================ FILE: Music/Menu Themes/Free OST 1 - Character Select.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:f3a0482f6c0edb63faeddd02da9fe503729757bf06135640212ac38281deaa66 size 78064 ================================================ FILE: Music/Menu Themes/Free OST 1 - Ending Theme.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:e2b41e1f5123fcc569bf00cb52cfe8f66615f66b9529dea76669f46ef8ed6af8 size 82160 ================================================ FILE: Music/Menu Themes/Free OST 1 - Fanfare.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:8c6aecbf3c4ffb22aa9dd23d6cf10bcfac2bb8ecbccc0d86671a700e10e1a79f size 73968 ================================================ FILE: Music/Menu Themes/MBR Settings.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:7763cc258d2a7f4cfb32687377337e7cd295f9f15c52499fb66ce492bde2fbe9 size 5228 ================================================ FILE: Music/National Anthems/France Intro.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:987c556425958f9cc753e612b838a7c95327777310a8ac66ec5d2d910552609e size 70896 ================================================ FILE: Music/National Anthems/Germany Intro.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:3e2baf77e00ab2b44c206f4d7f88fc6cdccd370f50774032d2e23ff186598c93 size 70896 ================================================ FILE: Music/National Anthems/Italy Intro.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:ec975e00337901a37c19870139bbe266d2ad7ab146958ec6f43e163ea334710c size 70896 ================================================ FILE: Music/National Anthems/United Kingdom Intro.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:54aa56460895b352ab13bbdd521303ceff21697411305db3a20dc8d3d0b0855d size 70896 ================================================ FILE: Music/National Anthems/United States of America Intro.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:d3713cfead15af00bb61b3b007116658dc17791692a25f9a84cf567bc864f42e size 71920 ================================================ FILE: Music/Overworld/Darkstone.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:a0d14531ae6348ec2a149b2284ee970b9e4f428ad3ed0c23fd4d00faf0498779 size 7484 ================================================ FILE: Music/Overworld/Darkstone_Remix.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:a3266c7b9712faa744f978f8b4725475c9071b2869089abe968d6f02d4f07243 size 58378 ================================================ FILE: Music/Overworld/FridgeMusic.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:622038cad3ba4cff57321e3ce5593970b50867833c439e76a07ee14dc2f8b26b size 76016 ================================================ FILE: Music/Overworld/Great Melody 01.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:eba3f04324341bcec77bd029dde555d10da58984eab16276e508ecf0b0365275 size 84208 ================================================ FILE: Music/Overworld/Great Melody02.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:da0d6614a843de5a835bf408bdb8185093db5dfc34b788005106ecdb59662335 size 83184 ================================================ FILE: Music/Overworld/In the Town.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:969d06ba38461e7e62703cfe17efcd88b90c7e70d85739fedee2227c71e8d148 size 73968 ================================================ FILE: Music/Overworld/Little Tune 11.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:020edc3fb0ee71e0424eaf3f8b03bb98c51a0c56da9580c81bac18a5dbec06f3 size 76016 ================================================ FILE: Music/Overworld/ParkMusic.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:f46e1fa9f3f0702c675646d90b79cea5ec39b6a7d7b819ebbca91feed547809d size 79088 ================================================ FILE: Music/Overworld/Peppy Regal Overworld.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:8ff0a9ce1f59a43f6feeecd3e96be73e97b6a8c4953295356e11b694db2ff06c size 71920 ================================================ FILE: Music/Overworld/The Gang's All Here.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:0cf7ffe889b381600f64cc7d46c1dcd3792e3950e548fc06c51641e56fa8d848 size 6216 ================================================ FILE: Music/Overworld/Villains of Hiphop.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:9c1ff061cae4abd01a168a5a2d3e3b6d8d6b819d825706837c9ee1f25ede9402 size 88304 ================================================ FILE: Music/Overworld/my_streets2.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:837e48ac9257445609dbfad4ecd6be95c6e7ea6083d754f4f842fffff183b0c1 size 103394 ================================================ FILE: Music/Readme.md ================================================ Join the GB Studio discord to answer your music questions: https://discord.gg/2hYeJ4m Music Docs: https://www.gbstudio.dev/docs/music/ # Credits **krümel (crumb)#0723:** **Action** - Boss Fight 1: Fast, upbeat, hectic - Boss Fight 2: Cool, steady backbeat, tense - Boss Fight 3: Tense, collected - Sneaking Around: Short, low-key stealth tune - Free OST 1 Fighting - Free OST 1 Backstreets - Joyous Takeoff - Dancing and Infiltrating - Sugar Craze - Monty's Overheating Spaceship **Cutscenes** - Detective Intro - short silence at start (Little Tune 3) - Peppy Pop Song - length of 1:24, doesn't loop (Ending1) - Determined - Twilight Drive - Free OST 1 Fanfare - Free OST 1 Ending Theme **Menu Themes** - Free OST 1 Character Select **Overworld** - Peppy Regal Overworld - Great Melody01 - Great Melody02 - Little Tune 11 - In the Town - Villains of Hiphop **Jingles** - Awkward Death - Battle Encounter - Battle Motif - Excited Suspense - Falling Asleep - Game Over Loop - Nursery Rhyme with pauses - Out of Energy Game Over - Pitfall Death - Radical Intro - Radical Victory - Short Lullaby with Key Modulation - Short SML2-Style Jingle - Silly Death - Slow death - Swing into Victory - The Sad Truth - Victory Fanfare - Victory Lap - Rascal's Ditty **Drumbeats** - Messy 90s Uptempo Hiphop - Kick Kick Snare - Backbeat Metal Drumming - Boots Cats - Duck Tales Drumbeat - Kick Kick Kick Crash - Halftime Metal Drumming - Supa-Hip Breakbeat - Backbeat with Hats - Upbeat Metal Drumming - Kick Stutter **National Anthems** - France Intro - Opening 4 bars of France's national anthem - Germany Intro - Opening 4 bars of Germany's national anthem - Italy Intro - Opening 4 bars of Italy's national anthem - United Kingdom Intro - Opening 4 bars of UK's national anthem - United States Intro - Opening 8 bars of US's national anthem **SFX** - Alarm Clock - Alarm System - Clock - Clock2 - EuroCop - Explosion1 - Missle Alert - Nokia Tune - Phone Ring - Pickup_Coin - Powerup - Powerup2 - Powerup3 - Squeal Door - Vibration Alarm **Ember#1765 / DeerTears:** **Action** - Compression - A drum-heavy hiphop song played a little too fast. - Tape It Together - Dungeon Spelunking Music - Serious Ping Pong Matches **Cutscenes** - Scrolling Text - 6/8 Fanfare with a chorus in 11/8 - Short Hauntings **Menu Themes** - MBR Settings **SFX** - fast wind gust - harsh wind gust - menu no thanks - nuh-uh - odd open inventory - old telephone 1 - racecar zoom - smb3okay **Overworld** - Darkstone - Delay-heavy song for caves, featured in the game 6rooms - The Gang's All Here - The intro part is out of key but it's otherwise a lighthearted song for walking in the park **Tomas Danko:** http://www.danko.se/ Shared under the Attribution 4.0 CC Licence. - FridgeMusic - Slow, unsteady but relaxed - Park Music - Upbeat version of Fridgemusic, very catchy **Tronimal:** **Overworld** - Darkstone Remix **Galaxy Stargraph** - my_streets2 ================================================ FILE: Music/SFX/Alarm Clock.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:d7b9c2ff93fc3140d6c8a5ddbc47493cbb638e7a174634f11e759265b4537464 size 69872 ================================================ FILE: Music/SFX/Alarm System.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:341f1fdbf494b7f9dd39b62794de76d51b0cff2d61f4b5ef6ebe0c6cac71be45 size 69872 ================================================ FILE: Music/SFX/Clock.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:47db62062bb71672a51561b0523b050876d4de4964eab8dc289e59c608deb8dc size 69872 ================================================ FILE: Music/SFX/Clock2.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:653657a3a310ccf70450d2d323515bd2bb169945367d6261725d7304593f6eb3 size 69872 ================================================ FILE: Music/SFX/EuroCop.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:91576f9b456b13603d1273338769c79057047e69ab2183ee7532f2f51e240fe0 size 69872 ================================================ FILE: Music/SFX/Explosion1.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:ac40143e72394a35884c4a75013486224929ac5008485a8fcf58ff88101e3d18 size 69872 ================================================ FILE: Music/SFX/Missile Alert.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:fef8f5711ca42227a978326286f9de4eb8f2c5aafb4948bfde50cffe9052620d size 69872 ================================================ FILE: Music/SFX/Nokia Tune.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:213e50140d44f15df061ff3e1339dda47b174fb14dbdb3ee7038b7f2caeb63dd size 69872 ================================================ FILE: Music/SFX/Phone Ring.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:cb4437bab8516f117ab9eb15f272365c9022a80519b56bcc02409a56a40222c0 size 69872 ================================================ FILE: Music/SFX/Pickup_Coin.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:66e9ba04e07cb213c13de64308250307fad66a81377378a9be705ddf3ed1d462 size 69872 ================================================ FILE: Music/SFX/Powerup.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:9b121820b8baea095891d73ebd120c9c0ed3cd320b5d77f84da9606e1f3f912b size 69872 ================================================ FILE: Music/SFX/Powerup2.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:1544d2cf096a2be91c3461a8b8c6679cda9e5a84bbfc235631d2906d9d0d018a size 69872 ================================================ FILE: Music/SFX/Powerup3.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:82eb90a77965a583a13dfe468de39f6be966bcf8aec9877cb5173c760df7047f size 69872 ================================================ FILE: Music/SFX/Readme.md ================================================ # Credits: **Ember#1765 / DeerTears:** - fast wind gust.mod - harsh wind gust.mod - menu no thanks.mod - nuh-uh.mod - odd open inventory.mod - old telephone 1.mod - racecar zoom.mod - smb3okay.mod ================================================ FILE: Music/SFX/Squeal Door.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:d642d01bde056b9dde96f2db0892c870367143a973b77aaede4da5aad0d62598 size 69872 ================================================ FILE: Music/SFX/Vibration Alarm.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:273b092cb200ef7db676ee1201fe51cc4784688bdeacbf0f4b1862749b188a0c size 69872 ================================================ FILE: Music/SFX/fast wind gust.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:2564a4027e797db9e137d9652b5176f0fe7a62d52050e62f34fa79128d6f6604 size 69872 ================================================ FILE: Music/SFX/harsh wind gust.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:7a675746f33b888ffe2e0a2ff14b263e9024ae799d582c6b8b9ddbf7fbc43f11 size 69872 ================================================ FILE: Music/SFX/menu no thanks.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:3ad05a0df0f623b6c010df4ee88ded0ef45a3befcacdeb36f83c3a83a17b3655 size 69872 ================================================ FILE: Music/SFX/nuh-uh.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:bc821f64e788366e75e772cf5d7c301e5d7ab8a0dbe856775c205f5c3bb004ca size 69872 ================================================ FILE: Music/SFX/odd open inventory.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:66c8de97f55b06cb43d1311d27dc8eb5139786b6f1e1369c13ff900d7777ae91 size 2108 ================================================ FILE: Music/SFX/old telephone 1.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:cb2548ef582331d2e3a5ad82fee78e55815b9efd940bbe9b30356a3f599c60d4 size 2108 ================================================ FILE: Music/SFX/racecar zoom.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:725acda9ff7dbdb6112375f71579b4614185ed555a5c6afc51696e0ecb05818c size 69872 ================================================ FILE: Music/SFX/smb3okay.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:2637e719b28dd0d2738a19595be9edef3d13c0b177f5293dafe29979a9f0c55b size 69872 ================================================ FILE: Music/Spooky/Detective Intro.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:a7f78cafc7ea94e0cc34adc372a441b8e1dce0da3bcb8f1ebc6d1835803ceeea size 77040 ================================================ FILE: Music/Spooky/Short Hauntings.mod ================================================ version https://git-lfs.github.com/spec/v1 oid sha256:05fb02ac54fa87a1cb2bd361c4601792e6598c66ba6b08634f18a8e6044f243f size 71920 ================================================ FILE: README.md ================================================ ![alt text](https://github.com/DeerTears/GB-Studio-Community-Assets/blob/master/titlecard_july11_2019.png "GB Studio Community Assets Titlecard") All assets must be original and usable in GB Studio. **Please do not upload content that you did not make.** No attribution is required! All assets can be freely distributed and used commercially. If you're submitting your own work to this repo, you must be okay with it being used commercially and potentially redistributed without credit. Read the LICENCE file for more details. # Downloading .mod music? **Do not download the entire repository!** Instead, [click here to download a music-only .zip folder](https://github.com/DeerTears/GB-Studio-Community-Assets/releases/tag/v1.0) of this repository. Github changes line-endings when zipping a full repository, and this mismatch causes GBT Player to crash on compile. You can prevent this GBT Player crash by downloading the music release separately from the rest of the repository. # How-To Credit To help track our contributors, a README.md file exists for each folder. These README files contain the names of every asset creator, followed by a list of the assets they've made for that particular folder. If you use an asset from the repository, please read-up on who made the asset you've downloaded and pay it forward by including the asset-maker's name in your game's credits. :) # How-To Contribute [Read the CONTRIBUTING.MD file](https://github.com/DeerTears/GB-Studio-Community-Assets/blob/master/CONTRIBUTING.md) If you need additional help having your assets added to the repository, or you're experiencing difficulties downloading/using any assets from this repository, [join the GB Studio Discord](https://discord.gg/2hYeJ4m). # Other Links and Community Hubs - [GB Studio Download](https://chrismaltby.itch.io/gb-studio) - [GB Studio Documentation](https://www.gbstudio.dev/docs) - [GB Studio Discord](https://discord.com/invite/dYeyUem) - [GB Studio Plugin Database](https://docs.google.com/spreadsheets/d/1d2F5hSEMt6nkacw-qVnYlT3IPHqmCCaLFhRboC5xxc0/edit#gid=0) - [GB Studio Central - News, Interviews, Guides](https://gbstudiocentral.com/) - [r/gbstudio](https://www.reddit.com/r/gbstudio/) - [Other Gameboy/GB Studio Community Links](https://github.com/DeerTears/GB-Studio-Community-Assets/blob/master/COMMUNITY_LINKS.md) # Thanks I'd like to thank Paige who has worked hard to maintain the repository and help me out with Github LFS. You can check her out on [Paige's Cohost](https://cohost.org/MxAshlynn). Ember here. I really appreciate how the GB Studio community has come together for this repository. If you would like to support purely the organizational work I've done by maintaining this repository, consider [buying me a coffee](https://ko-fi.com/goodnightgirl). There is no reward provided in supporting me, everyone is welcome to contribute or make suggestions of how to improve the repository. [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/R6R5EPWKI) Happy developing! ================================================ FILE: Scripts/Camera/Screenscroll/screenscroll_scene_init.txt ================================================ { "script": [ { "id": "b7afdf6b-72a5-4f4e-9bd2-a057d047364e", "command": "EVENT_CAMERA_MOVE_TO", "args": { "x": 0, "y": 0, "speed": "0" } }, { "id": "445484e7-6f06-469a-a2c6-7c02d432b2e8", "command": "EVENT_SET_VALUE", "args": { "variable": "0", "value": { "type": "number", "value": 0 } } }, { "id": "d4997ea8-b49d-446e-a6ad-26467fc06ee5", "command": "EVENT_END" } ], "__type": "script" } ================================================ FILE: Scripts/Camera/Screenscroll/screenscroll_trigger.txt ================================================ { "script": [ { "id": "90830cb2-a146-4193-ac7b-857432bece89", "command": "EVENT_SWITCH", "args": { "variable": "0", "choices": 2, "__collapseCase0": false, "value0": 0, "__collapseCase1": false, "value1": 1, "__collapseCase2": false, "value2": 3, "__collapseCase3": false, "value3": 4, "__collapseCase4": false, "value4": 5, "__collapseCase5": false, "value5": 6, "__collapseCase6": false, "value6": 7, "__collapseCase7": false, "value7": 8, "__collapseCase8": false, "value8": 9, "__collapseCase9": false, "value9": 10, "__collapseCase10": false, "value10": 11, "__collapseCase11": false, "value11": 12, "__collapseCase12": false, "value12": 13, "__collapseCase13": false, "value13": 14, "__collapseCase14": false, "value14": 15, "__collapseCase15": false, "value15": 16, "__collapseElse": false, "__disableElse": true }, "children": { "true0": [ { "id": "5244b31e-5e2c-4496-b8f4-c341980c2d7e", "command": "EVENT_CAMERA_MOVE_TO", "args": { "x": 20, "y": 0, "speed": "1" } }, { "id": "5dc26bd3-39d8-4cec-90f6-dbc6a9ef424e", "command": "EVENT_ACTOR_MOVE_RELATIVE", "args": { "actorId": "$self$", "x": 3, "y": 0, "moveType": "horizontal", "useCollisions": false } }, { "id": "b8a77252-627b-426f-99ab-842c51b3703c", "command": "EVENT_SET_VALUE", "args": { "variable": "0", "value": { "type": "number", "value": 1 } } }, { "id": "800c5026-715a-4d12-8b34-28708469b8a6", "command": "EVENT_END" } ], "true1": [ { "id": "0b60118b-be04-4e3e-b272-18738cab40ea", "command": "EVENT_CAMERA_MOVE_TO", "args": { "x": 0, "y": 0, "speed": "1" } }, { "id": "63da2fde-fa19-4234-ac2d-8aee81fabb69", "command": "EVENT_ACTOR_MOVE_RELATIVE", "args": { "actorId": "$self$", "x": -3, "y": 0, "moveType": "horizontal", "useCollisions": false } }, { "id": "056269fc-05b1-4ee1-ba7b-bc4c79207bea", "command": "EVENT_SET_VALUE", "args": { "variable": "0", "value": { "type": "number", "value": 0 } } }, { "id": "b3e31b0a-8388-4f85-986f-bf59d154c26b", "command": "EVENT_END" } ], "true2": [ { "id": "c3232516-1404-4713-8d1a-7d58b9990190", "command": "EVENT_END" } ], "true3": [ { "id": "d934a39a-91b7-43e0-8a8f-4248dc39fcb4", "command": "EVENT_END" } ], "true4": [ { "id": "d9df4982-e720-499f-bd8f-f7a107bf6afc", "command": "EVENT_END" } ], "true5": [ { "id": "005923b0-d8b7-4d25-b386-f86b3fa3ef8e", "command": "EVENT_END" } ], "true6": [ { "id": "1862e8d4-806f-4583-b060-bc5d53a9d717", "command": "EVENT_END" } ], "true7": [ { "id": "367db6d7-c6d2-4699-ab15-922338d6e61a", "command": "EVENT_END" } ], "true8": [ { "id": "3749aca3-cc5c-41eb-9330-c13336568bf2", "command": "EVENT_END" } ], "true9": [ { "id": "66b1a4dd-202c-4742-8b59-01cdaabde330", "command": "EVENT_END" } ], "true10": [ { "id": "b85fc047-543f-4393-8ec6-2f5d12d8125d", "command": "EVENT_END" } ], "true11": [ { "id": "7ba53ec6-6b16-4d76-bc44-8474d52144f5", "command": "EVENT_END" } ], "true12": [ { "id": "478cfa0b-43aa-4fce-9e52-fcbff625cdfd", "command": "EVENT_END" } ], "true13": [ { "id": "43ecbd1c-61f6-4070-8c31-877e8a4f5aa5", "command": "EVENT_END" } ], "true14": [ { "id": "2dd09603-5312-4ff9-b34f-e558b0f07a18", "command": "EVENT_END" } ], "true15": [ { "id": "1bf2a839-9d45-4485-848a-c55dcc34c4d5", "command": "EVENT_END" } ], "false": [ { "id": "a3b34a96-5b48-4c7e-bcee-f71101f3d35d", "command": "EVENT_END" } ] } }, { "id": "c983710d-39a9-4728-b325-eed7ce8df3d7", "command": "EVENT_END" } ], "__type": "script" } ================================================ FILE: Scripts/Camera/break camera from player.txt ================================================ { "script": [ { "id": "b7afdf6b-72a5-4f4e-9bd2-a057d047364e", "command": "EVENT_CAMERA_MOVE_TO", "args": { "x": 0, "y": 0, "speed": "0" } }, { "id": "d4997ea8-b49d-446e-a6ad-26467fc06ee5", "command": "EVENT_END" } ], "__type": "script" } ================================================ FILE: Sprites/Animated/README.md ================================================ # Animated Non-Actor Sprites By TommySezSoWhat - `d20_anim.png`: Rolling D20 animation. - `music_notes.png`: Scrolling music notes, using the note graphic from the default music emote. By Nath on the GB Studio Discord - `selection_box.png`: Marching ants animation in a box By krümel on the GB Studio Discord: Knight_walk(4frames).png - `Animal` - `Card` - `Crosshair` - `Dice` - `krümel's People` By Kalyen - `Fairy_wing_r.png` - `Fairy_wing_l.png`: Flapping wings By DeerTears - `large_coffee.png` - `small_coffee.png` By GumpyFunction - `ChristmasCop_animated.png` - `Hooded_Figure_animated.png ` - `Knight_animated.png` - `Knight_walk(4frames).png` - `Old_Orc_animated.png` - `Orc_1.png` - `Orc_2.png` - `Orc_3.png` - `Orc_animated.png` - `Orc_walk(4frames).png ` - `Skeleton_Body(idle).png` - `Spinning_Skeleton_Head(5frames).png` - `Bat-Orc_animated.png` - `Cat_idle.png` - `Crow_flying.png` - `Crow_idle.png` - `Mimic_walk(4frames).png` By godai78 - `kosmonaut.png` - `kosmonaut_eva.png` - `kosmonaut_girl.png` ================================================ FILE: Sprites/Static/Cats/README.md ================================================ # Cat Sprites A set of 7 static cat sprites based on the cat sprite from the GB Studio demo. - Smudgie: `t_cat_calico_static.png` - Nicky: `t_cat_fat_tuxedo_static.png` - Bertie: `t_cat_grey_tuxedo_static.png` - Jett: `t_cat_short_black_static.png` - Einstein: `t_cat_short_tuxedo_static.png` - Knuckles: `t_cat_tuxedo_static.png` - Snobol: `t_cat_white_static.png` ================================================ FILE: Sprites/Static/README.md ================================================ # Static Sprites By Kalyen - `Log_1.png` - `Portrait_girl_1.png`: Portrait for use in dialog boxes. ================================================ FILE: Tilesets/Credits.md ================================================ Old Halls by AFI - Created by AFI#8956 on the community Discord, uploaded by DeerTears. Distributed with permission. Free Furniture by yoanqwp - Created by yoanqwp#8156 on the community Discord, uploaded by DigiDuncan. Distributed with permission. Arcade cabinets by godai78 - Free tiles with arcade machines uploaded by author. ================================================ FILE: UI/README.md ================================================ # Credits: ## Cursors **Chris Maltby:** - `default cursor.png` **AstraLee:** - `SkyrimCursor.png` - "Designed similar to the UI of Skyrim. Recommend for use with inverted fonts." **Armanlone:** - `fleur_de_lis_cursor.png` - "Cursor designed based on the fleur de lis and Hollow Knight borders. Recommended for dark frames and white fonts." ## Emotes **Chris Maltby:** - `default emotes.png` **Gram:** - `grams-emotes.png`: "Redid the standard emote bubbles to be a more rounded. A little change but they looks much better. Free to use." ## Frames **Chris Maltby:** - `default frame.png` **TommySezSoWhat:** - `simple_frame.png` - "Very simple single-line frame with iffy anti-aliases at the corners." **AstraLee:** - `SkyrimFrame.png` - "Designed similar to the UI of Skyrim. Recommend for use with inverted fonts." **Armanlone:** - `fleur_de_lis_frame.png` - "Dark background frame with four fleur de lis on each corner."