Sappy 2006: OMFG HELP!6 Harpsichord 14 Tubular bells 22 Harmonica 7 Clavinet 15 Dulcimer 23 Tango...

Post on 18-Apr-2020

1 views 0 download

Transcript of Sappy 2006: OMFG HELP!6 Harpsichord 14 Tubular bells 22 Harmonica 7 Clavinet 15 Dulcimer 23 Tango...

Sappy2006:OMFGHELP!

OMFGHELP!WhenItrytoplayacertainsong,Igetagenericerrormessage.What'supwiththat?

TheEOTcommandisnotfullysupported.Asinglenoteworksfine,butfullchordsfail.Theactualerrorthat'ssupposedtoappearis"SubscriptoutofRange",whichdoesn'thelpmucheither.

I'mafraidthere'slittletobedoneherebuttoavoidplayingthesesongs.

Developers,ifyouhaveasongwithpassageslikethis:

.byteEOT,As2

.byteCs3

.byteFn3

...thatwouldn'twork.TIEsstartfine,butEOTsspanningmorethanonenotebreakthings.

Lacking.Sfiles,Pokémon's"CavesandDarkness"songisabitdifficulttofixbutyoucouldlook,inthesongdata,for0xCEand0xCFwhichareEOTandTIErespectively.

MySappy-enabledhomebrewdoesn'tworkinSappy.Theheaderpointersareallwrong!

SinceClassicVBonlysupportssignedLongs/DWords,certainpointerrangestranslatetoanegativedecimalnumber.IhadthisproblemmyselfwhileworkingontheDemoJukebox.IfixedthisbymovingallSOUND_FILEStothestartoftheromuntilthepointerwasinacorrectlyinterpretedrange:

$(TARGET_ELF):$(SOUND_FILES)$(.OFILES)Makefile$(DEPENDFILE)

@echo>$(MAPFILE)

$(CC)-g-o$@$(SOUND_FILES)$(.OFILES)-Wl,$(LDFLAGS)

Thisiscausedbysmallprogramsandthemusicdatabeingputattheendoftherombydefault.

WhenusingtheMIDIdriver,theinstrumentsareallwrong!That'sbecausethegamesdon'tneedtoadheretotheGeneralMIDIstandard.Anygiveninstrumentor"patch"asit'softencalledcanhaveanysound.It'suptothesoundandmusicartistsofthegamein

questionhowmuchthegamepatchesmatchuptotheGeneralMIDIstandard.Youcanremapthepatcheswiththe<midimap>XMLtag.PleaserefertotheSappy.XMLdocumentationfordetails.

Ihavethosemediakeysonmykeyboard,butsomedon'tworkinSappylike"Eject"!

Asofversion1.1,SappyonlylistenstoPlay/Pause(whichdoesn'tpause),Stop,Next,Previous,VolumeUpandVolumeDown.It'signoringofEjectisquitenatural.Eachkeymustbecodedinseperately.

I'mrunningonaJapanesesystem,andthetextisallgarbled!It'snoteasytogetJapanesetextrenderedproperly.We'restillfiguringthisout.Inthemeantime,youcangetanon-localizedversionwhereyougotthis.

BuiltonWednesday,April12th,2006

Sappy2006:What'sNew

What'sNewFrom1.1to1.2

Super-fastsampleloading-askfordetailsifyoudare!

Anti-earbleedingsystemtodisableunneededbutear-piercingsoundslikesomeinFinalFantasy4.

MIDIsupportlikeintheoldSappy.

MIDImappingeditor.

MIDIexport,thankstoDragforfixingit.

AbilitytochoosewhichMIDIOUTdevicetouse.

Variousbugfixes.

From1.0to1.1

Idiot-proofexporters.You'llbenotifiedwhenyoumisread"filepattern"for"filename"or"pathname".

Non-braindeadassembler.Itnolongerfailsonpointers.

Volumecontrolslider.Respondstokeyboard(ifithasfocus)andmousewheel.

WM_APPCOMMANDsupport.Ifyouhavededicatedmediacontrolbuttonsonyourkeyboard,Sappywilllistentothem.

Soundloadingonbytearraysinsteadofcharacterstrings,asurgedbyBouché.

Feedbackwhileloadingasongtoplay.

RudimentarySappyClassic-styleMIDIsupportwithequallyrudimentaryGameBoyClassicmodeandinstrumentremap.

Wishlist

SupportformoreMIDIcontrols.

Tempofixforexports.

GameBoyClassicmodeforthenewdriver.

Fullsoundloadingfix.Asof1.1,onlyPCMwavesareproperlyloaded.Tonegeneratorsarestillloadedinstrings.

BuiltonFriday,December22nd,2006

Sappy2006:XMLdefinition

XMLdefinitionRootelementSAPPY→oneormoreROMelements.ElementROM→oneormorePLAYLISTelements,oneoptionalBLEEDINGEARSelement,oneoptionalMIDIMAPelement.

AttributeCODE,required.AttributeNAME,required.AttributeSONGTABLE,pointer,required.AttributeSCREENSHOT,file.AttributeCREATOR.AttributeTAGGER.ElementPLAYLIST→oneormoreSONGelements.AttributeNAME,required.AttributeSTEAL,anotherCODE.ElementSONG→thesong'sname.AttributeTRACK,required.

ElementBLEEDINGEARS→oneormoreINSTelements.

ElementINST.AttributeID,MIDIpatchnumber,or...AttributesFROMandTO,rangeofMIDIpatchnumbers.

ElementMIDIMAP→oneormoreINSTelements,oneormoreDRUMelements.

ElementINST.AttributeFROM,MIDIpatchnumber,required.AttributeTO,MIDIpatchnumber,required.AttributeTRANSPOSE.AttributeSECOND.Notusedinthisversion.AttributeTHIRD.Notusedinthisversion.

ElementDRUM.AttributeFROM,note,required.AttributeTO,note,required.AttributeKIT.Notusedinthisversion.

BuiltonWednesday,July26th,2006

Sappy2006:HackerStuff

MID2AGBandtheBuilt-InAssemblerIfyouhavetheMID2AGBconverter,youcanuseittoconvertmostMIDIfilestotheSappyengine'snativeformat.Butthisisonlyhalftheprocedure.Theresulting.Sfilesmustbeconvertedtobinarycode.Thiscanbedonewithmoststandards-compliantassemblers,suchastheoneusedinGCC.

Unfortunately,whenusinganassemblerthepointersarealloffandtheVoiceGroupisundefined.Weusedtohand-editthe.SfilesinNotePadorwhateverandaddtheintendedlocationinROMtoallreferencedpointers.

Sappy2006packsabuilt-inassembler-liketoolthat'scustom-builtforthespecificpurposeofconvertingSappy.Sfiles.Itdoesn'tgenerateasinglebyteofcode,onlysongdata.Butitdoesautomaticallyfixthepointers,andevenrecognizestheheaderbyteswhenitseesthemsothenewsongheadercanautomaticallybelinkedintotheSongTable!

Usage

First,youmustcopyorrenamethefilemusicplaydef.stomplaydef.s.Forsomereason,Nintendogaveitanothernamethanisreferencedinthesongfiles,andcopiesto\srcwiththepropername.Makesurethatmplaydef.sisinthesamefolderasyoursongfiles.

Afterconvertingyoursong,pickingavoicegroupoffsetfromanothersonganddeterminingwhereintheROMyouwanttoputthenewone,opentheassemblerandfillinallthreefields.Therestshouldbeprettymuchautomatic.

TheassemblerworksonlybecauseSappysongfileshavecertaincharacteristics:

Noforwardjumps,onlybackwards.

Wordsareusedexclusivelyinjumpsandtheheader.

Theonly.globalisalsothesongnameandthereforeheaderlabel.

BuiltonTuesday,November8th,2005

Sappy2006:HackerStuff

SongTransplantsAnygamethatusestheM4Aenginetoplaybackitsmusicandsoundscanbeusedinasongtransplantation.Thisusedtobeaverybigtask,findingasong'sheaderandhand-dumpingeachtrack.Then,you'dhavetogothrougheachtrackandediteverysinglepointer.Oneslip-upandthesongwouldn'twork.

Nowallyouhavetodobetweenexportingandimportingthetracksistoeditthetracks'VOICEcommands(mosttrackshavingonlyoneofthose),andpickinganicevoicegroupthatmoreorlesssuitsyourneeds.

Thefollowingthingsmustbedoneforapropersongtransplant:

Exporttracks

Editvoicecommands

Importtracks

BuiltonFriday,November4th,2005

Sappy2006:HackerStuff

ExportTracksTheExportTracksdialoghasalistoftrackpointersandapattern-sensitivefilenametextbox.

Ifyouenter,forexample."RCRIntrotrack$T.bin",you'llgettrackfilescalled"RCRIntrotrack0.bin","RCRIntrotrack1.bin"etcetera.Anypointersfoundthereinwillbeautomaticallyrecalculated.Entering"$P"addsthetracks'pointerstotheirfilenames.

BuiltonMonday,November28th,2005

Sappy2006:HackerStuff

EditvoicecommandsBecauseinstrumentshardlyevermatchupbetweengames,transplantedsongsmustbeeditedtousethetargetgame'sinstruments.Therearetwostepstodothis:

Figureoutwhichinstrumentstouse.

Edittrackdata.

Todostep1,openthetargetgameandfindasongthathastherequiredinstruments,orsomethingclose.ThenpressExtractSamplesandmakesureyouusethe$Ifilenamepattern.Identifytheinstrumentsyouwantandwritethemdownsomewhere.Thisisonlyoneofseveralmethods.

Todostep2,openeachtrackfileinahexeditorandfindtheBDbytes.Theycanoftenbefoundnearthebeginningofeachfile.Thebytethatfollowsitisthetrack'sinstrument.Replacethesevalueswiththeonesyouwrotedowninstep1.

BuiltonFriday,November4th,2005

Sappy2006:HackerStuff

ImportTracksTheImportTracksdialogisalittlemorecomplexthantheExportdialog.Selectthetrackfilesyouwanttoimportinthelistbox,andenterthreepointervalues.Defaultsareprovided,thesearethecurrentlyselectedsong'spointers.

Tracksarehandledintheordertheyappearinthelistbox.Toimportalater-appearingfilebeforeanearlier-appearingfile,renametheminExplorertochangetheirsortingorder.In-trackpointersarerecalculatedwhenneeded.

Whenimportingisdone,SappywillaskforconfirmationtoautomaticallychangetheMasterSongTabletoreflectyourchanges.

BuiltonFriday,November28th,2005

Sappy2006:HackerStuff

Dataformats

Samples

Type Name Descriptionu16 type Notusedu16 stat 0x0000foroneshot,0x4000forforwardloopu32 freq "Normal"frequency<<10u32 loop Loopstartpositioninsamplesu32 size Totalnumberofsamples

s8 data[] Size+1samplesintotal.Lastbyteiszeroforone-shots,sameaslooppointerforloopedsamples.

Musicheaders

Type Name Descriptionu8 NumTrks Numberoftracksinthesongu8 NumBlks Numberofblocks(?)u8 Priorityu8 Reverbu32 Voicegroup Pointertoinstrumentbanku32... Track Pointerstotracks

BuiltonMonday,March7th,2006

Sappy2006:HackerStuff

MIDIReferenceNotethatnosingleGBAgamehastoconformtothisstandard.

DrumKeys

Nuffsaid.

PatchAssignments

Piano ChromaticPercussion Organ0Acousticgrandpiano 8Celesta 16Hammondorgan1Brightacousticpiano 9Glockenspiel 17Percussiveorgan2Electricgrandpiano 10Musicbox 18Rockorgan3Honky-tonkpiano 11Vibraphone 19Churchorgan4Rhodespiano 12Marimba 20Reedorgan5Chorusedpiano 13Xylophone 21Accordion6Harpsichord 14Tubularbells 22Harmonica7Clavinet 15Dulcimer 23Tangoaccordion

Guitar Bass Strings24Acousticguitar(nylon) 32Acousticbass 40Violin25Acousticguitar(steel) 33Electricbass(finger) 41Viola26Electricguitar(jazz) 34Electricbass(pick) 42Cello27Electricguitar(clean) 35Fretlessbass 43Contrabass28Electricguitar(muted) 36Slapbass1 44Tremolostrings29Overdrivenguitar 37Slapbass2 45Pizzicatostrings30Distortionguitar 38Synthbass1 46Orchestralharp31Guitarharmonics 39Synthbass2 47Timpani

Ensemble Brass Reed48Stringensemble1 56Trumpet 64Sopranosax49Stringensemble2 57Trombone 65Altosax50Synth.strings1 58Tuba 66Tenorsax51Synth.strings2 59Mutedtrumpet 67Baritonesax52ChoirAahs 60Frenchhorn 68Oboe53VoiceOohs 61Brasssection 69Englishhorn54Synthvoice 62Synth.brass1 70Bassoon55Orchestrahit 63Synth.brass2 71Clarinet

Pipe SynthLead SynthPad72Piccolo 80Lead1(square) 88Pad1(newage)73Flute 81Lead2(sawtooth) 89Pad2(warm)

74Recorder 82Lead3(calliopelead) 90Pad3(polysynth)75Panflute 83Lead4(chifflead) 91Pad4(choir)76Bottleblow 84Lead5(charang) 92Pad5(bowed)77Shakuhachi 85Lead6(voice) 93Pad6(metallic)78Whistle 86Lead7(fifths) 94Pad7(halo)79Ocarina 87Lead8(brass+lead) 95Pad8(sweep)

SoundEffects120Guitarfretnoise121Breathnoise122Seashore123Birdtweet124Telephonering125Helicopter126Applause

BuiltonWednesday,April12th,2006

Sappy2006:Jukebox

JukeboxDemoRomTheJukeboxDemoRomiswrittenbyKyoufuKawa,basedoncodefromCatnipDreams.EventhoughitdemonstratessimplepaletterotationandlesssimpleVariableWidthFonts,it'smainfocusistoplaysongsusingtheM4Aengine.

ControlsLeft/Right-Selectsong.Yourselectionwrapsaroundifneeded.Abutton-Playthecurrentlyselectedsong.Bbutton-Stopplaying.Shoulderbuttons-Playsoundeffects.

MiscellaneousinformationTherom'sinternalnameandgamecodeisKAWAJUKE2K6-KWJ6.IthasaMakerCodeof0xFF.ItwasmadewiththeofficialNintendo-brandGBAdevelopmentkit.IthastheuniquequalityofhavingallthesongdataatthestartoftheROM.

BuiltonThursday,September28th,2006

Sappy2006:Jukebox

JukeboxSongCreditsListedintrackorder.Instrumentationhasbeenalteredandsometrackshavebeencompletelyremoved.

TestsongHand-codedbyKyoufuKawa

Keitaro'sTheme-"Memories"From"CatnipDreams",2005TheHelmetedRodent.ComposedbyMajinBluedragon.Thegamewasneverreleased,andsongsmayreturninlatergamesfromthesameauthors.

MonkeyIsland2ThemeSongFrom"MonkeyIsland2",LucasArts.RecordedfromDOSBox.

GRNFINALFrom"TheIncredibleToonMachine",Sierra.GameusedMIDIfiles.

CanonByPachelbel.FoundbyGoogle.

GrabbagFrom"DukeNukem3D",3DRealms.GameusesMIDIfiles.

AtDoom'sGate,KitchenAceandISawedtheDemonsFrom"Doom",iDsoftware.DownloadedfromDoomWorld.

EyecatcherFrom"AzumangaDaioh-TheAnime".

TIM1From"Lemmings",Psychnosis.

???From"NinjaGaiden".

Kawa'sComin'

OriginalbyDJBouché,extendedversionbyBaro.

ZeroWingMedleyFrom"ZeroWing",Toaplan.SequencedandarrangedbyMarsJenkar.DownloadedfromVGMusic.

Hu-HaDschinghisKahnByDschinghisKahn.DownloadedfromsomeRussiansite.

500Miles(I'mGonnaBe)ByTheProclaimers.Downloadedfromakaraokesite.

PalletTownPortedfromPokémon.

ThexderthemeSequencedbyJanvanValburg.DownloadedfromVGMusic.

BuiltonFriday,December22nd,2006

Sappy2006:Registrykeys

RegistrykeysAutoAdvance

Doesn'tdoanything.

BarXstateCollapsed/ExpandedstateoftheExplorerBarbars.

DriverWhichdrivertouse.

ForceNiceBarUsesystemstyleorfakeitout.Non-XPsystemsarefakedbydefault.

FMODVolumeVolumeatwhichtoplaythemusicwhenusingtheFMODdriver.

HideBarHidetheExplorerBarcompletely.MakestheplayerlooklikeBouché'soriginal.Taskscanbeselectedfromthemenu,butROMinformationisunavailable.

IncessantSoundOverrideDon'tplayanyIncessantSoundsiftrue.

LastROMFullfilenameofthelastROMyouopened.

MIDIDeviceIndexoftheMIDIOUTdevicetouse.

MIDIinGBModeReplacesallinstrumentswithsquareandsaw-wavesifset.

mIRCNowPlayingWriteNowPlayinginformationtosappy.stt.Usesappy.mrctoshowthisduringIRCsessions.

MSNNowPlayingSendNowPlayinginformationtoMSNMessenger.

NiceMenusWhenenabled,useOffice2003stylewhitemenus.Whendisabled,

useolderstylegraymenus.

ReloadROMReloadthefilespecifiedin"LastROM"whenstartingup.

SeekbyPlaylistWhenenabled,thePrevious/Nextbuttonsgobyplaylistentriesinsteadofrawsongnumbers.

SettingsPageTheindexofthecurrentpageontheSettingswindow.Quickre-entry.

SkinSkin#touse.

SkinHue/SaturationColorizingvaluesfortheskin

SongRepeatsDeterminesthenumberoftimestorepeatplayback.

WindowHeightHeightofthemainwindowintwips.

WindowFont(Size)Allowsyoutochangethefontusedinthewindows.Defaultsto"LucidaSansUnicode",8points.

XMLFileXMLfiletouse.

BuiltonThursday,September28th,2006

Sappy2006:Trackbytecode

TrackbytecodeWxx(0x80++)

Waitforthespecifiednumberofclockticks

FINE(0xB1)Musicalterm.Endsthetrack.

GOTO,label(0xB2)Unconditionaljump.

PATT,label(0xB3)Unconditionaljump,butrememberswheretoreturn.Canbenesteduptothreetimes.

PEND(0xB4)Endsapatternandreturnstoit'scallsource.Ignoredifnotcalledfromsomewhere.

REPT,xx,label(0xB5)Jumpstothespecifiedlabelxxtimes.Ifxxiszero,itrepeatsadinfinitumlikeaGOTO.REPTcommandscannotbenested,andcannotbespecifiedinaMIDIsequencer.

PRIO,xx(0xBA)Setsthepriorityofthetrack.xxisfrom0to255whendirectlyeditingthe.sfile,0to127inaMIDIsequencer.

TEMPO,xx/2(0xBB)Thissetsthetempooftheentiresong.xxisfrom22to510.

KEYSH,xx(0xBC)Thismodulatesthekeyofthetrack.xxisfrom-128to127.ThiscommandcannotbespecifiedinaMIDIsequencer.

Thefollowingcommandsarein"RunningStatus"mode.Thisallowsoperationfromtheirparametersalone,whichisgoodwhenawholelotareseeninsequence,likeapitchbendorvolumeslide.

VOICE,xx(0xBD)Selectsapatchforthistrack.xxisfrom0to127.

VOL,xx(0xBC)

Setsthetrackvolume.xxisfrom0to127.

PAN,xx(0xBF)Setsthetrack'sstereopanposition.xxisfrom-64to63,butifit'saCGBinstrument,hardwarerestrictionslimityoutojust"left","center"and"right".

BEND,cV+xx(0xC0)

BENDR,xx(0xC1)

LFOS,xx(0xC2)

LFODL,xx(0xC3)

MOD,xx(0xC4)

MODT,xx(0xC5)

TUNE,cV+xx(0xC8)

Thesearenotecommands.TheycanbeusedseamlesslywithRunningStatuscommandsbecauseoftheirbytecodes.

Nxx[,key[,vel]](0xD0++)Playsanote.xxisthenotelengthfrom00to96.24isaquarternote,96awhole.Keyisinthe"Cn3"formatwherethefirstcharacteristhenameofthenote("CDEFGAB"),thesecondeither"n"foranaturalor"s"forasharpandthethirdtheoctave.Therearealso"minusoctaves",writtenlike"CnM2"andstuff.OctaveseffectivelyrangefromM2to8.FromCnM2toGn8coversall127MIDIkeynumbers.Velocityrangesfrom0to127,butunlikeinMIDI,velocity0isnotsynonimousto"noteoff".

EOT[,key](0xCE)StopsthematchingTIEnote.

TIE[,key,[,vel]](0xCF)Thisnote,whichworksjustlikeNxx,continuestosounduntilthenextmatchingEOTcommand.

BuiltonFriday,November4th,2005