1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="generator" content="gendoc 1.0.0: https://gitlab.com/bztsrc/gendoc">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>MEG-4 User's Manual</title>
- <style rel="logic">*{box-sizing:border-box;font-family:inherit;}body {background:rgba(0,0,0,0.05);font-weight:400;font-size:16px;}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:26px 0;padding:0;border-top:1px solid;}br:after,br:before{display:table;content:""}br{clear:both;}h1,h2,h3,h4,h5,h6{clear:both;margin:0px 0px 20px 0px;padding-top:4px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}p{margin:0 0 24px}a{cursor:pointer;}h1{font-size:175%}h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}pre,samp,code,var,kbd{font-family:Monaco,Consolas,Liberation Mono,Courier,monospace;font-variant-ligatures:none;}pre,code{display:block;overflow:auto;white-space:pre;font-size:14px;line-height:16px!important;}pre{padding:12px;margin:0px;}code{padding:0 0 12px 0;margin:12px 12px 0px 2px;background:url(data:type/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAYAAADT5RIaAAAAFklEQVQI12NgYGDgZWJgYGCgDkFtAAAWnAAsyj4TxgAAAABJRU5ErkJggg==) 0 0 repeat;}.lineno{display:block;padding:0px 4px 0px 4px;margin:12px 0px 0px 0px;opacity:.4;text-align:right;float:left;white-space:pre;font-size:12px;line-height:16px!important;}pre .hl_b,samp .hl_b,code .hl_b{display:block;}blockquote{margin:0px;padding:12px;}blockquote>span:first-child::before{content:url(data:type/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAgCAYAAABU1PscAAABRElEQVRYw+3WTytEURjH8c/4l1JTpKxsyEbYWFkpG+UVKOWFeAts7eytbJSysLLVxIKNFAslwhSlUQabUdM0xm0e967Ot+7inPN8z+13z73nXBKJRCIRoJSxbggrmMMInlHBIWoF+KEAQ9jAaJuxe2zhJUe/Iz0ZahZ/uTmMYT1nPxxg/I/xWQzn6IcD1IIha//wkEIBKhlq+nP0wwHOsYuvDjWvOfod6c1Yd9O4ZjDQZvwAbzn6oRVofpKbqLf0P+GxAD8cAO7w0NJ3WqAfDlBCuan9gaMC/XCA+cbJ+sMRqgX6oQCTWGtqX2O/QL8tfRlqyljGUlPgW2y3+SDz8Lv6mRvEQmPbm25ZqQvs/LHtRf3wCkxgtaWvij2cZJg36ocD/Pw91nGJY5zhM+O8UT/8Ck01TswrvHcxb9RPJBKJRDF8AyNbWk4WFTIzAAAAAElFTkSuQmCC);float:left;vertical-align:top;}.ui1,.ui2,.ui3,.ui4,.ui5,.ui6{display:inline-block;height:24px!important;line-height:24px!important;padding:0px 4px;margin:-2px 0px -2px;}kbd{display:inline-block;font-weight:700;border:1px solid #888;height:24px!important;padding:0px 4px;margin:-2px 0px -2px;border-radius:4px;background-image:linear-gradient(#ddd 0%,#eee 10%,#bbb 10%,#ccc 30%,#fff 85%,#eee 85%,#888 100%);}.mouseleft,.mouseright,.mousewheel{display:inline-block;min-width:16px;height:24px!important;padding:0px;margin:-2px 0px 0px 0px;vertical-align:middle;}.mouseleft::before{content:url(data:type/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAMAAADEfo0+AAAAe1BMVEUAAACoqKj9/f2zs7O1tbWRkZGlpaWsrKybm5u2traNjY2Wlpanp6empqaYmJiPj4+3t7f5+fmjo6P19fXu7u6ZmZnx8fHi4uLm5ube3t7q6uqwsLC0tLS7u7u4uLi/v7/W1tbDw8PLy8vPz8/T09Pa2trHx8eIiIhERkShhqFGAAAAAXRSTlMAQObYZgAAAI5JREFUGNNV0EcCwjAMRFEB6R2DKSGQUBLp/idEjsG23m7+cgAMIsJWwR8Z235pumDTnkUbv+lg7CIfTqvSbTquxsGFfjWXLlwsdOFs+XC1EHAWOEwCh4/A4S1weAkcFoHDU0CI8zGQx1Cpe0BVAO0j0PIfiR4cnZjLdHP7abQ9VRVZnaZ1VvjfO42o7edfH3EoHZS6XE4AAAAASUVORK5CYII=);}.mouseright::before{content:url(data:type/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAMAAADEfo0+AAAAe1BMVEUAAACoqKj9/f2zs7O1tbWRkZGlpaWsrKybm5u2traNjY2Wlpanp6empqaYmJiPj4+3t7f5+fmjo6P19fXu7u6ZmZnx8fHi4uLm5ube3t7q6uqwsLC0tLS7u7u4uLi/v7/W1tbDw8PLy8vPz8/T09Pa2trHx8eIiIhERkShhqFGAAAAAXRSTlMAQObYZgAAAI9JREFUGNNV0NkWgjAMRdGozFOxWgdEcYLk/7/Q0EpL9tNd5/ECzLRCIoJF20zdlsinTbRn5Eu0O8zIl/Jk+dAPR4uWUo6d5QNenBDOTghXJ4RRQMCnwOErcPgIHN4Ch0ng8BIQ4nxYyWOo9H1FVwDqsaL4j8T0nknmy0xz+2uMO1UXWZ2mdVbo8LtBNK2dP/2+KB2shyfVAAAAAElFTkSuQmCC);}.mousewheel::before{content:url(data:type/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAMAAADEfo0+AAAAe1BMVEUAAACzs7OoqKisrKyRkZGlpaX9/f22trabm5uNjY2mpqanp6ePj4+1tbWYmJi3t7eWlpajo6OZmZmwsLD5+fnu7u7x8fHi4uLW1tbm5ube3t7T09Pq6ur19fW4uLi7u7u0tLTa2trPz8+/v7/Dw8PLy8vHx8eIiIhERkS4354xAAAAAXRSTlMAQObYZgAAAKdJREFUGNNV0NkagiAUhdHjPAECzWWlWdL7P2Fno/nJumHzXx4iMMI5YeivVVOX592k2vkfy/1CxvjL6L6KJAd9ZF+GVxP144Eh4B170kPHEPAOmtwFEPxw5E6A4AeHKyD4wWEABD84nAHBDw43QPCDwyvA4RPgMAU4vAOO0mLcKFJqzHPDNETisSH4HpntVzbDyazaLZSdj2qqsk6Suqw2d7fO2fnmP7kAJW9a/HbiAAAAAElFTkSuQmCC);}footer{width:100%;padding:0 3.236em;}footer p{opacity:0.6;}footer small{opacity:0.5;}footer a{text-decoration:none;color:inherit;}footer a:hover{text-decoration:underline;}dl{margin:0 0 24px 0;padding:0px;}dt{font-weight:700;margin-bottom:12px;}dd{margin:0 0 12px 24px;}.table table{margin:0px;border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid;width:100%;}th{font-weight:700;padding:8px 16px;overflow:visible;vertical-align:middle;white-space:nowrap;border:1px solid;}th.wide{width:100%;}td{padding:8px 16px;overflow:visible;vertical-align:middle;font-size:90%;border:1px solid;}td.right{text-align:right;}table.grid{margin:0px;padding:0px;border:none!important;background:none!important;border-spacing:0;border:0px!important;empty-cells:show;width:100%;}table.grid tr, table.grid td{margin:0px;padding:0px;overflow:hidden;vertical-align:top;background:none!important;border:0px!important;font-size:90%;}div.frame{position:absolute;width:100%;min-height:100%;margin:0px;padding:0px;max-width:1100px;top:0px;left:0px;}#_m{margin-left:300px;min-height:100%;}div.title{display:block;width:300px;padding-top:.809em;padding-bottom:.809em;margin-bottom:.809em;text-align:center;font-weight:700;}div.title>a{padding:4px 6px;margin-bottom:.809em;font-size:150%;}div.title>a:hover{background:transparent;}div.title>a>img{max-width:280px;border:0px;padding:0px;margin:0px;}div.title input{display:none;width:270px;border-radius:50px;padding:6px 12px;font-size:80%;box-shadow:inset 0 1px 3px #ddd;transition:border .3s linear;}div.title input:required:invalid{background:#fcfcfc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAASFBMVEUAAAC6urq7u7y7vLy8vL3Dw8TLzM67urq8vL29vr69vr/AwMK5ubm5ubm4uLi5t7fAwMC/vr/FxMXBwsPExcW+u7vDw8S4uLiryZHFAAAAF3RSTlMA9vGttk4lfbWnpJQG0MpzYEIglFRCGzMa+EsAAAB0SURBVBjTbY5bCsMwDAQl2U6cR5s0fcz9b1oLpWBC52dhENqVRsmG5SIn60wwryEm0LQkbUacAveh5XGDh4uKfsQZlOqpJAkS5gHPUyzgYdeLjB6/H7lvGbzlssP2WDoRGGzxrVRD82sHRukZ/xhv7tns/QXrhgcaFdOKBwAAAABJRU5ErkJggg==) no-repeat 10px 50%;}div.title input:focus{background:#fcfcfc!important;}div.version{margin-top:.4045em;margin-bottom:.809em;font-size:90%;}nav.side {display:block;position:fixed;top:0;bottom:0;left:0;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;font-weight:400;z-index:999;}nav.mobile {display:none;font-weight:bold;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1;}nav a{color:inherit;text-decoration:none;display:block;}nav.side>div{position:relative;overflow-x:hidden;overflow-y:scroll;width:320px;height:100%;padding-bottom:64px;}div.nav p{height:32px;line-height:32px;padding:0 1.618em;margin:12px 0px 0px 0px;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap;-webkit-font-smoothing:antialiased}div.nav li>.current,div.nav li>ul{display:none;}div.nav li>a,div.nav li>label{display:block;}div.nav a,div.nav ul>li>label,div.nav ul>li>.current{width:300px;line-height:18px;padding:0.4045em 1.618em;}div.nav a,div.nav ul>li>label{cursor:pointer;}div.nav .current{font-weight:700;border-top:1px solid;border-bottom:1px solid #c9c9c9;}div.nav ul>li>ul>li>a{border-right:solid 1px #c9c9c9;font-size:90%;}div.nav ul>li>ul>li.h2>a{padding:0.4045em 2.427em;}div.nav ul>li>ul>li.h3>a{padding:.4045em 1.618em .4045em 4.045em;}div.nav ul>li>ul>li.h4>a{padding:.4045em 1.618em .4045em 5.663em;}div.nav ul>li>ul>li.h5>a{padding:.4045em 1.618em .4045em 7.281em;}div.nav ul>li>ul>li.h6>a{padding:.4045em 1.618em .4045em 8.899em;}div.nav ul,div.nav li,.breadcrumbs{margin:0px!important;padding:0px;list-style:none;}ul.breadcrumbs,.breadcrumbs li{display:inline-block;}.menu{display:inline-block;position:absolute;top:12px;right:20px;cursor:pointer;width:1.5em;height:1.5em;vertical-align:middle;padding:16px 24px 16px 24px;border:solid 1px rgba(255, 255, 255, 0.5);border-radius:5px;background:no-repeat center center url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");}.home{display:inline-block;max-width:16px;max-height:16px;line-height:16px;margin:0 5px 0 0;cursor:pointer;}.home::before{content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAD8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PyxWsjVAAAAGHRSTlMAx6oLLRnYiXFEvPbey518NQbsj11QKhQ+J0ktAAAAbElEQVQY053ISQ7DMAwEwRYpavHurPz/SwMoMpD46L4MpvBTB0zTP+R9z55Ebh0yQL5DaDA+0WVR3h3Gikp9iPKF9MIkQhSDwUlGHCLQxhLGJkpLZcNYS/tdyorP/DQ7HgBqKRUgHBDcw2X4AFsJCSXB/5UVAAAAAElFTkSuQmCC);}h1>a,h2>a,h3>a,h4>a,h5>a,h6>a{display:none;max-width:16px;max-height:24px;margin:-8px 0 0 5px;vertical-align:middle;}h1:hover>a,h2:hover>a,h3:hover>a,h4:hover>a,h5:hover>a,h6:hover>a{display:inline-block;text-decoration:none!important;}h1>a::before,h2>a::before,h3>a::before,h4>a::before,h5>a::before,h6>a::before{content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAiBAMAAACkb0T0AAAAMFBMVEUAAAD8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PzS+N+gAAAAD3RSTlMABab5cVY73o4k2cJTPb1Q83MyAAAAh0lEQVQY02P4DwWkM7YxsNiDGJ8EGBgmgxiKDDkCLAwgAQn7hQxARiGj8v8/IIYDi2a9GZChHiAnMLmBjeGTaIBUAMcFaYaNvA2sC1kD9RkSOCwZF7IW/WdgSP4+yYHlP5Bx/r+RgDiIIfW5kVEfyHBgPMYgBLLdkoEBKABkfHZgyIa7h04MAOVty/RC/PhoAAAAAElFTkSuQmCC);}h1>a:hover::after,h2>a:hover::after,h3>a:hover::after,h4>a:hover::after,h5>a:hover::after,h6>a:hover::after{content:"Permalink to this headline";display:block;padding:12px;position:absolute;margin:-8px 8px;font-weight:400;font-size:14px;background:rgba(0,0,0,.8);color:#fff;border-radius:4px;}input[type=radio]{display:none;}input[type=radio]:checked ~ ul{display:block;}.fig{margin-top:-12px;padding-bottom:12px;display:block;text-align:center;font-style:italic;}div.page{width:100%;padding:1.618em 3.236em;margin:auto;line-height:24px;}div.page ol{margin:0 0 24px 12px;padding-left:0px;}div.page ul{margin:0 0 24px 24px;list-style:disc outside;padding-left:0px;}div.page ol{list-style-type:none;counter-reset:list;}div.page ol li:before{counter-increment:list;content:counters(list,".") ". ";}div.pre{overflow-x:auto;margin:1px 0px 24px;}div.table{overflow-x:auto;margin:0px 0px 24px;}div.info,div.hint,div.warn{padding:12px;line-height:24px;margin-bottom:24px;}div.info>p,div.hint>p,div.warn>p{margin:0px;}div.info>p:first-child,div.hint>p:first-child,div.warn>p:first-child{display:block;font-weight:700;padding:2px 8px 2px;margin:-12px -12px 8px -12px;vertical-align:middle;}div.info>p:first-child>span,div.hint>p:first-child>span,div.warn>p:first-child>span{display:block;max-height:20px;margin:0px;vertical-align:middle;}div.info>p:first-child>span::before,div.hint>p:first-child>span::before,div.warn>p:first-child>span::before{content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAApUlEQVQ4y82TwQnDMAxFpVJyLPiSbbJETr13Fo+RZZxLRghkgnSEEni9ONS0sg1tDv3wwfjbX7Iki/wVAAd4IPBCiHuudrkHVvJYgb50eaOO7cMkpv0eeQGukYuRiUsNvBFpSvTJ0P2un0Sk+6Le3WEG58yBFrjt61r7Qqbij0gLIX3CaPgOqtqoaiMig6GPtTbOwCVyLraxMEj3yPIgHTLKv3ymJySzt16bW/sWAAAAAElFTkSuQmCC);}p>div:last-child,dd>*:last-child,td>*:last-child,li>ol,li>ul{margin-bottom:0px!important;}img{border:0px;}img.imgt{display:inline-block;max-height:22px!important;padding:0px;margin:-4px 0px 0px 0px;vertical-align:middle;}img.imgl{float:left;margin:0px 12px 12px 0px;}img.imgr{float:right;margin:0px 0px 12px 12px;}div.imgc{text-align:center;padding:0px;margin:0 0 12px 0;clear:both;}img.imgc{max-width:100%;}img.imgw{width:100%;margin-bottom:12px;clear:both;}.btn{border-radius:2px;line-height:normal;white-space:nowrap;color:inherit;text-align:center;cursor:pointer;font-size:100%;padding:4px 12px 8px;border:1px solid rgba(0,0,0,.1);text-decoration:none;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);vertical-align:middle;*zoom:1;user-select:none;transition:all .1s linear}.prev{float:left;}.prev::before{content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAANlBMVEUAAABAQEBAQEBAQEBAQEBAQEBAQEBBQUFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAWW5SEAAAAEnRSTlMA/fC9r2kXAjMN34F3ZlUu6B40Y5wGAAAAVElEQVQY08XPSw6AIAwEUIbS8lFE739Zq6luGtbM8iXTTMOCZGECiCX/MhIQTyCNz+SRrUc1MWKVvR5KYCN6pUFDRtqq4Sql9IYJ+aI/70f4qdOHblOhAuUcC5KnAAAAAElFTkSuQmCC);}.next{float:right;}.next::after{content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASBAMAAACk4JNkAAAAJFBMVEUAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEC4lvDfAAAAC3RSTlMAx711ZjlFPh3zLASjkrYAAABDSURBVAjXY6AUsGhvcgAzOKR3797YAGIx7t5mvVsAxPLevZ159xYQS3v3zgLrTSDW7tTQBcy7ESyELEIHwhSEyQjbAAH1HsMY8tCHAAAAAElFTkSuQmCC);}@media screen and (max-width:991.98px){nav.mobile{display:block;}nav.side{display:none;}#menuchk:checked ~ nav.side{display:block;}#_m{margin-left:0px;}}#_getting_started:checked ~ nav div ul li[rel=getting_started]>.toc,#_file_formats:checked ~ nav div ul li[rel=file_formats]>.toc,#_user_input:checked ~ nav div ul li[rel=user_input]>.toc,#_interface:checked ~ nav div ul li[rel=interface]>.toc,#_code_editor:checked ~ nav div ul li[rel=code_editor]>.toc,#_sprite_editor:checked ~ nav div ul li[rel=sprite_editor]>.toc,#_map_editor:checked ~ nav div ul li[rel=map_editor]>.toc,#_font_editor:checked ~ nav div ul li[rel=font_editor]>.toc,#_sound_effects:checked ~ nav div ul li[rel=sound_effects]>.toc,#_music_tracks:checked ~ nav div ul li[rel=music_tracks]>.toc,#_memory_overlays:checked ~ nav div ul li[rel=memory_overlays]>.toc,#_visual_editor:checked ~ nav div ul li[rel=visual_editor]>.toc,#_debugger:checked ~ nav div ul li[rel=debugger]>.toc,#_c:checked ~ nav div ul li[rel=c]>.toc,#_basic:checked ~ nav div ul li[rel=basic]>.toc,#_assembly:checked ~ nav div ul li[rel=assembly]>.toc,#_lua:checked ~ nav div ul li[rel=lua]>.toc,#_memory_map:checked ~ nav div ul li[rel=memory_map]>.toc,#_console:checked ~ nav div ul li[rel=console]>.toc,#_audio:checked ~ nav div ul li[rel=audio]>.toc,#_gpio:checked ~ nav div ul li[rel=gpio]>.toc,#_graphics:checked ~ nav div ul li[rel=graphics]>.toc,#_input:checked ~ nav div ul li[rel=input]>.toc,#_mathematics:checked ~ nav div ul li[rel=mathematics]>.toc,#_memory:checked ~ nav div ul li[rel=memory]>.toc,#_bouncing_ball:checked ~ nav div ul li[rel=bouncing_ball]>.toc,#_walking:checked ~ nav div ul li[rel=walking]>.toc,#_cannon:checked ~ nav div ul li[rel=cannon]>.toc,#_sound_effect:checked ~ nav div ul li[rel=sound_effect]>.toc,#_adventure_game:checked ~ nav div ul li[rel=adventure_game]>.toc,#_meg_4_license:checked ~ nav div ul li[rel=meg_4_license]>.toc,#_links:checked ~ nav div ul li[rel=links]>.toc,div.page{display:none;}#_getting_started:checked ~ nav div ul li[rel=getting_started]>ul,#_getting_started:checked ~ nav div ul li[rel=getting_started]>.current,#_getting_started:checked ~ div div[rel=getting_started],#_file_formats:checked ~ nav div ul li[rel=file_formats]>ul,#_file_formats:checked ~ nav div ul li[rel=file_formats]>.current,#_file_formats:checked ~ div div[rel=file_formats],#_user_input:checked ~ nav div ul li[rel=user_input]>ul,#_user_input:checked ~ nav div ul li[rel=user_input]>.current,#_user_input:checked ~ div div[rel=user_input],#_interface:checked ~ nav div ul li[rel=interface]>ul,#_interface:checked ~ nav div ul li[rel=interface]>.current,#_interface:checked ~ div div[rel=interface],#_code_editor:checked ~ nav div ul li[rel=code_editor]>ul,#_code_editor:checked ~ nav div ul li[rel=code_editor]>.current,#_code_editor:checked ~ div div[rel=code_editor],#_sprite_editor:checked ~ nav div ul li[rel=sprite_editor]>ul,#_sprite_editor:checked ~ nav div ul li[rel=sprite_editor]>.current,#_sprite_editor:checked ~ div div[rel=sprite_editor],#_map_editor:checked ~ nav div ul li[rel=map_editor]>ul,#_map_editor:checked ~ nav div ul li[rel=map_editor]>.current,#_map_editor:checked ~ div div[rel=map_editor],#_font_editor:checked ~ nav div ul li[rel=font_editor]>ul,#_font_editor:checked ~ nav div ul li[rel=font_editor]>.current,#_font_editor:checked ~ div div[rel=font_editor],#_sound_effects:checked ~ nav div ul li[rel=sound_effects]>ul,#_sound_effects:checked ~ nav div ul li[rel=sound_effects]>.current,#_sound_effects:checked ~ div div[rel=sound_effects],#_music_tracks:checked ~ nav div ul li[rel=music_tracks]>ul,#_music_tracks:checked ~ nav div ul li[rel=music_tracks]>.current,#_music_tracks:checked ~ div div[rel=music_tracks],#_memory_overlays:checked ~ nav div ul li[rel=memory_overlays]>ul,#_memory_overlays:checked ~ nav div ul li[rel=memory_overlays]>.current,#_memory_overlays:checked ~ div div[rel=memory_overlays],#_visual_editor:checked ~ nav div ul li[rel=visual_editor]>ul,#_visual_editor:checked ~ nav div ul li[rel=visual_editor]>.current,#_visual_editor:checked ~ div div[rel=visual_editor],#_debugger:checked ~ nav div ul li[rel=debugger]>ul,#_debugger:checked ~ nav div ul li[rel=debugger]>.current,#_debugger:checked ~ div div[rel=debugger],#_c:checked ~ nav div ul li[rel=c]>ul,#_c:checked ~ nav div ul li[rel=c]>.current,#_c:checked ~ div div[rel=c],#_basic:checked ~ nav div ul li[rel=basic]>ul,#_basic:checked ~ nav div ul li[rel=basic]>.current,#_basic:checked ~ div div[rel=basic],#_assembly:checked ~ nav div ul li[rel=assembly]>ul,#_assembly:checked ~ nav div ul li[rel=assembly]>.current,#_assembly:checked ~ div div[rel=assembly],#_lua:checked ~ nav div ul li[rel=lua]>ul,#_lua:checked ~ nav div ul li[rel=lua]>.current,#_lua:checked ~ div div[rel=lua],#_memory_map:checked ~ nav div ul li[rel=memory_map]>ul,#_memory_map:checked ~ nav div ul li[rel=memory_map]>.current,#_memory_map:checked ~ div div[rel=memory_map],#_console:checked ~ nav div ul li[rel=console]>ul,#_console:checked ~ nav div ul li[rel=console]>.current,#_console:checked ~ div div[rel=console],#_audio:checked ~ nav div ul li[rel=audio]>ul,#_audio:checked ~ nav div ul li[rel=audio]>.current,#_audio:checked ~ div div[rel=audio],#_gpio:checked ~ nav div ul li[rel=gpio]>ul,#_gpio:checked ~ nav div ul li[rel=gpio]>.current,#_gpio:checked ~ div div[rel=gpio],#_graphics:checked ~ nav div ul li[rel=graphics]>ul,#_graphics:checked ~ nav div ul li[rel=graphics]>.current,#_graphics:checked ~ div div[rel=graphics],#_input:checked ~ nav div ul li[rel=input]>ul,#_input:checked ~ nav div ul li[rel=input]>.current,#_input:checked ~ div div[rel=input],#_mathematics:checked ~ nav div ul li[rel=mathematics]>ul,#_mathematics:checked ~ nav div ul li[rel=mathematics]>.current,#_mathematics:checked ~ div div[rel=mathematics],#_memory:checked ~ nav div ul li[rel=memory]>ul,#_memory:checked ~ nav div ul li[rel=memory]>.current,#_memory:checked ~ div div[rel=memory],#_bouncing_ball:checked ~ nav div ul li[rel=bouncing_ball]>ul,#_bouncing_ball:checked ~ nav div ul li[rel=bouncing_ball]>.current,#_bouncing_ball:checked ~ div div[rel=bouncing_ball],#_walking:checked ~ nav div ul li[rel=walking]>ul,#_walking:checked ~ nav div ul li[rel=walking]>.current,#_walking:checked ~ div div[rel=walking],#_cannon:checked ~ nav div ul li[rel=cannon]>ul,#_cannon:checked ~ nav div ul li[rel=cannon]>.current,#_cannon:checked ~ div div[rel=cannon],#_sound_effect:checked ~ nav div ul li[rel=sound_effect]>ul,#_sound_effect:checked ~ nav div ul li[rel=sound_effect]>.current,#_sound_effect:checked ~ div div[rel=sound_effect],#_adventure_game:checked ~ nav div ul li[rel=adventure_game]>ul,#_adventure_game:checked ~ nav div ul li[rel=adventure_game]>.current,#_adventure_game:checked ~ div div[rel=adventure_game],#_meg_4_license:checked ~ nav div ul li[rel=meg_4_license]>ul,#_meg_4_license:checked ~ nav div ul li[rel=meg_4_license]>.current,#_meg_4_license:checked ~ div div[rel=meg_4_license],#_links:checked ~ nav div ul li[rel=links]>ul,#_links:checked ~ nav div ul li[rel=links]>.current,#_links:checked ~ div div[rel=links],#_:checked ~ div div[rel=_]{display:block;}</style>
- <style rel="theme">hr,table,th,td{border-color:#e1e4e5;}th{background:#d6d6d6;}tr:nth-child(odd){background:#f3f6f6;}a{text-decoration:none;color:#2980B9;}samp{background:rgba(0,0,0,.1);color:#408040;}.content{background:#fcfcfc;color:#404040;font-family:Lato,Helvetica,Neue,Arial,Deja Vu,sans-serif;}.title,.home,h1>a,h2>a,h3>a,h4>a,h5>a,h6>a{background:#2980B9;color:#fcfcfc;}.version{color:rgba(255,255,255,0.3);}.search{border:1px solid #2472a4;background:#fcfcfc;}.nav{background:#343131;color:#d9d9d9;}.nav p{color:#55a5d9;}.nav label:hover,.nav a:hover{background:#4e4a4a;}.nav .current{background:#fcfcfc;color:#404040;}.nav li>ul>li{background:#e3e3e3;}.nav li>ul>li>a{color:#404040;}.nav li>ul>li>a:hover{background:#d6d6d6;}.pre {border:1px solid #e1e4e5;background:#f8f8f8;}.info{background:#e7f2fa;}.info>p:first-child{background:#6ab0de;color:#fff;}.hint{background:#dbfaf4;}.hint>p:first-child{background:#1abc9c;color:#fff;}.warn{background:#ffedcc;}.warn>p:first-child{background:#f0b37e;color:#fff;}.btn{background:#f3f6f6;}.btn:hover{background:#e5ebeb;}.hl_h{background-color:#ccffcc;}.hl_c{color:#808080;font-style:italic;}.hl_p{color:#1f7199;}.hl_o{color:#404040;}.hl_n{color:#0164eb;}.hl_s{color:#986801;}.hl_t{color:#60A050;}.hl_k{color:#a626a4;}.hl_f{color:#2a9292;}.hl_v{color:#e95649;}.ui1{border:1px outset #a0a0a0;background:#a0a0a0;color:#222;}.ui2{background:#ff0000;color:#fff;border-radius:10px;font-weight:bold;}</style>
- </head>
- <body>
- <div class="frame content">
- <input type="radio" name="page" id="_" checked><input type="radio" name="page" id="_getting_started"><input type="radio" name="page" id="_file_formats"><input type="radio" name="page" id="_user_input"><input type="radio" name="page" id="_interface"><input type="radio" name="page" id="_code_editor"><input type="radio" name="page" id="_sprite_editor"><input type="radio" name="page" id="_map_editor"><input type="radio" name="page" id="_font_editor"><input type="radio" name="page" id="_sound_effects"><input type="radio" name="page" id="_music_tracks"><input type="radio" name="page" id="_memory_overlays"><input type="radio" name="page" id="_visual_editor"><input type="radio" name="page" id="_debugger"><input type="radio" name="page" id="_c"><input type="radio" name="page" id="_basic"><input type="radio" name="page" id="_assembly"><input type="radio" name="page" id="_lua"><input type="radio" name="page" id="_memory_map"><input type="radio" name="page" id="_console"><input type="radio" name="page" id="_audio"><input type="radio" name="page" id="_gpio"><input type="radio" name="page" id="_graphics"><input type="radio" name="page" id="_input"><input type="radio" name="page" id="_mathematics"><input type="radio" name="page" id="_memory"><input type="radio" name="page" id="_bouncing_ball"><input type="radio" name="page" id="_walking"><input type="radio" name="page" id="_cannon"><input type="radio" name="page" id="_sound_effect"><input type="radio" name="page" id="_adventure_game"><input type="radio" name="page" id="_meg_4_license"><input type="radio" name="page" id="_links">
- <input type="checkbox" id="menuchk" style="display:none;"><nav class="side nav"><div>
- <div class="title"><a href="https://bztsrc.gitlab.io/meg4"><img alt="MEG-4" src="data:image/png;base64,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"> User's Manual</a><div class="version">0.0.1</div><input id="_q" class="search" type="text" required="required" onkeyup="s(this.value);"></div> <div id="_s" class="nav"></div>
- <div id="_t" class="nav">
- <p>Basics</p>
- <ul>
- <li rel="getting_started"><label class="toc" for="_getting_started">Getting Started</label><div class="current">Getting Started</div><ul>
- <li class="h2"><a href="#in_your_browser" onclick="m()">In Your Browser</a></li>
- <li class="h2"><a href="#installing" onclick="m()">Installing</a></li>
- <li class="h3"><a href="#windows" onclick="m()">Windows</a></li>
- <li class="h3"><a href="#linux" onclick="m()">Linux</a></li>
- <li class="h2"><a href="#running" onclick="m()">Running</a></li>
- <li class="h3"><a href="#command_line_options" onclick="m()">Command Line Options</a></li>
- </ul></li>
- <li rel="file_formats"><label class="toc" for="_file_formats">File Formats</label><div class="current">File Formats</div><ul>
- <li class="h2"><a href="#floppies" onclick="m()">Floppies</a></li>
- <li class="h2"><a href="#project_format" onclick="m()">Project Format</a></li>
- <li class="h3"><a href="#metainfo_txt" onclick="m()">metainfo.txt</a></li>
- <li class="h3"><a href="#program_x" onclick="m()">program.X</a></li>
- <li class="h3"><a href="#sprites_png" onclick="m()">sprites.png</a></li>
- <li class="h3"><a href="#map_tmx" onclick="m()">map.tmx</a></li>
- <li class="h3"><a href="#font_bdf" onclick="m()">font.bdf</a></li>
- <li class="h3"><a href="#sounds_mod" onclick="m()">sounds.mod</a></li>
- <li class="h3"><a href="#musicxx_mod" onclick="m()">musicXX.mod</a></li>
- <li class="h3"><a href="#memxx_txt" onclick="m()">memXX.txt</a></li>
- <li class="h2"><a href="#other_formats" onclick="m()">Other Formats</a></li>
- </ul></li>
- <li rel="user_input"><label class="toc" for="_user_input">User Input</label><div class="current">User Input</div><ul>
- <li class="h2"><a href="#ui_gp" onclick="m()">Gamepad</a></li>
- <li class="h2"><a href="#ui_ptr" onclick="m()">Pointer</a></li>
- <li class="h2"><a href="#ui_kbd" onclick="m()">Keyboard</a></li>
- <li class="h3"><a href="#unicode_codepoint_mode" onclick="m()">UNICODE Codepoint Mode</a></li>
- <li class="h3"><a href="#compose_mode" onclick="m()">Compose Mode</a></li>
- <li class="h3"><a href="#icon_mode" onclick="m()">Icon Mode</a></li>
- <li class="h3"><a href="#katakana_and_hiragana_modes" onclick="m()">Katakana and Hiragana Modes</a></li>
- <li class="h3"><a href="#cyrillic_mode" onclick="m()">Cyrillic Mode</a></li>
- <li class="h3"><a href="#greek_mode" onclick="m()">Greek Mode</a></li>
- </ul></li>
- <li rel="interface"><label class="toc" for="_interface">Interface</label><div class="current">Interface</div><ul>
- <li class="h2"><a href="#game_screen" onclick="m()">Game Screen</a></li>
- <li class="h2"><a href="#editor_screens" onclick="m()">Editor Screens</a></li>
- <li class="h2"><a href="#help_pages" onclick="m()">Help Pages</a></li>
- </ul></li>
- </ul>
- <p>Editors</p>
- <ul>
- <li rel="code_editor"><label class="toc" for="_code_editor">Code Editor</label><div class="current">Code Editor</div><ul>
- <li class="h2"><a href="#programming_language" onclick="m()">Programming Language</a></li>
- <li class="h2"><a href="#user_provided_functions" onclick="m()">User Provided Functions</a></li>
- <li class="h2"><a href="#additional_shortcuts" onclick="m()">Additional Shortcuts</a></li>
- </ul></li>
- <li rel="sprite_editor"><label class="toc" for="_sprite_editor">Sprite Editor</label><div class="current">Sprite Editor</div><ul>
- <li class="h2"><a href="#spr_edit" onclick="m()">Sprite Editor Box</a></li>
- <li class="h2"><a href="#spr_sprs" onclick="m()">Sprite Selector</a></li>
- <li class="h2"><a href="#spr_pal" onclick="m()">Palette</a></li>
- <li class="h2"><a href="#spr_tools" onclick="m()">Toolbar</a></li>
- <li class="h2"><a href="#spr_sel" onclick="m()">Selections</a></li>
- </ul></li>
- <li rel="map_editor"><label class="toc" for="_map_editor">Map Editor</label><div class="current">Map Editor</div><ul>
- <li class="h2"><a href="#map_box" onclick="m()">Map Editor Box</a></li>
- <li class="h2"><a href="#map_tools" onclick="m()">Toolbar</a></li>
- <li class="h2"><a href="#map_sprs" onclick="m()">Sprite Palette</a></li>
- <li class="h2"><a href="#wang_tiles" onclick="m()">Wang Tiles</a></li>
- <li class="h2"><a href="#3d_maze" onclick="m()">3D Maze</a></li>
- </ul></li>
- <li rel="font_editor"><label class="toc" for="_font_editor">Font Editor</label><div class="current">Font Editor</div><ul>
- <li class="h2"><a href="#glyph_editor" onclick="m()">Glyph Editor</a></li>
- <li class="h2"><a href="#glyph_selector" onclick="m()">Glyph Selector</a></li>
- <li class="h2"><a href="#font_tools" onclick="m()">Toolbar</a></li>
- </ul></li>
- <li rel="sound_effects"><label class="toc" for="_sound_effects">Sound Effects</label><div class="current">Sound Effects</div><ul>
- <li class="h2"><a href="#effect_selector" onclick="m()">Effect Selector</a></li>
- <li class="h2"><a href="#effect_editor" onclick="m()">Effect Editor</a></li>
- <li class="h2"><a href="#sfx_tools" onclick="m()">Waveform Toolbar</a></li>
- </ul></li>
- <li rel="music_tracks"><label class="toc" for="_music_tracks">Music Tracks</label><div class="current">Music Tracks</div><ul>
- <li class="h2"><a href="#tracks" onclick="m()">Tracks</a></li>
- <li class="h2"><a href="#channels" onclick="m()">Channels</a></li>
- <li class="h2"><a href="#note_editor" onclick="m()">Note Editor</a></li>
- <li class="h3"><a href="#mus_kbd" onclick="m()">Keyboard</a></li>
- <li class="h2"><a href="#general_midi" onclick="m()">General MIDI</a></li>
- <li class="h3"><a href="#instruments" onclick="m()">Instruments</a></li>
- <li class="h3"><a href="#patterns" onclick="m()">Patterns</a></li>
- <li class="h3"><a href="#tempo" onclick="m()">Tempo</a></li>
- </ul></li>
- <li rel="memory_overlays"><label class="toc" for="_memory_overlays">Memory Overlays</label><div class="current">Memory Overlays</div><ul>
- <li class="h2"><a href="#overlay_selector" onclick="m()">Overlay Selector</a></li>
- <li class="h2"><a href="#overlay_contents" onclick="m()">Overlay Contents</a></li>
- <li class="h2"><a href="#overlay_menu" onclick="m()">Overlay Menu</a></li>
- </ul></li>
- <li rel="visual_editor"><label class="toc" for="_visual_editor">Visual Editor</label><div class="current">Visual Editor</div><ul>
- </ul></li>
- <li rel="debugger"><label class="toc" for="_debugger">Debugger</label><div class="current">Debugger</div><ul>
- <li class="h2"><a href="#code_view" onclick="m()">Code View</a></li>
- <li class="h2"><a href="#data_view" onclick="m()">Data View</a></li>
- <li class="h2"><a href="#registers" onclick="m()">Registers</a></li>
- </ul></li>
- </ul>
- <p>Programming</p>
- <ul>
- <li rel="c"><label class="toc" for="_c">C</label><div class="current">C</div><ul>
- <li class="h2"><a href="#ex_c" onclick="m()">Example Program</a></li>
- <li class="h2"><a href="#description" onclick="m()">Description</a></li>
- <li class="h2"><a href="#pre_compiler" onclick="m()">Pre-compiler</a></li>
- <li class="h2"><a href="#c_lit" onclick="m()">Literals</a></li>
- <li class="h2"><a href="#c_var" onclick="m()">Variables</a></li>
- <li class="h2"><a href="#c_arr" onclick="m()">Arrays and Pointers</a></li>
- <li class="h2"><a href="#c_op" onclick="m()">Operators</a></li>
- <li class="h2"><a href="#c_flow" onclick="m()">Control Flow</a></li>
- <li class="h2"><a href="#c_funcs" onclick="m()">Functions</a></li>
- <li class="h2"><a href="#c_api" onclick="m()">Provided Functions</a></li>
- </ul></li>
- <li rel="basic"><label class="toc" for="_basic">BASIC</label><div class="current">BASIC</div><ul>
- <li class="h2"><a href="#ex_bas" onclick="m()">Example Program</a></li>
- <li class="h2"><a href="#dialect" onclick="m()">Dialect</a></li>
- <li class="h2"><a href="#bas_lit" onclick="m()">Literals</a></li>
- <li class="h2"><a href="#bas_var" onclick="m()">Variables</a></li>
- <li class="h2"><a href="#bas_arr" onclick="m()">Arrays</a></li>
- <li class="h2"><a href="#bas_op" onclick="m()">Operators</a></li>
- <li class="h2"><a href="#bas_flow" onclick="m()">Control Flow</a></li>
- <li class="h2"><a href="#bas_funcs" onclick="m()">Subroutines and Functions</a></li>
- <li class="h2"><a href="#bas_print" onclick="m()">Print Statement</a></li>
- <li class="h2"><a href="#bas_input" onclick="m()">Input Statement</a></li>
- <li class="h2"><a href="#bas_spec" onclick="m()">Peek and Poke</a></li>
- <li class="h2"><a href="#bas_api" onclick="m()">Provided Functions</a></li>
- </ul></li>
- <li rel="assembly"><label class="toc" for="_assembly">Assembly</label><div class="current">Assembly</div><ul>
- <li class="h2"><a href="#ex_asm" onclick="m()">Example Program</a></li>
- <li class="h2"><a href="#asm_desc" onclick="m()">Description</a></li>
- <li class="h2"><a href="#asm_lit" onclick="m()">Literals</a></li>
- <li class="h2"><a href="#asm_var" onclick="m()">Variables</a></li>
- <li class="h2"><a href="#asm_flow" onclick="m()">Control Flow</a></li>
- <li class="h2"><a href="#asm_func" onclick="m()">Functions</a></li>
- <li class="h2"><a href="#asm_api" onclick="m()">Provided Functions</a></li>
- <li class="h2"><a href="#mnemonics" onclick="m()">Mnemonics</a></li>
- </ul></li>
- <li rel="lua"><label class="toc" for="_lua">Lua</label><div class="current">Lua</div><ul>
- <li class="h2"><a href="#ex_lua" onclick="m()">Example Program</a></li>
- <li class="h2"><a href="#further_info" onclick="m()">Further Info</a></li>
- <li class="h2"><a href="#api_differences" onclick="m()">API Differences</a></li>
- </ul></li>
- </ul>
- <p>API Reference</p>
- <ul>
- <li rel="memory_map"><label class="toc" for="_memory_map">Memory Map</label><div class="current">Memory Map</div><ul>
- <li class="h2"><a href="#misc" onclick="m()">Misc</a></li>
- <li class="h2"><a href="#pointer" onclick="m()">Pointer</a></li>
- <li class="h2"><a href="#keyboard" onclick="m()">Keyboard</a></li>
- <li class="h2"><a href="#gamepad" onclick="m()">Gamepad</a></li>
- <li class="h2"><a href="#graphics_processing_unit" onclick="m()">Graphics Processing Unit</a></li>
- <li class="h2"><a href="#digital_signal_processor" onclick="m()">Digital Signal Processor</a></li>
- <li class="h2"><a href="#note_effects" onclick="m()">Note Effects</a></li>
- <li class="h2"><a href="#user_memory" onclick="m()">User Memory</a></li>
- <li class="h2"><a href="#format_string" onclick="m()">Format String</a></li>
- <li class="h2"><a href="#3d_space" onclick="m()">3D Space</a></li>
- <li class="h2"><a href="#code_editor_shortcuts" onclick="m()">Code Editor Shortcuts</a></li>
- </ul></li>
- <li rel="console"><label class="toc" for="_console">Console</label><div class="current">Console</div><ul>
- <li class="h2"><a href="#putc" onclick="m()">putc</a></li>
- <li class="h2"><a href="#printf" onclick="m()">printf</a></li>
- <li class="h2"><a href="#getc" onclick="m()">getc</a></li>
- <li class="h2"><a href="#gets" onclick="m()">gets</a></li>
- <li class="h2"><a href="#trace" onclick="m()">trace</a></li>
- <li class="h2"><a href="#delay" onclick="m()">delay</a></li>
- <li class="h2"><a href="#exit" onclick="m()">exit</a></li>
- </ul></li>
- <li rel="audio"><label class="toc" for="_audio">Audio</label><div class="current">Audio</div><ul>
- <li class="h2"><a href="#sfx" onclick="m()">sfx</a></li>
- <li class="h2"><a href="#music" onclick="m()">music</a></li>
- </ul></li>
- <li rel="gpio"><label class="toc" for="_gpio">GPIO</label><div class="current">GPIO</div><ul>
- <li class="h2"><a href="#gpio_rev" onclick="m()">gpio_rev</a></li>
- <li class="h2"><a href="#gpio_get" onclick="m()">gpio_get</a></li>
- <li class="h2"><a href="#gpio_set" onclick="m()">gpio_set</a></li>
- </ul></li>
- <li rel="graphics"><label class="toc" for="_graphics">Graphics</label><div class="current">Graphics</div><ul>
- <li class="h2"><a href="#cls" onclick="m()">cls</a></li>
- <li class="h2"><a href="#cget" onclick="m()">cget</a></li>
- <li class="h2"><a href="#pget" onclick="m()">pget</a></li>
- <li class="h2"><a href="#pset" onclick="m()">pset</a></li>
- <li class="h2"><a href="#width" onclick="m()">width</a></li>
- <li class="h2"><a href="#text" onclick="m()">text</a></li>
- <li class="h2"><a href="#line" onclick="m()">line</a></li>
- <li class="h2"><a href="#qbez" onclick="m()">qbez</a></li>
- <li class="h2"><a href="#cbez" onclick="m()">cbez</a></li>
- <li class="h2"><a href="#tri" onclick="m()">tri</a></li>
- <li class="h2"><a href="#ftri" onclick="m()">ftri</a></li>
- <li class="h2"><a href="#tri2d" onclick="m()">tri2d</a></li>
- <li class="h2"><a href="#tri3d" onclick="m()">tri3d</a></li>
- <li class="h2"><a href="#tritx" onclick="m()">tritx</a></li>
- <li class="h2"><a href="#mesh" onclick="m()">mesh</a></li>
- <li class="h2"><a href="#rect" onclick="m()">rect</a></li>
- <li class="h2"><a href="#frect" onclick="m()">frect</a></li>
- <li class="h2"><a href="#circ" onclick="m()">circ</a></li>
- <li class="h2"><a href="#fcirc" onclick="m()">fcirc</a></li>
- <li class="h2"><a href="#ellip" onclick="m()">ellip</a></li>
- <li class="h2"><a href="#fellip" onclick="m()">fellip</a></li>
- <li class="h2"><a href="#move" onclick="m()">move</a></li>
- <li class="h2"><a href="#left" onclick="m()">left</a></li>
- <li class="h2"><a href="#right" onclick="m()">right</a></li>
- <li class="h2"><a href="#up" onclick="m()">up</a></li>
- <li class="h2"><a href="#down" onclick="m()">down</a></li>
- <li class="h2"><a href="#color" onclick="m()">color</a></li>
- <li class="h2"><a href="#forw" onclick="m()">forw</a></li>
- <li class="h2"><a href="#back" onclick="m()">back</a></li>
- <li class="h2"><a href="#spr" onclick="m()">spr</a></li>
- <li class="h2"><a href="#dlg" onclick="m()">dlg</a></li>
- <li class="h2"><a href="#stext" onclick="m()">stext</a></li>
- <li class="h2"><a href="#remap" onclick="m()">remap</a></li>
- <li class="h2"><a href="#mget" onclick="m()">mget</a></li>
- <li class="h2"><a href="#mset" onclick="m()">mset</a></li>
- <li class="h2"><a href="#map" onclick="m()">map</a></li>
- <li class="h2"><a href="#maze" onclick="m()">maze</a></li>
- </ul></li>
- <li rel="input"><label class="toc" for="_input">Input</label><div class="current">Input</div><ul>
- <li class="h2"><a href="#getpad" onclick="m()">getpad</a></li>
- <li class="h2"><a href="#prspad" onclick="m()">prspad</a></li>
- <li class="h2"><a href="#relpad" onclick="m()">relpad</a></li>
- <li class="h2"><a href="#getbtn" onclick="m()">getbtn</a></li>
- <li class="h2"><a href="#getclk" onclick="m()">getclk</a></li>
- <li class="h2"><a href="#getkey" onclick="m()">getkey</a></li>
- <li class="h2"><a href="#popkey" onclick="m()">popkey</a></li>
- <li class="h2"><a href="#pendkey" onclick="m()">pendkey</a></li>
- <li class="h2"><a href="#lenkey" onclick="m()">lenkey</a></li>
- <li class="h2"><a href="#speckey" onclick="m()">speckey</a></li>
- </ul></li>
- <li rel="mathematics"><label class="toc" for="_mathematics">Mathematics</label><div class="current">Mathematics</div><ul>
- <li class="h2"><a href="#rand" onclick="m()">rand</a></li>
- <li class="h2"><a href="#rnd" onclick="m()">rnd</a></li>
- <li class="h2"><a href="#float" onclick="m()">float</a></li>
- <li class="h2"><a href="#int" onclick="m()">int</a></li>
- <li class="h2"><a href="#floor" onclick="m()">floor</a></li>
- <li class="h2"><a href="#ceil" onclick="m()">ceil</a></li>
- <li class="h2"><a href="#sgn" onclick="m()">sgn</a></li>
- <li class="h2"><a href="#abs" onclick="m()">abs</a></li>
- <li class="h2"><a href="#exp" onclick="m()">exp</a></li>
- <li class="h2"><a href="#log" onclick="m()">log</a></li>
- <li class="h2"><a href="#pow" onclick="m()">pow</a></li>
- <li class="h2"><a href="#sqrt" onclick="m()">sqrt</a></li>
- <li class="h2"><a href="#rsqrt" onclick="m()">rsqrt</a></li>
- <li class="h2"><a href="#clamp" onclick="m()">clamp</a></li>
- <li class="h2"><a href="#lerp" onclick="m()">lerp</a></li>
- <li class="h2"><a href="#pi" onclick="m()">pi</a></li>
- <li class="h2"><a href="#cos" onclick="m()">cos</a></li>
- <li class="h2"><a href="#sin" onclick="m()">sin</a></li>
- <li class="h2"><a href="#tan" onclick="m()">tan</a></li>
- <li class="h2"><a href="#acos" onclick="m()">acos</a></li>
- <li class="h2"><a href="#asin" onclick="m()">asin</a></li>
- <li class="h2"><a href="#atan" onclick="m()">atan</a></li>
- <li class="h2"><a href="#atan2" onclick="m()">atan2</a></li>
- <li class="h2"><a href="#dotv2" onclick="m()">dotv2</a></li>
- <li class="h2"><a href="#lenv2" onclick="m()">lenv2</a></li>
- <li class="h2"><a href="#scalev2" onclick="m()">scalev2</a></li>
- <li class="h2"><a href="#negv2" onclick="m()">negv2</a></li>
- <li class="h2"><a href="#addv2" onclick="m()">addv2</a></li>
- <li class="h2"><a href="#subv2" onclick="m()">subv2</a></li>
- <li class="h2"><a href="#mulv2" onclick="m()">mulv2</a></li>
- <li class="h2"><a href="#divv2" onclick="m()">divv2</a></li>
- <li class="h2"><a href="#clampv2" onclick="m()">clampv2</a></li>
- <li class="h2"><a href="#lerpv2" onclick="m()">lerpv2</a></li>
- <li class="h2"><a href="#normv2" onclick="m()">normv2</a></li>
- <li class="h2"><a href="#dotv3" onclick="m()">dotv3</a></li>
- <li class="h2"><a href="#lenv3" onclick="m()">lenv3</a></li>
- <li class="h2"><a href="#scalev3" onclick="m()">scalev3</a></li>
- <li class="h2"><a href="#negv3" onclick="m()">negv3</a></li>
- <li class="h2"><a href="#addv3" onclick="m()">addv3</a></li>
- <li class="h2"><a href="#subv3" onclick="m()">subv3</a></li>
- <li class="h2"><a href="#mulv3" onclick="m()">mulv3</a></li>
- <li class="h2"><a href="#divv3" onclick="m()">divv3</a></li>
- <li class="h2"><a href="#crossv3" onclick="m()">crossv3</a></li>
- <li class="h2"><a href="#clampv3" onclick="m()">clampv3</a></li>
- <li class="h2"><a href="#lerpv3" onclick="m()">lerpv3</a></li>
- <li class="h2"><a href="#normv3" onclick="m()">normv3</a></li>
- <li class="h2"><a href="#dotv4" onclick="m()">dotv4</a></li>
- <li class="h2"><a href="#lenv4" onclick="m()">lenv4</a></li>
- <li class="h2"><a href="#scalev4" onclick="m()">scalev4</a></li>
- <li class="h2"><a href="#negv4" onclick="m()">negv4</a></li>
- <li class="h2"><a href="#addv4" onclick="m()">addv4</a></li>
- <li class="h2"><a href="#subv4" onclick="m()">subv4</a></li>
- <li class="h2"><a href="#mulv4" onclick="m()">mulv4</a></li>
- <li class="h2"><a href="#divv4" onclick="m()">divv4</a></li>
- <li class="h2"><a href="#clampv4" onclick="m()">clampv4</a></li>
- <li class="h2"><a href="#lerpv4" onclick="m()">lerpv4</a></li>
- <li class="h2"><a href="#normv4" onclick="m()">normv4</a></li>
- <li class="h2"><a href="#idq" onclick="m()">idq</a></li>
- <li class="h2"><a href="#eulerq" onclick="m()">eulerq</a></li>
- <li class="h2"><a href="#dotq" onclick="m()">dotq</a></li>
- <li class="h2"><a href="#lenq" onclick="m()">lenq</a></li>
- <li class="h2"><a href="#scaleq" onclick="m()">scaleq</a></li>
- <li class="h2"><a href="#negq" onclick="m()">negq</a></li>
- <li class="h2"><a href="#addq" onclick="m()">addq</a></li>
- <li class="h2"><a href="#subq" onclick="m()">subq</a></li>
- <li class="h2"><a href="#mulq" onclick="m()">mulq</a></li>
- <li class="h2"><a href="#rotq" onclick="m()">rotq</a></li>
- <li class="h2"><a href="#lerpq" onclick="m()">lerpq</a></li>
- <li class="h2"><a href="#slerpq" onclick="m()">slerpq</a></li>
- <li class="h2"><a href="#normq" onclick="m()">normq</a></li>
- <li class="h2"><a href="#idm4" onclick="m()">idm4</a></li>
- <li class="h2"><a href="#trsm4" onclick="m()">trsm4</a></li>
- <li class="h2"><a href="#detm4" onclick="m()">detm4</a></li>
- <li class="h2"><a href="#addm4" onclick="m()">addm4</a></li>
- <li class="h2"><a href="#subm4" onclick="m()">subm4</a></li>
- <li class="h2"><a href="#mulm4" onclick="m()">mulm4</a></li>
- <li class="h2"><a href="#mulm4v3" onclick="m()">mulm4v3</a></li>
- <li class="h2"><a href="#mulm4v4" onclick="m()">mulm4v4</a></li>
- <li class="h2"><a href="#invm4" onclick="m()">invm4</a></li>
- <li class="h2"><a href="#trpm4" onclick="m()">trpm4</a></li>
- <li class="h2"><a href="#trns" onclick="m()">trns</a></li>
- </ul></li>
- <li rel="memory"><label class="toc" for="_memory">Memory</label><div class="current">Memory</div><ul>
- <li class="h2"><a href="#inb" onclick="m()">inb</a></li>
- <li class="h2"><a href="#inw" onclick="m()">inw</a></li>
- <li class="h2"><a href="#ini" onclick="m()">ini</a></li>
- <li class="h2"><a href="#outb" onclick="m()">outb</a></li>
- <li class="h2"><a href="#outw" onclick="m()">outw</a></li>
- <li class="h2"><a href="#outi" onclick="m()">outi</a></li>
- <li class="h2"><a href="#memsave" onclick="m()">memsave</a></li>
- <li class="h2"><a href="#memload" onclick="m()">memload</a></li>
- <li class="h2"><a href="#memcpy" onclick="m()">memcpy</a></li>
- <li class="h2"><a href="#memset" onclick="m()">memset</a></li>
- <li class="h2"><a href="#memcmp" onclick="m()">memcmp</a></li>
- <li class="h2"><a href="#deflate" onclick="m()">deflate</a></li>
- <li class="h2"><a href="#inflate" onclick="m()">inflate</a></li>
- <li class="h2"><a href="#time" onclick="m()">time</a></li>
- <li class="h2"><a href="#now" onclick="m()">now</a></li>
- <li class="h2"><a href="#atoi" onclick="m()">atoi</a></li>
- <li class="h2"><a href="#itoa" onclick="m()">itoa</a></li>
- <li class="h2"><a href="#val" onclick="m()">val</a></li>
- <li class="h2"><a href="#str" onclick="m()">str</a></li>
- <li class="h2"><a href="#sprintf" onclick="m()">sprintf</a></li>
- <li class="h2"><a href="#strlen" onclick="m()">strlen</a></li>
- <li class="h2"><a href="#mblen" onclick="m()">mblen</a></li>
- <li class="h2"><a href="#malloc" onclick="m()">malloc</a></li>
- <li class="h2"><a href="#realloc" onclick="m()">realloc</a></li>
- <li class="h2"><a href="#free" onclick="m()">free</a></li>
- </ul></li>
- </ul>
- <p>Tutorials</p>
- <ul>
- <li rel="bouncing_ball"><label class="toc" for="_bouncing_ball">Bouncing Ball</label><div class="current">Bouncing Ball</div><ul>
- <li class="h2"><a href="#displaying_the_ball" onclick="m()">Displaying the Ball</a></li>
- <li class="h2"><a href="#moving_the_ball" onclick="m()">Moving the Ball</a></li>
- <li class="h2"><a href="#bouncing_the_ball" onclick="m()">Bouncing the Ball</a></li>
- <li class="h2"><a href="#adding_a_bat" onclick="m()">Adding a Bat</a></li>
- <li class="h2"><a href="#game_over" onclick="m()">Game Over</a></li>
- <li class="h2"><a href="#restart" onclick="m()">Restart</a></li>
- </ul></li>
- <li rel="walking"><label class="toc" for="_walking">Walking</label><div class="current">Walking</div><ul>
- <li class="h2"><a href="#get_the_spritesheet" onclick="m()">Get the Spritesheet</a></li>
- <li class="h2"><a href="#display_character" onclick="m()">Display Character</a></li>
- <li class="h2"><a href="#changing_directions" onclick="m()">Changing Directions</a></li>
- <li class="h2"><a href="#adding_animation" onclick="m()">Adding Animation</a></li>
- </ul></li>
- <li rel="cannon"><label class="toc" for="_cannon">Cannon</label><div class="current">Cannon</div><ul>
- <li class="h2"><a href="#display_the_turret" onclick="m()">Display the Turret</a></li>
- <li class="h2"><a href="#rotating_the_turret" onclick="m()">Rotating the Turret</a></li>
- <li class="h2"><a href="#adding_a_bullet" onclick="m()">Adding a Bullet</a></li>
- <li class="h2"><a href="#firing_the_cannon" onclick="m()">Firing the Cannon</a></li>
- <li class="h2"><a href="#multiple_bullets" onclick="m()">Multiple Bullets</a></li>
- </ul></li>
- <li rel="sound_effect"><label class="toc" for="_sound_effect">Sound Effect</label><div class="current">Sound Effect</div><ul>
- <li class="h2"><a href="#load_wave" onclick="m()">Load Wave</a></li>
- <li class="h2"><a href="#tuning_and_volume" onclick="m()">Tuning and Volume</a></li>
- <li class="h2"><a href="#number_of_samples" onclick="m()">Number of Samples</a></li>
- <li class="h2"><a href="#save_and_import" onclick="m()">Save and Import</a></li>
- </ul></li>
- <li rel="adventure_game"><label class="toc" for="_adventure_game">Adventure Game</label><div class="current">Adventure Game</div><ul>
- <li class="h2"><a href="#game_state" onclick="m()">Game State</a></li>
- <li class="h2"><a href="#top_level" onclick="m()">Top Level</a></li>
- <li class="h2"><a href="#configuration" onclick="m()">Configuration</a></li>
- <li class="h2"><a href="#rooms" onclick="m()">Rooms</a></li>
- <li class="h2"><a href="#scripts" onclick="m()">Scripts</a></li>
- <li class="h2"><a href="#example_games" onclick="m()">Example Games</a></li>
- </ul></li>
- </ul>
- <p>Appendix</p>
- <ul>
- <li rel="meg_4_license"><label class="toc" for="_meg_4_license">MEG-4 License</label><div class="current">MEG-4 License</div><ul>
- </ul></li>
- <li rel="links"><label class="toc" for="_links">Links</label><div class="current">Links</div><ul>
- </ul>
- </div>
- </div></nav>
- <div id="_m">
- <nav class="mobile title">MEG-4 User's Manual<label for="menuchk" class="menu"></label></nav>
- <div class="page" rel="_">
- <h1>MEG-4 User's Manual</h1>
- <p>Welcome to the manual for the <a href="https://bztsrc.gitlab.io/meg4" target="new">MEG-4</a>, the Free and Open Source virtual fantasy console.</p>
- <div class="imgc"><img class="imgc" width="640" height="358" alt="console.png" src="data:image/png;base64,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"></div>
- <div class="hint"><p><span>Hint</span></p><p> This manual can be used off-line. From the <span class="mouseright"></span> right-click pop-up menu, choose "Save As". But it is also embedded in the
- MEG-4 emulator, just press <kbd>F1</kbd> any time.</p></div><br style="clear:both;"><label class="btn next" accesskey="n" for="_getting_started" title="Getting Started">Next</label></div>
- <div class="page" rel="getting_started"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Basics »</li><li> Getting Started</li></ul><hr></div>
- <h1 id="getting_started">Getting Started<a href="#getting_started"></a></h1>
- <h2 id="in_your_browser">In Your Browser<a href="#in_your_browser"></a></h2>
- <p>If you don't want to install anything, just visit the <a href="https://bztsrc.gitlab.io/meg4" target="new">website</a>, it has an emulator running
- in your browser.</p>
- <h2 id="installing">Installing<a href="#installing"></a></h2>
- <p>Go to the <a href="https://gitlab.com/bztsrc/meg4/tree/binaries" target="new">repository</a> and download the archive for your operating system.</p>
- <h3 id="windows">Windows<a href="#windows"></a></h3>
- <ol><li>download <a href="https://gitlab.com/bztsrc/meg4/raw/binaries/meg4-i686-win-sdl.zip" target="new">meg4-i686-win-sdl.zip</a></li>
- <li>extract it to <samp>C:\Program Files</samp> directory and enjoy!</li></ol>
- <p>This is a portable executable, no actual installation required.</p>
- <h3 id="linux">Linux<a href="#linux"></a></h3>
- <ol><li>download <a href="https://gitlab.com/bztsrc/meg4/raw/binaries/meg4-x86_64-linux-sdl.tgz" target="new">meg4-x86_64-linux-sdl.tgz</a></li>
- <li>extract it to the <samp>/usr</samp> directory and enjoy!</li></ol>
- <p>Alternatively you can download the deb version for <a href="https://gitlab.com/bztsrc/meg4/raw/binaries/meg4_0.0.1-amd64.deb" target="new">Ubuntu</a>
- or <a href="https://gitlab.com/bztsrc/meg4/raw/binaries/meg4_0.0.1-armhf.deb" target="new">RaspiOS</a> and install that with
- <div class="pre"><pre>
- sudo dpkg -i meg4_*.deb
- </pre></div></p>
- <h2 id="running">Running<a href="#running"></a></h2>
- <p>When you run the MEG-4 emulator, your machine's localization will be autodetected, and if possible, the emulator will greet you
- in your own language. The first screen it will show you is the "MEG-4 Floppy Drive" screen.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="load.png" src="data:image/png;base64,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v/89jkJDO/upGAACEIAd+ULefPOtt3bvHnhDmdHYvfutt958sx4vnAAgAAEYGC9ijx69ewciP5Vgjx6dexAGIAAB2HED8PWOAvdURq9eXbtef33nHoQBCEAAdlRdHQX2qdxevXr06NoVgAAEIAAvv0AeftVDkZtuAiAAAQhAAiARAAmARAAkABIBkABIBEACIBEACYBEACQAEgGQAEgUqAD/k64qAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAPUK8DryGgABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEICBBJC4IBWAAAQgARCAAAQgARCAAAQgARCAAAQgARCAAAQgARCAAAQgAAEIQAACEIAABCAAAajn/v0yAyAAAQhAAAIQgAAEYGcAeG2XBiAAAQhAAAIQgAAEYGcDyIloAAIQgAAEIAABCEDR/+cP9gAQgAAEIAABCEAAApCDkM4cAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgEQAJAASAZAASARAAiARAAmARAAkABIBkABIBEACIBEACYBEACQAEgGQAEgEQAIgEQAJgEQAJAASAIkASAAkAiABkAiABEAiABIAiQBIACQCIAGQCIAEQCIAEgCJANg5+j9HACQAAjBYAX7nO8FDEIAABCB5AgweggAEIACpLcBgIQhAAAKQvA3B/+QIgARAAAYfwOA5FQNAAAKQ3AGK4Vd+BiABEIDBljz84CCEAAhAAiARAAmARAAkABIBkABIBEACIBEACYBEACQAEgGQAEgEQAIgEQAJgEQAJAASAZAASARAAiABkAiABEAiABIAiQBIACQCIAGQCIAEQCIAEgCJAEgAJAIgAZAIgARAIgASAIkASAAkAiABkAiABEAiABIAiQBIACQAEgGQAEgEQAIgEQAJgEQAJAASAZAASNRRABsb5R3xtdGVvK/MUWs7xX0db7U/x/vS37atq9s2ARCA1BagQu+73xUfMjFNfPV8weUcz2kylY87Y2+3FDzuW1MeVdmWJ0nPbw7x2O19s5Av6tmz22X36KMrVlitv/gFAEkfACUq+VX70moxud/2PmhKPipkdUsKaGWrcopkpkWu3lOW166vrqmdp/7wAAff161bl3bLzna/f7+j9PSKirq6ekdWKwBJLwDd4agwlHnqIKss03YIVtG641I/y3kKHoVuewDVtbR7omWnzvP+AwN1fDfeaLNZHcnPFRVWa1mZ+Gy1dulitfbpo+ALCcnOTk/Py6uvt9urqurrq6rchmAAkp8Baodg7Q/6bV9UdzLu99WhXDu8qgO0OrDLOcqS3gd0ddj2XFN7i4MQf5acbLeHhAhsRUV2e3p6ly7z5lVU2Gxi+LXbk5Mlv8mT8/L69MnOLiubPDkkRBBcsaJnTwCSHgCqyLTDrbzvfVDznKq9L7ehAtMuoc7TnjxpuzXPx9eurW7Rc9sMwL7v+9/PzrbZBLHBjqqqBg/u0qWoyGqtqho7VgDMyxPzkpOzswVSMe2GGzZsqK8vK7vvvtYT0QAkPwP0X7AJ9JMwGzYUFY0dm+coPV2Ay8uz28VgLODZ7WVlgp9kKJnabPXOnnkGgARACvyTMPPmicMLgc9mm+wsL0/AEwDt9rFjbTblZMzYsVZrtiNxKua22wBIegPIqQy6vAYPrqsTvIqKyspsNmWoLSuTt2w2u72iQjkVIxOnberqnnnGYAAg6QOg9uRzxxwSuJ8m/rZ7FEj17Ck4ybfg5s0Tw61EJk5EW615eeJtuaqqG25QD0GKiuocPfec0Si3AEDSA0DtRajqR9uLRt0vENXOb3uRqvpVvXhKmeJ+z/PNOAqUbrstPT05uY+z++/Pzh48OD1dHJLIQkLS0222urrk5JCQPn0mTxYnZ8Thx6OPKvwASPoA2PYiVOXiLHciyjT1wlL1AinPi1S1a6gXYrlfliUHfQAGat26iRPPZWXiQgRxqZU4+FAuyRJDsDgRI046ywuw6uvr6las+PGPtVsAIOkBoPsFpe631Q9PTuqS3i4H1Q6+7pdmeV6ID8BA7cYbu1yisrJ6V3V1Gzbcd5+4BAuApD+AKoW2g6f6az/qJaDaJds7laJeaqUdrN3vXeqX2knfQ/Cl+tGPxC9gWq3PPdcWHwBJHwC1p5/VS0m9XVrqfY6c4m0YbTu/7YWm2gtgKdgCIOkBIBEAKQj7B9JQ/aQw8fxzAAAAAElFTkSuQmCC"></div><span class="fig">MEG-4 Floppy Drive</span>
- <p>Just drag'n'drop a floppy file onto the drive, or <span class="mouseleft"></span> left click on the drive to open the file selector. These floppies are PNG
- images with additional data, and an empty one looks like this:</p>
- <div class="imgc"><img class="imgc" width="210" height="220" alt="floppy.png" src="data:image/png;base64,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"></div><span class="fig">MEG-4 Floppy</span>
- <p>Other formats are supported too, see <a href="#file_formats" onclick="c('file_formats')">file formats</a> for more details on what else can be imported. Once your floppy is loaded,
- the screen will automatically change to the <a href="#game_screen" onclick="c('game_screen')">game screen</a>.</p>
- <p>Alternatively you can also press <kbd>Esc</kbd> here to get to the <a href="#editor_screens" onclick="c('editor_screens')">editor screens</a> and start creating contents from ground up.</p>
- <h3 id="command_line_options">Command Line Options<a href="#command_line_options"></a></h3>
- <p>On Windows, replace <samp>-</samp> with <samp>/</samp> for the flags (because that's the Windows' way of specifying flags, for example <samp>/n</samp>, <samp>/vv</samp>),
- otherwise all options are identical.</p>
- <p>Use <span class="mouseright"></span> right-click on <samp>meg4.exe</samp>, and from the popup menu select <i>Create shortcut</i>. Then <span class="mouseright"></span> right-click on the newly created
- shortcut file, and from the popup menu choose <i>Properties</i>.
- <div class="imgc"><img class="imgc" width="363" height="416" alt="winshortcut.png" src="data:image/png;base64,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"></div><span class="fig">Setting command line options under Windows</span>
- A window will appear, where you can specify the command line options in the <i>Target</i> field. Press <i>OK</i> to save it. After this,
- don't click on the program, rather click on this shortcut, and the program will start with those command line options. If you
- wish, you can have multiple shortcuts with different options.</p>
- <div class="pre"><pre>
- meg4 [-L <xx>] [-z] [-n] [-w] [-v|-vv] [-s] [-d <dir>] [floppy]
- </pre></div>
- <div class="table"><table><tr><th>Option </th><th>Description </th></tr>
- <tr><td><samp>-L <xx></samp> </td><td>The argument of this flag can be "en", "es", "de", "fr" etc. Using this flag forces a specific language dictionary for the emulator and avoids automatic detection. If there's no such dictionary, then English is used. </td></tr>
- <tr><td><samp>-z</samp> </td><td>On Linux by default, the GTK libraries are run-time linked to get the open file modal. Using this flag will make it call <samp>zenity</samp> instead (requires zenity to be installed on your computer). </td></tr>
- <tr><td><samp>-n</samp> </td><td>Force using the "nearest" interpolation method. By default, it is only used if the screen size is multiple of 320 x 200. Also forces this latter in windowed mode. </td></tr>
- <tr><td><samp>-w</samp> </td><td>Start in windowed mode (by default it is fullscreen) </td></tr>
- <tr><td><samp>-v, -vv</samp> </td><td>Enable verbose mode. <samp>meg4</samp> will print out detailed information to the standard output (as well as your script's <a href="#trace" onclick="c('trace')">trace</a> calls), so run this from a terminal. </td></tr>
- <tr><td><samp>-s</samp> </td><td>Enable strace, tracing of system calls (only if compiled with DEBUG). </td></tr>
- <tr><td><samp>-d <dir></samp> </td><td>Optional, if given, then floppies will be stored in this directory and no open file modal is used. </td></tr>
- <tr><td><samp>floppy</samp> </td><td>If this parameter is given, then the floppy (or any other supported format) is automatically loaded on start. </td></tr></table></div><br style="clear:both;"><label class="btn prev" accesskey="p" for="_">Previous</label><label class="btn next" accesskey="n" for="_file_formats" title="File Formats">Next</label></div>
- <div class="page" rel="file_formats"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Basics »</li><li> File Formats</li></ul><hr></div>
- <h1 id="file_formats">File Formats<a href="#file_formats"></a></h1>
- <p>Although the built-in editors are pretty awesome, MEG-4 is capable of handling various file formats both on export and import
- side to ease creation of content, and make the use of MEG-4 actual fun.</p>
- <h2 id="floppies">Floppies<a href="#floppies"></a></h2>
- <p>MEG-4 stores programs in "floppies". These are image files that look like a real floppy disk. You can save in this format by
- pressing <kbd>Ctrl</kbd>+<kbd>S</kbd>, or by selecting <img class="imgt" width="32" height="16" alt="menu.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACJUlEQVRIx9XUS2hUVxzH8U/uvXMzY8bBRBHRIhotbqwbBRdBcScWLCIoRQulVMVNoSqYhSWibkQXirv4wFfRgguXomALpV0UFyo0hS5asPgIaLSJ875zJ13cCNlYdeX4W53/efzP+X/P75wub9BHnx++Ag9/GNrmLdS7cXAr9M6dtwn+Prfnf9cF3rO6Xjew4eD3F+FlrbEcfjn29cp3SbzuwOUaFKLgJ7hxaPunHwaBfWdv7YBqkp6BsdFHA7Ckf9F8iHJxCdI0LcP40yc/Qnex9wZMTk6WoZKkCyAIo4+hMTE2DOcHv9jdmQS+O3FuFfTNX3QbCj0zu2FGLoignrbDqYpA0myCQhw1od0VxdBMElApT/wDvbP6FmakHg/Dvd9HvoVLR/fXO9MDd+//kUKc7w6g3c76W62sslyYnblWKTchXyzFUEvSe5BWx1dAGOay+flCAHEYTMK/Y08HYWDNwPGOIBC9agzvXT8EN0/uCLK7bIGeGXmQTqFIkhS8rNZD6Cv1gGKx8AnU640AKrXMI89fTLRg7pxZESRpe1lnvoJfT+9sQLXWeABBEIQQ58J+aKUZgTgKTY/L1cZvUCrmV09P/GK8ehU+G7y6DW6f+vI+5PPxYhjYdabUGR4YubZ3KxTzcQxPno1vgpG/RusQhUH/lAeqU/HM7Cds1+CrI9d/hgtDmxdCLgqbsH3o2uj0jSpJewssXTz7T7hz+Zu1HUHgP3tdu/uzdE93AAAAAElFTkSuQmCC"> > <samp>Save</samp> from the menu (see <a href="#interface" onclick="c('interface')">interface</a>). You'll be
- prompted to give a label to the floppy, which will be your program's title as well. To load such floppies, press
- <kbd>Ctrl</kbd>+<kbd>L</kbd>, or just simply drag'n'drop these image files onto the MEG-4 Floppy Drive.</p>
- <p>The low level specification for this format can be found <a href="https://gitlab.com/bztsrc/meg4/blob/main/docs/floppy.md" target="new">here</a>.</p>
- <h2 id="project_format">Project Format<a href="#project_format"></a></h2>
- <p>For convenience, there's also a project format, which is a zip archive containing the console's data in only common and well-known
- formats so that you can use your favourite editor or tool to modify them. You can save in this format by selecting the
- <img class="imgt" width="32" height="16" alt="menu.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACJUlEQVRIx9XUS2hUVxzH8U/uvXMzY8bBRBHRIhotbqwbBRdBcScWLCIoRQulVMVNoSqYhSWibkQXirv4wFfRgguXomALpV0UFyo0hS5asPgIaLSJ875zJ13cCNlYdeX4W53/efzP+X/P75wub9BHnx++Ag9/GNrmLdS7cXAr9M6dtwn+Prfnf9cF3rO6Xjew4eD3F+FlrbEcfjn29cp3SbzuwOUaFKLgJ7hxaPunHwaBfWdv7YBqkp6BsdFHA7Ckf9F8iHJxCdI0LcP40yc/Qnex9wZMTk6WoZKkCyAIo4+hMTE2DOcHv9jdmQS+O3FuFfTNX3QbCj0zu2FGLoignrbDqYpA0myCQhw1od0VxdBMElApT/wDvbP6FmakHg/Dvd9HvoVLR/fXO9MDd+//kUKc7w6g3c76W62sslyYnblWKTchXyzFUEvSe5BWx1dAGOay+flCAHEYTMK/Y08HYWDNwPGOIBC9agzvXT8EN0/uCLK7bIGeGXmQTqFIkhS8rNZD6Cv1gGKx8AnU640AKrXMI89fTLRg7pxZESRpe1lnvoJfT+9sQLXWeABBEIQQ58J+aKUZgTgKTY/L1cZvUCrmV09P/GK8ehU+G7y6DW6f+vI+5PPxYhjYdabUGR4YubZ3KxTzcQxPno1vgpG/RusQhUH/lAeqU/HM7Cds1+CrI9d/hgtDmxdCLgqbsH3o2uj0jSpJewssXTz7T7hz+Zu1HUHgP3tdu/uzdE93AAAAAElFTkSuQmCC"> > <samp>Export ZIP</samp> menu option. To load, you can simply drag'n'drop such zip files into the MEG-4 Floppy Drive.</p>
- <div class="hint"><p><span>Hint</span></p><p> One of the test tools, the <a href="https://gitlab.com/bztsrc/meg4/blob/main/tests/converter" target="new">converter</a> can be used to convert
- floppies into zip archives. And the <a href="https://gitlab.com/bztsrc/meg4_advgame" target="new">advcomp</a> compiler can convert <a href="#adventure_game" onclick="c('adventure_game')">adventure game</a> JSON
- files into playable zip project files.</p></div>
- <p>Files in the project archive:</p>
- <h3 id="metainfo_txt">metainfo.txt<a href="#metainfo_txt"></a></h3>
- <p>A plain text file with the MEG-4 firmware version and the program's title.</p>
- <h3 id="program_x">program.X<a href="#program_x"></a></h3>
- <p>Your program's source code, created in the <a href="#code_editor" onclick="c('code_editor')">code editor</a>, as a plain text file. You can use any text editor to modify. On export,
- newlines are replaced with CRLF for Windows compatibility, on import it doesn't matter if lines are ended with NL or with CRLF,
- both supported.</p>
- <p>The source code must start with a special first line, a <samp>#!</samp> shebang followed by the programming language used. For example
- <samp>#!c</samp> or <samp>#!lua</samp>. This language code must also match the extension in the file name, eg: <i>program.c</i> or <i>program.lua</i>.</p>
- <h3 id="sprites_png">sprites.png<a href="#sprites_png"></a></h3>
- <p>A 256 x 256 pixels indexed PNG file, containing the 256 colors palette and all of the 1024 sprites, each 8 x 8 pixels, created
- in the <a href="#sprite_editor" onclick="c('sprite_editor')">sprite editor</a>. This image file is editable by <a href="http://grafx2.chez.com" target="new">GrafX2</a>, <a href="https://www.gimp.org" target="new">GIMP</a>, Paint etc.
- On import, true color images will be converted to the default MEG-4 palette using the smallest weighted sRGB distance method. This
- works, but not looking particularly good, therefore it is recommended to save and import paletted PNG images instead. Sprites can
- also be imported from <a href="http://www.gamers.org/dEngine/quake3/TGA.txt" target="new">Truevision TARGA</a> (.tga) images, if they are indexed and have
- the correct dimensions of 256 x 256 pixels.</p>
- <h3 id="map_tmx">map.tmx<a href="#map_tmx"></a></h3>
- <p>The map, created in the <a href="#map_editor" onclick="c('map_editor')">map editor</a>, in a format that can be used with the <a href="https://www.mapeditor.org" target="new">Tiled MapEditor</a>. Only
- CSV encoded <i>.tmx</i> is generated, but on import base64 encoded and compressed <i>.tmx</i> files can be loaded too (everything except
- zstd). Furthermore PNG or TARGA images are supported on import too, provided they are indexed and their dimensions match the
- required 320 x 200 pixels. The palette in these images aren't used, except the spritebank selector is stored in the first entry
- (index 0) alpha channel.</p>
- <h3 id="font_bdf">font.bdf<a href="#font_bdf"></a></h3>
- <p>The font, created with the <a href="#font_editor" onclick="c('font_editor')">font editor</a>, in a format that can be edited by many tools, like xmbdfed or gbdfed. Obviously I'd
- recommend my <a href="https://gitlab.com/bztsrc/scalable-font2#font-editor" target="new">SFNEdit</a> instead, and <a href="https://fontforge.org" target="new">FontForge</a> works perfectly
- too. On import, besides of <a href="https://www.x.org/docs/BDF/bdf.pdf" target="new">X11 Bitmap Distribution Format</a> (.bdf),
- <a href="https://www.win.tue.nl/~aeb/linux/kbd/font-formats-1.html" target="new">PC Screen Font 2</a> (.psfu, .psf2),
- <a href="https://gitlab.com/bztsrc/scalable-font2/blob/master/docs/sfn_format.md" target="new">Scalable Screen Font</a> (.sfn) and FontForge's native
- <a href="https://fontforge.org/docs/techref/sfdformat.html" target="new">SplineFontDB</a> (.sfd, bitmap variant only) supported too.</p>
- <h3 id="sounds_mod">sounds.mod<a href="#sounds_mod"></a></h3>
- <p>The <a href="#sound_effects" onclick="c('sound_effects')">sound effects</a> you created in the editor in Amiga MOD format. See music below. The song must be named <samp>MEG-4 SFX</samp>.</p>
- <p>All 31 waveforms are stored in this file, as for the note patterns only the first pattern used, and only one channel (64 notes
- in total, one for each sound effect).</p>
- <h3 id="musicxx_mod">musicXX.mod<a href="#musicxx_mod"></a></h3>
- <p>The <a href="#music_tracks" onclick="c('music_tracks')">music tracks</a> you created in the editor in Amiga MOD format. The <i>XX</i> number in the file name is a two digit hexadecimal
- number, which represents the track number (from <samp>00</samp> to <samp>07</samp>). The song must be named <samp>MEG-4 TRACKXX</samp>, where <i>XX</i> must be the
- same hexadecimal number as in the filename. There are dozens of third party programs to edit these files, just google
- "<a href="https://en.wikipedia.org/wiki/Music_tracker" target="new">music tracker</a>", for example <a href="https://milkytracker.org" target="new">MilkyTracker</a> or
- <a href="https://openmpt.org" target="new">OpenMPT</a>, but for a true retro feeling, I'd recommend the moderized clone of
- <a href="https://github.com/8bitbubsy/ft2-clone" target="new">FastTracker II</a>, available for both Linux and Windows.</p>
- <p>From music files, only those waveforms are loaded that are referenced from the notes.</p>
- <p>You can find a huge database of downloadable Amiga MOD files at <a href="https://modarchive.org" target="new">modarchive.org</a>. But not all files are
- actually in <i>.mod</i> format on that site (some are <i>.xm</i>, <i>.it</i> or <i>.s3m</i> etc.); you'll have to load those in a tracker and save
- them as a <i>.mod</i> first.</p>
- <div class="warn"><p><span>Warning</span></p><p> The Amiga MOD format is a lot more featureful than what the MEG-4 <a href="#digital_signal_processor" onclick="c('digital_signal_processor')">DSP</a> chip can handle. Keep
- this in mind when you edit <i>.mod</i> files in third party trackers! Waveforms can't be longer than 16376 samples and songs longer
- than 16 patterns (1024 rows) will be truncated on import. Pattern order will be linearized, and although pattern break 0xD
- handled, other pattern commands are simply skipped. Also if you import multiple tracks, then they will share the same 31 samples.</p></div>
- <p>Music can also be imported from MIDI files, but these files only store the musical note sheet, and not the waveforms like Amiga
- MOD files do. <a href="#general_midi" onclick="c('general_midi')">General MIDI</a> Patch has standardized the instrument codes though, and MEG-4 has some built-in wavepatterns for
- these, but due to size constraints those are not the best quality, so importing your own wavepatterns with MIDI files is strongly
- recommended.</p>
- <h3 id="memxx_txt">memXX.txt<a href="#memxx_txt"></a></h3>
- <p>Hexdump of the <a href="#memory_overlays" onclick="c('memory_overlays')">memory overlays</a> data (which are binary blobs by nature). Here <i>XX</i> is a hexadecimal number from <samp>00</samp> to <samp>FF</samp>. The
- format is the same as <a href="https://en.wikipedia.org/wiki/Hex_dump" target="new">hexdump -C</a>'s, you can edit these with a text editor. On import,
- binary files by the name <i>memXX.bin</i> also supported. For example, if you want to embed a file into your MEG-4 program, then name
- it <i>mem00.bin</i>, drap'n'drop it into the emulator, and afterwards you'll be able to load it in your program with the <a href="#memload" onclick="c('memload')">memload</a>
- function.</p>
- <h2 id="other_formats">Other Formats<a href="#other_formats"></a></h2>
- <p>Normally waveforms are automatically loaded from Amiga MOD files, but you can also individually import and export wave patterns
- in <i>.wav</i> (RIFF Wave 44100 Hz, 8-bit, mono) format. These are editable with <a href="https://www.audacityteam.org" target="new">Audacity</a> for example.
- If the imported file is named as <i>dspXX.wav</i>, where <i>XX</i> is a hexadecimal number between <samp>01</samp> and <samp>1F</samp>, then the waveform is
- loaded at that position, otherwise at the first empty slot.</p>
- <p>You can import MEG-4 Color Themes from "GIMP Palette" files. These are simple text files with a little header, and in each line
- red, green and blue numeric values. Each color entry line defines the color of a specific UI element, see the default theme
- <a href="https://gitlab.com/bztsrc/meg4/blob/main/src/misc/theme.gpl" target="new">src/misc/theme.gpl</a> for an example. Theme files can also be edited
- visually using <a href="https://www.gimp.org" target="new">GIMP</a> or <a href="http://www.gpick.org" target="new">Gpick</a> programs too.</p>
- <p>By default, MEG-4 supports the <i>Raspberry Pi 3B+</i> GPIO pin layout, but you can load any arbitrary configuration from a plain text
- file. Here the first line must be "GPIO Layout", the second line is the name of the board, the third line is the device file, and
- the rest is a list of physical pin - GPIO register offset mappings (where -1 means the pin is not assigned to the GPIO chip, eg.
- voltage or ground pins). For an example, see <a href="https://gitlab.com/bztsrc/meg4/blob/main/src/misc/gpio.txt" target="new">src/misc/gpio.txt</a>.</p>
- <p>It is also possible to import AdvGame 2.0 <a href="#adventure_game" onclick="c('adventure_game')">Adventure Game</a> archives, although point'n'click games will be reduced to textual
- games.</p>
- <p>Furthermore, you can import PICO-8 cartridges (both in <i>.p8</i> and <i>.p8.png</i> formats) and TIC-80 cartridges (both in <i>.tic</i> and
- <i>.tic.png</i> formats), however you'll have to adjust the imported source code, because their memory layouts and API calls are
- different to MEG-4's. But at least you'll get their assets properly. The TIC-80 project format isn't supported because those
- files are unidentifiable. If you really want to import such a file, then first you'll have to convert it using the <samp>prj2tic</samp>
- tool, which can be found in the TIC-80 source repo.</p>
- <p>Exporting into these cartridges is not possible, because the MEG-4 is lot more featureful than the competition. There's simply
- no place for all the MEG-4 features in those files.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_getting_started" title="Getting Started">Previous</label><label class="btn next" accesskey="n" for="_user_input" title="User Input">Next</label></div>
- <div class="page" rel="user_input"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Basics »</li><li> User Input</li></ul><hr></div>
- <h1 id="user_input">User Input<a href="#user_input"></a></h1>
- <h2 id="ui_gp">Gamepad<a href="#ui_gp"></a></h2>
- <p>The first gamepad's buttons and joysticks are mapped to the keyboard, they are working simultaniously. For example it doesn't
- matter if you press Ⓧ on the controller, or <kbd>X</kbd> on the keyboard, in both case both gamepad button flag and keyboard
- state flag will be set. The mapping can be changed by writing the keyboard scancodes to MEG-4's memory, see <a href="#memory_map" onclick="c('memory_map')">memory map</a> for
- details. The default mapping goes like cursor arrows are the directions ◁, △, ▽, ▷; the <kbd>Space</kbd> is the primary
- button Ⓐ, <kbd>C</kbd> is the secondary button Ⓑ and <kbd>X</kbd> is Ⓧ, <kbd>Z</kbd> is Ⓨ. The Konami Code is working too
- (see <samp>KEY_CHEAT</samp> scancode).</p>
- <h2 id="ui_ptr">Pointer<a href="#ui_ptr"></a></h2>
- <p>Coordinates and button pressed states can be easily accessed from the MEG-4's memory. Scrolling (both vertical and if supported,
- horizontal) handled as if your mouse had up / down or left / right buttons.</p>
- <h2 id="ui_kbd">Keyboard<a href="#ui_kbd"></a></h2>
- <p>For convenience, it has several shortcuts and multiple input methods. All characters required for programming can be accessed with
- an <kbd>Alt</kbd> combination, regardless what keyboard layout the platform is using:</p>
- <div class="imgc"><img class="imgc" width="694" height="256" alt="keyboard.png" src="data:image/png;base64,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"></div><span class="fig">Left <kbd>Alt</kbd> combinations</span>
- <div class="table"><table><tr><th>Key Combination </th><th>Description </th></tr>
- <tr><td><kbd>GUI</kbd> </td><td>Or Super, sometimes has a <img class="imgt" width="22" height="22" alt="gui.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAdVBMVEUAAABDPz4/QT5vcW5EfLmIiIh1krPAhUyRkZGWlpaYmJidnZ26l3qjo6OlpaWnp6e3t7e7u7u8vLzAwMDExMTIyMjMzMzQ0NDU1NTV1dXW1tbY2Njd3d3g4ODh4eHl5eXo6Ojp6ent7e3x8fH29vb6+vr+/v7Qa9GYAAAAAXRSTlMAQObYZgAAALBJREFUKM9tkssOgkAMRStaBREQeQ3iMPLy/z/Ra7poIj2bk9yTTGZRIpfwjsQReS79+Icv2VNRvQ2qgvhhwsSVCUINLocoik7qukZogAzqpkFogQzqtkXogAzqrkNwQAa1cwgDuB3BWT0MCC8ThNEEIQB5Wx0CwgRkUE8TwgxkUM8zwgJkUC8LwgpkUK8rwgbk/+ptQ/iYIPRPg54pze4GWUqO4+uOmH9nku/PJ/f0BfJoJqEKiOLsAAAAAElFTkSuQmCC"> logo on it. UNICODE codepoint input mode. </td></tr>
- <tr><td><kbd>AltGr</kbd> </td><td>The right Alt key, activates Compose mode when pressed alone. </td></tr>
- <tr><td><kbd>Alt</kbd>+<kbd>U</kbd> </td><td>In case your keyboard lacks the <kbd>GUI</kbd> key, UNICODE input mode too. </td></tr>
- <tr><td><kbd>Alt</kbd>+<kbd>Space</kbd> </td><td>Fallback Compose, for keyboards without the <kbd>AltGr</kbd> key. </td></tr>
- <tr><td><kbd>Alt</kbd>+<kbd>I</kbd> </td><td>Enter icon (emoticons) input mode. </td></tr>
- <tr><td><kbd>Alt</kbd>+<kbd>G</kbd> </td><td>Enter Greek input mode. </td></tr>
- <tr><td><kbd>Alt</kbd>+<kbd>J</kbd> </td><td>Enter Hiragana input mode. </td></tr>
- <tr><td><kbd>Alt</kbd>+<kbd>K</kbd> </td><td>Enter Katakana input mode. </td></tr>
- <tr><td><kbd>Alt</kbd>+<kbd>C</kbd> </td><td>Enter Cyrillic input mode. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>S</kbd> </td><td>Save floppy. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>L</kbd> </td><td>Load floppy. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>R</kbd> </td><td>Run your program. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>⏎Enter</kbd> </td><td>Toggle fullscreen mode. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>A</kbd> </td><td>Select all. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>I</kbd> </td><td>Invert selection. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>X</kbd> </td><td>Cut, copy to clipboard and delete. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>C</kbd> </td><td>Copy to clipboard. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>V</kbd> </td><td>Paste from clipboard. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>Z</kbd> </td><td>Undo. </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>Y</kbd> </td><td>Redo. </td></tr>
- <tr><td><kbd>F1</kbd> </td><td>Built-in help pages (the API Reference in this manual, see <a href="#interface" onclick="c('interface')">interface</a>). </td></tr>
- <tr><td><kbd>F2</kbd> </td><td><a href="#code_editor" onclick="c('code_editor')">Code Editor</a> </td></tr>
- <tr><td><kbd>F3</kbd> </td><td><a href="#sprite_editor" onclick="c('sprite_editor')">Sprite Editor</a> </td></tr>
- <tr><td><kbd>F4</kbd> </td><td><a href="#map_editor" onclick="c('map_editor')">Map Editor</a> </td></tr>
- <tr><td><kbd>F5</kbd> </td><td><a href="#font_editor" onclick="c('font_editor')">Font Editor</a> </td></tr>
- <tr><td><kbd>F6</kbd> </td><td><a href="#sound_effects" onclick="c('sound_effects')">Sound Effects</a> </td></tr>
- <tr><td><kbd>F7</kbd> </td><td><a href="#music_tracks" onclick="c('music_tracks')">Music Tracks</a> </td></tr>
- <tr><td><kbd>F8</kbd> </td><td><a href="#memory_overlays" onclick="c('memory_overlays')">Memory Overlays</a> Editor </td></tr>
- <tr><td><kbd>F9</kbd> </td><td><a href="#visual_editor" onclick="c('visual_editor')">Visual Editor</a> </td></tr>
- <tr><td><kbd>F10</kbd> </td><td><a href="#debugger" onclick="c('debugger')">Debugger</a> </td></tr>
- <tr><td><kbd>F11</kbd> </td><td>Toggle fullscreen mode. </td></tr>
- <tr><td><kbd>F12</kbd> </td><td>Save screen as <samp>meg4_scr_(unix timestamp).png</samp>. </td></tr></table></div>
- <h3 id="unicode_codepoint_mode">UNICODE Codepoint Mode<a href="#unicode_codepoint_mode"></a></h3>
- <p>In this mode you can enter hex numbers (<samp>0</samp> to <samp>9</samp> and <samp>A</samp> to <samp>F</samp>). Instead of these separately pressed keys, the codepoint they
- describe will be added as if your keyboard had that key. For example the sequence <kbd>GUI</kbd>, <kbd>2</kbd>, <kbd>e</kbd>,
- <kbd>⏎Enter</kbd> will add a <samp>.</samp> dot, because codepoint <samp>U+0002E</samp> is the <samp>.</samp> dot character.</p>
- <div class="info"><p><span>Note</span></p><p> Only the Basic Multilingual Plane (<samp>U+00000</samp> to <samp>U+0FFFF</samp>) supported, with some exceptions for the emoticons range starting
- at <samp>U+1F600</samp>. Other codepoints will be simply skipped.</p></div>
- <p>This mode automatically quits after the character is entered.</p>
- <h3 id="compose_mode">Compose Mode<a href="#compose_mode"></a></h3>
- <p>In compose mode you can add acute, umlaut, tilde etc. to the characters. For example the sequence <kbd>AltGr</kbd>, <kbd>a</kbd>,
- <kbd>'</kbd> will add <samp>á</samp>, or <kbd>AltGr</kbd>, <kbd>s</kbd>, <kbd>s</kbd> will add <samp>ß</samp>, and another example, <kbd>AltGr</kbd>,
- <kbd>c</kbd>, <kbd>,</kbd> will add <samp>ç</samp>, etc. You can use <kbd>Shift</kbd> in combination with the letter to get the uppercase
- variants.</p>
- <p>This mode automatically quits after the character is entered.</p>
- <h3 id="icon_mode">Icon Mode<a href="#icon_mode"></a></h3>
- <p>In icon mode you can add special icon characters, representing the emulator's input (like the sequence <kbd>Alt</kbd>+<kbd>I</kbd>,
- <kbd>m</kbd> will add the <samp>🖱</samp> mouse icon, and <kbd>Alt</kbd>+<kbd>I</kbd>, <kbd>a</kbd> will add the icon of the gamepad's
- <samp>Ⓐ</samp> button) as well as emoji icons (like <kbd>Alt</kbd>+<kbd>I</kbd>, <kbd>;</kbd>, <kbd>)</kbd> will add the character <samp>😉</samp>,
- or <kbd>Alt</kbd>+<kbd>I</kbd>, <kbd><</kbd>, <kbd>3</kbd> will produce <samp>❤</samp>).</p>
- <p>This mode automatically quits after the character is entered.</p>
- <h3 id="katakana_and_hiragana_modes">Katakana and Hiragana Modes<a href="#katakana_and_hiragana_modes"></a></h3>
- <p>Similar to icon mode, but here you can type the Romaji letters of pronounced sound to get the character. For example the sequence
- <kbd>Alt</kbd>+<kbd>K</kbd>, <kbd>n</kbd>, <kbd>a</kbd>, <kbd>n</kbd>, <kbd>i</kbd>, <kbd>k</kbd>, <kbd>a</kbd> is interpreted
- as three sounds, and therefore will add the three characters <samp>ナニヵ</samp>. Also, punctation works as expected, for example
- <kbd>Alt</kbd>+<kbd>K</kbd>, <kbd>.</kbd> will produce Japanese full stop character <samp>。</samp>.</p>
- <p>You can use <kbd>Shift</kbd> in combination with the first letter to get the uppercase variants, for example
- <kbd>Alt</kbd>+<kbd>K</kbd>, <kbd>Shift</kbd>+<kbd>s</kbd>, <kbd>u</kbd> will produce <samp>ス</samp> and not <samp>ㇲ</samp>.</p>
- <p>This mode remains active after the character is entered, press <kbd>Esc</kbd> to return to normal input mode.</p>
- <h3 id="cyrillic_mode">Cyrillic Mode<a href="#cyrillic_mode"></a></h3>
- <p>It is based on KOI8-RU, but some letters are mapped to number and symbol keys. For example <kbd>Alt</kbd>+<kbd>C</kbd>,
- <kbd>Shift</kbd>+<kbd>l</kbd>, <kbd>e</kbd>, <kbd>n</kbd>, <kbd>i</kbd>, <kbd>n</kbd> will produce the characters <samp>Ленин</samp>.</p>
- <p>This mode remains active after the character is entered, press <kbd>Esc</kbd> to return to normal input mode.</p>
- <h3 id="greek_mode">Greek Mode<a href="#greek_mode"></a></h3>
- <p>Tries to be phonetically correct, but there's no one-to-one mapping with the Latin alphabet. For example
- <kbd>Alt</kbd>+<kbd>G</kbd>, <kbd>Shift</kbd>+<kbd>p</kbd>, <kbd>l</kbd>, <kbd>a</kbd>, <kbd>t</kbd>, <kbd>o</kbd> <kbd>n</kbd>,
- will produce the characters <samp>Πλατων</samp>.</p>
- <p>This mode remains active after the character is entered, press <kbd>Esc</kbd> to return to normal input mode.</p>
- <div class="info"><p><span>Note</span></p><p> This feature is implemented using data tables, new combinations can be added to <samp>src/inp.c</samp> any time without coding skills.</p></div><br style="clear:both;"><label class="btn prev" accesskey="p" for="_file_formats" title="File Formats">Previous</label><label class="btn next" accesskey="n" for="_interface" title="Interface">Next</label></div>
- <div class="page" rel="interface"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Basics »</li><li> Interface</li></ul><hr></div>
- <h1 id="interface">Interface<a href="#interface"></a></h1>
- <p>By default the screen will be blurry to mimic old CRT monitors. You can turn this off with the <samp>-n</samp> (or <samp>/n</samp> on Windows)
- command line flag, however then pixels won't be equally sized. You can counteract this by switching to windowed mode, where
- the screen size will be always exact multiple of 320 x 200 pixels.</p>
- <h2 id="game_screen">Game Screen<a href="#game_screen"></a></h2>
- <p>By default, you'll see the game screen, with your game running (or the MEG-4 Floppy Drive if there's no game loaded). When you
- press <kbd>Esc</kbd> on this screen, then you'll switch to editor mode.</p>
- <h2 id="editor_screens">Editor Screens<a href="#editor_screens"></a></h2>
- <p>If you press <kbd>Esc</kbd> (no re-compilation) or <kbd>Ctrl</kbd>+<kbd>R</kbd> (re-compiles your program) in any of the editor
- modes then you'll return to the game screen.</p>
- <p>All editors are themable, to recolor the entire interface, just drag'n'drop a GIMP Palette file into the screen. See
- <a href="#other_formats" onclick="c('other_formats')">other formats</a> for details.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="help.png" src="data:image/png;base64,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BkByQvJoAetzQtKJyBcRcXHD5uaEVAnJxwLGsnPTAjDiKA6gHZEPgFjA2H3fzAEUuhYVLecJISeEVnCpHga6YVBOumFQTgFECF8wAkCEABABIEIAiAAQIQBEAIgQACIARCgrAFar1oyGpmyGmOFPjVIB0KSrV22Fw3eE74blaggjBKLOAEwcrapouIpYM1ur4XAeUVkPrRENsDE9icRNou4/oxpOZxyb4r3qvlu0Bv7SXxb/TUV74y0wKEM3LWDCaFWGvjaX1dhFD0e00t8cDcQRHcccS+Ov9os+Zf496kbSsrGr2qN5WXhaZQtRUbSOIRwg9aBc9vGdXwF1GcDYaFUxq2cT15YFFOHoQ9HIQs6qdayICutTwrWAsZG0iu6QNs45h/8MxWjS96pr8e0zcy2tc/wGO6IuAuiOFWTf98V5jJWNBYyq4PDrjAUUFuhFBzER4WlOQsQBFMUkC1gPYDMLaA5nzsy+EynaJ2b9kwBgrwAstlXVJLaC9Qir1hhXzrWMxpm0KmMHwFj1KNy7NOFUwdZdng1X3T1gQwDjlBfNMJr1tW/0P4Sy3A/YpBum69dumsN5Of9uADbLAUQIABEAIgSACAARAkAEgAgBIAJABIAAiAAQASBCAIgAECEARACIEAAiAEQIABEAIgSACAARAkAEgAgBIAJAhAAQASBCAIgAECEARACIEAAiAEQIABEAIgSACAARAkAEgAgBIAJABIAAiAAQASBCAIgAECEARACIEAAiAEQIABEAIgSACAARAkAEgAgBIAJAhAAQASBCAIgAECEARACIEAAiAEQIABEAIgSACAARAkAEgAgAARABIAJA/hQIABEAIgSACAARAkAEgAgBIAJAhAAQASBCAIgAECEARACIEAAiAEQIABEAIgSACAARAkAEgAgBIAJAhAAQASBCAIgAECEARACIABAAEQAiAEQIABEAIgSACAARAkAEgAgBIAJAhAAQASBCAIgAECEARACIEAAiAEQIABEAIgSACAARAkAEgAgBIAJAhAAQASBCAIgAECEARACIABAAEQAiAEQIABEAIgSACAARAkAEgAgBIAJAhAAQASBCAIgAECEARACIEAAiAEQIABEAIgSACAARAkAEgAgBIAJAhAAQASBCAIgAEAEgACIARACIEACivGm71v8D5im/+711JaoAAAAASUVORK5CYII="></div><span class="fig">Help and the Menu</span>
- <p>All editors have a menu on the top. By clicking on the <img class="imgt" width="32" height="16" alt="menu.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACJUlEQVRIx9XUS2hUVxzH8U/uvXMzY8bBRBHRIhotbqwbBRdBcScWLCIoRQulVMVNoSqYhSWibkQXirv4wFfRgguXomALpV0UFyo0hS5asPgIaLSJ875zJ13cCNlYdeX4W53/efzP+X/P75wub9BHnx++Ag9/GNrmLdS7cXAr9M6dtwn+Prfnf9cF3rO6Xjew4eD3F+FlrbEcfjn29cp3SbzuwOUaFKLgJ7hxaPunHwaBfWdv7YBqkp6BsdFHA7Ckf9F8iHJxCdI0LcP40yc/Qnex9wZMTk6WoZKkCyAIo4+hMTE2DOcHv9jdmQS+O3FuFfTNX3QbCj0zu2FGLoignrbDqYpA0myCQhw1od0VxdBMElApT/wDvbP6FmakHg/Dvd9HvoVLR/fXO9MDd+//kUKc7w6g3c76W62sslyYnblWKTchXyzFUEvSe5BWx1dAGOay+flCAHEYTMK/Y08HYWDNwPGOIBC9agzvXT8EN0/uCLK7bIGeGXmQTqFIkhS8rNZD6Cv1gGKx8AnU640AKrXMI89fTLRg7pxZESRpe1lnvoJfT+9sQLXWeABBEIQQ58J+aKUZgTgKTY/L1cZvUCrmV09P/GK8ehU+G7y6DW6f+vI+5PPxYhjYdabUGR4YubZ3KxTzcQxPno1vgpG/RusQhUH/lAeqU/HM7Cds1+CrI9d/hgtDmxdCLgqbsH3o2uj0jSpJewssXTz7T7hz+Zu1HUHgP3tdu/uzdE93AAAAAElFTkSuQmCC"> icon, a pop up menu will appear, from where you can
- access various functions, most of which also accessible through keyboard shortcuts (see <a href="#ui_kbd" onclick="c('ui_kbd')">keyboard</a>). You can also access
- the built-in help pages from here, however that's always accessible in all editors by pressing <kbd>F1</kbd> too.</p>
- <h2 id="help_pages">Help Pages<a href="#help_pages"></a></h2>
- <p>On the help pages screen, you can click on the links, and you can also press <kbd>Backspace</kbd> to return to the previous
- help page in history. If the history is empty, then this will return to the Table of Contents page. The help screen is the
- exception to the rule, because pressing <kbd>Esc</kbd> here does not always return to the game screen, instead it returns to the
- screen where it was invoked from.</p>
- <p>To start a search, you can click on the search input box on the top right, or just start typing what you're looking for.</p>
- <p>The built-in help pages reader is actually a very minimal MarkDown viewer, and it shows exactly the same info that were used
- to generate this manual (but this manual you're reading now has more sections, the built-in one is limited to the API Reference).</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_user_input" title="User Input">Previous</label><label class="btn next" accesskey="n" for="_code_editor" title="Code Editor">Next</label></div>
- <div class="page" rel="code_editor"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Code Editor</li></ul><hr></div>
- <h1 id="code_editor">Code Editor<a href="#code_editor"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="code.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABDklEQVQ4y7XRvSvEARzH8RddeSjpLo+DxWCSiT9AhJLlNhsZzFJS1xmE8idYTAyS0SIpAzaDInFK55ynzp2OkiTDbzF4qh+f9fvt/Xl/+5b4ZS6ub9bgLZOOg/1dUCpkIj8tbK/0JuEhexCH59JaUKyo+RuDkq8Gm0td09DcUpuEWPQV7B0NgLb27sn/MdhZn12DxrpUHKqr7sH5WQbkbu8S0DOcnvvbL6wvj21BTfSoEyrL8iB1fAnyuVwC+kYycx8B4Q0WxjuGoCF6FTSXBzefnQTNhVx6EvpHi/OfAcIblMdiM1C4Pg8asy/gNdI0FTQfzn8HCG+QemqNwuPhxinE6jsSMDixuPobQGiDdxqNTotgi3w3AAAAAElFTkSuQmCC"> Click on the pencil icon (or press <kbd>F2</kbd>) to write your program's source code.</p>
- <p>Code has three sub-pages, one where you can write the source code (this one), the <a href="#visual_editor" onclick="c('visual_editor')">Visual Editor</a>, where you can do the same
- using structograms, and your program's machine code can be seen in the <a href="#debugger" onclick="c('debugger')">debugger</a>.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="codescr.png" src="data:image/png;base64,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A5AASAAEIAGQAEgEQAIgEQAJgEQAJAASAZAASARAAiARAAmARAAkABIBkABIBEACIBEACYBEACQAEgGQAEgEQAIgEQAJgARAABIACYAAJAASAIkASAAkAiABkAiABEAiABIAiQBIACQCIAGQCIAEQCIAEgCJAEgAJAIgAZAIgARAIgASAIkASAAkAiABkAAIQAIgAZAIgARAIgASAIkASAAkAiABkAiABEAiABIAiQBIACQCIAGQCIAEQCIAEgCJAEgAJAIgAZAIgARAIgASAIkASAAkAAKQAEgAJAIgAZAIgARAIgASAIkASAAkAiABkAiABEAiABIAiQBIACQCIAGQCIAEQCIAEgCJAEgAJAIgAZAIgARAAiAACYAEQAASAAmARAAkABIBkABIBEACIBEACYBEACQAEgGQAEgEQAIgEQAJgEQAJAASAZAASARAAiARAAmARAAkABIBkABIAAQgAZAASARAAiARAAmARAAkABIBkABIBEACIBEACYBEACQAEgGQAEgEQAIgEQAJgEQAJAASAZAASARAAiARAAmARAAkABIAAUgAJAASAZAASARAAiARAAmARAAkABIBkABIBEACIBEACYBEACQAEgGQAEgEQAIgEQAJgEQAJAASAZAASARAAiABEIAEQAIgC4MASAAkAiCVH0AifSX4WySNI+CSRGEYrKy0iIqaB5C1AOlLAOzpKf4YuNYuOzc4zYib0ejjtK2tVK+rPEZAG6BwGBJoRJZm/KI1jMAchntRo5cDr458Q2fHmE09iEb4ZoyYab3cmS2ZKfa3M7Zypm25X0b5Aiz4qwwtn8BCMnr7gzfiAIqjcQf+cvmujn18FzDUD8O9E4bl/HPOcWYIX50RMyU6yYib4tx24Loiv3xkkhE/Zdvul1GuAIW/ytBDEFpsvYyAIYCGodxED4zQn31+XXuL5QI0oo+Wp9J9fLyfRowRI/pA922myGAfnOLdt83PFLfiiGLuZabyBCi2AXuC24Ch5Wb0ZatnS0fAttaagPdYgFb0SuJGmpgRJGa8C4/Z7gi4GTTq7yy6RogZAUO/ZJSVEVnZGvE3Wk4AK8Nr4OCI1ftyia6Eet0GjDw2+a4ZgUcgvAr2jSjqSrxRx50WWW2GxrfATEb0YpYzbAevywgzicxkRC+2zddVptuAPA1Dep+GIdLQEtX/AcrR8ukaghGkAAAAAElFTkSuQmCC"></div><span class="fig">Code Editor</span>
- <p>Here the entire area (<span class="ui2">1</span>) is one big input field for the source code. At the bottom (<span class="ui2">2</span>), you can see the
- status bar, with the current row and coloumn, the UNICODE codepoint of the character under the cursor, and if you're standing
- in an API's argument list, a quick help on that API function's parameters (suitable for all programming languages).</p>
- <h2 id="programming_language">Programming Language<a href="#programming_language"></a></h2>
- <p>The program must start with a special line, with the characters <samp>#!</samp> followed by the language you want to use. By default,
- it uses <a href="#c" onclick="c('c')">MEG-4 C</a> (a subset of ANSI C), but you can choose others as well. See the list under "Programming" in the table of
- contents on the left.</p>
- <h2 id="user_provided_functions">User Provided Functions<a href="#user_provided_functions"></a></h2>
- <p>Regardless to the scripting language you choose, there are two functions that you should implement. They have no arguments and
- they return no value.</p>
- <ul><li><samp>setup</samp> function is optional and runs only once when your program gets loaded.</li>
- <li><samp>loop</samp> function is mandatory, and runs every time a frame is generated. At 60 FPS this means a 16.6 msecs timeframe, but the
- MEG-4 "hardware" itself takes about 2-3 msecs, which leaves you a 12-13 msecs for your function to fill. You can query this
- value from the performance counter MMIO register, see <a href="#memory_map" onclick="c('memory_map')">memory map</a>. If it takes longer to run the <samp>loop</samp> function, then the
- screen might became laggy, and the emulator will be less responsive than usual.</li></ul>
- <h2 id="additional_shortcuts">Additional Shortcuts<a href="#additional_shortcuts"></a></h2>
- <p>In addition to <a href="#ui_kbd" onclick="c('ui_kbd')">standard keyboard shortcuts</a> and input methods, the code editor has lot more text editing related
- <a href="#code_editor_shortcuts" onclick="c('code_editor_shortcuts')">shortcuts</a>.</p>
- <p>From the menu, you can also access Find, Replace, Go to, Undo, Redo as well as the list of bookmarks and the defined functions.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_interface" title="Interface">Previous</label><label class="btn next" accesskey="n" for="_sprite_editor" title="Sprite Editor">Next</label></div>
- <div class="page" rel="sprite_editor"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Sprite Editor</li></ul><hr></div>
- <h1 id="sprite_editor">Sprite Editor<a href="#sprite_editor"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="sprite.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABQ0lEQVQ4y7XSQUuUcRTF4WdMZwZmjFJzJWPODNggqFtBIvSbuPMLtGmpwRioLaSNBkHkQpQWuREVQRoIQQRFUJOgVVpEFmK+auninyDSrrezulwO9/7u4SZc0+zi0iF82dvLwNtKBdxMp7phdGS4ctVf5R9Vfb1xHEUZSKfTYG11FeQLxZ4/lv9M8H5ndxuWFudbIVkdLNOTLwf+NiA+gqnxodeQzUatMHccgVKuHjy4e/8xlF8tP4qVIPF86OEJ5PLNNXD47RPY3f8Ffn4MoWdT5+CsqhF8j1LP4smgeC9XAwdfP4eNR6egKRtm/7jTEJw3asHRaRIcbM82xpPBk/7e33Drdm0CiqUCyNSFWzMN+fAfKyGLhTczgbCrryMegsviabncDh82N15Ae2dLGxRKLUnYWnkHxgYnOmDz7Hw9FoILoiFXH9ZUGwAAAAAASUVORK5CYII="> Click on the stamp icon (or press <kbd>F3</kbd>) to modify the sprites.</p>
- <p>The sprites you create here can be displayed using <a href="#spr" onclick="c('spr')">spr</a>, and also used by <a href="#dlg" onclick="c('dlg')">dlg</a> to generate a dialog window and by <a href="#stext" onclick="c('stext')">stext</a> when
- it displays text on screen.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="spritescr.png" src="data:image/png;base64,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"></div><span class="fig">Sprite Editor</span>
- <p>The editor has three main boxes, two on the top, and one below.</p>
- <h2 id="spr_edit">Sprite Editor Box<a href="#spr_edit"></a></h2>
- <p>The one on the left is the sprite editor box (<span class="ui2">1</span>). This is where you can draw the sprite. <span class="mouseleft"></span> places the selected
- pixel on the sprite, <span class="mouseright"></span> clears it to empty.</p>
- <p>When the <kbd>Shift</kbd> is hold down, then a line can be drawn from last modified point.</p>
- <h2 id="spr_sprs">Sprite Selector<a href="#spr_sprs"></a></h2>
- <p>On the right you can see the sprite selector (<span class="ui2">2</span>). The sprite you select here will be editable on the left. You can
- select multiple adjacent sprites and edit them together.</p>
- <h2 id="spr_pal">Palette<a href="#spr_pal"></a></h2>
- <p>Below you can see the palette (<span class="ui2">3</span>). The first item cannot be set, because that's for erase. If you select any other
- color, then the <img class="imgt" width="13" height="13" alt="hsv.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAMAAABFNRROAAAAolBMVEWgeDyaeFWgej2QfWqpe0GwfSPIdkK3fmeMjIyuiESriFGkil6+jC++iGCmk0/JjDq8j0nDkDCalpOqlm+ulmymmoXJljXBl1G2nECom4egoKC9nWHWkZ7WkaLAoFnMoErTn0nRoUHHo1zQpFjUpVPTpWfUp0/Wp0i9q4yXs8rYqmfPrW60tLTRs3TYtGKqwmikxGjctGfZt2/Zt3Pkw2npzIKEbfKMAAAAV0lEQVQI12PQQQYMOlIIwIGVp6FspAvnGSqwmZqIQ3nGavL8elqqUJ6wupighJwAhKetpMjDqm/AAOGpyMiyaDLziUJ40rzsjEJMkjAzRTi5uLHZzoEMAPopEUaGnIrJAAAAAElFTkSuQmCC"> palette button will become active. Clicking on it will bring up the HSV color picker
- (<span class="ui2">5</span>), and with that you can modify the color for that palette entry.</p>
- <p>The default MEG-4 palette uses 32 colors of the DawnBringer32 palette, 8 grayscale gradients, and 6 x 6 x 6 RGB combinations.</p>
- <h2 id="spr_tools">Toolbar<a href="#spr_tools"></a></h2>
- <div class="imgc"><img class="imgc" width="193" height="17" alt="toolbox.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMEAAAARBAMAAACWUtWAAAAAFVBMVEUiIiJEREQAfwCMjIygoKC0tLTu7u4FojqFAAAA80lEQVQ4y82UsRHDMAhFKf4AyQop1DtZgMIL+C5ZwIX2HyEChGTp4nNc2Geaf5YQDwQW3Q+2G51A+KhNu/WlNmz5JcJ7FBt26/MhNm35XYWATnsCN/6cLGshYCWSnyRTdk0ODYGQCdRkxqUGRhuhEuwkUacaSQhRCUw5MquypCYKcgJlD4/ghLzOKSAW6ykgQQkhzkKAfss+2hrQ11AjY1mDXAqafa8hzkaw3Ee2Wy01rPeh3FY5YQQnex9CDHmWbB3oJwX9LP2cmXTScqrkPEthtk5j2dk6S6PW8te0ctcfJ8yX+eP8fdmr/fu0oqe8rUcTvrrGKZwVmSSLAAAAAElFTkSuQmCC"></div><span class="fig">Sprite Toolbar</span>
- <p>Under the sprite editor, you see the tool buttons (<span class="ui2">4</span>). With these you can easily modify the sprite. Shifting
- in different directions, rotating clock-wise, flipping etc. If there's an active selection, then they operate on the
- selection only, otherwise on the entire sprite. For the rotation, you must select an area which has the same width as
- height, otherwise rotation would be impossible.</p>
- <p>The flood fill tool only fills adjacent same pixels, unless there's a selection. With a selection the entire selected area
- is filled, no matter what pixels the selection contains.</p>
- <h2 id="spr_sel">Selections<a href="#spr_sel"></a></h2>
- <p>There are two kinds of selections: rectangle selection and fuzzy select. The former selects a rectangular area, the other
- selects continous regions with the same pixel. You can press and hold <kbd>Shift</kbd> to expand the selection, and
- <kbd>Ctrl</kbd> to intersect and make it smaller.</p>
- <p>Pressing <kbd>Ctrl</kbd>+<kbd>A</kbd> will select all, and <kbd>Ctrl</kbd>+<kbd>I</kbd> will invert the current selection.</p>
- <p>When a selection is active, you can press <kbd>Ctrl</kbd>+<kbd>C</kbd> to copy the area to the clipboard. Later, you can press
- <kbd>Ctrl</kbd>+<kbd>V</kbd> to paste it. Pasting works exactly like the pencil tool, except now you can paint with the whole
- copied area like a brush. It worth noting that empty pixels are copied to. If you don't want your brush to clear the area, then
- only select non-empty pixels (you can use <kbd>Ctrl</kbd>+<img class="imgt" width="13" height="13" alt="fuzzy.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANAgMAAAAPhQzvAAAADFBMVEUiIiKMjIygoKC0tLQ1WqnaAAAALElEQVQI12P4////AYZXq1Y5QIgXHSBWF4ilAGI1wcVWaYGILgckxaGhoQ4APIEeq0PIJWQAAAAASUVORK5CYII="> to deselect the empty areas) before copy, that
- way the empty pixels won't be copied to the clipboard, and in return won't be used as part of the brush.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_code_editor" title="Code Editor">Previous</label><label class="btn next" accesskey="n" for="_map_editor" title="Map Editor">Next</label></div>
- <div class="page" rel="map_editor"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Map Editor</li></ul><hr></div>
- <h1 id="map_editor">Map Editor<a href="#map_editor"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="map.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABSElEQVQ4y63Tvy/cARgG8M/3XJsTjd+h0UEHt9TQ5gajQfwDFptZGk0YbA2tmJobarEIqUWiJQb/glEbJIhG/IpDSiva68k55Tp8Sbo0Bt9nepbnfZ8n7/MG7sCrse5V2MwuN0PVcWsnTL9Lz0DMPRG/JcMfB/phfmcyDYoysJffegKJyxpQFqtN/jvg3g6CWzI4+X4Z9k8OnsNGyTRIPCgNN6sNBfFrcH0Z5KJx0DHS/gV2Lj6noLr0MbgonoNCvgjqM63gadMzcHiy8SeaK/y42k9B2cPyMFsuzNxQ9QL8rFgFFY2nm5DPrbyGud5PEfWgre4lWPu2FGb/fnYFiebTAArxYgyOf31NQmU2NX6jjcjB266+AHqGRsah/FHuA9TE6hZgt7ACjn6vg2S2ZTGUzkbcxP/hzejUDGR2t1tgIj3QGOkv/AW4GmLiLIeGcwAAAABJRU5ErkJggg=="> Clicking on the jigsaw icon (or pressing <kbd>F4</kbd>) will bring up the map editor. Here you can place
- sprites as tiles on the map.</p>
- <p>The map you've created here (or any parts of it) can be put on screen using the <a href="#map" onclick="c('map')">map</a> or with the <a href="#maze" onclick="c('maze')">maze</a> commands (see below).</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="mapscr.png" src="data:image/png;base64,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"></div><span class="fig">Map Editor</span>
- <p>The map is special in a way that it can only display 256 different tiles at once out of the 1024 sprites. For each sprite bank,
- the first sprite is always reserved for the empty tile, so sprites 0, 256, 512, and 768 cannot be used on maps.</p>
- <h2 id="map_box">Map Editor Box<a href="#map_box"></a></h2>
- <p>On top the big area is where you can see and edit the maps (<span class="ui2">1</span>). It is shown as one big map, 320 columns wide and 200
- rows high. You can use the zoom in and zoom out buttons on the toolbar, or the <span class="mousewheel"></span> mouse wheel to zoom. By pressing <span class="mouseright"></span> right
- click and holding it down, you can drag the map, but you can also use the scrollbars on the right and on the bottom.</p>
- <p>Clicking with <span class="mouseleft"></span> left button will set the selected sprite on the map. Select the first sprite to clear the map (<span class="mouseright"></span> right
- click does not clear here, instead it moves the map).</p>
- <p>When the <kbd>Shift</kbd> is hold down, then a line can be drawn from last modified point.</p>
- <h2 id="map_tools">Toolbar<a href="#map_tools"></a></h2>
- <p>Below the map editor area is the toolbar (<span class="ui2">2</span>), same as on the <a href="#sprite_editor" onclick="c('sprite_editor')">sprite editor</a> page, with exactly the same functionality
- and same keyboard shortcuts (but has a Wang tile tool and it can use sprite patterns too, see below). Next to the tool buttons you
- can find the zoom buttons and the map selector. This latter selects which sprite bank is used on the map (just for the editor. When
- your game runs, you'll have to set the byte at offset 0007F to change the map's sprite bank, see <a href="#graphics_processing_unit" onclick="c('graphics_processing_unit')">Graphics Processing Unit</a>).</p>
- <h2 id="map_sprs">Sprite Palette<a href="#map_sprs"></a></h2>
- <p>On the right to the buttons is the sprite selector (<span class="ui2">3</span>), where you can select the sprite you want to draw with. As said
- earlier, the first sprite in every 256 sprites bank is unusable, reserved to the empty map tile.</p>
- <p>The difference to the sprite editor is (where you can choose just one color from the palette), here on the map you can select
- multiple adjacent sprites at once. With paint, all of them will be painted at once (exactly the same way as if they were pasted
- from the clipboard), and what's more, flood fill will use them as a brush too, filling the selected area with that multi-sprite
- pattern.</p>
- <p>Even more, clicking <kbd>Shift</kbd>+<span class="mouseleft"></span> with the <img class="imgt" width="13" height="13" alt="fill.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANBAMAAACAxflPAAAAFVBMVEUiIiJEREQAfwCMjIygoKC0tLTu7u4FojqFAAAAMklEQVQI12MIBYMAhhAXEDBAph2gNAMLmHZgYADTLAwMLGDagQGqHiLPgq4fTBuDgQEAbvgU1fjLrHYAAAAASUVORK5CYII="> fill tool, it will choose one sprite from the pattern
- randomly. For example, let's assume you have 4 sprites with different looking trees. If you select all of them and fill an area
- on the map, then those sprites will be placed always in the same order, repeating one after another, which isn't looking good for
- a forest. But if you press and hold down <kbd>Shift</kbd> during clicking with the fill tool, then each tile will be choosen
- randomly from those selected 4 tree sprites, which looks much more a real forest.</p>
- <h2 id="wang_tiles">Wang Tiles<a href="#wang_tiles"></a></h2>
- <p>When the Wang tile tool is selected, the Wang tilesets area (<span class="ui2">4</span>) becomes active. You can easily draw roads, rivers,
- castlewalls, etc. with this tool.</p>
- <div class="imgc"><img class="imgc" width="210" height="69" alt="wang.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAABFBAMAAADN1KWKAAAAIVBMVEUAAP4iIiJEREQAfwAymAAzmQCMjIygoKCpqam0tLTu7u5b1Yq7AAACDElEQVRYw+2YvW6DMBDHGZA6e7qdKXs2JpaoLxDUnUqda6kRe6bOWaq+Ak9Z7Dsf2AQL4xChyl7+Ogz3u/NHzk5WPKtlTyT96nbbTD90a3rST6tas5m+H1W77Y0Ejrr90rJl30gnJJjxaDwIVGm0fwE9C+p37Na8p0ll13VEkmB7GkjoQQhHjUcpAL9jW+eiQlQKAknlsSSSoDeNJ0Oi57J3DKPnvWMk9LloBWMD2DkB5cQk6YwaEzEnNVhg9VNOUujYW5Bk42hzTjRP5ZFJ7vzwKPKXSDIRmHniCMmGyYoBJJWdu/Zm1hhgjEME/NxWaa+9FnNTpHLhKpfO/AXup9Hae9bONb9LW6n5/cv+ZdVIpERKpERKpERKpLst9uK0nBR7KNol6et8Pr81SnPSIDuAdKnr+rVRmpMG2SE59V/qGOuKNMgOyimjGFlzR339QTllFCNr9WKrr3/2/wh3G43HfU5znxa262yyKNkejfucVj4tbNc+0uV0OukYZ7Xy6T2StEmSSNE711wjBxKbh2vB99foi1OB1/wxaQBfD04gcU1dsmFMEgPpu+B77Rak5+U0M0/x9WlK2m7tCQFL9tMDSAt3bnR9ckjD8sfGdnx9slyvq0/Zg+vTZ451Z6S5o77+kPpUUeyDYv0Z1Ne/6hyxsj6tOEesrE/Lc4qtT/s7WcbXp3R/SqRdkP4ALjsDuC4lVncAAAAASUVORK5CYII="></div><span class="fig">Wang tile tool</span>
- <p>But before you could use it, you have to configure it. It can hold 64 different tilesets (eg. one for a river, one for a road,
- etc.), and each tileset has 16 sprites, one for each combination.</p>
- <p>To set it up, first select a sprite on the sprite palette, then click on the corresponding Wang tile button depending which
- combination that sprite represents. If you select more sprites on the palette, then you can set up more tiles at once (starting
- from the button you've clicked).</p>
- <div class="info"><p><span>Note</span></p><p> Wang tileset configurations are reserved and saved on your floppy.</p></div>
- <p>Now that you have a Wang tileset configured, you can use the tool just like paint, except it will automatically place the
- approprite sprite to draw continuous shapes on the map.</p>
- <h2 id="3d_maze">3D Maze<a href="#3d_maze"></a></h2>
- <p>You can also display the map as a 3D maze with the <a href="#maze" onclick="c('maze')">maze</a> function. For this, the turtle position and direction is used as the
- player's view point to the maze, but to accomodate sub-tile positions, here the turtle's coordinate is multiplied by 128
- (originally I've used 8 to match pixels on the map, but movement was too blocky that way). So for example (64,64) is the centre
- of the top left field on the map, and (320,192) is the centre of the third coloumn and second row.</p>
- <p>Here <samp>scale</samp> parameter acts differently too: when set to 0, then the maze will use 32 x 8 tiles as seen on the sprite palette,
- one for each tile, each 8 x 8 pixels in size. When set to 1, then there will be 16 x 16 tiles, each tile will use 2 x 2 sprites,
- so 16 x 16 pixels in size. With 3, you'll have 4 x 4 kinds of tiles, so 16 different tiles in total, each 64 x 64 pixels. In this
- case the map will select these larger tiles, so tile id only equals with the sprite id if the scale is 0. For example if map has
- the id of 1 with scale set to 1, then instead of sprite id 1, this will select sprites 2, 3, 34, 35.</p>
- <div class="pre"><pre>
- Tile id 1 with scale 0 Tile id 1 with scale 1
- +---+===+---+---+- +---+---+===+===+-
- | 0|::1| 2| 3| ... | 0| 1|::2|::3| ...
- +---+===+---+---+- +---+---+===+===+-
- | 32| 33| 34| 35| ... | 32| 33|:34|:35| ...
- +---+---+---+---+- +---+---+===+===+-
- </pre></div>
- <p>Regardless you'll have to place sprite id 1 on the map from the palette to get these sprites. Tile id 0 as usual means empty.</p>
- <p>If <samp>sky</samp> is set, then that tile will be displayed as a ceiling to the maze. On the other hand, <samp>grd</samp> is only displayed as floor
- where the map is empty. When you call the maze, you separate the tile ids into ranges, and this specifies how a tile is displayed
- (floor, wall or sprite). Everything greater than or equal to <samp>wall</samp> will be non-walkable and displayed as a cube, with the
- selected tile sprites on the cube's sides without transparency. Tiles greater than or equal to <samp>obj</samp> will be non-walkable too,
- but displayed as a properly scaled 2D sprite always facing towards the player (the turtle's position) and with alpha channel
- applied, so unlike the walls the objects can be transparent.</p>
- <div class="table"><table><tr><th>Tile id </th><th>Description </th></tr>
- <tr><td>0 </td><td>Always walkable, <samp>grd</samp> displayed as floor instead </td></tr>
- <tr><td>1 <= x < <samp>door</samp> </td><td>Walkable, displayed as floor </td></tr>
- <tr><td><samp>door</samp> <= x < <samp>wall</samp> </td><td>Displayed as a wall, but walkable </td></tr>
- <tr><td><samp>wall</samp> <= x < <samp>obj</samp> </td><td>Non-walkable, displayed as a wall </td></tr>
- <tr><td><samp>obj</samp> <= x </td><td>Non-walkable, displayed as an object sprite </td></tr></table></div>
- <p>You can also add non-player characters (or other objects) to the maze independently to the map (in an int array with x, y, tile id
- triplets, where the coordinates are multiplied by 128). These will be walkable and will be displayed the same as object sprites;
- collision detection, movement and all the other aspects have to be implemented in your game by you. The <samp>maze</samp> command just diplays
- these. It does a favour for you though, if the given NPC can directly see the player, then the tile id's most significant 4 bits
- in the array will be set. Which bits depends on their distance to each other: the most significant bit (0x80000000) is set if their
- distance is smaller than 8 map fields, next bit (0x40000000) if less than 4 fields, next bit (0x20000000) if less than 2 map fields,
- and finally last bit (0x10000000) if they are on the same field or neightbouring map fields.</p>
- <p>Furthermore this command also takes care of navigation in the maze, <kbd>▴</kbd> / △ moves the turtle forward, <kbd>▾</kbd> / ▽
- backward; <kbd>◂</kbd> / ◁ turns left, and <kbd>▸</kbd> / ▷ turns right (keyboard mappings for the gamepad can be changed, see
- <a href="#memory_map" onclick="c('memory_map')">memory map</a> for details). Handling all the other gamepad buttons and interactions are up to you to code in your game, the <samp>maze</samp>
- only helps you with moving the player and handling collisions with the walls.</p>
- <div class="info"><p><span>Note</span></p><p> Don't forget that you always have to divide the turtle's position by 128 to get the player's position on the map.</p></div><br style="clear:both;"><label class="btn prev" accesskey="p" for="_sprite_editor" title="Sprite Editor">Previous</label><label class="btn next" accesskey="n" for="_font_editor" title="Font Editor">Next</label></div>
- <div class="page" rel="font_editor"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Font Editor</li></ul><hr></div>
- <h1 id="font_editor">Font Editor<a href="#font_editor"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="font.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAApUlEQVQ4y2NkQAAhKF0JpZ2gtCCUvgGlq6D0BQYGBgYmBgoBCxL7L5T+BaULofQnNJcthNJGVHEBIwlqzaH0PigtSfUwEIXSeVDaEkoLQGluKM0MpZmo5gKYK7ZA6fdQug5KP4HSOlB6HbIBVHGBMJRthkafxhELDFR3wWco+zWUToDS36G0BpQuppkLvkHZUVC6EUpvQs51DAwMcVC6G0r/oYoLAD+mGCc2vwD/AAAAAElFTkSuQmCC"> Click on the letter icon (or press <kbd>F5</kbd>) to modify the fonts.</p>
- <p>This font will be used by <a href="#width" onclick="c('width')">width</a> when you measure a string, and also by <a href="#text" onclick="c('text')">text</a> when you display text from your program.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="fontscr.png" src="data:image/png;base64,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"></div><span class="fig">Font Editor</span>
- <p>This page has a similar arrangement as the <a href="#sprite_editor" onclick="c('sprite_editor')">sprite editor</a>, it's just the palette is missing. On the left you can find the glyph
- editor area (<span class="ui2">1</span>), and on the right the glyph selector (<span class="ui2">2</span>). (Glyph is the displayed typeface of a UNICODE
- character.)</p>
- <h2 id="glyph_editor">Glyph Editor<a href="#glyph_editor"></a></h2>
- <p>It is as simple as <span class="mouseleft"></span> left clicking sets typeface (foreground), and <span class="mouseright"></span> clears to empty (background).</p>
- <p>When the <kbd>Shift</kbd> is hold down, then a line can be drawn from last modified point.</p>
- <h2 id="glyph_selector">Glyph Selector<a href="#glyph_selector"></a></h2>
- <p>You can search for a UNICODE codepoint, but if you press a key, the glyph selector will jump to its glyph. If your keyboard
- layout lacks some keys, you can use one of the special input modes, see <a href="#ui_kbd" onclick="c('ui_kbd')">keyboard</a>.</p>
- <h2 id="font_tools">Toolbar<a href="#font_tools"></a></h2>
- <p>The toolbar here is limited, only shifting, rotating and flipping allowed, there are no selection tools. However copy
- (<kbd>Ctrl</kbd>+<kbd>C</kbd>) and paste (<kbd>Ctrl</kbd>+<kbd>V</kbd>) works as usual on the glyph selector table.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_map_editor" title="Map Editor">Previous</label><label class="btn next" accesskey="n" for="_sound_effects" title="Sound Effects">Next</label></div>
- <div class="page" rel="sound_effects"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Sound Effects</li></ul><hr></div>
- <h1 id="sound_effects">Sound Effects<a href="#sound_effects"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="sound.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABWUlEQVQ4y7XSv0uUARzH8deTEcGB5EUHDnk8NhhcBFmZoYb+CTYcFAlZ24PVEEEEYtQgDhkNDRHkIA4pKrg5eEpBkzSIVGtCOXh65qElaTo8Cg1tPr2n7/D98ebDN7DH1PsPQ7DwfTEPyyurOzBVKLyGR/eiCWhpbpr0F4cckGB4dPwlfP22GMGT3n7wa2MT3Ik6wZXmSyB7MguWl0rXkzHoe/Z8E14Nvj0CW38CUJ+rizu2tkE+3w7K5Z+gWFwtJmJwuFhaq4DcmRw4kU6DxvqzYODNEJib/7J3eSUerDi6kIxBJpMpQzYMj0HdqRCkUqk4i4vnwMz0DLhxs+M3dN3qOJ+MQWvT5dtQWvsxCusbccqT0+/A7Nwn0HAhNhkbHplN9hP3i2udUQHCsKYNPs5/BtVVlaA2rAHdDx8E/8dgn57HT6/C9k7wAqqOp9fh/t3o9L8WHNhgF3kXYouVe6uaAAAAAElFTkSuQmCC"> Click on the speaker icon (or press <kbd>F6</kbd>) to bring up the sound effects editor.</p>
- <p>You can play these sound effects from your program using the <a href="#sfx" onclick="c('sfx')">sfx</a> command.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="soundscr.png" src="data:image/png;base64,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"></div><span class="fig">Sound Effects</span>
- <p>On the left, you'll see the waveform editor and its toolbar (<span class="ui2">1</span>), on the right the effect selector (<span class="ui2">2</span>), and
- below the effect editor (<span class="ui2">3</span>).</p>
- <h2 id="effect_selector">Effect Selector<a href="#effect_selector"></a></h2>
- <p>On the right you see the list of effects (<span class="ui2">2</span>), each represented by a music note (technically all sound effects are music
- notes, with selectable waveforms and special effects option). Clicking on this list (or pressing <kbd>▴</kbd> / <kbd>▾</kbd>) will
- edit that effect.</p>
- <div class="info"><p><span>Important</span></p><p> When you select a sound effect, it's current configuration is saved to history. You can revert to this by pressing undo
- until you select another sound effect. If you have pressed undo, then you will be able to do a redo until you don't modify. (The
- modifications won't be saved in history one-by-one, only the state when you've selected that sound effect.)</p></div>
- <h2 id="effect_editor">Effect Editor<a href="#effect_editor"></a></h2>
- <p>The piano at the bottom (<span class="ui2">3</span>), looks like and works like the <a href="#note_editor" onclick="c('note_editor')">note editor</a> on the music tracks, except it has less options
- selectable. You can find further info there, including the keyboard layout.</p>
- <h2 id="sfx_tools">Waveform Toolbar<a href="#sfx_tools"></a></h2>
- <p>Normally the waveform (<span class="ui2">1</span>) is read-only, and you'll only see what wave the sound effect uses. You'll have to click on
- the button with the lock icon to make it editable (but first, make sure your sound effect actually has a waveform choosen).</p>
- <div class="imgc"><img class="imgc" width="492" height="15" alt="wavescr.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAewAAAAPCAMAAAARUwzKAAAAn1BMVEUiIiJEREQhXY0kXo4pYZA4YYIxZZIyZZEzZ5IlbKQqcak8bZdIbo0udKwxd64yeK9ZcoZPdpU2fbdTd5RXd5RcephLgrBjfpdogZRgia9th51tiKFHlNFJlNF9iph9i5pYk8V+i5p+jJt+jZ1+jp5OmdWMjIyAk6WNkpiMlJuSl5yVmJuZm5yQnalZqeucnZ+goKBfrvGpqamqqqq0tLR63RJOAAACSElEQVRYw+2Yh3KDMAyGf7r33nvSNl0UeP9naxkGS5bMaOj1LuhyyTmSYlufJJsgGGVmBEFqC9FpGt2ju85nHzT4T3sszyNbDb2WfjFOvZLBjmoJqaui0T2663z2QYP/tMfyPLLV0GvpF2Nb40g4wp5J2FBdIQYD3oVA1cGBDePyN7BBx4Bnfyhgw3wRDrsWZ6zG+P30/LM/bLDNJEliNCQYcVwFSZhM9vH5MdiZWVB9NCRLizEAN6Cg+tyEw4YLGy5sdIUHpoeWeGYvkGE/7ZwcXkuwzX6ZgLVxBlvO/Dh7aRVRwXZ1ql9aRh95YHOzuPiQYYMF0Bkz2JFrDzB/uJUNkwUhG9HE07uEBpvMDTSMeYpVcz8sbuzvHkwE2GZP+S8B1khv44m1AAI7rqHxICUlbEiwFT9a2XFR07Fc2nnY86XbMEm1GHYUNnglowl2q8q2u4IEy0k0ag8DQ7EXUqya+35ufmFpfWUiVHZU77p4A6tsOOj6VHbyB5XN2nD1TahVG4VdpktjZbc7s+Fv2y58Utkwuar7q5V9t7W9uba6/CpWdpFGFnE/7OzEDjqe2UkNe8gz2zn3IgbTuQSR6rPPQS9sdhuHeBtH68ufsHZyMRWTQz+zby8fL/aO3+Qzu2pvZeeoQqTB7nobTwjs/3wbZ7CF44iCknvVb2/Xad08fMmh3cavvj6Onn23cYzP2f2fszHEc3bDGe+J48vN2finyvinih92aAtx1TS6R3edzz5o8J/2WJ5Hthp6Lf1iHHrlB/YoMyPf+CLBCx5KYCYAAAAASUVORK5CYII="></div><span class="fig">Waveform Toolbar</span>
- <p>When the toolbar is unlocked, then clicking on the wave will change it.</p>
- <div class="warn"><p><span>Warning</span></p><p> If you change a waveform, then effective immediately all sound effects and music tracks will change too that use that
- waveform.</p></div>
- <div class="info"><p><span>Important</span></p><p> When you unlock a waveform, it's current state is saved in history. You can revert to this by pressing undo. (The
- modifications won't be saved in history one-by-one, only the wave at the moment when you've pressed unlock.)</p></div>
- <p>Using the toolbar you can change the finetuning value (-8 to 7), the volume (0 to 64) and the repeat interval. If you click on
- the repeat button, then it will remain pressed, and you can select a loop range on the waveform. The wave will be played first
- through, then it will jump to the beginning of the selected range, and it will repeat that range infinitely.</p>
- <p>For convenience, you have 4 default wave generator buttons, one to load the default pattern (the one that <a href="#general_midi" onclick="c('general_midi')">General MIDI</a> uses)
- from the soundfont for this wave and various tools to set the length, rotate, enlarge, shrink, negate, flip etc. the wave. The
- button before the last will continously play it using its current configuration (even if no loop range defined).</p>
- <p>Finally the last button, the <span class="ui1">Export</span> will export the sample in RIFF Wave format. You can edit this with a third party
- tool, and to load it back, just drag'n'drop the modified file to the MEG-4 screen.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_font_editor" title="Font Editor">Previous</label><label class="btn next" accesskey="n" for="_music_tracks" title="Music Tracks">Next</label></div>
- <div class="page" rel="music_tracks"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Music Tracks</li></ul><hr></div>
- <h1 id="music_tracks">Music Tracks<a href="#music_tracks"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="music.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABA0lEQVQ4y7WSP0sCcRjHP12JglPh4CCCS0NDEK3RJvgyXKLFUdAlX0QgvQCXIBoiCKdIaBE80C3R4HQ4j877ef6hjkx/DTackDp49ywPz/f5Pg8fHp4dNkSu1HgEeNMHSQDRbQYBOn3zA0Bhy9hb1SiUBxLgtWNLgKHQ3gFS8UAaoBw+LPlLEP62LYDny0TErat/+ejiGn8JZp/22kFHGD4TzCfWUp2912oAuj06Aag/3Xr8B2fF1jHA+cHoAcAx2oGl62u9UwBz7ADwE9qfeUsQDU4bAFVzIcXE19RtlG3VAtD7EwVA3OVj3hKoteocYFdKBaCid6/cxpebTOS/BVsT/AIUzVf56iQUxgAAAABJRU5ErkJggg=="> Click on the music note icon (or press <kbd>F7</kbd>) to edit the music tracks.</p>
- <p>The music you create here can be played in your program using the <a href="#music" onclick="c('music')">music</a> command.</p>
- <p>You'll see five coloumns and below a piano.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="musicscr.png" src="data:image/png;base64,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"></div><span class="fig">Music Tracks</span>
- <h2 id="tracks">Tracks<a href="#tracks"></a></h2>
- <p>On the left the first coloumn selects which music track to edit (<span class="ui2">1</span>).</p>
- <div class="table"><table><tr><th>Key Combination </th><th>Description </th></tr>
- <tr><td><kbd>Page Up</kbd> </td><td>Switch to previous track. </td></tr>
- <tr><td><kbd>Page Down</kbd> </td><td>Switch to next track. </td></tr>
- <tr><td><kbd>Space</kbd> </td><td>Start / stop playing the track. </td></tr></table></div>
- <p>Below the track selector you can see the DSP status registers (<span class="ui2">2</span>), but this block only comes alive when music playback
- is on.</p>
- <h2 id="channels">Channels<a href="#channels"></a></h2>
- <p>Next to it, you'll see four similar coloumns, each with notes (<span class="ui2">3</span>). These are the 4 channels that the music can
- simultaniously play. This is similar to standard music sheets, for more info read the <a href="#general_midi" onclick="c('general_midi')">General MIDI</a> section below.</p>
- <div class="table"><table><tr><th>Key Combination </th><th>Description </th></tr>
- <tr><td><kbd>◂</kbd> </td><td>Switch to previous channel. </td></tr>
- <tr><td><kbd>▸</kbd> </td><td>Switch to next channel. </td></tr>
- <tr><td><kbd>▴</kbd> </td><td>Switch to previous row. </td></tr>
- <tr><td><kbd>▾</kbd> </td><td>Switch to next row. </td></tr>
- <tr><td><kbd>Home</kbd> </td><td>Switch to first row. </td></tr>
- <tr><td><kbd>End</kbd> </td><td>Switch to last row. </td></tr>
- <tr><td><kbd>Ins</kbd> </td><td>Insert a row. Move everything below down one row. </td></tr>
- <tr><td><kbd>Del</kbd> </td><td>Delete a row. Move everything below up one row. </td></tr>
- <tr><td><kbd>Backspace</kbd> </td><td>Clear note. </td></tr></table></div>
- <h2 id="note_editor">Note Editor<a href="#note_editor"></a></h2>
- <p>Under the channels you can see the note editor (<span class="ui2">4</span>), with some buttons on the left and a big piano on the right.</p>
- <div class="info"><p><span>Important</span></p><p> When you select a note, it's current configuration is saved to history. You can revert to this by pressing undo until you
- select another note. If you have pressed undo, then you will be able to do a redo until you don't modify. (The modifications won't
- be saved in history one-by-one, only the state when you've selected that note.)</p></div>
- <p>Notes have three parts, the first one (on the top in the editor), the pitch consist of further three sub-parts: the note itself,
- like <samp>C</samp> or <samp>D</samp>. Then the <samp>-</samp> character if it's a flat note, or <samp>#</samp> for sharp notes. The third part is simply the octave, from
- <samp>0</samp> (lowest pitch) to <samp>7</samp> (highest pitch). The 440 Hz pitch for the standard musical note A for example is therefore written as
- <samp>A-4</samp>. Using the piano you can easily select the pitch.</p>
- <p>After the pitch comes the aforementioned instrument (the middle part of the note) that chooses the waveform to be used, from
- <samp>01</samp> to <samp>1F</samp>. The value 0 is printed as <samp>..</samp> and means keep using the same waveform as before.</p>
- <p>Finally, you can also add special effects to the notes (the last part of the note), like arpeggio (make it sound like a chord),
- portamento, vibrato, tremolo etc. See the <a href="#note_effects" onclick="c('note_effects')">note effects</a> for a full list. This has a numeric parameter, usually interpreted as
- "how much". It is printed as three hex numbers, where the first represents the effect type and the last two are the parameter,
- or <samp>...</samp> if it's not set. For example <samp>C00</samp> means set the volume to zero, so silence the channel.</p>
- <h3 id="mus_kbd">Keyboard<a href="#mus_kbd"></a></h3>
- <div class="imgc"><img class="imgc" width="694" height="256" alt="pianokbd.png" src="data:image/png;base64,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"></div><span class="fig">Piano Keyboard arrangement</span>
- <ol><li>wave selectors</li>
- <li>effect selectors</li>
- <li>octave selectors</li>
- <li>piano keyboard</li></ol>
- <div class="table"><table><tr><th>Key Combination </th><th>Description </th></tr>
- <tr><td><kbd>1</kbd> - <kbd>0</kbd> </td><td>Select wave 1 to 10 (or if pressed with <kbd>Shift</kbd> 11 to 20). </td></tr>
- <tr><td><kbd>Q</kbd> </td><td>Clear all effects on note (but leave pitch and sample untouched). </td></tr>
- <tr><td><kbd>W</kbd> </td><td>Arpeggio dur (major chord). </td></tr>
- <tr><td><kbd>E</kbd> </td><td>Arpeggio moll (minor chord). </td></tr>
- <tr><td><kbd>R</kbd> </td><td>Slide up a full note. </td></tr>
- <tr><td><kbd>T</kbd> </td><td>Slide up a half note. </td></tr>
- <tr><td><kbd>Y</kbd> </td><td>Slide down a half note. </td></tr>
- <tr><td><kbd>U</kbd> </td><td>Slide down a full note. </td></tr>
- <tr><td><kbd>I</kbd> </td><td>Vibrato small. </td></tr>
- <tr><td><kbd>O</kbd> </td><td>Vibrato large. </td></tr>
- <tr><td><kbd>P</kbd> </td><td>Tremolo small. </td></tr>
- <tr><td><kbd>[</kbd> </td><td>Tremolo large. </td></tr>
- <tr><td><kbd>]</kbd> </td><td>Silence the channel "effect". </td></tr>
- <tr><td><kbd>Z</kbd> </td><td>Switch one octave down. </td></tr>
- <tr><td><kbd>.</kbd> </td><td>Switch one octave up. </td></tr>
- <tr><td><kbd>X</kbd> </td><td>C note on the current octave. </td></tr>
- <tr><td><kbd>D</kbd> </td><td>C# note on the current octave. </td></tr>
- <tr><td><kbd>C</kbd> </td><td>D note on the current octave. </td></tr>
- <tr><td><kbd>F</kbd> </td><td>D# note on the current octave. </td></tr>
- <tr><td><kbd>V</kbd> </td><td>E note on the current octave. </td></tr>
- <tr><td><kbd>B</kbd> </td><td>F note on the current octave. </td></tr>
- <tr><td><kbd>H</kbd> </td><td>F# note on the current octave. </td></tr>
- <tr><td><kbd>N</kbd> </td><td>G note on the current octave. </td></tr>
- <tr><td><kbd>J</kbd> </td><td>G# note on the current octave. </td></tr>
- <tr><td><kbd>M</kbd> </td><td>A note on the current octave. </td></tr>
- <tr><td><kbd>K</kbd> </td><td>A# note on the current octave. </td></tr>
- <tr><td><kbd>,</kbd> </td><td>B note on the current octave. </td></tr></table></div>
- <div class="info"><p><span>Note</span></p><p> Keys on the English keyboard have been used in this table. But it doesn't actually matter what keyboard layout you use,
- the only thing that matters is the location of these keys on the English keyboard. For example, if you have AZERTY layout, then
- clearing effects will be <kbd>A</kbd> for you, and on a QWERTZ keyboard <kbd>Z</kbd> will add slide down effect, and <kbd>Y</kbd>
- will change the octave.</p></div>
- <p>It is important to mention that not all features have a keyboard shortcut. For example you might have 31 wavepatterns, but only
- the first 20 have shortcuts. Similarily, there are several magnitudes more effects than what's accessible through shortcuts.</p>
- <h2 id="general_midi">General MIDI<a href="#general_midi"></a></h2>
- <p>You can import music (at least the note sheets) from MIDI files. Very simply put, if a classic music note sheet is stored on
- a computer in a digitalized form, then it is using the MIDI format to do so. Now these are suitable from a single instrument
- to a huge orchestra, so they can store a lot more than what the MEG-4 is capable of, therefore</p>
- <div class="warn"><p><span>Warning</span></p><p> Not all MIDI files can be imported properly.</p></div>
- <p>Before we could continue, we must talk about the terms, because unfortunately both the MIDI specification and the MEG-4 uses
- the same nomenclature - but for totally different things.</p>
- <ul><li>MIDI song: a single <i>.mid</i> file (SMF2 format not supported).</li>
- <li>MIDI track: one row on a classic music notes sheet.</li>
- <li>MIDI channel: only exists because MIDI was created by morons, who thought it is fun to squash everything into a single track
- when storing in files, otherwise exactly the same as a track. You have 16 of these.</li>
- <li>MIDI instrument: a code (standardized by the General MIDI Patch), which describes the instrument a particular channel is using
- (except when that's channel 10, don't even ask), you have 128 of these instrument codes.</li>
- <li>MIDI note: one note in the range C on octave -1 to G on octave 9, 128 different notes in total.</li>
- <li>MIDI concurrent notes: the number of notes that can be played at once at any given time. There are 16 channels and 128 notes
- in MIDI, so this is 2048.</li>
- <li>MEG-4 track: a song, you can have 8 of these.</li>
- <li>MEG-4 sample: a wavepattern stored as a series of PCM samples, analogous to instrument, you have 31 of these.</li>
- <li>MEG-4 channel: the number of concurrent notes that can be played at once at any given time, this is 4.</li>
- <li>MEG-4 note: one note in the range C on octave 0 to B on octave 7, 96 different notes in total.</li></ul>
- <p>To avoid confusion, hereafter we'll talk about one MEG-4 track only, and "track" will refer to MIDI channels, and "channel"
- will refer to MEG-4 channels.</p>
- <h3 id="instruments">Instruments<a href="#instruments"></a></h3>
- <p>Concerning instruments, in total there are 16 families with 8 instruments in each. MEG-4 doesn't have 128 wave banks, so best it
- can do is, assigning two wavepatterns per family (families 15 and 16 are for sound effects):</p>
- <div class="table"><table><tr><th>Family </th><th>SF </th><th>Patch </th><th>How should sound like </th><th>SF </th><th>Patch </th><th>How should sound like </th></tr>
- <tr><td>Piano </td><td class="right">01 </td><td>1-4 </td><td>Acoustic Grand Piano </td><td class="right">02 </td><td>5-8 </td><td>Electric Piano </td></tr>
- <tr><td>Chromatic </td><td class="right">03 </td><td>9-12 </td><td>Celesta </td><td class="right">04 </td><td>13-16 </td><td>Tubular Bells </td></tr>
- <tr><td>Organ </td><td class="right">05 </td><td>17-20 </td><td>Church Organ </td><td class="right">06 </td><td>21-24 </td><td>Accordion </td></tr>
- <tr><td>Guitar </td><td class="right">07 </td><td>25-28 </td><td>Acoustic Guitar </td><td class="right">08 </td><td>29-32 </td><td>Electric Guitar </td></tr>
- <tr><td>Bass </td><td class="right">09 </td><td>33-36 </td><td>Acoustic Bass </td><td class="right">0A </td><td>37-40 </td><td>Slap Bass </td></tr>
- <tr><td>Strings </td><td class="right">0B </td><td>41-44 </td><td>Violin </td><td class="right">0C </td><td>45-48 </td><td>Orchestral Harp </td></tr>
- <tr><td>Ensemble </td><td class="right">0D </td><td>49-52 </td><td>String Ensemble </td><td class="right">0E </td><td>53-56 </td><td>Choir Aahs </td></tr>
- <tr><td>Brass </td><td class="right">0F </td><td>57-60 </td><td>Trumpet </td><td class="right">10 </td><td>61-64 </td><td>French Horn </td></tr>
- <tr><td>Reed </td><td class="right">11 </td><td>65-68 </td><td>Saxophone </td><td class="right">12 </td><td>69-72 </td><td>Oboe </td></tr>
- <tr><td>Pipe </td><td class="right">13 </td><td>73-76 </td><td>Piccolo </td><td class="right">14 </td><td>77-80 </td><td>Blown Bottle </td></tr>
- <tr><td>Synth Lead </td><td class="right">15 </td><td>81-84 </td><td>Synth 1 </td><td class="right">16 </td><td>85-88 </td><td>Synth 2 </td></tr>
- <tr><td>Synth Pad </td><td class="right">17 </td><td>89-92 </td><td>Synth 3 </td><td class="right">18 </td><td>93-96 </td><td>Synth 3 </td></tr></table></div>
- <p>In short, the General MIDI instrument will become the <samp>(patch - 1) / 4 + 1</samp>th wave in the soundfont.</p>
- <p>Note that MEG-4 assigns waves dynamically, so these number mean the soundfont's wave number. For example if your MIDI file
- uses two instruments only, let's say Grand Piano and Electric Guitar, then piano would be assigned wave 1, and guitar wave 2. You
- can load all waves apriori from the soundfont in the <a href="#sound_effects" onclick="c('sound_effects')">sound effects</a> editor, and then your imported MIDI file will use exactly
- these wave numbers.</p>
- <h3 id="patterns">Patterns<a href="#patterns"></a></h3>
- <p>The MEG-4 patterns are analogous to classic music note sheets, but while on a classic sheet time goes from left to right and
- each MIDI track is tied to an instrument, in MEG-4 the time goes from top to bottom, and you can dynamically assign which
- waveform to use on a particular channel. Consider the following example (taken from the General MIDI specification):</p>
- <div class="imgc"><img class="imgc" width="606" height="226" alt="notes.png" src="data:image/png;base64,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"></div><span class="fig">Classic musical note sheet on the left, its MEG-4 pattern equivalent on the right</span>
- <p>On the left we have three tracks, Electric Piano 2, Harp and Bassoon. The first notes to be played are on the bassoon, right two
- notes at the same time. Note the bass key on the 3rd track, so these are notes C on octave 3 and C on octave 4, and they both
- last 4 quoter-notes, so whole notes.</p>
- <p>On the right you can see the MEG-4 pattern equivalent. The first row describes these two notes played on a bassoon: <samp>C-3</samp> on the
- first channel, and <samp>C-4</samp> on the second. The sample <samp>12</samp> (hex, provided that you have manually loaded the soundfont apriori,
- otherwise the number would be different) selects the oboe waveform, which isn't exactly a bassoon, but that's the closest we have
- in the soundfont. The <samp>C30</samp> part means the velocity at which these notes are played, which is analogous to the volume (the harder
- you hit a key on the piano, the louder its sound will be). MEG-4 note volumes go from 0 (silence) to 64 (40 in hex, full volume).
- So 30 in hex means 75% of the full volume.</p>
- <p>The next note to be played is on the harp, starts a quoter-note later than the bassoon, it is a G on octave 4 and lasts 3
- quoter-notes long. On the MEG-4 pattern you can see this as <samp>G-4</samp> in the fourth row (because it starts at that time), and since
- channels 1 and 2 are still playing the bassoon, it is played on channel 3. If we were to put this on channel 1 or 2, then the
- previously played note on that channel would be silenced and replaced by this new one. The sample here is <samp>0C</samp> (hex), which
- is Orchestral Harp.</p>
- <p>The last note is on the first MIDI track, which starts half a note later from the start, is an E on octave 5, and lasts 2
- quoter-notes, or with other words a half-note long. Because it starts half a note from the start, you can see <samp>E-5</samp> in the
- 8th row, and since we already have 3 notes to be played, so it is assigned to channel 4. The sample <samp>02</samp> selects the waveform
- for Electric Piano, which isn't the same as MIDI Electric Piano 2, but pretty close.</p>
- <p>Now we have two whole long notes, one half and a quoter long and another half note long; started at the beginning, quoter and half
- note later in this order. This means they all must end at the same time. You can see this in the 16th (or 10 in hex) row, all
- channels have a <samp>C00</samp>, "set volume to 0" command.</p>
- <h3 id="tempo">Tempo<a href="#tempo"></a></h3>
- <p>MIDI silently assumes 120 BPM and defines a divisor to quoter-notes. Then it might also define the length of a quoter-note in
- milliseconds, or not. The point is, it is very complex, and not all combinations can be translated to MEG-4 properly. I've
- written the importer in a way to discard accumulating rounding errors, and only care about the same relative delta times between
- two consecutive notes. This way the MEG-4 song's tempo never will be exactly the same as the MIDI song's, but it should sound
- similar and should never deviate too much either.</p>
- <p>The tempo on the MEG-4 is much simpler. You have a fixed 3000 ticks per minute, and the default tempo is 6 ticks per row. This
- means to achive 125 BPM using the default tempo, you should put notes in every 4th rows (because 3000 / 6 / 4 = 125). If you set
- the tempo (see effect <samp>Fxx</samp>) to half of that, 3 ticks per row, then each row will last half the time, therefore you'll get 250 BPM
- if you were using every 4th row. To get 125 BPM with tempo 3, you would have to use every 8th rows. If you set the tempo to 12,
- then each row will last twice the time, therefore every 4th row will get you 62.5 BPM, and you'd have to use every 2nd rows for
- 125 BPM. Hope this makes sense to you.</p>
- <p>This only sets when a note should be started to play, and totally independent of how long that sound lasts. For the latter you
- should use a new note on the same channel, or you should use a <samp>C00</samp> "set volume to 0" effect in the row when you want the note
- to be cut off. If you change the tempo in between, that won't influence the sound played, just how long it's played (because
- the row to turn it off would now reached at a different time).</p>
- <p>Now notes will stop playing too if their wavepattern ends. When that happens, depends on the pitch and the number of samples in
- the wavepattern (playing at C-4 requires 882 samples of the wave to be sent to the speaker on every ticks). There's a trick here:
- you can set a so called "loop" on the wavepattern, which means after all the samples are played once, the selected region of the
- wave will be repeated indefinitely (so you'll have to explicitly cut it off, otherwise the sound would really never stop).</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_sound_effects" title="Sound Effects">Previous</label><label class="btn next" accesskey="n" for="_memory_overlays" title="Memory Overlays">Next</label></div>
- <div class="page" rel="memory_overlays"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Memory Overlays</li></ul><hr></div>
- <h1 id="memory_overlays">Memory Overlays<a href="#memory_overlays"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="overlay.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA30lEQVQ4y8XSO08CYRCF4WcJGKkobEyIndJZ+fvsLTSx1cTehlIL/4GtpYngLSBC5O5yWXYtPmmsLDbhNDOTmcy8ORk2rWidXN6d16Fx/34LJ8enV/9ZUMiN4OLmLINxOgJJmoDJbBgGskIGcTJNIF5Om7kQFNfJqD0Hg5cleG41wd5BFQyzXgSLre8SlEtq+RJEO+FycbUKcZmBz24HLL7S4El/AdL9sXwJDrebMQx3ozLUqqHVmwdv3iYxeP0I9S9ojn/wV632UwX6nes6lLLGEQxmcQUeHrtZLgSb1w/OmFbu5Te2NAAAAABJRU5ErkJggg=="> Click on the RAM icon (or press <kbd>F8</kbd>) to modify the memory overlays.</p>
- <p>Overlays are very useful, because they allow switching portions of the RAM, so that you can handle more data than what actually
- fits in the memory. You can use these to dynamically load sprites, maps, fonts or any arbitrary program data in run-time with
- the <a href="#memload" onclick="c('memload')">memload</a> function.</p>
- <p>They have another very useful feature: if you use <a href="#memsave" onclick="c('memsave')">memsave</a> in your program, then the contents of the overlay will be saved on
- the user's computer. Next time you call <samp>memload</samp>, it won't load the overlay's data from your floppy, rather from the user's
- computer. With this, you can create permanent storage to store high-scores for example.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="overlayscr.png" src="data:image/png;base64,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"></div><span class="fig">Memory Overlays</span>
- <h2 id="overlay_selector">Overlay Selector<a href="#overlay_selector"></a></h2>
- <p>On the top you can see the memory overlays' overview with each overlay's length (<span class="ui2">1</span>). The darker entries mean that
- particular overlay isn't set. You have 256 overlay slots, from 00 to FF.</p>
- <h2 id="overlay_contents">Overlay Contents<a href="#overlay_contents"></a></h2>
- <p>Below the table you can see the hexdump of the overlay's contents (only if a non-empty overlay is selected, <span class="ui2">2</span>).</p>
- <p>Hexdump is a pretty simple and straightforward format: in the first coloumn you can see the address, which is always
- dividable by 16. This is followed by the hex representation of 16 bytes at that address, followed by the character representation
- of the same 16 bytes. That's all to it.</p>
- <h2 id="overlay_menu">Overlay Menu<a href="#overlay_menu"></a></h2>
- <p>On the menu bar (<span class="ui2">3</span>), you can specify a memory address and a size, and press on the <span class="ui1">Save</span> button to store
- data in the selected overlay. Pressing the <span class="ui1">Load</span> button will load the contents of the overlay into the specified memory
- address, but this time the size only specifies the upper limit how much bytes to load.</p>
- <p>The <span class="ui1">Export</span> button will bring up the save file modal, and will allow you to save and modify the binary data with a
- third party editor. To import a memory overlay back, all you need to do is naming the file <samp>memXX.bin</samp>, where <samp>XX</samp> is the number
- of the overlay you want use, from 00 to FF, and just drag'n'drop that file into the MEG-4's screen.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_music_tracks" title="Music Tracks">Previous</label><label class="btn next" accesskey="n" for="_visual_editor" title="Visual Editor">Next</label></div>
- <div class="page" rel="visual_editor"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Visual Editor</li></ul><hr></div>
- <h1 id="visual_editor">Visual Editor<a href="#visual_editor"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="visual.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABE0lEQVQ4y7WTMUrEQBSGv9lsssGEQGQFUwSVvYNFmlXIFYStxcJGG/EWEkEbCw+wh7BQi228gQqiaQQhhcxqZIWxyARmFzvH18zwz8fjn3/eiDzfcjFKyvoM4ORgdR9Aaf34/PUCIAz9Q5Pv8MfqLgpCMAF4ePnc1YpqdDH5rYE9B+3dN/zuDkDyGHjNSZPCek+eAjzJOtNZHFlxIIqiuAcIgmANoKqqNwDv7nrJBGeb2x8AcRyvNI7ls50MoigaAKRp2gFwHCcBGL9/+SY46vdrkyvLcmAng3YSpayvtFbpdXmBndPD0M/tzkHbcTqtRwCz4fDSBN2b273mtXrj//0LSpEBfCeJNwcqlelt68C14uAHSWxG3raKahQAAAAASUVORK5CYII="> Click on the flowchart icon (or press <kbd>F9</kbd>) to edit the source code visually using structograms.</p>
- <p>Code has three sub-pages, one allows you to edit the source code visually (this one), textual edit can be done in the <a href="#code_editor" onclick="c('code_editor')">Code Editor</a>,
- and your program's machine code can be seen in the <a href="#debugger" onclick="c('debugger')">debugger</a>.</p>
- <p>TODO</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_memory_overlays" title="Memory Overlays">Previous</label><label class="btn next" accesskey="n" for="_debugger" title="Debugger">Next</label></div>
- <div class="page" rel="debugger"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Editors »</li><li> Debugger</li></ul><hr></div>
- <h1 id="debugger">Debugger<a href="#debugger"></a></h1>
- <p><img class="imgt" width="16" height="16" alt="debug.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABSElEQVQ4y63Sv0ubcRAG8M+rKUglVpFGagbFrhYpSFL6Ojh1K6HQwdFu+UeyZXYrBGdBByHQgoIEIUhLs6SIpIk/Kg2ohVpCEUI6fG1x973puDvuee65J3IbpVKpBblc7g1sbVc/wMiDYbAUv3wF3W53E4rF4lMYcs9I/U9SqffQ6pw0wOgk+NZqgmy73YBsNrt+d0FyDBaazRX4evUrNB5Pg5FOB3zf2wEPFxefJcogKpfLMYzW6zV4vhAAepkpcFStBuQvQZrTfB6k43gpGQ16vd4axMfHYGpuFrRubsLExUWoR1G4uV4H7fn5tWQ0+JdsrK4O4ODzJ/BibCxo8aMLdi8vQVwogHeVSpSsD/7k8z/h0f7+BJydH4LfgwF4ksmEbywvX4NKJWEn1hqN1zA3Pn4N7X5/A/pDAWN2ZuYtfKzV0ok68S9SjF9jRorm/QAAAABJRU5ErkJggg=="> Click on the ladybug icon (or press <kbd>F10</kbd>) to examine your program's machine code.</p>
- <p>Code has three sub-pages, one where you can see your program's machine code (this one), the <a href="#code_editor" onclick="c('code_editor')">Code Editor</a> where you can write
- the source code as text, and the <a href="#visual_editor" onclick="c('visual_editor')">Visual Editor</a>, where you can do the same using structograms.</p>
- <div class="warn"><p><span>Warning</span></p><p> The debugger only works with the built-in languages. It is not available with third party languages like Lua for example,
- those are not, and cannot be supported.</p></div>
- <p>Here you can see how the CPU sees your program. By pressing <kbd>Space</kbd> you can do a step by step execution and see
- the registers and the memory change. Clicking on the <span class="ui1">Code</span> / <span class="ui1">Data</span> button in the menu (<span class="ui2">1</span>, or
- pressing the <kbd>Tab</kbd> key) will switch between code and data views.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="debugscr.png" src="data:image/png;base64,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"></div><span class="fig">Debugger</span>
- <h2 id="code_view">Code View<a href="#code_view"></a></h2>
- <p>On the left you can see the callstack (<span class="ui2">2</span>). This is used to backtrace function calls. It also displays the corresponding
- source line where the function was called. This is a link, clicking on it will bring up the <a href="#code_editor" onclick="c('code_editor')">Code Editor</a>, positioned at the line
- in question. The top of the list is always the line which is currently being executed.</p>
- <p>On the right is the list of bytecode instructions in <a href="#assembly" onclick="c('assembly')">Assembly</a> that the CPU actually executes (<span class="ui2">3</span>).</p>
- <h2 id="data_view">Data View<a href="#data_view"></a></h2>
- <p>On the left is the list of your global variables with their actual values (<span class="ui2">2</span>).</p>
- <p>On the right you can see the stack (<span class="ui2">3</span>), which is splitted into separate parts. Everything above the BP register is the
- argument list to the currently running function, and everything below that but above the SP register is the area for the local
- variables.</p>
- <h2 id="registers">Registers<a href="#registers"></a></h2>
- <p>Independently to which view is active, you can always see the CPU registers at the bottom (<span class="ui2">4</span>). With third party
- languages, only the FLG, TMR and PC registers are available. See <a href="#mnemonics" onclick="c('mnemonics')">mnemonics</a> for more details on each register.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_visual_editor" title="Visual Editor">Previous</label><label class="btn next" accesskey="n" for="_c" title="C">Next</label></div>
- <div class="page" rel="c"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Programming »</li><li> C</li></ul><hr></div>
- <h1 id="c">C<a href="#c"></a></h1>
- <p>If you want to use this language, then start your program with a <samp>#!c</samp> line.</p>
- <h2 id="ex_c">Example Program<a href="#ex_c"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_c">/* global variables */</span>
- <span class="hl_t">int</span> <span class="hl_v">acounter</span> <span class="hl_o">=</span> <span class="hl_n">123</span>;
- <span class="hl_t">float</span> <span class="hl_v">anumber</span> <span class="hl_o">=</span> <span class="hl_n">3.1415</span>;
- <span class="hl_t">addr_t</span> <span class="hl_v">anaddress</span> <span class="hl_o">=</span> <span class="hl_n">0x0048C</span>;
- <span class="hl_t">str_t</span> <span class="hl_v">astring</span> <span class="hl_o">=</span> <span class="hl_s">"something"</span>;
- <span class="hl_t">uint32_t</span> <span class="hl_v">anarray</span>[<span class="hl_n">10</span>];
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* local variables */</span>
- <span class="hl_t">int</span> <span class="hl_v">iamlocal</span> <span class="hl_o">=</span> <span class="hl_n">123</span>;
- }
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Get MEG-4 style outputs */</span>
- <span class="hl_f">printf</span>(<span class="hl_s">"a counter %d, left shift %d\n"</span>, <span class="hl_v">acounter</span>, <span class="hl_f">getkey</span>(<span class="hl_v">KEY_LSHIFT</span>));
- }</code></div>
- <h2 id="description">Description<a href="#description"></a></h2>
- <p>The default language of the console is <b>MEG-4 C</b>. Despite being a very simple language, it is for somewhat intermediate
- programmers. If you're a total beginner, then I'd recommend using <a href="#basic" onclick="c('basic')">BASIC</a> instead.</p>
- <p>It was created as a deliberately simplified ANSI C to help learning programming. Hence it is limited, not everything is
- supported that ANSI C expects, but replacing</p>
- <div class="pre"><pre>
- #!c
- </pre></div>
- <p>with</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_p">#include <stdint.h></span>
- <span class="hl_t">typedef</span> <span class="hl_t">char</span><span class="hl_o">*</span> <span class="hl_t">str_t</span>;
- <span class="hl_t">typedef</span> <span class="hl_t">void</span><span class="hl_o">*</span> <span class="hl_t">addr_t</span>;</code></div>
- <p>will make the MEG-4 C source to compile with any standard ANSI C compiler (gcc, clang, tcc etc.).</p>
- <p>It has one non-standard keyword, the <samp>debug;</samp>, which you can place anywhere in your code and will invoke the built-in
- <a href="#debugger" onclick="c('debugger')">debugger</a>. After this, you can execute your code step by step, watching what it is doing.</p>
- <p>Here comes a gentle introduction to the C language, focusing on what's special in MEG-4 C.</p>
- <h2 id="pre_compiler">Pre-compiler<a href="#pre_compiler"></a></h2>
- <p>Because there's only one source, and system function prototypes are supported out-of-the-box, there's no need for header files.
- The pre-compiler therefore is limited to simple (non-macro) defines and conditional source code blocks only.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br></pre><code><span class="hl_c">/* replace all occurance of (defvar) with (expression) */</span>
- <span class="hl_p">#define (defvar) (expression)</span>
- <span class="hl_c">/* include code block if (defvar) is defined */</span>
- <span class="hl_p">#ifdef (defvar)</span>
- <span class="hl_c">/* include code block if (defvar) is not defined */</span>
- <span class="hl_p">#ifndef (defvar)</span>
- <span class="hl_c">/* include code block if (expression) is true */</span>
- <span class="hl_p">#if (expression)</span>
- <span class="hl_c">/* else block */</span>
- <span class="hl_p">#else</span>
- <span class="hl_c">/* end of conditional code block inclusion */</span>
- <span class="hl_p">#endif</span></code></div>
- <p>You can use enumerations with the <samp>enum</samp> keyword, separated by commas and enclosed in curly brackets. Each element will be one
- bigger than the previous one. These act as if you had multiple rows of defines. For example the following two are identical:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_p">#define A 0</span>
- <span class="hl_p">#define B 1</span>
- <span class="hl_p">#define C 2</span></code></div>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">enum</span> { <span class="hl_v">A</span>, <span class="hl_v">B</span>, <span class="hl_v">C</span> };</code></div>
- <p>It is also possible to assign direct values using the equal sign, for example:</p>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">enum</span> { <span class="hl_v">ONE</span> <span class="hl_o">=</span> <span class="hl_n">1</span>, <span class="hl_v">TWO</span>, <span class="hl_v">THREE</span>, <span class="hl_v">FIVE</span> <span class="hl_o">=</span> <span class="hl_n">5</span>, <span class="hl_v">SIX</span> };</code></div>
- <h2 id="c_lit">Literals<a href="#c_lit"></a></h2>
- <p>MEG-4 C understands decimal based numbers (either integer or floating point with or without scientific notation). Hexadecimal
- numbers must be prefixed by <samp>0x</samp>, binary by <samp>0b</samp>, octal by <samp>0</samp>; characters must be surrounded by apostrophes and strings must
- be enclosed in double quotes:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br></pre><code><span class="hl_n">42</span>
- <span class="hl_n">3.1415</span>
- <span class="hl_n">.123e-10</span>
- <span class="hl_n">0777</span>
- <span class="hl_n">0b00100110</span>
- <span class="hl_n">0x0048C</span>
- <span class="hl_s">'á'</span>
- <span class="hl_s">"Goodbye and thanks for all the fish!\n"</span></code></div>
- <h2 id="c_var">Variables<a href="#c_var"></a></h2>
- <p>Unlike in BASIC, variables must be declared. You can place these declaration in two places: at the top level, or at the
- beginning of a function body. The former become global variable (accessible by all functions), while the latter will
- be a local variable, accessible only to the function where it was declared. Another difference, that global variables
- can be initialized (a value assigned to them using <samp>=</samp>), while local variables cannot be, you must explicitly write code
- to set their values.</p>
- <p>A declaration consist of two things: a type and a name. MEG-4 C supports all ANSI C types: <samp>char</samp> (signed byte), <samp>short</samp>
- (signed word), <samp>int</samp> (signed integer), <samp>float</samp> (floating point). You might also put <samp>unsigned</samp> in front of these to make
- them, well, unsigned. In ANSI C <samp>int</samp> can be omitted with <samp>short</samp>, but in MEG-4 you must not use it. So <samp>short int</samp> isn't a
- valid type, <samp>short</samp> in itself is. Furthermore MEG-4 C supports and prefers standard types instead (defined in stdint.h under
- ANSI C). These have some simple rules: if they are unsigned, then they start with the letter <samp>u</samp>; then <samp>int</samp> means integer
- type, followed by the number of bits they occupy, and finally suffixed by a <samp>_t</samp> which stands for type. For example,
- <samp>int</samp> is the same as <samp>int32_t</samp> and <samp>unsigned short</samp> is the same as <samp>uint16_t</samp>. Examples:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_t">int</span> <span class="hl_v">a</span> <span class="hl_o">=</span> <span class="hl_n">42</span>;
- <span class="hl_t">uint8_t</span> <span class="hl_v">b</span> <span class="hl_o">=</span> <span class="hl_n">0xFF</span>;
- <span class="hl_t">short</span> <span class="hl_v">c</span> <span class="hl_o">=</span> <span class="hl_n">0xFFFF</span>;
- <span class="hl_t">str_t</span> <span class="hl_v">d</span> <span class="hl_o">=</span> <span class="hl_s">"Something"</span>;
- <span class="hl_t">float</span> <span class="hl_v">e</span> <span class="hl_o">=</span> <span class="hl_n">3.1415</span>;</code></div>
- <p>Unlike in ANSI C, which allows only English letters in variable names, MEG-4 C allows anything that does not start with a
- number and isn't a keyword. For example, <samp>int déjà_vu;</samp> is perfectly valid (note how the name contains non-English letters).</p>
- <h2 id="c_arr">Arrays and Pointers<a href="#c_arr"></a></h2>
- <p>Multiple elements of the same type can be assigned to a single variable, which is called an array. Pointers are special variables
- that contain a memory address which points to a list of variables of the same type. The similarity between these two isn't a
- coincidence, but there are subtle differences.</p>
- <p>There's no special command for arrays like in BASIC, instead you just specify the number of elements between <samp>[</samp> and <samp>]</samp> after
- the name.</p>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_v">anarray</span>[<span class="hl_n">10</span>];</code></div>
- <p>Referencing an array's value happens similarily, with an index between <samp>[</samp> and <samp>]</samp>. The index starts at 0, and array bounds are
- checked. MEG-4 supports up to 4 dimensions.</p>
- <p>To declare a pointer, one has to prefix the variable name with a <samp>*</samp>. Because C does not recognize string type, and strings are
- actually just bytes one after another in memory, therefore we use <samp>char*</samp> pointer. This might be strange at first, so MEG-4 C
- defines the <samp>str_t</samp> type, but this is actually the same as <samp>char*</samp>.</p>
- <p>Because pointers hold an address, you must give an address as their value (using <samp>&</samp> returns the address of the variables), and
- pointers always return an address. In order to get the value at that address, you must de-reference the pointer. You have two
- options to do this: either prefix it with <samp>*</samp>, or suffix it with an index between <samp>[</samp> and <samp>]</samp>, just like with arrays. For example
- the two reference in the second printf are the same:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_t">int</span> <span class="hl_v">variable</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- <span class="hl_t">int</span> <span class="hl_o">*</span><span class="hl_v">pointer</span> <span class="hl_o">=</span> <span class="hl_o">&</span><span class="hl_v">variable</span>;
- <span class="hl_f">printf</span>(<span class="hl_s">"pointer's value (address): %x\n"</span>, <span class="hl_v">pointer</span>);
- <span class="hl_f">printf</span>(<span class="hl_s">"pointed value: %x %x\n"</span>, <span class="hl_o">*</span><span class="hl_v">pointer</span>, <span class="hl_v">pointer</span>[<span class="hl_n">0</span>]);</code></div>
- <p>You cannot mix pointers with arrays, because that would be ambiguous. For example</p>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_o">*</span><span class="hl_v">a</span>[<span class="hl_n">10</span>];</code></div>
- Could mean a single pointer that points to a list of 10 contiguous integers (<samp>*(int[10])</samp>), but it could also mean 10 independent
- pointers each pointing to a single, not neccessarily contiguous integers (<samp>(*int)[10]</samp>). Not obvious which one, so pointers and
- arrays cannot be mixed within the same declaration.
- <div class="warn"><p><span>Warning</span></p><p> Unlike arrays, there's no bound check with pointers!</p></div>
- <h2 id="c_op">Operators<a href="#c_op"></a></h2>
- <p>In descending order of precedence:</p>
- <p><p><b>Arithmetic</b>
- <div class="pre"><pre>
- * / %
- + -
- </pre></div>
- The first one is multiplication, division and <samp>%</samp> is modulus (aka. remainder after division, eg. <samp>10 % 3</samp> is 1), addition and
- subtraction.</p></p>
- <p><p><b>Relational</b>
- <div class="pre"><pre>
- != ==
- <= >= < >
- </pre></div>
- Not equal, equal, less or equal, greater or equal, less than, greater than.</p></p>
- <p><p><b>Logical</b>
- <div class="pre"><pre>
- !
- &&
- ||
- </pre></div>
- Logical negation (0 becomes 1, everything non-zero becomes 0), and (returns 1 if both arguments are non-zero), or (returns
- 1 if at least one of the arguments are non-zero).</p></p>
- <p><p><b>Bitwise</b>
- <div class="pre"><pre>
- ~
- &
- |
- << >>
- </pre></div>
- Bitwise negation, bitwise and, bitwise or, bitwise shift to the left and right. Note that these are the same operators like
- logical ones, but instead of the whole value, they operate on each binary digits individually. For example logical not
- <samp>!0x0100 == 0</samp>, but the bitwise not <samp>~0x0100 == 0x1011</samp>. Bitwise shifting is the same as multiplying or dividing by power of
- two. For example shifting a value to the left by 1 is the same as multipying it by 2.</p></p>
- <p><p><b>Incremental</b>
- <div class="pre"><pre>
- ++ --
- </pre></div>
- Increment and decrement. You can use these as a prefix and as a suffix as well. When used as prefix, like <samp>++a</samp>, then the
- variable is increased and the increased value is returned; as a suffix <samp>a++</samp> it will increase the value too, but returns
- the value <i>before</i> the increment.</p></p>
- <div class="pre"><pre class="lineno">1<br>2<br></pre><code><span class="hl_v">a</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">b</span> <span class="hl_o">=</span> <span class="hl_o">++</span><span class="hl_v">a</span> <span class="hl_o">*</span> <span class="hl_n">3</span>; <span class="hl_c">/* a == 1, b == 3 */</span>
- <span class="hl_v">a</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">b</span> <span class="hl_o">=</span> <span class="hl_v">a</span><span class="hl_o">++</span> <span class="hl_o">*</span> <span class="hl_n">3</span>; <span class="hl_c">/* a == 1, b == 0 */</span></code></div>
- <p><p><b>Conditional</b>
- <div class="pre"><pre>
- ?:
- </pre></div>
- This is a trinary operator, with three operands, separated by <samp>?</samp> and <samp>:</samp>. If the first operand is true, then the whole
- expression is replaced by the second operand, otherwise with the third. For this the type of the second and third operands
- must be the same. For example <samp>a >= 0 ? "positive" : "negative"</samp>.</p></p>
- <p><p><b>Assignment</b>
- <div class="pre"><pre>
- = *= /= %= += -= ~= &= |= <<= >>=
- </pre></div>
- The first places the value of an expression in a variable. The others execute the operation on that variable, and then store
- the result in the very same variable. For example these are identical: <samp>a *= 3;</samp> and <samp>a = a * 3;</samp>.</p></p>
- <p>Unlike other languages, in C the assignment is an operator too. This means they can appear anywhere in an expression, for example
- <samp>a > 0 && (b = 2)</samp>. That's why assignment is <samp>=</samp> and logical equal is <samp>==</samp>, so that you can use both in the same expression.</p>
- <p>There's also the address-of operator, the <samp>&</samp> which returns the address of a variable. This is usable when the MEG-4 API expects
- an <samp>addr_t</samp> address parameter.</p>
- <p>Operators are executed in precedence order, for example in <samp>1+2*3</samp> we have two operators, <samp>+</samp> and <samp>*</samp>, but <samp>*</samp> has the higher
- precedence, therefore first <samp>2*3</samp> is calculated, and then <samp>1+6</samp>. That's why the result is 7 and not 9.</p>
- <h2 id="c_flow">Control Flow<a href="#c_flow"></a></h2>
- <p>Unlike BASIC where the primary way of altering the control flow is defining labels, in C (as being a structured language) you
- specify blocks of instructions instead. If you want to handle multiple instructions together, then you place them between <samp>{</samp>
- and <samp>}</samp> (but it is possible to put only one instruction in a block).</p>
- <p>Like everythig else, the conditionals use such blocks too:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_k">if</span>(<span class="hl_v">a</span> <span class="hl_o">!=</span> <span class="hl_v">b</span>) {
- <span class="hl_f">printf</span>(<span class="hl_s">"a not equal to b\n"</span>);
- } <span class="hl_k">else</span> {
- <span class="hl_f">printf</span>(<span class="hl_s">"a equals b\n"</span>);
- }</code></div>
- <p>You can add an <samp>else</samp> branch, which executes when then the expression is false, but using <samp>else</samp> is optional.</p>
- <p>With multiple possible values, you can use a <samp>switch</samp> statement. Here each <samp>case</samp> acts as a label, being choosen depending on the
- expression's value.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br></pre><code><span class="hl_k">switch</span>(<span class="hl_v">a</span>) {
- <span class="hl_k">case</span> <span class="hl_n">1</span>: <span class="hl_f">printf</span>(<span class="hl_s">"a is 1.\n"</span>);
- <span class="hl_k">case</span> <span class="hl_n">2</span>: <span class="hl_f">printf</span>(<span class="hl_s">"a is either 1 or 2.\n"</span>); <span class="hl_k">break</span>;
- <span class="hl_k">case</span> <span class="hl_n">3</span>: <span class="hl_f">printf</span>(<span class="hl_s">"a is 3.\n"</span>); <span class="hl_k">break</span>;
- <span class="hl_k">default</span>: <span class="hl_f">printf</span>(<span class="hl_s">"a is something else.\n"</span>); <span class="hl_k">break</span>;
- }</code></div>
- <p>There's a special block, defined by the label <samp>default</samp>, which matches any value that doesn't have its own <samp>case</samp>. These blocks
- are concatenated, so if the control jumps to a <samp>case</samp>, then that block, and every other blocks after that is executed. In the
- example above, if <samp>a</samp> is 1, then two printfs will be called. To stop this from happening, you must use <samp>break</samp> to exit the <samp>switch</samp>.</p>
- <p>C supports three iteration types: pre-testing loop, post-testing loop and counting loop.</p>
- <p>The pre-testing loop checks the conditional expression first, and does not run the iteration body at all if its false.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_k">while</span>(<span class="hl_v">a</span> <span class="hl_o">!=</span> <span class="hl_n">1</span>) {
- <span class="hl_o">...</span>
- }</code></div>
- <p>The post-testing loop runs the iteration body at least once, it checks the condition afterwards, and repeats only if its true.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_k">do</span> {
- <span class="hl_o">...</span>
- } <span class="hl_k">while</span>(<span class="hl_v">a</span> <span class="hl_o">!=</span> <span class="hl_n">1</span>);</code></div>
- <p>The counting loop in C is pretty universal. It expects three expressions, in order: initialization, conditional, stepping. Because
- you can freely define these, it is possible to use multiple variables or whatever expressions you like (not necessarily counting).
- Example:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_k">for</span>(<span class="hl_v">a</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">a</span> <span class="hl_o"><</span> <span class="hl_n">10</span>; <span class="hl_v">a</span><span class="hl_o">++</span>) {
- <span class="hl_o">...</span>
- }</code></div>
- <p>This is the same as:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_v">a</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_k">while</span>(<span class="hl_v">a</span> <span class="hl_o"><</span> <span class="hl_n">10</span>) {
- <span class="hl_o">...</span>
- <span class="hl_v">a</span><span class="hl_o">++</span>;
- }</code></div>
- <p>You can exit the iteration by using the <samp>break</samp> statement in its body, but with loops you can also use <samp>continue</samp>, which breaks
- the execution of the block too, but instead of exiting it continues from the next iteration.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_k">for</span>(<span class="hl_v">a</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">a</span> <span class="hl_o"><</span> <span class="hl_n">100</span>; <span class="hl_v">a</span><span class="hl_o">++</span>) {
- <span class="hl_k">if</span>(<span class="hl_v">a</span> <span class="hl_o"><</span> <span class="hl_n">10</span>) <span class="hl_k">continue</span>;
- <span class="hl_k">if</span>(<span class="hl_v">a</span> <span class="hl_o">></span> <span class="hl_n">50</span>) <span class="hl_k">break</span>;
- <span class="hl_f">printf</span>(<span class="hl_s">"a value between 10 and 50: %d\n"</span>, <span class="hl_v">a</span>);
- }</code></div>
- <h2 id="c_funcs">Functions<a href="#c_funcs"></a></h2>
- <div class="info"><p><span>Important</span></p><p> No statements allowed outside of function bodies.</p></div>
- <p>You must divide your programs into smaller programs which might be called multiple times, these are called functions. These
- are declared as return value's type, name, argument list in <samp>(</samp> and <samp>)</samp> parenthesis, and function body in a <samp>{</samp> and <samp>}</samp> block.
- Two of these, <samp>setup</samp> and <samp>loop</samp> has special meaning, see <a href="#code_editor" onclick="c('code_editor')">code editor</a>. The C language does not differentiate between
- subroutines and functions; everything is a function. The only difference is, functions that do not return a value has the
- return value's type as <samp>void</samp>.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br></pre><code><span class="hl_t">void</span> <span class="hl_f">are_we_there_yet</span>(<span class="hl_t">int</span> <span class="hl_v">A</span>)
- {
- <span class="hl_k">if</span>(<span class="hl_v">A</span> <span class="hl_o">></span> <span class="hl_n">0</span>) {
- <span class="hl_f">printf</span>(<span class="hl_s">"Not yet\n"</span>)
- <span class="hl_k">return</span>;
- }
- <span class="hl_f">printf</span>(<span class="hl_s">"YES! Do things we wanted to do on arrival\n"</span>);
- <span class="hl_k">return</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* do it once */</span>
- <span class="hl_f">are_we_there_yet</span>(<span class="hl_n">1</span>);
- <span class="hl_c">/* then do it again */</span>
- <span class="hl_f">are_we_there_yet</span>(<span class="hl_n">0</span>);
- }</code></div>
- <p>Functions are simply called from programs by their names, followed by their argument list in parenthesis (the parenthesis is
- mandatory, even if the argument list is empty). There's no special command and there's no difference in the call if the function
- returns a value or not.</p>
- <p>Returning from a function is done by the <samp>return;</samp> instruction. If the function has a return value, then you must specify an
- expression after the <samp>return</samp>, and that expression's type must be the same as the function's return type. Specifying <samp>return</samp>
- (independly if the function has a return value or not) is mandatory.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br></pre><code><span class="hl_t">str_t</span> <span class="hl_f">mystringfunc</span>()
- {
- <span class="hl_k">return</span> <span class="hl_s">"a string"</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_v">a</span> <span class="hl_o">=</span> <span class="hl_f">mystringfunc</span>();
- }</code></div>
- <h2 id="c_api">Provided Functions<a href="#c_api"></a></h2>
- <p>The C language has no special commands for input or output; you simply just do MEG-4 API calls for those. The <a href="#getc" onclick="c('getc')">getc</a> returns
- a character, <a href="#gets" onclick="c('gets')">gets</a> returns a string and you can print out strings with <a href="#printf" onclick="c('printf')">printf</a>.</p>
- <p>Under MEG-4 C you use the MEG-4 API exactly as it is specified in this documentation, there are no tricks, no renaming, no
- suffixes, nor substitutions either.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_debugger" title="Debugger">Previous</label><label class="btn next" accesskey="n" for="_basic" title="BASIC">Next</label></div>
- <div class="page" rel="basic"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Programming »</li><li> BASIC</li></ul><hr></div>
- <h1 id="basic">BASIC<a href="#basic"></a></h1>
- <p>If you want to use this language, then start your program with a <samp>#!bas</samp> line.</p>
- <h2 id="ex_bas">Example Program<a href="#ex_bas"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br></pre><code><span class="hl_c">#!bas</span>
- <span class="hl_c">REM global variables</span>
- <span class="hl_k">LET</span> <span class="hl_v">acounter%</span> <span class="hl_o">=</span> <span class="hl_n">123</span>
- <span class="hl_k">LET</span> <span class="hl_v">anumber</span> <span class="hl_o">=</span> <span class="hl_n">3.1415</span>
- <span class="hl_k">LET</span> <span class="hl_v">anaddress%</span> <span class="hl_o">=</span> <span class="hl_n">$0048C</span>
- <span class="hl_k">LET</span> <span class="hl_v">astring$</span> <span class="hl_o">=</span> <span class="hl_s">"something"</span>
- <span class="hl_k">DIM</span> <span class="hl_f">anarray</span>(<span class="hl_n">10</span>)
- <span class="hl_c">REM Things to do on startup</span>
- <span class="hl_k">SUB</span> <span class="hl_v">setup</span>
- <span class="hl_c">REM local variables</span>
- <span class="hl_k">LET</span> <span class="hl_v">iamlocal</span> <span class="hl_o">=</span> <span class="hl_n">123</span>
- <span class="hl_k">END</span> <span class="hl_k">SUB</span>
- <span class="hl_c">REM Things to run for every frame, at 60 FPS</span>
- <span class="hl_k">SUB</span> <span class="hl_k">loop</span>
- <span class="hl_c">REM BASIC style print</span>
- <span class="hl_k">PRINT</span> <span class="hl_s">"I"</span>; <span class="hl_s">" am"</span>; <span class="hl_s">" running"</span>
- <span class="hl_c">REM Get MEG-4 style outputs</span>
- <span class="hl_f">printf</span>(<span class="hl_s">"a counter %d, left shift %d\n"</span>, <span class="hl_v">acounter%</span>, <span class="hl_f">getkey%</span>(<span class="hl_v">KEY_LSHIFT</span>))
- <span class="hl_k">END</span> <span class="hl_k">SUB</span></code></div>
- <h2 id="dialect">Dialect<a href="#dialect"></a></h2>
- <p>BASIC stands for Beginners' All-purpose Symbolic Instruction Code. It was created by John Kemeny in 1963 with the explicit goal
- to teach students programming with it. The <b>MEG-4 BASIC</b> is a bit more modern than that, it supports all of ANSI X3.60-1978
- (ECMA-55) and many featues from ANSI X3.113-1987 (ECMA-116) too, with minor deviations. It allows longer than 2 characters
- identifiers, and its floating point as well as integer arithmetics are 32 bit. Most important differences: no interactive mode,
- therefore you don't have to number each instruction any more (you can use labels instead), and all BASIC keywords are
- case-insensitive as in the specification, but variable and function names are <i>case-sensitive</i>. The MEG-4 API function calls
- must be in lower-case; as for the rest it is up to you, but those are case-sensitive too (for example <samp>APPLE</samp>, <samp>Apple</samp> and
- <samp>apple</samp> are three distinct variables).</p>
- <p>It has one non-standard keyword, the <samp>DEBUG</samp>, which you can place anywhere in your code and will invoke the built-in
- <a href="#debugger" onclick="c('debugger')">debugger</a>. After this, you can execute your code step by step, watching what it is doing.</p>
- <p>Here goes a detailed description with examples, and all differences noted.</p>
- <h2 id="bas_lit">Literals<a href="#bas_lit"></a></h2>
- <p>MEG-4 BASIC understands decimal based numbers (either integer or floating point with or without scientific notation). Hexadecimal
- numbers must be prefixed by <samp>$</samp> (not in the specification, but this was usual in Commodore BASIC and pretty much in every other
- dialects of the '80s) and strings must be enclosed in double quotes:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_n">42</span>
- <span class="hl_n">3.1415</span>
- <span class="hl_n">.123e</span><span class="hl_n">-10</span>
- <span class="hl_n">$0048C</span>
- <span class="hl_s">"Goodbye and thanks for all the fish!\n"</span></code></div>
- <div class="warn"><p><span>Warning</span></p><p> The specification expects 7-bit ASCII, but MEG-4 BASIC uses zero terminated UTF-8 encoding. It also accepts C-like escape
- sequences (eg. <samp>\"</samp> is double quotes, <samp>\t</samp> is tab, <samp>\n</samp> is the newline character), and the string's maximum size is limited to
- 255 bytes (the specification requires 18 bytes).</p></div>
- <h2 id="bas_var">Variables<a href="#bas_var"></a></h2>
- <p>Variables aren't declared, instead the last letter in their name identifies their type. This can be <samp>%</samp> for integers, <samp>$</samp> for
- strings, and not in the specification, but MEG-4 BASIC accepts <samp>!</samp> for bytes and <samp>#</samp> for double bytes (word). Anything else is
- interpreted as a floating point variable.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_k">LET</span> <span class="hl_v">A%</span> <span class="hl_o">=</span> <span class="hl_n">42</span>
- <span class="hl_k">LET</span> <span class="hl_v">B!</span> <span class="hl_o">=</span> <span class="hl_n">$FF</span>
- <span class="hl_k">LET</span> <span class="hl_v">C#</span> <span class="hl_o">=</span> <span class="hl_n">$FFFF</span>
- <span class="hl_k">LET</span> <span class="hl_v">D$</span> <span class="hl_o">=</span> <span class="hl_s">"string"</span>
- <span class="hl_k">LET</span> <span class="hl_v">E</span> <span class="hl_o">=</span> <span class="hl_n">3.1415</span></code></div>
- <p>The conversion between byte, integer and floating point is automatic and fully transparent. However trying to use a string literal
- in a number variable or storing a number literal in a string variable would reasult in an error (you must explicitly use <samp>STR$</samp>
- and <samp>VAL</samp>).</p>
- <p>When you assign values to variables, the <samp>LET</samp> command can be omited.</p>
- <p>Literals can also be added to your program using the <samp>DATA</samp> statement, and then can be assigned to variables with the <samp>READ</samp>
- command. <samp>READ</samp> reads in as many data literals as many variables its argument has, and can be called repeatedly. To reset to the
- first <samp>DATA</samp> statement where <samp>READ</samp> reads from, use <samp>RESTORE</samp>.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br></pre><code><span class="hl_k">RESTORE</span>
- <span class="hl_k">READ</span> <span class="hl_v">name$</span>, <span class="hl_v">income</span>
- <span class="hl_k">DATA</span> <span class="hl_s">"Joe"</span>, <span class="hl_n">1234</span>
- <span class="hl_k">DATA</span> <span class="hl_s">"John"</span>, <span class="hl_n">2345</span></code></div>
- <p>There are a few special variables, provided by the system. <samp>RND</samp> returns a floating point random number between 0 and 1,
- <samp>INKEY$</samp> returns the key the user has pressed or an empty string, <samp>TIME</samp> returns the number of ticks (1/1000th seconds) since
- power on, and finally <samp>NOW%</samp> returns the number of elapsed seconds since Jan 1, 1970 midnight in Greenwich Mean Time.</p>
- <h2 id="bas_arr">Arrays<a href="#bas_arr"></a></h2>
- <p>Multiple elements of the same type can be assigned to a single variable, which is called an array.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_k">DIM</span> <span class="hl_f">A</span>(<span class="hl_n">10</span>)
- <span class="hl_k">DIM</span> <span class="hl_f">B</span>(<span class="hl_n">10</span>, <span class="hl_n">10</span>)
- <span class="hl_k">DIM</span> <span class="hl_f">C</span>(<span class="hl_n">1</span> <span class="hl_k">TO</span> <span class="hl_n">6</span>)</code></div>
- <p>The BASIC specification expects two-dimensional arrays to be handled, but MEG-4 BASIC supports up to 4 dimensions. Array elements
- can be bytes, integers, numbers or strings. Dynamically resizing arrays with <samp>REDIM</samp> is not possible, all are statically allocated
- using <samp>DIM</samp>. When the size isn't given, one dimension and 10 elements are assumed.</p>
- <div class="warn"><p><span>Warning</span></p><p> Index starts at 1 (as in ANSI and not at 0 as in ECMA-55). The <samp>OPTION BASE</samp> statement isn't supported, but you can set the
- first index of each array with the <samp>TO</samp> keyword.</p></div>
- <h2 id="bas_op">Operators<a href="#bas_op"></a></h2>
- <p>In descending order of precedence:</p>
- <p><p><b>Arithmetic</b>
- <div class="pre"><pre>
- ^
- * / MOD
- + -
- </pre></div>
- The first one is for exponentiation (eg. b squared is <samp>b^2</samp>), multiplication, division and <samp>MOD</samp> is modulus (aka. remainder after
- division, eg. <samp>10 MOD 3</samp> is 1), addition and subtraction.</p></p>
- <p><p><b>Relational</b>
- <div class="pre"><pre>
- <> =
- <= >= < >
- </pre></div>
- Not equal, equal, less or equal, greater or equal, less than, greater than.</p></p>
- <p><p><b>Logical</b>
- <div class="pre"><pre>
- NOT
- AND
- OR
- </pre></div>
- Logical negation (0 becomes 1, everything non-zero becomes 0), and (returns 1 if both arguments are non-zero), or (returns
- 1 if at least one of the arguments are non-zero).</p></p>
- <p>There's one non-standard operator, the <samp>@</samp> returns the address of a variable. This is usable when the MEG-4 API expects an
- <samp>addr_t</samp> address parameter.</p>
- <p>Operators are executed in precedence order, for example in <samp>1+2*3</samp> we have two operators, <samp>+</samp> and <samp>*</samp>, but <samp>*</samp> has the higher
- precedence, therefore first <samp>2*3</samp> is calculated, and then <samp>1+6</samp>. That's why the result is 7 and not 9.</p>
- <h2 id="bas_flow">Control Flow<a href="#bas_flow"></a></h2>
- <p>The statement <samp>END</samp> stops control flow (exists your program).</p>
- <p>MEG-4 BASIC does not use line numbers any more, instead it supports <samp>GOTO</samp> with labels, for example:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_v">this_is_a_label</span>:
- <span class="hl_k">GOTO</span> <span class="hl_v">this_is_a_label</span></code></div>
- <div class="warn"><p><span>Warning</span></p><p> Some BASIC dialects allow you to use multiple commands separated by <samp>:</samp> in one line. In MEG-4 BASIC <samp>:</samp> identifies
- a label, so you must use one command per line (as expected by ECMA-55).</p></div>
- <p>Conditional jumps use labels too:</p>
- <div class="pre"><pre class="lineno">1<br>2<br></pre><code><span class="hl_k">IF</span> <span class="hl_v">a$</span> <span class="hl_o"><></span> <span class="hl_v">b$</span> <span class="hl_k">THEN</span> <span class="hl_v">this_is_a_label</span>
- <span class="hl_k">ON</span> <span class="hl_v">a</span> <span class="hl_k">GOTO</span> <span class="hl_v">label1</span>, <span class="hl_v">label2</span>, <span class="hl_v">label3</span> <span class="hl_k">ELSE</span> <span class="hl_v">labelother</span></code></div>
- <p>The <samp>ON</samp> .. <samp>GOTO</samp> always needs a numerical expression, and chooses the label accordingly, starting from 1 (if the expression
- is zero or negative, that always jumps to the <samp>ELSE</samp> label). There's no <samp>ON</samp> .. <samp>GOSUB</samp>, because GOSUB does not accept labels in
- MEG-4 BASIC.</p>
- <div class="warn"><p><span>Warning</span></p><p> The <samp>GOSUB</samp> statement does not accept labels at all, and its semantics are a bit changed in MEG-4 BASIC, see below.</p></div>
- <p>For <samp>IF</samp>, both numerical and relational expressions are accepted (every non-zero expression considered true), and what's more,
- multi line <samp>IF</samp> .. <samp>THEN</samp> .. <samp>ELSE</samp> .. <samp>END IF</samp> blocks are supported too (but no <samp>SELECT CASE</samp>).</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_k">IF</span> <span class="hl_v">var</span> <span class="hl_o">>=</span> <span class="hl_n">0</span> <span class="hl_k">THEN</span>
- <span class="hl_k">PRINT</span> <span class="hl_s">"var is positive"</span>
- <span class="hl_k">ELSE</span>
- <span class="hl_k">PRINT</span> <span class="hl_s">"var is negative"</span>
- <span class="hl_k">END</span> <span class="hl_k">IF</span></code></div>
- <p>As an exception, one command is allowed in a single line <samp>IF</samp>, provided that's a <samp>GOTO</samp> or an <samp>END</samp>:</p>
- <div class="pre"><pre class="lineno">1<br>2<br></pre><code><span class="hl_k">IF</span> <span class="hl_v">a</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_k">THEN</span> <span class="hl_k">GOTO</span> <span class="hl_v">label</span>
- <span class="hl_k">IF</span> <span class="hl_v">b</span> <span class="hl_o">></span> <span class="hl_n">42</span> <span class="hl_k">THEN</span> <span class="hl_k">END</span></code></div>
- <p>For iterations, the counting loop checks its condition before the iteration (does not execute the block if the initial value is
- greater (or less) than the limit), and looks like this:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_k">FOR</span> <span class="hl_v">i</span> <span class="hl_o">=</span> <span class="hl_n">1</span> <span class="hl_k">TO</span> <span class="hl_n">100</span> <span class="hl_k">STEP</span> <span class="hl_n">2</span>
- <span class="hl_n">...</span>
- <span class="hl_k">NEXT</span> <span class="hl_v">i</span></code></div>
- <p>This <samp>FOR</samp> .. <samp>NEXT</samp> is essentially the same as:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br></pre><code><span class="hl_k">LET</span> <span class="hl_v">i</span> <span class="hl_o">=</span> <span class="hl_n">1</span>
- <span class="hl_k">LET</span> <span class="hl_v">lim</span> <span class="hl_o">=</span> <span class="hl_n">100</span>
- <span class="hl_k">LET</span> <span class="hl_v">inc</span> <span class="hl_o">=</span> <span class="hl_n">2</span>
- <span class="hl_v">line1</span>:
- <span class="hl_k">IF</span> (<span class="hl_v">i</span> <span class="hl_o">-</span> <span class="hl_v">lim</span>) <span class="hl_o">*</span> <span class="hl_f">SGN</span>(<span class="hl_v">inc</span>) <span class="hl_o">></span> <span class="hl_n">0</span> <span class="hl_k">THEN</span> <span class="hl_v">line2</span>
- <span class="hl_n">...</span>
- <span class="hl_k">LET</span> <span class="hl_v">i</span> <span class="hl_o">=</span> <span class="hl_v">i</span> <span class="hl_o">+</span> <span class="hl_v">inc</span>
- <span class="hl_k">GOTO</span> <span class="hl_v">line1</span>
- <span class="hl_v">line2</span>:</code></div>
- <p>The loop variable must be of float type. The <samp>STEP</samp> is optional (defaults to 1.0), and the expression after that can be a float
- literal or another float variable. The from and limit both can be more complex expressions, but they too must return a floating
- point value.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_k">FOR</span> <span class="hl_v">i</span> <span class="hl_o">=</span> (<span class="hl_n">1</span><span class="hl_o">+</span><span class="hl_n">2</span><span class="hl_o">+</span><span class="hl_v">a</span>)<span class="hl_o">*</span><span class="hl_n">3</span> <span class="hl_k">TO</span> <span class="hl_n">4</span><span class="hl_o">*</span>(<span class="hl_n">5</span><span class="hl_o">+</span><span class="hl_n">6</span>)<span class="hl_o">/</span><span class="hl_v">b</span><span class="hl_o">+</span><span class="hl_v">c</span> <span class="hl_k">STEP</span> <span class="hl_v">j</span>
- <span class="hl_n">...</span>
- <span class="hl_k">NEXT</span> <span class="hl_v">i</span></code></div>
- <div class="warn"><p><span>Warning</span></p><p> Unlike the specification, which allows multiple variables after <samp>NEXT</samp>, MEG-4 BASIC accepts <i>exactly one</i>. So for
- nested loops you'll have to use multiple <samp>NEXT</samp> commands, exactly as many as <samp>FOR</samp> statements there are.</p></div>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_k">FOR</span> <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">1</span> <span class="hl_k">TO</span> <span class="hl_n">10</span>
- <span class="hl_k">FOR</span> <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">1</span> <span class="hl_k">TO</span> <span class="hl_n">100</span>
- <span class="hl_n">...</span>
- <span class="hl_k">NEXT</span> <span class="hl_v">x</span>
- <span class="hl_k">NEXT</span> <span class="hl_v">y</span></code></div>
- <p>MEG-4 BASIC has no other kind of loops like C, but if you want a non-counting pre-testing loop, you can do this:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_v">again</span>:
- <span class="hl_k">IF</span> <span class="hl_v">a</span> <span class="hl_o">></span> <span class="hl_n">0</span> <span class="hl_k">THEN</span>
- <span class="hl_n">...</span>
- <span class="hl_k">GOTO</span> <span class="hl_v">again</span>
- <span class="hl_k">END</span> <span class="hl_k">IF</span></code></div>
- <p>And instead of a post-testing loop:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_v">again</span>:
- <span class="hl_n">...</span>
- <span class="hl_k">IF</span> <span class="hl_v">a</span> <span class="hl_o">></span> <span class="hl_n">0</span> <span class="hl_k">THEN</span> <span class="hl_v">again</span></code></div>
- <h2 id="bas_funcs">Subroutines and Functions<a href="#bas_funcs"></a></h2>
- <div class="info"><p><span>Important</span></p><p> Statements not inside of any subroutine are simply threated as if they were inside the <samp>setup</samp> subroutine.</p></div>
- <p>You can divide your programs into smaller programs which might be called multiple times, these are called subroutines. They are
- defined between <samp>SUB</samp> and <samp>END SUB</samp> blocks. Two of these, <samp>setup</samp> and <samp>loop</samp> has special meaning, see <a href="#code_editor" onclick="c('code_editor')">code editor</a>. As mentioned
- earlier, in MEG-4 BASIC <samp>GOSUB</samp> does not accept labels, and that's because here it accepts subroutine names only.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br></pre><code><span class="hl_k">SUB</span> <span class="hl_v">mysubroutine</span>
- <span class="hl_k">PRINT</span> <span class="hl_s">"do something that you want to do multiple times"</span>
- <span class="hl_k">END</span> <span class="hl_k">SUB</span>
- <span class="hl_c">REM do it once</span>
- <span class="hl_k">GOSUB</span> <span class="hl_v">mysubroutine</span>
- <span class="hl_c">REM then do it again</span>
- <span class="hl_k">GOSUB</span> <span class="hl_v">mysubroutine</span></code></div>
- <p>Control is transferred on <samp>GOSUB</samp>, and it is returned to the line after <samp>GOSUB</samp> when <samp>END SUB</samp> (or the optional <samp>RETURN</samp>) reached.
- Subroutines can access global variables and they might have parameters.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br></pre><code><span class="hl_k">SUB</span> <span class="hl_f">are_we_there_yet</span>(<span class="hl_v">A</span>)
- <span class="hl_k">IF</span> <span class="hl_v">A</span> <span class="hl_o">></span> <span class="hl_n">0</span> <span class="hl_k">THEN</span>
- <span class="hl_k">PRINT</span> <span class="hl_s">"Not yet"</span>
- <span class="hl_k">RETURN</span>
- <span class="hl_k">END</span> <span class="hl_k">IF</span>
- <span class="hl_k">PRINT</span> <span class="hl_s">"YES! Do things we wanted to do on arrival"</span>
- <span class="hl_k">END</span> <span class="hl_k">SUB</span>
- <span class="hl_c">REM do it once</span>
- <span class="hl_k">GOSUB</span> <span class="hl_f">are_we_there_yet</span>(<span class="hl_n">1</span>)
- <span class="hl_c">REM then do it again</span>
- <span class="hl_k">GOSUB</span> <span class="hl_f">are_we_there_yet</span>(<span class="hl_n">0</span>)</code></div>
- <p>Functions are very similar, but they must have a <samp>RETURN</samp> and their <samp>RETURN</samp> statement must contain a returned value, same type
- as identified by the function's name. Functions are simply called from programs by their names, followed by their argument list
- in parenthesis (the parenthesis is mandatory, even if the argument list is empty). For example:</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br></pre><code><span class="hl_k">FUNCTION</span> <span class="hl_f">mystringfunc$</span>()
- <span class="hl_k">RETURN</span> <span class="hl_s">"a string"</span>
- <span class="hl_k">END</span> <span class="hl_k">FUNCTION</span>
- <span class="hl_k">LET</span> <span class="hl_v">a$</span> <span class="hl_o">=</span> <span class="hl_f">mystringfunc$</span>()</code></div>
- <h2 id="bas_print">Print Statement<a href="#bas_print"></a></h2>
- <div class="pre"><pre>
- PRINT expression [;|,] [expression [;|,] [expression [;|,]]] ...
- </pre></div>
- <p>Prints one or more exporession on screen. If the expressions are separated by <samp>;</samp> semi-colon, then tightly one after another.
- If by <samp>,</samp> colon, then the output will be splitted into coloumns. Numbers are always prefixed by a space, and if the command ends
- in an expression (not in <samp>;</samp> nor in <samp>,</samp>), then a newline character will be printed at the end as well.</p>
- <h2 id="bas_input">Input Statement<a href="#bas_input"></a></h2>
- <div class="pre"><pre>
- INPUT "prompt" [;|,] variable
- </pre></div>
- <p>Prints out prompt, then reads in a value from user and stores it in the given variable. If the prompt and the variable is
- spearated by a <samp>,</samp> colon, then it also prints a <samp>?</samp> question-mark after the prompt.</p>
- <div class="warn"><p><span>Warning</span></p><p> The ECMA-55 specification allows multiple variables to be specified, but the MEG-4 BASIC allows only one.</p></div>
- <h2 id="bas_spec">Peek and Poke<a href="#bas_spec"></a></h2>
- <p>You can directly access the MEG-4 memory with these commands, even the MMIO area.</p>
- <b>Read</b>
- <div class="pre"><pre>
- variable = PEEK(address)
- </pre></div>
- <p>Reads in the byte at the given address, converts it into a floating point and stores it in the given variable.</p>
- <p>For example, to check if the keyboard queue is not empty:
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_k">IF</span> <span class="hl_k">PEEK</span>(<span class="hl_n">$1A</span>) <span class="hl_o"><></span> <span class="hl_k">PEEK</span>(<span class="hl_n">$1B</span>) <span class="hl_k">THEN</span></code></div></p>
- <b>Store</b>
- <div class="pre"><pre>
- POKE address, expression
- </pre></div>
- <p>Calculates the expression, converts it into a byte and stores that byte value at the given address.</p>
- <p>For example, to set the palette for color index 1:
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br></pre><code><span class="hl_c">REM red component</span>
- <span class="hl_k">POKE</span> <span class="hl_n">$84</span>, <span class="hl_n">10</span>
- <span class="hl_c">REM green component</span>
- <span class="hl_k">POKE</span> <span class="hl_n">$85</span>, <span class="hl_n">10</span>
- <span class="hl_c">REM blue component</span>
- <span class="hl_k">POKE</span> <span class="hl_n">$86</span>, <span class="hl_n">10</span>
- <span class="hl_c">REM alpha (transparency)</span>
- <span class="hl_k">POKE</span> <span class="hl_n">$87</span>, <span class="hl_n">255</span></code></div></p>
- <h2 id="bas_api">Provided Functions<a href="#bas_api"></a></h2>
- <p>Some MEG-4 API are provided as system variables, <samp>RND</samp> (<a href="#rnd" onclick="c('rnd')">rnd</a>), <samp>TIME</samp> (<a href="#time" onclick="c('time')">time</a>), <samp>NOW%</samp> (<a href="#now" onclick="c('now')">now</a>), and <samp>INKEY$</samp> (<a href="#getc" onclick="c('getc')">getc</a>).</p>
- <p>Others are provided as commands, <samp>INPUT</samp> (<a href="#gets" onclick="c('gets')">gets</a> + <a href="#val" onclick="c('val')">val</a>), <samp>PRINT</samp> (<a href="#printf" onclick="c('printf')">printf</a>), <samp>PEEK</samp> (<a href="#inb" onclick="c('inb')">inb</a>), <samp>POKE</samp> (<a href="#outb" onclick="c('outb')">outb</a>).</p>
- <p>As to comply with ECMA-55, two functions are renamed: <samp>SQR</samp> (<a href="#sqrt" onclick="c('sqrt')">sqrt</a>) and <samp>ATN%</samp> (<a href="#atan" onclick="c('atan')">atan</a>). All the rest is used as they appear
- in this documentation, except they are properly suffixed according their return types (for example, <a href="#str" onclick="c('str')">str</a> returns a string, so
- it is called <samp>STR$</samp>).</p>
- <p>Note that ECMA-55 expects that trigonometrical functions use radians by default (with an <samp>OPTION</samp> command to switch to degrees),
- however the MEG-4 API always uses degrees, 0 to 359, where 0 is up, and 90 is to the right. That's why the <samp>ATN%</samp> gets an
- integer type suffix for example, as it returns degrees in an integer.</p>
- <p>Normally all functions without a return value must be called with the <samp>GOSUB</samp> keyword, however the MEG-4 API is a special case,
- because with those the keyword can be ommited, and the API function can be used as-is.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_c" title="C">Previous</label><label class="btn next" accesskey="n" for="_assembly" title="Assembly">Next</label></div>
- <div class="page" rel="assembly"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Programming »</li><li> Assembly</li></ul><hr></div>
- <h1 id="assembly">Assembly<a href="#assembly"></a></h1>
- <p>If you want to use this language, then start your program with a <samp>#!asm</samp> line.</p>
- <h2 id="ex_asm">Example Program<a href="#ex_asm"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br></pre><code><span class="hl_c">#!asm</span>
- <span class="hl_t">.data</span>
- <span class="hl_c">/* global variables */</span>
- <span class="hl_v">acounter</span>: <span class="hl_t">di</span> <span class="hl_n">123</span>
- <span class="hl_v">anumber</span>: <span class="hl_t">df</span> <span class="hl_n">3.1415</span>
- <span class="hl_v">anaddress</span>: <span class="hl_t">di</span> <span class="hl_n">0x0048C</span>
- <span class="hl_v">astring</span>: <span class="hl_t">db</span> <span class="hl_s">"something"</span>
- <span class="hl_v">anarray</span>: <span class="hl_t">di</span> <span class="hl_n">0</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>
- <span class="hl_v">fmt</span>: <span class="hl_t">db</span> <span class="hl_s">"a counter %d, left shift %d\n"</span>
- <span class="hl_t">.code</span>
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">setup</span>:
- <span class="hl_c">/* local variables (not really, just reserve space on the stack) */</span>
- <span class="hl_k">sp</span> <span class="hl_n">-4</span>
- <span class="hl_k">ret</span>
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_v">loop</span>:
- <span class="hl_c">/* Get MEG-4 style outputs */</span>
- <span class="hl_k">pshci</span> <span class="hl_v">KEY_LSHIFT</span>
- <span class="hl_k">scall</span> <span class="hl_v">getkey</span>
- <span class="hl_k">sp</span> <span class="hl_n">4</span>
- <span class="hl_k">pushi</span>
- <span class="hl_k">ci</span> <span class="hl_v">acounter</span>
- <span class="hl_k">ldi</span>
- <span class="hl_k">pushi</span>
- <span class="hl_k">pshci</span> <span class="hl_v">fmt</span>
- <span class="hl_k">scall</span> <span class="hl_v">printf</span>
- <span class="hl_k">sp</span> <span class="hl_n">12</span>
- <span class="hl_k">ret</span></code></div>
- <h2 id="asm_desc">Description<a href="#asm_desc"></a></h2>
- <p>This isn't an actual programming language. When you compile one of the built-in languages, the compiler generates bytecode that
- the CPU executes. Assembly is a one-to-one transcription of that bytecode with human-readable textual mnemonics. It has two
- sections, data and code, both containing a series of labels and instructions. Instructions are mnemonics with an optional
- parameter.</p>
- <p>You can play around and experiment with this if you feel brave.</p>
- <h2 id="asm_lit">Literals<a href="#asm_lit"></a></h2>
- <p>Same as <a href="#c_lit" onclick="c('c_lit')">MEG-4 C literals</a>.</p>
- <h2 id="asm_var">Variables<a href="#asm_var"></a></h2>
- <p>There's no such thing as a variable in Assembly. Instead you specify the data section with <samp>.data</samp>, and just place the data after
- one of the <samp>db</samp> (byte), <samp>dw</samp> (word), <samp>di</samp> (integer), <samp>df</samp> (float) instructions. In this stream of data, before the instruction,
- you can place labels which will hold the address of that data. To load a value in your code section, first you put that label in
- the accumulator register using <samp>ci</samp>, and then issue one of the <samp>ldb</samp> (load byte), <samp>ldw</samp> (load word), <samp>ldi</samp> (load integer)
- or <samp>ldf</samp> (load float) instructions. If the <samp>ldb</samp> or <samp>ldw</samp> instructions has a non-zero argument, then they sign-extend the value
- to 32 bit.</p>
- <h2 id="asm_flow">Control Flow<a href="#asm_flow"></a></h2>
- <p>Everything that you place after the <samp>.code</samp> keyword will be code. There's no implicit control flow, each instruction is executed
- one after another; you have to alter the PC (program counter) using one of the <samp>jmp</samp> (jump), <samp>jz</samp> (jump if zero), <samp>jnz</samp> (jump if
- not zero) or <samp>sw</samp> (switch, case selection) instructions to change the control flow manually.</p>
- <h2 id="asm_func">Functions<a href="#asm_func"></a></h2>
- <p>There's no function declaration. You just use a label to mark a spot in the code. You push all arguments on the stack <i>in reverse
- order</i> using <samp>pushi</samp> and <samp>pushf</samp>, then you use a <samp>call</samp> mnemonic with that label. Within the function, you can get the address of
- these parameters with the <samp>adr</samp> (address) instruction, with its parameter being the function parameter's number multiplied by four.
- For example <samp>adr 0</samp> loads the first function parameter's address in the accumulator register, and <samp>adr 4</samp> loads the second's. You
- can return from the function with the <samp>ret</samp> instruction. Return values are returned in the accumulator register, which you can set
- directly with the <samp>ci</samp> (constant integer) and <samp>cf</samp> (constant float) instructions, and indirectly with the <samp>popi</samp>, <samp>popf</samp>, <samp>ldb</samp>,
- <samp>ldw</samp>, <samp>ldi</samp> and <samp>ldf</samp> instructions. After the call it is the caller's responsibility to remove the parameters from the stack by
- using an <samp>sp</samp> + number of parameters times four instruction.</p>
- <h2 id="asm_api">Provided Functions<a href="#asm_api"></a></h2>
- <p>You have all the MEG-4 API functions at your disposal; using the exact names as they are listed in this documentation.</p>
- <p>You have to push all arguments on the stack <i>in reverse order</i>, then use an <samp>scall</samp> (system call) mnemonic with a MEG-4 API
- function name as parameter. After the call it is the caller's responsibility to remove the parameters from the stack.</p>
- <h2 id="mnemonics">Mnemonics<a href="#mnemonics"></a></h2>
- <p>Before we go into the details, we must talk about the MEG-4 CPU specification.</p>
- <p>The MEG-4 CPU is a 32-bit, little endian CPU. All values are stored in a way that smallest digits are placed on the smaller
- addresses. It is capable of performing operations on 8 bit, 16 bit and 32 bit integers (signed and unsigned) and on 32 bit
- floating point numbers.</p>
- <p>The memory model is flat, meaning all data can be accessed through a single offset. Has no paging and no virtual address
- translation, no segmentation, except all data and code segment references are implicit (aka. no segment prefixes, referencing
- segments are automatic).</p>
- <p>For security reasons code segment and data segment are separated, as well as the call stack and the data stack. Stack overflow
- and any other code injection through buffer overflow attacks are simply impossible on this CPU, which makes it very secure and
- bullet-proof (also supporting 3rd party bytecode like <a href="#lua" onclick="c('lua')">Lua</a> would be impossible without code separation). In this reagard it is
- more like a Harvard architecture, but in every other aspect it's more like a von Neumann architecture.</p>
- <p>The CPU has the following registers:</p>
- <ul><li>AC: accumulator register, with an integer value</li>
- <li>AF: accumulator register, with a floating point value</li>
- <li>FLG: processor flags (setup is done, blocked for I/O, blocked for timer, execution stopped)</li>
- <li>TMR: the timer register's current value</li>
- <li>DP: data pointer, this points to the top of the used global variable memory</li>
- <li>BP: base pointer, marks the top of the function stack frame</li>
- <li>SP: stack pointer, the bottom of the stack</li>
- <li>CP: callstack pointer, the top of the callstack</li>
- <li>PC: program counter, the address of the instruction currently being executed</li></ul>
- <p>The data segment is byte based, meaning DP, BP and SP registers point to 8 bit units. You can place data to the data segment
- using the <samp>db</samp> (8 bit), <samp>dw</samp> (16 bit), <samp>di</samp> (32 bit) and <samp>df</samp> (32 bit float) mnemonics. These might have one or more comma
- separated arguments, and for <samp>db</samp> strings literals and character literals can also be used.</p>
- <p>The code segment has a 32 bit granularity, meaning that's the smallest address unit you can use. For this reason the PC points to
- these 32 bit units and not bytes. The following mnemonics can be used to place instructions to the code segment:</p>
- <div class="table"><table><tr><th>Mnemonic </th><th>Parameter </th><th>Description </th></tr>
- <tr><td><samp>debug</samp> </td><td></td><td>Invoke the built-in <a href="#debugger" onclick="c('debugger')">debugger</a> (nop for MEG-4 PRO) </td></tr>
- <tr><td><samp>ret</samp> </td><td></td><td>Return from <samp>call</samp>, pops from the call stack </td></tr>
- <tr><td><samp>scall</samp> </td><td>MEG-4 API function </td><td>System call </td></tr>
- <tr><td><samp>call</samp> </td><td>address/code label </td><td>Pushes the position to the call stack and then calls a function </td></tr>
- <tr><td><samp>jmp</samp> </td><td>address/code label </td><td>Jump to address </td></tr>
- <tr><td><samp>jz</samp> </td><td>address/code label </td><td>Jump to address if accumulator is zero </td></tr>
- <tr><td><samp>jnz</samp> </td><td>address/code label </td><td>Jump to address if accumulator isn't zero </td></tr>
- <tr><td><samp>js</samp> </td><td>address/code label </td><td>Pop value, adjust its sign and jump to address if negative or zero </td></tr>
- <tr><td><samp>jns</samp> </td><td>address/code label </td><td>Pop value, adjust its sign and jump to address if positive </td></tr>
- <tr><td><samp>sw</samp> </td><td>num,addr,addr0,addr1... </td><td>Switch (see below) </td></tr>
- <tr><td><samp>ci</samp> </td><td>number/data label </td><td>Place an integer value into the accumulator </td></tr>
- <tr><td><samp>cf</samp> </td><td>number </td><td>Place a floating point number into the accumulator </td></tr>
- <tr><td><samp>bnd</samp> </td><td>number </td><td>Checks if the accumulator's value is between 0 and number </td></tr>
- <tr><td><samp>lea</samp> </td><td>number </td><td>Loads the address DP + number into the accumulator </td></tr>
- <tr><td><samp>adr</samp> </td><td>number </td><td>Loads the address BP + number into the accumulator </td></tr>
- <tr><td><samp>sp</samp> </td><td>number </td><td>Adjust SP register by number </td></tr>
- <tr><td><samp>pshci</samp> </td><td>number/data label </td><td>Push an integer constant to the data stack </td></tr>
- <tr><td><samp>pshcf</samp> </td><td>number </td><td>Push a float constant to the data stack </td></tr>
- <tr><td><samp>pushi</samp> </td><td></td><td>Push the accumulator as integer to the data stack </td></tr>
- <tr><td><samp>pushf</samp> </td><td></td><td>Push the accumulator as float to the data stack </td></tr>
- <tr><td><samp>popi</samp> </td><td></td><td>Pop an integer value from the data stack into the accumulator </td></tr>
- <tr><td><samp>popf</samp> </td><td></td><td>Pop a float value from the data stack into the accumulator </td></tr>
- <tr><td><samp>cnvi</samp> </td><td></td><td>Convert the value on the top of the stack into an integer </td></tr>
- <tr><td><samp>cnvf</samp> </td><td></td><td>Convert the value on the top of the stack into a float </td></tr>
- <tr><td><samp>ldb</samp> </td><td>0/1 </td><td>Loads a byte from the address in the accumulator (sign extend if arg is non-zero) </td></tr>
- <tr><td><samp>ldw</samp> </td><td>0/1 </td><td>Loads a word from the address in the accumulator (sign extend if arg is non-zero) </td></tr>
- <tr><td><samp>ldi</samp> </td><td></td><td>Loads an integer from the address in the accumulator </td></tr>
- <tr><td><samp>ldf</samp> </td><td></td><td>Loads a float from the address in the accumulator </td></tr>
- <tr><td><samp>stb</samp> </td><td></td><td>Pops the address from stack and stores a byte from accumulator </td></tr>
- <tr><td><samp>stw</samp> </td><td></td><td>Pops the address from stack and stores a word from accumulator </td></tr>
- <tr><td><samp>sti</samp> </td><td></td><td>Pops the address from stack and stores an int from accumulator </td></tr>
- <tr><td><samp>stf</samp> </td><td></td><td>Pops the address from stack and stores a float from accumulator </td></tr>
- <tr><td><samp>incb</samp> </td><td>number </td><td>Pops the address from stack and increase the byte at address by number </td></tr>
- <tr><td><samp>incw</samp> </td><td>number </td><td>Pops the address from stack and increase the word at address by number </td></tr>
- <tr><td><samp>inci</samp> </td><td>number </td><td>Pops the address from stack and increase the integer at address by number </td></tr>
- <tr><td><samp>decb</samp> </td><td>number </td><td>Pops the address from stack and decrease the byte at address by number </td></tr>
- <tr><td><samp>decw</samp> </td><td>number </td><td>Pops the address from stack and decrease the word at address by number </td></tr>
- <tr><td><samp>deci</samp> </td><td>number </td><td>Pops the address from stack and decrease the integer at address by number </td></tr>
- <tr><td><samp>not</samp> </td><td></td><td>Perform logical NOT on the accumulator </td></tr>
- <tr><td><samp>neg</samp> </td><td></td><td>Perform bitwise NOT on the accumulator </td></tr>
- <tr><td><samp>or</samp> </td><td></td><td>Pop a value from stack and perform bitwise OR on the accumulator </td></tr>
- <tr><td><samp>xor</samp> </td><td></td><td>Pop a value from stack and perform EXCLUSIVE OR on the accumulator </td></tr>
- <tr><td><samp>and</samp> </td><td></td><td>Pop a value from stack and perform bitwise AND on the accumulator </td></tr>
- <tr><td><samp>shl</samp> </td><td></td><td>Pop a value and shift accumulator bits to the left, place result in accumulator </td></tr>
- <tr><td><samp>shr</samp> </td><td></td><td>Pop a value and shift accumulator bits to the right, place result in accumulator </td></tr>
- <tr><td><samp>eq</samp> </td><td></td><td>Pop a value and set accumulator if accumulator is the same as the popped </td></tr>
- <tr><td><samp>ne</samp> </td><td></td><td>Pop a value and set accumulator if accumulator isn't the same </td></tr>
- <tr><td><samp>lts</samp> </td><td></td><td>Pop a value and set accumulator if it's less than as signed </td></tr>
- <tr><td><samp>gts</samp> </td><td></td><td>Pop a value and set accumulator if it's greater than as signed </td></tr>
- <tr><td><samp>les</samp> </td><td></td><td>Pop a value and set accumulator if it's less or equal as signed </td></tr>
- <tr><td><samp>ges</samp> </td><td></td><td>Pop a value and set accumulator if it's greater or equal as signed </td></tr>
- <tr><td><samp>ltu</samp> </td><td></td><td>Pop a value and set accumulator if it's less than as unsigned </td></tr>
- <tr><td><samp>gtu</samp> </td><td></td><td>Pop a value and set accumulator if it's greater than as unsigned </td></tr>
- <tr><td><samp>leu</samp> </td><td></td><td>Pop a value and set accumulator if it's less or equal as unsigned </td></tr>
- <tr><td><samp>geu</samp> </td><td></td><td>Pop a value and set accumulator if it's greater or equal as unsigned </td></tr>
- <tr><td><samp>ltf</samp> </td><td></td><td>Pop a value and set accumulator if it's less than as float </td></tr>
- <tr><td><samp>gtf</samp> </td><td></td><td>Pop a value and set accumulator if it's greater than as float </td></tr>
- <tr><td><samp>lef</samp> </td><td></td><td>Pop a value and set accumulator if it's less or equal as float </td></tr>
- <tr><td><samp>gef</samp> </td><td></td><td>Pop a value and set accumulator if it's greater or equal as float </td></tr>
- <tr><td><samp>addi</samp> </td><td></td><td>Pop a value and add it to the accumulator as integer </td></tr>
- <tr><td><samp>subi</samp> </td><td></td><td>Pop a value and subtract the accumulator from it as integer </td></tr>
- <tr><td><samp>muli</samp> </td><td></td><td>Pop a value and multiply the accumulator with it as integer </td></tr>
- <tr><td><samp>divi</samp> </td><td></td><td>Pop a value and divide by the accumulator as integer </td></tr>
- <tr><td><samp>modi</samp> </td><td></td><td>Pop a value, divide and put the remainder in accumulator as integer </td></tr>
- <tr><td><samp>powi</samp> </td><td></td><td>Pop a value and raise to the power of accumulator as interger </td></tr>
- <tr><td><samp>addf</samp> </td><td></td><td>Pop a value and add it to the accumulator as float </td></tr>
- <tr><td><samp>subf</samp> </td><td></td><td>Pop a value and subtract the accumulator from it as float </td></tr>
- <tr><td><samp>mulf</samp> </td><td></td><td>Pop a value and multiply the accumulator with it as float </td></tr>
- <tr><td><samp>divf</samp> </td><td></td><td>Pop a value and divide by the accumulator as float </td></tr>
- <tr><td><samp>modf</samp> </td><td></td><td>Pop a value, divide and put the fractional in accumulator as float </td></tr>
- <tr><td><samp>powf</samp> </td><td></td><td>Pop a value and raise to the power of accumulator as float </td></tr></table></div>
- <p>The <samp>sw</samp> mnemonic has variable number (but at least three) arguments. The first one is a number, the second is a code label, as
- well as all the rest are code labels. It subtracts the number from the accumulator and checks if the result is positive and
- less than the number of the labels given. If not, then it jumps to the first label in the second argument. If it is, then it
- picks the accumulatorth label starting from the third parameter (second label), and jumps there.</p>
- <p>So in a nutshell it is
- <div class="pre"><pre>
- sw (value), (label to jump to otherwise),
- (label to jump to if accumulator equals value),
- (label to jump to if accumulator equals value + 1),
- (label to jump to if accumulator equals value + 2),
- (label to jump to if accumulator equals value + 3),
- ...
- (label to jump to if accumulator equals value + N)
- </pre></div></p>
- <p>Every <samp>sw</samp> mnemonic might have up to 256 value labels.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_basic" title="BASIC">Previous</label><label class="btn next" accesskey="n" for="_lua" title="Lua">Next</label></div>
- <div class="page" rel="lua"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Programming »</li><li> Lua</li></ul><hr></div>
- <h1 id="lua">Lua<a href="#lua"></a></h1>
- <p>If you want to use this language, then start your program with a <samp>#!lua</samp> line.</p>
- <h2 id="ex_lua">Example Program<a href="#ex_lua"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br></pre><code><span class="hl_c">#!lua</span>
- <span class="hl_c">-- global variables</span>
- <span class="hl_v">acounter</span> <span class="hl_o">=</span> <span class="hl_n">123</span>
- <span class="hl_v">anumber</span> <span class="hl_o">=</span> <span class="hl_n">3.1415</span>
- <span class="hl_v">anaddress</span> <span class="hl_o">=</span> <span class="hl_n">0x0048C</span>
- <span class="hl_v">astring</span> <span class="hl_o">=</span> <span class="hl_s">"something"</span>
- <span class="hl_v">anarray</span> <span class="hl_o">=</span> {}
- <span class="hl_c">-- Things to do on startup</span>
- <span class="hl_k">function</span> <span class="hl_f">setup</span>()
- <span class="hl_c">-- local variables</span>
- <span class="hl_v">iamlocal</span> <span class="hl_o">=</span> <span class="hl_n">234</span>
- <span class="hl_k">end</span>
- <span class="hl_c">-- Things to run for every frame, at 60 FPS</span>
- <span class="hl_k">function</span> <span class="hl_f">loop</span>()
- <span class="hl_c">-- Lua style print</span>
- <span class="hl_f">print</span>(<span class="hl_s">"I"</span>, <span class="hl_s">"am"</span>, <span class="hl_s">"running"</span>)
- <span class="hl_c">-- Get MEG-4 style outputs</span>
- <span class="hl_f">printf</span>(<span class="hl_s">"a counter %d, left shift %d\n"</span>, <span class="hl_v">acounter</span>, <span class="hl_f">getkey</span>(<span class="hl_v">KEY_LSHIFT</span>))
- <span class="hl_k">end</span></code></div>
- <h2 id="further_info">Further Info<a href="#further_info"></a></h2>
- <p>Unlike the other languages, this isn't integral part of MEG-4, rather provided by a thrid party library. Due to that it does
- not (and cannot) have perfect integration (no debugger and no translated error messages for example). Its runner is bloated
- and much slower compared to the other languages, but it works, and you can use it.</p>
- <p>The embedded version is <b>Lua 5.4.7</b>, with modifications. For security reasons it lacks concurrency, as well as module loading,
- file access, pipes, command execution. The <samp>coroutine</samp>, <samp>io</samp> and <samp>os</samp> modules and their functions aren't available (but the
- language features and all the other parts of the baselib are still there). Instead of these missing tables, it has the MEG-4 API,
- which can be used as in any other language (with some slight, minor differences for better integration).</p>
- <p>If you're interested in this language then you can find more information in the <a href="https://www.lua.org/pil" target="new">Programming in Lua</a>
- documentation.</p>
- <h2 id="api_differences">API Differences<a href="#api_differences"></a></h2>
- <ul><li><a href="#memsave" onclick="c('memsave')">memsave</a> can accept either a MEG-4 memory address (integer) or a Lua table with integers (supposed to be a byte array).</li>
- <li><a href="#memload" onclick="c('memload')">memload</a> on call, a valid MEG-4 memory address must be passed, but then it returns a Lua table anyway. If you don't want to
- load to a specific MMIO area, then specify <samp>MEM_USER</samp> (0x30000) and just simply use the data in the returned Lua table.</li>
- <li><a href="#memcpy" onclick="c('memcpy')">memcpy</a> parameters can be two MEG-4 memory addresses as usual, or one of them can be a Lua table (just one, not both). You
- can use this function to copy data between MEG-4 memory and Lua (but <a href="#inb" onclick="c('inb')">inb</a> and <a href="#outb" onclick="c('outb')">outb</a> also works).</li>
- <li><a href="#remap" onclick="c('remap')">remap</a> only accepts a Lua table (with 256 integer values).</li>
- <li><a href="#maze" onclick="c('maze')">maze</a> instead of the last two parameters (<samp>numnpc</samp> and <samp>npc</samp>) one single Lua table (with each element being another table) can be used.</li>
- <li><a href="#printf" onclick="c('printf')">printf</a>, <a href="#sprintf" onclick="c('sprintf')">sprintf</a> and <a href="#trace" onclick="c('trace')">trace</a> does not use MEG-4's <a href="#format_string" onclick="c('format_string')">format string</a> rules, but Lua's (however these two are almost entirely identical).</li></ul><br style="clear:both;"><label class="btn prev" accesskey="p" for="_assembly" title="Assembly">Previous</label><label class="btn next" accesskey="n" for="_memory_map" title="Memory Map">Next</label></div>
- <div class="page" rel="memory_map"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> API Reference »</li><li> Memory Map</li></ul><hr></div>
- <h1 id="memory_map">Memory Map<a href="#memory_map"></a></h1>
- <h2 id="misc">Misc<a href="#misc"></a></h2>
- <p>All values are little endian, so the smaller digit is stored on the smaller address.</p>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>00000 </td><td class="right">1 </td><td>MEG-4 firmware version major </td></tr>
- <tr><td>00001 </td><td class="right">1 </td><td>MEG-4 firmware version minor </td></tr>
- <tr><td>00002 </td><td class="right">1 </td><td>MEG-4 firmware version bugfix </td></tr>
- <tr><td>00003 </td><td class="right">1 </td><td>performance counter, last frame's unspent time in 1/1000th secs </td></tr>
- <tr><td>00004 </td><td class="right">4 </td><td>number of 1/1000th second ticks since power on </td></tr>
- <tr><td>00008 </td><td class="right">8 </td><td>UTC unix timestamp </td></tr>
- <tr><td>00010 </td><td class="right">2 </td><td>current locale </td></tr></table></div>
- <p>The performance counter shows the time unspent when the last frame was generated. If this is zero or negative, then it means
- how much your loop() function has overstepped its available timeframe.</p>
- <h2 id="pointer">Pointer<a href="#pointer"></a></h2>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>00012 </td><td class="right">2 </td><td>pointer buttons state (see <a href="#getbtn" onclick="c('getbtn')">getbtn</a> and <a href="#getclk" onclick="c('getclk')">getclk</a>) </td></tr>
- <tr><td>00014 </td><td class="right">2 </td><td>pointer sprite index </td></tr>
- <tr><td>00016 </td><td class="right">2 </td><td>pointer X coordinate </td></tr>
- <tr><td>00018 </td><td class="right">2 </td><td>pointer Y coordinate </td></tr></table></div>
- <p>The pointer buttons are as follows:</p>
- <div class="table"><table><tr><th>Define </th><th>Bitmask </th><th>Description </th></tr>
- <tr><td><samp>BTN_L</samp> </td><td class="right">1 </td><td>Left mouse button </td></tr>
- <tr><td><samp>BTN_M</samp> </td><td class="right">2 </td><td>Middle mouse button </td></tr>
- <tr><td><samp>BTN_R</samp> </td><td class="right">4 </td><td>Right mouse button </td></tr>
- <tr><td><samp>SCR_U</samp> </td><td class="right">8 </td><td>Scroll up </td></tr>
- <tr><td><samp>SCR_D</samp> </td><td class="right">16 </td><td>Scroll down </td></tr>
- <tr><td><samp>SCR_L</samp> </td><td class="right">32 </td><td>Scroll left </td></tr>
- <tr><td><samp>SCR_R</samp> </td><td class="right">64 </td><td>Scroll right </td></tr></table></div>
- <p>The upper bits of the pointer sprite index are used for hotspots: bit 13-15 hotspot Y, bit 10-12 hotspot X, bit 0-9 sprite.
- There are some predefined built-in cursors:</p>
- <div class="table"><table><tr><th>Define </th><th>Value </th><th>Description </th></tr>
- <tr><td><samp>PTR_NORM</samp> </td><td class="right">03fb </td><td>Normal (arrow) pointer </td></tr>
- <tr><td><samp>PTR_TEXT</samp> </td><td class="right">03fc </td><td>Text pointer </td></tr>
- <tr><td><samp>PTR_HAND</samp> </td><td class="right">0bfd </td><td>Link pointer </td></tr>
- <tr><td><samp>PTR_ERR</samp> </td><td class="right">93fe </td><td>Error pointer </td></tr>
- <tr><td><samp>PTR_NONE</samp> </td><td class="right">ffff </td><td>The pointer is hidden </td></tr></table></div>
- <h2 id="keyboard">Keyboard<a href="#keyboard"></a></h2>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>0001A </td><td class="right">1 </td><td>keyboard queue tail </td></tr>
- <tr><td>0001B </td><td class="right">1 </td><td>keyboard queue head </td></tr>
- <tr><td>0001C </td><td class="right">64 </td><td>keyboard queue, 16 elements, each 4 bytes (see <a href="#popkey" onclick="c('popkey')">popkey</a>) </td></tr>
- <tr><td>0005C </td><td class="right">18 </td><td>keyboard keys pressed state by scancodes (see <a href="#getkey" onclick="c('getkey')">getkey</a>) </td></tr></table></div>
- <p>The keys popped from the queue are represented in UTF-8. Some invalid UTF-8 sequences represent special (non-printable)
- keys, for example:</p>
- <div class="table"><table><tr><th>Keycode </th><th>Description </th></tr>
- <tr><td><samp>\x8</samp> </td><td>The character 8, <kbd>←Backspace</kbd> key </td></tr>
- <tr><td><samp>\x9</samp> </td><td>The character 9, <kbd>Tab</kbd> key </td></tr>
- <tr><td><samp>\n</samp> </td><td>The character 10, <kbd>⏎Enter</kbd> key </td></tr>
- <tr><td><samp>\x1b</samp> </td><td>The character 27, <kbd>Esc</kbd> key </td></tr>
- <tr><td><samp>Del</samp> </td><td>The <kbd>Del</kbd> key </td></tr>
- <tr><td><samp>Up</samp> </td><td>The cursor arrow <kbd>▴</kbd> key </td></tr>
- <tr><td><samp>Down</samp> </td><td>The cursor arrow <kbd>▾</kbd> key </td></tr>
- <tr><td><samp>Left</samp> </td><td>The cursor arrow <kbd>◂</kbd> key </td></tr>
- <tr><td><samp>Rght</samp> </td><td>The cursor arrow <kbd>▸</kbd> key </td></tr>
- <tr><td><samp>Cut</samp> </td><td>The Cut key (or <kbd>Ctrl</kbd>+<kbd>X</kbd>) </td></tr>
- <tr><td><samp>Cpy</samp> </td><td>The Copy key (or <kbd>Ctrl</kbd>+<kbd>C</kbd>) </td></tr>
- <tr><td><samp>Pst</samp> </td><td>The Paste key (or <kbd>Ctrl</kbd>+<kbd>V</kbd>) </td></tr></table></div>
- <p>The scancodes are as follows:</p>
- <div class="table"><table><tr><th>ScanCode </th><th>Address </th><th>Bitmask </th><th>Define </th></tr>
- <tr><td class="right">0 </td><td>0005C </td><td class="right">1 </td><td><samp>KEY_CHEAT</samp> </td></tr>
- <tr><td class="right">1 </td><td>0005C </td><td class="right">2 </td><td><samp>KEY_F1</samp> </td></tr>
- <tr><td class="right">2 </td><td>0005C </td><td class="right">4 </td><td><samp>KEY_F2</samp> </td></tr>
- <tr><td class="right">3 </td><td>0005C </td><td class="right">8 </td><td><samp>KEY_F3</samp> </td></tr>
- <tr><td class="right">4 </td><td>0005C </td><td class="right">16 </td><td><samp>KEY_F4</samp> </td></tr>
- <tr><td class="right">5 </td><td>0005C </td><td class="right">32 </td><td><samp>KEY_F5</samp> </td></tr>
- <tr><td class="right">6 </td><td>0005C </td><td class="right">64 </td><td><samp>KEY_F6</samp> </td></tr>
- <tr><td class="right">7 </td><td>0005C </td><td class="right">128 </td><td><samp>KEY_F7</samp> </td></tr>
- <tr><td class="right">8 </td><td>0005D </td><td class="right">1 </td><td><samp>KEY_F8</samp> </td></tr>
- <tr><td class="right">9 </td><td>0005D </td><td class="right">2 </td><td><samp>KEY_F9</samp> </td></tr>
- <tr><td class="right">10 </td><td>0005D </td><td class="right">4 </td><td><samp>KEY_F10</samp> </td></tr>
- <tr><td class="right">11 </td><td>0005D </td><td class="right">8 </td><td><samp>KEY_F11</samp> </td></tr>
- <tr><td class="right">12 </td><td>0005D </td><td class="right">16 </td><td><samp>KEY_F12</samp> </td></tr>
- <tr><td class="right">13 </td><td>0005D </td><td class="right">32 </td><td><samp>KEY_PRSCR</samp> </td></tr>
- <tr><td class="right">14 </td><td>0005D </td><td class="right">64 </td><td><samp>KEY_SCRLOCK</samp> </td></tr>
- <tr><td class="right">15 </td><td>0005D </td><td class="right">128 </td><td><samp>KEY_PAUSE</samp> </td></tr>
- <tr><td class="right">16 </td><td>0005E </td><td class="right">1 </td><td><samp>KEY_BACKQUOTE</samp> </td></tr>
- <tr><td class="right">17 </td><td>0005E </td><td class="right">2 </td><td><samp>KEY_1</samp> </td></tr>
- <tr><td class="right">18 </td><td>0005E </td><td class="right">4 </td><td><samp>KEY_2</samp> </td></tr>
- <tr><td class="right">19 </td><td>0005E </td><td class="right">8 </td><td><samp>KEY_3</samp> </td></tr>
- <tr><td class="right">20 </td><td>0005E </td><td class="right">16 </td><td><samp>KEY_4</samp> </td></tr>
- <tr><td class="right">21 </td><td>0005E </td><td class="right">32 </td><td><samp>KEY_5</samp> </td></tr>
- <tr><td class="right">22 </td><td>0005E </td><td class="right">64 </td><td><samp>KEY_6</samp> </td></tr>
- <tr><td class="right">23 </td><td>0005E </td><td class="right">128 </td><td><samp>KEY_7</samp> </td></tr>
- <tr><td class="right">24 </td><td>0005F </td><td class="right">1 </td><td><samp>KEY_8</samp> </td></tr>
- <tr><td class="right">25 </td><td>0005F </td><td class="right">2 </td><td><samp>KEY_9</samp> </td></tr>
- <tr><td class="right">26 </td><td>0005F </td><td class="right">4 </td><td><samp>KEY_0</samp> </td></tr>
- <tr><td class="right">27 </td><td>0005F </td><td class="right">8 </td><td><samp>KEY_MINUS</samp> </td></tr>
- <tr><td class="right">28 </td><td>0005F </td><td class="right">16 </td><td><samp>KEY_EQUAL</samp> </td></tr>
- <tr><td class="right">29 </td><td>0005F </td><td class="right">32 </td><td><samp>KEY_BACKSPACE</samp> </td></tr>
- <tr><td class="right">30 </td><td>0005F </td><td class="right">64 </td><td><samp>KEY_TAB</samp> </td></tr>
- <tr><td class="right">31 </td><td>0005F </td><td class="right">128 </td><td><samp>KEY_Q</samp> </td></tr>
- <tr><td class="right">32 </td><td>00060 </td><td class="right">1 </td><td><samp>KEY_W</samp> </td></tr>
- <tr><td class="right">33 </td><td>00060 </td><td class="right">2 </td><td><samp>KEY_E</samp> </td></tr>
- <tr><td class="right">34 </td><td>00060 </td><td class="right">4 </td><td><samp>KEY_R</samp> </td></tr>
- <tr><td class="right">35 </td><td>00060 </td><td class="right">8 </td><td><samp>KEY_T</samp> </td></tr>
- <tr><td class="right">36 </td><td>00060 </td><td class="right">16 </td><td><samp>KEY_Y</samp> </td></tr>
- <tr><td class="right">37 </td><td>00060 </td><td class="right">32 </td><td><samp>KEY_U</samp> </td></tr>
- <tr><td class="right">38 </td><td>00060 </td><td class="right">64 </td><td><samp>KEY_I</samp> </td></tr>
- <tr><td class="right">39 </td><td>00060 </td><td class="right">128 </td><td><samp>KEY_O</samp> </td></tr>
- <tr><td class="right">40 </td><td>00061 </td><td class="right">1 </td><td><samp>KEY_P</samp> </td></tr>
- <tr><td class="right">41 </td><td>00061 </td><td class="right">2 </td><td><samp>KEY_LBRACKET</samp> </td></tr>
- <tr><td class="right">42 </td><td>00061 </td><td class="right">4 </td><td><samp>KEY_RBRACKET</samp> </td></tr>
- <tr><td class="right">43 </td><td>00061 </td><td class="right">8 </td><td><samp>KEY_ENTER</samp> </td></tr>
- <tr><td class="right">44 </td><td>00061 </td><td class="right">16 </td><td><samp>KEY_CAPSLOCK</samp> </td></tr>
- <tr><td class="right">45 </td><td>00061 </td><td class="right">32 </td><td><samp>KEY_A</samp> </td></tr>
- <tr><td class="right">46 </td><td>00061 </td><td class="right">64 </td><td><samp>KEY_S</samp> </td></tr>
- <tr><td class="right">47 </td><td>00061 </td><td class="right">128 </td><td><samp>KEY_D</samp> </td></tr>
- <tr><td class="right">48 </td><td>00062 </td><td class="right">1 </td><td><samp>KEY_F</samp> </td></tr>
- <tr><td class="right">49 </td><td>00062 </td><td class="right">2 </td><td><samp>KEY_G</samp> </td></tr>
- <tr><td class="right">50 </td><td>00062 </td><td class="right">4 </td><td><samp>KEY_H</samp> </td></tr>
- <tr><td class="right">51 </td><td>00062 </td><td class="right">8 </td><td><samp>KEY_J</samp> </td></tr>
- <tr><td class="right">52 </td><td>00062 </td><td class="right">16 </td><td><samp>KEY_K</samp> </td></tr>
- <tr><td class="right">53 </td><td>00062 </td><td class="right">32 </td><td><samp>KEY_L</samp> </td></tr>
- <tr><td class="right">54 </td><td>00062 </td><td class="right">64 </td><td><samp>KEY_SEMICOLON</samp> </td></tr>
- <tr><td class="right">55 </td><td>00062 </td><td class="right">128 </td><td><samp>KEY_APOSTROPHE</samp> </td></tr>
- <tr><td class="right">56 </td><td>00063 </td><td class="right">1 </td><td><samp>KEY_BACKSLASH</samp> </td></tr>
- <tr><td class="right">57 </td><td>00063 </td><td class="right">2 </td><td><samp>KEY_LSHIFT</samp> </td></tr>
- <tr><td class="right">58 </td><td>00063 </td><td class="right">4 </td><td><samp>KEY_LESS</samp> </td></tr>
- <tr><td class="right">59 </td><td>00063 </td><td class="right">8 </td><td><samp>KEY_Z</samp> </td></tr>
- <tr><td class="right">60 </td><td>00063 </td><td class="right">16 </td><td><samp>KEY_X</samp> </td></tr>
- <tr><td class="right">61 </td><td>00063 </td><td class="right">32 </td><td><samp>KEY_C</samp> </td></tr>
- <tr><td class="right">62 </td><td>00063 </td><td class="right">64 </td><td><samp>KEY_V</samp> </td></tr>
- <tr><td class="right">63 </td><td>00063 </td><td class="right">128 </td><td><samp>KEY_B</samp> </td></tr>
- <tr><td class="right">64 </td><td>00064 </td><td class="right">1 </td><td><samp>KEY_N</samp> </td></tr>
- <tr><td class="right">65 </td><td>00064 </td><td class="right">2 </td><td><samp>KEY_M</samp> </td></tr>
- <tr><td class="right">66 </td><td>00064 </td><td class="right">4 </td><td><samp>KEY_COMMA</samp> </td></tr>
- <tr><td class="right">67 </td><td>00064 </td><td class="right">8 </td><td><samp>KEY_PERIOD</samp> </td></tr>
- <tr><td class="right">68 </td><td>00064 </td><td class="right">16 </td><td><samp>KEY_SLASH</samp> </td></tr>
- <tr><td class="right">69 </td><td>00064 </td><td class="right">32 </td><td><samp>KEY_RSHIFT</samp> </td></tr>
- <tr><td class="right">70 </td><td>00064 </td><td class="right">64 </td><td><samp>KEY_LCTRL</samp> </td></tr>
- <tr><td class="right">71 </td><td>00064 </td><td class="right">128 </td><td><samp>KEY_LSUPER</samp> </td></tr>
- <tr><td class="right">72 </td><td>00065 </td><td class="right">1 </td><td><samp>KEY_LALT</samp> </td></tr>
- <tr><td class="right">73 </td><td>00065 </td><td class="right">2 </td><td><samp>KEY_SPACE</samp> </td></tr>
- <tr><td class="right">74 </td><td>00065 </td><td class="right">4 </td><td><samp>KEY_RALT</samp> </td></tr>
- <tr><td class="right">75 </td><td>00065 </td><td class="right">8 </td><td><samp>KEY_RSUPER</samp> </td></tr>
- <tr><td class="right">76 </td><td>00065 </td><td class="right">16 </td><td><samp>KEY_MENU</samp> </td></tr>
- <tr><td class="right">77 </td><td>00065 </td><td class="right">32 </td><td><samp>KEY_RCTRL</samp> </td></tr>
- <tr><td class="right">78 </td><td>00065 </td><td class="right">64 </td><td><samp>KEY_INS</samp> </td></tr>
- <tr><td class="right">79 </td><td>00065 </td><td class="right">128 </td><td><samp>KEY_HOME</samp> </td></tr>
- <tr><td class="right">80 </td><td>00066 </td><td class="right">1 </td><td><samp>KEY_PGUP</samp> </td></tr>
- <tr><td class="right">81 </td><td>00066 </td><td class="right">2 </td><td><samp>KEY_DEL</samp> </td></tr>
- <tr><td class="right">82 </td><td>00066 </td><td class="right">4 </td><td><samp>KEY_END</samp> </td></tr>
- <tr><td class="right">83 </td><td>00066 </td><td class="right">8 </td><td><samp>KEY_PGDN</samp> </td></tr>
- <tr><td class="right">84 </td><td>00066 </td><td class="right">16 </td><td><samp>KEY_UP</samp> </td></tr>
- <tr><td class="right">85 </td><td>00066 </td><td class="right">32 </td><td><samp>KEY_LEFT</samp> </td></tr>
- <tr><td class="right">86 </td><td>00066 </td><td class="right">64 </td><td><samp>KEY_DOWN</samp> </td></tr>
- <tr><td class="right">87 </td><td>00066 </td><td class="right">128 </td><td><samp>KEY_RIGHT</samp> </td></tr>
- <tr><td class="right">88 </td><td>00067 </td><td class="right">1 </td><td><samp>KEY_NUMLOCK</samp> </td></tr>
- <tr><td class="right">89 </td><td>00067 </td><td class="right">2 </td><td><samp>KEY_KP_DIV</samp> </td></tr>
- <tr><td class="right">90 </td><td>00067 </td><td class="right">4 </td><td><samp>KEY_KP_MUL</samp> </td></tr>
- <tr><td class="right">91 </td><td>00067 </td><td class="right">8 </td><td><samp>KEY_KP_SUB</samp> </td></tr>
- <tr><td class="right">92 </td><td>00067 </td><td class="right">16 </td><td><samp>KEY_KP_7</samp> </td></tr>
- <tr><td class="right">93 </td><td>00067 </td><td class="right">32 </td><td><samp>KEY_KP_8</samp> </td></tr>
- <tr><td class="right">94 </td><td>00067 </td><td class="right">64 </td><td><samp>KEY_KP_9</samp> </td></tr>
- <tr><td class="right">95 </td><td>00067 </td><td class="right">128 </td><td><samp>KEY_KP_ADD</samp> </td></tr>
- <tr><td class="right">96 </td><td>00068 </td><td class="right">1 </td><td><samp>KEY_KP_4</samp> </td></tr>
- <tr><td class="right">97 </td><td>00068 </td><td class="right">2 </td><td><samp>KEY_KP_5</samp> </td></tr>
- <tr><td class="right">98 </td><td>00068 </td><td class="right">4 </td><td><samp>KEY_KP_6</samp> </td></tr>
- <tr><td class="right">99 </td><td>00068 </td><td class="right">8 </td><td><samp>KEY_KP_1</samp> </td></tr>
- <tr><td class="right">100 </td><td>00068 </td><td class="right">16 </td><td><samp>KEY_KP_2</samp> </td></tr>
- <tr><td class="right">101 </td><td>00068 </td><td class="right">32 </td><td><samp>KEY_KP_3</samp> </td></tr>
- <tr><td class="right">102 </td><td>00068 </td><td class="right">64 </td><td><samp>KEY_KP_ENTER</samp> </td></tr>
- <tr><td class="right">103 </td><td>00068 </td><td class="right">128 </td><td><samp>KEY_KP_0</samp> </td></tr>
- <tr><td class="right">104 </td><td>00069 </td><td class="right">1 </td><td><samp>KEY_KP_DEC</samp> </td></tr>
- <tr><td class="right">105 </td><td>00069 </td><td class="right">2 </td><td><samp>KEY_INT1</samp> </td></tr>
- <tr><td class="right">106 </td><td>00069 </td><td class="right">4 </td><td><samp>KEY_INT2</samp> </td></tr>
- <tr><td class="right">107 </td><td>00069 </td><td class="right">8 </td><td><samp>KEY_INT3</samp> </td></tr>
- <tr><td class="right">108 </td><td>00069 </td><td class="right">16 </td><td><samp>KEY_INT4</samp> </td></tr>
- <tr><td class="right">109 </td><td>00069 </td><td class="right">32 </td><td><samp>KEY_INT5</samp> </td></tr>
- <tr><td class="right">110 </td><td>00069 </td><td class="right">64 </td><td><samp>KEY_INT6</samp> </td></tr>
- <tr><td class="right">111 </td><td>00069 </td><td class="right">128 </td><td><samp>KEY_INT7</samp> </td></tr>
- <tr><td class="right">112 </td><td>0006A </td><td class="right">1 </td><td><samp>KEY_INT8</samp> </td></tr>
- <tr><td class="right">113 </td><td>0006A </td><td class="right">2 </td><td><samp>KEY_LNG1</samp> </td></tr>
- <tr><td class="right">114 </td><td>0006A </td><td class="right">4 </td><td><samp>KEY_LNG2</samp> </td></tr>
- <tr><td class="right">115 </td><td>0006A </td><td class="right">8 </td><td><samp>KEY_LNG3</samp> </td></tr>
- <tr><td class="right">116 </td><td>0006A </td><td class="right">16 </td><td><samp>KEY_LNG4</samp> </td></tr>
- <tr><td class="right">117 </td><td>0006A </td><td class="right">32 </td><td><samp>KEY_LNG5</samp> </td></tr>
- <tr><td class="right">118 </td><td>0006A </td><td class="right">64 </td><td><samp>KEY_LNG6</samp> </td></tr>
- <tr><td class="right">119 </td><td>0006A </td><td class="right">128 </td><td><samp>KEY_LNG7</samp> </td></tr>
- <tr><td class="right">120 </td><td>0006B </td><td class="right">1 </td><td><samp>KEY_LNG8</samp> </td></tr>
- <tr><td class="right">121 </td><td>0006B </td><td class="right">2 </td><td><samp>KEY_APP</samp> </td></tr>
- <tr><td class="right">122 </td><td>0006B </td><td class="right">4 </td><td><samp>KEY_POWER</samp> </td></tr>
- <tr><td class="right">123 </td><td>0006B </td><td class="right">8 </td><td><samp>KEY_KP_EQUAL</samp> </td></tr>
- <tr><td class="right">124 </td><td>0006B </td><td class="right">16 </td><td><samp>KEY_EXEC</samp> </td></tr>
- <tr><td class="right">125 </td><td>0006B </td><td class="right">32 </td><td><samp>KEY_HELP</samp> </td></tr>
- <tr><td class="right">126 </td><td>0006B </td><td class="right">64 </td><td><samp>KEY_SELECT</samp> </td></tr>
- <tr><td class="right">127 </td><td>0006B </td><td class="right">128 </td><td><samp>KEY_STOP</samp> </td></tr>
- <tr><td class="right">128 </td><td>0006C </td><td class="right">1 </td><td><samp>KEY_AGAIN</samp> </td></tr>
- <tr><td class="right">129 </td><td>0006C </td><td class="right">2 </td><td><samp>KEY_UNDO</samp> </td></tr>
- <tr><td class="right">130 </td><td>0006C </td><td class="right">4 </td><td><samp>KEY_CUT</samp> </td></tr>
- <tr><td class="right">131 </td><td>0006C </td><td class="right">8 </td><td><samp>KEY_COPY</samp> </td></tr>
- <tr><td class="right">132 </td><td>0006C </td><td class="right">16 </td><td><samp>KEY_PASTE</samp> </td></tr>
- <tr><td class="right">133 </td><td>0006C </td><td class="right">32 </td><td><samp>KEY_FIND</samp> </td></tr>
- <tr><td class="right">134 </td><td>0006C </td><td class="right">64 </td><td><samp>KEY_MUTE</samp> </td></tr>
- <tr><td class="right">135 </td><td>0006C </td><td class="right">128 </td><td><samp>KEY_VOLUP</samp> </td></tr>
- <tr><td class="right">136 </td><td>0006D </td><td class="right">1 </td><td><samp>KEY_VOLDN</samp> </td></tr></table></div>
- <h2 id="gamepad">Gamepad<a href="#gamepad"></a></h2>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>0006E </td><td class="right">2 </td><td>gamepad joystick threshold (defaults to 8000) </td></tr>
- <tr><td>00070 </td><td class="right">8 </td><td>primary gamepad - keyboard scancode mappings (see <a href="#keyboard" onclick="c('keyboard')">keyboard</a>) </td></tr>
- <tr><td>00078 </td><td class="right">4 </td><td>4 gamepads button pressed state (see <a href="#getpad" onclick="c('getpad')">getpad</a>) </td></tr></table></div>
- <p>The gamepad buttons are as follows:</p>
- <div class="table"><table><tr><th>Define </th><th>Bitmask </th><th>Description </th></tr>
- <tr><td><samp>BTN_L</samp> </td><td class="right">1 </td><td>The <samp>◁</samp> button or joystick left </td></tr>
- <tr><td><samp>BTN_U</samp> </td><td class="right">2 </td><td>The <samp>△</samp> button or joystick up </td></tr>
- <tr><td><samp>BTN_R</samp> </td><td class="right">4 </td><td>The <samp>▷</samp> button or joystick right </td></tr>
- <tr><td><samp>BTN_D</samp> </td><td class="right">8 </td><td>The <samp>▽</samp> button or joystick down </td></tr>
- <tr><td><samp>BTN_A</samp> </td><td class="right">16 </td><td>The <samp>Ⓐ</samp> button </td></tr>
- <tr><td><samp>BTN_B</samp> </td><td class="right">32 </td><td>The <samp>Ⓑ</samp> button </td></tr>
- <tr><td><samp>BTN_X</samp> </td><td class="right">64 </td><td>The <samp>Ⓧ</samp> button </td></tr>
- <tr><td><samp>BTN_Y</samp> </td><td class="right">128 </td><td>The <samp>Ⓨ</samp> button </td></tr></table></div>
- <p>The <samp>△△▽▽◁▷◁▷ⒷⒶ</samp> sequence makes the <samp>KEY_CHEAT</samp> "key" pressed.</p>
- <h2 id="graphics_processing_unit">Graphics Processing Unit<a href="#graphics_processing_unit"></a></h2>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>0007E </td><td class="right">1 </td><td>UNICODE code point upper bits for font glyph mapping </td></tr>
- <tr><td>0007F </td><td class="right">1 </td><td>sprite bank selector for the map </td></tr>
- <tr><td>00080 </td><td class="right">1024 </td><td>palette, 256 colors, each entry 4 bytes, RGBA </td></tr>
- <tr><td>00480 </td><td class="right">2 </td><td>x0, crop area X start in pixels (for all drawing functions) </td></tr>
- <tr><td>00482 </td><td class="right">2 </td><td>x1, crop area X end in pixels </td></tr>
- <tr><td>00484 </td><td class="right">2 </td><td>y0, crop area Y start in pixels </td></tr>
- <tr><td>00486 </td><td class="right">2 </td><td>y1, crop area Y end in pixels </td></tr>
- <tr><td>00488 </td><td class="right">2 </td><td>displayed vram X offset in pixels or 0xffff </td></tr>
- <tr><td>0048A </td><td class="right">2 </td><td>displayed vram Y offset in pixels or 0xffff </td></tr>
- <tr><td>0048C </td><td class="right">1 </td><td>turtle pen down flag (see <a href="#up" onclick="c('up')">up</a>, <a href="#down" onclick="c('down')">down</a>) </td></tr>
- <tr><td>0048D </td><td class="right">1 </td><td>turtle pen color, palette index 0 to 255 (see <a href="#color" onclick="c('color')">color</a>) </td></tr>
- <tr><td>0048E </td><td class="right">2 </td><td>turtle direction in degrees, 0 to 359 (see <a href="#left" onclick="c('left')">left</a>, <a href="#right" onclick="c('right')">right</a>) </td></tr>
- <tr><td>00490 </td><td class="right">2 </td><td>turtle X offset in pixels (see <a href="#move" onclick="c('move')">move</a>) </td></tr>
- <tr><td>00492 </td><td class="right">2 </td><td>turtle Y offset in pixels </td></tr>
- <tr><td>00494 </td><td class="right">2 </td><td>maze walking speed in 1/128 tiles (see <a href="#maze" onclick="c('maze')">maze</a>) </td></tr>
- <tr><td>00496 </td><td class="right">2 </td><td>maze rotating speed in degrees (1 to 90) </td></tr>
- <tr><td>00498 </td><td class="right">1 </td><td>console foreground color, palette index 0 to 255 (see <a href="#printf" onclick="c('printf')">printf</a>) </td></tr>
- <tr><td>00499 </td><td class="right">1 </td><td>console background color, palette index 0 to 255 </td></tr>
- <tr><td>0049A </td><td class="right">2 </td><td>console X offset in pixels </td></tr>
- <tr><td>0049C </td><td class="right">2 </td><td>console Y offset in pixels </td></tr>
- <tr><td>0049E </td><td class="right">2 </td><td>camera X offset in <a href="#3d_space" onclick="c('3d_space')">3D space</a> (see <a href="#tri3d" onclick="c('tri3d')">tri3d</a>, <a href="#tritx" onclick="c('tritx')">tritx</a>, <a href="#mesh" onclick="c('mesh')">mesh</a>) </td></tr>
- <tr><td>004A0 </td><td class="right">2 </td><td>camera Y offset </td></tr>
- <tr><td>004A2 </td><td class="right">2 </td><td>camera Z offset </td></tr>
- <tr><td>004A4 </td><td class="right">2 </td><td>camera direction, pitch (0 up, 90 forward) </td></tr>
- <tr><td>004A6 </td><td class="right">2 </td><td>camera direction, yaw (0 left, 90 forward) </td></tr>
- <tr><td>004A8 </td><td class="right">1 </td><td>camera field of view in angles (45, negative gives orthographic) </td></tr>
- <tr><td>004AA </td><td class="right">2 </td><td>light source position X offset (see <a href="#tri3d" onclick="c('tri3d')">tri3d</a>, <a href="#tritx" onclick="c('tritx')">tritx</a>, <a href="#mesh" onclick="c('mesh')">mesh</a>) </td></tr>
- <tr><td>004AC </td><td class="right">2 </td><td>light source position Y offset </td></tr>
- <tr><td>004AE </td><td class="right">2 </td><td>light source position Z offset </td></tr>
- <tr><td>00600 </td><td class="right">64000 </td><td>map, 320 x 200 sprite indices (see <a href="#map" onclick="c('map')">map</a> and <a href="#maze" onclick="c('maze')">maze</a>) </td></tr>
- <tr><td>10000 </td><td class="right">65536 </td><td>sprites, 256 x 256 palette indices, 1024 8 x 8 pixels (see <a href="#spr" onclick="c('spr')">spr</a>) </td></tr>
- <tr><td>28000 </td><td class="right">32768 </td><td>window for 4096 font glyphs (see 0007E, <a href="#width" onclick="c('width')">width</a> and <a href="#text" onclick="c('text')">text</a>) </td></tr></table></div>
- <h2 id="digital_signal_processor">Digital Signal Processor<a href="#digital_signal_processor"></a></h2>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>0007C </td><td class="right">1 </td><td>waveform bank selector (1 to 31) </td></tr>
- <tr><td>0007D </td><td class="right">1 </td><td>music track bank selector (0 to 7) </td></tr>
- <tr><td>004BA </td><td class="right">1 </td><td>current tempo (in ticks per row, read-only) </td></tr>
- <tr><td>004BB </td><td class="right">1 </td><td>current track being played (read-only) </td></tr>
- <tr><td>004BC </td><td class="right">2 </td><td>current row being played (read-only) </td></tr>
- <tr><td>004BE </td><td class="right">2 </td><td>number of total rows in current track (read-only) </td></tr>
- <tr><td>004C0 </td><td class="right">64 </td><td>16 channel status registers, each 4 bytes (read-only) </td></tr>
- <tr><td>00500 </td><td class="right">256 </td><td>64 sound effects, each 4 bytes </td></tr>
- <tr><td>20000 </td><td class="right">16384 </td><td>window for waveform samples (see 0007C) </td></tr>
- <tr><td>24000 </td><td class="right">16384 </td><td>window for music patterns (see 0007D) </td></tr></table></div>
- <p>The DSP status registers are all read-only, and for each channel they look like:</p>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>0 </td><td class="right">2 </td><td>current position in the waveform being played </td></tr>
- <tr><td>2 </td><td class="right">1 </td><td>current waveform (1 to 31, 0 if the channel is silent) </td></tr>
- <tr><td>3 </td><td class="right">1 </td><td>current volume (0 means channel is turned off) </td></tr></table></div>
- <p>The first 4 channels are for the music, the rest for the sound effects.</p>
- <p>Note that the waveform index 0 means "use the previous waveform", so index 0 cannot be used in the selector.
- The format of every other waveform:</p>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>0 </td><td class="right">2 </td><td>number of samples </td></tr>
- <tr><td>2 </td><td class="right">2 </td><td>loop start </td></tr>
- <tr><td>4 </td><td class="right">2 </td><td>loop length </td></tr>
- <tr><td>6 </td><td class="right">1 </td><td>finetune value, -8 to 7 </td></tr>
- <tr><td>7 </td><td class="right">1 </td><td>volume, 0 to 64 </td></tr>
- <tr><td>8 </td><td class="right">16376 </td><td>signed 8-bit mono samples </td></tr></table></div>
- <p>The format of the sound effects and the music tracks are the same, the only difference is, music tracks have 4 notes per row,
- one for each channel, and there are 1024 rows; while for sound effects there's only one note and 64 rows.</p>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>0 </td><td class="right">1 </td><td>note number, see <samp>NOTE_x</samp> defines, 0 to 96 </td></tr>
- <tr><td>1 </td><td class="right">1 </td><td>waveform index, 0 to 31 </td></tr>
- <tr><td>2 </td><td class="right">1 </td><td>effect type, 0 to 255 (see <a href="#note_effects" onclick="c('note_effects')">note effects</a>) </td></tr>
- <tr><td>3 </td><td class="right">1 </td><td>effect parameter </td></tr></table></div>
- <p>The counting of notes goes as follows: 0 means no note set. Followed by 8 octaves, each with 12 notes, so 1 equals to C-0,
- 12 is B-0 (on the lowest octave), 13 is C-1 (one octave higher) and 14 is C#1 (C sharp, semitone higher). For example the
- D note on the 4th octave would be 1 + 4*12 + 2 = 51. The B-7 is 96, the highest note on the highest octave. You also have
- built-in defines, for example C-1 is <samp>NOTE_C_1</samp> and C#1 is <samp>NOTE_Cs1</samp>, if you don't want to count then you can use these as well
- in your program.</p>
- <h2 id="note_effects">Note Effects<a href="#note_effects"></a></h2>
- <p>For simplicity, MEG-4 uses the same codes as the Amiga MOD file (this way you'll see the same in the built-in editor as well
- as in a third party music tracker), but it does not support all of them. As said earlier, these codes are represented by three
- hex numbers, the first being the type <samp>t</samp>, and the last two the parameter, <samp>xy</samp> (or <samp>xx</samp>). The types <samp>E1</samp> to <samp>ED</samp> are all stored
- in the type byte, although it looks like one of their nibble might belong to the parameter, but it's not.</p>
- <div class="table"><table><tr><th>Effect </th><th>Code </th><th>Description </th></tr>
- <tr><td>... </td><td>000 </td><td>No effect </td></tr>
- <tr><td>Arp </td><td>0xy </td><td>Arpeggio, play note, note+x semitone and note+y semitone </td></tr>
- <tr><td>Po/ </td><td>1xx </td><td>Portamento up, slide period by x up </td></tr>
- <tr><td>Po\ </td><td>2xx </td><td>Portamento down, slide period by x down </td></tr>
- <tr><td>Ptn </td><td>3xx </td><td>Tone portamento, slide period to period x </td></tr>
- <tr><td>Vib </td><td>4xy </td><td>Vibrato, oscillate the pitch by y semitones at x freq </td></tr>
- <tr><td>Ctv </td><td>5xy </td><td>Continue Tone portamento + volume slide by x up or y down </td></tr>
- <tr><td>Cvv </td><td>6xy </td><td>Continue Vibrato + volume slide by x up or by y down </td></tr>
- <tr><td>Trm </td><td>7xy </td><td>Tremolo, oscillate the volume by y amplitude at x freq </td></tr>
- <tr><td>Ofs </td><td>9xx </td><td>Set sample offset to x * 256 </td></tr>
- <tr><td>Vls </td><td>Axy </td><td>Slide volume by x up or by y down </td></tr>
- <tr><td>Jmp </td><td>Bxx </td><td>Position jump, set row to x * 64 </td></tr>
- <tr><td>Vol </td><td>Cxx </td><td>Set volume to x </td></tr>
- <tr><td>Fp/ </td><td>E1x </td><td>Fine portamento up, increase period by x </td></tr>
- <tr><td>Fp\ </td><td>E2x </td><td>Fine portamento down, decrease period by x </td></tr>
- <tr><td>Svw </td><td>E4x </td><td>Set vibrato waveform, 0 sine, 1 saw, 2 square, 3 noise </td></tr>
- <tr><td>Ftn </td><td>E5x </td><td>Set finetune, change tuning by x (-8 to 7) </td></tr>
- <tr><td>Stw </td><td>E7x </td><td>Set tremolo waveform, 0 sine, 1 saw, 2 square, 3 noise </td></tr>
- <tr><td>Rtg </td><td>E9x </td><td>Retrigger note, trigger current sample every x ticks </td></tr>
- <tr><td>Fv/ </td><td>EAx </td><td>Fine volume slide up, increase by x </td></tr>
- <tr><td>Fv\ </td><td>EBx </td><td>Fine volume slide down, decrease by x </td></tr>
- <tr><td>Cut </td><td>ECx </td><td>Cut note in x ticks </td></tr>
- <tr><td>Dly </td><td>EDx </td><td>Delay note in x ticks </td></tr>
- <tr><td>Tpr </td><td>Fxx </td><td>Set number of ticks per row to x (tick defalts to 6) </td></tr></table></div>
- <h2 id="user_memory">User Memory<a href="#user_memory"></a></h2>
- <p>Memory addresses from 00000 to 2FFFF belong to the MMIO, everything above (starting from 30000 or <samp>MEM_USER</samp>) is freely usable
- user memory.</p>
- <div class="table"><table><tr><th>Offset </th><th>Size </th><th>Description </th></tr>
- <tr><td>30000 </td><td class="right">4 </td><td>(BASIC only) offset of DATA </td></tr>
- <tr><td>30004 </td><td class="right">4 </td><td>(BASIC only) current READ counter </td></tr>
- <tr><td>30008 </td><td class="right">4 </td><td>(BASIC only) maximum READ, number of DATA </td></tr></table></div>
- <p>This is followed by the global variables that you have declared in your program, followed by the constants, like string literals.
- In case of BASIC, then this is followed by the actual DATA records.</p>
- <p>Memory addresses above the initialized data can be dynamically allocated and freed in your program via the <a href="#malloc" onclick="c('malloc')">malloc</a> and <a href="#free" onclick="c('free')">free</a> calls.</p>
- <p>Lastly the stack, which is at the top (starting from C0000 or <samp>MEM_LIMIT</samp>) and growing <i>downwards</i>. Your program's local variables
- (that you declared inside a function) go here. The size of the stack always changes depending on which function calls which other
- function in your program.</p>
- <p>If by any chance the top of the dynamically allocated data and the bottom of the stack would overlap, then MEG-4 throws an
- "Out of memory" error.</p>
- <h2 id="format_string">Format String<a href="#format_string"></a></h2>
- <p>Some functions, <a href="#printf" onclick="c('printf')">printf</a>, <a href="#sprintf" onclick="c('sprintf')">sprintf</a> and <a href="#trace" onclick="c('trace')">trace</a> use a format string that may contain special characters to reference arguments
- and to describe how to display them. These are:</p>
- <div class="table"><table><tr><th>Code </th><th>Description </th></tr>
- <tr><td><samp>%%</samp> </td><td>The <samp>%</samp> character </td></tr>
- <tr><td><samp>%d</samp> </td><td>Next parameter as a decimal number </td></tr>
- <tr><td><samp>%u</samp> </td><td>Next parameter as an unsigned decimal number </td></tr>
- <tr><td><samp>%x</samp> </td><td>Next parameter as a hexadecimal number </td></tr>
- <tr><td><samp>%o</samp> </td><td>Next parameter as an octal number </td></tr>
- <tr><td><samp>%b</samp> </td><td>Next parameter as a binary number </td></tr>
- <tr><td><samp>%f</samp> </td><td>Next parameter as a floating point number </td></tr>
- <tr><td><samp>%s</samp> </td><td>Next parameter as a string </td></tr>
- <tr><td><samp>%c</samp> </td><td>Next parameter as an UTF-8 character </td></tr>
- <tr><td><samp>%p</samp> </td><td>Next parameter as an address (pointer) </td></tr>
- <tr><td><samp>\t</samp> </td><td>Tab, fix vertical position before continue </td></tr>
- <tr><td><samp>\n</samp> </td><td>Start a new line </td></tr></table></div>
- <p>You can add padding by specifying the length between <samp>%</samp> and the code. If that starts with <samp>0</samp>, then value will be padded
- with zeros, otherwise with spaces. For example <samp>%4d</samp> will pad the value to the right with spaces, and <samp>%04x</samp> with zeros.
- The <samp>f</samp> accepts a number after a dot, which tells the number of digits in the fractional part (up to 8), eg. <samp>%.6f</samp>.</p>
- <h2 id="3d_space">3D Space<a href="#3d_space"></a></h2>
- <p>In MEG-4, the 3 dimensional space is handled according to the right-hand rule: +X is on the right, +Y is up, and +Z is towards the
- viewer.</p>
- <div class="pre"><pre>
- +Y
- |
- |__ +X
- /
- +Z
- </pre></div>
- <p>Each point must be placed in the range -32767 to +32767. How this 3D world is projected to your 2D screen depends on how you
- configure the camera (see <a href="#graphics_processing_unit" onclick="c('graphics_processing_unit')">Graphics Processing Unit</a> address 0049E). Of course, you have to place the camera in the world, with
- X, Y, Z coordinates. Then you have to tell where the camera is looking at, using pitch and yaw. Finally you also have to tell what
- kind of lens the camera has, by specifying the field of view angle. That latter normally should be between 30 (very narrow) and
- 180 degrees (like fish and birds). MEG-4 supports up to 127 degrees, but there's a trick. Positive FOV values will be projected as
- perspective (the farther the object is, the smaller it is), but negative values also handled, just with orthographic projection
- (no matter the distance, the object's size will be the same). Perspective is used in FPS games, while the orthographic projection
- is mostly preferred by strategy games.</p>
- <p>You can display a set of triangles (a complete 3D model) using the <a href="#mesh" onclick="c('mesh')">mesh</a> function efficiently. Because models probably have local
- coordinates, that would draw all models one on top of another around the origo. So if you want to dispay multiple models in the
- world, first you should translate them (place them) into world coordinates using <a href="#trns" onclick="c('trns')">trns</a>, and then use the translated vertex cloud
- with <a href="#mesh" onclick="c('mesh')">mesh</a> (moving and rotating the model around won't change the triangles, just their vertex coordinates).</p>
- <h2 id="code_editor_shortcuts">Code Editor Shortcuts<a href="#code_editor_shortcuts"></a></h2>
- <p>Additional <a href="#keyboard" onclick="c('keyboard')">keyboard</a> shortcuts you can use when editing the source:</p>
- <div class="table"><table><tr><th>Key </th><th>Description </th></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>F</kbd> </td><td>Find string </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>G</kbd> </td><td>Find again </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>H</kbd> </td><td>Search and replace (in the selected text, or in lack of that, in the entire source) </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>J</kbd> </td><td>Go to line </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>D</kbd> </td><td>Go to function definition </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>N</kbd> </td><td>List bookmarks </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>B</kbd> </td><td>Toggle bookmark on current line </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>▴</kbd> </td><td>Go to previous bookmark </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>▾</kbd> </td><td>Go to next bookmark </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>◂</kbd> </td><td>Go to the beginning of the previous word </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>▸</kbd> </td><td>Go to the end of the next word </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>,</kbd> </td><td>Decrease indentation of selection </td></tr>
- <tr><td><kbd>Ctrl</kbd>+<kbd>.</kbd> </td><td>Increase indentation of selection </td></tr>
- <tr><td><kbd>Home</kbd> </td><td>Move cursor to the beginning of the line </td></tr>
- <tr><td><kbd>End</kbd> </td><td>Move cursor to the end of the line </td></tr>
- <tr><td><kbd>PgUp</kbd> </td><td>Move cursor 42 lines (one page) up </td></tr>
- <tr><td><kbd>PgDown</kbd> </td><td>Move cursor 42 lines (one page) down </td></tr>
- <tr><td><kbd>F1</kbd> </td><td>If the cursor is in an API's argument list, then go to function's built-in help page </td></tr></table></div>
- <p>Regardless to platform's keyboard layout, all characters required for programing (and some more) can always be accessed:</p>
- <div class="table"><table><tr><th>Left <kbd>Alt</kbd> + </th></tr>
- <tr><td><kbd> </kbd> <kbd>(</kbd> <kbd>)</kbd> <kbd>{</kbd> <kbd>}</kbd> <kbd>〈</kbd> <kbd>〉</kbd> <kbd>!</kbd> <kbd>^</kbd> <kbd>_</kbd> <kbd>-</kbd> <kbd>=</kbd> </td></tr>
- <tr><td><kbd>⇥</kbd> <kbd> </kbd> <kbd> </kbd> <kbd>€</kbd> <kbd>₹</kbd> <kbd>~</kbd> <kbd>¥</kbd> <kbd> </kbd> <kbd> </kbd> <kbd>°</kbd> <kbd>"</kbd> <kbd>[</kbd> <kbd>]</kbd> </td></tr>
- <tr><td><kbd>↨</kbd> <kbd>&</kbd> <kbd>$</kbd> <kbd>@</kbd> <kbd>¦</kbd> <kbd> </kbd> <kbd>#</kbd> <kbd> </kbd> <kbd> </kbd> <kbd>£</kbd> <kbd>;</kbd> <kbd>'</kbd> <kbd>\</kbd> </td></tr>
- <tr><td><kbd>⇮</kbd> <kbd>:</kbd> <kbd>?</kbd> <kbd> </kbd> <kbd>元</kbd> <kbd>%</kbd> <kbd>+</kbd> <kbd>✶</kbd> <kbd>,</kbd> <kbd>.</kbd> <kbd>/</kbd> </td></tr></table></div>
- <p>See also the menu for alternative input methods and their keyboard shortcuts.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_lua" title="Lua">Previous</label><label class="btn next" accesskey="n" for="_console" title="Console">Next</label></div>
- <div class="page" rel="console"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> API Reference »</li><li> Console</li></ul><hr></div>
- <h1 id="console">Console<a href="#console"></a></h1>
- <h2 id="putc">putc<a href="#putc"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">putc</span>(<span class="hl_t">uint32_t</span> <span class="hl_v">chr</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Prints a character to console.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>chr </td><td>UTF-8 character </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="printf">printf<a href="#printf"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">printf</span>(<span class="hl_t">str_t</span> <span class="hl_v">fmt</span>, <span class="hl_o">...</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Prints text to console.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>fmt </td><td>string to display, a <a href="#format_string" onclick="c('format_string')">format string</a> </td></tr>
- <tr><td>... </td><td>optional arguments </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="getc">getc<a href="#getc"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint32_t</span> <span class="hl_f">getc</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Reads a character from console, blocks program when there's no input.</dd>
- <dt>Return Value</dt><dd>
- An UTF-8 character the user entered.</dd>
- <dt>See Also</dt><dd>
- <a href="#popkey" onclick="c('popkey')">popkey</a></dd></dl>
- <hr>
- <h2 id="gets">gets<a href="#gets"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">str_t</span> <span class="hl_f">gets</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Reads in a newline terminated string from user (does not return the newline).</dd>
- <dt>Return Value</dt><dd>
- The bytes read in a string.</dd></dl>
- <hr>
- <h2 id="trace">trace<a href="#trace"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">trace</span>(<span class="hl_t">str_t</span> <span class="hl_v">fmt</span>, <span class="hl_o">...</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Trace execution by printing to stdout. Only works if <samp>meg4</samp> was started with the <samp>-v</samp> verbose flag.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>fmt </td><td><a href="#format_string" onclick="c('format_string')">format string</a> </td></tr>
- <tr><td>... </td><td>optional arguments </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="delay">delay<a href="#delay"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">delay</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">msec</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Delays program execution.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>msec </td><td>delay in milliseconds </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="exit">exit<a href="#exit"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">exit</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Exits program.</dd></dl><br style="clear:both;"><label class="btn prev" accesskey="p" for="_memory_map" title="Memory Map">Previous</label><label class="btn next" accesskey="n" for="_audio" title="Audio">Next</label></div>
- <div class="page" rel="audio"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> API Reference »</li><li> Audio</li></ul><hr></div>
- <h1 id="audio">Audio<a href="#audio"></a></h1>
- <h2 id="sfx">sfx<a href="#sfx"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">sfx</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">sfx</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">channel</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">volume</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Plays a sound effect.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>sfx </td><td>the index of the sound effect, 0 to 63 </td></tr>
- <tr><td>channel </td><td>channel to be used, 0 to 11 </td></tr>
- <tr><td>volume </td><td>volume to be used, 0 to 255, 0 turns off channel </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="music">music<a href="#music"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">music</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">track</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">row</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">volume</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Plays a music track.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>track </td><td>the index of the music track, 0 to 7 </td></tr>
- <tr><td>row </td><td>row to start playing from, 0 to 1023 (max song length) </td></tr>
- <tr><td>volume </td><td>volume to be used, 0 to 255, 0 turns off music </td></tr></table></div></dd></dl><br style="clear:both;"><label class="btn prev" accesskey="p" for="_console" title="Console">Previous</label><label class="btn next" accesskey="n" for="_gpio" title="GPIO">Next</label></div>
- <div class="page" rel="gpio"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> API Reference »</li><li> GPIO</li></ul><hr></div>
- <h1 id="gpio">GPIO<a href="#gpio"></a></h1>
- <h2 id="gpio_rev">gpio_rev<a href="#gpio_rev"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint32_t</span> <span class="hl_f">gpio_rev</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Query the GPIO board's revision number. Returns 0 if the platform isn't GPIO capable.</dd>
- <dt>Return Value</dt><dd>
- Board's revision number or 0 if not supported.</dd></dl>
- <hr>
- <h2 id="gpio_get">gpio_get<a href="#gpio_get"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">gpio_get</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">pin</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Read the value of a GPIO pin.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>pin </td><td>physical pin number, 1 to 40 </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns 1 if the pin is high, 0 if it's low, -1 on error (GPIO pin not supported).</dd>
- <dt>See Also</dt><dd>
- <a href="#gpio_set" onclick="c('gpio_set')">gpio_set</a></dd></dl>
- <hr>
- <h2 id="gpio_set">gpio_set<a href="#gpio_set"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">gpio_set</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">pin</span>, <span class="hl_t">int</span> <span class="hl_v">value</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Write the value to a GPIO pin.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>pin </td><td>physical pin number, 1 to 40 </td></tr>
- <tr><td>value </td><td>1 to set the pin high, 0 for low </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns 0 on success, -1 on error (GPIO pin not supported).</dd>
- <dt>See Also</dt><dd>
- <a href="#gpio_get" onclick="c('gpio_get')">gpio_get</a></dd></dl><br style="clear:both;"><label class="btn prev" accesskey="p" for="_audio" title="Audio">Previous</label><label class="btn next" accesskey="n" for="_graphics" title="Graphics">Next</label></div>
- <div class="page" rel="graphics"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> API Reference »</li><li> Graphics</li></ul><hr></div>
- <h1 id="graphics">Graphics<a href="#graphics"></a></h1>
- <h2 id="cls">cls<a href="#cls"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">cls</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Clears the entire screen and resets display offsets, also sets the console's background color.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#pget" onclick="c('pget')">pget</a>, <a href="#pset" onclick="c('pset')">pset</a></dd></dl>
- <hr>
- <h2 id="cget">cget<a href="#cget"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint32_t</span> <span class="hl_f">cget</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">x</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">y</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Get pixel at a coordinate and return color RGBA.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>x </td><td>X coordinate in pixels </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- A packed color, with RGBA channels (red is in the least significant byte).</dd>
- <dt>See Also</dt><dd>
- <a href="#cls" onclick="c('cls')">cls</a>, <a href="#pget" onclick="c('pget')">pget</a>, <a href="#pset" onclick="c('pset')">pset</a></dd></dl>
- <hr>
- <h2 id="pget">pget<a href="#pget"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint8_t</span> <span class="hl_f">pget</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">x</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">y</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Get pixel at a coordinate and return its palette index.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>x </td><td>X coordinate in pixels </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Color in palette index, 0 to 255.</dd>
- <dt>See Also</dt><dd>
- <a href="#cls" onclick="c('cls')">cls</a>, <a href="#pset" onclick="c('pset')">pset</a>, <a href="#cget" onclick="c('cget')">cget</a></dd></dl>
- <hr>
- <h2 id="pset">pset<a href="#pset"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">pset</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">x</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">y</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Plots a pixel at a coordinate.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x </td><td>X coordinate in pixels </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#cls" onclick="c('cls')">cls</a>, <a href="#pget" onclick="c('pget')">pget</a></dd></dl>
- <hr>
- <h2 id="width">width<a href="#width"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint16_t</span> <span class="hl_f">width</span>(<span class="hl_t">int8_t</span> <span class="hl_v">type</span>, <span class="hl_t">str_t</span> <span class="hl_v">str</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns displayed text's width in pixels.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>type </td><td>font type, -4 to 4 </td></tr>
- <tr><td>str </td><td>string to measure </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Number of pixels required to display text.</dd>
- <dt>See Also</dt><dd>
- <a href="#text" onclick="c('text')">text</a></dd></dl>
- <hr>
- <h2 id="text">text<a href="#text"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">text</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">int8_t</span> <span class="hl_v">type</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">shidx</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">sha</span>, <span class="hl_t">str_t</span> <span class="hl_v">str</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Prints text on screen.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x </td><td>X coordinate in pixels </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr>
- <tr><td>type </td><td>font type, -4 to -1 monospace, 1 to 4 proportional </td></tr>
- <tr><td>shidx </td><td>shadow's color, palette index 0 to 255 </td></tr>
- <tr><td>sha </td><td>shadow's alpha, 0 (fully transparent) to 255 (fully opaque) </td></tr>
- <tr><td>str </td><td>string to display </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#width" onclick="c('width')">width</a></dd></dl>
- <hr>
- <h2 id="line">line<a href="#line"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">line</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws an anti-aliased line.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>starting X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>starting Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>ending X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>ending Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#qbez" onclick="c('qbez')">qbez</a>, <a href="#cbez" onclick="c('cbez')">cbez</a></dd></dl>
- <hr>
- <h2 id="qbez">qbez<a href="#qbez"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br></pre><code><span class="hl_t">void</span> <span class="hl_f">qbez</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>,
- <span class="hl_t">int16_t</span> <span class="hl_v">cx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">cy</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a quadratic Bezier curve.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>starting X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>starting Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>ending X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>ending Y coordinate in pixels </td></tr>
- <tr><td>cx </td><td>control point X coordinate in pixels </td></tr>
- <tr><td>cy </td><td>control point Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#line" onclick="c('line')">line</a>, <a href="#cbez" onclick="c('cbez')">cbez</a></dd></dl>
- <hr>
- <h2 id="cbez">cbez<a href="#cbez"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br></pre><code><span class="hl_t">void</span> <span class="hl_f">cbez</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>,
- <span class="hl_t">int16_t</span> <span class="hl_v">cx0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">cy0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">cx1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">cy1</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a cubic Bezier curve.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>starting X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>starting Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>ending X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>ending Y coordinate in pixels </td></tr>
- <tr><td>cx0 </td><td>first control point X coordinate in pixels </td></tr>
- <tr><td>cy0 </td><td>first control point Y coordinate in pixels </td></tr>
- <tr><td>cx1 </td><td>second control point X coordinate in pixels </td></tr>
- <tr><td>cy1 </td><td>second control point Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#line" onclick="c('line')">line</a>, <a href="#qbez" onclick="c('qbez')">qbez</a></dd></dl>
- <hr>
- <h2 id="tri">tri<a href="#tri"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">tri</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y2</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a triangle.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>first edge X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>first edge Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>second edge X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>second edge Y coordinate in pixels </td></tr>
- <tr><td>x2 </td><td>third edge X coordinate in pixels </td></tr>
- <tr><td>y2 </td><td>third edge Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#ftri" onclick="c('ftri')">ftri</a>, <a href="#tri2d" onclick="c('tri2d')">tri2d</a>, <a href="#tri3d" onclick="c('tri3d')">tri3d</a>, <a href="#tritx" onclick="c('tritx')">tritx</a>, <a href="#mesh" onclick="c('mesh')">mesh</a>, <a href="#trns" onclick="c('trns')">trns</a></dd></dl>
- <hr>
- <h2 id="ftri">ftri<a href="#ftri"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">ftri</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y2</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a filled triangle.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>first edge X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>first edge Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>second edge X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>second edge Y coordinate in pixels </td></tr>
- <tr><td>x2 </td><td>third edge X coordinate in pixels </td></tr>
- <tr><td>y2 </td><td>third edge Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#tri" onclick="c('tri')">tri</a>, <a href="#tri2d" onclick="c('tri2d')">tri2d</a>, <a href="#tri3d" onclick="c('tri3d')">tri3d</a>, <a href="#tritx" onclick="c('tritx')">tritx</a>, <a href="#mesh" onclick="c('mesh')">mesh</a>, <a href="#trns" onclick="c('trns')">trns</a></dd></dl>
- <hr>
- <h2 id="tri2d">tri2d<a href="#tri2d"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_t">void</span> <span class="hl_f">tri2d</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">pi0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>,
- <span class="hl_t">uint8_t</span> <span class="hl_v">pi1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>,
- <span class="hl_t">uint8_t</span> <span class="hl_v">pi2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y2</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a filled triangle with color gradients.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>pi0 </td><td>first edge color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>first edge X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>first edge Y coordinate in pixels </td></tr>
- <tr><td>pi1 </td><td>second edge color, palette index 0 to 255 </td></tr>
- <tr><td>x1 </td><td>second edge X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>second edge Y coordinate in pixels </td></tr>
- <tr><td>pi2 </td><td>third edge color, palette index 0 to 255 </td></tr>
- <tr><td>x2 </td><td>third edge X coordinate in pixels </td></tr>
- <tr><td>y2 </td><td>third edge Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#tri" onclick="c('tri')">tri</a>, <a href="#ftri" onclick="c('ftri')">ftri</a>, <a href="#tri3d" onclick="c('tri3d')">tri3d</a>, <a href="#tritx" onclick="c('tritx')">tritx</a>, <a href="#mesh" onclick="c('mesh')">mesh</a>, <a href="#trns" onclick="c('trns')">trns</a></dd></dl>
- <hr>
- <h2 id="tri3d">tri3d<a href="#tri3d"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_t">void</span> <span class="hl_f">tri3d</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">pi0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">z0</span>,
- <span class="hl_t">uint8_t</span> <span class="hl_v">pi1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">z1</span>,
- <span class="hl_t">uint8_t</span> <span class="hl_v">pi2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">z2</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a filled triangle with color gradients in <a href="#3d_space" onclick="c('3d_space')">3D space</a>.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>pi0 </td><td>first edge color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>first edge X coordinate in space </td></tr>
- <tr><td>y0 </td><td>first edge Y coordinate in space </td></tr>
- <tr><td>z0 </td><td>first edge Z coordinate in space </td></tr>
- <tr><td>pi1 </td><td>second edge color, palette index 0 to 255 </td></tr>
- <tr><td>x1 </td><td>second edge X coordinate in space </td></tr>
- <tr><td>y1 </td><td>second edge Y coordinate in space </td></tr>
- <tr><td>z1 </td><td>second edge Z coordinate in space </td></tr>
- <tr><td>pi2 </td><td>third edge color, palette index 0 to 255 </td></tr>
- <tr><td>x2 </td><td>third edge X coordinate in space </td></tr>
- <tr><td>y2 </td><td>third edge Y coordinate in space </td></tr>
- <tr><td>z2 </td><td>third edge Z coordinate in space </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#tri" onclick="c('tri')">tri</a>, <a href="#ftri" onclick="c('ftri')">ftri</a>, <a href="#tri2d" onclick="c('tri2d')">tri2d</a>, <a href="#tritx" onclick="c('tritx')">tritx</a>, <a href="#mesh" onclick="c('mesh')">mesh</a>, <a href="#trns" onclick="c('trns')">trns</a></dd></dl>
- <hr>
- <h2 id="tritx">tritx<a href="#tritx"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br></pre><code><span class="hl_t">void</span> <span class="hl_f">tritx</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">u0</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">v0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">z0</span>,
- <span class="hl_t">uint8_t</span> <span class="hl_v">u1</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">v1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">z1</span>,
- <span class="hl_t">uint8_t</span> <span class="hl_v">u2</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">v2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y2</span>, <span class="hl_t">int16_t</span> <span class="hl_v">z2</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a textured triangle in <a href="#3d_space" onclick="c('3d_space')">3D space</a>.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>u0 </td><td>first edge texture X coordinate 0 to 255 </td></tr>
- <tr><td>v0 </td><td>first edge texture Y coordinate 0 to 255 </td></tr>
- <tr><td>x0 </td><td>first edge X coordinate in space </td></tr>
- <tr><td>y0 </td><td>first edge Y coordinate in space </td></tr>
- <tr><td>z0 </td><td>first edge Z coordinate in space </td></tr>
- <tr><td>u1 </td><td>second edge texture X coordinate 0 to 255 </td></tr>
- <tr><td>v1 </td><td>second edge texture Y coordinate 0 to 255 </td></tr>
- <tr><td>x1 </td><td>second edge X coordinate in space </td></tr>
- <tr><td>y1 </td><td>second edge Y coordinate in space </td></tr>
- <tr><td>z1 </td><td>second edge Z coordinate in space </td></tr>
- <tr><td>u2 </td><td>third edge texture X coordinate 0 to 255 </td></tr>
- <tr><td>v2 </td><td>third edge texture Y coordinate 0 to 255 </td></tr>
- <tr><td>x2 </td><td>third edge X coordinate in space </td></tr>
- <tr><td>y2 </td><td>third edge Y coordinate in space </td></tr>
- <tr><td>z2 </td><td>third edge Z coordinate in space </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#tri" onclick="c('tri')">tri</a>, <a href="#ftri" onclick="c('ftri')">ftri</a>, <a href="#tri2d" onclick="c('tri2d')">tri2d</a>, <a href="#tri3d" onclick="c('tri3d')">tri3d</a>, <a href="#mesh" onclick="c('mesh')">mesh</a>, <a href="#trns" onclick="c('trns')">trns</a></dd></dl>
- <hr>
- <h2 id="mesh">mesh<a href="#mesh"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mesh</span>(<span class="hl_t">addr_t</span> <span class="hl_v">verts</span>, <span class="hl_t">addr_t</span> <span class="hl_v">uvs</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">numtri</span>, <span class="hl_t">addr_t</span> <span class="hl_v">tris</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a mesh made of triangles in <a href="#3d_space" onclick="c('3d_space')">3D space</a>, using indices to vertices and texture coordinates (or palette).</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>verts </td><td>address of vertices array, 3 x 2 bytes each, X, Y, Z </td></tr>
- <tr><td>uvs </td><td>address of UVs array (if 0, then palette is used), 2 x 1 bytes each, texture X, Y </td></tr>
- <tr><td>numtri </td><td>number of triangles </td></tr>
- <tr><td>tris </td><td>address of triangles array with indices, 6 x 1 bytes each, vi1, ui1/pi1, vi2, ui2/pi2, vi3, ui3/pi3 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#tri" onclick="c('tri')">tri</a>, <a href="#ftri" onclick="c('ftri')">ftri</a>, <a href="#tri2d" onclick="c('tri2d')">tri2d</a>, <a href="#tri3d" onclick="c('tri3d')">tri3d</a>, <a href="#tritx" onclick="c('tritx')">tritx</a>, <a href="#trns" onclick="c('trns')">trns</a></dd></dl>
- <hr>
- <h2 id="rect">rect<a href="#rect"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">rect</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a rectangle.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>top left corner X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>top left corner Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>bottom right X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>bottom right Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#frect" onclick="c('frect')">frect</a></dd></dl>
- <hr>
- <h2 id="frect">frect<a href="#frect"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">frect</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a filled rectangle.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>top left corner X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>top left corner Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>bottom right X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>bottom right Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#rect" onclick="c('rect')">rect</a></dd></dl>
- <hr>
- <h2 id="circ">circ<a href="#circ"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">circ</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">r</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a circle.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x </td><td>center X coordinate in pixels </td></tr>
- <tr><td>y </td><td>center Y coordinate in pixels </td></tr>
- <tr><td>r </td><td>radius in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#fcirc" onclick="c('fcirc')">fcirc</a>, <a href="#ellip" onclick="c('ellip')">ellip</a>, <a href="#fellip" onclick="c('fellip')">fellip</a></dd></dl>
- <hr>
- <h2 id="fcirc">fcirc<a href="#fcirc"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">fcirc</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">r</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a filled circle.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x </td><td>center X coordinate in pixels </td></tr>
- <tr><td>y </td><td>center Y coordinate in pixels </td></tr>
- <tr><td>r </td><td>radius in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#circ" onclick="c('circ')">circ</a>, <a href="#ellip" onclick="c('ellip')">ellip</a>, <a href="#fellip" onclick="c('fellip')">fellip</a></dd></dl>
- <hr>
- <h2 id="ellip">ellip<a href="#ellip"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">ellip</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws an ellipse.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>top left corner X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>top left corner Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>bottom right X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>bottom right Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#circ" onclick="c('circ')">circ</a>, <a href="#fcirc" onclick="c('fcirc')">fcirc</a>, <a href="#fellip" onclick="c('fellip')">fellip</a></dd></dl>
- <hr>
- <h2 id="fellip">fellip<a href="#fellip"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">fellip</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y0</span>, <span class="hl_t">int16_t</span> <span class="hl_v">x1</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y1</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws a filled ellipse.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr>
- <tr><td>x0 </td><td>top left corner X coordinate in pixels </td></tr>
- <tr><td>y0 </td><td>top left corner Y coordinate in pixels </td></tr>
- <tr><td>x1 </td><td>bottom right X coordinate in pixels </td></tr>
- <tr><td>y1 </td><td>bottom right Y coordinate in pixels </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#circ" onclick="c('circ')">circ</a>, <a href="#fcirc" onclick="c('fcirc')">fcirc</a>, <a href="#ellip" onclick="c('ellip')">ellip</a></dd></dl>
- <hr>
- <h2 id="move">move<a href="#move"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">move</span>(<span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">deg</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Moves turtle to the given position on screen or in the maze.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>x </td><td>X coordinate in pixels (or 1/128 tiles with <a href="#maze" onclick="c('maze')">maze</a>) </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr>
- <tr><td>deg </td><td>direction in degrees, 0 to 359, 0 is upwards on screen, 90 is to the right </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#left" onclick="c('left')">left</a>, <a href="#right" onclick="c('right')">right</a>, <a href="#up" onclick="c('up')">up</a>, <a href="#down" onclick="c('down')">down</a>, <a href="#color" onclick="c('color')">color</a>, <a href="#forw" onclick="c('forw')">forw</a>, <a href="#back" onclick="c('back')">back</a></dd></dl>
- <hr>
- <h2 id="left">left<a href="#left"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">left</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">deg</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Turns turtle left.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>deg </td><td>change in degrees, 0 to 359 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#move" onclick="c('move')">move</a>, <a href="#right" onclick="c('right')">right</a>, <a href="#up" onclick="c('up')">up</a>, <a href="#down" onclick="c('down')">down</a>, <a href="#color" onclick="c('color')">color</a>, <a href="#forw" onclick="c('forw')">forw</a>, <a href="#back" onclick="c('back')">back</a></dd></dl>
- <hr>
- <h2 id="right">right<a href="#right"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">right</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">deg</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Turns turtle right.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>deg </td><td>change in degrees, 0 to 359 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#move" onclick="c('move')">move</a>, <a href="#left" onclick="c('left')">left</a>, <a href="#up" onclick="c('up')">up</a>, <a href="#down" onclick="c('down')">down</a>, <a href="#color" onclick="c('color')">color</a>, <a href="#forw" onclick="c('forw')">forw</a>, <a href="#back" onclick="c('back')">back</a></dd></dl>
- <hr>
- <h2 id="up">up<a href="#up"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">up</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Lifts turtle's tail up. The turtle will move without drawing a line.</dd>
- <dt>See Also</dt><dd>
- <a href="#move" onclick="c('move')">move</a>, <a href="#left" onclick="c('left')">left</a>, <a href="#right" onclick="c('right')">right</a>, <a href="#down" onclick="c('down')">down</a>, <a href="#color" onclick="c('color')">color</a>, <a href="#forw" onclick="c('forw')">forw</a>, <a href="#back" onclick="c('back')">back</a></dd></dl>
- <hr>
- <h2 id="down">down<a href="#down"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">down</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Puts turtle's tail down. The turtle will move drawing a line (see <a href="#color" onclick="c('color')">color</a>).</dd>
- <dt>See Also</dt><dd>
- <a href="#move" onclick="c('move')">move</a>, <a href="#left" onclick="c('left')">left</a>, <a href="#right" onclick="c('right')">right</a>, <a href="#up" onclick="c('up')">up</a>, <a href="#color" onclick="c('color')">color</a>, <a href="#forw" onclick="c('forw')">forw</a>, <a href="#back" onclick="c('back')">back</a></dd></dl>
- <hr>
- <h2 id="color">color<a href="#color"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">color</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">palidx</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Sets turtle paint color.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>palidx </td><td>color, palette index 0 to 255 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#move" onclick="c('move')">move</a>, <a href="#left" onclick="c('left')">left</a>, <a href="#right" onclick="c('right')">right</a>, <a href="#up" onclick="c('up')">up</a>, <a href="#down" onclick="c('down')">down</a>, <a href="#forw" onclick="c('forw')">forw</a>, <a href="#back" onclick="c('back')">back</a></dd></dl>
- <hr>
- <h2 id="forw">forw<a href="#forw"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">forw</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">cnt</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Moves turtle forward.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>cnt </td><td>amount in pixels (or 1/128 tiles with <a href="#maze" onclick="c('maze')">maze</a>) </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#move" onclick="c('move')">move</a>, <a href="#left" onclick="c('left')">left</a>, <a href="#right" onclick="c('right')">right</a>, <a href="#up" onclick="c('up')">up</a>, <a href="#down" onclick="c('down')">down</a>, <a href="#color" onclick="c('color')">color</a>, <a href="#back" onclick="c('back')">back</a></dd></dl>
- <hr>
- <h2 id="back">back<a href="#back"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">back</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">cnt</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Moves turtle backward.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>cnt </td><td>amount in pixels (or 1/128 tiles with <a href="#maze" onclick="c('maze')">maze</a>) </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#move" onclick="c('move')">move</a>, <a href="#left" onclick="c('left')">left</a>, <a href="#right" onclick="c('right')">right</a>, <a href="#up" onclick="c('up')">up</a>, <a href="#down" onclick="c('down')">down</a>, <a href="#color" onclick="c('color')">color</a>, <a href="#forw" onclick="c('forw')">forw</a></dd></dl>
- <hr>
- <h2 id="spr">spr<a href="#spr"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">spr</span>(<span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">sprite</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">sw</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">sh</span>, <span class="hl_t">int8_t</span> <span class="hl_v">scale</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">type</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Displays a sprite, or multiple adjacent sprites.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>x </td><td>X coordinate in pixels </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr>
- <tr><td>sprite </td><td>sprite id, 0 to 1023 </td></tr>
- <tr><td>sw </td><td>number of horizontal sprites </td></tr>
- <tr><td>sh </td><td>number of vertical sprites </td></tr>
- <tr><td>scale </td><td>scale, -3 to 4 </td></tr>
- <tr><td>type </td><td>transform, 0=normal, 1=rotate 90, 2=rotate 180, 3=rotate 270, 4=flip vertically, 5=flip+90, 6=flip horizontally, 7=flip+270 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dlg" onclick="c('dlg')">dlg</a>, <a href="#stext" onclick="c('stext')">stext</a></dd></dl>
- <hr>
- <h2 id="dlg">dlg<a href="#dlg"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br></pre><code><span class="hl_t">void</span> <span class="hl_f">dlg</span>(<span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">w</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">h</span>, <span class="hl_t">int8_t</span> <span class="hl_v">scale</span>,
- <span class="hl_t">uint16_t</span> <span class="hl_v">tl</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">tm</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">tr</span>,
- <span class="hl_t">uint16_t</span> <span class="hl_v">ml</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">bg</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">mr</span>,
- <span class="hl_t">uint16_t</span> <span class="hl_v">bl</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">bm</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">br</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Displays a dialog window using sprites.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>x </td><td>X coordinate in pixels </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr>
- <tr><td>w </td><td>dialog width in pixels </td></tr>
- <tr><td>h </td><td>dialog height in pixels </td></tr>
- <tr><td>scale </td><td>scale, -3 to 4 </td></tr>
- <tr><td>tl </td><td>top left corner sprite id </td></tr>
- <tr><td>tm </td><td>top middle sprite id </td></tr>
- <tr><td>tr </td><td>top right corner sprite id </td></tr>
- <tr><td>ml </td><td>middle left side sprite id </td></tr>
- <tr><td>bg </td><td>background sprite id </td></tr>
- <tr><td>mr </td><td>middle right side sprite id </td></tr>
- <tr><td>bl </td><td>bottom left corner sprite id </td></tr>
- <tr><td>bm </td><td>bottom middle sprite id </td></tr>
- <tr><td>br </td><td>bottom right corner sprite id </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#spr" onclick="c('spr')">spr</a>, <a href="#stext" onclick="c('stext')">stext</a></dd></dl>
- <hr>
- <h2 id="stext">stext<a href="#stext"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">stext</span>(<span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">fs</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">fu</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">sw</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">sh</span>, <span class="hl_t">int8_t</span> <span class="hl_v">scale</span>, <span class="hl_t">str_t</span> <span class="hl_v">str</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Displays text on screen using sprites.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>x </td><td>X coordinate in pixels </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr>
- <tr><td>fs </td><td>first sprite id to be used for displaying </td></tr>
- <tr><td>fu </td><td>first UNICODE (smallest character) in string </td></tr>
- <tr><td>sw </td><td>number of horizontal sprites </td></tr>
- <tr><td>sh </td><td>number of vertical sprites </td></tr>
- <tr><td>scale </td><td>scale, -3 to 4 </td></tr>
- <tr><td>str </td><td>zero terminated UTF-8 string </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#spr" onclick="c('spr')">spr</a>, <a href="#dlg" onclick="c('dlg')">dlg</a></dd></dl>
- <hr>
- <h2 id="remap">remap<a href="#remap"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">remap</span>(<span class="hl_t">addr_t</span> <span class="hl_v">replace</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Replaces tiles on map. Can be used to animate tiles on the map.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>replace </td><td>an array of 256 sprite ids </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#mget" onclick="c('mget')">mget</a>, <a href="#mset" onclick="c('mset')">mset</a>, <a href="#map" onclick="c('map')">map</a>, <a href="#maze" onclick="c('maze')">maze</a></dd></dl>
- <hr>
- <h2 id="mget">mget<a href="#mget"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint16_t</span> <span class="hl_f">mget</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">mx</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">my</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns one tile on map.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>mx </td><td>X coordinate on map in tiles </td></tr>
- <tr><td>my </td><td>Y coordinate on map in tiles </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The sprite id of the tile at the given coordinate.</dd>
- <dt>See Also</dt><dd>
- <a href="#remap" onclick="c('remap')">remap</a>, <a href="#mset" onclick="c('mset')">mset</a>, <a href="#map" onclick="c('map')">map</a>, <a href="#maze" onclick="c('maze')">maze</a></dd></dl>
- <hr>
- <h2 id="mset">mset<a href="#mset"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mset</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">mx</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">my</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">sprite</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Sets one tile on map.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>mx </td><td>X coordinate on map in tiles </td></tr>
- <tr><td>my </td><td>Y coordinate on map in tiles </td></tr>
- <tr><td>sprite </td><td>sprite id, 0 to 1023 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#remap" onclick="c('remap')">remap</a>, <a href="#mget" onclick="c('mget')">mget</a>, <a href="#map" onclick="c('map')">map</a>, <a href="#maze" onclick="c('maze')">maze</a></dd></dl>
- <hr>
- <h2 id="map">map<a href="#map"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">map</span>(<span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">mx</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">my</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">mw</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">mh</span>, <span class="hl_t">int8_t</span> <span class="hl_v">scale</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Draws (part of) the map.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>x </td><td>X coordinate in pixels </td></tr>
- <tr><td>y </td><td>Y coordinate in pixels </td></tr>
- <tr><td>mx </td><td>X coordinate on map in tiles </td></tr>
- <tr><td>my </td><td>Y coordinate on map in tiles </td></tr>
- <tr><td>mw </td><td>number of horizontal tiles </td></tr>
- <tr><td>mh </td><td>number of vertical tiles </td></tr>
- <tr><td>scale </td><td>scale, -3 to 4 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#remap" onclick="c('remap')">remap</a>, <a href="#mget" onclick="c('mget')">mget</a>, <a href="#mset" onclick="c('mset')">mset</a>, <a href="#maze" onclick="c('maze')">maze</a></dd></dl>
- <hr>
- <h2 id="maze">maze<a href="#maze"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br></pre><code><span class="hl_t">void</span> <span class="hl_f">maze</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">mx</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">my</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">mw</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">mh</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">scale</span>,
- <span class="hl_t">uint16_t</span> <span class="hl_v">sky</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">grd</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">door</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">wall</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">obj</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">numnpc</span>, <span class="hl_t">addr_t</span> <span class="hl_v">npc</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Displays map as a 3D maze, using turtle's position.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>mx </td><td>X coordinate on map in tiles </td></tr>
- <tr><td>my </td><td>Y coordinate on map in tiles </td></tr>
- <tr><td>mw </td><td>number of horizontal tiles </td></tr>
- <tr><td>mh </td><td>number of vertical tiles </td></tr>
- <tr><td>scale </td><td>number of sprites per tiles in power of two, 0 to 3 </td></tr>
- <tr><td>sky </td><td>sky tile index </td></tr>
- <tr><td>grd </td><td>ground tile index </td></tr>
- <tr><td>door </td><td>first door tile index </td></tr>
- <tr><td>wall </td><td>first wall tile index </td></tr>
- <tr><td>obj </td><td>first object tile index </td></tr>
- <tr><td>numnpc </td><td>number of NPC records </td></tr>
- <tr><td>npc </td><td>an uint32_t array of numnpc times x,y,tile index triplets </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#remap" onclick="c('remap')">remap</a>, <a href="#mget" onclick="c('mget')">mget</a>, <a href="#mset" onclick="c('mset')">mset</a>, <a href="#map" onclick="c('map')">map</a></dd></dl><br style="clear:both;"><label class="btn prev" accesskey="p" for="_gpio" title="GPIO">Previous</label><label class="btn next" accesskey="n" for="_input" title="Input">Next</label></div>
- <div class="page" rel="input"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> API Reference »</li><li> Input</li></ul><hr></div>
- <h1 id="input">Input<a href="#input"></a></h1>
- <h2 id="getpad">getpad<a href="#getpad"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">getpad</span>(<span class="hl_t">int</span> <span class="hl_v">pad</span>, <span class="hl_t">int</span> <span class="hl_v">btn</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Gets the current state of a gamepad button.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>pad </td><td>gamepad index, 0 to 3 </td></tr>
- <tr><td>btn </td><td>one of the <a href="#gamepad" onclick="c('gamepad')">gamepad</a> buttons, <samp>BTN_</samp> </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Zero if not pressed, non-zero if pressed.</dd>
- <dt>See Also</dt><dd>
- <a href="#prspad" onclick="c('prspad')">prspad</a>, <a href="#relpad" onclick="c('relpad')">relpad</a>, <a href="#getbtn" onclick="c('getbtn')">getbtn</a>, <a href="#getclk" onclick="c('getclk')">getclk</a>, <a href="#getkey" onclick="c('getkey')">getkey</a></dd></dl>
- <hr>
- <h2 id="prspad">prspad<a href="#prspad"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">prspad</span>(<span class="hl_t">int</span> <span class="hl_v">pad</span>, <span class="hl_t">int</span> <span class="hl_v">btn</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns true if gamepad button was pressed since last call.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>pad </td><td>gamepad index, 0 to 3 </td></tr>
- <tr><td>btn </td><td>one of the <a href="#gamepad" onclick="c('gamepad')">gamepad</a> buttons, <samp>BTN_</samp> </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Zero if not pressed, non-zero if pressed.</dd>
- <dt>See Also</dt><dd>
- <a href="#relpad" onclick="c('relpad')">relpad</a>, <a href="#getpad" onclick="c('getpad')">getpad</a>, <a href="#getbtn" onclick="c('getbtn')">getbtn</a>, <a href="#getclk" onclick="c('getclk')">getclk</a>, <a href="#getkey" onclick="c('getkey')">getkey</a></dd></dl>
- <hr>
- <h2 id="relpad">relpad<a href="#relpad"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">relpad</span>(<span class="hl_t">int</span> <span class="hl_v">pad</span>, <span class="hl_t">int</span> <span class="hl_v">btn</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns true if gamepad button was released since last call.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>pad </td><td>gamepad index, 0 to 3 </td></tr>
- <tr><td>btn </td><td>one of the <a href="#gamepad" onclick="c('gamepad')">gamepad</a> buttons, <samp>BTN_</samp> </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Zero if wasn't released, non-zero if released.</dd>
- <dt>See Also</dt><dd>
- <a href="#prspad" onclick="c('prspad')">prspad</a>, <a href="#getpad" onclick="c('getpad')">getpad</a>, <a href="#getbtn" onclick="c('getbtn')">getbtn</a>, <a href="#getclk" onclick="c('getclk')">getclk</a>, <a href="#getkey" onclick="c('getkey')">getkey</a></dd></dl>
- <hr>
- <h2 id="getbtn">getbtn<a href="#getbtn"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">getbtn</span>(<span class="hl_t">int</span> <span class="hl_v">btn</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Gets the mouse buttons state.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>btn </td><td>one of the <a href="#pointer" onclick="c('pointer')">pointer</a> buttons, <samp>BTN_</samp> or <samp>SCR_</samp> </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Zero if not pressed, non-zero if pressed.</dd>
- <dt>See Also</dt><dd>
- <a href="#prspad" onclick="c('prspad')">prspad</a>, <a href="#relpad" onclick="c('relpad')">relpad</a>, <a href="#getpad" onclick="c('getpad')">getpad</a>, <a href="#getclk" onclick="c('getclk')">getclk</a>, <a href="#getkey" onclick="c('getkey')">getkey</a></dd></dl>
- <hr>
- <h2 id="getclk">getclk<a href="#getclk"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">getclk</span>(<span class="hl_t">int</span> <span class="hl_v">btn</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Gets mouse button clicking.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>btn </td><td>one of the <a href="#pointer" onclick="c('pointer')">pointer</a> buttons, <samp>BTN_</samp> </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Zero if not clicked, non-zero if clicked.</dd>
- <dt>See Also</dt><dd>
- <a href="#prspad" onclick="c('prspad')">prspad</a>, <a href="#relpad" onclick="c('relpad')">relpad</a>, <a href="#getpad" onclick="c('getpad')">getpad</a>, <a href="#getbtn" onclick="c('getbtn')">getbtn</a>, <a href="#getkey" onclick="c('getkey')">getkey</a></dd></dl>
- <hr>
- <h2 id="getkey">getkey<a href="#getkey"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">getkey</span>(<span class="hl_t">int</span> <span class="hl_v">sc</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Gets the current state of a key.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>sc </td><td>scancode, 1 to 144, see <a href="#keyboard" onclick="c('keyboard')">keyboard</a> </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Zero if not pressed, non-zero if pressed.</dd>
- <dt>See Also</dt><dd>
- <a href="#prspad" onclick="c('prspad')">prspad</a>, <a href="#relpad" onclick="c('relpad')">relpad</a>, <a href="#getpad" onclick="c('getpad')">getpad</a>, <a href="#getbtn" onclick="c('getbtn')">getbtn</a>, <a href="#getclk" onclick="c('getclk')">getclk</a></dd></dl>
- <hr>
- <h2 id="popkey">popkey<a href="#popkey"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint32_t</span> <span class="hl_f">popkey</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Pop an UTF-8 key from the keyboard queue. See <a href="#keyboard" onclick="c('keyboard')">keyboard</a>, and for the blocking version <a href="#getc" onclick="c('getc')">getc</a>.</dd>
- <dt>Return Value</dt><dd>
- The UTF-8 representation of the key, or 0 if the queue was empty (no blocking).</dd>
- <dt>See Also</dt><dd>
- <a href="#pendkey" onclick="c('pendkey')">pendkey</a>, <a href="#lenkey" onclick="c('lenkey')">lenkey</a>, <a href="#speckey" onclick="c('speckey')">speckey</a>, <a href="#getc" onclick="c('getc')">getc</a></dd></dl>
- <hr>
- <h2 id="pendkey">pendkey<a href="#pendkey"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">pendkey</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns true if there's a key pending in the queue (but leaves the key in the queue, does not pop it).</dd>
- <dt>Return Value</dt><dd>
- Returns 1 if there are keys in the queue pending.</dd>
- <dt>See Also</dt><dd>
- <a href="#popkey" onclick="c('popkey')">popkey</a>, <a href="#lenkey" onclick="c('lenkey')">lenkey</a>, <a href="#speckey" onclick="c('speckey')">speckey</a></dd></dl>
- <hr>
- <h2 id="lenkey">lenkey<a href="#lenkey"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">lenkey</span>(<span class="hl_t">uint32_t</span> <span class="hl_v">key</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the length of a UTF-8 key in bytes.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>key </td><td>the key, popped from the queue </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- UTF-8 representation's length in bytes.</dd>
- <dt>See Also</dt><dd>
- <a href="#popkey" onclick="c('popkey')">popkey</a>, <a href="#pendkey" onclick="c('pendkey')">pendkey</a>, <a href="#speckey" onclick="c('speckey')">speckey</a></dd></dl>
- <hr>
- <h2 id="speckey">speckey<a href="#speckey"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">speckey</span>(<span class="hl_t">uint32_t</span> <span class="hl_v">key</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns true if key is a special key.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>key </td><td>the key, popped from the queue </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns 1 if it's a special key, and 0 if it's a printable one.</dd>
- <dt>See Also</dt><dd>
- <a href="#popkey" onclick="c('popkey')">popkey</a>, <a href="#pendkey" onclick="c('pendkey')">pendkey</a>, <a href="#lenkey" onclick="c('lenkey')">lenkey</a></dd></dl><br style="clear:both;"><label class="btn prev" accesskey="p" for="_graphics" title="Graphics">Previous</label><label class="btn next" accesskey="n" for="_mathematics" title="Mathematics">Next</label></div>
- <div class="page" rel="mathematics"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> API Reference »</li><li> Mathematics</li></ul><hr></div>
- <h1 id="mathematics">Mathematics<a href="#mathematics"></a></h1>
- <h2 id="rand">rand<a href="#rand"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint32_t</span> <span class="hl_f">rand</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Get random. Use <samp>%</samp> modulo to make it smaller, for example <samp>1 + rand() % 6</samp> returns random between 1 and 6, like a dice.</dd>
- <dt>Return Value</dt><dd>
- A random number between 0 and 2<sup>32</sup>-1 (4294967295).</dd>
- <dt>See Also</dt><dd>
- <a href="#rnd" onclick="c('rnd')">rnd</a></dd></dl>
- <hr>
- <h2 id="rnd">rnd<a href="#rnd"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">rnd</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Get random. Same as <a href="#rand" onclick="c('rand')">rand</a>, but returns a floating point number.</dd>
- <dt>Return Value</dt><dd>
- A random number between 0.0 and 1.0.</dd>
- <dt>See Also</dt><dd>
- <a href="#rand" onclick="c('rand')">rand</a></dd></dl>
- <hr>
- <h2 id="float">float<a href="#float"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_t">float</span>(<span class="hl_t">int</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the floating point equivalent of an integer number.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The floating point of value.</dd>
- <dt>See Also</dt><dd>
- <a href="#int" onclick="c('int')">int</a></dd></dl>
- <hr>
- <h2 id="int">int<a href="#int"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_t">int</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the integer equivalent of a floating point number.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The integer of value.</dd>
- <dt>See Also</dt><dd>
- <a href="#float" onclick="c('float')">float</a></dd></dl>
- <hr>
- <h2 id="floor">floor<a href="#floor"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">floor</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the largest integral number that's not greater than value.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The floor of value.</dd>
- <dt>See Also</dt><dd>
- <a href="#ceil" onclick="c('ceil')">ceil</a></dd></dl>
- <hr>
- <h2 id="ceil">ceil<a href="#ceil"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">ceil</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the smallest integral number that's not less than value.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The ceiling of value.</dd>
- <dt>See Also</dt><dd>
- <a href="#floor" onclick="c('floor')">floor</a></dd></dl>
- <hr>
- <h2 id="sgn">sgn<a href="#sgn"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">sgn</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the sign of the value.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Either 1.0 or -1.0.</dd>
- <dt>See Also</dt><dd>
- <a href="#abs" onclick="c('abs')">abs</a></dd></dl>
- <hr>
- <h2 id="abs">abs<a href="#abs"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">abs</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the absolute of the value.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Either value or -value, always positive.</dd>
- <dt>See Also</dt><dd>
- <a href="#sgn" onclick="c('sgn')">sgn</a></dd></dl>
- <hr>
- <h2 id="exp">exp<a href="#exp"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">exp</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the exponential of the value, i.e. base of natural logarithms raised to power of the value.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns e<sup>val</sup>.</dd>
- <dt>See Also</dt><dd>
- <a href="#log" onclick="c('log')">log</a>, <a href="#pow" onclick="c('pow')">pow</a></dd></dl>
- <hr>
- <h2 id="log">log<a href="#log"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">log</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the natural logarithm of the value.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns natural logarithm of value.</dd>
- <dt>See Also</dt><dd>
- <a href="#exp" onclick="c('exp')">exp</a></dd></dl>
- <hr>
- <h2 id="pow">pow<a href="#pow"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">pow</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>, <span class="hl_t">float</span> <span class="hl_v">exp</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the value raised to the power of exponent. This is a slow operation, try to avoid.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr>
- <tr><td>exp </td><td>exponent </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns val<sup>exp</sup>.</dd>
- <dt>See Also</dt><dd>
- <a href="#exp" onclick="c('exp')">exp</a>, <a href="#sqrt" onclick="c('sqrt')">sqrt</a>, <a href="#rsqrt" onclick="c('rsqrt')">rsqrt</a></dd></dl>
- <hr>
- <h2 id="sqrt">sqrt<a href="#sqrt"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">sqrt</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the square root of the value. This is a slow operation, try to avoid.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Square root of the value.</dd>
- <dt>See Also</dt><dd>
- <a href="#pow" onclick="c('pow')">pow</a>, <a href="#rsqrt" onclick="c('rsqrt')">rsqrt</a></dd></dl>
- <hr>
- <h2 id="rsqrt">rsqrt<a href="#rsqrt"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">rsqrt</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the reciprocal of the square root of the value (<samp>1 / sqrt(val)</samp>). Uses John Carmack's fast method.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Reciprocal of the square root of the value.</dd>
- <dt>See Also</dt><dd>
- <a href="#pow" onclick="c('pow')">pow</a>, <a href="#sqrt" onclick="c('sqrt')">sqrt</a></dd></dl>
- <hr>
- <h2 id="clamp">clamp<a href="#clamp"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">clamp</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>, <span class="hl_t">float</span> <span class="hl_v">minv</span>, <span class="hl_t">float</span> <span class="hl_v">maxv</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Clamps a value between the limits.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value </td></tr>
- <tr><td>minv </td><td>minimum value </td></tr>
- <tr><td>maxv </td><td>maximum value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Clamped value.</dd>
- <dt>See Also</dt><dd>
- <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a></dd></dl>
- <hr>
- <h2 id="lerp">lerp<a href="#lerp"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">lerp</span>(<span class="hl_t">float</span> <span class="hl_v">a</span>, <span class="hl_t">float</span> <span class="hl_v">b</span>, <span class="hl_t">float</span> <span class="hl_v">t</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Linear interpolates two numbers.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>first float number </td></tr>
- <tr><td>b </td><td>second float number </td></tr>
- <tr><td>t </td><td>interpolation value between 0.0 and 1.0 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a></dd></dl>
- <hr>
- <h2 id="pi">pi<a href="#pi"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">pi</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns π as a floating point number.</dd>
- <dt>Return Value</dt><dd>
- The value 3.14159265358979323846.</dd></dl>
- <hr>
- <h2 id="cos">cos<a href="#cos"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">cos</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">deg</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns cosine.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>deg </td><td>degree, 0 to 359, 0 is up, 90 on the right </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Cosine of the degree, between -1.0 to 1.0.</dd>
- <dt>See Also</dt><dd>
- <a href="#sin" onclick="c('sin')">sin</a>, <a href="#tan" onclick="c('tan')">tan</a>, <a href="#acos" onclick="c('acos')">acos</a>, <a href="#asin" onclick="c('asin')">asin</a>, <a href="#atan" onclick="c('atan')">atan</a>, <a href="#atan2" onclick="c('atan2')">atan2</a></dd></dl>
- <hr>
- <h2 id="sin">sin<a href="#sin"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">sin</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">deg</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns sine.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>deg </td><td>degree, 0 to 359, 0 is up, 90 to the right </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Sine of the degree, between -1.0 to 1.0.</dd>
- <dt>See Also</dt><dd>
- <a href="#cos" onclick="c('cos')">cos</a>, <a href="#tan" onclick="c('tan')">tan</a>, <a href="#acos" onclick="c('acos')">acos</a>, <a href="#asin" onclick="c('asin')">asin</a>, <a href="#atan" onclick="c('atan')">atan</a>, <a href="#atan2" onclick="c('atan2')">atan2</a></dd></dl>
- <hr>
- <h2 id="tan">tan<a href="#tan"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">tan</span>(<span class="hl_t">uint16_t</span> <span class="hl_v">deg</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns tangent.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>deg </td><td>degree, 0 to 359, 0 is up, 90 to the right </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Tangent of the degree, between -1.0 to 1.0.</dd>
- <dt>See Also</dt><dd>
- <a href="#cos" onclick="c('cos')">cos</a>, <a href="#sin" onclick="c('sin')">sin</a>, <a href="#acos" onclick="c('acos')">acos</a>, <a href="#asin" onclick="c('asin')">asin</a>, <a href="#atan" onclick="c('atan')">atan</a>, <a href="#atan2" onclick="c('atan2')">atan2</a></dd></dl>
- <hr>
- <h2 id="acos">acos<a href="#acos"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint16_t</span> <span class="hl_f">acos</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns arcus cosine.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value, -1.0 to 1.0 </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Arcus cosine in degree, 0 to 359, 0 is up, 90 to the right.</dd>
- <dt>See Also</dt><dd>
- <a href="#cos" onclick="c('cos')">cos</a>, <a href="#sin" onclick="c('sin')">sin</a>, <a href="#tan" onclick="c('tan')">tan</a>, <a href="#asin" onclick="c('asin')">asin</a>, <a href="#atan" onclick="c('atan')">atan</a>, <a href="#atan2" onclick="c('atan2')">atan2</a></dd></dl>
- <hr>
- <h2 id="asin">asin<a href="#asin"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint16_t</span> <span class="hl_f">asin</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns arcus sine.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value, -1.0 to 1.0 </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Arcus sine in degree, 0 to 359, 0 is up, 90 to the right.</dd>
- <dt>See Also</dt><dd>
- <a href="#cos" onclick="c('cos')">cos</a>, <a href="#sin" onclick="c('sin')">sin</a>, <a href="#tan" onclick="c('tan')">tan</a>, <a href="#acos" onclick="c('acos')">acos</a>, <a href="#atan" onclick="c('atan')">atan</a>, <a href="#atan2" onclick="c('atan2')">atan2</a></dd></dl>
- <hr>
- <h2 id="atan">atan<a href="#atan"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint16_t</span> <span class="hl_f">atan</span>(<span class="hl_t">float</span> <span class="hl_v">val</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns arcus tangent.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>val </td><td>value, -1.0 to 1.0 </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Arcus tangent in degree, 0 to 359, 0 is up, 90 to the right.</dd>
- <dt>See Also</dt><dd>
- <a href="#cos" onclick="c('cos')">cos</a>, <a href="#sin" onclick="c('sin')">sin</a>, <a href="#tan" onclick="c('tan')">tan</a>, <a href="#acos" onclick="c('acos')">acos</a>, <a href="#asin" onclick="c('asin')">asin</a>, <a href="#atan2" onclick="c('atan2')">atan2</a></dd></dl>
- <hr>
- <h2 id="atan2">atan2<a href="#atan2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint16_t</span> <span class="hl_f">atan2</span>(<span class="hl_t">float</span> <span class="hl_v">y</span>, <span class="hl_t">float</span> <span class="hl_v">x</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns arcus tangent for y/x, using the signs of y and x to determine the quadrant.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>y </td><td>Y coordinate </td></tr>
- <tr><td>x </td><td>X coordinate </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Arcus tangent in degree, 0 to 359, 0 is up, 90 to the right.</dd>
- <dt>See Also</dt><dd>
- <a href="#cos" onclick="c('cos')">cos</a>, <a href="#sin" onclick="c('sin')">sin</a>, <a href="#tan" onclick="c('tan')">tan</a>, <a href="#acos" onclick="c('acos')">acos</a>, <a href="#asin" onclick="c('asin')">asin</a></dd></dl>
- <hr>
- <h2 id="dotv2">dotv2<a href="#dotv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">dotv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates dot product of two vectors with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of two floats </td></tr>
- <tr><td>b </td><td>address of two floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Dot product of the vectors.</dd>
- <dt>See Also</dt><dd>
- <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="lenv2">lenv2<a href="#lenv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">lenv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates the length of a vector with two elements. This is slow, try to avoid (see <a href="#normv2" onclick="c('normv2')">normv2</a>).</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of two floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Length of the vector.</dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="scalev2">scalev2<a href="#scalev2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">scalev2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">float</span> <span class="hl_v">s</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Scales a vector with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of two floats </td></tr>
- <tr><td>s </td><td>scaler value </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="negv2">negv2<a href="#negv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">negv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Negates a vector with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of two floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="addv2">addv2<a href="#addv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">addv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Adds together vectors with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of two floats </td></tr>
- <tr><td>a </td><td>address of two floats </td></tr>
- <tr><td>b </td><td>address of two floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="subv2">subv2<a href="#subv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">subv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Subtracts vectors with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of two floats </td></tr>
- <tr><td>a </td><td>address of two floats </td></tr>
- <tr><td>b </td><td>address of two floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="mulv2">mulv2<a href="#mulv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mulv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Multiplies vectors with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of two floats </td></tr>
- <tr><td>a </td><td>address of two floats </td></tr>
- <tr><td>b </td><td>address of two floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="divv2">divv2<a href="#divv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">divv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Divides vectors with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of two floats </td></tr>
- <tr><td>a </td><td>address of two floats </td></tr>
- <tr><td>b </td><td>address of two floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="clampv2">clampv2<a href="#clampv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">clampv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">v</span>, <span class="hl_t">addr_t</span> <span class="hl_v">minv</span>, <span class="hl_t">addr_t</span> <span class="hl_v">maxv</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Clamps vectors with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of two floats </td></tr>
- <tr><td>v </td><td>address of two floats, input </td></tr>
- <tr><td>minv </td><td>address of two floats, minimum </td></tr>
- <tr><td>maxv </td><td>address of two floats, maximum </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="lerpv2">lerpv2<a href="#lerpv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">lerpv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>, <span class="hl_t">float</span> <span class="hl_v">t</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Linear interpolates vectors with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of two floats </td></tr>
- <tr><td>a </td><td>address of two floats </td></tr>
- <tr><td>b </td><td>address of two floats </td></tr>
- <tr><td>t </td><td>interpolation value between 0.0 and 1.0 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#normv2" onclick="c('normv2')">normv2</a></dd></dl>
- <hr>
- <h2 id="normv2">normv2<a href="#normv2"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">normv2</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Normalizes a vector with two elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of two floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv2" onclick="c('dotv2')">dotv2</a>, <a href="#lenv2" onclick="c('lenv2')">lenv2</a>, <a href="#scalev2" onclick="c('scalev2')">scalev2</a>, <a href="#negv2" onclick="c('negv2')">negv2</a>, <a href="#addv2" onclick="c('addv2')">addv2</a>, <a href="#subv2" onclick="c('subv2')">subv2</a>, <a href="#mulv2" onclick="c('mulv2')">mulv2</a>, <a href="#divv2" onclick="c('divv2')">divv2</a>, <a href="#clampv2" onclick="c('clampv2')">clampv2</a>, <a href="#lerpv2" onclick="c('lerpv2')">lerpv2</a></dd></dl>
- <hr>
- <h2 id="dotv3">dotv3<a href="#dotv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">dotv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates dot product of two vectors with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of three floats </td></tr>
- <tr><td>b </td><td>address of three floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Dot product of the vectors.</dd>
- <dt>See Also</dt><dd>
- <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="lenv3">lenv3<a href="#lenv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">lenv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates the length of a vector with three elements. This is slow, try to avoid (see <a href="#normv3" onclick="c('normv3')">normv3</a>).</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of three floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Length of the vector.</dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="scalev3">scalev3<a href="#scalev3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">scalev3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">float</span> <span class="hl_v">s</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Scales a vector with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of three floats </td></tr>
- <tr><td>s </td><td>scaler value </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="negv3">negv3<a href="#negv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">negv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Negates a vector with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="addv3">addv3<a href="#addv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">addv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Adds together vectors with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>a </td><td>address of three floats </td></tr>
- <tr><td>b </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="subv3">subv3<a href="#subv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">subv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Subtracts vectors with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>a </td><td>address of three floats </td></tr>
- <tr><td>b </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="mulv3">mulv3<a href="#mulv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mulv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Multiplies vectors with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>a </td><td>address of three floats </td></tr>
- <tr><td>b </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="divv3">divv3<a href="#divv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">divv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Divides vectors with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>a </td><td>address of three floats </td></tr>
- <tr><td>b </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="crossv3">crossv3<a href="#crossv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">crossv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates cross product of vectors with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>a </td><td>address of three floats </td></tr>
- <tr><td>b </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="clampv3">clampv3<a href="#clampv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">clampv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">v</span>, <span class="hl_t">addr_t</span> <span class="hl_v">minv</span>, <span class="hl_t">addr_t</span> <span class="hl_v">maxv</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Clamps vectors with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>v </td><td>address of three floats, input </td></tr>
- <tr><td>minv </td><td>address of three floats, minimum </td></tr>
- <tr><td>maxv </td><td>address of three floats, maximum </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="lerpv3">lerpv3<a href="#lerpv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">lerpv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>, <span class="hl_t">float</span> <span class="hl_v">t</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Linear interpolates vectors with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>a </td><td>address of three floats </td></tr>
- <tr><td>b </td><td>address of three floats </td></tr>
- <tr><td>t </td><td>interpolation value between 0.0 and 1.0 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#normv3" onclick="c('normv3')">normv3</a></dd></dl>
- <hr>
- <h2 id="normv3">normv3<a href="#normv3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">normv3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Normalizes a vector with three elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv3" onclick="c('dotv3')">dotv3</a>, <a href="#lenv3" onclick="c('lenv3')">lenv3</a>, <a href="#scalev3" onclick="c('scalev3')">scalev3</a>, <a href="#negv3" onclick="c('negv3')">negv3</a>, <a href="#addv3" onclick="c('addv3')">addv3</a>, <a href="#subv3" onclick="c('subv3')">subv3</a>, <a href="#mulv3" onclick="c('mulv3')">mulv3</a>, <a href="#divv3" onclick="c('divv3')">divv3</a>, <a href="#crossv3" onclick="c('crossv3')">crossv3</a>, <a href="#clampv3" onclick="c('clampv3')">clampv3</a>, <a href="#lerpv3" onclick="c('lerpv3')">lerpv3</a></dd></dl>
- <hr>
- <h2 id="dotv4">dotv4<a href="#dotv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">dotv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates dot product of two vectors with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Dot product of the vectors.</dd>
- <dt>See Also</dt><dd>
- <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="lenv4">lenv4<a href="#lenv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">lenv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates the length of a vector with four elements. This is slow, try to avoid (see <a href="#normv4" onclick="c('normv4')">normv4</a>).</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Length of the vector.</dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="scalev4">scalev4<a href="#scalev4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">scalev4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">float</span> <span class="hl_v">s</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Scales a vector with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>s </td><td>scaler value </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="negv4">negv4<a href="#negv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">negv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Negates a vector with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="addv4">addv4<a href="#addv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">addv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Adds together vectors with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="subv4">subv4<a href="#subv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">subv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Subtracts vectors with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="mulv4">mulv4<a href="#mulv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mulv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Multiplies vectors with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="divv4">divv4<a href="#divv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">divv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Divides vectors with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="clampv4">clampv4<a href="#clampv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">clampv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">v</span>, <span class="hl_t">addr_t</span> <span class="hl_v">minv</span>, <span class="hl_t">addr_t</span> <span class="hl_v">maxv</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Clamps vectors with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>v </td><td>address of four floats, input </td></tr>
- <tr><td>minv </td><td>address of four floats, minimum </td></tr>
- <tr><td>maxv </td><td>address of four floats, maximum </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="lerpv4">lerpv4<a href="#lerpv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">lerpv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>, <span class="hl_t">float</span> <span class="hl_v">t</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Linear interpolates vectors with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr>
- <tr><td>t </td><td>interpolation value between 0.0 and 1.0 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#normv4" onclick="c('normv4')">normv4</a></dd></dl>
- <hr>
- <h2 id="normv4">normv4<a href="#normv4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">normv4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Normalizes a vector with four elements.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#dotv4" onclick="c('dotv4')">dotv4</a>, <a href="#lenv4" onclick="c('lenv4')">lenv4</a>, <a href="#scalev4" onclick="c('scalev4')">scalev4</a>, <a href="#negv4" onclick="c('negv4')">negv4</a>, <a href="#addv4" onclick="c('addv4')">addv4</a>, <a href="#subv4" onclick="c('subv4')">subv4</a>, <a href="#mulv4" onclick="c('mulv4')">mulv4</a>, <a href="#divv4" onclick="c('divv4')">divv4</a>, <a href="#clampv4" onclick="c('clampv4')">clampv4</a>, <a href="#lerpv4" onclick="c('lerpv4')">lerpv4</a></dd></dl>
- <hr>
- <h2 id="idq">idq<a href="#idq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">idq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Loads the identity quaternion.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="eulerq">eulerq<a href="#eulerq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">eulerq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">pitch</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">yaw</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">roll</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Loads a quaternion using Euler angles.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>pitch </td><td>rotation around X axis in degrees, 0 to 359 </td></tr>
- <tr><td>yaw </td><td>rotation around Y axis in degrees, 0 to 359 </td></tr>
- <tr><td>roll </td><td>rotation around Z axis in degrees, 0 to 359 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="dotq">dotq<a href="#dotq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">dotq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates dot product of a quaternion.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Dot product of the quaternion.</dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="lenq">lenq<a href="#lenq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">lenq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates the length of a quaternion.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Length of the quaternion.</dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="scaleq">scaleq<a href="#scaleq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">scaleq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">float</span> <span class="hl_v">s</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Scales a quaternion.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>s </td><td>scaler value </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="negq">negq<a href="#negq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">negq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Negates a quaternion.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="addq">addq<a href="#addq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">addq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Adds together quaternions.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="subq">subq<a href="#subq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">subq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Subtracts quaternions.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="mulq">mulq<a href="#mulq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mulq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Multiplies quaternions.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="rotq">rotq<a href="#rotq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">rotq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">q</span>, <span class="hl_t">addr_t</span> <span class="hl_v">v</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Rotates a vector with three elements by a quaternion.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>q </td><td>address of four floats </td></tr>
- <tr><td>v </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="lerpq">lerpq<a href="#lerpq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">lerpq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>, <span class="hl_t">float</span> <span class="hl_v">t</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Linear interpolates two quaternions.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr>
- <tr><td>t </td><td>interpolation value between 0.0 and 1.0 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="slerpq">slerpq<a href="#slerpq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">slerpq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>, <span class="hl_t">float</span> <span class="hl_v">t</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Spherical interpolates a quaternion.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>a </td><td>address of four floats </td></tr>
- <tr><td>b </td><td>address of four floats </td></tr>
- <tr><td>t </td><td>interpolation value between 0.0 and 1.0 </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#normq" onclick="c('normq')">normq</a></dd></dl>
- <hr>
- <h2 id="normq">normq<a href="#normq"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">normq</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Normalizes a quaternion.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idq" onclick="c('idq')">idq</a>, <a href="#eulerq" onclick="c('eulerq')">eulerq</a>, <a href="#dotq" onclick="c('dotq')">dotq</a>, <a href="#lenq" onclick="c('lenq')">lenq</a>, <a href="#scaleq" onclick="c('scaleq')">scaleq</a>, <a href="#negq" onclick="c('negq')">negq</a>, <a href="#addq" onclick="c('addq')">addq</a>, <a href="#subq" onclick="c('subq')">subq</a>, <a href="#mulq" onclick="c('mulq')">mulq</a>, <a href="#rotq" onclick="c('rotq')">rotq</a>, <a href="#lerpq" onclick="c('lerpq')">lerpq</a>, <a href="#slerpq" onclick="c('slerpq')">slerpq</a></dd></dl>
- <hr>
- <h2 id="idm4">idm4<a href="#idm4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">idm4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Loads a 4 x 4 identity matrix.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of 16 floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#invm4" onclick="c('invm4')">invm4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="trsm4">trsm4<a href="#trsm4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">trsm4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">t</span>, <span class="hl_t">addr_t</span> <span class="hl_v">r</span>, <span class="hl_t">addr_t</span> <span class="hl_v">s</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Creates a 4 x 4 matrix with translation, rotation and scaling.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of 16 floats, destination matrix </td></tr>
- <tr><td>t </td><td>address of three floats, translation vector </td></tr>
- <tr><td>r </td><td>address of four floats, rotation quaternion </td></tr>
- <tr><td>s </td><td>address of three floats, scaling vector </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#invm4" onclick="c('invm4')">invm4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="detm4">detm4<a href="#detm4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">detm4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the matrix's determinant.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>a </td><td>address of 16 floats </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The matrix's determinant.</dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#invm4" onclick="c('invm4')">invm4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="addm4">addm4<a href="#addm4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">addm4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Adds matrices together.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of 16 floats </td></tr>
- <tr><td>a </td><td>address of 16 floats </td></tr>
- <tr><td>b </td><td>address of 16 floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#invm4" onclick="c('invm4')">invm4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="subm4">subm4<a href="#subm4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">subm4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Subtracts matrices.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of 16 floats </td></tr>
- <tr><td>a </td><td>address of 16 floats </td></tr>
- <tr><td>b </td><td>address of 16 floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#invm4" onclick="c('invm4')">invm4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="mulm4">mulm4<a href="#mulm4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mulm4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>, <span class="hl_t">addr_t</span> <span class="hl_v">b</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Multiplies matrices.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of 16 floats </td></tr>
- <tr><td>a </td><td>address of 16 floats </td></tr>
- <tr><td>b </td><td>address of 16 floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#invm4" onclick="c('invm4')">invm4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="mulm4v3">mulm4v3<a href="#mulm4v3"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mulm4v3</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">m</span>, <span class="hl_t">addr_t</span> <span class="hl_v">v</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Multiplies a vector with three elements by a matrix.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of three floats </td></tr>
- <tr><td>m </td><td>address of 16 floats </td></tr>
- <tr><td>v </td><td>address of three floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#invm4" onclick="c('invm4')">invm4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="mulm4v4">mulm4v4<a href="#mulm4v4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">mulm4v4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">m</span>, <span class="hl_t">addr_t</span> <span class="hl_v">v</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Multiplies a vector with four elements by a matrix.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of four floats </td></tr>
- <tr><td>m </td><td>address of 16 floats </td></tr>
- <tr><td>v </td><td>address of four floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#invm4" onclick="c('invm4')">invm4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="invm4">invm4<a href="#invm4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">invm4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Calculates inverse matrix.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of 16 floats </td></tr>
- <tr><td>a </td><td>address of 16 floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#trpm4" onclick="c('trpm4')">trpm4</a></dd></dl>
- <hr>
- <h2 id="trpm4">trpm4<a href="#trpm4"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">trpm4</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">a</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Transpose matrix.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address of 16 floats </td></tr>
- <tr><td>a </td><td>address of 16 floats </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#idm4" onclick="c('idm4')">idm4</a>, <a href="#trsm4" onclick="c('trsm4')">trsm4</a>, <a href="#detm4" onclick="c('detm4')">detm4</a>, <a href="#addm4" onclick="c('addm4')">addm4</a>, <a href="#subm4" onclick="c('subm4')">subm4</a>, <a href="#mulm4" onclick="c('mulm4')">mulm4</a>, <a href="#mulm4v3" onclick="c('mulm4v3')">mulm4v3</a>, <a href="#mulm4v4" onclick="c('mulm4v4')">mulm4v4</a>, <a href="#invm4" onclick="c('invm4')">invm4</a></dd></dl>
- <hr>
- <h2 id="trns">trns<a href="#trns"></a></h2>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br></pre><code><span class="hl_t">void</span> <span class="hl_f">trns</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">src</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">num</span>,
- <span class="hl_t">int16_t</span> <span class="hl_v">x</span>, <span class="hl_t">int16_t</span> <span class="hl_v">y</span>, <span class="hl_t">int16_t</span> <span class="hl_v">z</span>,
- <span class="hl_t">uint16_t</span> <span class="hl_v">pitch</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">yaw</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">roll</span>,
- <span class="hl_t">float</span> <span class="hl_v">scale</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Translate a vertex cloud, aka. place a 3D model in <a href="#3d_space" onclick="c('3d_space')">3D space</a>.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>destination vertices array, 3 x 2 bytes each, X, Y, Z </td></tr>
- <tr><td>src </td><td>source vertices array, 3 x 2 bytes each, X, Y, Z </td></tr>
- <tr><td>num </td><td>number of vertex coordinate triplets in the array </td></tr>
- <tr><td>x </td><td>world X coordinate, -32767 to 32767 </td></tr>
- <tr><td>y </td><td>world Y coordinate, -32767 to 32767 </td></tr>
- <tr><td>z </td><td>world Z coordinate, -32767 to 32767 </td></tr>
- <tr><td>pitch </td><td>rotation around X axis in degrees, 0 to 359 </td></tr>
- <tr><td>yaw </td><td>rotation around Y axis in degrees, 0 to 359 </td></tr>
- <tr><td>roll </td><td>rotation around Z axis in degrees, 0 to 359 </td></tr>
- <tr><td>scale </td><td>scale, use 1.0 to keep original size </td></tr></table></div></dd>
- <dt>See Also</dt><dd>
- <a href="#mesh" onclick="c('mesh')">mesh</a></dd></dl><br style="clear:both;"><label class="btn prev" accesskey="p" for="_input" title="Input">Previous</label><label class="btn next" accesskey="n" for="_memory" title="Memory">Next</label></div>
- <div class="page" rel="memory"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> API Reference »</li><li> Memory</li></ul><hr></div>
- <h1 id="memory">Memory<a href="#memory"></a></h1>
- <h2 id="inb">inb<a href="#inb"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint8_t</span> <span class="hl_f">inb</span>(<span class="hl_t">addr_t</span> <span class="hl_v">src</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Read in one byte from memory.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>src </td><td>address, 0x00000 to 0xBFFFF </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns the value at that address.</dd></dl>
- <hr>
- <h2 id="inw">inw<a href="#inw"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint16_t</span> <span class="hl_f">inw</span>(<span class="hl_t">addr_t</span> <span class="hl_v">src</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Read in a word (two bytes) from memory.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>src </td><td>address, 0x00000 to 0xBFFFE </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns the value at that address.</dd></dl>
- <hr>
- <h2 id="ini">ini<a href="#ini"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint32_t</span> <span class="hl_f">ini</span>(<span class="hl_t">addr_t</span> <span class="hl_v">src</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Read in an integer (four bytes) from memory.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>src </td><td>address, 0x00000 to 0xBFFFC </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns the value at that address.</dd></dl>
- <hr>
- <h2 id="outb">outb<a href="#outb"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">outb</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">value</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Write out one byte to memory.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address, 0x00000 to 0xBFFFF </td></tr>
- <tr><td>value </td><td>value to set, 0 to 255 </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="outw">outw<a href="#outw"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">outw</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">uint16_t</span> <span class="hl_v">value</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Write out a word (two bytes) to memory.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address, 0x00000 to 0xBFFFE </td></tr>
- <tr><td>value </td><td>value to set, 0 to 65535 </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="outi">outi<a href="#outi"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">outi</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">value</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Write out an integer (four bytes) to memory.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>address, 0x00000 to 0xBFFFC </td></tr>
- <tr><td>value </td><td>value to set, 0 to 4294967295 </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="memsave">memsave<a href="#memsave"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">memsave</span>(<span class="hl_t">uint8_t</span> <span class="hl_v">overlay</span>, <span class="hl_t">addr_t</span> <span class="hl_v">src</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">size</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Saves memory area to overlay.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>overlay </td><td>index of overlay to write to, 0 to 255 </td></tr>
- <tr><td>src </td><td>memory offset to save from, 0x00000 to 0xBFFFF </td></tr>
- <tr><td>size </td><td>number of bytes to save </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns 1 on success, 0 on error.</dd>
- <dt>See Also</dt><dd>
- <a href="#memload" onclick="c('memload')">memload</a></dd></dl>
- <hr>
- <h2 id="memload">memload<a href="#memload"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">memload</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">overlay</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">maxsize</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Loads an overlay into the specified memory area.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>memory offset to load to, 0x00000 to 0xBFFFF </td></tr>
- <tr><td>overlay </td><td>index of overlay to read from, 0 to 255 </td></tr>
- <tr><td>maxsize </td><td>maximum number of bytes to load </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns the number of bytes actually loaded.</dd>
- <dt>See Also</dt><dd>
- <a href="#memsave" onclick="c('memsave')">memsave</a></dd></dl>
- <hr>
- <h2 id="memcpy">memcpy<a href="#memcpy"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">memcpy</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">src</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">len</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Copy memory regions.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>destination address, 0x00000 to 0xBFFFF </td></tr>
- <tr><td>src </td><td>source address, 0x00000 to 0xBFFFF </td></tr>
- <tr><td>len </td><td>number of bytes to copy </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="memset">memset<a href="#memset"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">void</span> <span class="hl_f">memset</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">uint8_t</span> <span class="hl_v">value</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">len</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Set memory region to a given value.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>destination address, 0x00000 to 0xBFFFF </td></tr>
- <tr><td>value </td><td>value to set, 0 to 255 </td></tr>
- <tr><td>len </td><td>number of bytes to set </td></tr></table></div></dd></dl>
- <hr>
- <h2 id="memcmp">memcmp<a href="#memcmp"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">memcmp</span>(<span class="hl_t">addr_t</span> <span class="hl_v">addr0</span>, <span class="hl_t">addr_t</span> <span class="hl_v">addr1</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">len</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Compare memory regions.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>addr0 </td><td>first address, 0x00000 to 0xBFFFF </td></tr>
- <tr><td>addr1 </td><td>second address, 0x00000 to 0xBFFFF </td></tr>
- <tr><td>len </td><td>number of bytes to compare </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Returns difference, 0 if the two memory region matches.</dd></dl>
- <hr>
- <h2 id="deflate">deflate<a href="#deflate"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">deflate</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">src</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">len</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Compress a buffer using RFC1950 deflate (zlib).</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>destination address, 0x30000 to 0xBFFFF </td></tr>
- <tr><td>src </td><td>source address, 0x30000 to 0xBFFFF </td></tr>
- <tr><td>len </td><td>number of bytes to compress </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- 0 or negative on error, otherwise the length of the compressed buffer and compressed data in dst.</dd>
- <dt>See Also</dt><dd>
- <a href="#inflate" onclick="c('inflate')">inflate</a></dd></dl>
- <hr>
- <h2 id="inflate">inflate<a href="#inflate"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">inflate</span>(<span class="hl_t">addr_t</span> <span class="hl_v">dst</span>, <span class="hl_t">addr_t</span> <span class="hl_v">src</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">len</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Uncompress a buffer with RFC1950 deflate (zlib) compressed data.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>dst </td><td>destination address, 0x30000 to 0xBFFFF </td></tr>
- <tr><td>src </td><td>source address, 0x30000 to 0xBFFFF </td></tr>
- <tr><td>len </td><td>number of compressed bytes </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- 0 or negative on error, otherwise the length of the uncompressed buffer and uncompressed data in dst.</dd>
- <dt>See Also</dt><dd>
- <a href="#deflate" onclick="c('deflate')">deflate</a></dd></dl>
- <hr>
- <h2 id="time">time<a href="#time"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">time</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the number of ticks since power on.</dd>
- <dt>Return Value</dt><dd>
- The elapsed time in milliseconds since power on.</dd>
- <dt>See Also</dt><dd>
- <a href="#now" onclick="c('now')">now</a></dd></dl>
- <hr>
- <h2 id="now">now<a href="#now"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">uint32_t</span> <span class="hl_f">now</span>(<span class="hl_t">void</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns the UNIX timestamp. Check the byte at offset 0000C to see if it overflows.</dd>
- <dt>Return Value</dt><dd>
- The elapsed time in seconds since 1 Jan 1970 midnight, Greenwich Mean Time.</dd>
- <dt>See Also</dt><dd>
- <a href="#time" onclick="c('time')">time</a></dd></dl>
- <hr>
- <h2 id="atoi">atoi<a href="#atoi"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">atoi</span>(<span class="hl_t">str_t</span> <span class="hl_v">src</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Converts an ASCII decimal string into an integer number.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>src </td><td>string address, 0x00000 to 0xBFFFF </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The number value of the string.</dd>
- <dt>See Also</dt><dd>
- <a href="#itoa" onclick="c('itoa')">itoa</a>, <a href="#str" onclick="c('str')">str</a>, <a href="#val" onclick="c('val')">val</a></dd></dl>
- <hr>
- <h2 id="itoa">itoa<a href="#itoa"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">str_t</span> <span class="hl_f">itoa</span>(<span class="hl_t">int</span> <span class="hl_v">value</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Converts an integer number into an ASCII decimal string.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>value </td><td>the value, -2147483648 to 2147483647 </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The converted string.</dd>
- <dt>See Also</dt><dd>
- <a href="#atoi" onclick="c('atoi')">atoi</a>, <a href="#str" onclick="c('str')">str</a>, <a href="#val" onclick="c('val')">val</a></dd></dl>
- <hr>
- <h2 id="val">val<a href="#val"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">float</span> <span class="hl_f">val</span>(<span class="hl_t">str_t</span> <span class="hl_v">src</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Converts an ASCII decimal string into a floating point number.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>src </td><td>string address, 0x00000 to 0xBFFFF </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The number value of the string.</dd>
- <dt>See Also</dt><dd>
- <a href="#itoa" onclick="c('itoa')">itoa</a>, <a href="#atoi" onclick="c('atoi')">atoi</a>, <a href="#str" onclick="c('str')">str</a></dd></dl>
- <hr>
- <h2 id="str">str<a href="#str"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">str_t</span> <span class="hl_f">str</span>(<span class="hl_t">float</span> <span class="hl_v">value</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Converts a floating point number into an ASCII decimal string.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>value </td><td>the value </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The converted string.</dd>
- <dt>See Also</dt><dd>
- <a href="#atoi" onclick="c('atoi')">atoi</a>, <a href="#itoa" onclick="c('itoa')">itoa</a>, <a href="#val" onclick="c('val')">val</a></dd></dl>
- <hr>
- <h2 id="sprintf">sprintf<a href="#sprintf"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">str_t</span> <span class="hl_f">sprintf</span>(<span class="hl_t">str_t</span> <span class="hl_v">fmt</span>, <span class="hl_o">...</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Returns a zero terminated UTF-8 string created using format and arguments.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>fmt </td><td><a href="#format_string" onclick="c('format_string')">format string</a> </td></tr>
- <tr><td>... </td><td>optional arguments </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Constructed string.</dd></dl>
- <hr>
- <h2 id="strlen">strlen<a href="#strlen"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">strlen</span>(<span class="hl_t">str_t</span> <span class="hl_v">src</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Return the number of bytes in a string (without the terminating zero).</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>src </td><td>string address, 0x00000 to 0xBFFFF </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The number of bytes in the string.</dd>
- <dt>See Also</dt><dd>
- <a href="#mblen" onclick="c('mblen')">mblen</a></dd></dl>
- <hr>
- <h2 id="mblen">mblen<a href="#mblen"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">mblen</span>(<span class="hl_t">str_t</span> <span class="hl_v">src</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Return the number of UTF-8 multi-byte characters in a string (without the terminating zero).</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>src </td><td>string address, 0x00000 to 0xBFFFF </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- The number of characters in the string.</dd>
- <dt>See Also</dt><dd>
- <a href="#strlen" onclick="c('strlen')">strlen</a></dd></dl>
- <hr>
- <h2 id="malloc">malloc<a href="#malloc"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">addr_t</span> <span class="hl_f">malloc</span>(<span class="hl_t">uint32_t</span> <span class="hl_v">size</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Allocates user memory dynamically.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>size </td><td>number of bytes to allocate </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Address of the new allocated buffer or NULL on error.</dd>
- <dt>See Also</dt><dd>
- <a href="#realloc" onclick="c('realloc')">realloc</a>, <a href="#free" onclick="c('free')">free</a></dd></dl>
- <hr>
- <h2 id="realloc">realloc<a href="#realloc"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">addr_t</span> <span class="hl_f">realloc</span>(<span class="hl_t">addr_t</span> <span class="hl_v">addr</span>, <span class="hl_t">uint32_t</span> <span class="hl_v">size</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Resize a previously allocated buffer.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>addr </td><td>address of the allocated buffer </td></tr>
- <tr><td>size </td><td>number of bytes to resize to </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- Address of the new allocated buffer or NULL on error.</dd>
- <dt>See Also</dt><dd>
- <a href="#malloc" onclick="c('malloc')">malloc</a>, <a href="#free" onclick="c('free')">free</a></dd></dl>
- <hr>
- <h2 id="free">free<a href="#free"></a></h2>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_t">int</span> <span class="hl_f">free</span>(<span class="hl_t">addr_t</span> <span class="hl_v">addr</span>)</code></div>
- <dl>
- <dt>Description</dt><dd>
- Frees dynamically allocated user memory.</dd>
- <dt>Parameters</dt><dd>
- <div class="table"><table><tr><th>Argument </th><th>Description </th></tr>
- <tr><td>addr </td><td>address of the allocated buffer </td></tr></table></div></dd>
- <dt>Return Value</dt><dd>
- 1 on success, 0 on error.</dd>
- <dt>See Also</dt><dd>
- <a href="#malloc" onclick="c('malloc')">malloc</a>, <a href="#realloc" onclick="c('realloc')">realloc</a></dd></dl><br style="clear:both;"><label class="btn prev" accesskey="p" for="_mathematics" title="Mathematics">Previous</label><label class="btn next" accesskey="n" for="_bouncing_ball" title="Bouncing Ball">Next</label></div>
- <div class="page" rel="bouncing_ball"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Tutorials »</li><li> Bouncing Ball</li></ul><hr></div>
- <h1 id="bouncing_ball">Bouncing Ball<a href="#bouncing_ball"></a></h1>
- <p>In this tutorial we'll create a program that bounces a ball on the screen.</p>
- <h2 id="displaying_the_ball">Displaying the Ball<a href="#displaying_the_ball"></a></h2>
- <p>First things first, start <samp>meg4</samp> and select the <a href="#sprite_editor" onclick="c('sprite_editor')">Sprite Editor</a> (press <kbd>F3</kbd>). Select the first sprite on the right,
- and edit it on the left.</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="tut_ball1.png" src="data:image/png;base64,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"></div><span class="fig">Drawing the ball</span>
- <p>Now go to the <a href="#code_editor" onclick="c('code_editor')">Code Editor</a> (press <kbd>F2</kbd>). At first, our program will be an empty skeleton.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- }</code></div>
- <p>Let's place this newly drawn sprite on screen! You can do this by calling the <a href="#spr" onclick="c('spr')">spr</a> function. Go to the body of the <samp>setup()</samp>
- function, start typing, and at the bottom in the statusbar you'll see the required parameters.</p>
- <div class="imgc"><img class="imgc" width="640" height="60" alt="tut_ball2.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAA8CAMAAADBhPs2AAAAhFBMVEUhISH/AwNERERISEgfZmZdXmZmZmZrbnJvcXd1eX4qkpKYfHyKj4+RlZedoqakpaempqalqaijqqyqqqqusLGzt7q8vsC4wMe4wsu/wsXAwsTEyc7HztPJztHMz9LJ0dTJ1N3L1NnK1d3R1NbL1t7Q1djV2t7W3+Xd4+ji5efp7O/o7fALX+xuAAADZ0lEQVR42u2bh3qbMBRGRUaT1NnO3nu+//u1LlbRuBrB2Kzzf45REFytI35QiPoV0No/6W1YGxv6u0yZOVp+Xp5SZ9WLmnN+XmS/ZYvWaHxSAAiAHQXQBDE9UHLX670aRD1o+jc7xx3MUE5ern2Un2tH0DCZOXKNw8CBHwAC4JAsOAWgDZE81JJRu7athzhs7/JQ2xHyc/1auXXwc+Q49lQCJwAEwKEAqG049xY+ZcEygK4drwLAMHruDcVPLBj8ABAAx2TB/pDHBigMYMyCTUjrPoTELFiul1tyeBkphjgCQADsuwWnl2EWlwxe1wRgAAiAAIgQAKJxAbheU9P/WkcoKABEbQM4jQgAEQAuW0UBB10EsFyKrhN0MgFABIAA2GcA19ZSFvz7r8rv2XaWKn9m+AEgAkAA7DeAcQs2sdPwlWkARAAIgUOw4NRDiG/BAIgAEACHYsGxhxAXOzPVs2UYAARAAATAmn+Kq7CzBYAIAAGwDwAu53WsPgkAARACAXDEr+QXBe/G8z8hAAiAAQAnEwBEAAiAYwJQv4xQbgeLYImeBhAQAbAVAufgwV/HLHgMABoEwh8AtoNgyR74tQLgFBXF/INWLzVy9NBKNXoAT04uLs7Pr66OjkoADRC5GK1gwgOgDCD+C4Cr0ePjw8PLy9PT8fHurtwh827pQL8oBYAACIDdA1CpUNfkd5maKxRD51RHVEfnpiS9vd3e7u19fLy+bm3FAKzXpq5jqNQyzsmJOj8GAAGw9wCGi1ONxJIBrPbmpkI6PLy///5+ft7cLDvELcGMIE2Sck+Vo0t16xBrVX5Ec2942pul5pURvqyYWztuOLLbfvnCAIAAOAwAY9a5OMpuQ6rm5aVinTzTzc37+/X1wYG2BLODQkhJw2TWUr5pyAMwFdHfHzs/t4y8KD5YqbZJvWjkAyAADgBAqRGqMStftgVfXp6ebm+bywLueTEAfZuRa5o/cVMRUwbsm3b8mJwj3MkdL9+02/BtAwAC4DAAlCrT7OO9fRP7s2WYNIB3d19fOzv2wqhfSughxIXETcWHOW3qscknI27vjx8T7iO5J+UpIE9Jvw5C6wAQAAcAYL91dvb5ub9vA9j88qw0SGkDbGoxuZnF4zoXjkRsAARAAOySeAmr9f7mjWjU6hvRfwDCu0ezsnAIOgAAAABJRU5ErkJggg=="></div>
- <p>We can see that the first two arguments are <samp>x, y</samp>, the screen coordinate where we want to place the sprite (if it's not obvious
- from the name what a parameter does, just press <kbd>F1</kbd> and a detailed help will show up. Pressing <kbd>Esc</kbd> there
- will bring you back to the code editor). The screen is 320 pixels wide and 200 pixels tall, so in order to place at the centre,
- let's use <samp>160, 100</samp>. Next argument is the <samp>sprite</samp>. We've drawn our ball at the 0th sprite, so use <samp>0</samp>. After comes <samp>sw</samp>
- (sprite width) and <samp>sh</samp> (sprite height), which tells how many sprites we want to display. Our ball only occupies 1 sprite, so
- simply write <samp>1, 1</samp>. Then comes <samp>scale</samp>, but we don't want to magnify our ball, so just use <samp>1</samp> here too. Finally, the last
- parameter is <samp>type</samp>, which can be used to display the sprite transformed. We don't want any transformation, so just use <samp>0</samp>.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_h"><span class="hl_f">spr</span>(<span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- }</code></div>
- <p>Now try running this code by pressing <kbd>Ctrl</kbd>+<kbd>R</kbd>, and let's see what happens. If you have made some mistake
- by typing the code, an error message will show up in the status bar, and the cursor will be positioned to the faulting part.</p>
- <p>If everything went well, then the editor screen will disappear, and black screen with the ball in the middle will appear instead.
- Our ball isn't exactly at the centre, because we forgot to subtract the half of the sprite's size from the coordinates (we are
- displaying only one sprite here (sw = 1 and sh = 1), so 8 x 8 pixels in total, half of that is 4). Press <kbd>F2</kbd> to go back
- to the editor, and let's fix this.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_f">spr</span>(<span class="hl_h"><span class="hl_n">156</span>, <span class="hl_n">96</span></span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- }</code></div>
- <p>Let's run this again! We have the ball at proper position, but we can still see it at the wrong position! That's because we
- haven't cleared the screen. We can do that by calling <a href="#cls" onclick="c('cls')">cls</a>, so let's add that before drawing the sprite.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_h"><span class="hl_f">cls</span>(<span class="hl_n">0</span>);</span>
- <span class="hl_f">spr</span>(<span class="hl_n">156</span>, <span class="hl_n">96</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- }</code></div>
- <p>Now everything is fine, our ball shown at exactly the centre of the screen.</p>
- <h2 id="moving_the_ball">Moving the Ball<a href="#moving_the_ball"></a></h2>
- <p>There's a problem in our code. We display the ball in <samp>setup()</samp> which only runs once when our program starts. To move the ball,
- we have to display it over and over again, at different positions. To achieve this, let's move the code that displays our ball
- into the <samp>loop()</samp> function. This runs every time when the screen is redrawn.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_h hl_b"> <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_n">156</span>, <span class="hl_n">96</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);</span>}</code></div>
- <p>If we press <kbd>Ctrl</kbd>+<kbd>R</kbd> now, then the ball will be displayed exactly as before. What we can't see is that
- the ball is now drawn not only once, but over and over again.</p>
- <p>Let's move that ball! It is displayed at the same position, because we have used constant coordinates. Let's fix this by
- introducing two variables, which will store the ball's current position on screen.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_h"><span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>;</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_n">156</span>, <span class="hl_n">96</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- }</code></div>
- <p>Replace the coordinates in drawing call to these variables, and let's assign them values on program start.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_h hl_b"> <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;</span>}
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_h"><span class="hl_v">x</span>, <span class="hl_v">y</span></span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- }</code></div>
- <p>If we run our program now, there'll be still no change. However using variables we can now change the ball's position in
- run-time, let's do that.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_h hl_b"> <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_v">x</span> <span class="hl_o">+</span> <span class="hl_n">1</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_v">y</span> <span class="hl_o">+</span> <span class="hl_n">1</span>;</span>}</code></div>
- <p>Run this program, and you'll see the ball moving!</p>
- <h2 id="bouncing_the_ball">Bouncing the Ball<a href="#bouncing_the_ball"></a></h2>
- <p>We are not ready yet, because our ball disappears pretty quickly from the screen. This is because we constantly increasing its
- coordinates, and we don't change its direction when it reaches the edge of the screen.</p>
- <p>Just like as we did with the coordinates at first, we are using a constant and now we want to change the direction in our program
- dynamically. The solution is the same, we replace the constants with two new variables.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span><span class="hl_h">, <span class="hl_v">dx</span>, <span class="hl_v">dy</span></span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;
- <span class="hl_h"><span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_v">x</span> <span class="hl_o">+</span> <span class="hl_h"><span class="hl_v">dx</span></span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_v">y</span> <span class="hl_o">+</span> <span class="hl_h"><span class="hl_v">dy</span></span>;
- }</code></div>
- <p>Great! As mentioned before, the screen is 320 pixels wide and 200 pixels tall. This means that the valid values for the <samp>x</samp>
- coordinate are between 0 and 319, and for <samp>y</samp> between 0 and 199. But we don't want our ball to disappear from the screen, so
- we have to subtract the sprite's size (8 x 8 pixels) from these. This gives 0 to 311 for <samp>x</samp>, and 0 to 191 for <samp>y</samp>. If our
- ball's coordinate reaches one of these values, then we must change it's direction so that it won't leave the screen.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_v">x</span> <span class="hl_o">+</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_v">y</span> <span class="hl_o">+</span> <span class="hl_v">dy</span>;
- <span class="hl_h hl_b"> <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">311</span>) <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dx</span>;
- <span class="hl_k">if</span>(<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">191</span>) <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dy</span>;</span>}</code></div>
- <p>Run this program by pressing <kbd>Ctrl</kbd>+<kbd>R</kbd>. Congratulations, you have a moving ball that bounces off the screen
- edges!</p>
- <h2 id="adding_a_bat">Adding a Bat<a href="#adding_a_bat"></a></h2>
- <p>A game that we can't play with isn't very interesing. So we'll add a bat that the player can control.</p>
- <p>Go to the <a href="#sprite_editor" onclick="c('sprite_editor')">Sprite Editor</a> (press <kbd>F3</kbd>) and let's draw the bat. This time we'll make it three sprites wide. You can draw
- these one by one, or you can select multiple sprites on the right and edit them together on the left.</p>
- <div class="imgc"><img class="imgc" width="640" height="105" alt="tut_ball3.png" src="data:image/png;base64,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"></div><span class="fig">Drawing the bat</span>
- <p>Just like with the ball, we'll use <a href="#spr" onclick="c('spr')">spr</a> to display it on screen. But we also know that we'll need a variable to store its position,
- so let's add that too at once.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span><span class="hl_h">, <span class="hl_v">px</span></span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_h"><span class="hl_f">spr</span>(<span class="hl_v">px</span>, <span class="hl_n">191</span>, <span class="hl_n">1</span>, <span class="hl_n">3</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_v">x</span> <span class="hl_o">+</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_v">y</span> <span class="hl_o">+</span> <span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">311</span>) <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dx</span>;
- <span class="hl_k">if</span>(<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">191</span>) <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dy</span>;
- }</code></div>
- <p>So the <samp>x</samp> argument becomes <samp>px</samp>, and we don't want to move the bat vertically, just horizontally, so the <samp>y</samp> argument is a
- constant <samp>191</samp>. Because we draw the bat at the 1st sprite, the <samp>sprite</samp> parameter is <samp>1</samp>. And because it is three sprites wide,
- <samp>sw</samp> is <samp>3</samp>, but it is still just one sprite tall, so <samp>sh</samp> is <samp>1</samp>.</p>
- <p>So far so good, but how will the player move this bat with the mouse? We'll set the mouse coordinate to the <samp>px</samp> variable for that.
- If you go the memory map, then under <a href="#pointer" onclick="c('pointer')">pointer</a> you can see that the mouse's X coordinate is stored on 2 bytes at address <samp>00016</samp>.
- To get this value, we use the <a href="#inw" onclick="c('inw')">inw</a> function (word, because we need 2 bytes). But we also must not allow moving the bat off screen,
- so we clamp if the coordinate is bigger than the screen size minus the bat's size (which is three sprites, so 24 pixels). One
- more thing, the offsets in the memory map are given in hexadecimal, so we need the <samp>0x</samp> prefix to tell the compiler that this is a
- hexadecimal number.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span>, <span class="hl_v">px</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_h hl_b"> <span class="hl_v">px</span> <span class="hl_o">=</span> <span class="hl_f">inw</span>(<span class="hl_n">0x16</span>);
- <span class="hl_k">if</span>(<span class="hl_v">px</span> <span class="hl_o">></span> <span class="hl_n">296</span>) <span class="hl_v">px</span> <span class="hl_o">=</span> <span class="hl_n">296</span>;</span> <span class="hl_f">spr</span>(<span class="hl_v">px</span>, <span class="hl_n">191</span>, <span class="hl_n">1</span>, <span class="hl_n">3</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_v">x</span> <span class="hl_o">+</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_v">y</span> <span class="hl_o">+</span> <span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">311</span>) <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dx</span>;
- <span class="hl_k">if</span>(<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">191</span>) <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dy</span>;
- }</code></div>
- <p>Let's run this program! We can see the bat and we can also move it around with the mouse. But there's a problem. The ball doesn't
- care where the bat is. Let's fix this by modifying the screen bottom check to a bat position check so that it would bounce on the
- bat only. Don't forget that the ball is 8 pixels tall, so we must check at a smaller coordinate.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span>, <span class="hl_v">px</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">px</span> <span class="hl_o">=</span> <span class="hl_f">inw</span>(<span class="hl_n">0x16</span>);
- <span class="hl_k">if</span>(<span class="hl_v">px</span> <span class="hl_o">></span> <span class="hl_n">296</span>) <span class="hl_v">px</span> <span class="hl_o">=</span> <span class="hl_n">296</span>;
- <span class="hl_f">spr</span>(<span class="hl_v">px</span>, <span class="hl_n">191</span>, <span class="hl_n">1</span>, <span class="hl_n">3</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_v">x</span> <span class="hl_o">+</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_v">y</span> <span class="hl_o">+</span> <span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">311</span>) <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dx</span>;
- <span class="hl_k">if</span>(<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_h">(<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">183</span> <span class="hl_o">&&</span> <span class="hl_v">x</span> <span class="hl_o">>=</span> <span class="hl_v">px</span> <span class="hl_o">&&</span> <span class="hl_v">x</span> <span class="hl_o"><=</span> <span class="hl_v">px</span> <span class="hl_o">+</span> <span class="hl_n">24</span>)</span>) <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dy</span>;
- }</code></div>
- <p>This means the <samp>y</samp> coordinate is zero, or it is <samp>183</samp> and at the same time the <samp>x</samp> coordinate is between <samp>px</samp> and <samp>px + 24</samp> (where
- <samp>px</samp> is the bat's position).</p>
- <h2 id="game_over">Game Over<a href="#game_over"></a></h2>
- <p>Now that we have changed the bottom check, we have to add a new check to see if the ball has left the screen. Of course this would
- mean game over.</p>
- <p>First, remember that <samp>loop()</samp> runs constantly, so to stop moving the ball any further, we set the <samp>dx</samp> and <samp>dy</samp> variables to zero.
- Second, we want to display a game over message.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span>, <span class="hl_v">px</span>;
- <span class="hl_h hl_b"><span class="hl_t">str_t</span> <span class="hl_v">msg</span> <span class="hl_o">=</span> <span class="hl_s">"GAME OVER!"</span>;</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">px</span> <span class="hl_o">=</span> <span class="hl_f">inw</span>(<span class="hl_n">0x16</span>);
- <span class="hl_k">if</span>(<span class="hl_v">px</span> <span class="hl_o">></span> <span class="hl_n">296</span>) <span class="hl_v">px</span> <span class="hl_o">=</span> <span class="hl_n">296</span>;
- <span class="hl_f">spr</span>(<span class="hl_v">px</span>, <span class="hl_n">191</span>, <span class="hl_n">1</span>, <span class="hl_n">3</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_v">x</span> <span class="hl_o">+</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_v">y</span> <span class="hl_o">+</span> <span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">311</span>) <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dx</span>;
- <span class="hl_k">if</span>(<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> (<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">183</span> <span class="hl_o">&&</span> <span class="hl_v">x</span> <span class="hl_o">>=</span> <span class="hl_v">px</span> <span class="hl_o">&&</span> <span class="hl_v">x</span> <span class="hl_o"><=</span> <span class="hl_v">px</span> <span class="hl_o">+</span> <span class="hl_n">24</span>)) <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dy</span>;
- <span class="hl_h hl_b"> <span class="hl_k">if</span>(<span class="hl_v">y</span> <span class="hl_o">></span> <span class="hl_n">199</span>) {
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_f">text</span>(<span class="hl_n">184</span>, (<span class="hl_n">320</span> <span class="hl_o">-</span> <span class="hl_f">width</span>(<span class="hl_n">2</span>, <span class="hl_v">msg</span>)) <span class="hl_o">/</span> <span class="hl_n">2</span>, <span class="hl_n">90</span>, <span class="hl_n">2</span>, <span class="hl_n">112</span>, <span class="hl_n">128</span>, <span class="hl_v">msg</span>);
- }</span>}</code></div>
- <p>We can display text on screen using the <a href="#text" onclick="c('text')">text</a> function. At the bottom, the quick help shows what arguments it has. The first one
- is <samp>palidx</samp>, which is a palette index, the color of the text. Press <kbd>F3</kbd> and click on the desired color. At the bottom,
- we'll see the index in hexadecimal and in parenthesis in decimal as well.</p>
- <div class="imgc"><img class="imgc" width="640" height="72" alt="tut_ball4.png" src="data:image/png;base64,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"></div>
- <p>I have choosen a red color, by the index <samp>B8</samp> or <samp>184</samp> in decimal. Let's go back to the code editor by pressing <kbd>F2</kbd>, and
- enter this number. The next two arguments are <samp>x</samp> and <samp>y</samp>, the position on screen. We could have count the number of pixels in the
- text, but we are lazy, so we use the <a href="#width" onclick="c('width')">width</a> function for that. Subtracting this from the width of the screen and dividing by two
- will place the text exactly at the middle. Because we are too lazy to type the text twice, we've also used a string variable <samp>msg</samp>
- to store the message. Therefore we use <samp>msg</samp> once when we calculate its size, and also when we pass it to the display function to
- say what to print. After the coordinates comes the <samp>type</samp>, which is the font's type, or more specifically its size. We want big
- letters, so we've used <samp>2</samp>, double size. After this comes the shadow, <samp>shidx</samp>, which is also a color index. I've choosen a darker
- red here. For a shadow, it is important how transparent it is, we can specify this in the <samp>sha</samp> argument. That is an alpha
- channel value from 0 (fully transparent) to 255 (fully opaque). By using <samp>128</samp>, which is half way between these values, I've told
- to use half transparent. And finally the <samp>str</samp> argument specifies the text to be displayed, which we store in the <samp>msg</samp> variable.</p>
- <h2 id="restart">Restart<a href="#restart"></a></h2>
- <p>And last, if the player clicks, we want to restart the game.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span>, <span class="hl_v">px</span>;
- <span class="hl_t">str_t</span> <span class="hl_v">msg</span> <span class="hl_o">=</span> <span class="hl_s">"GAME OVER!"</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">156</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">96</span>;
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_n">0</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">px</span> <span class="hl_o">=</span> <span class="hl_f">inw</span>(<span class="hl_n">0x16</span>);
- <span class="hl_k">if</span>(<span class="hl_v">px</span> <span class="hl_o">></span> <span class="hl_n">296</span>) <span class="hl_v">px</span> <span class="hl_o">=</span> <span class="hl_n">296</span>;
- <span class="hl_f">spr</span>(<span class="hl_v">px</span>, <span class="hl_n">191</span>, <span class="hl_n">1</span>, <span class="hl_n">3</span>, <span class="hl_n">1</span>, <span class="hl_n">1</span>, <span class="hl_n">0</span>);
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_v">x</span> <span class="hl_o">+</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_v">y</span> <span class="hl_o">+</span> <span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">==</span> <span class="hl_n">311</span>) <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dx</span>;
- <span class="hl_k">if</span>(<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">0</span> <span class="hl_o">||</span> (<span class="hl_v">y</span> <span class="hl_o">==</span> <span class="hl_n">183</span> <span class="hl_o">&&</span> <span class="hl_v">x</span> <span class="hl_o">>=</span> <span class="hl_v">px</span> <span class="hl_o">&&</span> <span class="hl_v">x</span> <span class="hl_o"><=</span> <span class="hl_v">px</span> <span class="hl_o">+</span> <span class="hl_n">24</span>)) <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_o">-</span><span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">y</span> <span class="hl_o">></span> <span class="hl_n">199</span>) {
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_f">text</span>(<span class="hl_n">184</span>, (<span class="hl_n">320</span> <span class="hl_o">-</span> <span class="hl_f">width</span>(<span class="hl_n">2</span>, <span class="hl_v">msg</span>)) <span class="hl_o">/</span> <span class="hl_n">2</span>, <span class="hl_n">90</span>, <span class="hl_n">2</span>, <span class="hl_n">112</span>, <span class="hl_n">128</span>, <span class="hl_v">msg</span>);
- <span class="hl_h"><span class="hl_k">if</span>(<span class="hl_f">getclk</span>(<span class="hl_v">BTN_L</span>)) <span class="hl_f">setup</span>();</span>
- }
- }</code></div>
- <p>To query if the user has clicked, we use the <a href="#getclk" onclick="c('getclk')">getclk</a> function, with a <samp>BTN_L</samp> argument, meaning is the left button clicked. We've
- used the <samp>setup()</samp> function to set the default values for our little bouncing ball game. This is very convenient, because calling
- <samp>setup()</samp> now will therefore simply reset our game.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_memory" title="Memory">Previous</label><label class="btn next" accesskey="n" for="_walking" title="Walking">Next</label></div>
- <div class="page" rel="walking"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Tutorials »</li><li> Walking</li></ul><hr></div>
- <h1 id="walking">Walking<a href="#walking"></a></h1>
- <p>In this tutorial we'll create a walking character using sprites. This is the basis of many adventure and rouge-like games.</p>
- <h2 id="get_the_spritesheet">Get the Spritesheet<a href="#get_the_spritesheet"></a></h2>
- <p>We could draw the sprites ourselves, but for simplicity I've downloaded a public domain sheet from the internet. This contains
- three animation phases in every line, and has one line per all 4 directions. There are lots of spritesheets on the net like this,
- because this is the popular RPG Maker's sprite layout.</p>
- <div class="warn"><p><span>Warning</span></p><p> Always check the licensing terms when you use assets downloaded from the internet. Do not use the asset if you're
- unsure about its terms of use.</p></div>
- <p>Start <samp>meg4</samp> and drag'n'drop this downloaded PNG image on the window to import.</p>
- <div class="imgc"><img class="imgc" width="640" height="182" alt="tut_walk1.png" src="data:image/png;base64,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"></div><span class="fig">The imported sprite sheet</span>
- <p>As you can see, one character sprite is made up of 4 x 4 sprites. Let's display that! Press <kbd>F2</kbd> to go to the <a href="#code_editor" onclick="c('code_editor')">Code Editor</a>.</p>
- <h2 id="display_character">Display Character<a href="#display_character"></a></h2>
- <p>We start with the usual skeleton. We know from the previous tutorial that we'll have to clear the screen and display the sprites
- using <a href="#spr" onclick="c('spr')">spr</a> in the <samp>loop()</samp> function, because animation requires constant redrawing.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_h hl_b"> <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_n">144</span>, <span class="hl_n">84</span>, <span class="hl_n">0</span>, <span class="hl_n">4</span>, <span class="hl_n">4</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>);</span>}</code></div>
- <p>The centre of the screen is at 160, 100 but our character is 4 x 4 sprites in size (32 x 32 pixels), so we have to subtract the
- half of that. Then comes 0 for <samp>sprite</samp>, meaning the first sprite, followed by 4, 4 because we want to display that many sprites.
- The last two parameters are 0, 0 because we don't want to scale nor transform, we want the sprites to be displayed exactly as they
- appear in the <a href="#sprite_editor" onclick="c('sprite_editor')">Sprite Editor</a>.</p>
- <h2 id="changing_directions">Changing Directions<a href="#changing_directions"></a></h2>
- <p>Next, let's allow changing the direction in which the character is pointing to. For that, we'll use <a href="#getpad" onclick="c('getpad')">getpad</a>, which returns the
- gamepad's state. The primary gamepad controller is mapped to the keyboard, so pressing the cursor arrow keys will work too. To
- handle the direction, we'll need a variable to store the current direction, and this should select the sprite we draw.</p>
- <div class="imgc"><img class="imgc" width="480" height="192" alt="tut_walk2.png" src="data:image/png;base64,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"></div><span class="fig">Get the sprite id</span>
- <p>You can press <kbd>F3</kbd> and click on the top left sprite of the character frame to get the sprite id for that
- direction. We set these ids in the <samp>dir</samp> variable, and then we'll use this variable in place of the <samp>sprite</samp> parameter.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_h"><span class="hl_t">int</span> <span class="hl_v">dir</span>;</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Get user input */</span>
- <span class="hl_h hl_b"> <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_D</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_L</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">128</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_R</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">256</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_U</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">384</span>;
- }</span> <span class="hl_c">/* Display the character */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_n">144</span>, <span class="hl_n">84</span>, <span class="hl_h"><span class="hl_v">dir</span></span>, <span class="hl_n">4</span>, <span class="hl_n">4</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>);
- }</code></div>
- <p>Try it out! You'll see that by pressing the arrows our character will change directions.</p>
- <h2 id="adding_animation">Adding Animation<a href="#adding_animation"></a></h2>
- <p>Our character doesn't walk yet. Let's fix it! We want our character to walk when a button (or arrow key) is pressed, and stop
- when that's released. For that, we'll need a variable to keep track if the button is currently pressed.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">dir</span><span class="hl_h">, <span class="hl_v">pressed</span></span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Get user input */</span>
- <span class="hl_h"><span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_D</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_h"><span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;</span>
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_L</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">128</span>; <span class="hl_h"><span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;</span>
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_R</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">256</span>; <span class="hl_h"><span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;</span>
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_U</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">384</span>; <span class="hl_h"><span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;</span>
- }
- <span class="hl_c">/* Display the character */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_n">144</span>, <span class="hl_n">84</span>, <span class="hl_v">dir</span>, <span class="hl_n">4</span>, <span class="hl_n">4</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>);
- }</code></div>
- <p>First, we clear the <samp>pressed</samp> variable. Then in the if blocks we set it to 1. This way when we press a button, the variable
- becomes 1, but as soon as we release the button, it will be cleared to 0.</p>
- <p>We'll also need a variable to tell which animation frame to display. We could have used some funky expression to get the sprite id,
- but it is a lot easier to use an array instead storing which sprite to pick in the row. So row tells the direction, and columns
- tells the animation frame. Adding this two together gives us the final frame.</p>
- <p>One more thing, we have three animation sprites, but we'll have to display four frames, the sprite in the middle needs to be
- displayed twice to get a proper back and forth animation for moving the legs. So in a given row we take the frame from the middle,
- the last, the middle again and then the first.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">dir</span>, <span class="hl_v">pressed</span><span class="hl_h">, <span class="hl_v">frame</span></span>;
- <span class="hl_h"><span class="hl_t">int</span> <span class="hl_v">anim</span>[<span class="hl_n">4</span>] <span class="hl_o">=</span> { <span class="hl_n">4</span>, <span class="hl_n">8</span>, <span class="hl_n">4</span>, <span class="hl_n">0</span> };</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Get user input */</span>
- <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_D</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_L</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">128</span>; <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_R</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">256</span>; <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_U</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">384</span>; <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- }
- <span class="hl_c">/* Display the character */</span>
- <span class="hl_h"><span class="hl_v">frame</span> <span class="hl_o">=</span> <span class="hl_v">pressed</span> <span class="hl_o">?</span> (<span class="hl_v">frame</span> <span class="hl_o">+</span> <span class="hl_n">1</span>) <span class="hl_o">&</span> <span class="hl_n">3</span> : <span class="hl_n">0</span>;</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_n">144</span>, <span class="hl_n">84</span>, <span class="hl_v">dir</span> <span class="hl_h"><span class="hl_o">+</span> <span class="hl_v">anim</span>[<span class="hl_v">frame</span>]</span>, <span class="hl_n">4</span>, <span class="hl_n">4</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>);
- }</code></div>
- <p>Next, we calculate which animation frame to display, but only if a button is pressed. If not, then we use a constant 0, meaning
- the first frame. Otherwise we increase <samp>frame</samp> to get the next frame, and we use bitwise AND to avoid overflow. When <samp>frame</samp>
- becomes 4 (which is 0b100 in binary) and we AND that with 3 (0b011), then the result will be 0, so the frame counter wraps around.
- We could have used "modulo number of frames" as well, but this is faster. Finally, we get the sprite id offset for this animation
- frame (stored in the <samp>anim</samp> array) and we add that to the <samp>dir</samp> variable to get which sprite to display.</p>
- <p>Try it out, press <kbd>Ctrl</kbd>+<kbd>R</kbd>! It works fine, except our character is animated way too fast. That's because we
- increase the <samp>frame</samp> counter on every refresh, so 60 times per second. To fix this, we should get the ticks from the MMIO and
- calculate the frame independently to the refresh rate. However ticks counter is in millisec, so we should divide it. If we would
- divide that by 100, then we'd get 10 frames per second. We'll use shifting to the right 7 bits instead, which is equivalent of
- diving by 128. So first, press <kbd>F1</kbd>, and click on <a href="#misc" onclick="c('misc')">Misc</a>. We can see that the ticks counter is at address 0x4, and it
- is 4 bytes long (so we'll have to use <a href="#ini" onclick="c('ini')">ini</a>). Go back to the code and replace the frame calculation with this.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">dir</span>, <span class="hl_v">pressed</span>, <span class="hl_v">frame</span>;
- <span class="hl_t">int</span> <span class="hl_v">anim</span>[<span class="hl_n">4</span>] <span class="hl_o">=</span> { <span class="hl_n">4</span>, <span class="hl_n">8</span>, <span class="hl_n">4</span>, <span class="hl_n">0</span> };
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Get user input */</span>
- <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_D</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_L</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">128</span>; <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_R</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">256</span>; <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- } <span class="hl_k">else</span>
- <span class="hl_k">if</span>(<span class="hl_f">getpad</span>(<span class="hl_n">0</span>, <span class="hl_v">BTN_U</span>)) {
- <span class="hl_v">dir</span> <span class="hl_o">=</span> <span class="hl_n">384</span>; <span class="hl_v">pressed</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- }
- <span class="hl_c">/* Display the character */</span>
- <span class="hl_v">frame</span> <span class="hl_o">=</span> <span class="hl_v">pressed</span> <span class="hl_o">?</span> (<span class="hl_h"><span class="hl_f">ini</span>(<span class="hl_n">0x4</span>) <span class="hl_o">>></span> <span class="hl_n">7</span></span>) <span class="hl_o">&</span> <span class="hl_n">3</span> : <span class="hl_n">0</span>;
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">spr</span>(<span class="hl_n">144</span>, <span class="hl_n">84</span>, <span class="hl_v">dir</span> <span class="hl_o">+</span> <span class="hl_v">anim</span>[<span class="hl_v">frame</span>], <span class="hl_n">4</span>, <span class="hl_n">4</span>, <span class="hl_n">0</span>, <span class="hl_n">0</span>);
- }</code></div>
- <p>And we're done! We have a nicely walking character animation that we can control in our game. You could also move the character
- on screen by using variables for the x, y arguments, but it is very common in such games to move the map under the character in
- the opposite direction instead.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_bouncing_ball" title="Bouncing Ball">Previous</label><label class="btn next" accesskey="n" for="_cannon" title="Cannon">Next</label></div>
- <div class="page" rel="cannon"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Tutorials »</li><li> Cannon</li></ul><hr></div>
- <h1 id="cannon">Cannon<a href="#cannon"></a></h1>
- <p>In this tutorial we'll create a cannon. This contains all the basics for an Asteroids game.</p>
- <h2 id="display_the_turret">Display the Turret<a href="#display_the_turret"></a></h2>
- <p>We start with the usual skeleton. We know from the previous tutorial that we'll have to clear the screen and we'll use <a href="#line" onclick="c('line')">line</a> to
- draw a very simple turret.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_h hl_b"> <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span> <span class="hl_o">-</span> <span class="hl_n">10</span>);</span>}</code></div>
- <p>The centre of the screen is at 160, 100 and we draw a 10 pixels long turret pointing upwards by subtracting 10 pixels from the
- end Y coordinate. We also gave it a grayish color (23).</p>
- <h2 id="rotating_the_turret">Rotating the Turret<a href="#rotating_the_turret"></a></h2>
- <p>In order to make the player able to rotate this, we'll need a variable to keep track of the current degree where the turret
- should point to.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_h hl_b"><span class="hl_t">int</span> <span class="hl_v">deg</span>;</span>
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_h hl_b"> <span class="hl_c">/* User input */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_LEFT</span>)) <span class="hl_v">deg</span><span class="hl_o">--</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_RIGHT</span>)) <span class="hl_v">deg</span><span class="hl_o">++</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o"><</span> <span class="hl_n">0</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">359</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o">></span> <span class="hl_n">359</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;</span> <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span> <span class="hl_o">-</span> <span class="hl_n">10</span>);
- }</code></div>
- <p>We query if the player has pressed left or right arrow keys, and we change the degree accordingly. We are not ready yet, because
- we must also clip the degree and make it so that when we reach the lower limit we set the highest value, and when we reach the
- higher limit we set the lowest value. This will result in a nicely rotating around the clock turret.</p>
- <p>Now to display the turret rotated at this degree, we'll need to know how much that degree means in pixels on the X and Y axis.
- One might remember from school math class that this is exactly what sinus and cosinus functions do. Of course they return a
- unit value, so if we want our turret to be 10 pixels long, we have to multiply that by 10. It is important that <a href="#sin" onclick="c('sin')">sin</a> and <a href="#cos" onclick="c('cos')">cos</a>
- returns a floating point number (so not <samp>1</samp> but <samp>1.0</samp>).</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">int</span> <span class="hl_v">deg</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_c">/* User input */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_LEFT</span>)) <span class="hl_v">deg</span><span class="hl_o">--</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_RIGHT</span>)) <span class="hl_v">deg</span><span class="hl_o">++</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o"><</span> <span class="hl_n">0</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">359</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o">></span> <span class="hl_n">359</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span><span class="hl_h"> <span class="hl_o">+</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span></span>, <span class="hl_n">100</span><span class="hl_h"> <span class="hl_o">+</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span></span>);
- }</code></div>
- <p>Press <kbd>Ctrl</kbd>+<kbd>R</kbd>, and you'll see that the turret is nicely rotating!</p>
- <h2 id="adding_a_bullet">Adding a Bullet<a href="#adding_a_bullet"></a></h2>
- <p>As we know from <a href="#bouncing_the_ball" onclick="c('bouncing_the_ball')">bouncing the ball</a>, to display a moving object we'll need two variables to store its coordinate and another
- two storing how much it should move. Unlike that ball, which only moved in diagonal, here we want to handle any arbitrary degree,
- so for a smooth movement we need to store sub-pixels, therefore we'll use floating point numbers for these variables (not <samp>int</samp>
- but <samp>float</samp>).</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_h hl_b"><span class="hl_t">float</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span>;</span><span class="hl_t">int</span> <span class="hl_v">deg</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_c">/* User input */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_LEFT</span>)) <span class="hl_v">deg</span><span class="hl_o">--</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_RIGHT</span>)) <span class="hl_v">deg</span><span class="hl_o">++</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o"><</span> <span class="hl_n">0</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">359</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o">></span> <span class="hl_n">359</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_h hl_b"> <span class="hl_c">/* Move the bullet */</span>
- <span class="hl_v">x</span> <span class="hl_o">+=</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">+=</span> <span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">>=</span> <span class="hl_n">320</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o">>=</span> <span class="hl_n">200</span>)
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">0.0</span>;</span> <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_h hl_b"> <span class="hl_f">pset</span>(<span class="hl_n">8</span>, <span class="hl_v">x</span>, <span class="hl_v">y</span>);</span> <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>, <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>);
- }</code></div>
- <p>Just like we did in the first tutorial, in the main <samp>loop()</samp> we add the delta values to the current coordinates. We also check if
- the bullet has reached the edge of the screen, and if so then we reset to stop the bullet's further movement. To display the bullet,
- we just simply set a yellow (8) pixel with <a href="#pset" onclick="c('pset')">pset</a>.</p>
- <h2 id="firing_the_cannon">Firing the Cannon<a href="#firing_the_cannon"></a></h2>
- <p>One last thing left is to make the player able to fire this cannon.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br>33<br>34<br>35<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">float</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span>;
- <span class="hl_t">int</span> <span class="hl_v">deg</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_c">/* User input */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_LEFT</span>)) <span class="hl_v">deg</span><span class="hl_o">--</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_RIGHT</span>)) <span class="hl_v">deg</span><span class="hl_o">++</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o"><</span> <span class="hl_n">0</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">359</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o">></span> <span class="hl_n">359</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_h hl_b"> <span class="hl_c">/* Fire the cannon */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_SPACE</span>)) {
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_v">dx</span> <span class="hl_o">*</span> <span class="hl_n">9</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_v">dy</span> <span class="hl_o">*</span> <span class="hl_n">9</span>;
- }</span> <span class="hl_c">/* Move the bullet */</span>
- <span class="hl_v">x</span> <span class="hl_o">+=</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">+=</span> <span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">>=</span> <span class="hl_n">320</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o">>=</span> <span class="hl_n">200</span>)
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">0.0</span>;
- <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">pset</span>(<span class="hl_n">8</span>, <span class="hl_v">x</span>, <span class="hl_v">y</span>);
- <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>, <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>);
- }</code></div>
- <p>When the player presses the <kbd>Space</kbd>, we set the dx and dy values depending how much pixels the current degree means
- on the X and Y axis. We also set the x and y variables to point at the end of the turret. We multiply the delta values by 9
- for this, because the very next thing we are about to do is adding the delta values to the current coordinates, thus resulting
- in multiplying by 10.</p>
- <p>Try it out! It works, but has a drawback though. If the player holds down the <kbd>Space</kbd>, then nothing happens. This is
- because <a href="#getkey" onclick="c('getkey')">getkey</a> will return constantly true, so we keep setting the x, y, dx, dy variables to the same values, and movement
- can't happen. Let's fix this! We need a variable to keep track if we have already fired the cannon.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br>33<br>34<br>35<br>36<br>37<br>38<br>39<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_t">float</span> <span class="hl_v">x</span>, <span class="hl_v">y</span>, <span class="hl_v">dx</span>, <span class="hl_v">dy</span>;
- <span class="hl_t">int</span> <span class="hl_v">deg</span><span class="hl_h">, <span class="hl_v">fired</span></span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_c">/* User input */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_LEFT</span>)) <span class="hl_v">deg</span><span class="hl_o">--</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_RIGHT</span>)) <span class="hl_v">deg</span><span class="hl_o">++</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o"><</span> <span class="hl_n">0</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">359</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o">></span> <span class="hl_n">359</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_c">/* Fire the cannon */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_SPACE</span>)) {
- <span class="hl_h hl_b"> <span class="hl_k">if</span>(<span class="hl_o">!</span><span class="hl_v">fired</span>) {
- <span class="hl_v">fired</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;</span> <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">x</span> <span class="hl_o">=</span> <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_v">dx</span> <span class="hl_o">*</span> <span class="hl_n">9</span>;
- <span class="hl_v">y</span> <span class="hl_o">=</span> <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_v">dy</span> <span class="hl_o">*</span> <span class="hl_n">9</span>;
- <span class="hl_h hl_b"> }</span> } <span class="hl_h"> <span class="hl_k">else</span>
- <span class="hl_v">fired</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;</span>
- <span class="hl_c">/* Move the bullet */</span>
- <span class="hl_v">x</span> <span class="hl_o">+=</span> <span class="hl_v">dx</span>;
- <span class="hl_v">y</span> <span class="hl_o">+=</span> <span class="hl_v">dy</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span> <span class="hl_o">>=</span> <span class="hl_n">320</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span> <span class="hl_o">>=</span> <span class="hl_n">200</span>)
- <span class="hl_v">dx</span> <span class="hl_o">=</span> <span class="hl_v">dy</span> <span class="hl_o">=</span> <span class="hl_n">0.0</span>;
- <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">pset</span>(<span class="hl_n">8</span>, <span class="hl_v">x</span>, <span class="hl_v">y</span>);
- <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>, <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>);
- }</code></div>
- <p>So when <kbd>Space</kbd> is pressed, we also check if <samp>fired</samp> variable is not set, and if it isn't, then we set it along with the
- other variables. This way we'll only set the other variables once. But we don't want to keep <samp>fired</samp> that way, therefore when
- <kbd>Space</kbd> is not pressed, we clear that flag so that we could fire the cannon again. And that's all about it.</p>
- <div class="hint"><p><span>Hint</span></p><p> We have added a block around the lines which set those variables. No need to type so many spaces to indent all those lines,
- you can select the lines and press <kbd>Ctrl</kbd>+<kbd>.</kbd> to make the editor increase indentation at once.</p></div>
- <h2 id="multiple_bullets">Multiple Bullets<a href="#multiple_bullets"></a></h2>
- <p>Our code still has an issue. If we fire the cannon when a bullet is already fired, then the first bullet disappears. This is
- because we can only handle one bullet at a time, we have only one x, y, dx, dy quadlet. To support more bullets, we need to convert
- these to arrays which can hold multiple values, one quadlet for each bullet.</p>
- <p>At first, just create arrays with one element. When we declare them, we need to tell the compiler the number of elements, but when
- we reference them, we use an index starting from zero, therefore the indeces of an array with N elements goes 0 to N - 1.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br>33<br>34<br>35<br>36<br>37<br>38<br>39<br>40<br>41<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_h hl_b"><span class="hl_p">#define N 1</span></span>
- <span class="hl_t">float</span> <span class="hl_v">x</span><span class="hl_h">[<span class="hl_v">N</span>]</span>, <span class="hl_v">y</span><span class="hl_h">[<span class="hl_v">N</span>]</span>, <span class="hl_v">dx</span><span class="hl_h">[<span class="hl_v">N</span>]</span>, <span class="hl_v">dy</span><span class="hl_h">[<span class="hl_v">N</span>]</span>;
- <span class="hl_t">int</span> <span class="hl_v">deg</span>, <span class="hl_v">fired</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_c">/* User input */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_LEFT</span>)) <span class="hl_v">deg</span><span class="hl_o">--</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_RIGHT</span>)) <span class="hl_v">deg</span><span class="hl_o">++</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o"><</span> <span class="hl_n">0</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">359</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o">></span> <span class="hl_n">359</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_c">/* Fire the cannon */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_SPACE</span>)) {
- <span class="hl_k">if</span>(<span class="hl_o">!</span><span class="hl_v">fired</span>) {
- <span class="hl_v">fired</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- <span class="hl_v">dx</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">=</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">dy</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">=</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">x</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">=</span> <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_v">dx</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">*</span> <span class="hl_n">9</span>;
- <span class="hl_v">y</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">=</span> <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_v">dy</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">*</span> <span class="hl_n">9</span>;
- }
- } <span class="hl_k">else</span>
- <span class="hl_v">fired</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_c">/* Move the bullet */</span>
- <span class="hl_v">x</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">+=</span> <span class="hl_v">dx</span><span class="hl_h">[<span class="hl_n">0</span>]</span>;
- <span class="hl_v">y</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">+=</span> <span class="hl_v">dy</span><span class="hl_h">[<span class="hl_n">0</span>]</span>;
- <span class="hl_k">if</span>(<span class="hl_v">x</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">>=</span> <span class="hl_n">320</span> <span class="hl_o">||</span> <span class="hl_v">y</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">>=</span> <span class="hl_n">200</span>)
- <span class="hl_v">dx</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">=</span> <span class="hl_v">dy</span><span class="hl_h">[<span class="hl_n">0</span>]</span> <span class="hl_o">=</span> <span class="hl_n">0.0</span>;
- <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_f">pset</span>(<span class="hl_n">8</span>, <span class="hl_v">x</span><span class="hl_h">[<span class="hl_n">0</span>]</span>, <span class="hl_v">y</span><span class="hl_h">[<span class="hl_n">0</span>]</span>);
- <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>, <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>);
- }</code></div>
- <p>Try this out! It should work exactly as before.</p>
- <p>Now moving on, we introduce loops, which iterates on all elements. First, let's do this with the movement and the display.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br>33<br>34<br>35<br>36<br>37<br>38<br>39<br>40<br>41<br>42<br>43<br>44<br>45<br>46<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_p">#define N 1</span>
- <span class="hl_t">float</span> <span class="hl_v">x</span>[<span class="hl_v">N</span>], <span class="hl_v">y</span>[<span class="hl_v">N</span>], <span class="hl_v">dx</span>[<span class="hl_v">N</span>], <span class="hl_v">dy</span>[<span class="hl_v">N</span>];
- <span class="hl_t">int</span> <span class="hl_v">deg</span>, <span class="hl_v">fired</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_h hl_b"> <span class="hl_t">int</span> <span class="hl_v">i</span>;</span>
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_c">/* User input */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_LEFT</span>)) <span class="hl_v">deg</span><span class="hl_o">--</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_RIGHT</span>)) <span class="hl_v">deg</span><span class="hl_o">++</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o"><</span> <span class="hl_n">0</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">359</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o">></span> <span class="hl_n">359</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_c">/* Fire the cannon */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_SPACE</span>)) {
- <span class="hl_k">if</span>(<span class="hl_o">!</span><span class="hl_v">fired</span>) {
- <span class="hl_v">fired</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- <span class="hl_v">dx</span>[<span class="hl_n">0</span>] <span class="hl_o">=</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">dy</span>[<span class="hl_n">0</span>] <span class="hl_o">=</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">x</span>[<span class="hl_n">0</span>] <span class="hl_o">=</span> <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_v">dx</span>[<span class="hl_n">0</span>] <span class="hl_o">*</span> <span class="hl_n">9</span>;
- <span class="hl_v">y</span>[<span class="hl_n">0</span>] <span class="hl_o">=</span> <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_v">dy</span>[<span class="hl_n">0</span>] <span class="hl_o">*</span> <span class="hl_n">9</span>;
- }
- } <span class="hl_k">else</span>
- <span class="hl_v">fired</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_c">/* Move the bullets */</span>
- <span class="hl_h hl_b"> <span class="hl_k">for</span>(<span class="hl_v">i</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">i</span> <span class="hl_o"><</span> <span class="hl_v">N</span>; <span class="hl_v">i</span><span class="hl_o">++</span>) {</span> <span class="hl_v">x</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">+=</span> <span class="hl_v">dx</span>[<span class="hl_h"><span class="hl_v">i</span></span>];
- <span class="hl_v">y</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">+=</span> <span class="hl_v">dy</span>[<span class="hl_h"><span class="hl_v">i</span></span>];
- <span class="hl_k">if</span>(<span class="hl_v">x</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">>=</span> <span class="hl_n">320</span> <span class="hl_o">||</span> <span class="hl_v">y</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">>=</span> <span class="hl_n">200</span>)
- <span class="hl_v">dx</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">=</span> <span class="hl_v">dy</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">=</span> <span class="hl_n">0.0</span>;
- <span class="hl_h hl_b"> }</span> <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_h hl_b"> <span class="hl_k">for</span>(<span class="hl_v">i</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">i</span> <span class="hl_o"><</span> <span class="hl_v">N</span>; <span class="hl_v">i</span><span class="hl_o">++</span>)</span> <span class="hl_f">pset</span>(<span class="hl_n">8</span>, <span class="hl_v">x</span>[<span class="hl_h"><span class="hl_v">i</span></span>], <span class="hl_v">y</span>[<span class="hl_h"><span class="hl_v">i</span></span>]);
- <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>, <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>);
- }</code></div>
- <p>As you can see, we didn't change much, we just put a loop around the expressions, and we have replaced the constant <samp>0</samp> index with
- the loop variable <samp>i</samp>. This way on each iteration the loop body moves one bullet. Same way, we use another loop to display one
- bullet in each iteration.</p>
- <p>We also have to make the cannon fire a bullet. This is a bit trickier, as we'll have to find a quadlet of variables which is not
- being used. And once we find one, we need to stop, because we only want to set one bullet's variables.</p>
- <div class="pre"><pre class="lineno">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br>33<br>34<br>35<br>36<br>37<br>38<br>39<br>40<br>41<br>42<br>43<br>44<br>45<br>46<br>47<br>48<br>49<br>50<br></pre><code><span class="hl_c">#!c</span>
- <span class="hl_p">#define N 1</span>
- <span class="hl_t">float</span> <span class="hl_v">x</span>[<span class="hl_v">N</span>], <span class="hl_v">y</span>[<span class="hl_v">N</span>], <span class="hl_v">dx</span>[<span class="hl_v">N</span>], <span class="hl_v">dy</span>[<span class="hl_v">N</span>];
- <span class="hl_t">int</span> <span class="hl_v">deg</span>, <span class="hl_v">fired</span>;
- <span class="hl_t">void</span> <span class="hl_f">setup</span>()
- {
- <span class="hl_c">/* Things to do on startup */</span>
- }
- <span class="hl_t">void</span> <span class="hl_f">loop</span>()
- {
- <span class="hl_t">int</span> <span class="hl_v">i</span>;
- <span class="hl_c">/* Things to run for every frame, at 60 FPS */</span>
- <span class="hl_c">/* User input */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_LEFT</span>)) <span class="hl_v">deg</span><span class="hl_o">--</span>;
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_RIGHT</span>)) <span class="hl_v">deg</span><span class="hl_o">++</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o"><</span> <span class="hl_n">0</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">359</span>;
- <span class="hl_k">if</span>(<span class="hl_v">deg</span> <span class="hl_o">></span> <span class="hl_n">359</span>) <span class="hl_v">deg</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_c">/* Fire the cannon */</span>
- <span class="hl_k">if</span>(<span class="hl_f">getkey</span>(<span class="hl_v">KEY_SPACE</span>)) {
- <span class="hl_k">if</span>(<span class="hl_o">!</span><span class="hl_v">fired</span>) {
- <span class="hl_v">fired</span> <span class="hl_o">=</span> <span class="hl_n">1</span>;
- <span class="hl_h hl_b"> <span class="hl_k">for</span>(<span class="hl_v">i</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">i</span> <span class="hl_o"><</span> <span class="hl_v">N</span>; <span class="hl_v">i</span><span class="hl_o">++</span>)
- <span class="hl_k">if</span>(<span class="hl_v">dx</span>[<span class="hl_v">i</span>] <span class="hl_o">==</span> <span class="hl_n">0.0</span> <span class="hl_o">&&</span> <span class="hl_v">dy</span>[<span class="hl_v">i</span>] <span class="hl_o">==</span> <span class="hl_n">0.0</span>) {</span> <span class="hl_v">dx</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">=</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">dy</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">=</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>);
- <span class="hl_v">x</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">=</span> <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_v">dx</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">*</span> <span class="hl_n">9</span>;
- <span class="hl_v">y</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">=</span> <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_v">dy</span>[<span class="hl_h"><span class="hl_v">i</span></span>] <span class="hl_o">*</span> <span class="hl_n">9</span>;
- <span class="hl_h hl_b"> <span class="hl_k">break</span>;
- }</span> }
- } <span class="hl_k">else</span>
- <span class="hl_v">fired</span> <span class="hl_o">=</span> <span class="hl_n">0</span>;
- <span class="hl_c">/* Move the bullets */</span>
- <span class="hl_k">for</span>(<span class="hl_v">i</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">i</span> <span class="hl_o"><</span> <span class="hl_v">N</span>; <span class="hl_v">i</span><span class="hl_o">++</span>) {
- <span class="hl_v">x</span>[<span class="hl_v">i</span>] <span class="hl_o">+=</span> <span class="hl_v">dx</span>[<span class="hl_v">i</span>];
- <span class="hl_v">y</span>[<span class="hl_v">i</span>] <span class="hl_o">+=</span> <span class="hl_v">dy</span>[<span class="hl_v">i</span>];
- <span class="hl_k">if</span>(<span class="hl_v">x</span>[<span class="hl_v">i</span>] <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">x</span>[<span class="hl_v">i</span>] <span class="hl_o">>=</span> <span class="hl_n">320</span> <span class="hl_o">||</span> <span class="hl_v">y</span>[<span class="hl_v">i</span>] <span class="hl_o"><</span> <span class="hl_n">0</span> <span class="hl_o">||</span> <span class="hl_v">y</span>[<span class="hl_v">i</span>] <span class="hl_o">>=</span> <span class="hl_n">200</span>)
- <span class="hl_v">dx</span>[<span class="hl_v">i</span>] <span class="hl_o">=</span> <span class="hl_v">dy</span>[<span class="hl_v">i</span>] <span class="hl_o">=</span> <span class="hl_n">0.0</span>;
- }
- <span class="hl_c">/* Display */</span>
- <span class="hl_f">cls</span>(<span class="hl_n">0</span>);
- <span class="hl_k">for</span>(<span class="hl_v">i</span> <span class="hl_o">=</span> <span class="hl_n">0</span>; <span class="hl_v">i</span> <span class="hl_o"><</span> <span class="hl_v">N</span>; <span class="hl_v">i</span><span class="hl_o">++</span>)
- <span class="hl_f">pset</span>(<span class="hl_n">8</span>, <span class="hl_v">x</span>[<span class="hl_v">i</span>], <span class="hl_v">y</span>[<span class="hl_v">i</span>]);
- <span class="hl_f">line</span>(<span class="hl_n">23</span>, <span class="hl_n">160</span>, <span class="hl_n">100</span>, <span class="hl_n">160</span> <span class="hl_o">+</span> <span class="hl_f">cos</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>, <span class="hl_n">100</span> <span class="hl_o">+</span> <span class="hl_f">sin</span>(<span class="hl_v">deg</span>)<span class="hl_o">*</span><span class="hl_n">10</span>);
- }</code></div>
- <p>So this loop contains a conditional, which checks if a certain bullet's movement is zero. If so, then we have found an empty bullet
- slot at <samp>i</samp> that we can use. We do the same setup as before on the <samp>i</samp>th quadlet, and then the <samp>break</samp> keyword quits the loop.</p>
- <p>Let's run this! Still no change, works exactly as before. To put into perspective why we have worked so hard with these arrays,
- change only one thing:</p>
- <div class="pre"><pre class="lineno">1<br></pre><code><span class="hl_p">#define N 100</span></code></div>
- <p>And presto!</p>
- <p>By replacing the fixed 160 and 100 coordinates of the cannon with another x, y and dx, dy variables, you'll be able to move it,
- and you'll get an Asteroids spaceship!</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_walking" title="Walking">Previous</label><label class="btn next" accesskey="n" for="_sound_effect" title="Sound Effect">Next</label></div>
- <div class="page" rel="sound_effect"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Tutorials »</li><li> Sound Effect</li></ul><hr></div>
- <h1 id="sound_effect">Sound Effect<a href="#sound_effect"></a></h1>
- <p>In this tutorial we'll prepare and import a sound effect. We'll use Audacity, but other wave editors should work too.</p>
- <h2 id="load_wave">Load Wave<a href="#load_wave"></a></h2>
- <p>First, let's open the desired wave file in Audacity.</p>
- <div class="imgc"><img class="imgc" width="695" height="562" alt="tut_snd1.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArcAAAIyCAMAAADmPhIuAAAC/VBMVEUAAAASAgMFBhgaBAAHCQ4eBAIMALgFDzYzBgEREQ4NEEYSDlABC7kQDl8zChwMGDMiEyUWGiYEG2goGA4bHR9KEiRUEw8tEboCJXxIGEs3FbdHHxEiKTZNEbZYHgMJJ79NHUEnKyxlHQQOMXZCKRwhL08wKHc9KUEvMSMwNDYpLLIMN8FJLXQzOEMAQZo3OjwPPb4uM8hkLVZENH1oJbV8LwkJQ8ZGPDo6P0s9P0JrM0RFQS9jOxsXSZJhOytzNzV2ORowRZduPRQ+SFM2SHGUMTFGSUsLUckuT4g2SqkYU65HQ8ZLT1B+OLZJUVpUUECMRAmbQ0RxR7lUWFskXsUbY74pYqZYXF6iTQxUV7mFVkWRVDJ5WkWLULhcXdtEaLZhZmihWhVjZoaVXyorc8xGcJthZdyQZESHZlg6drqbWbhqbntvcmNvc3VVeoxMfMs3g95zeoFIim+lZ7hHg8h5fX9gh45hiI99gYR/gX6weDqkel26dzBjiaKQgG2VeLqpeICofk+Ch4uFiW6HimNhjsVzisRDlupPmd5jm4SKj5Jam8y+frxrmrqtirnWijySl5yzjpxlp9OZnJhcq/dyqcWcnq2boKLIkL2foZ7KnF2YpLiIqNTYm1BssPCOq6+5nb2oqqeEtbSds4CmrbSEt8KcssWUuKx2vOzIrIh+vdLJqsPLsHW6samytLG3sr6Uvdq8uYuzusN21nO0vMfMt8a9vb3vtWmHyvF+zPzhvHTVv4C+wb3Rvp+WzdLRwYuwx8/BxMHQw8rAyNSwztG+yOjIyMXOx8CT1uzSxsbGys3Myrus0PnqyZmX2//Mz8ur2NzL0NOx3ZzF09XO0c6q2/ja1ofU1bfN1N3T1NDW16LA2PHU1tP21InP2d/K2fTW29/Z3NjS4M/g29r13JPW3fnH4//h4d/U4/6u8P/c5O3F9K7j5unI8f7M8vTz7LXr6+jv7cbs79ni8P7s9Pzl+P758/Lx9fjz9vL9/4H1+v34+vf4/P/6/v////+Q6If4AAAgAElEQVR42u3dDXwU5b0v8AGjsFSLwCh9ExtAetYeXNfqrWsRa8U9lFmpGmVPpY3xDWo5UeMhnxtRa00/isajroTKDSjtnkaOeDDY3JaWSsQ0FUrKIaUmTSK5JAFJ4ja9XWV7sjcon/s88z67M7Ozm32ZSX5/MZndmZ2dnf3uf//PM89MmDgC4bxgsAsQcItAwC0CAbcIuEUg4BaBgFvEhHJb7qZRHi+pjceDYeNHCMuVibfc/fwD4lGdJQer/B5/pTJHb606jysrF56nRlhzygi4hejJ5PVH012f2a6h0VDm9wSqo2N4fp09Xe0L9Ag/LD282V2eyaan3gMmayivFjy0ZfB8Y3NbFaURr9mTwq24nOyWPqBGb0eVVPYMtm8yfR16jwv7+F+eNn7NFt76aDRUpmxRWqH3/ObrS/FmlAcaevqba8by/Ml7OlwyOCj8sPbwyqBnTG4N94At3VZbe0b1crxbox24z5P6Veu68ewiP3f503gVtWUZvnyDN95kfeZvRjiQledP2NM1ldIPaw/3tfl2jcWt4R6ws1v6bPwz1vh9VVEztzV+fxVxSxauJV8qVUluRdPymjRr3RTwlR/XfVy8jN5VWaN5QAV9h9zVVHW/0V4ONpT5muPVAU+ggd6qLfOV7IvH9wQ9AbquujJfkO7UWvrE4sL6z6+/PmGL6TZFAyFprYnhb1BMiS9a3Az5tnql4vOn2NNVZKkS/oel3RffFYhXVqr2gLxHwvFyen9teR1fBgwbPrPsVtxZ8k4Lx41eudqt6v2Wd3uO6wTFbVX54GBZldG3F926ku7+CsGtQZ3gr+W/2aQ1qddaW9I+2BDVf1w9LRR87ZoHNJD79rj9/Jti6Mwd7o7Gwz39tbQy87vbhqv8xHk42tNGZ+4brPZF+a0uD0gLm+Zb7frELSbbVFYhrzXxq0L+qMovVNwMZSdoVso/f+o9LedbK7uPtgx20l0oPbX0ZGTTG/z855HPDpXGzyztAWlnyTstbPTKpaKGulW/39Juz3W7bJ/kNuom5lr9Rq2FBr4A5d8oQ7fRWr+7vFtZk3qtvjbjL7qoZ1+8ORDXPCDq6Y5X13pI66Ta2Jn8TUrTC92s4+6eHveg8qUVCAtb7WsQFzZ3q1mfuMXBcFUwHpfWmhDdNIeFaBZUv2i6GcptzUrp86fe07Jbi7uvXai1xKdW75EoefmDHsqowR81fmZpD0g7S95pYaNXLm6sm7jVvHRpt+etTmhz+0l4jL+9ejxifWvolm9de7rlNanW2u82K9DIU1TVxLWbUbYpHugvr40Hmo2d8btnuK68zC3tMbLDyzzlzdLMymphq8tD4sLmbtXrk7Y4GOTfOHGtSfm2lW/WVFapXzTdDO1teSPp86fc04pbS7uvwUfyHs2m0h5Q7xGSi8P0QcNEofEzi3tA2lmanab/ylV1gualirs9f277aeoway20uy24JZ+1GnlNqrW2mbol32b+du0D4nXl/YF4Q3DQl8JZNFDTEy1RuY03V/rKpR1YI2x1+SbLbqX1SVscrPHx1Z2w1qT6Vqj8qqrUL5puhva2vJH0+VPuacWtpd0nZj75qTV7ZGdJvJyWCXx7wfCZxT0g7SztTtN/5YpbzUsVd3se22W+sPnejLqbrbgtC8lrUq112L3PxG3UUxdIeED8uK+uhs4oT+FsH4XtrlG5Fb7V/UFacTcIW+3fY9mttD5pi4PhPW6hsa73jRn29AhuNS+abobmtryR/POn2tOq+tbC7qNlAl2iWXpq7R7x9dBqc5eP33Zf2NSttLMSdpruK1e1y9QvVdzteXJbRl5liDR7B9tMWguVgbbBatFt2Hc8qfZuq27u7w+RN1Jak3qt5SU90V1R3cfxKaNG2hR5M0p85L3iv+9MnfW4w8MNqjohGh6M1nloX3rzcIi2j+hWB6Xva4Pn11ufuMW098TXL601ect9dd3HG3zV8nZLbjW35ZXyz59yTytuLew+sSuONIzEp5afjO7/eAU9rBP1C7vR6JmlPSDtLOk3WYPRK1e5Vb/f0m7Pj9s9AfLi6gIevYJaPooTrfIFagOC22i5J+mj318d8PjK6F4R16Rea7TS5ys7rvs4Wii4u2U40mbU0C+rsH6rQF2P1vp8FeWK2/5yn6eEHkopD9AnjMer/b6KYWlhg+fXW5+4xUGBsLhWnR7cMp+/rEHZbjntq28rK+WfP9WeVvXfpt59ZcKX8ia//NTSk/H7fxdt6IXdHhK7DJ9Z7gcTd5b0m6yh3+CVq/vBVO+3vNtz5nacRy47wZ0U/Z7oeNjtcDvBIuNDi3ALtwWMkjDcwq3zygSDwwZwi0DkPuAWAbcIRJ7cHkcgnBdMMwLhvGCaR6VoHUUUIFpbVe/AGuMYPW0c6lWYLJbveRY3K5NQuW2GoUJEs/odWNNrFARIzCheVK/CZLF8z7O2WRkF3MLteHHbm0aMr0dkvgcyfyTcZsltb2+6O3+8PGI04z0whkfCbcZuW5ubW2W3vb3p7vzx8ojM8I31kc3qd2AMbqVV2Mxt6s3KUr6F2wK4tVW+DfkYpjiU/ryuMhfjCnYVqE6AW1u4rWYYdnkRw1Qbuq12uSrMgFQnEFMbM5kX8fkaI7FGny+S3rxYF1vW2NUSdLVk6LZrjUS+OgK3Ds63FTJaPbcvMiQaDYFIxAKRZJtm82LBoPi7LL15MVb4FFWwkYzctrCugDhZ7EN96+T6ljGrEyoYIUL6hWQyMcWY2bwuiV3EFUlnXqSMFe/yhTKpb1tcwQqJa5crhHzr4PrW1G0jRVtvlNh4YtXVamKyMR1+ir/qoHRXMJTGvC6WlT4EZRUZ5FvCNia4raigORtux6vbYLHLVW0IhCdGCSjEZGM6/BSbFRVyQq9IYx5bXZ2522pfsWtNTHTbSIqfiKsRbsen22DQtD+BwAoJVYSC7UUL8zLMt43FpFyWqtP6dN0ywQrqlLolTbMA+RVcg/p2XNa3arZ6haQq39ab5Nv65PpWqh0ibJf1efSZfEL2r2bT7r8Vm5fEbSN5hkYmEgtJK4k0kuhCvh0n+VbDVi+x8aUrX9/KxGR/kWR+qn6BMpM+A8N5tEjoYiu6YpEKJph2P5jiNlZcHYswLcSuuvVZDbfjw62WrS6QMpM+A7N5fCcZSXM+NpjGPL5I6AqyDBOMyBuXiVu2mr8pu42QVbIRuHW+22qXqziY+nhZMjFt/63RPHpMrJhhfCHlw2FlXrGqSJBmZuC23tXF1wnVxdK8er6nD/Wt0+tb1eGGFAMBQj7GRXwGdfKm6bykrG5lHl8kdIlFgjjTen2rtMtayKN9mi8UXwD9CU7PtyHxWENFOuMTdPOm8bwISW+hiHquOC8kf13TRbTzhCLBVSYWCUJ3g+V8W+Hz0Zck9IO1kE9lF1OvHP6NwG1B3G4rzmadoDrcYHUASzp5MxYLUEEBdXeX1GcgJ75AReI83dI7veMOFaLbYOGOOzz99E/Gm9uuF266/vqbftiS/iO3sduyWt9WyIcbLAMRe1tfTD1PSuiMuqqU3CrzKkzGmAWDmbglcNcox3lZa8d5U9S3a8iWrpF/WRDy4IMPPr0tPVP1qrD0CFaZ3OJhLT2C3aL7cCv6qFoaN72QtltWfrfXpFnfVpuOq8nV+Ft1vtW61eZb49qjOqPxty0ul+SWtTiuJkW+5Xe6/MuaWzO5WXErb8nbHr3N0nsEwyx/Wy+Vpdb3wvVyvJCWW1aVb99h0sm31QxTtJw1G8eYo/G3qvpWO09b32b/fAdlHGNFVwHdGsvNptt3gvqbpe9WkZuW25abFLc3daXzSEZd3zLp1gm9vWnk24l+fln23BrJzZ7bd9YUMem5ZYrWpO/2h9dfb5ZwU7jt7YXbgpxflrlbfblZc1tdJJWO1t0yDFudrtub1G5vyoVbnF9mq3zLy82ZW4/SwE3HLcMUp+n2ek3kMt+aXRjmReNQr8JksXzPc2ydkFu3xZm69djWbabXDrHnxVsc7Da3dQKbidsiG9YJVvKtybwsrMIUYDY2y1H17U+O5LY/IZN22Ttpt8teULv9YS7r25wWkuZ1qqnbiVXf6qrNbj/Y28vTc1v2zlj7wVoycVu8zWK+zWXDvSBunVcnGKjN+nGH5dbdevJ93IF5R3Wwl4XbvLrN5DivsdocHOdlrR3n9eT/OO8auS3IWhqfALdZrG/TH1djptaZ42pafkjH1byQwbgas8E1E7G+/dUZy04mLPi383Z/OPduzV2d35lVNGNph3w7ehLjGPM8jlGubzPJt9Uu8TIwCUBYp+bbkTu+cM6hZLcfPbxVfc+Hc1f8se8PL/5VvuORBOxwmxe3VscxJiKoKO7qKm7UAcIUym2kotjl8oW6ktd58nBjfX3j4Yj5Zv3tvH8/f2Oy24R7fnXOB9o74NZJbivY4oh4kQObuK1mK+ilxYLsi4nrPLrz3cjJWKRlZ5/pZr087693EIMfziV4f0N0frR61uTrzt390RXrY7GPHp4/Y8nvebfTRMlk9ox7BmLPkxbCrdJjPvr6fYtxfpkt3OoXpxXFJLu1sJp8G+lSuRVvGNS3FUwF/z+beN0P5T550qLbaunM9S4Rruy2b6d0cvvOoyb1bfyOu2MvE66Swfgd897ov2sK73bkkXlvdK6c2cHXCdMePULL2juuPtL59VtP8vlWdnvFzDeQb+2bbwnbWKyM0da3IaHeZfivbNeLZvmW6WKE/xPcqu6TJ6257VIuuNAiXIRBWufJncro3PqTxvn2b+e9GvsbKRQkg++T27H3z+Pd0nlk5nq+wF09q2jJr2Pvf3a3kJa1btejTrCvW55tF1sRSzoBMcS7bWR9XaZ1AiP/l+BWuU+etOZWdcEF/jwwZZ0tLcqcw4eNN+vleR2RwRtvPSkZ/M2nPhDaZcQiPz3yz2LHQnT7oimv/uZMlmVnwa2D3GrZqovTejbQxXT5ihtT1LfZd8uqdArXA5PW2ag6QyKy03Czov/Md2bP/EBxe0jl9pDKLaltr7iVv0tqlyW5RX1rv/o2ga22URViGfXJkXrXB6uoqJDdVlRUJ7mt4CNNt+rWYMSlXqfqDOOTJ+sNN4svC2Lvf3rjh3PXi3XCRtktP83jFDPujXeLVYPkdr3o9gHkW5vm20S2WrfVLkZ9yqvedURz47ZLueaRkVtS3tYbbtbL8z7gQd4avWPewe67zvkgesfMN3rWCe0yOt1/F7/Ef925ravt8em7Rx6Z9trJ7nfIA2d2nIyLj/noimmvwa0t3SaxVbttLPaROiHA1ue5TmArXL5g6jqh5Rc7Wxr1N4tk0L/T38/P/OBv17guKlvwQezD22ZNv++LQj8YaYyJx8g6vzffNWMJyc3Rx2cVTX/m77EPV7qu/qv4mI+uWDIfbu3oNpmtql3mox1jDC0Wgvltl3UFGaU/IeG6H4eVyvdkfX3LyVyOT0B9a9P6NkKvrKFlKwN50VURkSrNCrFYMOi/ZeSesCS3XUxMO2mxH0y5MFkjq1nnyXol4fZFcjv+Fv0JNs23IV8XG9KyVS4gF1G1kMQbBomNlY88aFfBKvfJk+mOT2gRuxaUazzujORrPBjc2tRtIBQJJl27zibjE6SLPSUf560/DLcT2m2EYV2++pid3VZHktcZyZdb/fG3+LvSBfi70poqMBIIRVKhY3F+WdJZw+m/aePlEZnvgcwfifMdsuUWkdeLDMAt3MIt3CLg1sZuSeEsxqgyichjqN6BTC/ENfZVmLrN7WZlEmq3CIRTgvlY/lC1ml3q6RMEwkbBfGKxNMpptCIKHQ5rFcAtAm7hFm7hFgG3cIsY726L/kEdRXALt45wy/5FHSzcwq0j3Lp/9pf/LcVffubOrdv/WjRp+hNv87tu+/xJ0+95u3Bv3R9WzmI+9VarLbbl54tnFUkbkJdtMXmLPlzpKpp++0nl7fp7IcV+dCPzmb/quo0wf/qTyPZPf2EiOXX7t7lT/uc3Jt/Lv1VzppQtEiYL5Pa2b50pui34tuz4Utl3zpy8Nn/bYub2BzU/+Pzkjcrb9VQh3T7vmmTgNlb/D1LC/Yu7Jrftsl9NWhb71ZnzaDZ5fNLVLZvPmFfAJNe6d6rotuDbso/8u5G5N3/bYvouxT+8QnArvF2XFDDhvn/eg1ON3MZ8PxIS7p+EKiGHbp9n7h79P1NnUi3rmBWtO4TJgru1wbbQPPvj/G2L+ZciU7Ti76q3668FrBKWvWfsNsYIbsUqAW4LwlasDQrvNn6AfIZetYXbl6e98ebUz3QYuW1h/6KqElAn5D+2f37KE62tNqkTBLB2qBMeEa+LZ3TcoexfSMaVqoTct8ua5kx7jW9/FBWwLbTvh/8ydcp9z9piW7Z/nrmorCyP22KWW5aQdlnR+g/nnvNBwdtlnfX1D0+d+dKHhsfLXH9SqoRc94OtfZu+P4XvB7uCfpbn/dwO27L5TLotK/K3X8zeovmTir7wxEnqVni7CtoPNvo+qW+N3ZJKwVOD47w47uC08QkVbjfGJ8Ct88bVuCNwC7cYDwa3cAu3CLiFWwTcZuKWtdE7ODG3JfWbxNqILWsTt4yNrEzMbbGQ4uyUbsfslrWRW9ZGVpy2Lflyy9rELWMjt1hL5mvJl1smW24tXloK+Rb51k75tqYSgXBcMAiEE+NOBMJ5wdz5cwTCcUHc/hmBcFpQt/8PgXBY8G6LUOYjnNYuI26ZpMuLPzR0Oovx0MfmF4+uGUIUNnqcFqLbxD8JR9z2Zi8e+sR8r1WS/7cFWCSRQgQb2Aa3mbo9EWSrmvsRBYjmKjZ4Am4zcxv0dUNQoaLdE4TbjNxuY9Nm+8+XHB3r+5WFVYwTuGx4HLnd+2m358pXDSi+ee0Rebr9toWeJb/v3f7VhQvXHsnIbaCK33938AXX5A1W9vXjjyai61w9a9LkL9zzrjh10bN94oyeh7/mKvrCo13iTfosk5e8pLeKiRpVfie7LWa39PZuYYsltws6rKXTzcuO9HYdafriq71t1zwl3qc0slgLblmhtr1j2k8aGhp2vpvRvu++ccqjDa//4M4/9r83Z/qjDeGVRfeKLDuvuS8UXj3pXsnttH9v+NmcT70FrkqNyzrZ7RaXawv9X+N2x0XBb6040vTV65b8+jDJq2vFO0i+JWl2+ZdoPt4876Ujgt7ezVeLCXeL1CdctMWCW0YUNfOPwsSN81bPKrrojf7+HfylUgjKx+lljN9VzaFf8iSvTl7y+DRB4J/Pl2FOeY3+emTKBg3ree+qnuXlSU/xq9hMUzHNzPKK5aeaSME4uk7Y4ioq4tmKdcJC35Jf71jQ0X7Vq+vuFvLqHy4T7yBuN6/gc2xvb9fD82esOLjuFqpcztEi3KItvZm4nXxPV+c3rn73z+ev+MWeF16iBh/d8/jUFX3yHB7dI1Oe3fP4LNHte3Pn/U6YOH8ZXyH8eeoKdRVxxdVHVc+y+UzR7aONu1afu0F5SuWp4NYx9W0Vw1Qo9a2Qb689cvSaV//wHc/Sg+se6D16zVbhDuKW3CSAH/YtJYvtX7R+87JePt8Kd4hwi7b0puOWp04c8rnx5U+99eanN4gUaS595FPKHIpOuPcO0W3/js8XfWH5s139v5m6VpA6V93uWneulH2p26ZvkJwstcu6b1zRL69YeSq4dWi+Vbnt7T161wMkwdJ8K7mV823rwd6jX1+vrW8FuAJb626F+vZo/41Xk3T38rS3OldOvujObf39v+H9vnzua/Icik649/lpb708iWGWkfbX6z/41pnz/qh2K84h+fXctbQ4oLf4T8f0Z4VSo+k7/+ByTSIrlVasPBXcOrS+/fRCz5Vien34SlIytAv1reRWrm+3exa6rz3Yu/2rnnM1/QlbhM9AJnWCpLO/6QeLi1aIQl+eYuC2e9euXS3CIzefufa981fIdYI0Z925T9DEyt8i7bKdLX1CP1jn3Hk/aW6+MdntFLh1an+Chei5StNPdvRxwjeTfjBjt/Q7e+YfVXWCym1CncDHm1Pv7bljWkK7rGfd9GeUReRnIavgC5HOuSq3qBMmwHGHBLcZH3fQ1AkNLTKivXduaX79G/NUjSW12/47NO2yq+57saFuEUmUTXOmPdr4+kqX1A/Wfdfke8hqG/uS3ZLcfLR7nbpOQLsMx8vSdit0nT0lI2paPGvS5CXqzimNW00/WOfD813M5Ot+LB6BYKY8I9F7b45wcfU/Jrvt3zHf9YV7vqF2i34wuE3TbUbx/DTdr/Qdn796gtmD2/Hgtr+p/CV4HOduH0qKoYeyGaku0pALt4gJkG/TPH8h2+c7sDFEQYMdJ3VCiu/909muEyCnsMHArZnbyOpZzMxDwnTT4knT7x+AW7i1v9u+7wWnim4750y5b9Hk9XALt06oEzrPF91unrRsYMcZlwzALdxmxe3eqXf39q6bslW49YcnU7oVT3dIOg3C3O065tahvVNndsAt3GbH7ZcWdLRf495qAlHrVjjdAW7htrBuv/KdrTuWXrN1xzd7e6567a7pyzd0rb7SpxnoleCWP91BOBmCuBUmUCfAbb7d/uz21c+Ibn9NE+jmbx5p1wyg0boVTncQToagw3L5CX23J8I/mjrl0Zc655xzCO0yuM2y298tXvCW2u26i5Yv9201a5ftX7ReOBlCOA2CTBj0J/B/cfwS6naoaRH6weA2m247Hr7/Xf58nM4vCvl2xRGz+lY43UE4GUI4DcIw3+K4A9zm0G1vb881W3tuWx780q/brrmO1rd+qcNAx61wukO7VN+2m9a3cAu3OM6LgFu4hVu4hVu4hVsE3MItYry4fSjHAbdwmwu3Of7rAQzcwi3cIuAWbhFOdns6Z/EQ3MJt7tz25irgFm7hFgG3cIuAW7iFW7hFwC3cIuAWbuHWIW6Fvxx5dPWVzzy+8H7lbt1rK8At3NrGLf+Xdd77x442zYlj+hdLgFu4tZPbo6vPvS5w7nU/5i+mQE85W0uvrcD/IUm4hVt71gn0L0cK+Va4mAL5KeRb/g9Jwi3c2r1OEC6msO4BsU7g/5Ak3MKt3d0KF1OQ8y3/hyThFm5tWid4rtwquBUupkB/3k+vrcD/IUm4hdtx3n/bNJ9dyl/Y7thcFztjI9zCrRPcHlv81Il1y+hVwY5dtVuTbznggVvbun1zwaGhvQsOJbvlvMADt7Z1u/nqgaH3PrubrxNmzFh6UHbrhVu4dYLbE+8M9aykFQPLsHALt06pE2jsmNeBfAu3zmmXReoP9h0c6rtr2QDcwq0T+sG28/1gxxZtbJrPzlh6KKG+RacC3Dpr/C11y8WQdOE2Pbc5vDiYZbdeuIXbNN0W+no1cAu3DnXLwS3cOswtR9x64RZuHebW6/XydKUOBXQswK1D3Ip0OZ4sEi/cOsetV6gW4BZuC+SWhVu4daBbZmxuOS8KXLhNyy3LMAw71mybsI703BKydAJy4TaL+bY+4OcjWJ+rfEvgetEnBrfZdRscHOFjMJCr+lb4Abdwm023gVNi+HPVnyAmXVQKcJtFt37ppebQLSdOKnBBGG7N3Z7OltvTGbnlvJquBdEr+hfgNpXbcLbchjNxqwpOLHI5TmisIeDWxG1dYr7UTlC3oWrJrcFCmhVl6lYsFTip6EWxALdW3IZ1J/yxkVhlZWxkxG+yUAZuS/Xdim00rzA+F9Uu3KaqE4zcjoyMVFaOWHCbXp2wysStUDZIbnE6D9wmuw3XmYd/ZHSUuB0d9delivCY3XLqhprYv4Dh5XCbidtR6nY0+25L9UsFbTuNJlsvh3N/4Tbt/tuPRz/ua/3444+z239bumoVoZtCLq1xxVo3JmVf/j8E3KY6XvbxJx9/Qv59HMiq21WrVpXS/1O45aRaNyZlX5xNCbeW3J7+5PQn5N/prLqlZvmgKdc47crFLsd5xTMpOfqfNuUi/8KtTr6lMTqa3Xy7SolSWjKkrBi0rTbpeBrH/0P+hds8jU9YpQ2ZbqnXa0Uwn4HpIQrxn6Xki7Q8kdyWSOMYgzl0K9AtJamX/LNOVxh2zhe+nJh7hSPFyUaRlieY2/pggI+S+ty61RQOcvJNFTHpEAWtfEn1wAlHimOaQZEkNXPiYQyJt9A3wenkZA5ucT5vRm7VyZf4LTWrHWLqzKscceObb1LE1GMfRN5e4X5t8UDnC40+XjTHg9dN3o7nDbc5cZtIeJXMNwExlyg4pj1YnGQ7cdykxJvvY+PEBfk5nHCTE8Br1HrFjwWfuXneTsvUcJtrt1q+4j8+DZfqdZlx6uSbaJszPqgsMU1I3/JyQvJVpW8phYsjgYRMrk3JqsfElFtwO5Hc6jjm/Qoh5GEeM/+TK1WFtU42o57j5K5kTcZW9815ldqESxgjxCm3OFGwVHqrfectacOtudumxZOm3z+QOJkFt0lNOdoNXCqn5uRiOTshfUC80seD3qH/ueCSihLtZ0DkrZ0T8+YnJcOtqdvOOVPuWzR5fcJk9t3mLaQPSKn08aB3WPlccAlfArpzvKVihZ3ztAu3pm43T1o2sOOMSwa0kw52O5a6pjTlnFLpAyA1F+HW0O37X/m/Y2X6/nm+r93zf/XcrmNuHdo7dWaHMkkvbcNMQLfppnXRb64CboVVfHT9VmtuZ9BLMsGtRbde78W5CbgVVvHh119FnTDmCkKpEzhVDxrqhNzVCbNWnDRpl3XOOefQBG+XmXRRSP13peIZIPnoUIBbYRXvX9ah3w+2iHZ+Ubfi5LjqB/Nq+8E4w85f9Sg2dYhHnDnhEBz/Lz8HJsa/WwvXYySriD+/Nm6j4w7eMR93SPs4hTCu0isePVDTlI/GJZvk5AES0vEHHC+z6vY8j29Jx5iux0jpaxJuIY7zZoZN+al3XEweiJCQIxWRIkvprw3rjzAThy/YafwCrsdY2HE1Vo/SCulOcxxL4CT/lEDGOE4ZXKN3OWlOLVJkyTlteBjOdyjsOEZNZvRqBgDwE9e98TAAABtgSURBVHJejck++cGMXt3MqBqvGxPOphivo3FxPcbMrseYhXHjnDyYJSaPPPRKJ61L39nKIEUNUGtXzRvHQ8hxPcbMrsc41vN0xMG0YvEoVY9CNTCxRU4YtwW5HuOYzosUv/a9OqUnh5PIJpzbfF6PMd3z0Dn5NyefXcMhk6JOyPP1GHWv+2FyYkJMGn7NxbxIqXBbsOsx6l1nKaYz5VXOHJBPEQA7uC3U9Rj1rmun61Y4e5F2FkAb3Bb8eox61xGN6Z2VyDe1OFSucGuL6zHqXbdZcyo5p1xKFMzg1ibXY0ztVry0Af48CdxmmG9zcT1G3W5arVshzyLZwq2NxicYXjSJEy+IJF2HDskWbjNym5vrMRq6jSl/YRpk4TZzt7m5HqPhiIOYF3/2CW6z4DY311lKPoQrjOjiqwMkWri1vVvpMojS8VughVv7uuXUf+opJh9fQMCtrd3GtG45HF+AW6e45RS3Mfz5c7h1ituY6BaDE+HWMW45xS1/WAxu4daS2/7bFvqWdrS9lMrge+c/IP48ds2sW8nkwwsXPiX+fO8rHUPHrtqdidsY3MJtJm43LxsY6h3Y+80Bc2InVn/tAfHniXc2E7dN/9jRedkh4WcW3HJwC7dpuZ33xsBQ5K7py7f2rb7St3bgzYuCtx/hp8htmlGF2PvNdQ9IP4eo283Lhk6s3Cj8FN1uX77883dn6DYGt3CbjtvIw1+bsaKD5tvNKwb6rtr95oIOcYpk4s7LxCTad9urRKzwU3R7y9DQXRuFn+99euGVnmlk0R1f6cjMrdSHgM5buLXcLuv+xnrqdt1FJSVXbn1TniJEIyvFyzDvuH2A3BR+GuZbUjv8OsM6Qd6R6ASDW0tuu44Qnev3Xkvy7S20xqVuhSnyk+TbE+/Q6ccXXjlr+lb+50bBrU5923nZq0NjdYuAW0tut391oWdFx7Frrtva9/CVgaWHqFthSqhvCUvxWvcPiD/7bps/fcmhE3xPwgl1f8IdFy1fviFttxzcwm32+2/33j6Qjf7bpvnsUv4DcGyui52xUeU2FvN6UR3ArS2POxxb/NSJdcvoJ0DdXya5BVu4tafbNxccGtq74JCOWw4DaeDWtm43Xz0w9N5nd/N1wowZSw8qbmNwC7cOcHvinaGelbRiYOnfL4NbuM3MbedVHvfagaavui/iu2rf5A/47r12QByxEFl9nf9Th9QYUw9lSHD7OGmHKXUC3xs8r0Odb1Hewm3abk8MkUR4qOsgYdUhu+UP7PITnf/YcewyjduUQxlM2mWR+oN9B4f67lo2oHaLgNtM6oQm/uis6Paikq/ePrD32iN0xAJNt+cueeUyqSv3Kv/CrRFhRrr9YNv5frBjizY2zWdnLD00BLdwOza3nYvPXUvSX9/K9WLDP7JyI6kTNPlWGKpwgi8gMsq3xscdEHCbYb7t/OJuwvbugaGHfdf+/NqBoXXrE90KQxW6v7f8Wws64BZu7VHfHrtqd2TlvQND2nx7rTrf8kMVnr+bFhPiDLiF24KOT/B5Ft4/sHnyQh9fdUr17QAdsSC7FerbpkBZcEGHOANu4XYCn1+GgFu4RcAt3MIt3MIt3MItAm7hFm7hFm7hFm4RcAu3CLiFW7iFWwTcwi0CbuEWbuEWbuEWbhFwC7dwC7dwC7dwi4BbuEXALdzCLdwi4NZebiOrZzEzxYvUNC2eNP1+XGcJbh3gtu97wami2845U+5bNHk93MKtE+qEzvNFt5snLRvYccYlA3ALt05yu465dWjv1JkdcAu3tnbbtGbNEwNwC7cOc7uOYT7TgToBbh1YJ5wI/2jqlEdf6pxzziG0y+DWOf0JVzAkLqFuh5oWoR8MbnHcAQG3cAu3cAu3cOtIt6yxW5YWvJUs5BQ2WLjVCXdNpXkwCER6kZd8+/EnplGDfIt8i/oWgfoW4xjhFm4xjhFuMY4RAbcYxwi3cAu3cIs6AQG3GMeIgFuMY4RbHHdAwC3cIuAWbuEWbuEWbuEWAbdwC7dwC7dwC7cIuIVbBNzCLdzCLQJu4RYBt3ALt3ALt3ALtwi4hVu4hVu4hVu4RcAt3CLgFm7hFm4RcAu3CLiFW7iFW7iFW7hFwC3cwi3cwi3cOtlt03x2KX9BxmNzXeyMjXALt05we2zxUyfWLaNXszt21W5NvuWAB25t6/bNBYeG9i44lOyW8wIP3NrW7earB4be++xuvk6YMWPpQdmtF27h1gluT7wz1LOSVgwsw8puUSzArc3rBBo75nWo8i3HxZB04dbO7bJI/cG+g0N9dy0bULml/yAIbm3ZD7ad7wc7tmhj03x2xtJDQ3ALt04+7gC3cOtgt2iYwa0T3SLhwi3cIuA2t245xa1QKqBggFsHuPUqboWUi8QLt85wy8Et3DrQrRdu4dbJbjm4hVvHueX4PgUMa4RbZ7n18m7RIQa3znHLiW45uIVbB7n1im69YrGArly4dZBbzqspFjCiHG4d4VaoGTjp6JkX/Qtw6xi3Uu+C2DFGi17kXLh1gFv5ABqfezmMzoVbR7iVD0SIJS/cwq1t3XL6br2KWw7lAtzax22pVyfEA2gSaeEIMNIu3NrH7So9t1xC4SC6RcqFW1u7TSx4+W4xnBYBt7ZxW7qqVL9U4LSIOamXAb1icGsDt6tWrSJ0S73mwUk/OWXEGIeqAW4L5bZ0lRBeq8GXufx/Xl4x6MFtAdyKbGmxUGrQt5DslvYwCCmY86aoG+AabnPplhQLpFpY5bVSMWgrX6NrhtAqgh5uw+gyuM2hW1kvpVsq/LCSf2l7jeMEpJxQN3B86SsMchCg0xB4c+rhDpxYJHP8I7iUBTMHt3Cr61ZMvOIP+q+0tNQKX+qXEy7YxIkHh6WzKJRFYvxCMbEspjc4/m5lOcF/MlcB9Tisp+E2W271JAt6rVW/nPrUn5h+rwTtVuO0JbOCWywtpOpC4i1fyExMy5zOwWdOzvlwC7dKHhYabyYJmEscVJZqsSS3YgHNa+WESkO7HN+PwSdfvvrwijUKD1b+UJjztVSUwO34cKs03sQEnDIHJzbhTJaLWVlDTJ3PuYQaRcHPSXmfkyMmM+VFK0VJwf3CbT7c6jo2Cq/4v8lMr9QC5EqVjjjD9qDp54BLTNpJ+V3Iz5rkHvPKMxTfQiWSJ85wa+62afGk6fcPJE6O1W0q1KtKzWeWKi1AMZeXlirtwXRDwS/98HqTPgMa35zRYUGpFyTnfOHW1G3nnCn3LZq8PmEyt27zHgp+6Udpqd5ngLP0KZDbmVwum3pwa+p286RlAzvOuGRAOznO3KbzRWBhKYW4qlbO9tl2cGvqdh1z69DeqTM7lEmWITEx3aZNXJWEOU17b+wBt2m6nUHYsnBrrUqX4+JsB9yiTsgyWKUYVrocUN8WpF3WOeecQ+O3XbbKYrus1Gq7TNU1hnZZgfrBFtHOL+pWnByH/WClJv1gnF6fLqc6biGMr5CO1onH5NB/i+MOpscdvFaOO6Q4XJzkkRNBSh2xynyOUx8yFgdDyMcbOC5/53LArf2O82YcFg4Qc9pRPMrRAuWAGN9jxSUNSxAOJeSZJ9zae1xNhjky8YAWx1+9geM0A22kLKoacaAM3BVG1UgZ08s55eQ3uLXFOEaT5ClCFL+b1TPUIsWLNHDi+RLyiBlOyZcmw7ycN8Acbgs8btyrLivVN6Xv7Zh8ZoNwaWjpdAhlCHnyeNqYPEIR5+nAbdbO09HmTf5bmh/4LZ7XoAzA0uZJ+Xwz1bAVboKegAa3eTovMuHqS3zeVBWUqsZ5TBnwioDbAp6HLvZzKqfU0MBVyeHW3tf9EFOp2DMqXbeGw0nmcGuP6yxxhmVBTHAbw3XC4NZ+17WL6fNVuu9RF8CtDa8jGtOcVM5JHf+xxC4BBNza0i3fURCTO/4RcGvP6+RzGrfS3zBDYQC3tnOrc72ZmFLPcigM4NYRbmMatwi4dZRbDhUt3DrNLYc/tge3DnLLyX+aF27h1hFuhRMIBLTC3yoDKri1rVtO+QtlwpEF4Q82cMi2cGtnt8of4Y1p/gwDsi3cOsQtAm7hFgG3uXTLqceAI+DWIW5xbAxu4RYBt3ALt3Br4paDW7h1oNsY3MKt89wKV9ZCwK2z3Mb4nIuAWzu6bZrPLj1EJ47NdbEzNsIt3DrB7bHFT51Yt4xeZfzYVbs1+ZYfTIPDDnBrS7dvLjg0tHfBIR23NMAWbu3pdvPVA0PvfXY3XyfMmLH0oNYtAm7t7vbEO0M9K2nFwNK/XwY5cGtXt4+TdphSJ9DYMa8D+RZundMui9Qf7Ds41HfXsgG4hVsn9INt5/vBji3a2DSfnbH0EOpbuHX2cQcE3MItAm7hFm7hFm7hFm4RcAu3cAu3cAu3cIuAW7hFwC3cwi3cIuAWbhFwC7dwC7dwC7dwi4BbuIVbuIVbuIVbBNzCLQJu4RZuC+D2dGI8dDrjeAhu4TZfbnsT4qGkeywH3MIt3CLgFm4RcAu3cGt/t+23LfQs+b0w/ea1R1Rz/vAk3MKtXd1uXnakt+uInlvtLXO3kdWzmJnixZWaFk+afj+uDwa3WXC7xbXFyO28lwjPrtVX+tYeIVKFCfLTv/au6cs3WHXb973gVNFt55wp9y2avB5u4XbMbrcUMUVb9N12PTx/xoqDm795pP2qV4lbYYL8TC/fEq7ni243T1o2sOOMSwbgFm7H6JawZUS4eu2y/YvWr7to+XLfViJVmFj3QG/Gbtcxtw7tnTqzA27hdmxuebYi3CS3rQd7j359/eYVRwSpwkRa+bZpzZonBuAWbrPsVmQrwE1yu92z0H3tQVrQLvm9UN+SCfrz/rZrrrNU365jmM90oE6A2yy7ZRkp2Jz1354I/2jqlEdf6pxzziG0y+DWMccd+q6gn4tLqNuhpkXoB4NbHC9DwC3cwi3cwi3c5sbtQ9mMZJessVu+NVjJQk5hg3Wk2yImx1FdaR4MApFeULd33lmEHYFwnFsEwmFB3SIQTgviFoFwXDB3IhDOC7hFwC0CAbcIBNwi4BaBgFsEAm4RcItAwC0CAbcIuEUg4BaByLnbZgTCecE0j0rROmr3aHXQtqZ8Ja3j59Wk+daZ/FEby+tTuW22/Yt30ramfCXN4+fVpPnWnTY8PfPFsbjt2fO6HHv64RZuHeG2/8ApJW+fOtA/OlJVXMQGdsEt3NrZ7Z5T6oLj1J7REldDdLjeNwK3znEb7Tmw3wZxoCeaS7etzc2t8qpf11bKr48WldvpQ6vZVse7zdGrad63q7HAIX5+2vclv3W5ybdJblnPsDCnxFdZXOQmG1LJMEXFIf6ecrbI04p8a698G93XrhsaWBYWMVsq1cNHxd/7owb59umn/yO3bne6inzltLwtYcqGh0tYvmAYqXeF6T0lg4MlrijcZsVtckuizGO4CpNZPbvs43Zfj4HbBx988Onf6bql195ix+52dKSh0sP4R0ZL6MpamcPifgsQt5Rs1FUNt1lxm9yS0MVZ5kvh9kCjfdw2HzB2myQ3q/UtH5uYGlIVkIlBZtdoX5B+JNxkR/P7zhNEfZuV+ja5JWHi1iT228ntfoP69sEHk+VmtU4QwhUcLfGLbt3+wyOj5cUFcTue863ckhgNu4tcZSOiW+kGnWArRsr4S1gKs2pYhi0fUTU97OxWJ98myM2q20q+9Coqk92OMPVUazHqhCy7lVsSIaZq+HBxUHAr3wgxNcODVQ2qOqGmaFN0F1umbXoIbn9781ln33+YxyRPJohMuYjZUqkebt2tSm5W3Rb5W0e6Akyrkm/ZwPBwOVMst8uG4TY7/QlSS4IN0HuZPh6nfMNVlljfusr5Eq4voelB3X7/0rf/83PP8KrkScJo5+dekUUaLJLg1mCpVA8fdfGXTXRZcUvkqt2eturWvL5tLaOtXPIdJLtt9RS5SsqKC9IPNu77b0lLoo+p5d+bMMUp3+gjt7Vuh/kvvj6mQWl6SG4PXEAYff+faA5UJrVujRbRujVaKtXDyXcB/ZtiNanqWz234SzWt7rBS87vcQdlyibHhDI6hGTWf+sK9onXeK0R3Io3jNx2Ubf+BLf/Ofu19vZ/+/LviCplknf77YsvfIIXabLI7AufvXn2pa+YLWX88JsvvvgWWicQuEU11uqEtzV1wuk6aVkl855OmLBwnNembm1wTCjzQ0j6buWWhCuk6k+Qb8h1gie5Tkh2+1Z7+/+6UFAlTfIo72187MvbBHhGi6xt/P7ZzzbecK/ZUoYznruUrIKvb2tcNZbaZf9xMmbkNpw0JU4ku+3Rjqvpsalbo2NC+s1i46ax8fIWH2V9tapDSPpu5ZZEyBUeju4KDArtMumG1C6rdg3K7bKw2C6znm9fafzpxdvM8+0rjc8R2t+/JaN8+9PPffPJbdbbZSq1yXVCCreaKmtEM46xZ8ReVaG8rUbHhBzgdl+PQX0rtyRG60kLwlcvplbpxugmdxFbOTI67Hcl9YP5k+rbDUr1uUFb34puzRahSVNwa7SU4YzGnY99+8JtFvtvNWolt+G61KEz/nZkJCrHiJ3Yaj60Bxod67b5QI7HJ6ToTxDdmi2iuNVf6rFtxg/fxq/BSr5NUDtGt7ZuhctT+x3sdn8e3Br0rqrdmiyicqu31M4L1ho+/LmLL774dgt1wtNJasd4vgPcOt2tI8YnZHv8rc3dStsquH3sc2ddeH+LtNeUW0YC01ne4qOsr1bHbW72vE3Hg+V2/K2T8u33z7r0yZvPuuVdYaepbhkITGt5i4+yvtq85VtHjL+dwG7/c/Y/kbT23bM38PtMfUvYZ989+xXNW5BqeX23KR5lfbV5czvavL/gfdut/GUO9u3fNwq3iW7/9axneCi38GDUt/Tdplpe322KR1lfbf7cTsTzyxxU395w9lt87+H/4ItJ9S19t6mW13eb4lHWV6saapLj88vsnXJylW+j3QX8iHZHE/OF/oeWur38Qkqk7XL+YKPmluT2Se6ss2+XBVpY/gLSpGp8bPZZF/7Y6qNSr/anZCPOvvgV9VCTbOTbj5PvGrZvvm2VL5E0+qJxjMXtYFv0v08VKv472j6YsAnCXTpuRSl6vySHF95Omkj3igKtLX/52d+++MnHPnfhNouPSrnAzssvfHLLY9/+sXqoSVbqhOR81SKt0H7n87bm7Ppg4lT0QOHU8kwPRBM3gdyVYb5dS35efqn1fLuWdrvT6uJfz3o2W/l25+x75fpWGmqSW7e27k/ITiTXt93RU4WNaHdP4iZEe0zr2y9rCssvJ9S3N4ip0+LyOy+gzp8764lGa49KuQDJt7dvyUX/rWC1voV4fVHj1tbn82bRreZTv7/AbEl2PZB8l0F/wgZNQ36Dbn+C4tbS8jsvWMa7Xdto7VGpV/vTm2efffbt27Len0Cl9i33uA93uT3Lj6rc2vp42bh1e2p/8ibsH0P/reLW0vJJbrPRf7uFVtm5cFteEgsVu0OxYLnKra3Pi4TblAeqEt1aWj7JbVaOl+284NacuP2FX6gQ/L+YgG41VZbN3WrGJ7TxQwF+J+401S0Dt1aWT3Zr/KjnSBZNudqfXnz7k4/dTNaXi/o2FCC1AqkR/DUJbnNwPu9vvzv7rAufkM7nPXDB2SSE2ugGOvkW8q3VfJtiIFaSWyvLJ7s1fpTo1ny1O2+efdbZF97fmIN8u8nnbonVuD01scNuX0jjNgfn8/521Uu/eGz2Binftra2/vIC4eE3rCU32q2dz5t7t/FddaG6XXFzZOFu+7od5+MYSZbdFIsddUci7i5i2K92m4vzefkvk8vXquqEfxO6/ojb5Doh+XzefLkN74rGh9tO2dMtzndQ3J5MdpuL83lp/PJzG1Rub7hbuPeGC2df/IT4glOdz5vz+nYwZAVZztxKeT6uX9+Ox/PLMqgTimmd4K6JtSTUCbk4n5eWCjfc0qq4/eXsHwt3P7dNKSBSnc+b83w7GBK7/5vraut6KNF94drwcFu4toFYCreTG4OiW7IErSeOh2vrmrPldlOYio2HN+nn2/F4Pm8m7TKSZY/qtMtycT4vqRJuuPR3qv6Ef5XTMM25Yod1qvN581An1LXyctuj0X3UcF1oML4ztCcaDe8iM0OD0T21cd7troZ4tGHXqXioPR4dzJbbfSECNx4O7dN3a4cxppkPSc2a2xaDfrBcnM/b3vbdS99W9YMJta4U35UOtBiez5u3dllbXahhWJimCZcSHQ6RLNgWFvNsXTv9HaeoB+tORUPRbNa3zaFwNBxqNqhvx+/1atI/7lBcEwuWJfSD5eB83rbvfvnt1tbD0vm8Qirmq4fHftH63GyL5/Pmpf+2PxwaJn4bGkLtIlVq8/gm8cauZvp7OETPDK49daqhtmEwi+2y5lBIZKtT3zp+OGp2+m/pcd6Ww25PoMta/+1Yzuf95WzaTXu3dD6v0svw28vPOlvu2E11Pm+e+m/r9sXrmqPxsL7bffR3NCS1oQZ31TZksT+hWWKrm2/Hg9ssjAej42oO12vG1WB8wqlT9fsGaynX5gS3dWFaAffwd9YqfQrZqBWUfrD4KbjNYBzjxB4PNrjnOGmQ1UajpLnVn1Qn0EbavjpSG5B2077a46eipJ7ojsbba/PUfwu3GH+rX99G94Rr+YK1rbZ2Z0NSndBQV9tAp+saaEOtljTRog2bQuHjeRqfgPr2cEtSNEqrt/H5vAUen5CD4w3It1kLG5/PC7dw66gXDLdwC7eZjr8tlFvUt3Crn28Lezovf37Zf6c+vwz5Fm41q7b5+bxwC7e6bqPtBb5+Qns0cRPIXXALt+ZuRwcPFPB6NaeE69VoNkH3ejVwO8Hdqi7cJHX+dR8odI+fwfXBkrfVyW7HzaspsFsEwinBxBEI5wXcIuAWgYBbBAJuEXCLQMAtApGh28Eqv8dfGY3Ho1Yf6O7HzkMU2m1JZc9g+6Z4vKYcbhGOcbvPI96EW4ST3IoKa91udxX5FfCVH4/Hg3VlvmCb8jte4/dVRfnf/iq4RdigTvDXDsr5tqaku788QLy69w1W+6Ly76rywcGyKmF+BdwiCu82Wut3l3eLbj0kt0Z9DfFgmNwIhKXfUTeh3eoX58MtovBuSTSUebp5tz18sVseErxWVku/29x+Eh5xPtwibOGWpNQa3m27m3e7SfRaI/3udw/ziwnz4RZhE7dlId5t1N1Mbvj3xP1BWvk2yL99YaGm4OfDLaLgbtuqm/v7Q56eeNh3nLS/Am2D1cRqwN08HPIrv0O+5vggqW0r6XzitrwW+w9RSLf91QGPr4w2t8o9JONW+30VpCYIlgd8ZceV3/G6gIc00+LRKl+gNtAfL6nG/kMUvk5IjGBY+xuBgFsEAm4RcAu3CCe7RSDgFoHIXvx/66omCFGeWxYAAAAASUVORK5CYII="></div><span class="fig">Open the sound wave in Audacity</span>
- <p>We can see right away that there are two waves, meaning our sound sample is stereo. MEG-4 can only handle mono, so go to
- <samp>Tracks</samp> > <samp>Mix</samp> > <samp>Mix Stereo Down to Mono</samp> to convert it. If you see only one waveform, you can skip this step.</p>
- <h2 id="tuning_and_volume">Tuning and Volume<a href="#tuning_and_volume"></a></h2>
- <p>Now MEG-4 does tune the samples on its own, and for that to work, all imported waves must be tuned to a specific pitch. For some reason pitch detection is broken in Audacity,
- so you'll have to do it manually. Press <kbd>Ctrl</kbd>+<kbd>A</kbd> to select the wave, and then go to <samp>Analyze</samp> > <samp>Plot Spectrum...</samp>.</p>
- <div class="imgc"><img class="imgc" width="586" height="508" alt="tut_snd2.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkoAAAH8CAMAAAAZhnBeAAAC/VBMVEUAAAABBAADBgEHCgYJDAgSDQsOEA0RExAWFxUZGxgbHBodHxweIB0ZG6IiJCIlJyUqJiUtKSgsLSsxMzEwNDYyNjg0NjQ0ODo3ODb/AAA2Ojz/AwT8ADQ4PD46PDk7PkE9Pzz/BxH4CTxFQUA/Q0VJRENERkT1EEVDR0nxEFnzE1FISkhHS01KTlFMTkvoHWvrH2LcInz+IBtOUlRRU1DPJ44VX7bTKYmMO8FSVlj+JieQPL1aVlSZOrqxNKnhKnZWWFWhObTCMZtVWVzHMpi8NqNYXF7MNZOsPbBhXFtdX13/MTLYOIZkYF5eYmRjZWJjZ2nJRKBnaWb+Pj6aU8lpa2hpbW9scHNucG10b27/SUlvc3Z3cnFzdXJzd3r/UVE3hOR8eHd3e33YW5l5fHk8h+d+gH3/W1x9gYNBjufwZGSAhIaChIGFh4T/ZGVOkeaEiYuJi4iHjI6Pion/bWzndHZUmuiOkY2NkZSUkI7/dHVZnu1imv6SlZKRlZf+enmUmZuWmZZun/6YnJ9rpOubnZr/g4KdoaSfoZ6loJ7ljop8pv/+iIidpKyjpaKFqtfLmpl9q/6qpaSqpbakqKv/kI6nqqblm5eqrKmprbC8qaz/l5iNsvytr6z5m5mOt+yws6/gp6P/n52ztbK3uLb+paa/uLG5vLnAu7rXta+mvvmhwvfEvbW9v7z/ra3Awr/Svbn9srPDxsPGycXOx8DOycf/u7nJy8jOy8/7wcDUzcXMz8vTzs270vjM0dTP0c7X0tH3ycfS1NHS1tn5zMvV19T/y8rb1tTX2tbG3fzP3PDf2tna3Nn/09Hd39zj3t3b4OPY4fDU4/ng4t/+2tri5eHp5OPl5+T/4uDn6ebt6Of45ePs6e3p6+ji7Prw6+nr7erk7vzx7Ory7ezs7+v/6u3n8P/z7u3t8O307+7v8e7s8vn28O/w8u/38fDx8/Ds9Pzy9PHt9f3+8fL48/Hv9v/59PLz9vL1+PT4+vf++fj2+/76/Pn//Pv///8GKNKMAAAgAElEQVR42u2df1xb1333d/WigCnDrhGxTUogC05JjbM1+GkPSbcm9caa7InNnBMSh5TUPAlxhu0QO8+MvdqxQxzTrmNP8yTMfRyeeBU23mLCZkhYKzo8NmIWE7ktAQwZNdNLff5QpWiaOx8g+uM596fula6kK+lepCu+35fgSvfq6pzvOW99z9HVV5/zGwQMTBf7DWgCMEAJzKwoMWAZanaFaYIhj1oSKAWC1hMIRHjUE35PvHMw+Kx7AhqtJ4HDPdF3RK+tSmW1W08CR7XXNkrTBpKpbfwodeUtkC57XpdWlJisyCidUdTpjOr9M6F3mhJA6UwCh89E3xG9tiqV1W5nEjiqvbZRmjaQTG3jRymPdP3mb9JNlxpKYzTOrdrpJd5deQzzpIQS3Wsp2AMoZT5KF9uam0/0aUMpb6GLsCgt5EWIStMbmQNkJ7NnThaVGGZiIpfpNwoljAGl9EDpYvNuas0XtaFEYxJryrAkH+B2MtsnLWu4u8dX0XjEozSeywwTks/kMz1ndLN7zoCljbEote3m7IQ2lEgMlM5bmPO9TO5ns8rsdma144AwwDHMg0YNcAghiErpEZWaeZSaNQ5wRBjgQlE6RCdEhIzmMMeJjWH6e5k1B5idZE6ISjNlTLsxKGFAKW1Q2i2Y1mk34afdqijNfo45xM6+cwjJYl6gM28RJdLE7DAEJZYkhAEl86GUl8fGpQUlSdIA59/EbGe3d7JR6TbZAMdGpSOGoIQ4A5RMhxIlqYu9RNmlfl1plJsVbSKOu7NytoyRI9K0m7Hk7fQZgRIGlMyJEg9RV1cISYle7dYBJZ6kWCMcoJRuKIWHo3RBCQFKpkIpIkmpQwkDSmZEKTJJqUOJw+iBr3/pric2bPijfWdvAEqmQKkrIkkpQ4kGpfu+/ju3fvErX//GjY8/eu+l9wAlcwxwEUlKGUrovj/8rd/6b9+47xt/8PWPl2CAM9klyvhRYoxD6RtfuPd/4D/+71/72m/fdfjep85+BChlEkpnCrMKewmxF1oKhySUchgm50GX7ijdfu9XHkD3CfPupWvvPfXqR4BS5qD08ODcntWErN81vassiNIgGVtzQmeUlk7f+nsIyT/CLb3/7DtLgFLmDHCuA2VkLGuezGc5yGufzd3LozS+pktflJbe+J17WIZmAoEJ6SLl0g8P39DW/BhQSnuUbmFW2cn5AnqvoM+RbZvZwQ9wzBZ950pLb7xxH4dSgGECsitLZ19a0tT8CFBKY5T2MMwBupnbU+AXUHptEyGTfFRy3LFX19S3/7mvi099Y1GSH/iT70IaWqpS33T/BOdiJoQBToYSObRRz6j0/uEljNSiUuDGPohKGTHADe1yTDfl02GOm3bTAW52B4/SxB165iv98okblB8FStLk550PAaVMQMm/N+8zG2kMGiy0FA4TadrNMNlbJnVE6XvvB0JRktj4+KyG5sfyZAJAySSXKA242n3tMJeppI7S0osaml/xDTCgtHJROv0RB4M6SoFHACVASSNKXNyZFw8w0kvO8JsnACVASSNKH77HXmIMF0CAqAQoxYnS2V+yn8AioQRzJUBJM0qnWRYmwge4Ye7/h6/GbmgMKAFKbO+8KvzSRJp2M4xs3n36vdgNrfxpAaBkEpT0z1d6Sfh5AI+SxaL4MdzSIze0oYQApdSi9Jdf/vJfashXEjbG5CsdVqCUk6NA6UenA4CSKVD68re+9WUN+UrCxph8pX1LWIbSqlUB2Y/hlp76EFDKDJT4fCVxY0y+0umPkAylgoKALP3tnX1LgFKGoMTlKwkbg/KVPnxDjtLatTKUrt36fgBQMj1KsnwlYWNQvlLXI/8rKNUVuO22YL7S/3nkT2yQOmSSfKXYAxybryRsjMpX+uMvPCBFpdFAoFuMSjeefUlTbjdOMCphiErLN8AJ+UrCxqh8JXTXXb8roiSzP3jixRuaGjpEs0I19VutcxCgtHwoCflKYtqSQflK6He/8IXfC0Xpvq/cvu9GIA6UUOSmxEitczCgtLyf4Iy/2k3Hp9/97Vu/9MA94o/gWPu9uzZ8bSmgE0pIFSUEKGUaSvxo9vnbb//9BwQoHvjKFzd8/usoACgBSvGjhB74/dtv3fD5u37na1+76/MbNnzhSw8gQAlQSgglOlf6xh9+6bfv+uIX7/rSH37jvmgqS4ASoKSKkqTPFfoJLqKOYLwoYUBpZaCEIqKEtDU/joUSioQSBpQAJZWgFBUlrIoSApRSh5L+i3jhZUEJAUqpRcm23pL71UljF/FCuqGEAaX0Renhoek7mV3GLuKlH0oIUErnAW56E3Mi4iJehqOEAaWMQYnCs8lt7CJe0VBCuqCE1VHCgNLyoMQv4kUcm5idERbxymfnTMzeJt3sniawtDH9USLfYe4wdhGvpKMSjhWVkHpUQhCVlm+AO79rbPJuOu02cBEvnDxKCFBKf5TcewosBbu8Ri7ihcyBEgaU0v5qd4pRwhpRQoBSuqOEY6CEDUYJAUqZghKKgRKKCyUMKAFK+qCEACVAyUiU8LKihAGllKCElwMltKwohdUYA0rLgRLSASWc5ighQGk59JVio4RjNjQClMyBkiCs9FqBpWxMd30lHBslZDqUMKAUTV9pPMs29/TduusrIfOghDWjhAClaPpKtrWEOJhZvfWVTIQSApT00Vcay+qea2LseusrAUorUF+pPT/ryawhA9eDk/SVwDJfX6nf4tZZXwnpHpWwSj2EiwVnUOyohFMTldCKGODE9eAIubT+Sb31lTShhONBCUW+ghkBJcWvVMJQBJR011cihUz2DpfO+kpYE0ooBko4OZSQ8jIXoGTKq91IF5QQoAQoAUqAkj4o4YxECQNKy48SykiUEKCUvihhQAlQ0gclBCgBSoASoJRJKGFAKW1RYtIZJRzxYjiglHqU9jDnif9IQfamcT1T37BOKGGVJ0dASTl/x+Eo4WgoYUApWZTsGwvOk5GHh6a/qmvqG9IJJaQdJRTSw2EohUc1GUoIUEoSJV/ZyOrz3L1ThXouLRgHSngZUUIpQgmvAJSaDhEeJf+mAzouLYjjQAmtAJRQZqPEpr4NbvTzKPkfftBPIPUNUt8Sjkp7OLHA48T3ICWJ6Jf6htImKqGIUQlDVNL7YgCNSt4tD7OLnuqW+obNgBIClAxAqZ+NTav0S31D5kIJA0ppe7V7+VDCeqCEAKV0RQnHhxKO3K44FkooCZQwoJT2KKH4UEKR2xUZiRIClFYyShhQWkkoYQNRQoDSSkIJZS5KGFBaEShhQ1DCoZcecFSUMKCkX74SThVKSFeURCZQ2FWsqCihFYwSm69E1jIMs1enfCUUN0pYf5RwOEo4PpSQLijhFYQSl69E1vbLo1Jy+Urxo4QSRglHQgmFoxTyCRBrRQnHgxJWObpCUBLylQSU9MhXwjqihGOhhOJFCcmvyGtDCcWDElq5KAn5Sms/k73xkj75SkhHlFAqUcIxUcLaUcIZjZIiX4lM7rgF8pUgXyn5fCVq4xa/HvlKON2iEtIYlVBoVEIxoxLSHpXQSkky4aLSel3ylZDBKGEdUcKAku4o2Rkme9OoLvlKCaGEtaOEdEQJGYgSXoko6Xu1OyGUkHlRwhFQQoASoBSGEo6GEgKUACXNKCFAKQUoYV1RwrFQwoBSxqKEdEUJxUIJKVHCBqCEAaWUoIRTixJKDCUsRwkHAx4OyNIJAKXlRQklihJOJUpIjhKSvTSglAxKTFZKUEKAkulR2sIwhJxYY8m+wy6hxDCMpWBPAijhtEEJh6OEASVDUTpioShNMrmOE8ydMpQmJnKZ/vhRQmmDkrwmWJGxsBwo4RWIkj2rKYshczm5Y8eZ7eT4KhqPeJTGc5nhuFHCy4ISVk9niowSUqCEZT/7NAoltPJQmv9coZeiRGxZDLN22s6sdhwQBjiGeTD+AQ7pjBKO8FTVK5haUUKy3+opUcKxUcKAkgpKh+iE6IDFTihKjux8Rydz9wFmJ5kTotJMGdOez86ZmL1Nutk9TWBpYzqjtIuLP8wRZgvxMjkHmCcllEgTE3eSCU4mKuGA6tRrOaMSYqMSDiZPqkQlBFEpysUAGpVGLWxUKpMNcGxUOhIvSigZlFCaoIRk35cASnGjRF5bm5WzaZQckabdjCVvpy9OlPCyo4SXCyUcH0p4haKk29VutOwoIaNRwqGf2bShhAClpFDC6YAS1hclBCilAiWUDiihZUEJA0pGooT1RwnrhRLWGSUEKBmJEkoWJax6xTMaSlgrSghQWlEoIc0oYdXxzyCUcPIoYUApHpTwMqKEYqOEdUMJqaPEx1A2lMZGCa1YlBLSV0LphRJKCCUcaMIaUUIybgAl3gRhpUKG6SVJ6CvpgBI2FiUcGyUUaJIqgtVQwjFRwisZJVFYqaA3GX0lHVBCcaKE40MJRUQJh6CE5FeQUOjLRkeJIxFQSlxfCRuBEo6BEtKOEo6KEoqMEo6IEo6IElqxKHHCSgJKCeoryX5nkgxKWOXbYX1QQuEoYU0ooYgoIUApRF9JEFYSUAJ9JdBXSuoT3LjFH45SHPpK8pT8ZKISUkk0iByVkGpUCv4MMmJUQoovn+OJSjgYP8WrlxCV5A9YYaXgAJeAvhLSCyUcnmgQESUcDSWkN0o4ZEjF8aGEVwJKorDSV9lsysT0lbBuKCGtKGGVw3qghCOhhMJnZ9pQwhxKCK52a0IJ6YcSDstZUUcJYRwfSjgKSuErjsmwwTKUcAIoIUBJO0pYR5RQWM5KBJQi78SqKKEoKKFoKMkrhgAlQ1EKScNNEiUcmrMSN0pIpU76oIS1ooRFlPhv6DCgpA0lpCtKKDTRICGUVJ6FI6GEVVDCqiihaCjhsNQBJCSXnEGAkiaUsM4o4ZBEg/hRwuF1Cv0aRZGJrrZ4nRo4OCpKCFBKEqWw3MlkURJ+4I8SRwlhFBdKSCNKSCeUMKCk5m54llLSKNEPZxgnhRKKhRJeNpSwCkoIUFJzFxmAUkRWdEMJJYASxomghFY4StpT3/DKQUn1AwL7HwNKIalvwgqDcaW+YZSpKOHoFyPkKKEIKOEViFK/fIXBuFLfkIlRwlFRQrGDUiyUUEyUcIaiJKwwGEfqGzY1SkhPlHBCKKEMTX3jVxiMI/UNo0xGCceFEkocJZxxqW/CCoOQ+gapb8mmvgkrDGpNfQtLLcu0qISWJyqhAMrE1DdhgNOQ+obDvy41GUoYJ48SBpTUU9+ExSo1pL5htS8mTIZS2L0EUEKAUrxXu9kvMmRflWCNnQMoAUqhKInfi7FfjWGsuXMAJUBJDaUEOgdQApQApXhQwtpQwoASoBQDJaQNJQQoAUrxoITlUieAEqCUOErBr+6wgBJe2SgxgFLSKKGAdHzloMTnKznY700s82r5SoCSBpQwoCTTVyJ7t6jmKwFKGlBCsVHCKwilNTbVfCVAKRJKOC6UUOajJEp1nc/3q+YrAUqRUEIhKOGVi5JSquvBp9Wluv435CtBvlJcUl2zWWPqUl0QlWLXVlTuwvFFJfZpOPPylQ6y5KjlKwFKmlAKkXzSjBLKvHylwu8QopqvBChpQgkZgxKGq92Akj4oIUAJUAKUAKUEUMLxoIQjooQBpRWPEooHJRQRJQQoAUqAEqAEKAFKgFLao8RkAUqAUgIoeXflMcyTZOgOS86jbgklNnepYA+gBCjFgdJOZs8cIf7PZV86xOySoTQxkcv0A0rLjhI2LUqTljXsxsZsInNMDjm+isYjHqXxXGYYUDIQJayKEjItSr1M7mezyuyHmAcJsTB9zGrHAWGAY9hdgFJSKOFoKKEMQukQnRDZGKa/l1kjoHSA2UmDEx+VZsqY9nx2zsQcaNLN7mkCSxvTGaUxOqqRLKaLH+AO0Am4iBJpYiDJJMmohCJFJWFNsYwa4MidbFS6zb+Gm3bbgwMcG5WOAEopQAmbFSXH3Vk5W8bIcJklZ4eLHJGm3Ywlb6cPUDIWJSzXEhBR4hdsgqvdgJIMJRwLJcVuGUoIUFrhKOEQlBCgBCglhhIClAAlXVBSSn1jQAlQShSlmEcBJUBJJ5QwoAQo6YMSWnkogb6S4SjhjETJtSOHuYWQM4VZhb0E9JWWByWUkSg9ehunY/Lw4Nye1aCvBCgljtKcRXwR14Ey0FcClBJHaTB7Z1Y+KxdwC7PKDvpKgFLi+kr9TNOcjdXDIXN7CvygrwT6SglHpUlmgpDP2bgRjpkAfaXlj0ooY6bdG9moND60yzHdlA/6SilDCWtDCaczSqO3WQo6iX9v3mc2DoK+0rKghFVQQtpQQnC1G1CSoYQAJUBJB5RwPChhQAlQUjuKpaCkQAlHRglxKGFACVAKOaqOEoqFEgKUACWdUcKAEqCkD0oIUAKU4kMJY0AJUIqBkrgkenSUEMoQlCD1zTiUpE9tsVHCpkNJSH0TNpD6ZiRKOKB6jjpKyHQoCalvwgZS34xESe0nTWEocWOgGVESUt/EDDhIfTMUJaQBJf6wCVESUt+EDaS+AUrJpr4JG0h9g9S3ZFPfhA2kvqUyKrELpmLzDnBC6puwgdS3VKIkX47XjCjxqW/iBlLfACW42g0oAUqAEqAEKOmJEgaUACV9UEKAEqBkIEoYUAKU9EEJAUqAkl4oYchXApQSQAmHo4RMl6/0WoGlbAzylVKMEjI1Snyi0niWbe7puyFfCVBKOl/JtpYQBzML+UqAUrL5SmNZ3XNNjB3ylQClpKW62vOznswagnwlyFfSQ6qr3+KGfKU0jErIZPlKhFxa/yRIdaUKJZwJKAmJSoVM9g4X5CulCiWUCSjB1e6Uo4QBJUBJH5RQBJRwGEoYUAKUoqOE2R04FCUUhhIClACl6CiF1xZQApQSQQkDSoCSPighQAlQMgwlnAEoMVmAUhqghMyGko1h7ZYx+m/VTq+EEn1oKdgDKAFK8UWlB5kH6f/pjcwBGUoTE7lMP6CUnijhNEVp0sIMstudzHZyfBWNRzxK47nMMKCUniihNEVpD3MnuzlvYc7bmdWOA8IAx3CxClAClDSgdIhOiAjx5zPn2S91c5jj5ACzk8wJUWmmjGnPZ+dMzIEm3eyeJrC0Md1R6mQK6f3ZzzGHCEXpSQkl0sRAkglEpXgGuDuY79DQtIlOlAiRDXBsVDoCKKUQJWw2lIaZfB8d3rjJ0SZyRJp2M5a8nT5AKYUoIXWUcBpPu+Fqt6lQ4pKbACVASQeUEKAEKAFKgFKKUMKAEqCkD0oIUAKUACVAKV1RwiZFCfSV0g0l8Ycm6Y2Sg704aZkna+lmL+grpSdKCJklKu3dQsjafgLrwaUbSth0KK2xSSiBvlI6oYTMhtL5fD9F6TPZGy/BenCAUuL6SmxG7tN8OuWOWwjoK4G+UhJRaTZLkDMdt/hBXymNoxJK+wHu4EYhyXvHetBXApSSQanwO1zWG5O9aRT0lQAluNq9wlDCgBKglChKWIESApQApURRQoASoAQoAUrpjxIGlAAlfVBCgBKglDhKGFAClPRBCZkIJUh9A5SSSX37ToGl4DVIfQOUkk5981pOuTotXkh9A5SSTX3zF1CUCiD1DVBKPvWtN5vJ7oXUtzRGCcdECadF6tts7mtzr+XOQOobpL4lm/rWt4reW9UHqW/pGpVkOyNGJZQWqW+TWZ1znVmTkPpmNpRwOqHEpb6R11ZbVndC6lu6ooTDUMLc2pYKfAxFye/3syjRDVztNjVK8nuYQ4lfeXC5UPL7PVcG/qKr6y8GrniUMAFKJkYJLT9Kfv/VCwNX/YGA7+rAhasKlgAlQCkOlPyeSxeui+dfv3DJ4weUMgoljJcJJb/v0sBi8AWWBi75/IBSJqHET8GNR4kd3Zbkr7AkH+MApQxBCS8HSu5z15Uvcf2CG1DKGJSwuAC44Sj5/VcGlpQWGLgihSXIVzI7Smj5UPINXA19jasDPhWUhESlQobpJZCvZBKUsAwlbDRK3nPe0Negu8JRCiYqFfSCVJdZUEIylJDRKLnP3VwMsZvn3OEoiYlKAkqQr2Q2lLDBKPn9rnM3Q+ZKSzfPucTJkmyA4xOVBJQgX8l0KKFlQMkZipIzFCU2X0lIVBJQgnwlyFcKH+AGroQOcFcGVAY4IVEpHCXIVzJXVMIxohJWRiUcx7T78sBCiF24rDLtFhKVggMc5CuZEyUUAyWkRAnFcTFg+tyUkqSpc9NqFwOERKWvsj9ignwls6KEDUTJ7758ziPf4zl32a3tEiVc7TYfStw1AYSNQImOcNM/vuANPvZeGJr2whcnmY0SMgYlv/vqj89NiQ+nzv34qhu+zs0klHAoSlg7SjgelOhsyT1x+dyFK9c9nutXLpy7POGGJJOMQgkpUOK/3tWKEooLJZal6bGhgXPUBobGpuUkAUoZhxIyEiU6xnld046x0dExx7TbCwm5mYoS5lHCBqLE/t7E53W7XG6vzw8/E8hYlLj14oNUaUQJx//jJcHgx0uZixLCOOz7uJgoofh/UqlqgFJGoaQc7AAlQEkHlFBEORNACVCKEyWkCSUMKAFK+qCElhmlfFamkjnQpJvd0wSWNpYISnnUICqtkKjE5eeqRCYpF4X/EV1CUakrb4EQe16XVpSYLEDJxCixVwawyuRbD5RoQOqiHClZklA6scaSfYfdxiYrMbdIKLEDW8EeQMmUKEmxSW+UaEziIFrIU0Npksl1nGDuZO8+yDwoQ2liIpfpB5TMihIbm8JQwsmi1PWbnCnDkojSXE7u2HFmOwuVhRkkx1fReMSjNJ7LDANK5kVJhAkLY5342S4ZlEg0lIgti2HWTnO/PrmT2JnVjgPCAMcIQQpQMitKPEzi1QE9UFrgtwthKB2iEyJHdr6jk7mbEH8+c54cYHaSOSEqzZQx7YCSuVHiVmnCiA1MWAeUSJ440Kmh1MVsIV4mh5BOppBQlJ6UUCJNDPzixPQo8amWPDtc6jdOJirlsXFpQUmSNMCNWtioVEbIHcx3iHyAY6PSEUDJ9CgJPAlyFdxl7jM4iFIzT1KzFpQoSV3sJcquCNeVXlublbNplAwz+T766Ig07WYseTt9gFJmoCQFKB4lFETpBI9SmwaUeIi6ukJIgqvdKxAlFEQJiyj1cWGpuS82SuHhCFBaySjhgOxkFiV7/4nm5jaWJHuCJAFKKxMlLhwpUApagiRpRMnCZQbsgsyAjM0M0IpSV0SS4opKYBlqcaBEIpIUD0qKBKaIj/LD7+WrnpRIQdoO5ydT22QqG+OkfJJcbaM0LdG/tkZmUUbRzlW9z4TeYZIuSNthJpnaJlPZGCcxJLnaRmlaon9tlwulhKISY6aoxEBUWh6U0uFdAJVNL1tOlPLN1DD5wEYaowQGKIm2ln5w3EuIvdBSOMQrnpJV/RGfvZ5h8wrI0B2WnEfd4obb9VmmL8I5/iMF2ZvGpSI0lkT2MOfjPidWTWNUWL2mMQtXqWmMc4RFHjSfE7ViCTSOQSjxha/fNb2rTEt9VtFu8H8u+9IhZpewiYXSyMND01+9WypCY0n2jQXn4z0nVk1jVVi9prEKV6tp9HPERR40nxO1Ygk1jnEojWXNk/ksh1ifI+xFrq6IHWRjNpE5JkfYSD1znD3rs6pnnSoUi9BYkq9sZPX5OM+JWVMtFQ6raazC1Woa4xxhkYf4yolUscQaxxCUPpO98RI5z65eUdDHLTTAcD8h6LrbG7GDDrH5vBbmBX4zLVxfpW9y121sepTKGLfpgFiExpKaDhHaQfGdE7OmGiocXtNYhavVNNY5/CIPcZ0TsWKJNY4x0+7JHbcEURKjZN8dc0Q7SsJ44d/CFEyokfTwg/4wLKKWNLjRr4ZSzNppRSlShVVqGqNw1ZrGOEdY5CGecyJXLLHGMegT3LjFHxIlyaXbJjUPG8Gpxw4md0TlFN+DtBkiDFYRStrDvcWOx3VO/ANcWIXVahqjcNWaxjhHWOQhjnOiVCyxxjEqKq0n5BbF3M1x22jUyewafha7RjmLPcFkXVQ5w7vlYU5LTChCc0n0vR73OdFrGqvC6jWNXXh4TaOfIy7yoPmcqBVLqHEMQMnOMNmbaOGD9BPlsFSfJ9l32imVp29iD6wiw2WWnB0ucSP2zC71aXc/f45YhMaS+A6K95wYNY1RYfWaxi48vKYxzhEWedB8TtSKJdA4cIkSDK52gwFKYIASGBigBAYogQFKYGCAEhigBAYogQFK6WI33j/70hMbNty77+zH0FeAUsL2yT997/YX//6frn187aP3XnoP+gpQShSkHz311HvXbl77l3+5dgP6CVBK3K7tu/dHn/zondOn3zj84r1Pnf0IumplozR7+d2BxOyv7v3u30kP/u5v/uqRF/96QEd79/LsMjhhsMXjhNlRujrkDCRkS6f3XQvZ8/6z7ywF9DPn0FWjnTDetDthdpRmhxYTJOmNV2+E7/zh4Rs6dsPi0KyxTiyHaXXC9ChdTjQmvfGGagA6+5KucemyoU4sU1y6vDJQejfBnj/7aoQT33hPz24YMNSJZbKBlYHSQGKt8/7hSL13Y9/y98JAwCQo/eqt578l2fNv/QpQCvzyichTonc+BJQiOfHWM8/L7Jm30h0lW11F6daO+FHqKjgSCBy8JavgYCCwnf+96zC7//7HucNMf/Cp33s/0Pk03Z7atCqr8Lh3b2HWqu2uwPAW9tjHZ8MbU3jVQMC1fXVWYZe0f4EZD9zPMJb8by5E7IUGq3VdVbs/vOo1nZGc4P7HcIEa50IPc7/w0DYpVZT3RM0kTwIBfwH/qoqS5F6Fo/Tcc3KUnns+2GMlVS3iDyer2/it2zqeYpQaK7tGh091x4vSYFkecyTQcXev4zhzKkDc1A4WBNT74drhQKCAAvFQfvvo8IlTM4/2TZ4q3BJYyOthJ+QvhrW/+KqBuYLt/WPt/UqUdvjnulc9Hhml5pmrp0qPa0KJd4L/H90F1lgXAtvXZ3EYjwRsDqmivGFKXCcAABpNSURBVCcqJnnCESRUWl6S3KtwlL4lA+mVP3v+W9xOf33VmdHxvqPiu6W1N01QOlN5PaEBbsfBhTuP8Hfvf4jfrj8YoR9OfxSw5dN2zfcGG7k/KxDYy72ZH1HvBfZVn75fuY9rdPbl9xZGRqmFVvNkuSaUeCdkrkR0gY1C+exH9ez+HC5Kti8+nRus6N4tUQYsvn1sq7fL+RdKUngVDaVX/vMXf8qj1FHlUu2alKNUJf78rqKPEHsxbXFbXWkf6a0p2dxK3wHHqkrrHMJO/9YWxTRDbP/H+Q63W1wh/XDQYrEwzAwbdx76ZiCwul3eMWsDAYeFZesRPt7fHdIB7Kvm9squtzydn7ddbPQdD0VHyW6dI579leW76aZlc3FVF4/STNVRdScEVyK6wD5iXaBDYeAhtmz/llWre4MV5T0ZjOxJYC63e4cMF7EkhVfhKD0n2lufBgL/yqNUYZPeHFxXsW8RX2tlxW6KktBtKUHJaR0NRcn6+rBzprhjZsROyNGtI+P1lR5+J3nsmCpKhS/wAVzoXhqrWRPe0pu2Bz6kn/fXtwcIMyad6upe30c3FrY3HpnhzBXSAfRVCdO/JTuff/XANwuHxx9iG321reuhrLHoKPVUELK7ftJR20zfxSPjx4pGWZR8tQ1E3QnBlYgucHGEfSfc/3SgK3sxENhSNsLOlST3OU8WI3pCT9gSkKMkliT3ShWlP/35K5SktylJ//UKh9JMMPjwvcKitH/r8FijdVzstpSgNGKdCkVpN7u7yMHFzBJar/lyG78z9MOP0P5d2VzbebOE4eB+QXOGe9iR6wqc/SWNL32BEWZePLOJYVazE4i1x1XnSuKrjjNl3a6uLG6qsWAZpLMMfoJK7fFoKPmGq9vJ9aIJQvor+Gpv7mJRaq5xR3CC/x/ZBdaoCwF/lj1ALDZanfaAzS5zn/UkgnFPaLc45CiJJSm8UkPp+V8EPn3luZ/Qvf/+Z899i++xSfoWt1qtu4VeoSi5iu1sVBgXui01KE1b7aEosVMKf21JA308uo6d29UdC84zwnthchXfigfXilMD2URjLodycJptLUdgTj71cDzK0J64k75fP3xVrf25V51nmtg3Ljd+jlhkswrfQaYryic46+aTfjrGVVZWVpRQF9vra630E2pNjXWSREUpsgsB3gWKlc/vv5ONUu2TD+XI3L/zhUgkcU+YyN4TkKMklqTwSg2lV/4zEPj053Tnz59/jkdpztpP3+MzM427hV6h/0fYfqJzJaHbUjRXKj+mhhIhFxtLHyPDRR56t74tCkoL64WpsfS+lPfD/ex09FW2Hyg4uXsUYX8v/aNzz9Pflc0wFujUxHJRelVu2DhRxk0umEV5o9/2eESUGme42DNmneZqPL95/8hcNYtSa3lrdJQiuxAQXLibr+tiwHFb7qZRmfusJ4q5ktIT+vmfnXNZxALEkkK8Uhng/uw/uH0/YSdM/Fypkvditwyl4SKvMO3mui1FKLWVCkPv5naK0jrZB50R68RcEeXLX9kbGaXFu28j3IO+LF94P9hypum9l1goaBR5Icsh/whDWzO3PbD0yI3wGYb4qlt2sFGJm6r4mF55o29pijpXouYt5T9QXCyl/6ytrGO9Rd3RUIriQoB3wcWORzS89gTuv9/NzpUk93Pb1edK0hMC8qgklRTiVRhKzzzzzJ/+isalt59hjUeps2Q0FCWun1z8JIp2W4pQ8taWdoyMdfWQxmrH+FargNLUqQlnR4mL7K6yTzbX+IVK0/AU2gv3F0zS+Sk3Uw2E9YMv7wR777Dwrl0syz4yMtZxpvebvY7eR3OnuTf6j06rfXwWXvWi5eDkqewRfqJa0D/9KNvojy4szJ/KGYmFEjlW3udz2MmotWPaxg1wneR46ZiaE8L/KC4IgedEPnevjD6xPeDwBSvKhaxAFE8klLa8oChJ7pU6SpSlT996RoaS/7HS9hGHrbwliBJprBqcaLGOi92WokuU/vZtpeXbushkXUl1W6mA0nhdeXF1LyW9paK8cVqcQIV/ju7iQ7ojMGOxh/fDEYaN8rZ9S+KE52BZds5tHeOPrs5atYUOD705i0tPqXxvIr1qoHt91i3C1T+yPXf1C/n8BDWnrC8QEyX/iaqSzRShtvLyhsd4lPx11XMRLwZEcyHAz9nu/CY/08llUZJXlHqiPuWWPBFRKnxcUZLcKxWU+C/fXhG/hhN2d9aW0x7zy1By7i6vOlE5LnZbxn4Hd/ojOr/McoUfeOjxwDv7dP2W3sjv4FRdCHpihBOyL3M5plb817kfvsEG9qfD9juyJ67d+n7ALCipuRD0xJivc5UovbXiUVp6loYlhy1s//SpG89+b8k8KKm4IHlijBP/pkwy+bfMSn1LKFvpWfUckxvPvqRzEtqAcU6kJPXNNTcj2ZyLZBRKieWyvqSa+fbREy/e0LcTICHXRCjNDiUSR5b2PXstbN/f375PZ5KWhq4b6MQymVYnTI8SufrjRN7SN9649SzlRtaD1w5v+KHOHRrHj5d+DD9eSj1KZPZyQr8V/OtHbn/pr8RfVP7Nd5/a8Ed/rffPES9fN9qJZbDLaRST0vWH3h+//9TtGx45/Orp04ef2LDhqR+CjIkJLH01A947++rhF/cd/r8/uvYJdBOgBAYogYEBSmCAEhigBAZmAEp+/9SlgYyxS1N+v8ndV7hgSPXEEnRH6crQ9fTW/ojne4nrQ1f85nZf6YIR1ZNK0BulqaHFBXIzQ4wsLA5Nmdt9pQtGVE8qQW+ULl0n/gwyMnvJ7O7LXTCmekIJeqM0kFEk+f033zW9+zIXDKoeX4LuKPl/nVF2c8D07stcMKh6fAn6o5RhNmB+9wcMrx6gBCilNUqfZJgNmN/9AcOrZwxKvgyzAfO7P2B49QAlQMkYlPqsDewmKJ0XaqwkpssZ9Sm0sh6ZXd1dWVzZMOmJYNfnPOlvcpQmWH8apyRx0Bjue2yb2+l/e23ptj6Px3mipoR7TG1mc0tKXBgIO1ZvZW1bjFeI1VMhKDXWcFoEkTlhJTFbG2Kh5A3aXHXj2Mw/n/R4I1hrvTf9TYaSu7pxZNJ+0i+Jg0Z3f3BbpfV1r3ek9OREW7Hd21XXP/F6kY07tLuoJSUuDIQda2hmdVPdMV4hVk8pUfKU2su7Y3ASJ0oXiwkNfiRiBY42mAul/mJfzAFOdmZzB6ntoJtG4iMNjV7fot9HGhvZI91VzWmDUgs7QMV6hVg9pUSpezP1U+DE11pZ2bJ5XClUyh5ps1qLmklNY21pdT/dfWxb6VZ7e3XpY5OcckloCL1ovczf2dq+rbSm3+OZa6ks3z1Fd7RVldddPk5fbLdna1dtaa+nvNfjebeYPvPItpKt/e3VJXUTyz2SHbRKdlB9gLsoKjvSlmgvKiqyWqdEPVQ19xeIp7bDw7nm6S7l97U00H8TFX3NLSlxIXyAaxAq0lrt9ExVvC51les47XrafVz38D2leYBraCXUXyIXvgwRKmWPcFGp0jo4tbvCQ7f2yQZry9hY9W5OATS0svPVFceusHdqrIPTLaVTnt31s5O1zR7P8eqRadvszaONSwv02Ov/fN1TQScTgxSlSuvwTKO15ac/rW5cbpTIMbEbjhF1lFzVFSccsvlk3e6gHqqK+9QoSrPc+2nEOsXtqGEnS/X1vzYGpZguqKDUPEvN6fFWt3la6m5KXdW6dfSn9ZVzfPfwPaUVpfkSO3EW9yqEL0OESiWUajoIcVhHuB12VrOxvSpYWbfMnCcriurtbnfND3xeUtUxXTTp9dor3POldp/X73a3NtDn0Nf2ud0VfW73YDH/zGHrpM93ssq93CZ2xDEi3yufds+1VRQ1DIsodVXMKPVQQ913u2s73GNWB73jsI6xj22lM273qWKHu7klJS4MhJ3RwD2/i7Z+aXf5lNRVcyX/6PO6ys8I3cP1VBRToHSmfG5+vrZRIXwZIlQaRIl9WDLIbTklul5ZWzpl5iE3e7atsztrXqcPGlv6efFQ50iRizvc2kD/1Zxi71b0Op3/UOzknnndetnp7K10LrvdbOO64aZip/JigLd727phvgGm2amlpIeq5r7TWXvSOW0dpndGrDP0/3jFDzzOsdI2j7O5JSUuDISd0LB/idqvnU5fs5VWTuyq4XX0vrvuqNA9XE9FMQVKj/E4++TClyFCpaoouaOhRM1/s6pVqF/rqHVucXFp0dlfNCdD6fVwlEadzp4UoORk54Ih3eAMva7kq2rlG6ChngT1UCOj5Cm10Ts95fTfbE2jn7YDnXjQaVZRRwpcUEFJYvqo1SZ2R2Orneui+jahe+JBaWYdq6M8XdQnF74MESrlUKqPhZIr1GqPuSpq6Lb6zHxpJ7dn0nqR27bW03813L7N7S7X4Dr+0Yx11OXqrXSlwMixYyRkV9glylo+SveWs2rMoh5qBPdrT7pcjayXjc0u11zdNnbfwtLS4mLz/kV/ClwI752GFuHOSPnJikmX2FVTRb0u13xlr9A9XE9FMTlKnZXcZlszqWv1i8KXIUKl7P/Ocse8Okr1bWHcX2zuGR1pLRl1Vll7r7bSMNNW3nN9rJ/SvnVk0jbl7Cy/POWs6WSf2lh9+fJWq5N7NJuqAY59UxPVNxxvgy1942NHS0a5t1slz5Cgh6rmPh+VnMPFx690lI465+s3T05PTfEHjBrgYrigEpWap6jN0pY/6a9rdEpd1Vz17pXmGq/QPVxPPXbcKf1FiUq1+7nNyQp/b+VjnPDlUcqIQqiUnxo9VlKnipL0aVhWwGhLVUl53bDHWdNQVVr7U6fz1+1VJZU0sM81lpduG6OVKqkT6jrF6aSKKI2mDKUIsZu3Mc4fO9cSHdZ1xcX0Y4qgh6rmPosSddbbv6102z96nDZ+CjFqNErRXFBBib/a7Txe7XU6SnqlrnKzXf9vTqF72J6a39riFP+izpXCbNKakHCYPIS6yeLi4oKXDlunFpduuukeP50rsYGdLC4tuNlYv+Ba4gP9wtKif8nFP1qkh7yLrvSwgYTdZ71i3fFSN2kj+BY5c/PDEEmJC+ED3AJXqQXaM7S/lrzBrqJ9x9ZR6p4FF/tY/IsywIVb7+bEvs5Ve1vwczdz2kDy7qePC7Grl1hXRUZptHtmtLpTR5Q6ASWzoNSpL0qDNSVVJwmgBCgljVIy+UpqJS34ACWToJRYVxmD0vUMswHzuz9gePUAJUAprVGazSySZgdM777MBYOqN2sISpeuZhZKVy+Z3n2ZCwZV76ohP/SeGsqosDQbt/zEbDq7YEz1Zo2Rn3BdvnAlY2CavXLhssvc7itdMKJ6Ugl6o+R1XR24cC5D7MLAVZfX3O4rXTCielIJICAIppMBSmCAEhigBAYoaTBQyF1pCrlSAaCQCwq5OhVghEKuf6znyuWeMdnt8pja7UrPpfDbRI89/DbZ8274baqnP/w213Mx/Obs6Qu/eXt6w283e3qk2yeDk6CQG0cBBijkjtpd3owQfHMMg0JuHAXor5DrtTszRj3QPgkKuZoL0F+LctyZOfq4jndBIVdzAfqj1OPOHE1Tnw9kTTUXoL+A4Ggm6eN2A0qpQ+mTkUzSx+0GhVzNBegflbpB1nSlyZoaNsBlEkjdgFLcKPG/Ha+PmNLFKuNGFoaVtaVnRCm/WtF4NTFp3K2d0Y9XHVc+dlpH9ddR6/YoURJkhAULbxCFrFp9RGk3Z3N51VDaKOSqdZGi+TUJ5AZRap6h5oxECKerFFkYVtaW3m6F/Or84NbaxKRxazpjSG32KR/PWccMljUlkoyw2Cq94e4rJEMjvWhH9fSMK10UclW7SNH8mgRygyi1RCWktUFrhPeOKuVX/f3W6YSkcWOhtOBfBpS6lSiJMsJR3NeE0v7dsVVpl08hV62LFM2vSSA3DKWKPkLsxbz6LauCS05Wldc5BGXcThIUzeWPi2Iw6gMcJ786WOxUk8ada9lcXPUDNpIe3VZSfZEG/f2VFc2bL0tiuTWve4LP4WR06QvW02hrpa86tW50a4fy3N3WMVHXVf605ORlQwY4QUb4aLWPzFWc4iW7ako2t6oq5Irqs6LYrOigx7ObNkC14JTYNNzRyqD74n7RRb7p6lm112N1OivkyrtIlMilzS/WXJtArmyAm6fml1ASVXDbqu0TZ+aDwoGiaK54XFCGlVW2W1FP5ygriasmjfv62NW2okusKK59prliztOyddTRSHEQxXJZX8Tn8DK6tGfLnZ4eayW9U+Vjj4eeK+i6yp+mo0KuJCPsqTpB9tdxDTJT3DEzYldXyBVQEsVmxUp6PAutu5eWBKfEpgl1X9wvusg3HeuZp+aMjgq5oV0kSuSyzSvUXJtAbsi0+2IwKnVyKri+0sHgAEf3BUVz+ePhEd49qpRfrTzqdatK4xKfl2w+xWuyOqzDM8XDPp/LOhYUy31d9hxOp9Xtnllndze3lQy7W/Zzx0POFXVd5U9LTl62W6GQK8kI95f2lE/wErBFDqX7cvVZTgZXqpToILX9jaI2sNg0oe6L+0UXhaabL+l3O4pn9VXIlXeRKJHLNq8kk6tJIDfyAMcru40V+RQoKUVzSwbDUXIOydXpSH/RPzidqtK4V0/U11pf5xV9vCXvDrGarKyiqVzhVHrOKUFyt7bNuXms4biz6iJ3PORcUddV/rTk5GW7FfITkoww2W3t4hvEX1vS0Cd3P0wyVKyU5CC1/Y2iNrDYNKHui/tFF8Wma2x1djzm0VEhN6SLRIlcdivJ5GpSNY2Fkp0TyQ2ipBTNVUWpW9GWnzTUOp1q0rhTm/ePOrd2CHUv6R8quh6GkvI5rJ2sG6ny/GDbeKlTQomeaxfOlXRdZU/TUyFXkhEmR63SIh4XG0sfi4aSWCnJQQkltvJi09hD3Bf3iy6KTddd7azr0lchV9FFokQuu5WaMzGUNrdTlNZJKE1b+3mUBGVcpWiuGkquEaX86pV1NpeaNG5fKfG6rfsFidySfk6TlRXHlYnlKp/DmqP0xH7XTPGJen5fyLmSrqvsacnJy9rkAoJBGeHR8raKGWlVgRHrRND9MPVZsVKSg9T2N4rawGLThLov7hddFJtuvnS4dEZnhVx5F4kSuWy5UnNqEsgNQ6mx2jG+1RoUVH5s6+hcz1xQGVchmkuP17dFG+Do29Kzv+q6mjTuJevJq13WDkEcqqTfubuqf7zZelkSy61rdSqfw5q7upSOWXXWU/y+0HNFXVfZ05KTl7XJo5IkI+yvaeNWpaCNMHVqwtlR4lJVyG3YfZWaS6yUWEkpKnFOiU0T6r64X3RRaDpnY+1juirkhnaRKJFLm19qTk0CuWEoTXJStUGUZlgxW0dQGVchmlsyGH4xwGkLifDTpSfUpHE9J8vLG+plKLmay6uOWMcksdy+ypDnCELl9N/rVocSJfbcE5tHJV1X2dN0lOqSZITbqn3EUcJpnI/XlRdX96or5PIfZUbFSokOKlESm4Y/Oiq5L+4XXRSbrtvapatCbmgXiRK5tPmDzalFIFf/7+DkA9wCF2pZkVUVaVy6i7AKstz+JS+nyTppnZHEcr2hz+Hj9yIntCu8rPxc/5Jb0nWVPS05syWjkLsgSOIGK8U7KAjkCk4Fm2bRzQ5/gvvifpmLXNONrpvWVSE3tItEiVy2+aWaaxHINUBAcCiJENBdlWbaezadBQSjOzjLD39R7VidoQKCCUnkGoWSLcFeG7ZdHa5OP/1T/VCK7eCsIBAfzbZ2GoxSZ/qgNJJgn/XXFFed9GVwVIrtoAaURoomVg5K9kS7bWFp6RNnBqOkwcHF2DVadBqLUiISuQahdN02A7KmK0zW1CiURjNIQXDsIqCUOpRmZ/unMgal/nFQyNVcgAEKufb+qcyAaawfFHLjKMAIhdzZEduI3TYs3YZtdrXb4IjKrX9M5XZxXO121dandusNv03aesJvs7bu8Nt1my14uzgOCrlxFAAKuaCQq1MBoJALCrk6FQACgmA6GaAEBiiBAUpggBIYGKAEBiiBAUpggBIYGKC0wkz3dSZCF+LQVIB4EqBkZpR0XmcibCEOLQVIJwFKJja915kgoQtxaClAOglQMrHpv85EyEIc2goQTgKUTGwGrDOhXIhDYwH8SYCSmVHyG7mKhfYC+JMAJVOjZOTSAyoFfPD2my9/++U33/5A7SRACVDSitLP3vy2aG/+DFDKLJQMXcUitICffFtuPwk7CVAyM0pGL8QhL0BJEmUp9CRACVDShNLP+IHtX//r01/8Lc/SzwClDEIpsv6xra6idGtHzNU9oq1ioSyAnyfxF7jf5rEKOQlQMjNKEfX9Gyu7xv+5qzvmkgwxFuIIFvABH4l+/ubLL/8k8P/4Bx8oTwKUMhGlrkon8fmIXz+U3g5Okl4OfMrfeRtQyvwBjlvNgzXZ8hKenq3Fm/cHV7yIb4D7fhClNwP/yt/5PgxwGY/SjLSemWx5iani111j9uAKFPGh9LJE0p//xy+EBy8DSpmDUoSFIuzWSeGebHmJ4SKH1xdcCSP6IhNhBQRJ+tW/S1gpTwKUzIxSBBW2KWt/UKRUWl6itqS+V7YChRbtzWABEj4/D0jXvF9WngQoZSBKnoqjQZSk5SWW+htL64IrUMSHkjRX+jQgBajvA0qZg1Ikpe6TpaPSshbS8hIu38KYdVxagSKmyLeiAOkTXCCI0tvKkwClDIxKTndtabv90imbfHmJiY4r0+0ls9IKFPFFpQ++HW4fQFTKfJSc5OS20vJtp+TLS4yyS2j0BVe8iA8l55thUelNJ6CU+QOcy+VfWFpc8MmXl3Cz62R4ZSthxDXAuX4WhtLPXDDArYCopNPqCfICwjIDnBCVAKWEUAph6SdOQAlQShAlpyKL0gkoAUoJo0Q/x/3t91/+9svf/9sP1E4ClMyMktELcQzEcxKgBCgBSmAGrDOhXIhDYwGzgJLZzYB1JpQLcWgs4Cr80Nvspv86E7Oh8hOz2k8ClExseq8zEbYQh5YCpJP+Px4VIZVX7+5xAAAAAElFTkSuQmCC"></div><span class="fig">Analyzing the spectrum</span>
- <p>Move your cursor above the biggest peak, and the current pitch will show up below (which is <samp>C3</samp> in this example). If the shown note isn't <samp>C4</samp>, then select <samp>Effect</samp> >
- <samp>Pitch and Tempo</samp> > <samp>Change Pitch...</samp>.</p>
- <div class="imgc"><img class="imgc" width="375" height="371" alt="tut_snd3.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAFzCAMAAADyj7naAAAC/VBMVEUAAAAICwcNDwwSFBEXGRcdHx0iJCEmKCYrLSowMi8wNDYzNTIyNTczNzk1OTv+AAA4Ojc3Oj04PD7/BAU6PkA+Pz08QEL/ChI+QkRAQkBAREZDRUL/DxxCRkhESEpHS01JTU+EPj9LT1JOUE7+HxpOUlQVX7ZRVVdTVVP/JCT/JStTV1pWWVZVWVxXW16NTVD9LypaXmFcXlv/MjJeYmRgYmD/NjphZmhlZ2RkaGv+PTn/P0FnbG5rbWpqbnApfNpscXP+SEL+SEhvdHZxdHH/S1Bzd3r+UlA3hOR2eny5Z2l4enf/VFh5fX96f4H3XFb+Wll+gH19gYT/XWF/g4X2Y179YmGChoiFh4SEiIv/ZmqJi4iHjI7+a2vzb238cGuMkJOOkY2OkpX+c3SSlJGQlZf8eHXxfHiWmJWUmZv/e37vgX6YnJ79gH+bnZrshoH/g4KdoaSfoZ7qjIr+iIn5i4mhpaijpaKGqtilp6TolJCkqaumqaX/kI6oqqf/kZX6k5SqrKnmnJiqr7H5mZatr6z/mJjjoZ2tsbSvsq73n5z+nZv9naHeqKK6s6z/n52ztbL/oaT8o6Pcraz3pqO0ubu2uba/uLH/p6i5vLj8qqfDu7TctbL5rai9v7z/ravXubL1sbDHv7j6sLG/wr/VvbrCxMHQwrzExsP/tbb6t7XDx8r2ubX1urzGycXOx8DOyMfyvr7/u7rQycLJy8j7vrr7wMLUzcXMz8vTzsz4xMPP0s7/xcfX0tHyy8f3ysfS1dHS1tna1dTV19T/y8r6ztH10NHX2tbw09L90M340s3Z3Njg2tn/09L61dbj3dzd39zx29fl4N7f4t7429n/2tvi5eHp4+Lu4uL24N3l5+T/4eD54+Dn6ebt6Ob65ejp6+jv6uj26enw6+nr7er/6OXx7Ory7ezs7+v/6u3z7u3t8O307+7v8e728O/w8u/87/D38fDx8/Dy9PH48/H59PLz9vL/8/T1+PT4+vf++fj6/Pn//Pv8/vv///+DMaq+AAAgAElEQVR42u2dfVhbVb7vKVVHd3mxIVYmnpLeKAcrwlXLDH2TwykeerkO3k5lREZ6xL7ZOmm1TE+56NNO65R6PB19Mh1FKU6q7TOIHQccH6yhGU4zUE17wmmjYLC0QdrivvGPJDYpS6APz3PX2jtrv4S87JCQBFjfp032Xmtl/X7rwy8rOzvrJQEQxUIJBAHhTrgTEe4zmLvb3dfRGmfq6HO7Qay8myrjXL0e7ufbr46Nx5XGrrafx02PundTZZyvl+Xe1z7ar9V3N3RI+Wds6IzUv84Go79/RuNoex/A3o2A4WgKjEyNcb5elnvH5Z5BmzuuNNRmHegAHu9A1M2DKTKO62W5twLtoDveZB7+CHi8i4H1qTLuqdfD3W28HndqGG71NN0dA+tTZdxTL+auj7twhy5xTY+Fpsq4mHtD/HE3zQLu17qvxZ0aruGmx8T8VBkXcXfpXXEnvQs3PSbmp8q4mHt9/HHvmgXcHd0OsYooKjmzmnYE1tVB8flA8QLlvgBFmYesLQ5JqnfgpgctGthbqQbFCmpcSxX5Ss6plVKvh7tT5xSruNze/1v5JmdgVRWJzysL+t9MNvsvyjxs0jolyeDETQ9aNLC3Ug2KFdR46YOyQR/JuXuk1Iu513u3pNLlAjvSg/i2qVh8nqNxueVt/osyDyNuaQ3vCoF7QG+lGgyN+9CCv6drwuU+oZ8proAPOmrAkVO3TK51DFYq0x8bcDgacuYvqnTg0y3w7V2G05CW1dKVWZ63u4+ibHn0RszZlCfLbnI46EplRvmiTmEdk+lnfHtbVApTtxQyBj1JxbBruEyVwx4xuSvMfkajulZagvqV6jx5bgv/nPsSa3hrgYR+xtHuqyX1GU5HLvXS3686HisasOSXOfpSXrIZdQ58OrypZGwEpyHtoJQlVvbQV1HmATnmWETprGULBx0VOQZzCWUU1sFJHyL3Cd42pMMQyNUwBj1JbypoRwOlhIUzXWFyL65yvLkAfl7lUm39lfI+/vklRz204nhQI4G7vd4uVnGFfagta4fdnlsGXPb+JIvTqcuw65PMThd/al9fbMdpSP3FVP6Ik63AV1H2Ifcl+P+3LqeZ0ltT4PWrjTIK6uBlsOOm24PJt7e2BU12k2wQGcRJ1mSdvVwt09vLK4PVGcS4FVYyOL+BbQpQ1fDPL9mHZM128/yBQPV6uNNGWqxiikpaVOOm6dw98KyFUiqVGTKaXiYr0gpO1xfTOA3psUK9vJa2FXTTtO+izEPuS+x/p+yj9mQHTV+mugR18KqncdPpYPLj7doKekcJYwwnOZapaZWxeAud1RSsziDG6xQDAwPLStmm0KUVoueSKrqm0BGoXsy93bsla2kwOuyhRHdRg6OjY6M0PdZSKi/gTxmObBqS4s+uZtmu2izmxFdREXda1tKedJXlztfBqz0E7r69bVpE57/JJHJJuwoMmY5/zzPJ6TC5F1CMMPf1ouc3s+mCV2kJ3G0am1jFlXb2IHcPfBiS13rSXSNGysSdri/i0tDBwgabq5mi/uy3KPOAamRqlbUMJGltNivVJaiDl8GGm24LJj/e2hdq09lELsks315ps6ZsLwpaZ2DjlpS/j42N/T/of0YuPM3ScM/IhSG5foE1YL1++5kKzwHzzqXV6Q1XjS10T213f7VsAJ/StYrOPpwGVZ7V3vdbiipDx76Ksg+oRqZWWQu9VtVsKqM6BXXw0oQQ7z69pemKRY95EnGSPVv+Z5peSe0LM95fWuRET/lldCal/bJKSXPPK6tgekl+IS0l3mld4JZcr86ULaqhDSsVKdlN3ClNF8pW4jQoW3m6fJm+Z9mX8NhXUfaB595M28oUmRspo6AOXvpJc+dstlFaTyKXtIlC1KieMLnnVzFP1QuHcosz5cvM0IrnWbsIdpgNVB09qX5mBHgOxtzMkxt2j26bfWR0dNTJncJiYyNcGhQYHRt22keY97iPouwDOmNSxpzoFaOWJKuwjsn0M769tdmcTKXMIU4Co8yJLcx+xmMRVpS7BzbabuOenaidhuR+m6R+pouOmepVvtND6GemQlKNM5+ngmdGW1fS0vqZttgw12v69Nl7fOfppgn3WvEzo5w9ErlrYsO9OXe+aofLd55h+nI3JPVI5G6IUSczMjZ2jZ7W/cyIS/zMaJSWxv1q29W4k+4qbnpMzE+VcTF3TfxxN8wC7gOGuMNuqR/ATR+IgfmpMj4g5N5x/nzTQJxh7zGcx0PlzsfA/lQZP98hGpc6oDPoNPpg/wxtEfhnbJbyr6F7gB8aGv2YmCrjA6Jxqbbuo91xFu8D0CUbiJF3U2Wcr5fl7rSdb218K67U2Hre5gQx8m6qjPP1knk2ZH4T4U5EuBPuRIQ74U5EuBPuRIQ74U5EuBPuhDvRNOKuWZkhz6kFuXskv6KYopKzqt0AZKkBsNF8hu86uFL+TPBVSPQF1ThRKnaIL9U1LbiXKusM+j31IXEvs/btk28BoEoLwPriYNy5Uv5McFVI9QXVOFGDVuumPKvV6p4O3DXKy4GY+eZeAR92pHtBC1iHJO6T8UWs7fnTpZ/J3IeZlebLs5uBo1I1P7MOnavz0DlwVSmVFSoTzFAq1g7y3HXUIOKjRnPN4F8hM73AjOtARSBKGwXLDSabuFI4263OXABLg4VNsJoUXEUIvqC/i3eagDt2NXdrnjxHV50lL7TAk5o8+YM63nhsudNJuDdUUm19ZQsdoMZgUqNEfF6ZrTeWUCZQVmTpyS/juTcsZOOSCVZ1tq5HM8S9Boauwg20lBIWy+RL4exNOQZT4SIH5o7jXbovqEbvNAF37KqS0lmKqXKjMesx6CvV3FMht3LGY8vdQA3gGKsBwEwZ2E+oOpYpPLelwBihKdPlpB4AWjIwd5c+q5rn7pK3edVhTdaDcrXMACoqee6ebLsMVjmUrvHmLtkXNt690njunKuoiI6CsV6dyZ64Vbs447Hl3k/phH2zrA30VxflU7XcuSEZfkzZKZOOndmFr2eSFu1w89yNSS5RHVDLdgCVsWg7yGoScBdUCQq2enOX7AvHXZjGc+dcRUVsKEvr+SOAkkrOeIz7d8VWcVuHVJWGwewa7lyf5GTaZaT6+c/VUqudew2CpktyeHOvLjBmglfz+uTOCdz1TOlCtTd3yb4IuXNpPHfOVVTELuJeWsUZjzF3tdwkamuzHD5RVdz5YFITEzRO+T7x9QzHvQhFaos3dzQBDFhTthfypURVupVaoKr2cC8KzRchdy6N5865KuKekYsu/DWc8Rhzd+YvqDEYX23A7eiiavo1gvc2KFW19ZRD57cqtC6zbiL3WoV5CBRmdw02DAq5g2w5vNhYRu0RlMLZa1U6S3muG5Rkm005lCczFF8E3Lk0wecqdlXEXUU19W9SOjjjsf7e5K7Ok6fn1XHtUCvSiwsFbaXXKjI3Qefd2zNli2oncrcVygqAtUQhzzOLuK+nYNt2UX2CUjjbVp6hKIF9gWWlLFst92SG4ouQO04TcMeuivsZZt4Y4IxPh/szliRb3NwZ8eWLFP8m/V0shty1qvi5I+XLFyn+TTfuXfXWruza+GDuyxep/k037m25sswdcRLrvnyR6t907GeICHfCnXAnItwJdyLCnXAnItwJdyLCnXAnItwJdyLCnXAn3Imixj3EEelEkeIe2oh0okhxD31EOlGkuAcekU40VdwDj0gnmhruwUakE03N9UzAEemtRBGTiLuEEelEEVHrhP6d4+57RDrRFHP3NyKdaGq5+xuRThRp7q0EB+FOuBMR7oQ7EeFOuBMR7oQ7UTxxv37lwoXecyc/OXbkINLmdY+v+efHH1+eKtCKVWlpi594fMNzm/f/7o+fnOy9Rrgjud19HSHd/Hz/T++89trLLz7/7L8+seSBOyHYtBVrnn722eeff/HlVz48dfaz/+rtveBwOC5AnXkH6g+vweIvv/z888//6+oVi1PTXvFZ60edA1Pirbfz7777hz+88vKvf/0rqL2+wmTJ8rS0e1av/j+/+MWzv/r1i6/84X3/vobH/Xz71bHx4Pru4lcfH3l753P3pEHSaRt2/v7YidOnz1389vsxpPHvx769ePHzlz/8r96TJ09C9L0XLvWeeXdgTErVSDfo9i8j6C2vsR++/ers3z4+cnD35lUr/gGFyeoNOw8ePHLk4w9fee/UZ3yYnHnnzLdQF7/66r9Pnz595MiR3etWL0lNO+vf17C497WPjoBh/7rWe+rE/m2rmVhYvOaFgydPXbpybfi649znJ44fO3b48OFjxw/u3vnCod179+49cODZf9u8AWvFEtTOO1evXr3uBdTO0+fOXQzwdxhtHwjfW06Xej87fvjgts1smKzbtv/w8ZMnz/ZeuHIdafib6zA0el/+Cx8mX7zzzXdjUsOE9TUs7h2X4ZvXp66cO3HoOYRuzYa9fzzx+TnoM595/bqvl4CBDkHN9PjY2Hcwgi5ePH36xAdv/2bDA/DP8PTOA2//7ezFiz9MaAzdGY63Hk0Ik8++ueIA13yGyd5/e3YvFybrVqwIIUwYX8Pi3jqxIdcvnTr23Br0kbjtd8c/u+BwS9fwR3zNH010+ofvv7t4+uPdu7ctuTNtwwtHTl/8VlDmRuukvA0jTLy9lR4mjK/hcXdfF+gadH4njJb71h08fuqS43qoGhbYbw3Y7V48+/GR55ak3rfhwKHTHvqtoXrr8fnCqWObUZgs3wad7qUj522AMIkAdy5gTh3csAp5f/jUBfdkJZW7RxfPvr3hztS0X75wdkwid3GvIg6TqfN2QphEiHvviUOb70m9Z93vTk4e+WS4s236eCfsHjZ88KeQuEciTEL1lg+T98Pmfu3CiUOPp6au2vne51euha1JcEf6/pOnU1PvOeQI7i0jHCYHT16IureeMFl37Eo43D97HvaM9207fsEVGU2SO4qlA2mpq37TG4S7yyUIk5h5+/0nkNri5x2T5P75YfjyJbtP0a6IafLcx8ff2Qy9uRDQ49cORTRMJu9ta+9uT5iIubvL0zMDj8m79hl8a9/3wiu0Qyhm2fUax6TlqyWjG2+fO/fenuBtuQDfv4vPsa8WDt33DpMp9RbJNGdfMF8B6H2CCRMx9z1ZPRZnAOqOY/BV/3LcAVqdQpUoXzX9ve5N56TlqyU3ljZY6u+6LTh3cBBeDf6GfbVwCDkfJk+fpKfaW6Q7EiRwB+8yYSLmXlkaKNaHT8ArgTUnUf8k4l6npIHLBdyRb8m4LaE/OPdDkPtBX9xxmETH24233SaFeysTJiLuaykqORvkalbKtdwy5/wa6F/shtdfx6+zLxC+7zL/XfJbdCPFaaOEd+64IXE0OPe9sCE7mRezQ/c9rvNhEhVvzYkt8yRxZ8LER7znUrv0NLfMObcG+v+8JzX1hSvYnsANa1KX5JaArbghahC0JTdcTXfsCd7PHEe3C88K4p11/Rs+TKLi7R1Lx6VxZ8LEF/fH4AO3zDleA/3S8tS0g7w9Oy+Ya5cs3BQ1EKb6bklNQsJNG4Nh/+FXP+XCneXOuv4/7uPDJBrebpw7KI37i0yY+OKOhkRyy5zjNdAPpKb+dJi3R/Pqo1po6RpWo4ZsHRYl+utnLE8m1AVuyX+jm4grDl8TcGdcv/SAIEyi4G1P4pZxKdyvHHqACRN/3LllzvHaxL+EzQM+uTsWbgqhJTTqhL0aQvu/Ir73J4HacfY5FDyHr3CvRtwZ10VhEgVvf5KQMGcO/G8KzP0UDhN/3LllzjF3eGWQdoq3ZxNoh9xgC0Fg61bgleSf+0OP+P/qffoJdDvxZeFtAjR0n3F9nTBMouVtsHg/+wsuTPxx55Y5x9xP3QkvhHt9RRBtz19QrevYp5EcQ8A7xVdLjEvrzaanEvV+2vDVIRQ6Sw5+J/quzQzdR66vEIZJFLwNzp0Nk59+8r6P+zMC7niZc24N9FfSUlNXfXLFR0tosCtPviBvHz1p+WqJ9dFbE+fe1ez7JtORFeinoXWf/OB1H5gZuo9c/9/CMImCt8G4s2Gy+MCF0O9HXtq7GJI/dmXCO9dmc4+MjY64bJNWKHc8vj/9+yUI+r8c/GoswO8eJ+/jwySG3orD5E+Tuw/cexhGUdq2Ty55RVDYktiSsW9P/35dGuoj1x37akxwbRYkTGLjrY8wmfTvHo5TB+GXwNQnfvXXL65GtSVj6MeDxQj5mgOnRb9btgYPkxhxnxgm4fzeNHziAPpZMnX53mOffx2Flnz/1d+OvPAAQp66ZvcHZ3/w9V0kSJis3h/RMJHA3U+YhPs735XX/mPzA8xfcs3e906eCbtRvloy9v3Fsx+8jX6UQ3Z+tu3I2e/G/H0HlBQm70UqTAJyDxgm4f++evXq1a9PffjGNuaPmrr4iW17//jhqTNfXxVo4KpkCVsy9sPFsyfe3vnLxSzw5c/93h9xSdyR3v9PrzAJTz65SwqTiHD36OsziP/TdzIG71y1btu2/W8ce+8vfz115swXl6U04+svvnj33MlPjh86tHPbulV3prEjDtNWbTvw8WkfA5UmwZ3xNnJhIuIeUpiEz32Cl1+fOXPm8w//+B+bf7Z8+fIH8HjNtNT7Vq9e/QQaWrV574YNz6HhVsyYq51oyNXPVi9fvXyJYHjnff+8+RcHdh/44G9nv5c8RLI1NG99h8lfmTAZkBYm717gwmT5P4QSJuGPW+o4H9C3y1+f+fw/P/zLh4ffOLR/7/79+7dtRnpi3dObNz++5meb1yBt2Pz05p37YfYbh9945dy5c72XrnwzDEAnHdpPlpLG6U30NkJhsm5DKGES/ji9vvaBqxHTQHsfX/NAe0gjd8faL4fvbWhh8uIbJ7kwCclb1tewuNu6j3ZHiPwArEq4W9iXn9I3pLZE4jjsuPA2IuOwnbbzrY1vRUSNredtot/SBzqlzwjovDx9vPX4SuY3kXllhDsR4U64ExHuhDsR4U64ExHuhHv0NdDx0dSvOStxgYRZxP3Ldum31yYviTfmZg/3gfbR8ahI0gIJs4d7Bz0eJUn54WX2cP9oLFrcb7QS7oLWjUdNhPts4N6zVpmiLPHzmeK9C1QgaaombJqDzidOpQ1Qob4oAPe6WzaO33hmXuItz+AU3V2Jt2tFB9OGuz2r1GDRoZ0pfMl7F6gAcqvqfXKfOJU2QIX2jCZ/3NvuuDlh43jt3dqeLQmeSWrGxGd6npyjExxMH+4tKa4gJSRy1yrdPrlPnEobqEJ1oT/uSzeO3AXjHR3e/5AnCT3f+5DgYPpwb0ZTEZAclUrF2kHhPFcL4HeB4mbBqvOYbaBwaW2uTFXFvL60EuBNohyVqvmZdSx3diqt50/DFGYr5MzV5Mkf1HEVmZIvu3Mq/PTvd3kmBT58P/s8VwMf9iUKDqYPd1tWxvYedFBWZOnJLwP8PNesxwS7QPGzYNltoDylrSk1VoOOqejBOsDl1hhM6qQu73jHhZkKsblcqrmnQm7Fee75TaBAHYT7vKeYJ5DQBR/1CS7uYDp9rg6qFyYV68HlJEi/JQNw81xBdSbPXTQL1kwZcGlDkhnXo2gWbxKlqvPmjgujCkXm3KpdXEVZtf6vZzzc6xJt7MRqZu69JaGHO5he15HO+rwUvY5SKpUZMsDNcwXaDJ67aBYskLXh0u58WTH7SUhTZn7TnP7qonyq1ps7LsxsbyQ0B0oquYqWqYNxt9y0hT11JhjQDPwEwB1Mt+t3V2aVkernPwvt3txFs2AhWa40aC6VMx+FNkrPcR9SVRoGs2t47vZkqBZcmNnOS2gOlFZxFeVWB+E+Mu9+fJ6I5iJr5goOptv3pvytTvk+f9yLvGbBQrJcadR9UMznQ0o9x71ZDp+oKl/XM6gwqpCrICMXdS4ariJFXWDuo3ffzoX1Q/eiib5LBQfTh3tbudZk3CTrAlsVWpdZ54M7N5UUz4JFPYmn9MC+HrpGxowzzK3muHdRNf0a1M+srHILuOPCTIXYnIpq6t+kdOA89LYpDPC5euP+Wyxut3t8/G742aqb85RlS6JBcDB9uBvLM2WKlehKYnumbFGtD+7cVFI8CxZx95Q2FShSsrVMRZVFfK5akV5cCOvSLioUcMeFmQo5c8WZ8mVmLq8p3eXOLvfPvS6BUc+N2x6GCdrbE+9oGRcezL77MwaZdTIv8/qqVVpB7ouFqML14XM3yc2Ee4gyNYTP3aIh94Gjo2D7fn90I1rYye8eQnWS3/liohCnSU1ekiZYzR7uIU2TIuM4IhnxndHYLLvzMiDcp8cvv4Q74T5buRNFTwLuRNEW4U64E+5EhDvhTkS4E+5EhDvhTkS4E+5EhDvhPou5FzPbFBURHtHmXmaFogmPaHOvIChiyZ3dExFP3nJVKTPKlSawsAkAXYpgDplnlhjYkZleYC5CI3e3FxKWk+pnhqDcnj0R8eStymy9sYTiufNzyNh5YOpsXY9mSKNws9PDiCb5udrM7omIJ2/ZUnRoAhLHXTSpy0wZXPI29FqbrA1Y5l8mLMPpZ9BwTzx5i5kVZue5iyd1ydqMSezc4eL1YE8B+W18Mr9ri7jjyVv6JKeIu3hSl6xNl8RujVefDQpINyNV/rnjyVvMrDA0N1JVzXAXzSGD3PupFubUJjfIrQRo2Ny5yVulqraecsi9JNtsyqGAaA4Zmo9UmN012ACvb4qXFRCeEeCOJ2/RaxWZmyB3y0pZtlounkOGuFtLFPI8M+xoKNLNTI67f9nxAhABZEwm3UwsuKtXEpyT4t4aHvecPQRnDLgbkywEZ6S5ExHuhDsR4U64ExHus4V7fC1zH6+L7kece3wtcx+3i+5Hmnt8LXMfv4vuR5p7fC1zH7+L7keae3wtcx+/i+5Hmnt8LW8Uv4stEe5xzX3i4vfBW4qWuXc+eVviTUtt4uXuRx+9mVnlHmeyRcNrqe+1+DlvePu2pT9KvK1ufHwpWs7wZk82TsQHvGeT8sbzox3VFjb3iYvfB+POLnNvfbjJsm/eveLl7h+9tanrkUQLl8kWDY+77zXhOW84+4O3LG0xVjePj9//qNvt9qycyiXiA+xZzLlPXPw+GHd2mXtGLYni5e5vResi3/IqlykoOlXcOfuP4sWB736Kr4lL5A48nsWaO7v4PTtmkltBX7i+vs8eFcPU3Cpe7v7HS+EbOtEozAyXu3hxfz/9O7J/E97F48db+Awu8SbhHh/Y7XC4VycnJ1NUX3jxzo6Z5FfQF6yv75/7DVv9vCbRcvfjTYkPbbmdAc1lRibesWt+uEP7IKHl7sSbkR/zEubcvNTqWX/fk8jnCt2eBHdmkOmQJ95XPhZmP8OMmRStoM+tr++f+88TEn60T7Tc/fj4kwkJdw2OCzMjwp1zzTd3ZN+UcEeDrS4R2mw2DmlvvZ3pf7hEPlfg9mS4U6wY7nULreFyR79ai1bQ59bXD9DP3DA/nKATLnc//tBdBuP9cw3CzIhw51zz6Q1jfyjh5/DwEc8npomxzScKc7Fn4fbv/en1IBLcRSvo2yVwh7rtSeFy9yZmV4e77xVkRoY755ovbzz256AefMsdwoX3BYniXMazcLkXF4KIcBetoC+R+7wtwuXuWxJQt/rzH/OZkeAuXNzfhzfY/t1ocf1HPCvsW5j9VASJolzWszC5axdYIsNdtIJ+UO7aR7Q92ofn9guXux+95Y4WSw181+PMSHAXLe7v4zoS22+a84xlX6J+3LpUa2medzd7PYkTuQOBZ+FxH1TuAxHiLlxBPyh308M/mnPTvQbxcvc9D900B13D48xIcBct7j/RG2x/fLx+XuK8hnH4zeiWObc86hpn19/3JHIHAs/C415DpUBpyf0Zcl+McCfcpz/3+FrmPn4X3Y809/ha5r5z1vzOF1/L3MfvovuRH8cRV8vcx+2i+1MwbimulrmP10X3yTg9Mj6ScCci3Al3IsKdcCci3Al3IsKdcJ9ixfFkppnMPZ4nM81g7nE9mWkGc4/ryUwzmHtcT2aawdzj+kdswp1wJ9wJd8KdcCfcpx33YopKzqp2SyzNTz7VrMyQ59R6Rh5Pnjs7H1Z3FzNNVnAw7jNVlD3NuZdZ+/bJt0gszU2CLFXWGfR76sPk7pkPa0x8pufJOTrBAdLEVFH2dOeORoDvSA+Ru0bpGYcSHnfPfNilaLrsvQ8JDpjMCami7JnAXUcN8juBMHNf2X1AvLcHYSefQmXiyRG5pfkow1Gpmp+JVnrG+4i4qpTKCpUJV+DOqfDTvyPuczXwYF+i4ABpYqooeyZwb1jI7wTCzn1l9wGZsD2IJ97ppC7Py3FGjcGkRon4HO8zgisoUPvnDpjJS/oEF3fAzlX1ThVlzwDuLn1WtWAnEDT31bMPiPf2IJi7gcL3+XJr2AwkVR1XEO8zwlXg93oGcjcz0wYtCT3cAcqYmCrKngHXM0mLdri9dgLx7APivT0I5t5P6YCgf4cZ/dVF+RS/zjzeZ4SrIBB3ZwKan2RIANwBypiYKsqe9txLrXb0LN4JxLMPiPf2INznqmKrmPuQqtIwmF3DneN9RrgKAnFnJ6dq5goOuCmrolRR9kzo3wHw2gnEsw+I9/YgzORTJLXcJMpolsMnqoo7x/uMcBUE5P4Qmpn8k6WCA2ay+IRUUfYM4S7eCQTvA+K9PQgz+RT9QfIX1BiMrzbgjC6qpl8j6Ge4fUZwBYUBPlfHdXOesmxJNAgO0FzViancwUziLtoJBO8D4r09CDP5lCldnSdPz6vjMtSK9OJCQUG8z4inAnd2eQDu49rbE+9oGecP2Lmq3qmCA3J/JoAsSTZyfyYG0qrIfbFoq6ve2pVdS7hHW225sswd5D4wuf9OuBPuhPvs4h7XixHMYO6dZJxeTBTXixHMYO5xvRjBTOYez4sRzGju0+z6i3An3Al3IsKdcCci3Al3IsKdcCci3Al3IsKdcCfciQj3KZUbbYxIuEcfOivCPZrUHedbG633vtwAAAWmSURBVF9/vbH1vCNm5Gcfd7f7y8bWL903bri+bG38MlbgZx13t6Oj8Sr+mfpqY4fDTbhHA7ur46hgJbKxox0uN+EelU5GNNBmrLEvJl3NbONu5zsZ3NXYCfepD/fu1jGxxlu7YxHws4y7q/X8DS+db3XFHff/+48zTbuc3tydrx+NwjizvpC4/+M//a8ZprrhUS8Nv97dfX6q1d0667l79e9j8ch9BvYztDd3+vWP4q6fmXmXka3d3v1Md6udXM9MNXdn59ERLx3tdBLuU34d2d/YJ8be19jvItyn/HuTvbvRIUxxNHbbyfemKHQ0/Z8edfLnzqPt/U5ynyAaAd/3aSN3cdHX+GmfndwXi0oPb+/paDzafdnhuNx9tLGjx07uA0cLfL+xnf2dr93YHyPss/J3Pqet32w0GIzmfruT/M4XRfBul9Nus9mdLjf5XTvK5Mk4jtihj6V9Mk6PcCfciQh3wp2IcJ9R3ImiJwF3omiLcCfcCXciwp1wJyLcCXciwp1wJyLcCXciwj1euLs7Gt/i1NjpJmyiw73z0xF+budIaydhEx3ujcPCSbWgkbCJDve3xLOZ32ISZU3osfZBXy/Fu5BnqSemBRAqgl5io33l+kgVJvmyKZSmKrAn+qKZw71KGzJ39BK8661YPlKFSb5sCuRW1Qf2xJ7RNGO4B0vzUyQs7n6kVbqDlFQXTjPu2lyZCr6JHZVKxdpBtmWl+fLsZraFriqlskJl4tIAk5RRrjSBhbAKXQp8oWp+Zp0HCPyvpqjksqJSmLCdQcHWz6SCXM1KuRabYpPAjsz0ArPIZq46jznGtqFKKzlHUQm3OnMBfFFxMdquuAKAwWSTKfnytOJuTamxGnQAlBVZevLLmDwl1dZXttDBtLAyW28soUxcGuCTPNxBjcGkTuriuDNhrFHA+HwQ/TVw/Uxw51K79DRniklSZ+t6NEMim/gYGwJMVbgiVGJTjsFUuMiBrGgpJQANmcA9v2lacTckmdHR5aQeAFoy2HivAcBMGVALbSmwpTRsO04DfBLmjqSqE3O3ydqAZT6KQE/9Hu6PCU2hJJe8zdsm8x8ec4agFM1cRTDXLoM5Q+kaa7IelKtlBlAB3w5ZtdOKuztfVowAUkqlMkPG96AQHHw2JLuZHd+5NMAnYe791UX5eNNszB0Urwd7mL2ePfV7uDO70GNTKMmY5PK2iY85Q4i+masIewUKtoJlO4DKWLQdZMGMZerpwD1Dw3wYITTNpfJCYKT6xZ9xLAN9ktObO5fk4T6kqjQMZtd4ca/PBgV1bHVM/QLunCmUpEty+OPOGUKduJ6riPEKvahQDaoLjJng1bw+OSyZWz0duK9EH3ygYBNzYqB6nPJ9vrgPJjWhVgu5c0mqaoZ7sxwmUlUC7uhS2iY3yK24Qlg/m8rUwplCSf1Uiz/unCGolHquIuyVW6kFZvn2StjxMx/girrpwL0teZPRWKUYAAP7eugamQ1sVWhdZt0EBqWqtp5yEXcuqSTbbMqhQBdV069B/czKKjdTrFZhHoIdzTJ2S3lcP5PKXgNiU0xSYXbXYMOgL+6cIcAEM64ImVmr0lnKc2Fnky2H1z3LqD34LRH/9wma8xZkFMNPKlOBIiUbfllxb8+ULaqdwJ1eq8jcJOaOkywrZdlqGOxqRXpxIXyldlEhU8xWKIPI6yk2/nD9TCrLHZtikqwlCnme2Sd3bAhdQxVxFSEztvIMRQnqrdZTEP4uqg+ApnRXnHHvaAUC7K0dIVdlSbJN+HrI4gggY7I1Es3w2DbIgtVWWhFv35tsnwrvA39qC7kqrQqEzl29MiLNwLYL1wcuZ5Kb4407sA1aOQ2GiL2r3tqVXTsJ7jl7wm6C0LapIcj7QhN398XCUluuLHMHCJ27MckyVbany31gIsKdcCci3Al3IsKdcCeSrv8PlWN3ZS0AVHcAAAAASUVORK5CYII="></div><span class="fig">Changing the pitch</span>
- <p>In the "from" field, enter the value that you saw in the spectrum window, and in the "to" field enter C-4, then press "Apply".</p>
- <div class="imgc"><img class="imgc" width="379" height="209" alt="tut_snd4.png" src="data:image/png;base64,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"></div><span class="fig">Changing the volume</span>
- <p>Next thing is to normalize the volume. Go to <samp>Effect</samp> > <samp>Volume and Compression</samp> > <samp>Amplify...</samp>. In the popup window just press "Apply" (everything is autodetected correctly, no
- need to change anything).</p>
- <h2 id="number_of_samples">Number of Samples<a href="#number_of_samples"></a></h2>
- <p>MEG-4 supports no more than 16376 samples per waves. If you have fewer samples than this in the first place, then you can skip this step.</p>
- <p>Under the waveform you'll see the selection in milliseconds, click on that small "s" and change it to "samples".</p>
- <div class="imgc"><img class="imgc" width="622" height="59" alt="tut_snd5.png" src="data:image/png;base64,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"></div><span class="fig">Changing the unit</span>
- <p>In our example that's more than the allowed maximum. The number of samples is calculated as the value under "Project Sample Rate" multiplied by the length. So to lower the
- number of samples, either we lower the rate or we cut off the end of the wave. In this tutorial we'll do both.</p>
- <p>Select everything let's say after 1.0, and press <kbd>Del</kbd> to delete. This does the trick, but makes the ending sound harsh. To fix that, select a reasonable portion at
- the end and go to <samp>Effect</samp> > <samp>Fading</samp> > <samp>Fade Out</samp>. This will make the wave end nicely.</p>
- <div class="imgc"><img class="imgc" width="695" height="385" alt="tut_snd6.png" src="data:image/png;base64,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"></div><span class="fig">Chopping off and fading out the end</span>
- <p>Our wave is still too long (44380 samples), but we can't cut off more without ruining the sample. This is where the sample rate comes in. In previous versions of Audacity, this
- was comfortably displayed at the bottom on the toolbar as "Project Rate (Hz)". But not any more, on newer Audacity it is a lot more complicated. First, click <samp>Audio Setup</samp> on the
- toolbar and select <samp>Audio Settings...</samp>. In the popup window, look for "Quality" / "Project Sample Rate", and from the drop-down select "Other..." to make the actual input field
- editable.</p>
- <div class="warn"><p><span>Warning</span></p><p> Make sure you calculate the number correctly. Audacity is incapable of undoing this step, so you can't give it another try!</p></div>
- <p>Enter a number here, which is 16376 divided by the length of your wave (1.01 secs in our example) and press "OK".
- <div class="imgc"><img class="imgc" width="694" height="338" alt="tut_snd7.png" src="data:image/png;base64,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"></div><span class="fig">Lowering the number of samples</span></p>
- <p>Select the entire wave (press <kbd>Ctrl</kbd>+<kbd>A</kbd>) then you should see that the end of the selection is below 16376.</p>
- <h2 id="save_and_import">Save and Import<a href="#save_and_import"></a></h2>
- <p>Finally, save the new modified wave by selecting <samp>File</samp> > <samp>Export</samp> > <samp>Export as WAV</samp>. Make sure encoding is "Unsigned 8-bit PCM". As filename, enter <samp>dspXX.wav</samp>, where
- <samp>XX</samp> is a hex number between <samp>01</samp> and <samp>1F</samp>, the MEG-4 wave slot where you want to load this sample (using a different filename works too, but then the wave will be loaded
- at the first free slot).</p>
- <div class="imgc"><img class="imgc" width="640" height="400" alt="tut_snd8.png" src="data:image/png;base64,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"></div><span class="fig">Imported wave form</span>
- <p>Once you have the file, just drag'n'drop it into the MEG-4 window and you're done.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_cannon" title="Cannon">Previous</label><label class="btn next" accesskey="n" for="_adventure_game" title="Adventure Game">Next</label></div>
- <div class="page" rel="adventure_game"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Tutorials »</li><li> Adventure Game</li></ul><hr></div>
- <h1 id="adventure_game">Adventure Game<a href="#adventure_game"></a></h1>
- <p>The <a href="https://gitlab.com/bztsrc/meg4_advgame" target="new">advcomp</a> compiler can parse <b>AdvGame JSON</b> source files and can convert those into
- MEG-4 Adventure Games. These are classic textual games (also known as Interactive Fiction) where the player enters sentences
- in order to progress in the game. Each sentence is then parsed into a verb and noun(s), and looked up. If a script is found for
- that verb and noun(s) combination, then it is executed.</p>
- <div class="info"><p><span>Note</span></p><p> The <samp>advcomp</samp> tool can also generate point'n'click adventure games from the very same JSON files. Although MEG-4 can import
- these too, but converts them into textual games, the point'n'click gameplay mode is only available with the <samp>advgame</samp> interpreter.</p></div>
- <p>Limitations:</p>
- <ul><li>verbs: 32 different actions, each 15 bytes, up to 8 synonyms (max. 1536 bytes in total)</li>
- <li>nouns: 255 different objects, each 15 bytes (max. 1536 bytes in total)</li>
- <li>messages: 32 different strings per room, each 255 bytes (max. 2048 bytes per language)</li>
- <li>scripts: 1 global, 63 shared by all rooms, and 63 different per on room</li>
- <li>instructions: 21 mnemonics with 8 conditions, branch-free design, 61 instructions per scripts</li>
- <li>images: 1 per room by default, but you can add custom implementation</li>
- <li>rooms: 254 in total, connectable in 6 different directions</li></ul>
- <h2 id="game_state">Game State<a href="#game_state"></a></h2>
- <p>The Adventure Game state is an array of 256 bytes. The first byte stores the current room number, the last 32 bytes are reserved
- for the inventory, all the others are up to you. You can use these as flags, you can store counters in them, whatever. <a href="#scripts" onclick="c('scripts')">Scripts</a>
- operate on this 256 bytes of memory, and this state can be saved and loaded in a game save file.</p>
- <h2 id="top_level">Top Level<a href="#top_level"></a></h2>
- <p>The source file must have an <samp>"AdvGame"</samp> JSON structure at the top which is also a magic. Its fields are:</p>
- <ul><li><samp>sprites</samp>: string, path to a 256 x 256 pixels sprite sheet PNG, the first 32 rows must be empty</li>
- <li><samp>music</samp>: array of strings, path to Amiga MOD (.mod) or MIDI (.mid) files (up to 8 files)</li>
- <li><samp>sounds</samp>: array of strings, path to RIFF WAVE (.wav) files (up to 31 elements)</li>
- <li><samp>setup</samp>: array of numbers, initial game state values (up to 256 elements, each between 0 and 255, first number is starting room)</li>
- <li><samp>status</samp>: array of numbers, game states to be shown on status (up to 2, see <samp>custom</samp> for more)</li>
- <li><samp>vars</samp>: array of strings, aliases to game state indeces, aka "variables" (only used in the JSON)</li>
- <li><samp>rooms</samp>: array of strings, aliases to room numbers (only used in the JSON)</li>
- <li><samp>verbs</samp>: array of strings, aliases to <samp>verb1</samp>, <samp>verb2</samp>, <samp>verb3</samp> etc. (only used in the JSON)</li>
- <li><samp>nouns</samp>: array of strings, aliases to nouns (only used in the JSON)</li>
- <li><samp>colors</samp>: array of 5 numbers, intro and room background and text, and prompt color</li>
- <li><samp>pos</samp>: number, text position from top in pixels</li>
- <li><samp>custom</samp>: array of strings, additional C code to display user interface (first intro code, second room code)</li>
- <li><samp>logic</samp>: array of strings, common game logic script executed before each and every command</li>
- <li><samp>config0</samp>: structure, main game configuration</li>
- <li><samp>config1</samp>: structure, alternative game configuration (to support multi-language)</li>
- <li>numbers/"rooms" alias: structure, room definitions.</li></ul>
- <p>Normally sprites are assumed to be splitted: top 128 rows are swapped between rooms, bottom 128 rows are constant (for ui elements,
- icons, etc. this latter is loaded from <samp>sprites</samp>). If textpos is set, then both on the intro page and in rooms textpos rows (up
- to 96 pixels) starting from the sprite sheet's row 32 will be shown on screen. With the custom user interface C code you can display
- whatever and howmany sprites you'd like.</p>
- <h2 id="configuration">Configuration<a href="#configuration"></a></h2>
- <p>There's a main and an alternative configuration to support more languages. Their fields are:</p>
- <ul><li><samp>lang</samp>: string, two letter language code</li>
- <li><samp>text</samp>: string, intro text (up to 429 bytes)</li>
- <li><samp>answers</samp>: array of 4 strings, messages (up to 63 bytes each): unknown verb, can't go there, can't use, game saved</li>
- <li><samp>save</samp>: array of strings, verbs to save game (up to 15 bytes, 8 synonyms)</li>
- <li><samp>load</samp>: array of strings, verbs to load game</li>
- <li><samp>list</samp>: array of strings, verbs to list inventory</li>
- <li><samp>north</samp>: array of strings, verbs to navigate to North</li>
- <li><samp>west</samp>: array of strings, verbs to navigate to West</li>
- <li><samp>east</samp>: array of strings, verbs to navigate to East</li>
- <li><samp>south</samp>: array of strings, verbs to navigate to South</li>
- <li><samp>up</samp>: array of strings, verbs to go upstrairs</li>
- <li><samp>down</samp>: array of strings, verbs to go downstairs</li>
- <li><samp>verb1</samp>: array of strings, verbs for action 1 (key can be one of the "verbs" aliases)</li>
- <li><samp>verb2</samp>: array of strings, verbs for action 2</li>
- <li><samp>verb3</samp>: array of strings, verbs for action 3</li>
- <li><samp>verb32</samp>: array of strings, verbs for action 32</li>
- <li><samp>nouns</samp>: array of strings, nouns for objects (up to 255 strings)</li></ul>
- <p>During parsing, words shorter than three UNICODE characters must match exactly, otherwise it is enough if the words starts with that.
- This is needed for inflecting languages, not for English (an example could be maybe <samp>nouns</samp> being <samp>[ "brit" ]</samp> that would match both
- if player typed either <samp>briton</samp> or <samp>british</samp>).</p>
- <h2 id="rooms">Rooms<a href="#rooms"></a></h2>
- <p>Room number goes from 1 to 254 (room 0 is the intro or reset or no direction for navigation verbs, 255 is the saved game slot).
- Each room structure's fields are:</p>
- <ul><li><samp>image</samp>: string, path to a PNG image, up to 256 x 96 pixels</li>
- <li><samp>text0</samp>: array of strings, texts for <samp>config0</samp> (up to 32 strings, each 255 bytes)</li>
- <li><samp>text1</samp>: array of strings, texts for <samp>config1</samp></li>
- <li><samp>north</samp>: number / string / array of strings, go to North script</li>
- <li><samp>west</samp>: number / string / array of strings, go to West script</li>
- <li><samp>east</samp>: number / string / array of strings, go to East script</li>
- <li><samp>south</samp>: number / string / array of strings, go to South script</li>
- <li><samp>up</samp>: number / string / array of strings, go upstairs script</li>
- <li><samp>down</samp>: number / string / array of strings, go downstairs script</li>
- <li><samp>logic</samp>: number / string / array of strings, script to run when player enters this specific room</li>
- <li><samp>verbX</samp>: number / string / array of strings, scripts with a single verb (X goes 1 to 32 or a "verbs" alias)</li>
- <li><samp>verbX Y</samp>: number / string / array of strings, scripts with a verb and a single noun (Y goes 1 to 255, or a "nouns" alias)</li>
- <li><samp>verbX Y Z</samp>: number / string / array of strings, scripts with a verb and two nouns (Y, Z goes 1 to 255, or a "nouns" alias)</li></ul>
- <p>Texts can be 255 bytes long, and each room might have 32 texts, can be displayed with the <samp>say</samp> / <samp>sayv</samp> / <samp>sayc</samp> instructions.</p>
- <p>The scripts in room 1 are special in a way that they can be accessed from every other room too. Therefore it is recommended to put
- a "Game over" room here, which has only a <samp>jmp 0</samp> reset in its logic, so that there's no further command parsing in this room.</p>
- <h2 id="scripts">Scripts<a href="#scripts"></a></h2>
- <p>Every JSON value after a navigation or a verb command can be a non-zero number, which is a room number:</p>
- <div class="pre"><pre>
- "north": 12,
- </pre></div>
- <p>Or it can be a string, which is a "rooms" alias:</p>
- <div class="pre"><pre>
- "north": "attic",
- </pre></div>
- <p>But if it is an array of strings, then it is a script with instructions:</p>
- <div class="pre"><pre>
- "north": [ "jmp 12" ],
- </pre></div>
- <p>These alter the game's state, display messages, etc., Instruction arguments are numbers, but in the appropriate places "rooms",
- "vars", etc. aliases can be used.</p>
- <p>Available instructions:</p>
- <ul><li><samp>end</samp>: end script</li>
- <li><samp>and</samp>: it's suffix is added to next instruction's condition with a logical AND</li>
- <li><samp>or</samp>: it's suffix is added to next instruction's condition with a logical OR</li>
- <li><samp>bgm X</samp>: play background music (X goes 0 to 7)</li>
- <li><samp>sfx X</samp>: play sound effect (X goes 0 to 63)</li>
- <li><samp>jmp X</samp>: goes to room X (X goes from 0 to 254)</li>
- <li><samp>jmpv (X)</samp>: like <samp>jmp</samp>, but reads the room number from variable X</li>
- <li><samp>call X</samp>: call script X in room 1 (X goes 1 to 64)</li>
- <li><samp>callv (X)</samp>: like <samp>call</samp>, but reads the script number from variable X</li>
- <li><samp>give X</samp>: add noun X to inventory (X goes 1 to 255)</li>
- <li><samp>take X</samp>: remove noun X from inventory</li>
- <li><samp>say X</samp>: says text X (X is from 1 to 32)</li>
- <li><samp>sayv (X) Y</samp>: say text value of variable X + Y</li>
- <li><samp>sayc X Y</samp>: either say text X (false) or Y (true) depending on condition</li>
- <li><samp>add (X) Y</samp>: increase game state variable X by Y (X and Y goes from 1 to 255)</li>
- <li><samp>addv (X) (Y)</samp>: increase game state variable X by value of variable Y</li>
- <li><samp>sub (X) Y</samp>: decrease game state variable X by Y (X and Y goes from 1 to 255)</li>
- <li><samp>subv (X) (Y)</samp>: decrease game state variable X by value of variable Y</li>
- <li><samp>set (X) Y</samp>: set variable X to Y (Y can be 0 to 255)</li>
- <li><samp>rnd (X) Y</samp>: like <samp>set</samp>, but puts a random number between 0 and Y into X</li>
- <li><samp>mov (X) (Y)</samp>: move value of variable Y into variable X</li></ul>
- <p>All of these instructions can be expanded with exactly one of these suffixes:</p>
- <ul><li>no suffix: unconditionally execute</li>
- <li><samp>if (V) = N</samp>: only do if variable V equals N</li>
- <li><samp>if (V) != N</samp>: only do if variable V isn't N</li>
- <li><samp>if (V) <= N</samp>: only do if variable V less than or equal to N</li>
- <li><samp>if (V) < N</samp>: only do if variable V less than N</li>
- <li><samp>if (V) > N</samp>: only do if variable V greater than N</li>
- <li><samp>has N</samp>: only do if noun N is in the inventory</li>
- <li><samp>not N</samp>: only do if noun N is not in the inventory</li></ul>
- <p>A special case when <samp>(V)</samp> is 250 or above, these use the navigation drirections: 250 (or <samp>north</samp>), 251 (or <samp>west</samp>), 252 (or <samp>east</samp>),
- 253 (or <samp>south</samp>), 254 (or <samp>up</samp>), 255 (or <samp>down</samp>). For example to check if the room is passable to the North, that's <samp>if north != 0</samp>.
- These state indeces are storing the inventory's bitmask, which must be accessed using the <samp>has</samp> and <samp>not</samp> conditions, so there's no
- conflict.</p>
- <p>Jumping to room 0 will wait for a keypress, then resets the game and instead of 0, jumps to the given starting room (this needs
- an explicit <samp>jmp</samp> command as number 0 cannot be used as destination room number).</p>
- <p>Normally to connect rooms one would specify a room number (or "rooms" alias), but this allows passing from one room to another
- unconditionally. For example if you store a "has the key" flag in game state 7, and in room 11 you have a door and you only
- want to allow to go North to room 12 if the player has that key, then you'll need a scripted navigation.</p>
- <div class="pre"><pre>
- "11": {
- "text0": [ "The door is closed." ],
- "north": [ "jmp 12 if (7) = 1", "say 1" ]
- }
- </pre></div>
- <p>Instead of a number now we have an array of strings, with a <samp>jmp 12 if (7) = 1</samp> instruction in the <samp>north</samp> property. This would
- only jump to room 12 if state 7 is 1, otherwise it remains in room 11. In this case we can also say "The door is closed" with a
- <samp>say 1</samp> instruction (if we jumped to room 12 then this won't be executed). You can use a "rooms" alias in place of a room number,
- and a "vars" alias instead of a game state index (variable), for example <samp>jmp attic if key = 1</samp>. You can also use more complex
- conditions with the <samp>and</samp> / <samp>or</samp> instructions, if you add them <i>before</i> the instruction they should affect. For example to only
- allow passing when it's night and the player has a lamp too, then <samp>[ "and if night = 1", "and has lamp", "jmp attic if key = 1" ]</samp>.</p>
- <p>Another example, which randomly picks a room between 100 and 109:</p>
- <div class="pre"><pre>
- [ "rnd (1) 10", /* random between 0 and 9 into game state 1 */
- "add (1) 100", /* add 100 so state 1 is now between 100 and 109 */
- "jmpv (1)" ] /* jump to the room stored in a game state */
- </pre></div>
- <p>Texts can be choosen depending on variables too, for example if you store the cause of death 0 to 2 in variable 9, then:</p>
- <div class="pre"><pre>
- "text0": [
- "You're dead, because:", /* 1st text */
- "you drown", /* 2nd text */
- "you starved", /* 3rd text */
- "monster eat you" /* 4th text */
- ],
- "logic": [ "say 1", "sayv (9) 2" ]
- </pre></div>
- <p>This will first display the 1st text with <samp>say</samp>, then <samp>sayv</samp> takes the value from game state 9, adds 2 to it and displays one
- of the texts from 2nd to 4th.</p>
- <p>The conditional text is also useful, which can display either a false or a true text depending on its suffix. For example:</p>
- <div class="pre"><pre>
- "text0": [
- "You don't have a key.", /* 1st text */
- "The chest is now open." /* 2nd text */
- ],
- "open chest": [ "sayc 1 2 has key", "set (10) 1 has key" ]
- </pre></div>
- <p>If the player does not have the key, then <samp>sayc</samp> will display the first, otherwise the second text. Then we set a "chest open"
- flag with <samp>set</samp>, but only if the player has the key. (To specify the command like this, you'll need a "verbs" alias <samp>open</samp> and a
- "nouns" alias <samp>chest</samp> as well. Again, aliases are only used in the JSON and they are independent to the translated words players
- can type in the game.)</p>
- <h2 id="example_games">Example Games<a href="#example_games"></a></h2>
- <p>Example MEG-4 Adventure Games can be found in the <a href="https://gitlab.com/bztsrc/meg4_advgame" target="new">meg4_advgame</a> repository.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_sound_effect" title="Sound Effect">Previous</label><label class="btn next" accesskey="n" for="_meg_4_license" title="MEG-4 License">Next</label></div>
- <div class="page" rel="meg_4_license"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Appendix »</li><li> MEG-4 License</li></ul><hr></div>
- <h1 id="meg_4_license">MEG-4 License<a href="#meg_4_license"></a></h1>
- <p><img class="imgr" width="127" height="51" alt="gplv3.png" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH8AAAAzAgMAAADDST+XAAAADFBMVEUAAAC8AAC9AAC+AADyLdeuAAAAAXRSTlMAQObYZgAAAn5JREFUOMt9lbtuU0EQhidrcQQrZCGq4OooitDRiooOV34EiqShSovFQwymsUzjIAWJisUyaL2JIosiRZQiT0PhhwDmsru248tK5+Ld7+zM/DM7Btg33C/Yvx5vkB4m7hg/vwKc7QO+9QCOCbBrs5Plq6fFww3gPL/cRnaj2QB+5xfntwODYooDgJquzpwjYt56Gz8lwAaJlKcdo5YpQ0DawYuLAPIxXJy+rfDR6YlBlwGrFgwKQB9YWgsMoKwHF0kfgIqpuAZAiiXQC1lmILQScLUELM0w8EoA0hq70Ke5ewL6aoF31CAUcLAggLd1BKDoEcBiBr4vxJEMVCQk5+KFRBIknbQ2z0Bw4kgPFgL4KgHeJcD3BUgysHz0ETvStBRQsa6S0qsA3Sh3l7aUA1/tub3893cVCN1kQQGSaEqhSPIV8Ko2z4wVCNAqihCAxQKgAuSB51h9O3KOJOwZVUdKpgLsmOhvQpuBqSEjClACpmuABDFnI5JMKQcF5pJB71LVoZTssl5ophPjvcG4FeDY+dYzkNZzthcrO9ANLZSDZUq2ve0V4HE+qwBPoNRLRwwzJXqnXDUKZEdEfYu1yS6qCyZmRxQYe5NdVBeMnuQyxmhyKt4AbGkfHg9ysqcKiIYzE/1ITzWC1mOyAIZbyiJM4g+to2uUqhTHZVQfz+rGTl8iwrBunnV47z9YwuO4nmM9irYZNE/v6omNuQfqoaHnaDJ8bb+cN5+PAY8GrgAug6MBeju2ZnRohkdYgANfuultnKkWN/F6FjPgkgXoPmyfPQ0uLPvxg4HrG2wAs7FscFU6+kaHPuHZPu4GLjB1zV2jiu/fhb1/I+34YeXXfzyvR6xFYz9TAAAAAElFTkSuQmCC">The <b>MEG-4</b> Fantasy Console is Free and Open Source software available under <a href="https://gitlab.com/bztsrc/meg4/blob/main/LICENSE" target="new">GPLv3+</a> or any later version of that license.</p>
- <div class="pre"><pre>
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- </pre></div>
- <p>The <b>MEG-4 PRO</b> Fantasy Console's license is commercial and proprietary. It offers plus functionality over the GPL'd version, it
- can export your program into a standalone Web, Windows or Linux application.</p><br style="clear:both;"><label class="btn prev" accesskey="p" for="_adventure_game" title="Adventure Game">Previous</label><label class="btn next" accesskey="n" for="_links" title="Links">Next</label></div>
- <div class="page" rel="links"><div><ul class="breadcrumbs"><li><label class="home" for="_" title="Home"></label> »</li><li> Appendix »</li><li> Links</li></ul><hr></div>
- <h1 id="links">Links<a href="#links"></a></h1>
- <p>Materials used creating MEG-4</p>
- <ul><li><a href="https://github.com/rombankzero/pocketmod" target="new">pocketmod</a></li>
- <li><a href="https://github.com/nothings/stb" target="new">stb_image</a></li>
- <li><a href="http://members.chello.at/%7Eeasyfilter/Bresenham.pdf" target="new">Bresenham</a></li>
- <li><a href="https://lodev.org/cgtutor/raycasting.html" target="new">raycasting</a></li>
- <li><a href="https://bellard.org/TinyGL" target="new">TinyGL</a></li>
- <li><a href="https://www.lua.org" target="new">Lua</a></li>
- <li><a href="https://pixeljoint.com/forum/forum_posts.asp?TID=16247" target="new">DawnBringer32</a></li>
- <li><a href="https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.10.TXT" target="new">ZIP format</a></li>
- <li><a href="http://libpng.org/pub/png/spec/1.2/PNG-Contents.html" target="new">PNG format</a></li>
- <li><a href="https://www.gamers.org/dEngine/quake3/TGA.txt" target="new">TGA format</a></li>
- <li><a href="https://doc.mapeditor.org/en/stable/reference/tmx-map-format/" target="new">TMX format</a></li>
- <li><a href="https://www.x.org/docs/BDF/bdf.pdf" target="new">BDF format</a></li>
- <li><a href="https://www.aes.id.au/modformat.html" target="new">MOD format</a></li>
- <li><a href="https://www.cs.cmu.edu/~music/cmsip/readings/Standard-MIDI-file-format-updated.pdf" target="new">MIDI format</a></li>
- <li><a href="https://pico-8.fandom.com/wiki/P8FileFormat" target="new">PICO-8 format</a></li>
- <li><a href="https://github.com/nesbox/TIC-80/wiki/.tic-File-Format" target="new">TIC-80 format</a></li></ul><br style="clear:both;"><label class="btn prev" accesskey="p" for="_meg_4_license" title="MEG-4 License">Previous</label></div>
- <footer><hr><p>© Copyright 2023 bzt (bztsrc@gitlab)<br><small>Generated by <a href="https://gitlab.com/bztsrc/gendoc">gendoc</a> v1.0.0</small></p></footer>
- </div>
- </div>
- <script>function m(){document.getElementById("menuchk").checked=false;}function c(s){var r=document.getElementById(s);if(r!=undefined){if(r.tagName=="INPUT")r.checked=true;else document.getElementById("_"+r.parentNode.getAttribute("rel")).checked=true;}m();}function s(s){var r=document.getElementById("_s"),p=document.getElementById("_m").getElementsByClassName("page"),n,i,j,a,b,c,d;if(s){s=s.toLowerCase();document.getElementById("_t").style.display="none";r.style.display="block";while(r.firstChild)r.removeChild(r.firstChild);n=document.createElement("p");n.appendChild(document.createTextNode("Search Results"));r.appendChild(n);for(i=1;i<p.length;i++){a=p[i].getAttribute("rel");b="";c=p[i].childNodes;d=p[i].getElementsByTagName("H1")[0].innerText;for(j=1;j<c.length && c[j].className!="btn prev";j++){if(c[j].id!=undefined&&c[j].id!=""){a=c[j].id;d=c[j].innerText;}else if(a!=b&&c[j].innerText!=undefined&&c[j].innerText.toLowerCase().indexOf(s)!=-1){b=a;n=document.createElement("a");n.appendChild(document.createTextNode(d));n.setAttribute("href","#"+a);n.setAttribute("onclick","c('"+a+"');");r.appendChild(n);}}}}else{document.getElementById("_t").style.display="block";r.style.display="none";}}document.addEventListener("DOMContentLoaded",function(e){var i,r,n;document.getElementById("_q").style.display="inline-block";if(document.location.href.indexOf("?")!=-1)document.location.href=document.location.href.replace("?","#");else{r=document.querySelectorAll("LABEL:not(.menu)");while(r.length){l=r[0].getAttribute("for").substr(1);n=document.createElement("a");n.appendChild(document.createTextNode(r[0].innerText));n.setAttribute("href","#"+l);n.setAttribute("onclick","c('"+(l!=""?l:"_")+"');");if(r[0].getAttribute("class")!=undefined)n.setAttribute("class",r[0].getAttribute("class"));if(r[0].getAttribute("title")!=undefined&&l!="")n.setAttribute("title",r[0].getAttribute("title"));if(r[0].getAttribute("accesskey")!=undefined)n.setAttribute("accesskey",r[0].getAttribute("accesskey"));r[0].parentNode.replaceChild(n,r[0]);r=document.querySelectorAll("LABEL:not(.menu)");}try{c(document.location.href.split("#")[1]);}catch(e){}}});</script>
- </body>
- </html>
|