123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071 |
- <html>
- <head>
- <title>MegaZeux 2.91j (20190220) - Help File</title>
- <style>
- /* MegaZeux
- *
- * Copyright (C) 2012 Alice Rowan <petrifiedrowan@gmail.com>
- * Copyright (C) 2012 Dr. Lancer-X
- *
- * 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 2 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- /**
- * fonts.css: Embeddable MZX fonts.
- */
- @font-face
- {
- font-family: 'mzxfont';
- src: /* mzxfont.eot */
- url(data:application/vnd.ms-fontobject;charset=utf-8;base64,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NjIWFAYiJjQ2MhYUBiI2NDYyFhQGIiY0NjIWFAYiNjQ2MhYUBiImNDYyFhQGIjY0NjIWFAYiJjQ2MhYUBiI2NDYyFhQGIiY0NjIWFAYiNjQ2MhYUBiImNDYyFhQGIjY0NjIWFAYiJjQ2MhYUBiK0BR4FBR6lBR4FBR7rBR4FBR6lBR4FBR5LBR4FBR6lBR4FBR7rBR4FBR6lBR4FBR5LBR4FBR6lBR4FBR7rBR4FBR6lBR4FBR5LBR4FBR6lBR4FBR7rBR4FBR6lBR4FBR5LBR4FBR6lBR4FBR7rBR4FBR6lBR4FBR5LBR4FBR6lBR4FBR7rBR4FBR6lBR4FBR5LBR4FBR6lBR4FBR7rBR4FBR6lBR4FBR4EHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUtHgUFHgUFHgUFHgUABAAA//8BQAIvAF8AnwE/Ab8AABI0NjIWFBYyNjQ2MhYUBiIGFBYyFhQGIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUBiImNCYiBhQGIiY0NjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjI2NCYiJjQ2MhY0JiIGFBYyFhQGIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQWMjY0JiImNDYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyFhQWMjY0NjIWFBYyNjQ2MhYUFjI2NDYyFhQGIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUBiImNCYiBhQGIiY0JiIGFAYiJjQmIgYUBiImNDYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyFjQmIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQWMjY0NjIWFBYyNjQ2MhYUFjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0JiIGFAYiJjQmIgYUBiJ4BR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4tBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR59BR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4tBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4BvB4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FIx4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FfR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FIx4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR4FAAAAABMAAP//AUACLwBSAFoAYgBqAHIAegCCAIoAkgCaAKIAqgCyALoAwgDKANIA2gDiAAARNTMVFBYyNj0BMxUUFjI2NDY7AREjNTQmIgYdASM1NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjI2NCYiJhY0JiIGFBYyBjQmIgYUFjI2NCYiBhQWMgY0JiIGFBYyBjQmIgYUFjI2NCYiBhQWMgY0JiIGFBYyBjQmIgYUFjI2NCYiBhQWMgY0JiIGFBYyBjQmIgYUFjI2NCYiBhQWMgY0JiIGFBYyBjQmIgYUFjI2NCYiBhQWMgY0JiIGFBYyBjQmIgYUFjI2NCYiBhQWMlAFHgV4BR4FBQ8UeAUeBXgFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgXIBR4FBR5LBR4FBR6lBR4FBR5LBR4FBR5LBR4FBR6lBR4FBR5LBR4FBR5LBR4FBR6lBR4FBR5LBR4FBR5LBR4FBR6lBR4FBR5LBR4FBR5LBR4FBR6lBR4FBR5LBR4FBR5LBR4FBR6lBR4FBR4CGxQUDwUFDxQUDwUFHgX90BQPBQUPFBQPBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUoHgUFHgUjHgUFHgUFHgUFHgUjHgUFHgUjHgUFHgUFHgUFHgUjHgUFHgUjHgUFHgUFHgUFHgUjHgUFHgUjHgUFHgUFHgUFHgUjHgUFHgUjHgUFHgUFHgUFHgUjHgUFHgUjHgUFHgUFHgUFHgUAAAEAeP//AMgCLwADAAAXETMReFABAjD90AAAAAABAAD//wDIAi8ABwAAEzUzESMRIzV4UFB4AT/w/dABGCgAAAADAAD//wEYAi8ABQAJAA8AAD0BMxEjNRcRMxEDNTMVIzWgUHhQyFCg7yj+6PDwAjD90AFoyPAoAAIAUP//ARgCLwADAAcAABcRMxEjETMRyFDIUAECMP3QAjD90AAAAAACAAD//wEYAWcABQALAAA9ATMRIzUnNSERIxGgUFABGFDvKP7o8FAo/pgBQAAAAAACAAAA7wEYAi8ABQALAAATETMRITU3NTMVIzXIUP7oUFCgARcBGP7AKFDI8CgAAAABAAD//wDIAT8ABQAAETUzESMRyFABFyj+wAEYAAAAAAEAeAEXAUACLwAFAAATETMVMxV4UHgBFwEY8CgAAAAAAQAAARcBQAIvAAcAABM1MxUzFSE1eFB4/sABP/DwKCgAAAAAAQAA//8BQAE/AAcAABE1IRUjESMRAUB4UAEXKCj+6AEYAAAAAQB4//8BQAIvAAcAABcRMxUzFSMReFB4eAECMPAo/ugAAAAAAQAAARcBQAE/AAMAABE1IRUBQAEXKCgAAQAA//8BQAIvAAsAABM1MxUzFSMRIxEjNXhQeHhQeAE/8PAo/ugBGCgAAAACAFAA7wFAAi8ACAAOAAATNTMVMzIWHQEHETMRMxXIUBQPBfBQoAE/8MgFDxRQAUD+6CgAAgBQ//8BQAFnAAgADgAAFxEzFRQGKwEVIxEzFSMRyHgFDxTI8KABARgUDwXwAWgo/sAAAAMAAADvAUACLwADAAwAEgAAPQEhFSc1MxUzMhYdASc1MxUjNQFAeFAUDwXwUKDvKChQ8MgFDxQoyPAoAAMAAP//AUABZwAIAA4AEgAAFxEzFRQGKwEVJTUzESM1JzUhFch4BQ8U/uigUFABQAEBGBQPBfDwKP7o8FAoKAADAFD//wFAAi8ACAARABUAABcRMxUUBisBFQM1MxUzMhYdAQMRMxHIeAUPFFBQFA8F8FABARgUDwXwAUDwyAUPFP7AAjD90AACAAAA7wFAAWcAAwAHAAA9ASEVJTUhFQFA/sABQO8oKFAoKAAEAAD//wFAAi8ACAAOABcAHQAAFxEzFRQGKwEVJTUzESM1NzUzFTMyFh0BJzUzFSM1yHgFDxT+6KBQeFAUDwXwUKABARgUDwXw8Cj+6PBQ8MgFDxQoyPAoAAAAAAEAAAEXAMgCLwAFAAATNTMRIzV4UMgBP/D+6CgAAAAAAQB4//8BQAE/AAUAABcRMxUjEXjIeAEBQCj+6AAAAAABAAD//wFAAi8AAwAAFREhEQFAAQIw/dAAAAAAAQAA//8BQAEXAAMAABURIREBQAEBGP7oAAAAAAEAAP//AKACLwADAAAVETMRoAECMP3QAAEAoP//AUACLwADAAAXETMRoKABAjD90AAAAAABAAABFwFAAi8AAwAAGQEhEQFAARcBGP7oAAAAAgAAAJ8BQAGPACcALwAAADQ2OwEVIyImNCYiJjQmIgYdASM1NCYrATUzMjY9ATMVFBYyNjQ2MgY0JiIGFBYyARgFDxQUDwUFHgUFHgWgBQ8UFA8FoAUeBQUewwUeBQUeAWweBfAFHgUFHgUFDxQUDwVQBQ8UFA8FBR4FSx4FBR4FAAAAAwAUAJ8BLAG3ACcANwA/AAATNTMVFBYyFhQWOwEVIyIGFAYiBh0BIzU0JiImNCYrATUzMjY0NjI2FjQmIgYUBiIGFBYyNjQ2MhY0JiIGFBYyZHgFHgUFDxQUDwUFHgV4BR4FBQ8UFA8FBR4FKAUeBQUeBQUeBQUeVQUeBQUeAaMUFA8FBR4FeAUeBQUPFBQPBQUeBXgFHgUFKB4FBR4FBR4FBR4Fmx4FBR4FAAMAAAB3AUAB3wANABUAHQAANREhFSMVMxUjNTM1IxE2NCYiBhQWMhY0JiIGFBYyAUBQUMhQeHgFHgUFHlUFHgUFHncBaCgooKAo/sDNHgUFHgUjHgUFHgUAAAAABAAUAHcBLAHfACUALQA1AD0AABI0NjIWFBYyNjQ2MhYUFjsBESM1IxUjNSMVIzUzMjY0NjI2NDYyFjQmIgYUFjI2NCYiBhQWMgY0JiIGFBYyjAUeBQUeBQUeBQUPFFAoUCgoFA8FBR4FBR4tBR4FBR5VBR4FBR4jBR4FBR4BvB4FBR4FBR4FBR4F/sB4eKBQoAUeBQUeBUseBQUeBQUeBQUeBUseBQUeBQAAAAEAAP//AUABFwAeAAAkNDY7AREhNTQ2MjY0NjI2NDYyNj0BMzU0NjI2NDYyARgFDxT+wAUeBQUeBQUeBVAFHgUFHvQeBf7oFA8FBR4FBR4FBQ8UFA8FBR4FAAAAAQAA//8BQAIvAB0AAAA0NjsBESERMzI2NDYyNjQ2MjY9ATM1NDYyNjQ2MgEYBQ8U/sAUDwUFHgUFHgVQBR4FBR4CDB4F/dABQAUeBQUeBQUPFBQPBQUeBQAAAAABAAD//wFAAi8AHQAAFREzMhYUFjIWFBYyFh0BMxUUFjIWFBYyFhQWOwERFA8FBR4FBR4FUAUeBQUeBQUPFAECMAUeBQUeBQUPFBQPBQUeBQUeBf7AAAAAAQAA//8BQAEXAB4AABURMzIWFBYyFhQWMhYdATMVFBYyFhQWMhYUFjIWHQEUDwUFHgUFHgVQBR4FBR4FBR4FAQEYBR4FBR4FBQ8UFA8FBR4FBR4FBQ8UAAsAAABPAUACBwA3AD8AQwBLAFMAVwBfAGcAbwBzAHsAABE1MxUUFjIWFBY7ARUjIgYUBisBFTMyFhQWMhYdASM1NCYiJjQmKwE1MzI2NDY7ATUjIiY0JiImFjQmIgYUFjIzNSMVFjQmIgYUFjI2NCYiBhQWMgc1IxU2NCYiBhQWMgY0JiIGFBYyNjQmIgYUFjIHNSMVNjQmIgYUFjLwBR4FBQ8UFA8FBQ8UFA8FBR4F8AUeBQUPFBQPBQUPFBQPBQUeBXgFHgUFHn1QKAUeBQUeVQUeBQUec1CgBR4FBR6bBR4FBR59BR4FBR4jUKAFHgUFHgHzFBQPBQUeBXgFHgV4BR4FBQ8UFA8FBR4FeAUeBXgFHgUFKB4FBR4FKChLHgUFHgUFHgUFHgVQKCgFHgUFHgVLHgUFHgUFHgUFHgVQKCgFHgUFHgUAAAAABgAUAHcBLAHfACcALwA3AD8ARwBPAAATNTMVFBYyFhQWOwEVIyIGFAYiBh0BIzU0JiImNCYrATUzMjY0NjI2FjQmIgYUFjIWNCYiBhQWMgY0JiIGFBYyFjQmIgYUFjIGNCYiBhQWMmR4BR4FBQ8UFA8FBR4FeAUeBQUPFBQPBQUeBSgFHgUFHlUFHgUFHnMFHgUFHqUFHgUFHksFHgUFHgHLFBQPBQUeBcgFHgUFDxQUDwUFHgXIBR4FBSgeBQUeBUseBQUeBSMeBQUeBSMeBQUeBUseBQUeBQAAAAQAKAB3ARgB3wAjACcAKwAzAAATNTMVFBY7AREjIiY0JiIGFAYiJjQmIgYUBiImNCYrAREzMjYXNSMVMzUjFRQ0JiIGFBYyUKAFDxQUDwUFHgUFHgUFHgUFHgUFDxQUDwUoKHgoBR4FBR4ByxQUDwX+wAUeBQUeBQUeBQUeBQUeBQEYBX1QUFBQSx4FBR4FAAEAKAB3ARgCBwBcAAATNTMVMxUUBiIGFBYyFhQGIiY0JiImNCYrARUzMhYUFjIWFBY7ARUjIgYdASM1NCYrATUzMjY0JiImNDYyFhQWMhYUBiIGFBYyFh0BMzUjIiY0JiImNCYrATUzMjZ4UFAFHgUFHgUFHgUFHgUFDxQUDwUFHgUFDxQUDwWgBQ8UFA8FBR4FBR4FBR4FBR4FBR4FUBQPBQUeBQUPFBQPBQHzFCgUDwUFHgUFHgUFHgUFHgVQBR4FBR4FeAUPFBQPBVAFHgUFHgUFHgUFHgUFHgUFDxR4BR4FBR4FeAUAAAAABQAAAE8BQAIvAAMAUABwAIoAkgAANzUzFQI0NjIWFBYyFhQWOwEVMzIWFBYyFhQGIgYUFjIWFAYiBhQGIgYdASM1NCYiJjQmIiY0NjI2NCYiJjQ2OwE1MxUzNTQmKwE1IyImNDYyFjQmIgYUFjsBFTMyFhQWMhYUFjI2NCYiJjQmKwE1IyIHNCYiBhQWMhYUBiIGFBYyFh0BMzUzNSM1IxI0NjIWFAYiUFAoBR4FBR4FBQ8UFA8FBR4FBR4FBR4FBR4FBR4FoAUeBQUeBQUeBQUeBQUPFChQBQ8UFA8FBR4tBR4FBQ8UFA8FBR4FBR4FBR4FBQ8UFA9VBR4FBR4FBR4FBR4FUFBQUCgFHgUFHp8oKAEdHgUFHgUFHgVQBR4FBR4FBR4FBR4FBR4FBQ8UFA8FBR4FBR4FBR4FBR4FUFAUDwVQBR4FIx4FBR4FUAUeBQUeBQUeBQUeBVCMDwUFHgUFHgUFHgUFDxQoKCgBHR4FBR4FAAAAAAEAAAEXAUACLwAeAAARNSERIyImNCYiJjQmIiY9ASM1NCYiJjQmIiY0JiImAUAUDwUFHgUFHgVQBR4FBR4FBR4FAhsU/ugFHgUFHgUFDxQUDwUFHgUFHgUFAAAAAQAA//8BQAIvAB0AADURIREjIiY0JiImNCYiJj0BIzU0JiImNCYiJjQmIwFAFA8FBR4FBR4FUAUeBQUeBQUP7wFA/dAFHgUFHgUFDxQUDwUFHgUFHgUAAAEAAP//AUACLwAdAAAVESERIyIGFAYiBhQGIgYdASMVFAYiBhQGIgYUBiMBQBQPBQUeBQUeBVAFHgUFHgUFDwECMP7ABR4FBR4FBQ8UFA8FBR4FBR4FAAABAAABFwFAAi8AHgAAGQEhFRQGIgYUBiIGFAYiBh0BIxUUBiIGFAYiBhQGIwFABR4FBR4FBR4FUAUeBQUeBQUPARcBGBQPBQUeBQUeBQUPFBQPBQUeBQUeBQAAAAQAAABPAUAB3wAXABsAHwAtAAATNTMVFBY7AREjIgYdASM1NCYrAREzMjYXNSMVMzUjFQc0JiIGFBYyFh0BMzUjKPAFDxQUDwXwBQ8UFA8FUCigKFAFHgUFHgVQUAHLFBQPBf7ABQ8UFA8FAUAFfVBQUFBkDwUFHgUFDxQoAAAABAAAAE8BQAHfABcAGwAfACMAABM1MxUUFjsBESMiBh0BIzU0JisBETMyNhc1IxUzNSMdATUjFSjwBQ8UFA8F8AUPFBQPBVAooChQAcsUFA8F/sAFDxQUDwUBQAV9UFBQUKBQUAAAAAAEAAAATwFAAd8AFwAbAB8ALQAAEzUzFRQWOwERIyIGHQEjNTQmKwERMzI2FzUjFTM1Ix0BNSMVFAYiBhQWMjY9ASjwBQ8UFA8F8AUPFBQPBVAooChQBR4FBR4FAcsUFA8F/sAFDxQUDwUBQAV9UFBQUKAoFA8FBR4FBQ8UAAAAAAMAAABPAUAB3wAXADkARwAAEzUzFRQWOwERIyIGHQEjNTQmKwERMzI2FzQmIgYUFjIWFAYrARUzNTMVMzUjIiY0NjI2NCYiBh0BIxc1IxUUBiIGFBYyNj0BKPAFDxQUDwXwBQ8UFA8FUAUeBQUeBQUPFChQKBQPBQUeBQUeBVBQUAUeBQUeBQHLFBQPBf7ABQ8UFA8FAUAFGQ8FBR4FBR4FUFBQUAUeBQUeBQUPFPAoFA8FBR4FBQ8UAAAABAAAAE8BQAHfABcAHwAjACsAABM1MxUUFjsBESMiBh0BIzU0JisBETMyNhY0JiIGFBYyMzUjFRQ0JiIGFBYyKPAFDxQUDwXwBQ8UFA8FUAUeBQUefVAFHgUFHgHLFBQPBf7ABQ8UFA8FAUAFeB4FBR4FKCibHgUFHgUAAAQAAABPAUAB3wAXADcAVwBfAAATNTMVFBY7AREjIgYdASM1NCYrAREzMjYWNCYiBhQWMhYUBiIGFBYyNjQ2MhYUFjI2NCYiJjQmIjY0JiIGFBYyFhQWMhYUFjI2NCYiJjQ2MjY0JiIGFAYiBjQmIgYUFjIo8AUPFBQPBfAFDxQUDwUoBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR5zBR4FBR4FBR4FBR4FBR4FBR4FBR4FBR5VBR4FBR4ByxQUDwX+wAUPFBQPBQFABVAeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBQUeBeseBQUeBQADAAAATwFAAd8AFwApADIAABM1MxUUFjsBESMiBh0BIzU0JisBETMyNhc1IxUzNTQ2MhYdATM1NDYyNgc0JisBFTM1IyjwBQ8UFA8F8AUPFBQPBfDwUAUeBVAFHgWgBQ8UeFAByxQUDwX+wAUPFBQPBQFABUEUUBQPBQUPFBQPBQWRDwVQKAAABAAAAE8BQAHfABcAGwAfAC8AABM1MxUUFjsBESMiBh0BIzU0JisBETMyNhc1IxUzNSMdATUjFRQGIgYdATM1NCYiJijwBQ8UFA8F8AUPFBQPBVAooChQBR4FoAUeBQHLFBQPBf7ABQ8UFA8FAUAFfVBQUFBkFBQPBQUPFBQPBQUAAAAAAQB4AO8AyAE/AAMAADc1MxV4UO9QUAAAAQCMAO8AtAEXAAcAADY0NjIWFAYijAUeBQUe9B4FBR4FAAAAAQAAAE8BQAIHADEAAAA0NjIWFAYrARUjFSMVIxUjIgYUBiImNCYrATUjNTMyFhQWOwEVMzUzNTM1MzI2NDYyARgFHgUFDxQoKCgUDwUFHgUFDxQoFA8FBQ8UKCgoFA8FBR4B5B4FBR4FUHhQUAUeBQUeBVB4BR4FUFBQUAUeBQABAFABPwDwAi8AHQAAEjQ2MhYUBisBFSMVIyImNCYrATUzMjY0NjI2NDYyyAUeBQUPFCgUDwUFDxQUDwUFHgUFHgIMHgUFHgVQeAUeBVAFHgUFHgUAAAAAAQAoAHcBGAG3ACcAABI0NjsBFTMyFh0BMxUUFjsBFSMiBhQGKwE1IyImPQEjNTQmKwE1MzJQBQ8UFA8FUAUPFBQPBQUPFBQPBVAFDxQUDwGUHgV4BQ8UFA8FUAUeBXgFDxQUDwVQAAABADwAnwEEAY8AAwAANzUzFTzIn/DwAAABAFD//wDwAO8AHQAANzUzMhYUFjsBFSMiBhQGIgYUBiIGFAYiJjQ2OwE1oBQPBQUPFBQPBQUeBQUeBQUeBQUPFHd4BR4FUAUeBQUeBQUeBQUeBVAAAAAAAAAOAK4AAQAAAAAAAAA0AGoAAQAAAAAAAQAIALEAAQAAAAAAAgAGAMgAAQAAAAAAAwAlARsAAQAAAAAABAAJAVUAAQAAAAAABQAQAYEAAQAAAAAABgAIAaQAAwABBAkAAABoAAAAAwABBAkAAQAQAJ8AAwABBAkAAgAMALoAAwABBAkAAwBKAM8AAwABBAkABAASAUEAAwABBAkABQAgAV8AAwABBAkABgAQAZIAQwByAGUAYQB0AGUAZAAgAHcAaQB0AGgAIABGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAKABoAHQAdABwADoALwAvAGYAbwBuAHQAZgBvAHIAZwBlAC4AcwBmAC4AbgBlAHQAKQAAQ3JlYXRlZCB3aXRoIEZvbnRGb3JnZSAyLjAgKGh0dHA6Ly9mb250Zm9yZ2Uuc2YubmV0KQAAbQBlAGcAYQB6AGUAdQB4AABtZWdhemV1eAAATQBlAGQAaQB1AG0AAE1lZGl1bQAARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIABtAGUAZwBhAHoAZQB1AHgAIAAgADoAIAAyADEALQA2AC0AMgAwADEAMgAARm9udEZvcmdlIDIuMCA6IG1lZ2F6ZXV4ICA6IDIxLTYtMjAxMgAAbQBlAGcAYQB6AGUAdQB4ACAAAG1lZ2F6ZXV4IAAAVgBlAHIAcwBpAG8AbgAgADAAMAAxAC4AMAAwADAAIAAAVmVyc2lvbiAwMDEuMDAwIAAAbQBlAGcAYQB6AGUAdQB4AABtZWdhemV1eAAAAAIAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABCwAAAAEAAgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWAApQFhAWIBYwCcAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwZVKzAwMjAGVSswMDIxBlUrMDAyMgZVKzAwMjMGVSswMDI0BlUrMDAyNQZVKzAwMjYGVSswMDI3BlUrMDAyOAZVKzAwMjkGVSswMDJhBlUrMDAyYgZVKzAwMmMGVSswMDJkBlUrMDAyZQZVKzAwMmYGVSswMDMwBlUrMDAzMQZVKzAwMzIGVSswMDMzBlUrMDAzNAZVKzAwMzUGVSswMDM2BlUrMDAzNwZVKzAwMzgGVSswMDM5BlUrMDAzYQZVKzAwM2IGVSswMDNjBlUrMDAzZAZVKzAwM2UGVSswMDNmBlUrMDA0MAZVKzAwNDEGVSswMDQyBlUrMDA0MwZVKzAwNDQGVSswMDQ1BlUrMDA0NgZVKzAwNDcGVSswMDQ4BlUrMDA0OQZVKzAwNGEGVSswMDRiBlUrMDA0YwZVKzAwNGQGVSswMDRlBlUrMDA0ZgZVKzAwNTAGVSswMDUxBlUrMDA1MgZVKzAwNTMGVSswMDU0BlUrMDA1NQZVKzAwNTYGVSswMDU3BlUrMDA1OAZVKzAwNTkGVSswMDVhBlUrMDA1YgZVKzAwNWMGVSswMDVkBlUrMDA1ZQZVKzAwNWYGVSswMDYwBlUrMDA2MQZVKzAwNjIGVSswMDYzBlUrMDA2NAZVKzAwNjUGVSswMDY2BlUrMDA2NwZVKzAwNjgGVSswMDY5BlUrMDA2YQZVKzAwNmIGVSswMDZjBlUrMDA2ZAZVKzAwNmUGVSswMDZmBlUrMDA3MAZVKzAwNzEGVSswMDcyBlUrMDA3MwZVKzAwNzQGVSswMDc1BlUrMDA3NgZVKzAwNzcGVSswMDc4BlUrMDA3OQZVKzAwN2EGVSswMDdiBlUrMDA3YwZVKzAwN2QGVSswMDdlBWFuZ2xlDGludGVyc2VjdGlvbgV1bmlvbgd1bmkyMjM1B3VuaTIyNTILZXF1aXZhbGVuY2UNcGVycGVuZGljdWxhcgZVK2UwMDEGVStlMDAyBlUrZTAwMwZVK2UwMDQGVStlMDA1BlUrZTAwNgZVK2UwMDcGVStlMDA4BlUrZTAwOQZVK2UwMGEGVStlMDBiBlUrZTAwYwZVK2UwMGQGVStlMDBlBlUrZTAwZgZVK2UwMTAGVStlMDExBlUrZTAxMgZVK2UwMTMGVStlMDE0BlUrZTAxNQZVK2UwMTYGVStlMDE3BlUrZTAxOAZVK2UwMTkGVStlMDFhBlUrZTAxYgZVK2UwMWMGVStlMDFkBlUrZTAxZQZVK2UwMWYGVStlMDdmBlUrZTA4MAZVK2UwODEGVStlMDgyBlUrZTA4MwZVK2UwODQGVStlMDg1BlUrZTA4NgZVK2UwODcGVStlMDg4BlUrZTA4OQZVK2UwOGEGVStlMDhiBlUrZTA4YwZVK2UwOGQGVStlMDhlBlUrZTA4ZgZVK2UwOTAGVStlMDkxBlUrZTA5MgZVK2UwOTMGVStlMDk0BlUrZTA5NQZVK2UwOTYGVStlMDk3BlUrZTA5OAZVK2UwOTkGVStlMDlhBlUrZTA5YgZVK2UwOWMGVStlMDlkBlUrZTA5ZQZVK2UwOWYGVStlMGEwBlUrZTBhMQZVK2UwYTIGVStlMGEzBlUrZTBhNAZVK2UwYTUGVStlMGE2BlUrZTBhNwZVK2UwYTgGVStlMGE5BlUrZTBhYQZVK2UwYWIGVStlMGFjBlUrZTBhZAZVK2UwYWUGVStlMGFmBlUrZTBiMAZVK2UwYjEGVStlMGIyBlUrZTBiMwZVK2UwYjQGVStlMGI1BlUrZTBiNgZVK2UwYjcGVStlMGI4BlUrZTBiOQZVK2UwYmEGVStlMGJiBlUrZTBiYwZVK2UwYmQGVStlMGJlBlUrZTBiZgZVK2UwYzAGVStlMGMxBlUrZTBjMgZVK2UwYzMGVStlMGM0BlUrZTBjNQZVK2UwYzYGVStlMGM3BlUrZTBjOAZVK2UwYzkGVStlMGNhBlUrZTBjYgZVK2UwY2MGVStlMGNkBlUrZTBjZQZVK2UwY2YGVStlMGQwBlUrZTBkMQZVK2UwZDIGVStlMGQzBlUrZTBkNAZVK2UwZDUGVStlMGQ2BlUrZTBkNwZVK2UwZDgGVStlMGQ5BlUrZTBkYQZVK2UwZGIGVStlMGRjBlUrZTBkZAZVK2UwZGUGVStlMGRmBlUrZTBlMAZVK2UwZTEGVStlMGUyBlUrZTBlMwZVK2UwZTQGVStlMGU1BlUrZTBlNgZVK2UwZTcGVStlMGU4BlUrZTBlOQZVK2UwZWEGVStlMGViBlUrZTBlYwZVK2UwZWQGVStlMGVlBlUrZTBlZgZVK2UwZjAGVStlMGYxBlUrZTBmMgZVK2UwZjMGVStlMGY0BlUrZTBmNQZVK2UwZjYGVStlMGY3BlUrZTBmOAZVK2UwZjkGVStlMGZhBlUrZTBmYgZVK2UwZmMGVStlMGZkBlUrZTBmZQZVK2UwZmYAAAAB//8AAgABAAAADgAAABgAIAAAAAIAAQABAQoAAQAEAAAAAgAAAAEAAAABAAAAAAABAAAAAMmJbzEAAAAAzAgvTwAAAADMCE7f);
- src: /* mzxfont.woff */
- url(data:application/x-font-woff;charset=utf-8;base64,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)
- format('woff'),
- /* mzxfont.ttf */
- url(data:application/font-sfnt;charset=utf-8;base64,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HgUFHksFHgUFHqUFHgUFHusFHgUFHqUFHgUFHksFHgUFHqUFHgUFHusFHgUFHqUFHgUFHksFHgUFHqUFHgUFHusFHgUFHqUFHgUFHksFHgUFHqUFHgUFHusFHgUFHqUFHgUFHgQeBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBS0eBQUeBQUeBQUeBQAEAAD//wFAAi8AXwCfAT8BvwAAEjQ2MhYUFjI2NDYyFhQGIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUFjIWFAYiBhQGIiY0JiIGFAYiJjQ2MjY0JiImNDYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyFjQmIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUFjIWFBYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjIWFBYyNjQ2MhYUFjI2NDYyFhQWMjY0NjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUFjIWFAYiBhQGIiY0JiIGFAYiJjQmIgYUBiImNCYiBhQGIiY0NjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjIWNCYiBhQWMhYUBiIGFBYyFhQGIgYUFjIWFAYiBhQWMhYUBiIGFBYyFhQGIgYUFjIWFBYyNjQ2MhYUFjI2NDYyFhQWMjY0JiImNDYyNjQmIiY0NjI2NCYiJjQ2MjY0JiImNDYyNjQmIiY0NjI2NCYiJjQmIgYUBiImNCYiBhQGIngFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHi0FHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHn0FHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUFHgUF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AQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAClAWEBYgFjAJwBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHBlUrMDAyMAZVKzAwMjEGVSswMDIyBlUrMDAyMwZVKzAwMjQGVSswMDI1BlUrMDAyNgZVKzAwMjcGVSswMDI4BlUrMDAyOQZVKzAwMmEGVSswMDJiBlUrMDAyYwZVKzAwMmQGVSswMDJlBlUrMDAyZgZVKzAwMzAGVSswMDMxBlUrMDAzMgZVKzAwMzMGVSswMDM0BlUrMDAzNQZVKzAwMzYGVSswMDM3BlUrMDAzOAZVKzAwMzkGVSswMDNhBlUrMDAzYgZVKzAwM2MGVSswMDNkBlUrMDAzZQZVKzAwM2YGVSswMDQwBlUrMDA0MQZVKzAwNDIGVSswMDQzBlUrMDA0NAZVKzAwNDUGVSswMDQ2BlUrMDA0NwZVKzAwNDgGVSswMDQ5BlUrMDA0YQZVKzAwNGIGVSswMDRjBlUrMDA0ZAZVKzAwNGUGVSswMDRmBlUrMDA1MAZVKzAwNTEGVSswMDUyBlUrMDA1MwZVKzAwNTQGVSswMDU1BlUrMDA1NgZVKzAwNTcGVSswMDU4BlUrMDA1OQZVKzAwNWEGVSswMDViBlUrMDA1YwZVKzAwNWQGVSswMDVlBlUrMDA1ZgZVKzAwNjAGVSswMDYxBlUrMDA2MgZVKzAwNjMGVSswMDY0BlUrMDA2NQZVKzAwNjYGVSswMDY3BlUrMDA2OAZVKzAwNjkGVSswMDZhBlUrMDA2YgZVKzAwNmMGVSswMDZkBlUrMDA2ZQZVKzAwNmYGVSswMDcwBlUrMDA3MQZVKzAwNzIGVSswMDczBlUrMDA3NAZVKzAwNzUGVSswMDc2BlUrMDA3NwZVKzAwNzgGVSswMDc5BlUrMDA3YQZVKzAwN2IGVSswMDdjBlUrMDA3ZAZVKzAwN2UFYW5nbGUMaW50ZXJzZWN0aW9uBXVuaW9uB3VuaTIyMzUHdW5pMjI1MgtlcXVpdmFsZW5jZQ1wZXJwZW5kaWN1bGFyBlUrZTAwMQZVK2UwMDIGVStlMDAzBlUrZTAwNAZVK2UwMDUGVStlMDA2BlUrZTAwNwZVK2UwMDgGVStlMDA5BlUrZTAwYQZVK2UwMGIGVStlMDBjBlUrZTAwZAZVK2UwMGUGVStlMDBmBlUrZTAxMAZVK2UwMTEGVStlMDEyBlUrZTAxMwZVK2UwMTQGVStlMDE1BlUrZTAxNgZVK2UwMTcGVStlMDE4BlUrZTAxOQZVK2UwMWEGVStlMDFiBlUrZTAxYwZVK2UwMWQGVStlMDFlBlUrZTAxZgZVK2UwN2YGVStlMDgwBlUrZTA4MQZVK2UwODIGVStlMDgzBlUrZTA4NAZVK2UwODUGVStlMDg2BlUrZTA4NwZVK2UwODgGVStlMDg5BlUrZTA4YQZVK2UwOGIGVStlMDhjBlUrZTA4ZAZVK2UwOGUGVStlMDhmBlUrZTA5MAZVK2UwOTEGVStlMDkyBlUrZTA5MwZVK2UwOTQGVStlMDk1BlUrZTA5NgZVK2UwOTcGVStlMDk4BlUrZTA5OQZVK2UwOWEGVStlMDliBlUrZTA5YwZVK2UwOWQGVStlMDllBlUrZTA5ZgZVK2UwYTAGVStlMGExBlUrZTBhMgZVK2UwYTMGVStlMGE0BlUrZTBhNQZVK2UwYTYGVStlMGE3BlUrZTBhOAZVK2UwYTkGVStlMGFhBlUrZTBhYgZVK2UwYWMGVStlMGFkBlUrZTBhZQZVK2UwYWYGVStlMGIwBlUrZTBiMQZVK2UwYjIGVStlMGIzBlUrZTBiNAZVK2UwYjUGVStlMGI2BlUrZTBiNwZVK2UwYjgGVStlMGI5BlUrZTBiYQZVK2UwYmIGVStlMGJjBlUrZTBiZAZVK2UwYmUGVStlMGJmBlUrZTBjMAZVK2UwYzEGVStlMGMyBlUrZTBjMwZVK2UwYzQGVStlMGM1BlUrZTBjNgZVK2UwYzcGVStlMGM4BlUrZTBjOQZVK2UwY2EGVStlMGNiBlUrZTBjYwZVK2UwY2QGVStlMGNlBlUrZTBjZgZVK2UwZDAGVStlMGQxBlUrZTBkMgZVK2UwZDMGVStlMGQ0BlUrZTBkNQZVK2UwZDYGVStlMGQ3BlUrZTBkOAZVK2UwZDkGVStlMGRhBlUrZTBkYgZVK2UwZGMGVStlMGRkBlUrZTBkZQZVK2UwZGYGVStlMGUwBlUrZTBlMQZVK2UwZTIGVStlMGUzBlUrZTBlNAZVK2UwZTUGVStlMGU2BlUrZTBlNwZVK2UwZTgGVStlMGU5BlUrZTBlYQZVK2UwZWIGVStlMGVjBlUrZTBlZAZVK2UwZWUGVStlMGVmBlUrZTBmMAZVK2UwZjEGVStlMGYyBlUrZTBmMwZVK2UwZjQGVStlMGY1BlUrZTBmNgZVK2UwZjcGVStlMGY4BlUrZTBmOQZVK2UwZmEGVStlMGZiBlUrZTBmYwZVK2UwZmQGVStlMGZlBlUrZTBmZgAAAAH//wACAAEAAAAOAAAAGAAgAAAAAgABAAEBCgABAAQAAAACAAAAAQAAAAEAAAAAAAEAAAAAyYlvMQAAAADMCC9PAAAAAMwITt8=)
- format('truetype');
- /* The original thing that was here:
- src: url('mzxfont.eot');
- src: url('mzxfont.eot?#iefix') format('embedded-opentype'),
- url('mzxfont.woff') format('woff'),
- url('mzxfont.tff') format('truetype');
- */
- font-weight: normal;
- font-style: normal;
- /* Try to fix the ugly blur. */
- /*
- font-smooth: never;
- font-smoothing: unset;
- -webkit-font-smoothing: none;
- -moz-osx-font-smoothing: unset;
- */
- }
- </style>
- <style>
- /* MegaZeux
- *
- * Copyright (C) 2018 Alice Rowan <petrifiedrowan@gmail.com>
- *
- * 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 2 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- /**
- * style.css: Embeddable formatting CSS for HTML help file generation.
- */
- body
- {
- margin: 0px;
- }
- #helpnav
- {
- font-family: Arial, Helvetica, sans-serif;
- width: 100%;
- height: 5em;
- padding: .5em;
- padding-left: 0px;
- padding-right: 0px;
- border-bottom: 5px solid;
- text-align: center;
- /* Floating navigation bar. */
- position: fixed;
- top: 0;
- }
- #helpnav h1
- {
- display: block;
- margin: .5em;
- padding: 0px;
- font-size: 1.5em;
- }
- .helpnavcentered
- {
- display: inline;
- text-align: center;
- }
- .helpnavcentered ul
- {
- padding: 0px;
- margin: .25em;
- }
- .helpnavcentered li
- {
- display: inline-block;
- margin: 1px;
- list-style-type: none;
- text-align: center;
- font-size: .95em;
- }
- .helpnavcentered li a
- {
- background-color: #222;
- border-color: #222;
- border-radius: 4px 4px;
- -moz-border-radius: 4px 4px;
- padding: 3px 5px;
- color: #FFF;
- text-decoration: none;
- }
- .helpnavcentered li a:hover
- {
- background-color: #666;
- border-color: #666;
- }
- #helpcontainer
- {
- font-family: 'mzxfont';
- width: 512px;
- height: auto;
- padding: 3px 76px;
- margin: auto;
- overflow: auto;
- white-space: pre;
- line-height: 14px;
- font-size: 14px;
- /* Extra top padding to help fix anchors. */
- padding-top: 6em;
- }
- .helpfile
- {
- page-break-after: always;
- }
- .helpfile hr
- {
- background-color: #000;
- height: 2px;
- margin: 14px 8px;
- border: none;
- }
- .helpcentered
- {
- display: block;
- text-align: center;
- margin: 0px;
- }
- .helpanchor
- {
- /* This forces the page to jump above the anchor so it doesn't display
- * under the navigation bar. */
- padding-top: 8em;
- margin-top: -8em;
- /* This is a fix for the fix above so the now gigantic anchor doesn't
- * cover links up. */
- pointer-events: none;
- }
- .helplink
- {
- text-decoration: none;
- }
- .helplink:before
- {
- padding-right: 8px;
- font-family: 'mzxfont';
- content: "\E010";
- }
- @media print
- {
- #helpnav
- {
- /* Disable the floating navigation bar in print mode. */
- position: absolute;
- border-bottom: 3px solid;
- }
- .helpnavcentered
- {
- /* Hide navigation buttons when in print mode. */
- display: none;
- }
- }
- @media only screen and (max-width: 680px),
- only screen and (max-device-width: 1080px)
- {
- /* Disable big margins on small windows, small displays, or phones. */
- #helpcontainer
- {
- padding: 3px 8px;
- padding-top: 6em;
- }
- }
- @media only screen and (max-device-width: 800px)
- {
- /* Probably a phone. Scale up navigation and text. */
- #helpnav
- {
- height: 7em;
- }
- #helpnav h1
- {
- font-size: 2em;
- }
- .helpnavcentered li
- {
- font-size: 1.5em;
- }
- #helpcontainer
- {
- width: 768px;
- line-height: 21px;
- font-size: 21px;
- }
- }
- @media only screen and (max-device-width: 1080px)
- {
- /* Probably a phone. Scale up navigation and text. */
- #helpnav
- {
- height: 8em;
- }
- #helpnav h1
- {
- font-size: 2.5em;
- }
- .helpnavcentered li
- {
- font-size: 1.75em;
- }
- #helpcontainer
- {
- width: 960px;
- line-height: 26px;
- font-size: 26px;
- }
- }
- </style>
- <style>
- /* MegaZeux
- *
- * Copyright (C) 2018 Alice Rowan <petrifiedrowan@gmail.com>
- *
- * 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 2 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- /**
- * style_color.css: Embeddable color CSS for HTML help files.
- * Should only style outside of printing mode.
- *
- * TODO: possibly invert the query here.
- */
- @media not print
- {
- body
- {
- background-color: #333;
- }
- #helpnav
- {
- background-color: #444;
- color: #FFF;
- border-bottom-color: #333;
- }
- #helpcontainer
- {
- background-color: #555;
- color: #FFF;
- }
- .helplink { color: #FFFFFF; }
- .helplink:before { color: #FFFF55; }
- .helplink:hover { color: #FF55FF; }
- .f0 { color: #000000; }
- .f1 { color: #0000AA; }
- .f2 { color: #00AA00; }
- .f3 { color: #00AAAA; }
- .f4 { color: #AA0000; }
- .f5 { color: #AA00AA; }
- .f6 { color: #AA5500; }
- .f7 { color: #AAAAAA; }
- .f8 { color: #555555; }
- .f9 { color: #7777FF; } /* Should be #5555FF, but that's ugly on dk grey. */
- .fa, .fA { color: #55FF55; }
- .fb, .fB { color: #55FFFF; }
- .fc, .fC { color: #FF5555; }
- .fd, .fD { color: #FF55FF; }
- .fe, .fE { color: #FFFF55; }
- .ff, .fF { color: #FFFFFF; }
- .b0 { background-color: #000000; }
- .b1 { background-color: #0000AA; }
- .b2 { background-color: #00AA00; }
- .b3 { background-color: #00AAAA; }
- .b4 { background-color: #AA0000; }
- .b5 { background-color: #AA00AA; }
- .b6 { background-color: #AA5500; }
- .b7 { background-color: #AAAAAA; }
- .b8 { background-color: #555555; }
- .b9 { background-color: #5555FF; }
- .ba, .bA { background-color: #55FF55; }
- .bb, .bB { background-color: #55FFFF; }
- .bc, .bC { background-color: #FF5555; }
- .bd, .bD { background-color: #FF55FF; }
- .be, .bE { background-color: #FFFF55; }
- .bf, .bF { background-color: #FFFFFF; }
- }
- </style>
- </head>
- <body>
- <div id="helpnav">
- <h1>MegaZeux 2.91j (20190220) - Help File</h1>
- <div class="helpnavcentered"><ul>
- <li><a href="#MAIN.HLP__072">Contents</a></li><li><a href="#EDITINGK.HLP__080">Editor Keys</a></li><li><a href="#ROBOTICR.HLP__087">Robotic Manual</a></li><li><a href="#COMMANDR.HLP__1st">Commands</a></li><li><a href="#COUNTERS.HLP__1st">Counters</a></li><li><a href="#NEWINVER.HLP__1st">Changelog</a></li></ul></div>
- </div>
- <div id="helpcontainer">
- <div class="helpfile" id="MAIN.HLP">
- <span class="b1 "> </span>
- <span class="b1 "> </span><span class="ff b1 ">M </span><span class="fb b1 ">E G </span><span class="f3 b1 ">A Z </span><span class="fb b1 ">E U </span><span class="ff b1 ">X </span>
- <span class="b1 "> </span>
- <a class="helpanchor" name="MAIN.HLP__072"> <span class="f9 ">Table of Contents</span></a>
- <a class="helplink" href="#FAQ.HLP__1st">FREQUENTLY ASKED QUESTIONS.</a>
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- <a class="helplink" href="#HELPONHE.HLP__000">Help on Help (Press F1 Within Help to Read This)</a>
- <a class="helplink" href="#MOUSESUP.HLP__1st">Mouse Support in MegaZeux</a>
- <a class="helplink" href="#1ST_TIME.HLP__071">Overview of MegaZeux - First Time Users Read This!</a>
- <a class="helplink" href="#ZZT.HLP__zzt">A ZZTer's Guide to MegaZeux</a>
- <a class="helplink" href="#DIABOX.HLP__098">Dialog Boxes</a>
- <a class="helplink" href="#CONTROLS.HLP__ctr">Controls</a>
- <a class="helplink" href="#NONDESCR.HLP__091">Nondescript Play Tips</a>
- <a class="helplink" href="#BUILTINS.HLP__1st">The Mirth of Built-ins</a>
- <a class="helplink" href="#THEWORLD.HLP__1st">The World Editor</a>
- <a class="helplink" href="#GENERALE.HLP__1st">General Editing Tips</a>
- <a class="helplink" href="#EDITINGK.HLP__080">Editing Keys and Options Reference</a>
- <a class="helplink" href="#CHAREDIT.HLP__079">The Character Editor</a>
- <a class="helplink" href="#PALEEDIT.HLP__093">The Palette Editor</a>
- <a class="helplink" href="#SMZXMODE.HLP__095">Super MegaZeux Modes</a>
- <a class="helplink" href="#GLOBALIN.HLP__086">Global Info Options</a>
- <a class="helplink" href="#BOARDINF.HLP__085">Board Info Options</a>
- <a class="helplink" href="#SOUNDEFX.HLP__1st">MegaZeux's Sound System</a>
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helplink" href="#SCROLLSS.HLP__1st">Signs and Scrolls in the Editor</a>
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors - What They Are and How to Use Them</a>
- <a class="helplink" href="#ROBOTSWH.HLP__1st">Robots - What They Are and How to Use Them</a>
- <a class="helplink" href="#ROBOTICT.HLP__1st">Robotic Tutorial</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#UPDATER.HLP__099">The MegaZeux Updater</a>
- <a class="helplink" href="#DBGMODE.HLP__dbg">Debug Modes</a>
- <a class="helplink" href="#ERRORMES.HLP__1st">Error Messages</a>
- <a class="helplink" href="#MEGAZEUX.HLP__1st">MegaZeux Limitations</a>
- <a class="helplink" href="#IFYOUFIN.HLP__1st">If You Find a Bug...</a>
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <p class="helpcentered">** Credits and Acknowledgments **</p>
- <p class="helpcentered">Programming and Overall Design by Gilead Kutnick (Exophase),</p><p class="helpcentered">Alistair Strachan (ajs), Alice Rowan (Lachesis) and Lancer-X</p><p class="helpcentered">Based off of original program and source code by Alexis Janson</p><p class="helpcentered">Help file by Terryn</p><p class="helpcentered">Default SMZX palette by Joel Lamontagne (LogiCow)</p><p class="helpcentered">ccv utility by Lancer-X</p><p class="helpcentered">png2smzx utility by Alan Williams (Mr_Alert)</p><p class="helpcentered">checkres utility by Josh Matthews (Revvy), ajs and Lachesis</p><p class="helpcentered">Port contributors: Adrian Siekierka (asiekierka) [3DS],</p><p class="helpcentered">Mr_Alert [Wii], Kevin Vance [NDS], Simon Parzer [GP2X]</p><p class="helpcentered">Renderer code contributors: LogiCow, Mr_Alert</p><p class="helpcentered">Shader code contributors: David Cravens (astral), GreaseMonkey</p><p class="helpcentered">Icon by Quantum P.; Extra icons by LogiCow</p><p class="helpcentered">GDM conversion by ajs and MadBrain</p><p class="helpcentered">Other past contributors: Spider124, Koji, JZig, Akwende,</p><p class="helpcentered">MenTaLguY.</p>
- <p class="helpcentered">** Special Thanks **</p>
- <p class="helpcentered">Insidious (.deb Builds)</p><p class="helpcentered">mzxgiant (MSVC Testing, Bug Fixes)</p><p class="helpcentered">mzxrules (Testing)</p><p class="helpcentered">Quantum P. (OS X Testing / Builds)</p><p class="helpcentered">Spectere (OS X Builds)</p><p class="helpcentered">Terryn (Testing)</p><p class="helpcentered">Wervyn (Testing)</p>
- <p class="helpcentered">MegaZeux 2.80 Thanks & Beta Testers:</p><p class="helpcentered">Exophase</p><p class="helpcentered">ZoMbIeGuY</p><p class="helpcentered">Wervyn</p><p class="helpcentered">Quasar84</p><p class="helpcentered">Lancer-X</p><p class="helpcentered">KenOhki2112</p><p class="helpcentered">Terryn</p><p class="helpcentered">Inuchance (Macintosh testing)</p><p class="helpcentered">Everyone who submitted a bug report</p>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="HELPONHE.HLP">
- <a class="helpanchor" name="HELPONHE.HLP__000"> </a>
- <p class="helpcentered"><span class="f9 ">Help on Help</span></p>
- Using MegaZeux's help system is very simple. Press F1 at almost
- any time to bring up context-relevant help. Within help, use the
- arrow keys to scroll the current section. Press PageUp and
- PageDown to scroll faster. Many sections of help contain
- selections, like this:
- <a class="helplink" href="#HELPONHE.HLP__sl">Selection</a>
- <a class="helpanchor" name="HELPONHE.HLP__sl"> </a>
- Scroll the section until the pointer is aligned with the arrows
- on the edges of the help box, and press Enter. You will jump to
- a help section indicated by the selection. Example: If a
- selection says "Controls", scroll until the word is aligned
- with the arrows on the left and right, and press Enter. You
- should now be reading help on Controls.
- Press F1 within help to jump to this section. Press Alt+F1
- within help to jump to the Table of Contents (Table of Major
- Help Topics). Press ESC to exit the help system.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="1ST_TIME.HLP">
- <a class="helpanchor" name="1ST_TIME.HLP__071"> </a>
- <p class="helpcentered"><span class="f9 ">Overview of MegaZeux</span></p>
- <p class="helpcentered">Welcome to MegaZeux! Use the arrow keys to scroll</p><p class="helpcentered">this text, and ESC when you are done reading.</p>
- <p class="helpcentered">Press END to learn about the NEW FEATURES in</p><p class="helpcentered">MegaZeux!</p>
- As you may already know, MegaZeux is a game system which
- allows you to play almost limitless worlds with
- dated-yet-charming graphics and with excellent digitized music
- and sound. Not only are there several MZX worlds out there
- already, but new worlds are being uploaded to large websites
- like DigitalMZX. However, the best feature of MegaZeux is the
- World Editor.
- Using the World Editor, ANYONE can create the world of their
- dreams. Make it as simple or complex (well, almost), as easy
- or difficult, as long or short as you please. We aren't just
- talking about worlds made up of petty, pre-programmed enemies
- and objects; MegaZeux has its own, easy-to-use PROGRAMMING
- LANGUAGE called Robotic that allows you to create objects,
- engines and worlds that do almost anything you desire.
- For the newest user, it's recommended that you play Caverns,
- the first ever MegaZeux game, to get the feel of simple yet
- well-designed games in MegaZeux. You may wish to read the help
- section entitled "Controls" to learn how to play MegaZeux.
- If you're more adventurous, start with a more complex game like
- Demon Earth or Bernard the Bard, or a prettier game like & or
- Fritz Blitz to see what kind of graphics functions, bells and
- whistles MZX can offer.
- Once you have the feel for the game, feel free to dive into the
- World Editor and get messy! You should probably read the help
- section entitled "The World Editor" first.
- To go to one of these sections now, hit Enter after aligning
- the arrows with one of these choices. Press ESC now to exit to
- the game.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <a class="helplink" href="#CONTROLS.HLP__ctr">Controls</a>
- <a class="helplink" href="#THEWORLD.HLP__1st">The World Editor</a>
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <hr /></div>
- <div class="helpfile" id="ZZT.HLP">
- <a class="helpanchor" name="ZZT.HLP__zzt"> </a>
- <p class="helpcentered"><span class="f9 ">A ZZTer's Guide to MegaZeux</span></p>
- ZZT and MegaZeux are worlds apart, although one can convert
- from making ZZT games to making basic MegaZeux games with
- (mostly) minimal effort. This section is to help seasoned
- ZZTers adjust to MegaZeux.
- Firstly, some mechanistic differences exist.
- -MegaZeux uses counters instead of flags; however, counters
- can easily be used as flags if set only to 1 and 0.
- -MegaZeux has an incredibly high amount of available counters.
- -There is no default mechanism for torches.
- -No equivalent of centipedes exists as a default enemy.
- -Multiple MegaZeux keys of the same color can be picked up at
- once.
- -There is no board setting controlling the amount of player
- shots that can be on a given board.
- -Cloning the player has no use in MZX; uses of player clones
- need simulated in Robotic.
- -The Shift-? hotkey (often used for inventory engines) does not
- exist in MegaZeux but can be emulated with Robotic.
- -ZZT prevents moving between boards if the other board has an
- object where the player would end up, but MZX simply overwrites
- the object on the other board with the player.
- -Bomb explosions are not instantaneous but instead radiate out
- from the center. They are also diamond-shaped as opposed to
- a flattened oval shape.
- -MegaZeux uses cycle 1 as default (as opposed to ZZT's cycle
- 3).
- -No equivalent of duplicators exists.
- -Seekers (aka "stars") and bears do not destroy Breakaway
- territories in MegaZeux.
- -MegaZeux water is not equivalent to ZZT water, as it can be
- traversed. ZZT water is most similar to MZX's "goop".
- -MZX Sharks can be shot. They do not swim in water, but can in
- lava or goop. They can also shoot any type of projectile.
- -MZX Scrolls cannot execute code. Use a Robot ending with the
- "die" command to emulate ZZT scrolls with code instead.
- -Terrains that give out a distinctive message on first touch
- (fakes, forests) give out no such message in MZX.
- -There are two types of Gems; the one that best emulates ZZT
- gems is the Magic Gem.
- -Lasers will not push the player into other objects. This makes
- some ZZT laser configurations a lot less deadly.
- -Scrolls with only one line launch a message box (instead of
- using the message row for the line).
- -ZZT has one less bullet type than MZX; shift MZX types one
- tier of "friendliness" for each typical shooter to get
- ZZT-equivalent bullets.
- -Putting in fake commands for comedic effect (e.g. putting in
- <span class="fA ">#GOSUCKANEGG</span><span class="fF "> to make ZZT beep and go "ERR: Bad command</span>
- GOSUCKANEGG") does not work in MegaZeux and has to be emulated.
- -Special exploits (e.g. black holes, monitors, speed-up
- exploit, flag overloading) have no direct MZX equivalent.
- -Other, extremely minor, differences best left for total wonks
- or for ZZT port authors, while others are implicitly understood
- and do not require spelling out.
- Secondly, here is how the ZZT-OOP commands convert to Robotic.
- ---------------------------------------------------------------
- Key:
- [*] = There's no direct (i.e. one-line) way to make Robots do
- commands on IF statements. A label pointing to the command will
- have to do.
- [+] = There is no good analogue for this command, due to
- bound objects sharing zap/restore settings in ZZT. Without
- these concerns, COPYROBOT is the closest match.
- [#] = You need to manually add a label at the top of the Robot
- for this in MZX.
- ---------------------------------------------------------------
- <span class="fA ">@object_name = . "@Robot_name"</span>
- <span class="fA ">/direction/direction = PERSISTENT GO (works only for cardinal</span>
- <span class="fA ">directions and idle: n s e w i)</span>
- <span class="fA ">?direction = / "directions"</span>
- <span class="fA ">'comment = . "comment"</span>
- <span class="fA ">one line of text = * "text"</span>
- <span class="fA ">multiple lines of text = % "text"</span>
- <span class="fA ">!label;text = ? "label" "text"</span>
- <span class="fA ">$ text = % "~ftext" (by default palette)</span>
- <span class="fA ">#BECOME thing = BECOME color thing param</span>
- <span class="fA ">#BIND object_name = COPYROBOT "Robot" [+]</span>
- <span class="fA ">#CHANGE thing newthing = CHANGE color thing param newcolor</span>
- <span class="fA ">newthing newparam</span>
- <span class="fA ">#CHAR # = CHAR #</span>
- <span class="fA ">#CLEAR flag = SET "counter" 0</span>
- <span class="fA ">#CYCLE # = CYCLE #</span>
- <span class="fA ">#DIE = DIE</span>
- <span class="fA ">#END = END</span>
- <span class="fA ">#ENDGAME = ENDGAME</span>
- <span class="fA ">#GIVE item # = GIVE # item</span>
- <span class="fA ">#GO direction = GO direction #</span>
- <span class="fA ">#IDLE = WAIT #</span>
- <span class="fA ">#IF flag label;text = ? "counter" "label" "text"</span>
- <span class="fA ">#IF flag THEN command = IF "counter" = 1 THEN "label" </span>
- <span class="fF ">[*]</span>
- <span class="fA ">#IF ANY object THEN command = IF ANY color thing param "label"</span>
- <span class="fF ">[*]</span>
- <span class="fA ">#IF NOT flag THEN command = IF "counter" = 0 THEN "label" </span>
- <span class="fF ">[*]</span>
- <span class="fA ">#IF condition THEN command = IF condition THEN "label" </span>
- <span class="fF ">[*]</span>
- <span class="fA ">#IF NOT condition THEN command = IF NOT condition THEN "label"</span>
- <span class="fF ">[*]</span>
- <span class="fA ">#LOCK = LOCKSELF</span>
- <span class="fA ">#PLAY notes = PLAY "notes"</span>
- <span class="fA ">#PUT direction thing = PUT color thing param direction</span>
- <span class="fA ">#RESTART </span>
- <span class="fF ">[#]</span>
- <span class="fA ">#RESTORE label = RESTORE "label" #</span>
- <span class="fA ">#SEND label = GOTO "label"</span>
- <span class="fA ">#SEND Objectname:"label" = SEND "Robotname" "label"</span>
- <span class="fA ">#SEND ALL:command = SEND "All" "label" </span>
- <span class="fF ">[*]</span>
- <span class="fA ">#SET flag = SET "counter" 1</span>
- <span class="fA ">#SHOOT direction = SHOOT direction</span>
- <span class="fA ">#TAKE item # failure_label = TAKE # item "failure_label"</span>
- <span class="fA ">(failure label optional)</span>
- <span class="fA ">#THROWSTAR direction = SHOOTSEEKER direction</span>
- <span class="fA ">#TRY direction label = TRY direction "label"</span>
- <span class="fA ">#UNLOCK = UNLOCKSELF</span>
- <span class="fA ">#WALK direction = WALK direction</span>
- <span class="fA ">#ZAP label = ZAP "label" #</span>
- ---------------------------------------------------------------
- As for conditions, a few are changed:
- <span class="fA ">ALLIGNED</span><span class="fF "> is now </span><span class="fA ">ALIGNED</span>
- <span class="fA ">CONTACT</span><span class="fF "> is now </span><span class="fA ">TOUCHING ANYDIR</span>
- <span class="fA ">ENERGIZED</span><span class="fF "> is no longer a condition but the "invinco" label.</span>
- ---------------------------------------------------------------
- This should be all one needs to make most ZZT-style games for
- MegaZeux, except for a little Robotic knowledge to replicate
- things like torches and duplicators. Of course, much more
- powerful games can be made with MegaZeux; see corresponding
- help for details.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="DIABOX.HLP">
- <a class="helpanchor" name="DIABOX.HLP__098"> </a>
- <p class="helpcentered"><span class="f9 ">Dialog Boxes</span></p>
- Much of MegaZeux's interface is made of dialog boxes. They
- are simple and intuitive to use, but instructions for the
- uninformed are included here.
- A dialog box is a form of inputting various information. An
- example of a dialog box is the Save Game box or the Settings
- box, both in-game. To use a box is simple - Use TAB and
- SHIFT+TAB to highlight an element, and type or use the cursor
- keys to change the value. Press ENTER on a button (Rectangle
- with a label) to exit the dialog or produce an effect.
- MZX also utilizes mouse control. You can click on a dialog box
- element to select it, or click on a selected element to change
- it. The mouse wheel will cycle up/down the choices in the
- current section. Click on a selected button to activate it.
- You can usually use HOME to jump to the first section of the
- dialog box, and END to jump to the OK or NEXT button. TAB jumps
- forward a section, while SHIFT+TAB goes backwards a section.
- The different dialog box elements and special related keys
- are explained in detail for the remainder of this section.
- INPUT - This is where you type in a series of characters,
- usually letters and numbers. You can move the cursor around
- within the line, type to insert characters, move to the start
- with Home, and move to the end with End. Alt + Backspace
- deletes the entire line, while Ctrl + Backspace deletes the
- last typed word.
- NUMBER - This is where you have a number and you change it
- with the arrow keys or mouse clicks on buttons. Up, Down, and
- the mouse wheel will change it by 1, Alt+Up, Alt+Down and
- Alt+Wheel will change it by 10, and PageUp and PageDown will
- change it by 100. You can also hold the mouse button down on one
- of the arrows to change the number or press 0-9 to set the last
- digit. Pressing 0-9 on the keypad changes the current digit to
- that value. Finally, Backspace deletes the last digit.
- NUMBER LINE - This is a line of numbers, with one highlighted.
- It functions in a manner similar to the above, but in a limited
- range.
- CHARACTER - This is where you can select characters. Press a
- character to use that character; click on it or press Enter to
- get a large menu of characters (32x8) to select from.
- COLOR - This is where you can select a single color. Press
- Enter or click on it to get a large menu of colors to choose
- from.
- CHECK BOXES - These are On/Off switches. Use Up/Down or the
- mouse wheel to move within the list of choices, and use Space,
- Enter, or mouse clicks to toggle choices on and off. Press Tab
- to jump out of a check box section. An [X] means the option is
- currently on.
- RADIO BUTTONS - These are similar to Check Boxes, but are
- mutually exclusive. The mouse or arrow keys will select the
- current and ONLY option that is on. The ( ) shows the current
- option.
- BUTTON - These are rectangles with labels. When selected,
- press Enter or click to activate. OK or Done will verify the
- contents of the dialog box. Cancel will cancel any changes
- you've made. (ESC will usually do this as well.) Next and
- Previous move between multiple dialog boxes. Other buttons
- do what their label signifies and are explained in the
- appropriate help section.
- LISTS - These show a selection from a list of choices. The
- current selection is shown. Press Enter or click on it to
- bring up a list of choices from which you can select a new
- choice.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="CONTROLS.HLP">
- <a class="helpanchor" name="CONTROLS.HLP__ctr"> </a>
- <p class="helpcentered"><span class="f9 ">Controls</span></p>
- Universal controls are as follows:
- -Tab goes forward one section; Shift+Tab goes backward one
- section.
- -Esc cancels.
- -Enter selects.
- -Alt+Backspace deletes the entire line.
- -Ctrl+Backspace deletes the last typed word.
- -Ctrl+Left jumps to the previous word; Ctrl+Right jumps to the
- next word.
- -0 thru 9 sets the last digit in a number box (such as setting
- amounts of items in a chest); backspace deletes the last digit.
- On Mac platforms, any command that uses the Alt key can take 
- (the command key) instead.
- File access controls are as follows:
- -(0-9 and A-Z) will jump to the first file/directory starting
- with that character. More specific seeking can be done by
- typing characters in quick succession (for instance, s+e+c
- would jump to the first file starting with sec).
- -Del will delete the highlighted file/directory. You will be
- asked for confirmation.
- -Alt+R will rename the highlighted file/directory.
- -Alt+N will create a new directory.
- In-game controls are as follows:
- F1 - Help
- Use this at any time to bring up context-relevant help. Within
- the game, you will go to the Controls section. Some games may
- have this menu disabled or replaced with their own help menus.
- Enter - Menu/Status
- Use this to bring up a menu of options and a list of your
- current stats, such as Score, Gems, any custom-defined status
- counters, etc. Some games may have this key do nothing, or even
- something different entirely.
- ESC - Exit to Title
- This will load a prompt to quit the current game and return to
- its title screen. In yes/no dialog boxes, this selects the "no"
- option. Some games may disable using ESC to trigger the exit
- prompt, but other methods (such as Alt+F4) will always work.
- F2 or Ctrl+F2 or Alt+F2 - Settings
- <a class="helpanchor" name="CONTROLS.HLP__092">This will bring up a dialog box where you can change the</a>
- current game settings: Game Speed (if allowed), Music toggle,
- Sound toggle, and Audio Volumes (Overall Volume, SoundFX
- volume, and PC Speaker SFX).
- Speed 1 is the fastest; speed 16 is the slowest. A speed of 1
- will run MZX as fast as possible and as such acts differently
- between computers; it will also cause flicker in fullscreen
- mode, so it is not recommended unless it is your only option.
- (Please note that some games may have the speed change by
- itself; the next load will change to the default speed unless
- otherwise prompted.)
- No changes to sound options will go into effect until the
- Settings menu is left.
- In addition to these settings, one can change the current
- scaling shader if running MegaZeux with the GLSL renderer.
- Settings for game speed will only apply for the current world;
- all other settings are global.
- Note that some games may block access to the F2 menu entirely.
- Ctrl+F2 or Alt+F2 will ignore this setting and allow access to
- the menu even if it is prohibited otherwise.
- F3 - Save Game
- This will prompt you for a filename, allowing the saving of the
- exact state of the current game. Some games may not allow
- saving on some (or any) of its screens, or will only allow
- saving in certain spots of a board. Saving lets you quit your
- game in the middle or take precautions against unknown dangers.
- F4 - Restore Game
- This will let you select a saved game from a list of filenames.
- The game will then be reloaded from the same point you left
- off. While most games will allow loading anywhere, some will
- restrict loading to certain times or will use a custom
- mechanism for loading games instead. In general, MegaZeux can
- only load saves made in MegaZeux versions sharing the current
- version number (e.g. 2.81c can load saves made in 2.81 through
- 2.81h), but current versions of MegaZeux allow direct loading of
- saves made in 2.84 versions as well as saves made in the current
- version.
- NOTE: A few games may save or load automatically, and
- high-caliber games may have completely different methods of
- saving and loading games.
- F5 or Ins - Toggle Bomb Type
- This will switch your current bomb type between High Strength
- and Low Strength.
- F6 - Debug Window
- This will bring up a small box in the lower left corner of the
- screen, detailing several statistics. The top-right of the box
- displays the world version of the current world; X/Y lists the
- current x,y position of the player; Board lists the current
- board number; Robot mem lists the amount of Robot memory
- currently consumed by the current board's Robots; the space
- below lists the currently playing music, with "(no module)" for
- none and "*" for the module wildcard; finally, the bottom right
- numbers list the key_code (green) and key_pressed (magenta)
- values of the last pressed key. Press F6 again to turn the box
- off. This shortcut will only work during playtesting in the
- editor.
- F7 - Items Cheat
- This will set ammo, coins, gems, hibombs and lobombs to 32767,
- fill health (set to maxhealth), fill lives (set to maxlives),
- and set keys to one of each color. This is a cheating function,
- so do not use unless fully necessary; a few games punish the
- player for using this function. This may be limited to
- playtesting sessions in the editor, or limited to MZXRun builds,
- depending on config.txt settings.
- F8 - Zap Cheat
- This will destroy everything in all eight directions directly
- around the player, replacing all eight squares with spaces.
- This is a cheating function, so do not use unless fully
- necessary; a few games punish the player for using this
- function. This may be limited to playtesting sessions in the
- editor, or limited to MZXRun builds, depending on config.txt
- settings.
- F9 - Quicksave
- This will save the game, like F3, but to the last filename you
- used without prompting you for a filename. The old file will
- be overwritten. If no game has been saved since MegaZeux was
- started, the save will have the default filename listed in the
- config.txt file. If saving is blocked, quicksaving will be
- blocked as well.
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- F10 - Quickload
- This will reload the last game saved using F3 or F9. If no
- game has been saved since MegaZeux was started, the default
- save filename will be used. The same caveats about save versions
- still apply here. If loading is blocked, quickloading will be
- blocked as well.
- F11 - Counter Debug Mode
- This will load a screen listing which counters and strings
- have been set, as well as values for default counters and
- strings. Counter debug mode allows considerable manipulation of
- counters and strings, among other things. This shortcut only
- works when playtesting in the editor. For more detail, go to its
- specific section.
- <a class="helplink" href="#DBGMODE.HLP__100">Debug Modes - Counter Debug Mode</a>
- Alt+F11 - Robotic Debugger
- This will launch the config menu for the built-in Robotic
- debugger. The Robotic debugger can monitor running Robotic code
- and allow step-by-step reading and manipulation of running
- Robots as they execute. This shortcut only works when
- playtesting in the editor. For more detail, go to its specific
- section.
- <a class="helplink" href="#DBGMODE.HLP__101">Debug Modes - The Robotic Debugger</a>
- F12 - Take Screenshot
- Pressing F12 will make a 640x350 screenshot (in PNG format by
- default) in the working directory, using the software renderer.
- The file naming starts from "screen0". The config file may
- disallow taking screenshots, depending on setting.
- Arrows - Move
- The arrow keys will move the player and allow it to interact
- with most objects in most games.
- Space - Shoot
- By default, one uses this key in conjunction with an arrow
- key to fire a weapon in the selected direction. Weapons and
- spacebar uses vary from world to world.
- Del - Bomb
- By default, this will drop a bomb of the current type BENEATH
- the player. Move out of the way to activate it, then run before
- it explodes! Uses of the del key vary from game to game.
- Tab / Left Arrow / Right Arrow - Select Option
- In yes/no dialog boxes, these keys toggle between yes and no.
- Other games may have other controls, such as 'S' to cast a
- spell or 'I' to bring up an inventory screen, but they should be
- detailed within the game.
- The following keys are active at the title screen:
- F1 - Help (see above)
- Enter - Menu
- This is similar to default Enter within the game. However,
- it brings up a list of key bindings instead.
- ESC - Exit MegaZeux
- Pressing ESC will load a prompt where the user can exit
- MegaZeux.
- F2 / Ctrl+F2 / Alt+F2 / S - Settings (see above)
- F3 or L - Load World
- This will allow you to load up the title screen of any MegaZeux
- world. A list of choices will be presented to you to select
- from. After the world is loaded, you may watch the title
- screen, then press 'P' to play.
- F4 or R - Restore Game (see above)
- F5 or P - Play Game
- This will stop the title screen and actually begin game play.
- F7 or U - Updater
- This will load the updater. The updater will connect to an
- online repository and check if a new MegaZeux version is
- available. If so, the user gets the option to update MegaZeux.
- MZX will then list the files added/changed/deleted in the
- update, and if the user decides to update, MZX will restart
- when the update is finished.
- WARNING: This will most likely replace your config.txt file, so
- if you want to keep your settings, make a backup first so you
- can apply your settings to the new file!
- F8 or N - New World
- This will quit the gaming portion of MegaZeux and enter the
- integrated World Editor, set to an empty MZX world. Alt+N will
- act the same, but skip the prompt to name and create a starting
- board.
- F9 or E - Edit World
- This will quit the gaming portion of MegaZeux and enter the
- integrated World Editor, set to edit the currently-loaded
- world. When no world is loaded, this acts the same as New World,
- and Alt+E with no world loaded will also skip the prompt to name
- and create a starting board. Note that "MZXRun" builds of
- MegaZeux do not contain the editor. For detailed info on using
- the World Editor, view the appropriate help sections.
- <a class="helplink" href="#THEWORLD.HLP__1st">The World Editor</a>
- F10 - Quickload (see above)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="NONDESCR.HLP">
- <a class="helpanchor" name="NONDESCR.HLP__091"> </a>
- <p class="helpcentered"><span class="f9 ">Nondescript Play Tips</span></p>
- First, let me warn you that many worlds you get from archives
- or (especially) from personal webpages may not be of acceptable
- quality. They may be unfair, boring, have numerous bugs, and/or
- not give proper instructions. On a related note, there is no
- problem in MAKING poor games, but PLEASE think before uploading
- them without attempting fixes or improvements, even in these
- days where games are fewer and farther between. Really old games
- of bad quality, on the other hand, are tolerated somewhat
- better. Don't let a few dull games ruin the fun.
- With that out of the way, some basic play tips:
- <span class="fA ">*</span><span class="fF "> RTFM (Read the Flipping Manual). Whatever information</span>
- the game has to give is probably important. Some authors
- include info files in their distributions; make sure these
- are read. It saves everybody time and effort. To authors, it
- saves time and effort to include such files in your
- submissions.
- <span class="fA ">*</span><span class="fF "> Make sure you visit every screen possible.</span>
- <span class="fA ">*</span><span class="fF "> Save your game! It is rather simple - in most games,</span>
- Press F3 to save your game to disk at the EXACT point you are
- [if allowed]. Press F4 to reload a saved game. You can use F9
- and F10 to quick-save and quick-load, which work on the last
- game you saved. Remember to save often and keep multiple saves-
- If something ends your game, you'll want to lose as little
- progress as possible.
-
- <span class="fA ">*</span><span class="fF "> Touch everything! Even things of seemingly little value</span>
- may prove worthy of your attention. If it kills you, then...
- well... hope you saved (see above).
- <span class="fA ">*</span><span class="fF "> Collect supplies! Make sure you grab every coin, gem,</span>
- ammo dump, bomb, chest, pouch, and foobar you see! You will
- often be in want of supplies, so don't push things.
- <span class="fA ">*</span><span class="fF "> Remember how things work. Most things in MegaZeux have</span>
- patterns, even Robots, and the same object will usually do the
- same thing all the time. (However, two objects may look alike
- and not really be the same thing.)
- <span class="fA ">*</span><span class="fF "> Don't take anything for granted. If it looks like a spike,</span>
- it probably is. _Probably_. Although it is rare that these
- types of puzzles must be solved to complete a game, there
- are often bonuses, hidden rooms, etc. behind illusions.
- <span class="fA ">*</span><span class="fF "> Try things twice, even thrice. Sometimes objects respond</span>
- differently at other times. If you get a new treasure, go
- talk to all the citizens - maybe one of them will say
- something new. If some place seems inaccessible, come back
- later!
- <span class="fA ">*</span><span class="fF "> If doing the same thing over and over keeps failing, try</span>
- something else. It helps to look at new methods and to put
- distance between yourself and the problem.
-
- <span class="fA ">*</span><span class="fF "> Bullets can stop spitting fire, but only sometimes. If trying</span>
- to gun down an enemy that spits fire, stagger your shots
- somewhat; holding down the spacebar often results in ALL of
- your shots being cancelled.
- <span class="fA ">*</span><span class="fF "> If all else fails, look in the game with the editor. This</span>
- depends on the clarity of the author(s)'s code, but looking in
- the editor can help if all other solutions have been
- exhausted.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="MOUSESUP.HLP">
- <a class="helpanchor" name="MOUSESUP.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Mouse Support in MegaZeux</span></p>
- Use of the mouse is very simple. Move the mouse to move the
- mouse cursor. Press the Left mouse button to select something,
- activate something, etc. Press the Right mouse button to grab
- whatever's under the cursor in the World Editor. Certain games
- may make use of the mouse during gameplay; the scroll wheel will
- always emulate up/down presses in dialog boxes and the list menu
- on top of whatever functions it may have in the current game.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="BUILTINS.HLP">
- <a class="helpanchor" name="BUILTINS.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">The Mirth of Built-ins</span></p>
- The following help section contains a list of the different
- objects, enemies, items, and terrains you will find within
- the different MegaZeux worlds.
- Want to make a (very) quick and (very) dirty game? Built-ins are
- the way to do it! However, outside of a select few built-ins
- (such as certain terrains, Robots and items) heavy usage of
- these built-ins for long-term projects is best-suited for
- beginners and savants.
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Terrains</span><span class="f8 b0 "> </span></p>
- <span class="fB ">Space</span>
- This is the simplest terrain; it does absolutely nothing!
- <span class="fB ">Normal </span><span class="fA b0 "></span>
- <span class="fB ">Solid </span><span class="fE "></span>
- <span class="fB ">Tree </span><span class="fA "></span>
- <span class="fB ">Line </span><span class="fF "></span>
- <span class="fB ">Custom Block </span><span class="f7 ">?</span>
- These are all basic walls; they just get in the way. Sometimes
- trees can be burned down.
- <span class="fB ">Breakaway </span><span class="fC b0 "></span>
- <span class="fB ">Custom Break </span><span class="f7 ">?</span>
- These block movement as well, but they can be destroyed with
- most weapons (such as bullets or bombs). Certain other things
- can destroy them as well.
- <span class="fB ">Fake </span><span class="fA "></span>
- <span class="fB ">Carpet </span><span class="f4 b0 "></span>
- <span class="fB ">Floor </span><span class="f9 b0 "></span>
- <span class="fB ">Tiles </span><span class="f0 bF "></span>
- <span class="fB ">Custom Floor </span><span class="f7 ">?</span>
- These are all treated as flooring, or "background". Anything,
- including yourself, can move onto and over these. They are
- primarily for decoration.
- <span class="fB ">Web </span><span class="f7 "></span>
- <span class="fB ">Thick Web </span><span class="f7 "></span>
- These are another type of flooring. However, webs are often
- the home for spiders, so watch your step!
- <span class="fB ">Forest </span><span class="f2 b0 "></span>
- This terrain will block the path of almost any built-in. You,
- however, can move through it with ease, clearing a pathway.
- Enemies can move along a cleared path.
- <span class="fB ">Invis. Wall</span>
- This LOOKS like just an empty space... until you bump into it.
- Then it becomes a normal wall, blocking your path.
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Items</span><span class="f8 b0 "> </span></p>
- <span class="fB ">Gem </span>
- <span class="fB ">Magic Gem </span>
- Your total number of gems is shown on the status screen, and
- each gem gives you one point. Many older games also use them as
- a type of currency, where you can trade gems for stuff like
- food, ammo, weapons, or hints. Magic Gems also give you one
- health point apiece when taken.
- <span class="fB ">Health </span><span class="fC "></span>
- This will improve your outlook dramatically. Collecting one of
- these increases health by a certain amount. The amount varies
- for different hearts. Keep in mind that if you're currently at
- your maximum health, running into a heart will still collect it.
- <span class="fB ">Energizer </span><span class="f1 "></span>
- After grabbing an energizer, the player will flash colors for a
- limited time. During this period, you are invincible against
- enemies, bullets, fire, lava, poison damage, and most other
- forms of pain. Be careful not to get into a dangerous situation
- as its energy runs out!
- <span class="fB ">Ammo </span><span class="f3 "> </span>
- When you grab ammunition, it will add a certain amount of
- ammo to your supplies. The amount may be different for
- different piles.
- <span class="fB ">Bomb </span><span class="f0 "></span>
- Each bomb you grab adds another to your supply. The sound made
- when you grab the bomb will be high-pitched for a high strength
- bomb and low-pitched for the rare low strength bomb.
- <span class="fB ">Key </span><span class="fA "></span>
- Collect keys to open locks, doors, and gates later on. The key
- and the lock/etc. must match colors, and a key will only work
- once. You can carry up to sixteen keys at once. The default
- status screen, if viewable, will show your current supply of
- keys.
- If you've played ZZT games, you'll be interested to know that
- you can carry multiple keys of the same color.
- <span class="fB ">Lock </span><span class="fA "></span>
- A lock will only open if you have a key of the same color to
- unlock it. The key can only be used once and will disappear
- along with the lock.
- <span class="fB ">Coin </span><span class="fE "></span>
- Collecting coins is a good idea- they not only increase your
- score, but can usually be used to purchase valuable items or
- services from vendors.
- <span class="fB ">Life </span><span class="fB "></span>
- A life orb will give you yet another chance for survival in
- MegaZeux. Keep in mind that if you're currently at your maximum
- amount of lives, running into a life orb will still collect it.
- <span class="fB ">Pouch </span><span class="f7 "></span>
- A pouch is usually filled with coins, gems, or even both. The
- amount varies, but often you will find yourself pleasantly
- rich....
- <span class="fB ">Chest </span><span class="f6 "></span>
- A chest can contain numerous things. The contents will be one
- of the following: Empty, a Key, Coins, Lives, Ammo, Health,
- a Potion or Ring, Bombs, or Gems. Once you grab the contents,
- the chest itself will remain, but be empty.
- <span class="fB ">Ring </span><span class="fE ">o</span>
- <span class="fB ">Potion </span>
- These mystical items will bestow a magical effect on you when
- you wear or drink them. The effect, however, is unknown to
- you until you try it... and some effects aren't so nice.
- <a class="helpanchor" name="BUILTINS.HLP__prx"> </a>
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Potion and Ring Effects</span><span class="f8 b0 "> </span></p>
- Effects are limited to the current room only, except for
- healing, hurting, and invinco.
- <span class="fB ">No Effect</span>
- This effect does absolutely nothing.
- <span class="fB ">Invinco</span>
- Just like an energizer, you will become invulnerable to most
- forms of pain until you stop flashing.
- <span class="fB ">Blast</span>
- Scatters plentiful, random explosions around the screen.
- <span class="fB ">Health x10</span>
- <span class="fB ">Health x50</span>
- Gives the player 10 or 50 additional health points,
- respectively.
- <span class="fB ">Poison</span>
- Reduces the player's health by 10.
- <span class="fB ">Blind</span>
- Temporarily blinds the player. The viewport will appear in
- dark gray. You can still move and interact, but you won't be
- able to see anything but the player.
- <span class="fB ">Kill Enemies</span>
- Kills all enemies in the room, including "Invincible" enemies.
- <span class="fB ">Lava Walker</span>
- Allows the player to temporarily walk on lava and fire.
- <span class="fB ">Detonate</span>
- Explodes all bombs and lit bombs in the room.
- <span class="fB ">Banish (Dragons)</span>
- Turns all dragons on the board into ghosts. Each ghost made this
- way will have intelligence set to 4, movement speed set to 4,
- and the "Invincible" flag set to off.
- <span class="fB ">Summon (Dragons)</span>
- Turns all creatures on the board - excepting guns - into
- dragons. (This includes other dragons.) Each dragon made this
- way will have a firing rate of 3, 4 hit points, and the "Moves"
- flag set to on.
- <span class="fB ">Avalanche</span>
- Scatters boulders randomly around the screen.
- <span class="fB ">Freeze Time</span>
- Freezes ALL non-player on-screen objects (including all Robots
- except the Global) for a short time.
- <span class="fB ">Wind</span>
- The player retains control but will also move additional random
- steps for a limited time. The wind will blow the player in all
- directions.
- <span class="fB ">Slow Time</span>
- Slows ALL non-player on-screen objects (including all Robots
- except the Global) for a short time. The resulting speed is
- approximately half normal speed.
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Creatures</span><span class="f8 b0 "> </span></p>
- <span class="fB ">Snake </span><span class="f2 "></span>
- <span class="fB ">Runner </span><span class="fC "></span>
- A snake moves in a straight line until it hits an obstruction,
- then aims itself in another direction and continues. Hitting a
- snake (like all enemies hereafter unless noted) will cause you
- to lose health, then kill the snake. Runners act like snakes and
- will take up to four hits, but will only go the opposite
- direction when obstructed.
- <span class="fB ">Eye </span><span class="fF "></span>
- An eye chases you down like any ordinary enemy, but when it
- catches you or dies, it explodes! The size of the explosion
- can vary with each eye. As eyes float, they can traverse both
- goop and lava.
- <span class="fB ">Ghost </span><span class="f7 "></span>
- <span class="fB ">Thief </span><span class="fC "></span>
- A ghost is the simplest enemy, simply chasing you. While some
- of them are invincible, most can be killed. Thieves chase but
- don't do damage. They steal your gems on touch instead, and can
- do so multiple times until killed. Ghosts can traverse lava and
- goop; thieves cannot.
- <span class="fA ">*</span>
- <span class="fB ">Slime Blob </span><span class="fA ">**</span>
- <span class="fA ">*</span>
- A slime blob usually doesn't hurt you, but it can quickly
- become incredibly annoying because of its habit of dividing
- into more slime blobs, then hardening into "solid slime"
- (i.e. breakables), quickly filling rooms.... You can often
- kill slime by touching or shooting it, but some slimes can be
- invincible, and others can be harmful to touch.
- <span class="fB ">Dragon </span><span class="f4 "> </span><span class="fC "> </span><span class="fE ">*</span><span class="fC "></span>
- Some dragons move around slowly, but their main advantage is
- their offense - they can shoot barrages of scorching flame.
- Dragons also have a strong defense, taking up to eight hits to
- kill. Touching them will take away health, but will NOT hurt the
- dragon. Dragons can traverse lava but not goop.
- <span class="fB ">Fish </span><span class="fE "></span>
- <span class="fB ">Shark </span><span class="f7 "></span>
- <span class="fB ">Spitting Tiger </span><span class="fB "> </span><span class="fF ">  </span>
- Fish have to stay in the water and often can't hurt you. Those
- that can, however, will hurt you if you're adjacent to them,
- even if you're on land. Some fish take two hits to kill. Sharks,
- however, swim in lava or goop, are always hostile, and can
- attempt to shoot you with fire, bullets or seekers. Spitting
- Tigers act like sharks, but are restricted to land.
- <span class="f0 "></span>
- <span class="fB ">Spider </span><span class="f0 "></span><span class="f7 "></span><span class="f0 "></span>
- <span class="f0 "></span>
- Spiders, although eager to catch you, are usually restricted to
- movement on webs. Certain spiders, however, can actually leave
- the webs. Some spiders take two hits to kill.
- <span class="fB ">Goblin </span><span class="f2 "></span>
- Goblins chase but periodically stop, making them an easy
- built-in villain.
- <span class="fB ">Bear </span><span class="f6 "></span>
- Bears only move if you get too close, then they lumber over for
- the attack. Many require 2 hits to kill.
- <span class="fB ">Bear Cub </span><span class="f6 "></span>
- Bear cubs are very lively, rushing all over the place. Since
- they move so fast in a seemingly random manner, they are often
- hard to kill.
- <span class="fB ">Bullet Gun </span><span class="fF ">  </span>
- <span class="fB ">Spinning Gun </span><span class="fC "></span><span class="fE ">* </span><span class="fF "></span>
- Bullet and spinning guns, both indestructible, fire any type of
- normal projectile (bullets, fire or seekers). The bullet gun,
- however, is fixed while the spinning gun can fire from all
- cardinal directions.
- <span class="fB ">Lazer Gun </span><span class="f0 "></span><span class="f1 "></span><span class="f9 "></span><span class="f3 "></span><span class="fB "></span><span class="fF "></span><span class="f7 "></span>
- The indestructible lazer guns fire off lazer walls at regular
- intervals, and sustain these walls for a specific length of
- time. Unlike in ZZT, getting hit by a laser does not push the
- player into objects, though it will push the player if a space
- is open. The beam can be obstructed by nearly anything not a
- ground type, even including a bullet.
- <span class="fB ">Missile Gun </span><span class="f0 "></span>
- Missile guns fire missiles in one direction. Some fire just
- once while others can fire missiles indefinitely. The gun
- itself is indestructible.
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Puzzle Pieces</span><span class="f8 b0 "> </span></p>
- The following objects are often used to create mind-twisting
- puzzles requiring you to push objects all over the place to
- reach a goal. Be warned.
- <span class="fB ">Boulder </span><span class="f7 "></span>
- <span class="fB ">Crate </span><span class="f6 "></span>
- <span class="fB ">Custom Push </span><span class="f7 ">?</span>
- Boulders and crates can be pushed in any direction, with any
- number of pushable things in a row. They can be blown up.
- <span class="fB ">Box </span><span class="fF "></span>
- <span class="fB ">Custom Box </span><span class="f7 ">?</span>
- Boxes can also be pushed in any direction, but cannot be blown
- up.
- <span class="fB ">Pusher </span><span class="f0 "> </span><span class="f7 "></span>
- Pushers cannot hurt you, but they constantly move in one given
- direction, pushing almost anything in their path - Boxes,
- crates, and even you!
- <span class="fB ">Slider NS </span><span class="fE "></span>
- <span class="fB ">Slider EW </span><span class="fE "></span>
- Sliders can be pushed, but ONLY in certain directions. A Slider
- NS can only be pushed north/south, while a Slider EW can only be
- pushed east/west.
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Transport</span><span class="f8 b0 "> </span></p>
- <span class="fB ">Stairs </span><span class="fF "></span>
- <span class="fB ">Cave (or door) </span><span class="f0 "></span>
- <span class="fB ">Whirlpool </span><span class="f9 b1 "></span>
- When you enter any one of these, you are transported to another
- location within the current world. These are not always
- two-way connections.
- <span class="fB ">CW </span><span class="fA ">/</span>
- <span class="fB ">CCW </span><span class="fA ">\</span>
- These rotate in the given direction (ClockWise or
- CounterClockWise), rotating everything around them at the same
- time. Walls and other solid objects will not be affected.
- <span class="fF ">v</span>
- <span class="fB ">Transport </span><span class="fF ">} {</span>
- <span class="fF ">~</span>
- Most transporters face a single direction. Entering these on
- the "open" side, or pushing other things into them, will
- cause a jump to another location. Some transporters rotate 360
- degrees and can be entered from any side.
- The destination of a transport is somewhat complex, but the
- search pattern is as follows:
- 1. If the other side of the entered transport is empty, move
- there. If there is something there that can be pushed out
- of the way, move there and push it out of the way.
- 2. If the other side is blocked, continue in that direction
- looking for the first non-blocked transporter facing the
- OPPOSITE direction, or an "any-direction" transport.
- 3. If neither condition can be met, no transport takes place.
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Elements</span><span class="f8 b0 "> </span></p>
- <span class="fB ">Still Water </span><span class="f9 b1 "></span>
- <span class="fB ">N Water </span><span class="f9 b1 "></span>
- <span class="fB ">S Water </span><span class="f9 b1 "></span>
- <span class="fB ">E Water </span><span class="f9 b1 "></span>
- <span class="fB ">W Water </span><span class="f9 b1 "></span>
- Water is a type of floor that can be moved onto by the player,
- some enemies, and certain other objects. Sometimes, water has a
- current, moving you constantly in a certain direction.
- <span class="fB ">Ice </span><span class="fB b3 ">\</span>
- Ice is another type of floor. However, the player will slide on
- it, constantly moving in the last direction the player moved
- until running into a non-pushable obstacle. Attempting to move
- in another direction while still on ice will cause the player to
- slide in that direction instead.
- <span class="fB ">Lava </span><span class="fC b4 "></span>
- Lava is another floor. However, it is (almost always) very
- deadly. Only a few things can traverse it, puzzle pieces cannot
- be pushed onto it, and any player unfortunate enough to walk on
- it will typically suffer rapid and massive amounts of damage.
- <span class="fB ">Fire </span><span class="fC b0 "></span><span class="fE b0 "></span><span class="fC b0 "></span>
- Fire is yet another type of floor. It often will spread across
- the floor, enveloping trees, chests, brown objects, and
- sometimes even empty space. It can damage the player at random
- intervals when merely standing near it, and cause constant
- damage while standing ON it, but by default fire does far less
- damage than lava. Most fires will eventually burn out.
- <span class="fB ">Lit Bomb </span><span class="f0 "></span>
- <span class="fB ">Mine </span><span class="f4 "></span>
- A lit bomb is an explosion on a fuse. You DON'T want to be
- nearby when the fuse runs out... mines, on the other hand, only
- blow up when touched, shot, or hit with an explosion.
- <span class="fF bE "></span>
- <span class="fF bE "></span><span class="fC bE "></span><span class="fF bE "></span>
- <span class="fB ">Explosion </span><span class="fF bE "></span><span class="fC bE "></span><span class="fC b4 "></span><span class="fC bE "></span><span class="fF bE "></span>
- <span class="fF bE "></span><span class="fC bE "></span><span class="fF bE "></span>
- <span class="fF bE "></span>
- An explosion starts at a certain point, quickly spreading
- outward, wreaking havoc in its wake. Some explosions are
- smaller than others. Explosions will also cause explosives
- such as bombs to explode, leading to some very cool chain
- reactions.
- <span class="fB ">Goop </span><span class="f8 b1 "></span>
- Goop is pretty much non-traversable terrain to anything
- landborne. Sharks may occasionally inhabit it, and select Robots
- may be able to walk in it. Bullets, lazers, and other
- projectiles will traverse it freely. Goop may also be treated
- as water or other terrains in certain worlds.
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Miscellaneous</span><span class="f8 b0 "> </span></p>
- <span class="fB ">Door </span><span class="f2 "></span><span class="fA "></span><span class="f2 "></span>
- <span class="fB ">Gate </span><span class="f7 "></span>
- A door is what you would expect - When you touch it, it will
- open itself, pushing obstacles in its path out of the way, and
- then close after a brief pause. Doors require two free spaces
- in the direction it moves to open fully. Certain doors are
- locked and require you to use a key to open them. They then
- remain unlocked. Gates act similarly, but do not move; they can
- be moved over directly when open.
- <span class="fB ">Ricochet Panel </span><span class="f0 ">/</span>
- <span class="fB ">Ricochet </span><span class="fA ">*</span>
- When a bullet hits a ricochet panel, it is reflected to travel
- in a new direction, depending upon the way the panel is facing.
- When a bullet hits a ricochet, it is reflected back in the
- original direction. Any bullet that hits a ricochet panel or a
- ricochet will have its type set to neutral when reflected.
- <span class="fB ">Spike </span><span class="f7 "></span>
- <span class="fB ">Custom Hurt </span><span class="f7 ">?</span>
- Spikes and other painful devices will simply hurt you if you
- touch them. These are often used in conjunction with ice or
- with sidescroller engines.
- <span class="fB ">Text </span><span class="f7 ">?</span>
- Another type of wall. Cannot be walked on, but can provide
- hints or other enlightening messages.
- <span class="fB ">Moving Wall N </span><span class="f7 ">?</span>
- <span class="fB ">Moving Wall S </span><span class="f7 ">?</span>
- <span class="fB ">Moving Wall E </span><span class="f7 ">?</span>
- <span class="fB ">Moving Wall W </span><span class="f7 ">?</span>
- Moving walls are like Runners - They just move back and forth,
- to and fro... they can't hurt you by touch, but can get in the
- way very easily.
- <p class="helpcentered"><span class="f8 b0 "> </span><span class="fF b0 ">Objects</span><span class="f8 b0 "> </span></p>
- <span class="fB ">Player </span><span class="fB b1 "></span>
- This is you. Really. Well, sometimes. The player is often
- locked, with a Robot or sprite representing the player
- character, but exactly one player object is always present.
- <span class="fB ">Scroll </span><span class="fF "></span>
- <span class="fB ">Sign </span><span class="f6 "></span>
- Touch this to display a given message. The message will be in a
- message box. A Scroll will disappear after you finish reading
- it; signs will not.
- Unlike in ZZT, scrolls and signs are text-only: they cannot
- execute any commands. Also unlike ZZT, messages only one line
- long will still be shown in a message box.
- <span class="fB ">Missile </span><span class="f0 "></span>
- Missiles fly around the room, turning at obstructions. They
- will explode if they hit the player or when they cannot turn.
- <span class="fB ">Bullet </span><span class="fF "></span>
- Bullets will fly in a straight line until they hit something
- (and disappear) or do damage to someone or something. Ricochets
- can change the direction a bullet is traveling in, as well as
- change its type to neutral. There are three types of bullets:
- Player (the player shoots these by default), Neutral (Robots
- shoot these in a default shoot command), and Enemy (built-in
- enemies shoot these by default). Player bullets cannot harm the
- player; Enemy bullets cannot harm default enemies; Neutral
- bullets can harm both the player and default enemies.
- <span class="fB ">Seeker </span><span class="fA ">|</span>
- A seeker, thrown by a Tiger, Shark, or other enemy, will chase
- the player all over the screen until they collide and do damage.
- Collision with most projectiles will not destroy it, only pause
- it. They have a limited life, however, and will expire after a
- certain amount of time or when caught in an explosion.
- They are still one of the deadliest weapons you will face;
- more than only a few at once can easily ruin a game.
- <span class="fB ">Shooting Fire </span><span class="fC "> </span><span class="fE ">*</span><span class="fC "></span>
- Shooting fire will continue in a straight line until it hits
- the player (resulting in direct damage) or another object
- (resulting in a small fire). The fire may quickly spread out of
- control in some areas, or just burn out in others. Bullets can
- sometimes destroy shooting fire, but other times the shooting
- fire simply absorbs the bullet.
- <span class="fB ">Sensor </span><span class="f7 ">?</span>
- Sensors are a form of floor that only the player can move onto.
- They will usually then produce some form of effect, by
- interacting with a Robot; other times they act as "save points".
- Other objects will push them around instead.
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors - What They Are and How to Use Them</a>
- <span class="fB ">Robot </span><span class="f7 ">?</span>
- <span class="fB ">Pushable Robot </span><span class="f7 ">?</span>
- Robots are the workhorses, the artisans, the... nearly
- everythings of MegaZeux. They are highly flexible objects
- which can do almost anything. They utilize their own full-scale
- programming language, dubbed Robotic. If another object can
- do something, a Robot can almost always do it better. They can
- show messages, fight the player, play music or sound, set the
- entire gameplay structure, and do countless other things. See
- the appropriate help sections for more information.
- <a class="helplink" href="#ROBOTSWH.HLP__1st">Robots - What They Are and How to Use Them</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="CONFGINI.HLP">
- <a class="helpanchor" name="CONFGINI.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">The Config File</span></p>
- One of the first things a new MegaZeux user should do is edit
- the options in the config file; even experienced MZXers may find
- some of the customization options novel and useful. Go open
- config.txt in any text editor. There is ample commentary to let
- the user know how to change the options. Make sure to remove
- the # sign from any option you want set!
- Editing the options can result in better sound, better / more
- customizable graphics, more fitting defaults, a more
- personalized Robotic editor, joystick support, extended macros,
- automated backup and much more.
- New versions - even minor version changes - have added new
- options to the config file, so it is helpful to keep this file
- current.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="IFYOUFIN.HLP">
- <a class="helpanchor" name="IFYOUFIN.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">If You Find a Bug...</span></p>
- ..we want to know! We're very interested in any problems or
- bugs you find in MegaZeux. We also welcome any comments,
- criticism, or suggestions. We especially appreciate QUALITY
- MegaZeux worlds. Here's the contact information as of this
- writing:
- Check the reports on DigitalMZX's Bug Tracker
- (http://www.digitalmzx.net/forums/index.php?app=tracker) to see
- if your problem has already been addressed. Active problems and
- bugs that are only fixed in a development version of MegaZeux
- are listed, as of this writing, in the "MegaZeux" category,
- while the bugs that are fixed in a stable version are in the
- "Closed MegaZeux Bugs" category. Feature Requests are handled
- similarly.
- To make things sane for all parties, do this before submitting:
- 1) Make sure you have the most current version of MegaZeux.
- 2) Make sure that the Bug Tracker doesn't address your bug.
- 3) Try to write down what specifically happens.
- 4) List what platform(s) you know show this problem.
- 5) Try to pinpoint the problem to a specific Robotic line or
- MZX function; at the very least, try to narrow it down.
- Pinpointing which version introduced the bug is very
- helpful, if possible.
- 6) If it is a crash, try to run a debug build through GDB and
- post a backtrace of the crash.
- 7) If you're unsure if the bug's been addressed, try to build
- a version from GitHub's GIT repository and see if the bug
- is still present in the test build.
- 8) Optimally, if the problem is a regression caused by the
- port, upload a world made in 2.70 that works in 2.70 but
- does not in the current version to best isolate the
- problem.
- 
- Additionally, contacting the developers in real-time can help
- illuminate the problem.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="FAQ.HLP">
- <a class="helpanchor" name="FAQ.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Frequently Asked Questions</span></p>
- The following is a list of questions that have been received
- about MegaZeux innumerable times in some form or another.
- Q: I hate that MegaZeux is always windowed! Could you change
- this?
- A: There's already a way to switch between fullscreen and
- windowed modes - press Ctrl+Alt+ENTER. Also, the config file
- has an option that starts MZX in fullscreen mode at launch.
- Q: How can I get option (foobar) in the config file to work?
- A: Make sure the pound / hash sign in front of the command is
- deleted. Otherwise, the option is treated as a comment and
- ignored.
-
- Q: Are there any MZX-specific tools that can make developing an
- MZX game easier?
- A: Yes, plenty! MegaZeux comes with two helpful tools:
- "Checkres" will detect what files are referenced by an MZX
- world and which are present, and "ccv" can take an image file
- and output a conversion of it in .chr/.mzm form for MZX use.
- There are several graphical conversion programs such as
- CharCon, and MZX worlds that create control mappings such as
- Joymap. MZX has natural time-savers, of course. Automated
- backups, macros, Robotic code import/export, expressions,
- repeated block copying and other features can help speed up
- development time.
-
- Q: This MZX game has some neat things in it! Can I use some of
- these things in my own game?
-
- A: It's usually okay to do this, as long as you give definite
- credit to the original creator(s). Unless it was made
- specifically for the game, music and sound from other MZX
- games generally doesn't need direct attribution, but re-used
- artwork and code definitely should get attribution. If you're
- unsure whether the original creator(s) would like you using
- their work in your own game, ask! What we don't want to see,
- though, is passing the work of others - especially graphics,
- writing, and code - as your own. DON'T PLAGIARIZE. JUST
- BECAUSE THEY DID NOT EXPLICITLY FORBID YOU FROM USING THEIR
- WORK DOES NOT MEAN YOU CAN PASS IT OFF AS YOUR OWN.
- Q: Can I distribute a world I made with MegaZeux? Is it legal?
- Must I/can I include MegaZeux with it? Can they be shareware
- worlds?
- A: Of course you can distribute your worlds! That is what
- MegaZeux is for! However, while there are those who would help
- point out your game's flaws in a forgiving manner, not
- everyone is capable of constructive criticism. Playtest your
- game before uploading it, with at least one other person
- evaluating the game for bugs, play balance, and
- text/plot/grammatical errors (when relevant). Get creative and
- make your game worth playing!
-
- Please include any WAV, module, OGG, CHR, MZM, PAL and all
- other files with the games, as well as a cohesive and helpful
- description file or manual. (Using checkres to guarantee that
- every relevant file is included can be helpful.)
-
- While you can simply distribute your game with a copy of
- MegaZeux included, or even just post the game's files in an
- archive by itself, consider releasing your game as both a
- standalone archive and as pure game files in separate
- downloads.
-
- Typically, MegaZeux worlds are freeware, but if you've made an
- assuredly epic and ground-breaking game, then you can attempt
- to ask for registration money in a shareware demo version.
- Just don't get your hopes up. Alternatively, consider
- uploading your game to a platform that allows optional
- donations.
- Q: I WANT FUNCTION (FOOBAR) ADDED OR I LEAVE THE COMMUNITY
- FOREVER :<
- A: Before you go bugging the maintainer(s) of MegaZeux to add
- new functions, consider these things:
- 1) Some things require massive work to implement. These
- things require changing the world, save or board format,
- and format changes are explicitly reserved for version
- number changes.
- 2) Some things have been purposely ignored because the
- maintainer(s) deems these things not worth including. In
- this case, it's probably best to pick up the source and
- figure out how to add this function yourself.
- 3) You may not be the first to ask for any certain feature.
- Current feature requests are listed in DMZX's Bug Tracker.
- If you are not the first, then you'll often find out why a
- feature is not implemented or, better, you'll end up
- finding out that it is going to be implemented after all!
- Either way, you learn more about the feature and what
- would need to be done to include it.
- 4) It's technically possible to add new commands, but
- currently the method of storing Robotic severely limits
- the amount of new commands. Until this system is retooled,
- there will be no new commands. Features that are most
- cleanly implemented through a new command may possibly be
- implemented in other ways, however.
-
- Q: Is adding network capabilities to MegaZeux planned?
- A: Short answer: Possibly. This has been discussed at-length;
- the biggest problems with adding these to GAMES are thorny
- implementation issues (how the MZX programmer would insert
- network capabilities into a MegaZeux world, as well as the
- structure in general). It's definitely possible, and possible
- to do soundly, but developers don't have netplay as a high
- priority. As for other networking capabilities and MZX, this
- has already been done to some extent (starting with 2.82b,
- MZX ships with an updater program). Implementing tools and
- aids for MZX relying on networking is a lot less thorny of an
- issue, and might be considered.
- Q: Will MegaZeux games ever be playable without MegaZeux
- itself?
- A: In a sense, they can be now. It was a long-held consensus
- among most of MegaZeux's developers that the possible hassle
- saved for newbies and for those who would instantly refuse to
- play a game because it can't be launched directly was not
- worth implementing this feature. However, this has changed.
- MZXRun, the editor-less version of MegaZeux, can now be
- set to run in "standalone mode", a configuration designed for
- only playing a specific world. This mode changes several MZX
- mannerisms to better accommodate a standalone version of a
- game. The title screen can also be completely skipped.
- Additions to Robotic (such as exiting the game through code or
- blocking the default escape menu) have also facilitated
- standalone releases. Read the comments for standalone_mode in
- config.txt for more information, if interested.
- Q: I need more than 256 characters! Could you help with this?
- A: Then you'll need to carefully utilize the Robot command
- LOAD CHAR SET and ration your characters carefully. The
- 256-char limit is set within the world format and will
- currently be left alone. Also, you might not REALLY
- need 256 characters at once. If you're wanting more
- characters because of heavy character use in animation,
- partial character set loading will probably be the best
- solution. Otherwise, find out which characters will never be
- shown when other characters are and replace them with
- characters you WILL use.
-
- Alternatively, make use of unbound sprites. Unbound sprites
- can access 15 full character sets instead of just one, on top
- of their other benefits.
-
- <a class="helplink" href="#PARTIAL.HLP__par">Partial Character Sets</a>
-
- Q: Why is my MegaZeux world starting on the title screen?
- A: The first board has to be set. Press 'G' in the editor, then
- set the board using the "First board" field at the top left.
-
- Q: Whenever I place a string on the overlay, the spaces aren't
- acting like overlay at all! Is this a bug?
- A: No, it's not. Char 32 (the natural space) is never part of
- the overlay. You have to reserve an extra character or use
- the solid character for spaces, or otherwise convert spaces
- to useable replacements during run-time.
- Q: How can I input a number over 32767 or under -32768 in
- Robotic?
- A: You must use an expression. Encase the number in
- parentheses, as shown here:
- <span class="fE ">set "largesse" to "(2000000000)"</span>
-
- Q: My Robot can't change its/the player's characters! I
- use CHAR "A" but it turns invisible! What am I doing wrong?
- A: Use CHAR 'A' instead. You MUST use single quotes
- (apostrophes) or it will use the value of the COUNTER
- A, which is probably 0.
- Q: Can I use the music from Caverns in my games? How about
- the music from the registered games? How about the SAM
- files?
- A: It'd be preferred if you did not use Caverns music in any
- games you distribute, because Caverns music was ancient aeons
- ago. The music from the registered games was illegal to
- distribute; it's now under the GPL, but should be avoided for
- the same reasons Caverns music should. The SAM files are
- public domain and may be used as you please.
- Q: Where can I get module files?
- A: If you can't make them, search webpages for good ones.
- http://www.modarchive.com has a very large tracked music
- library, as do many old CD-ROM shareware collections. Another
- popular option is to convince a friend to do it for you. If
- your game shows exceptional promise, then an established
- musician in the community might make music for you. You will
- probably have to show real evidence that your game is as good
- as its hype in most cases, however. In any case, remember to
- give credit where it is due (yes, even to yourself).
- Be careful when inserting OGG files into your game. OGG files
- often present considerable bloat to a game if used as music.
- Also, not only may you be chided for putting in a popular song
- if you do so, but you could be violating copyright law.
- Chances are that if you can make a coherent argument on "fair
- use" of copyrighted songs, you will be far less likely to be
- in this position to begin with. <span class="fC "></span>
- Q: What is some good software to create module files?
- A: It's a matter of personal preference. Many people prefer
- OpenMPT because it works well with Windows. Others prefer to
- work with Schism Tracker. Finally, a few are still fond of
- Fast Tracker II, and therefore use the similar MilkyTracker.
- DOS-based trackers like IT and FT2 understandably need outside
- tools such as DOSBox to run as expected.
- If you don't mind pumping up your game's filesize, you could
- use any typical composition software (like FL Studio) and
- convert your wave to ogg format.
- Q: How do I make WAV files?
- A: There are three easy ways to create WAV files. First, you
- get recording software and a mic. Set it all up (read the
- instructions if necessary) and go for it. Second, you can
- download them or get them from outside sources (such as The
- Freesound Project). Third, you can take existing files and
- change them with effects like echo. Converting .wav files
- intended for sound effects into OGG format is a worthwhile
- idea; the drop in file size compared to the drop in quality
- is huge.
- Q: Why do I get garbage when I try reading a file?
- A: You likely have it open for writing. To close a file, use
- the command SET "" to "FWRITE_OPEN".
- Q: Why does MegaZeux slow down significantly when I set the
- "commands" counter to a high value?
- A: You're likely using an idle loop without a CYCLE 1 or WAIT 1
- command inserted. Find the offending loop and add one; if
- you're wary about possible delay effects, rest assured that
- adding either of these will not unnecessarily add delays. It
- will simply end a cycle. By default, MZX will warn you if you
- exceed 2000000 commands in a cycle (but only in test
- sessions). For further information, look up the Cycles and
- Board Scans section.
-
- <a class="helplink" href="#PROCESS.HLP__prc">Cycles and Board Scans - How MZX Processes Robots</a>
-
- Q: I don't like that anyone can open up my game and see how it
- works, or that anyone can use the editor functions to cheat
- at my game. Is there an easy way to prevent people from
- opening my game in the editor?
- A: Nope. MegaZeux used to be able to protect worlds from being
- edited or even played without a password, but this feature
- has long since been removed.
- Releasing games in standalone form can possibly help. While
- anyone who has even cursory knowledge of MegaZeux can still
- fully look through a standalone game, people who have no
- knowledge of MegaZeux beforehand will lack the immediate means
- to heavily manipulate or look through your game.
-
- Q: I heard only certain graphics cards can properly show Super
- MZX mode games. Is this true?
- A: Not anymore. Any computer that can display normal games in
- MegaZeux can now display Super MZX mode games.
- Q: How can I get "mod *" as the default board mod?
- A: To set "mod *", use either Shift+8 or the asterisk (*) on the
- numpad.
- Q: What's with these "~roboclp.tmp" files packed with so many
- games?
- A: Those held clipboard information in DOS versions of MegaZeux.
- They are useless and can be freely deleted.
-
- Q: Why doesn't [ work for taking screenshots?
- A: It has been changed to F12 and now works in any area in MZX,
- including any part of the editor. Instead of PCX, it now
- currently outputs PNG files by default, but will output MS
- BMP format files on platforms unable to support PNG.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="MEGAZEUX.HLP">
- <a class="helpanchor" name="MEGAZEUX.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">MegaZeux Limitations</span></p>
- MegaZeux has to impose a number of limitations to insure
- worldfile compatibility with MZX 2.x worldfiles.
- <p class="helpcentered">Memory Limitations</p>
- No single Robot can exceed 2 megabytes in size.
- No single sign or Scroll can exceed 64 kilobytes in size.
- <p class="helpcentered">Quantity Limitations</p>
- Item: Largest number allowed:
- Robots 255 per board plus Global Robot
- Scrolls/Signs 255 per board
- Sensors 255 per board
- Sprites 256 per world
- Boards 250 per world
- Local Counters 32 per Robot plus specialized local counters
- (e.g. loopcount, lava_walk, bullettype)
- <p class="helpcentered">Length Limitations</p>
- Robot Name Length 14 characters
- Board Name Length 24 characters
- String Length 4,194,304 characters (4 megabytes)
- Editor Line Length 241 characters (INCLUDING "extra" words)
- * Message Length 512 characters
- Input String Length 512 characters
- Macro Length 64 characters (for single-line macros)
- Mod Filename Length 512 characters (including subdirectories,
- if applicable)
- <p class="helpcentered">Theoretical Limitations</p>
- Board size maximum is roughly 16.7 million characters
- ((2^24) - 1).
- Vlayer size maximum is roughly 16.7 million characters
- ((2^24) - 1).
- Board width or height maximum is 32767.
- The maximum number of counters and strings depends on
- the platform (e.g. between 32 or 64-bit) but is sufficiently
- large. You should be fine utilizing hundreds of thousands, or
- even millions.
- These limitations are mostly theoretical because of the utter
- improbability of meeting these limits and the amount of RAM (up
- to (hundreds of) gigabytes if fully utilized) they consume.
- <p class="helpcentered">Other Limitations</p>
- Numbers less than -32768 or more than 32767 cannot be directly
- used in Robotic. This problem is a worldfile issue and can be
- circumvented by using a constant expression (parentheses).
- No board can have a width of a multiple of 256 chars because
- this corrupts the board if it lacks an overlay. This problem is
- a worldfile issue and widths set to a multiple of 256 will
- increased by one more horizontal character regardless of the
- status of the board's overlay.
- <a class="helplink" href="#EXPRESS.HLP__exp">Expressions</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="THEWORLD.HLP">
- <a class="helpanchor" name="THEWORLD.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">The World Editor</span></p>
- Ready to start creating your own worlds? Then, let's get
- started! This section is a short editor tutorial. It will
- teach you the basics of creating your own worlds.
- To get into the editor, press N or F8 from the title screen. You
- will be asked to name a starting board: one can type an
- appropriate name and create a second starting board, or press
- Escape to cancel and remain on your new world's title screen.
- When this prompt is dealt with, you will be presented with a
- blank board with a small status bar at the bottom. You can use
- Alt+H to pop up a listing of key shortcuts at the bottom. PageUp
- and PageDown change its currently shown key shortcuts. The mouse
- also works to change pages (but not to select actions). Feel
- free to play around with these various options. Press Alt+R to
- restart and clear everything (you will be asked for
- confirmation, to make sure you really want to go through with
- it).
- (On Mac platforms, any key shortcut containing Alt can work with
-  replacing Alt. So, for above, +H would pop up the help
- listing, and +R would restart the world.)
- For your first world, you should start simple. The very first
- board in the board listings is the title screen, so name that
- board after your game. (If you opted to create a starting board,
- you have to switch to the first board with the B key.) Press I
- for board info. This screen will display a bunch of options;
- there are loads of important options, but the most relevant
- option for now is the "Board name" option. Type in the name of
- your game and then click on "OK" or press Tab until OK is
- highlighted and press Enter. Now that the title screen is
- named, its design begins... or is put aside for later (or even
- the end).
- If you made a starting board upon creating your world, simply
- press B to move to it. If you skipped making a starting board,
- you may need to create the first playable board, or location, of
- your game. Press A to add a board, then type in a short
- description of the board, such as "Starting Board". Press Enter
- to go to this new board. This board also needs to be set as the
- starting board. Press G to load the Global Settings screen. Once
- there, select the First Board option and set it to your starting
- board.
- Now you are free to doodle around. Use C to change the active
- color. Use F3 through F9 to bring up menus of items, terrains,
- and creatures. Selecting one with the arrows and Enter will
- allow you to place it using arrow keys and space.
- For example, press F3 for terrains, and select Line. (This is
- a form of wall.) Now move around, placing walls. To ease
- this, you can press Tab to toggle draw mode. When draw mode is
- active, every move of the cursor will place the current
- item/color. The current item and color is shown on the top
- line of the menu.
- Try to create a pleasing-looking screen, regardless of its
- planned function. Some items will require that you set settings
- to determine their behavior. To place the player's starting
- position, move the cursor to the destination, press F10, and
- select Player. Alternatively, press Enter while highlighting
- the Player and press Space on the desired destination.
- When you are done, press G to go to the Global Info screen.
- TAB to the Next button and press Enter. You will now be
- highlighting the option "First Board". Press Enter, and select
- the starting board (this is where gameplay starts... NOT the
- title screen in the vast majority of cases) from the list and
- press Enter. Then TAB to OK and press Enter.
- You could now press Alt+N to select a module (music) file for
- the board, if you wish. Then press S to save the world, and
- type in a filename. (The extension of .MZX will automatically
- be added.) Press Enter to save the world. Press ESC to exit the
- editor, and now you can play your game! You can use L to reload
- your world in the editor to make changes, if necessary. See
- General Editing Tips for more advanced editing info.
- New in the 2.8+ line of MegaZeux is the protection of colors
- and characters the editor uses. The editor uses sets outside of
- the currently used sets. The character set for the editor is
- mzx_edit.chr; only edit if you want to change the editor's
- appearance.
- <a class="helplink" href="#GENERALE.HLP__1st">General Editing Tips</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="GENERALE.HLP">
- <a class="helpanchor" name="GENERALE.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">General Editing Tips</span></p>
- The following is a list of important editing tips. They assume
- you are familiar with MegaZeux's dialog box system, and that
- you can navigate the editor's menus.
- <p class="helpcentered">Linking Boards</p>
- Simple, one-board games can get boring REALLY fast. There are
- five ways to move between boards.
- A simple method of connecting boards is with the Board Exits
- dialog, accessed by pressing X. Here, you can select boards that
- you will reach if you walk off of the screen in a given
- direction. The destination board shouldn't have anything in the
- way, and will not automatically lead back - you must set the
- exit on that board too.
- Another way is to use a Robot to teleport a player with the
- <span class="fA ">teleport player "boardname" X Y</span><span class="fF "> command. This assumes that you</span>
- are familiar with using Robots, but is the only way to go to
- another board without having the player walk off-screen, moving
- the player into a teleport, requiring the player to have been on
- the destination board earlier, or reloading the current world.
- Robots can also dynamically set board exits using the
- <span class="fA ">BOARD [dir] "boardname"</span><span class="fF "> command, including disabling exits</span>
- by inputting NONE instead of the board name.
- <a class="helplink" href="#COMMAND2.HLP___t5">TELEPORT PLAYER "string" # #</a>
- <a class="helplink" href="#COMMAND2.HLP___b7">BOARD [dir] "string"</a>
- <a class="helplink" href="#COMMAND2.HLP___b8">BOARD [dir] NONE</a>
- The third way is to add stairs, caves and whirlpools using the
- Transport (F7) menu. After one is picked, you select a
- destination board. The destination board should contain a
- similar transport leading back. The two entrances will now lead
- to each other.
- The fourth way is by saving and restoring player positions using
- Robotic. The <span class="fA ">save player position #</span><span class="fF "> command will remember the</span>
- current board and player position and save this info in the
- given slot #, and the <span class="fA ">restore player position #</span><span class="fF "> command returns</span>
- the player to the saved position.
- The last way - the most kludge-like - is to load the current
- world with a 'swap world' command. This will send the player to
- the starting board of the current world, but will restore the
- world to its original state. Set counters and strings will be
- preserved. This method is used for its powerful restorative
- properties.
- To switch to other boards in the editor, use B. To add boards,
- press A, or press B and select (add board) from the board list.
- <p class="helpcentered">Board Sizes</p><a class="helpanchor" name="GENERALE.HLP__sizepos"> </a>
- You can change the size and placement of a board's viewport with
- Alt+P. You can also choose to center the viewport; this will
- automatically set the viewport placement to display the center
- of the screen.
- You can also change the actual size of the board. The highest
- possible size is 16.7 million tiles, though a board that size
- would require unreasonably high RAM requirements (128MB). Note
- that reducing the size of a board will permanently destroy
- anything outside of the new limits.
- <p class="helpcentered">Other Important Editing Keys</p>
- You can use Ins to "grab" the object beneath the cursor, or
- Enter to edit it and then grab it as well. Use P to modify the
- settings of the object in the buffer. Use Alt+N to select music
- for the current board, or turn the music off if it is already
- selected. Use Alt+Z to clear the current board entirely (you
- will be asked for confirmation). You can edit important Board
- Options with I, and important Global (world) Options with G.
- <p class="helpcentered">The Mouse in the Editor</p>The left mouse button acts like space; it places a copy of the
- current item over the mouse cursor. The right mouse button acts
- like insert; it grabs the current thing over the mouse cursor.
- <a class="helplink" href="#EDITINGK.HLP__080">Editing Keys and Options Reference</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="EDITINGK.HLP">
- <a class="helpanchor" name="EDITINGK.HLP__080"> </a>
- <p class="helpcentered"><span class="f9 ">Editing Keys and Options Reference</span></p>
- The following is an alphabetical listing of keys within the
- World editor. This is followed by a detailed description of
- what each one does.
- On Mac platforms, any command that uses the Alt key can take 
- (the command key) instead.
- <a class="helplink" href="#EDITINGK.HLP___A">A - Add (board)</a>
- <a class="helplink" href="#EDITINGK.HLP___B">B - Select Board</a>
- <a class="helplink" href="#EDITINGK.HLP___C">C - Color</a>
- <a class="helplink" href="#EDITINGK.HLP___D">D - Delete (board)</a>
- <a class="helplink" href="#EDITINGK.HLP___F">F - Fill</a>
- <a class="helplink" href="#EDITINGK.HLP___G">G - Global Info</a>
- <a class="helplink" href="#EDITINGK.HLP___I">I - Info (board)</a>
- <a class="helplink" href="#EDITINGK.HLP___L">L - Load</a>
- <a class="helplink" href="#EDITINGK.HLP___M">M - Move Board</a>
- <a class="helplink" href="#EDITINGK.HLP___P">P - Parameter</a>
- <a class="helplink" href="#EDITINGK.HLP__076">S - Save</a>
- <a class="helplink" href="#EDITINGK.HLP___V">V - View</a>
- <a class="helplink" href="#EDITINGK.HLP__083">X - Exits</a>
- <a class="helplink" href="#EDITINGK.HLP__min">- - Goto Previous Board</a>
- <a class="helplink" href="#EDITINGK.HLP__plu">+ - Goto Next Board</a>
- <a class="helplink" href="#EDITINGK.HLP__075">Alt+A - Select Char Set</a>
- <a class="helplink" href="#EDITINGK.HLP__073">Alt+B - Block</a>
- <a class="helplink" href="#EDITINGK.HLP__AltC">Alt+C - Char Edit</a>
- <a class="helplink" href="#EDITINGK.HLP__AltD">Alt+D - Default Colors</a>
- <a class="helplink" href="#EDITINGK.HLP__AltE">Alt+E - Palette</a>
- <a class="helplink" href="#EDITINGK.HLP__097">Alt+F - Sound Effects</a>
- <a class="helplink" href="#EDITINGK.HLP__AltG">Alt+G - Edit Global Robot</a>
- <a class="helplink" href="#EDITINGK.HLP__AltH">Alt+H - Hotkey Toggle</a>
- <a class="helplink" href="#EDITINGK.HLP__078">Alt+I - Import</a>
- <a class="helplink" href="#EDITINGK.HLP__AltL">Alt+L - Test WAV</a>
- <a class="helplink" href="#EDITINGK.HLP__AltM">Alt+M - Modify</a>
- <a class="helplink" href="#EDITINGK.HLP__AltN">Alt+N - Music</a>
- <a class="helplink" href="#EDITINGK.HLP__AltO">Alt+O - Edit Overlay</a>
- <a class="helplink" href="#EDITINGK.HLP__084">Alt+P - Size/Pos</a>
- <a class="helplink" href="#EDITINGK.HLP__AltR">Alt+R - Restart</a>
- <a class="helplink" href="#EDITINGK.HLP__082">Alt+S - Status Info</a>
- <a class="helplink" href="#EDITINGK.HLP__AltS2">Alt+S - Show Level</a>
- <a class="helplink" href="#EDITINGK.HLP__AltT">Alt+T - Test</a>
- <a class="helplink" href="#EDITINGK.HLP__077">Alt+X - Export</a>
- <a class="helplink" href="#EDITINGK.HLP__AltY">Alt+Y - Debug Window</a>
- <a class="helplink" href="#EDITINGK.HLP__AltZ">Alt+Z - Clear (Board)</a>
- <a class="helplink" href="#EDITINGK.HLP__AltNu">Alt+Number - Load Editor Position</a>
- <a class="helplink" href="#EDITINGK.HLP__CtrG">Ctrl+G - Goto Position</a>
- <a class="helplink" href="#EDITINGK.HLP__CtrN">Ctrl+N - Test Music</a>
- <a class="helplink" href="#EDITINGK.HLP__CtrY">Ctrl+Y - Redo</a>
- <a class="helplink" href="#EDITINGK.HLP__CtrZ">Ctrl+Z - Undo</a>
- <a class="helplink" href="#EDITINGK.HLP__CtrNu">Ctrl+Number - Save Editor Position</a>
- <a class="helplink" href="#EDITINGK.HLP__Sft8">Shift+8 OR Numpad * - Mod Wildcard</a>
- <a class="helplink" href="#EDITINGK.HLP__SftAr">Shift+Arrow - Goto Linked Board</a>
- <a class="helplink" href="#EDITINGK.HLP__F1">F1 - Help</a>
- <a class="helplink" href="#EDITINGK.HLP__F2">F2 - Text</a>
- <a class="helplink" href="#EDITINGK.HLP__F3">F3 - Terrain</a>
- <a class="helplink" href="#EDITINGK.HLP__F4">F4 - Item</a>
- <a class="helplink" href="#EDITINGK.HLP__F5">F5 - Creature</a>
- <a class="helplink" href="#EDITINGK.HLP__F6">F6 - Puzzle</a>
- <a class="helplink" href="#EDITINGK.HLP__F7">F7 - Transport</a>
- <a class="helplink" href="#EDITINGK.HLP__F8">F8 - Element</a>
- <a class="helplink" href="#EDITINGK.HLP__F9">F9 - Misc. (thing)</a>
- <a class="helplink" href="#EDITINGK.HLP__F10">F10 - Objects</a>
- <a class="helplink" href="#EDITINGK.HLP__F11">F11 - Select Screen Mode</a>
- <a class="helplink" href="#EDITINGK.HLP__F12">F12 - Take Screenshot</a>
- <a class="helplink" href="#EDITINGK.HLP__AF11">Alt+F11 - Robotic Debugger</a>
- <a class="helplink" href="#EDITINGK.HLP__ShF1">Shift+F1 - Show InvisWalls</a>
- <a class="helplink" href="#EDITINGK.HLP__ShF2">Shift+F2 - Show Robots</a>
- <a class="helplink" href="#EDITINGK.HLP__ShF3">Shift+F3 - Show Fakes</a>
- <a class="helplink" href="#EDITINGK.HLP__ShF4">Shift+F4 - Show Spaces</a>
- <a class="helplink" href="#EDITINGK.HLP__Ar">Arrow - Move</a>
- <a class="helplink" href="#EDITINGK.HLP__AltAr">Alt+Arrow - Move 10</a>
- <a class="helplink" href="#EDITINGK.HLP__BkSp">BackSpace - Delete (Main Layer Only)</a>
- <a class="helplink" href="#EDITINGK.HLP__Del">Delete - Delete</a>
- <a class="helplink" href="#EDITINGK.HLP__End">End - L/R Corner</a>
- <a class="helplink" href="#EDITINGK.HLP__En">Enter - Modify+Grab [Board Mode]</a>
- <a class="helplink" href="#EDITINGK.HLP__Enter2">Enter - Character [Overlay Mode]</a>
- <a class="helplink" href="#EDITINGK.HLP__ESC">Escape - Exit/Cancel Mode</a>
- <a class="helplink" href="#EDITINGK.HLP__Home">Home - U/L Corner</a>
- <a class="helplink" href="#EDITINGK.HLP__Ins">Insert - Grab</a>
- <a class="helplink" href="#EDITINGK.HLP__Sp">Spacebar - Place</a>
- <a class="helplink" href="#EDITINGK.HLP__Tab">Tab - Draw</a>
- <a class="helplink" href="#EDITINGK.HLP__PgDn">PageDown - Next Menu</a>
- <a class="helplink" href="#EDITINGK.HLP__PgUp">PageUp - Previous Menu</a>
- <a class="helpanchor" name="EDITINGK.HLP___A"><span class="fE ">A - Add (Board)</span></a>
- Press A to add another board to the current world. You will be
- asked for the name of the new board, and then a new board will
- be created. The settings for the new board will be the defaults.
- After adding a board, you will be moved to the new board. There
- is a limit of 250 unique boards per world.
- <a class="helpanchor" name="EDITINGK.HLP__075"><span class="fE ">Alt+A - Select Char Set</span></a>
- Press Alt+A and select one of the four different character
- sets. This will change the current character set to one of the
- four defaults. ASCII is the default EGA ASCII character set
- (code page 437). MegaZeux default is the default MegaZeux
- character set. Blank is the MegaZeux default, but with most
- graphical characters blank instead. Text, lines, arrows, blocks,
- and certain other symbols are not affected. SMZX set is the
- default character set for SMZX modes.
- <a class="helpanchor" name="EDITINGK.HLP___B"><span class="fE ">B - Select Board</span></a>
- Press B to change the current board by selecting from a list.
- Selecting (add board) will prompt the user to name the new
- board; once named, the board is created and becomes the current
- board.
- <a class="helpanchor" name="EDITINGK.HLP__073"><span class="fE ">Alt+B - Block</span></a>
- Press Alt+B to start block mode, then move the cursor to the
- opposite corner of a rectangular block and press Alt+B again.
- You can then select an action to perform upon the block. In all
- copy/move operations, the cursor marks the new UPPER LEFT
- corner.
- Copy block will allow you to duplicate the block by moving the
- cursor to a destination and pressing Enter.
- Copy block (repeated) will allow same as Copy block, but will
- allow copying the same block to multiple places.
- Move block will allow you to move the block to a new location.
- Clear block will erase the contents of the block.
- Flip block will flip the block upside down.
- Mirror block will flip the block left to right.
- Paint block will change the entire block to the current color.
- Copy to overlay will copy the block to the given spot of the
- overlay.
- Copy to vlayer will copy the block to the given spot of the
- vlayer.
- Save as MZM will save the block as a layer-type MZM file.
- Destinations for Move and Copy can overlap the original block
- safely.
- You can block copy to other boards by going to the desired board
- when prompted to pick the destination of the block; just press B
- and pick the desired board.
- Also, one can move the cursor across the width or height of the
- block by using Ctrl+Dir. This is very helpful for tiling blocks
- using the repeated copy function.
- <a class="helpanchor" name="EDITINGK.HLP___C"><span class="fE ">C - Color</span></a>
- Press C to select a new current color from a menu. The thing
- under the cursor is not affected. One can jump to a color by
- typing its hex code in the color menu; for example, typing "0D"
- would jump to color 013 (background color 0, foreground color
- D).
- A quirk to keep in mind: any entity with a background color of 0
- will display the background color of anything beneath it.
- <a class="helpanchor" name="EDITINGK.HLP__AltC"><span class="fE ">Alt+C - Char Edit</span></a>
- Press Alt+C to edit the character set. The character editor is
- a separate section of the world editor and is discussed in
- another section.
- <a class="helplink" href="#CHAREDIT.HLP__079">The Character Editor</a>
- <a class="helpanchor" name="EDITINGK.HLP___D"><span class="fE ">D - Delete (board)</span></a>
- Press D to select a board from a list to be deleted. You cannot
- delete the first board (the title screen). A deleted board will
- be pruned out, with the next actual board taking its place. A
- deleted board cannot be recovered or undone, so make sure this
- is the desired action.
- <a class="helpanchor" name="EDITINGK.HLP__AltD"><span class="fE ">Alt+D - Default Colors</span></a>
- Press Alt+D to toggle forcing default colors for placing
- built-ins (defaults to on). Turning this off causes built-ins to
- be placed with the colors of the object held in the buffer. The
- buffer object listed in the status bar will have a red dot at
- the end when default colors are off. Only some types of
- built-ins, such as creatures and items, have default colors.
- <a class="helpanchor" name="EDITINGK.HLP__AltE"><span class="fE ">Alt+E - Palette</span></a>
- Press Alt+E to edit the palette (colors). The palette editor
- is a separate section of the world editor and is discussed in
- another section.
- <a class="helplink" href="#PALEEDIT.HLP__093">The Palette Editor</a>
- <a class="helpanchor" name="EDITINGK.HLP___F"><span class="fE ">F - Fill</span></a>
- Press F to fill in an enclosed area with the current thing and
- color. The area must be completely surrounded by things other
- than the thing beneath the cursor. For example, you can fill
- over a solid square of Fakes with something else. The current
- fill command may not work accurately for very large and complex
- areas - in this case, you must move to the unfilled areas and
- press F to continue filling. This happens very rarely,
- however. Also, beware of trying to fill an area with an item
- with limited placements, such as a Robot.
- <a class="helpanchor" name="EDITINGK.HLP__097"><span class="fE ">Alt+F - Sound Effects</span></a>
- Press Alt+F to enter the sound effects editor. This editor
- affects all triggered sounds resulting from built-in actions,
- such as getting hit and shooting. First you must decide whether
- to use the default set of sound effects, or whether to edit
- your own. You can't edit the default set. If you edit your own,
- you will be in a series of three editing screens. Use the Next
- and Previous buttons to move between screens. Sound effects,
- and the format used to represent them, are described in detail
- in another section. The format is the same as used for the
- Robotic command PLAY. (Like with PLAY, digitized sounds are
- allowed here.)
- <a class="helplink" href="#SOUNDEFX.HLP__1st">MegaZeux's Sound System</a>
- <a class="helpanchor" name="EDITINGK.HLP__AltG"><span class="fE ">Alt+G - Edit Global Robot</span></a>
- Alt+G will start editing the Global Robot, starting at its name
- field.
- <a class="helpanchor" name="EDITINGK.HLP__CtrG"><span class="fE ">Ctrl+G - Goto Position</span></a>
- Ctrl+G will pop up a window, displaying target x,y coordinates.
- Set the coordinates by either typing in or selecting the desired
- X and Y values, and select OK to go to those coordinates on the
- current board. Choosing Cancel or pressing Escape cancels.
- <a class="helpanchor" name="EDITINGK.HLP___G"><span class="fE ">G - Global Info</span></a>
- Press G to enter the global info dialog boxes. The global info
- options are covered in another section.
- <a class="helplink" href="#GLOBALIN.HLP__086">Global Info Options</a>
- <a class="helpanchor" name="EDITINGK.HLP__AltH"><span class="fE ">Alt+H - Hotkey Toggle</span></a>
- Press Alt+H to toggle display of the hotkeys and horizontal
- border. The default state of the hotkeys can be changed in the
- config file.
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- <a class="helpanchor" name="EDITINGK.HLP___I"><span class="fE ">I - Info (board)</span></a>
- Press I to enter the board info dialog box. The board info
- options are covered in another section.
- <a class="helplink" href="#BOARDINF.HLP__085">Board Info Options</a>
- <a class="helpanchor" name="EDITINGK.HLP__078"><span class="fE ">Alt+I - Import</span></a>
- Alt+I allows you to import a number of different file types
- into the current board or world. You can import a board file
- (.MZB) unique to MegaZeux. You can import a character set file
- (.CHR). You can import another world (.MZX), which is appended
- to the end of the list of boards. The global of the imported
- world will be ignored. (Unlike old versions of MegaZeux, all
- exits in an imported world will work.) You can import a palette
- (.PAL) file (including a palette indices (.PALIDX) file in SMZX
- mode 3) or a sound effects (.SFX) file, all unique to MegaZeux.
- Finally, you can import an MZM file at a given position.
- Importing boards or worlds will clear the board and overlay undo
- histories.
- <a class="helpanchor" name="EDITINGK.HLP___L"><span class="fE ">L - Load</span></a>
- L brings up a list of worlds in the current directory and allows
- you to select one to load. You will be warned if the current
- world as-is has not been saved yet.
- <a class="helpanchor" name="EDITINGK.HLP__AltL"><span class="fE ">Alt+L - Test WAV</span></a>
- Alt+L brings up a list of WAV/SAM/OGG files in the current
- directory. Selecting one will play it once at its natural
- frequency. This has no effect on the actual board or world.
- <a class="helpanchor" name="EDITINGK.HLP___M"><span class="fE ">M - Move Board</span></a>
- M moves the current board to the desired place on the board
- list. The title screen cannot be moved, and other boards cannot
- be moved to the title screen position.
- <a class="helpanchor" name="EDITINGK.HLP__AltM"><span class="fE ">Alt+M - Modify</span></a>
- Alt+M allows you to modify the settings of the thing under the
- cursor without changing the item in the buffer.
- <a class="helpanchor" name="EDITINGK.HLP__AltN"><span class="fE ">Alt+N - Music</span></a>
- Alt+N brings up a list of module files in the current directory.
- Selecting one will select it as the default music for the
- current board. If music is already playing, Alt+N will turn it
- off.
- <a class="helpanchor" name="EDITINGK.HLP__CtrN"><span class="fE ">Ctrl+N - Test Music</span></a>
- Ctrl+N does the same as Alt+N, except it only plays the
- selected module. It does not set the board module to the
- selected module. It also remembers the last-used directory to
- maintain a current listening directory. A tested module will
- continue to play even if the current board is set to play music,
- and even if the current world file is changed.
- <a class="helpanchor" name="EDITINGK.HLP__AltO"><span class="fE ">Alt+O - Edit Overlay</span></a>
- Alt+O enters overlay editing mode. The overlay is on normal
- overlay mode by default. The overlay editing mode is similar to
- the normal editing mode, except that only certain keys are
- active, and the Enter and Alt+S keys have new purposes. The
- overlay is explained in further detail in another section.
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helpanchor" name="EDITINGK.HLP___P"><span class="fE ">P - Parameter</span></a>
- P allows you to change the settings of the current object in
- the buffer. The object under the cursor is not affected.
- <a class="helpanchor" name="EDITINGK.HLP__084"><span class="fE ">Alt+P - Size/Pos</span></a>
- Alt+P allows you to change the size of the current board, the
- viewport size, and location. See the linked section for details.
- This action will clear the board and overlay undo histories.
- <a class="helplink" href="#GENERALE.HLP__sizepos">Board Sizes</a>
- <a class="helpanchor" name="EDITINGK.HLP__AltR"><span class="fE ">Alt+R - Restart</span></a>
- Alt+R will clear the entire world. You will be asked for
- confirmation. All undo histories will also be cleared.
- <a class="helpanchor" name="EDITINGK.HLP__076"><span class="fE ">S - Save</span></a>
- S will prompt you for a filename, then save the current world
- as a MZX file. The save option will be highlighted if the
- world has changed since the last save or load.
- <a class="helpanchor" name="EDITINGK.HLP__082"><span class="fE ">Alt+S - Status Info</span></a>
- Alt+S will allow you to type in six different counters that
- can be shown on the default status screen within the game. This
- allows you to easily display your own items that the player can
- collect, and see how many are currently held. Counters are
- discussed in further detail with Robots.
- <a class="helpanchor" name="EDITINGK.HLP__AltS2"><span class="fE ">Alt+S - Show Level</span></a>
- Alt+S while editing the overlay will toggle whether the level
- beneath the overlay is shown in overlay editing mode (defaults
- to YES).
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helpanchor" name="EDITINGK.HLP__AltT"><span class="fE ">Alt+T - Test</span></a>
- Alt+T will allow you to test the current world, starting on the
- current board. Games CAN be loaded and saved in this mode,
- making it especially helpful for debugging. Test mode also
- enables several debugging tools and cheats that can be used
- during a test session. Quitting will return to the editor. Note
- that entering a test session will clear all editor undo
- histories.
- <a class="helplink" href="#DBGMODE.HLP__dbg">Debug Modes</a>
- <a class="helpanchor" name="EDITINGK.HLP___V"><span class="fE ">V - View</span></a>
- V will allow you to see the current board as it would appear in
- the game. Use the arrows to Scroll the view, and ESC to return
- to the editor.
- <a class="helpanchor" name="EDITINGK.HLP__083"><span class="fE ">X - Exits</span></a>
- X will bring up a menu where you can select exits for each
- board direction. For example, selecting a destination board of
- "City" for north will cause the player to go to that board when
- pressing against the north edge of the current board. Boards
- are not automatically back-linked - to make "City" lead back
- here, you must go to that board and make a south exit back.
- Make sure the linked boards don't obstruct each other's exits,
- and that their linking boundaries are of the same size.
- <a class="helpanchor" name="EDITINGK.HLP__077"><span class="fE ">Alt+X - Export</span></a>
- Alt+X will allow you to export a number of different file types.
- You can export a board file (MZB) unique to MegaZeux, good for
- giving single boards to others. (The character set, palette,
- vlayer and global info aren't included!) You can export the
- character set (CHR) for later game use or to edit in Fontutil or
- another external app. You can export palettes (PAL) [full,
- partial, SMZX] and sound effect settings (SFX) for
- transportation. Both are file formats unique to MegaZeux.
- Finally, you can export the current world, but using the last
- version's world format, with the "Downver. world (MZX)" option.
- Files like MZMs and SAVs can be exported in-game by Robotic
- code. See their respective areas for details. Other file types
- such as character sets can be exported generically through file
- writing facilities and charset counters. SMZX indices (PALIDX)
- can be exported using the Export Palette (PAL) option in SMZX
- mode 3; its export dialogue will appear after the palette export
- dialogue.
- <a class="helpanchor" name="EDITINGK.HLP__AltY"><span class="fE ">Alt+Y - Debug Window</span></a>
- Alt+Y will toggle a red box in the lower corner of the screen.
- This box shows (on labeled lines) the current position of the
- cursor, the current Robot memory situation, and the presently
- playing module, and lists the MZX version of the current world
- at the top. This is the same as pressing F6 in-game, but removes
- the key_code and key_pressed info.
- <a class="helpanchor" name="EDITINGK.HLP__AltZ"><span class="fE ">Alt+Z - Clear (board)</span></a>
- Alt+Z will clear the current board entirely. You will be asked
- for confirmation. Clearing the board will clear the board undo
- history as well.
- <a class="helpanchor" name="EDITINGK.HLP__CtrZ"><span class="fE ">Ctrl+Z - Undo</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__CtrY"><span class="fE ">Ctrl+Y - Redo</span></a>
- Ctrl+Z will undo an action; Ctrl+Y will redo any previously
- undone action. Action depth is determined by config file
- settings, with 100 as default.
- <a class="helpanchor" name="EDITINGK.HLP__CtrNu"><span class="fE ">Ctrl+Number - Save Editor Position</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__AltNu"><span class="fE ">Alt+Number - Load Editor Position</span></a>
- These save and load up to 10 cursor positions in the editor
- (0 through 9). These positions save both current board
- coordinates and active board, so one can save position on one
- board and load position from another board. These positions are
- saved for that world in its .editor.cnf file.
- <a class="helpanchor" name="EDITINGK.HLP__Sft8"><span class="fE ">Shift+8 OR Numpad * - Mod Wildcard</span></a>
- This sets the board's current mod to play whatever played in
- the last-visited board. (i.e. The mod playing on that board
- differs if entering that board from a board using different
- music; it does not stick with the first such mod and play that
- from then on.)
- <a class="helpanchor" name="EDITINGK.HLP__SftAr"><span class="fE ">Shift+Arrow - Goto Linked Board</span></a>
- This goes to the board linked in the given direction, if it
- exists. For example, pressing shift+up would go to the board
- linked to the North exit, provided there is a board linked to
- that exit.
- <a class="helpanchor" name="EDITINGK.HLP__min"><span class="fE ">- - Goto Previous Board</span></a>
- This moves the editor to the previous board in the board list,
- if it exists.
- <a class="helpanchor" name="EDITINGK.HLP__plu"><span class="fE ">+ - Goto Next Board</span></a>
- This moves the editor to the next board in the board list, if
- it exists.
- <a class="helpanchor" name="EDITINGK.HLP__F1"><span class="fE ">F1 - Help</span></a>
- F1 will bring up context-relevant help. You can press F1 at
- almost any time.
- <a class="helpanchor" name="EDITINGK.HLP__F2"><span class="fE ">F2 - Text</span></a>
- F2 will toggle text mode on and off. When text mode is on,
- Enter will go to the next line, and Backspace will delete the
- character under the cursor and move the cursor one position to
- the left. All printable characters will type in as text,
- including pressing the Spacebar.
- <a class="helpanchor" name="EDITINGK.HLP__F3"><span class="fE ">F3 - Terrain</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__F4"><span class="fE ">F4 - Item</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__F5"><span class="fE ">F5 - Creature</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__F6"><span class="fE ">F6 - Puzzle</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__F7"><span class="fE ">F7 - Transport</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__F8"><span class="fE ">F8 - Element</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__F9"><span class="fE ">F9 - Misc. (thing)</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__F10"><span class="fE ">F10 - Objects</span></a>
- The above eight keys will bring up a menu of things to select
- from. Selecting one will ask you to enter settings (if
- appropriate) or choose a character for that thing. Then a copy
- of that thing will be placed at the cursor's location, and will
- also become the current object in the buffer. Scrolls, Signs,
- Sensors, Robots, and Pushable Robots (all in the Objects menu)
- will be discussed in another section. The current thing, color,
- and settings parameter (p##) is shown in the upper-right corner
- of the editor menu. Knowing the settings parameter isn't
- important except for certain Robotic programming situations.
- <a class="helplink" href="#SCROLLSS.HLP__1st">Signs and Scrolls in the Editor</a>
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors - What They Are and How to Use Them</a>
- <a class="helplink" href="#ROBOTSWH.HLP__1st">Robots - What They Are and How to Use Them</a>
- <a class="helplink" href="#ROBOTICT.HLP__1st">Robotic Tutorial</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helpanchor" name="EDITINGK.HLP__F11"><span class="fE ">F11 - Select Screen Mode</span></a>
- Pressing F11 will open a menu, allowing the user to select an
- MZX display mode (normal mode and Super MZX modes 1-3). This
- setting will persist in editor tests until overridden in-game;
- if editor tests are left while in a different SMZX mode, it will
- be reverted to the setting given here upon returning to the
- editor.
- Setting the screen mode is a prerequisite for editing Super MZX
- palettes and character sets.
- <a class="helplink" href="#SMZXMODE.HLP__095">Super MZX Modes</a>
- <a class="helpanchor" name="EDITINGK.HLP__F12"><span class="fE ">F12 - Take Screenshot</span></a>
- Pressing F12 will make a 640x350 screenshot (in PNG format by
- default) in the working directory, using the software renderer.
- The file naming starts from "screen0". This may be disabled by
- changing the allow_screenshots setting in the config file.
- <a class="helpanchor" name="EDITINGK.HLP__AF11"><span class="fE ">Alt+F11 - Robotic Debugger</span></a>
- Alt plus F11 will launch the configuration screen for the
- Robotic Debugger. For more information on the Robotic Debugger,
- go to its relevant section.
- <a class="helplink" href="#DBGMODE.HLP__101">Debug Modes - The Robotic Debugger</a>
- <a class="helpanchor" name="EDITINGK.HLP__ShF1"><span class="fE ">Sh+F1 - Show InvisWalls</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__ShF2"><span class="fE ">Sh+F2 - Show Robots</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__ShF3"><span class="fE ">Sh+F3 - Show Fakes</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__ShF4"><span class="fE ">Sh+F4 - Show Spaces</span></a>
- These four keys will cause the given things onscreen to flash
- (as the exclamation point character, char #33). They are good
- for locating "hidden" or camouflaged Robots, passages, and the
- like.
- <a class="helpanchor" name="EDITINGK.HLP__Ar"><span class="fE ">Arrow - Move</span></a>
- The arrow keys will move the cursor. The edit window will
- scroll when necessary.
- <a class="helpanchor" name="EDITINGK.HLP__AltAr"><span class="fE ">Alt+Arrow - Move 10</span></a>
- Alt plus the arrow keys will move the cursor ten spaces at a
- time, or up to the board's edge if under ten spaces away. These
- also jump numbers by 10 in dialog boxes.
- <a class="helpanchor" name="EDITINGK.HLP__BkSp"><span class="fE ">BackSpace - Delete (Main Layer Only)</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__Del"><span class="fE ">Del - Delete</span></a>
- The Del key will delete everything under the cursor, while
- BackSpace will delete the object on the main layer and move any
- object on the under layer to the main layer. The current thing
- is not affected.
- <a class="helpanchor" name="EDITINGK.HLP__End"><span class="fE ">End - L/R Corner</span></a>
- End will jump the cursor to the lower-right corner of the
- entire board.
- <a class="helpanchor" name="EDITINGK.HLP__En"><span class="fE ">Enter - Modify+Grab [Board Mode]</span></a>
- Enter will modify the settings of the thing under the cursor,
- if applicable, then select that thing as the current thing. It
- is just like pressing Alt+M and then Ins.
- <a class="helpanchor" name="EDITINGK.HLP__Enter2"><span class="fE ">Enter - Character [Overlay Mode]</span></a>
- Enter during Overlay editing mode will change the current
- character. Select it from a menu and then press Enter to
- confirm your choice.
- <a class="helpanchor" name="EDITINGK.HLP__ESC"><span class="fE ">ESC - Exit/Cancel Mode</span></a>
- ESC will exit the editor, asking for confirmation if your world
- has not been saved. If you are in block, overlay, text, or
- draw mode, ESC will instead cancel the current mode and return
- to normal editing.
- <a class="helpanchor" name="EDITINGK.HLP__Home"><span class="fE ">Home - U/L Corner</span></a>
- Home will jump the cursor to the upper-left corner of the
- entire board.
- <a class="helpanchor" name="EDITINGK.HLP__Ins"><span class="fE ">Ins - Grab</span></a>
- Ins will select the thing under the cursor as the current
- thing. The thing under the cursor is not affected.
- <a class="helpanchor" name="EDITINGK.HLP__Sp"><span class="fE ">Spacebar - Place</span></a>
- Spacebar will copy the current thing to the location under the
- cursor. Trying to place something over a similar thing will
- instead replace the object under the cursor by default. (Robots
- and Pushable Robots are the exception; they will never be
- replaced.) Placing something over a floor type will actually
- place it OVER the floor, not replace the floor. Other things
- will be deleted if they are in the way.
- Spacebar can also replace similar objects under the cursor with
- a space; this can be set in the configuration file.
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- <a class="helpanchor" name="EDITINGK.HLP__Tab"><span class="fE ">Tab - Draw</span></a>
- Tab will toggle the current draw mode. When drawing is on, you
- will place a copy of the current object in the buffer every
- time you move the cursor.
- <a class="helpanchor" name="EDITINGK.HLP__PgDn"><span class="fE ">PageDown - Next Menu</span></a>
- <a class="helpanchor" name="EDITINGK.HLP__PgUp"><span class="fE ">PageUp - Previous Menu</span></a>
- These two keys will cycle through the pages of the editor menu.
- The menu bar can wrap around. You do not have to be viewing the
- page listing a specific option before you can use that option -
- the menus are purely for reference.
- These keys also jump numbers by 100 in dialog boxes.
- <a class="helplink" href="#THEWORLD.HLP__1st">The World Editor</a>
- <a class="helplink" href="#GENERALE.HLP__1st">General Editing Tips</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="CHAREDIT.HLP">
- <a class="helpanchor" name="CHAREDIT.HLP__079"> </a>
- <p class="helpcentered"><span class="f9 ">The Character Editor</span></p>
- The character editor is an important part of MegaZeux. With
- it, you can change the appearance of the character set. For
- example, one can make bricks, rockets, stones, and demons;
- using multiple characters, one can make much grander things.
- The default pixel resolution is fair - 8x14 per character for a
- total of 640x350 for the entire screen. Other modes (known as
- Super MZX modes) increase colors at a cost of effectively
- halving horizontal resolution, but the intricacies of character
- editing in those modes are best covered in that mode's section.
- To use the character editor, press Alt+C in the editor. You
- will be shown a zoomed version of the current character, a list
- of keyboard shortcuts, and a row of characters.
- The current character(s) being edited are displayed on the left
- edge of the character bar, and also highlighted and shown in
- relative position in the middle of the bar. To edit the
- character(s), move the cursor with the keys and use Spacebar to
- toggle pixels on and off (or left-click and right-click,
- respectively). Use + and - to move one character (or character
- block) up or down through the character set.
- Use Enter to select the current character (or block) from the
- entire set. When selecting from the entire set, one can move by
- one character using the arrows, or by one block using the -/+
- keys.
- Use Del to clear the character. Use N to make a "negative", or
- inverse, of the character, turning all on pixels off and all
- off pixels on. Use Alt with the arrow keys to shift the entire
- character to one direction. Pixels shifted off of one edge
- wrap around to the other edge.
- Use M to mirror the character, flipping it left to right. Use
- F to flip the character top to bottom.
- Hold Shift to select multiple pixels at a time. The selection
- box will vanish once Shift is released. Alt+B will also create
- a similar selection box, but will not vanish until the Escape
- key is pressed.
- F2 will copy the current character to an internal buffer, while
- F3 will paste the buffer contents to the current character
- space. The buffer can contain a selection of pixels instead of a
- character by pressing F2 when selecting a group of pixels. When
- copying a single character and pasting to another single
- character, the new content simply replaces the old; in other
- circumstances, the new content is placed starting with the
- cursor position as its upper-left corner with no wraparound. The
- buffer is retained between uses of the character editor.
- Ctrl+Z will undo actions done in the editor (up to the limit
- defined in the config file). Keep in mind that the current
- frame is counted in the amount of undo actions.
- Ctrl+Y will redo any undone actions.
- C will allow selection of colors used in the char editor. This
- can be helpful in crafting characters for a specific palette.
- Use Alt+C to switch colors back to the default.
- Alt+F will flood fill any highlighted area.
- Tab will toggle mode (set) on and off. (set) mode will turn all
- pixels crossed to ON.
- Shift+Tab will turn toggle (clear) mode. (clear) mode will turn
- all pixels crossed OFF.
- F4 will revert the current character to its EGA ASCII (code page
- 437) appearance; F5 will revert the current character to its
- default MZX appearance.
- Multiple characters can be edited at one time. To select a
- group of characters, press Enter in the character editor, hold
- Shift on the upper-left corner of your desired block of
- characters to edit, and finally highlight your block of
- characters, release Shift, and press Enter. If more than one
- viable character space can be made from the selected characters,
- the user can choose the desired space size (e.g. six characters
- can be a 3x2, a 2x3 or a 6x1 space). The largest character space
- one can use for editing is 18 characters large (6x3, the max
- allowed sizes for the respective dimensions).
- The extra character sets accessible by unbound sprites can also
- be edited in the character editor. Press PgUp and PgDown to
- switch character sets, either on the main character edit screen
- or on the character selection menu.
- Alt+I will import character sets while in the character editor;
- Alt+X will export. This can be done with one full set or series
- of partials. For a full set, simply select the desired set and
- click OK. For saving a series of partials, insert a hash sign
- in the set name then choose the Offset (starting character).
- Then choose the First number of the series (e.g. char#.chr with
- a First value of 5 would start from char5.chr). Then choose the
- Count value to indicate how many sets will be saved. Loading is
- simpler; simply choose the starting character set, the Offset
- value and the Count value. If multiple characters are being
- worked on at once, importing and exporting partials can be set
- to tile (which will base export and import positions on the
- current character grouping) or linear (which will be based on
- sequential places in the char set).
- The character editor is a key element in creating decent games
- with MegaZeux. If you can't seem to draw well with it, that's
- okay, since it has some limitations. You can keep practicing
- at it, or you can get an MZXer friend to draw characters for
- you.
- The character editor changes somewhat in Super MZX modes - go
- to the Super MZX Modes section for more information on this.
- <a class="helplink" href="#SMZXMODE.HLP__095">Super MZX Modes</a>
- <a class="helplink" href="#EDITINGK.HLP__080">Editing Keys and Options Reference</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="PALEEDIT.HLP">
- <a class="helpanchor" name="PALEEDIT.HLP__093"> </a>
- <p class="helpcentered"><span class="f9 ">The Palette Editor</span></p>
- MegaZeux is not limited to the colors it sets as default. The
- built-in palette editor can modify colors, which is very helpful
- in designing a game. It allows you to change the appearance of
- the currently-available colors, and is more user-friendly than
- having to change values through code. MegaZeux worlds can only
- have one active palette at a time, but can load different
- palettes as frequently as desired, so MegaZeux designers can
- create different palettes that fit different parts of their
- game.
- To use the palette editor, press Alt+E while in the MegaZeux
- editor. The palette editing screen will appear. The current
- palette will be shown to the left, with the current color
- marked. By default, the RGB values of the current color and the
- current color creation mode are shown to the right of the
- visible palette, and the menu is shown below.
- Some color theory is in order. Computer monitors display colors
- by projecting various amounts of Red, Green, and Blue light.
- Combined, these three colors can produce almost any shade and
- hue of color. This is one way colors are represented in MegaZeux
- as well. In the RGB color model (the default), each color has a
- Red, Green, and Blue value, each ranging from 0 to 63. 0 is
- "off" while 63 is "full intensity".
- To make colors other than red, green, and blue, you must mix
- them. Purple is red plus blue, cyan is green plus blue, and
- yellow is red plus green. (Really.) Whites and grays are made
- from equal amounts of all three. For example, Red at 42, Blue at
- 42 and Green at 0 would be a deep purple, and all as 20 would be
- a dark gray. Orange is made with full red, green set to 31 and
- blue zeroed out. To brighten a color, raise all the numbers, or
- lower them to darken it.
- For the RGB color model, use the arrow keys to select the
- current color. R, G, B, and A will respectively increase Red,
- Green, Blue, and All, while Alt+R, Alt+G,Alt+B and Alt+A will
- respectively decrease the values.
- Several functions are consistent across all color models. Alt+D
- will reset the palette to its default colors (you will NOT be
- asked for confirmation). 0 will blacken the current color. Alt+H
- will toggle the shortcut display. The PgUp and PgDn keys select
- the current color model. Finally, F2 will store the current
- color to an internal buffer, while F3 will paste the buffered
- color to the current color.
- In addition to the keyboard shortcuts listed in the below menu,
- users can click colors in the palette to select them. Users can
- also use the mouse to change color values by clicking on the
- relevant areas, and hold down the mouse button to act as a
- slider. Color values can also be clicked on and then typed in
- directly.
- If one is more familiar with other color models, MegaZeux can
- create colors with two alternate models: HSL and CIELAB.
- HSL creates colors by setting hue (base color), saturation
- (color strength) and lightness (brightness relative to white).
- Hue can take values of 0-360; saturation and lightness take
- values of 0-100. The keyboard shortcuts in this mode are C, S
- and V for increasing Hue, Saturation, and Luminance,
- respectively, while alt key combinations of these keys reduce
- these values.
- CIELAB creates colors through a combination of lightness (L*)
- and color values represented by the opponent pair colors of
- red-green (a*) and yellow-blue (b*). L* values range from 0-100,
- and opponent color values can range from -128 (fully one color
- of the pair) to +128 (fully the other color). The keyboard
- shortcuts in this mode are V, A and B for increasing L*, a* and
- b*, respectively, while alt key combinations of these keys
- reduce these values.
- <p class="helpcentered"><span class="f9 ">The Palette Editor in Super MZX Modes</span></p>
- Super MZX Modes allow 256 colors at once, and have their own
- quirks; therefore, the palette editor changes considerably to
- accommodate them. The palette editor for each SMZX mode is noted
- below.
- <p class="helpcentered">Super MZX Mode 1 Palette Editor</p>
- Super MZX Mode 1 does not require any changes, since it merely
- interpolates colors. Therefore, palette editing in this mode
- acts the exact same as it does in normal MZX mode.
- <p class="helpcentered">Super MZX Mode 2 Palette Editor</p>
- Super MZX Mode 2's color selection is shown as a 16x16 set of
- colors. Each color also represents the four-color palette (also
- known as a subpalette) used when an item is assigned that color.
- The palette number, as well as its hex number and the four
- colors that comprise it, are shown in the upper-left corner. By
- default, the color selector shows the current color/palette
- highlighted by a white box, with red boxes showing the other
- colors of the palette.
- The base values of the current color and the current color
- creation mode are shown in the upper-right, and the help menu
- is shown below.
- On top of the functions allowed in the normal palette editor,
- SMZX Mode 2 adds this hotkey:
- <span class="fE ">Spacebar / Middle Click</span><span class="fF ">: Toggle Subpalette Index Cursors.</span>
- Turns the display of the red boxes highlighting the other
- component colors of the given palette on or off.
- <p class="helpcentered">Super MZX Mode 3 Palette Editor</p>
- Super MZX Mode 3's color selection is shown as a 16x16 set of
- colors. The palette number, as well as its hex number and the
- four colors that comprise it, are shown in the upper-left
- corner.
- The base values of the current color and the current color
- creation mode are shown in the upper-right, and the help menu
- is shown below.
- In this mode, the highlighted color only corresponds to a color,
- NOT to a subpalette; therefore, one can be editing a different
- color and subpalette at the same time, and changing highlighted
- color will NOT change the current subpalette.
- To change the current subpalette, press Space or click the
- middle mouse button, and then choose the subpallete to edit.
- Each color can be assigned to a color slot in the current
- subpalette; to place a color in a subpalette slot, press 1-4 to
- put the current color in the corresponding slot (for example,
- pressing 2 while on color #120 would make the second color of
- the current subpalette color #120).
- With the exception of hiding the help, all functions available
- to the palette editor in normal MZX mode are available in the
- SMZX mode 3 editor.
- <a class="helplink" href="#EDITINGK.HLP__080">Editing Keys and Options Reference</a>
- <a class="helplink" href="#SMZXMODE.HLP__095">Super MZX Modes</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="GLOBALIN.HLP">
- <a class="helpanchor" name="GLOBALIN.HLP__086"> </a>
- <p class="helpcentered"><span class="f9 ">Global Info Options</span></p>
- To edit the Global Info options, press G within the editor.
- Here you can edit options that affect the entire world. The
- first dialog you see has the following options:
- <p class="helpcentered">First Board</p>
- Here is where you select which board will be the starting board
- for the game. The player will start on this board. This
- defaults to the second board in the list, or to the title screen
- if a second board was not made when creating a new world.
- <p class="helpcentered">Edging Color</p>
- This is the color of the area outside of the viewport. It
- defaults to dark gray on black (c08).
- <p class="helpcentered">Starting/Maximum Lives</p>
- This is where you set the number of lives the player starts
- with, and how many lives the player can have at any one time.
- <p class="helpcentered">Starting/Maximum Health</p>
- Same as above, but for health points.
- <p class="helpcentered">Enemies' Bullets Hurt Other Enemies</p>
- If this is on, then bullets shot by enemies, such as tigers,
- will destroy other enemies that they hit. It basically turns
- all Enemy bullets fired into Neutral bullets (including ones
- shot by Robots).
- <p class="helpcentered">Clear Messages and Projectiles on Exit</p>
- If this is on, the current message and all projectiles (stars,
- bullets, missiles, shooting fire) are cleared whenever the
- player leaves the screen.
- <p class="helpcentered">Can Only Play World from a 'SWAP WORLD'</p>
- If this is on, then the current world is unplayable in a normal
- fashion. The only way to play it is to swap to it from another
- world, using the Robotic command SWAP WORLD.
- <p class="helpcentered">More</p>
- This button leads to another screen of settings.
- <p class="helpcentered">Edit Chars</p>
- <a class="helpanchor" name="GLOBALIN.HLP__089">This button leads to a series of dialogs where you can edit the</a>
- characters and colors used to represent various internal things.
- <p class="helpcentered">Edit Dmg</p>
- <a class="helpanchor" name="GLOBALIN.HLP__090">This button leads to a dialog where you can edit the amount of</a>
- damage done by various internal things. Valid numbers range from
- 0 to 255.
- <p class="helpcentered">Edit Global Robot</p>
- This button allows you to edit the global Robot, which is a
- very special Robot that is present at all times, although it is
- not physically on every board. It is a very important part of
- MegaZeux. See the section on The Global for more information.
- <a class="helplink" href="#THEGLOBL.HLP__gbl">The Global</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helpanchor" name="GLOBALIN.HLP__088">The More page of settings for global info has the following</a>
- options:
- <p class="helpcentered">Death Board/Death X/Death Y/Mode</p>
- This tells MegaZeux what happens when the player dies. If the
- mode is Same Position, then the player will simply lose a life.
- If it is Restart Board, then the player will also teleport to
- the location on the board where the player entered. If it is
- Teleport, the player will instead teleport to the board and
- x,y coordinates stated in the above three settings.
- <p class="helpcentered">Endgame Board/Endgame X/Endgame Y/Mode</p>
- This tells MegaZeux what happens when the player runs out of
- lives. If the mode is Game Over, then the game will simply end.
- If it is Teleport, the player will be given one life and one
- health, and then will be teleported to the board and x,y
- coordinates stated in the above three settings. This will
- continue to happen every time the player runs out of lives or
- when a Robot calls the ENDGAME command.
- <p class="helpcentered">Play Game Over SFX</p>
- If this option is on, the game over sound effect will be looped
- when the game has ended and the Game Over message will flash
- along the bottom of the screen. The Game Over SFX will not play
- when the endgame teleport option is chosen.
- <p class="helpcentered">Previous</p>
- This will go to the previous global settings dialog.
- The character editing dialogs (eight pages in total) are screens
- of characters and colors used to represent internal things.
- Select one to change the color or character used. Use Next and
- Previous to move between the screens, and Done when you are
- finished. Lit Bomb Anim 1 is special; setting it will set the
- other 6 frames of Lit Bomb Animation to the succeeding
- characters.
- The damage editing dialog allows you to change the amount of
- damage dealt by various things within the game. Select one and
- use the usual dialog keys to change the values, which can range
- from 0 to 255. 0 will leave the player invincible versus that
- thing.
- Editing the global Robot is covered in the Robot tutorials, as
- it is (mostly) the same as editing any other Robot. The actual
- use of a global Robot is covered in its own section.
- <a class="helplink" href="#THEGLOBL.HLP__gbl">The Global</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#EDITINGK.HLP__080">Editing Keys and Options Reference</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="BOARDINF.HLP">
- <a class="helpanchor" name="BOARDINF.HLP__085"> </a>
- <p class="helpcentered"><span class="f9 ">Board Info Options</span></p>
- To edit Board options, press I within the editor. This will
- bring up a dialog where you can edit options pertaining to the
- current board. The options are as follows:
- <p class="helpcentered">Board Name</p>
- This is the name of the board. It is mainly for internal
- reference; however, the name of the first board (the title
- screen) is also used to represent the entire world on a file
- listing, and its value can be accessed through the BOARD_NAME
- string counter in Robotic. The special color codes ~ and @
- can apply here, allowing colored text in board names.
- <p class="helpcentered">Can Shoot/Bomb</p>
- These options determine whether or not the player can shoot or
- bomb normally. If off, then the player cannot perform the
- noted action. (Other ways of doing these actions in Robotic may
- replace the default ways of shooting/bombing and are unimpeded
- by this setting.)
- <p class="helpcentered">Fire Burns Space/Fakes/Trees/Brown</p>
- These options determine what fire will and will not burn
- through. Space is empty space, NOT floors; Fakes include fakes,
- floors, carpets, and tiles. Trees is self-explanatory. Brown is
- anything other than the player or a Robot/sign/Scroll that is
- colored brown (that is, anything with a color of cX6).
- <p class="helpcentered">Forest to Floor</p>
- If on, when the player moves through forest, it will become
- Floor. If off, the forest will simply be replaced by a space.
- <p class="helpcentered">Collect Bombs</p>
- If on, the player will collect bombs normally. If off, bombs
- will be instantly lit when touched instead.
- <p class="helpcentered">Fire Burns Forever</p>
- If on, fire will never burn out. If off, fire will eventually
- turn into ash, which is actually a dark gray (c08) Floor. Of
- course, if fire is set to burn fakes, the ash will probably
- re-light immediately.
- <p class="helpcentered">Restart if Hurt</p>
- When on, the player will be teleported to the place on the
- current board that it originally entered every time health is
- lost.
- <p class="helpcentered">Reset Board on Entry</p>When on, every time the board is entered, it will reset the
- board, acting as if the player is entering the board for the
- first time.
- <p class="helpcentered">Player Locked N/S</p>
- When on, the player cannot directly move north or south until
- unlocked with the UNLOCKPLAYER command. (Other ways of moving
- the player in those directions, such as Robotic or the player
- being pushed, are unimpeded by this setting.)
- <p class="helpcentered">Player Locked E/W</p>
- When on, the player cannot directly move east or west until
- unlocked with the UNLOCKPLAYER command. (Other ways of moving
- the player in those directions, such as Robotic or the player
- being pushed, are unimpeded by this setting.)
- <p class="helpcentered">Player Attack Locked</p>
- When on, the player cannot shoot bullets or lay bombs until
- unlocked with the UNLOCKPLAYER command. (Other ways of doing
- these actions, in Robotic, are unimpeded by this setting.)
- <p class="helpcentered">Time Limit</p>
- If greater than zero, the player has the noted amount of time
- to complete the board. The current time is shown in the lower
- left corner during gameplay. If time runs out, the player loses
- ten health and the time limit is reset. This option is most
- useful with the "Restart if Hurt" option. The time is in units
- considerably faster than seconds; test the board to get a feel
- for the amount of time needed. The current time is reset if the
- player exits and re-enters the board.
- <p class="helpcentered">Explosions to Space/Ash/Fire</p>
- This determines what explosions will leave in their wake: Empty
- space, ash (dark gray floors - in other words, floors colored
- c08), or burning fire.
- <p class="helpcentered">Can Save/Can't Save/Can Save on Sensors</p>
- This determines when the player can save his game. The first
- two options are self-explanatory. Can save on Sensors allows
- the player to only save if it is standing directly over a
- Sensor. Sensors are explained in another section. This only
- prevents or limits saving using the built-in save functions;
- saving done with Robotic is unaffected.
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors - What They Are and How to Use Them</a>
- <p class="helpcentered">No/Normal/Static/Transparent Overlay</p>
- This sets the type of overlay for the current board. No Overlay
- means just that - overlay mode is completely off. Normal
- Overlay is an overlay that scrolls with the board. Static
- Overlay is an overlay that remains in a fixed position even when
- the board scrolls. A Transparent Overlay is similar to no
- overlay in that none is shown, but it allows you to edit it so
- that it may appear later. Overlays are discussed in full in
- another section.
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <p class="helpcentered">Load Charset on Entry</p>This can be set to load a specific charset every time the board
- is entered, or set to do nothing.
- <p class="helpcentered">Load Palette on Entry</p>This can be set to load a specific palette every time the board
- is entered, or set to do nothing.
- One can set the current board's settings as the default
- settings for all new boards made for this world file. Select
- the "Set as defaults" button at the bottom and click or press
- Space/Enter. This will save a .cnf file for the current world.
- There will be no confirmation. Since the .cnf is named after the
- current world, the current world must have been saved first.
- <a class="helplink" href="#EDITINGK.HLP__080">Editing Keys and Options Reference</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="SOUNDEFX.HLP">
- <a class="helpanchor" name="SOUNDEFX.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">MegaZeux's Sound System</span></p>
- MegaZeux has two types of sound: Digitized sound, played
- through a sound card, and sound effects, which are emulated PC
- Speaker effects.
- MegaZeux's many sound options can be accessed through the
- config.txt file. Please see this section for details.
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- <p class="helpcentered">Music Files</p>
- Music files, referred to as MODULES, can be any one of the
- following formats:
- * OGG
- * MOD (or NST/WOW/OCT)
- * S3M
- * XM
- * IT
- * GDM
- * WAV
- * Other formats {STM, MTM, 669, ULT, FAR, MED, DSM, OKT, AMF}
- * Several other formats are in ModPlug or XMP, but are not
- supported in MZX.
- The default module engine is XMP. It is still possible to build
- using ModPlug, and possible to build using MikMod to support
- platforms that cannot handle anything else. OGGs and WAVs are
- handled outside of the module engines, while GDMs load natively
- in XMP/MikMod, but not in ModPlug. When a GDM is loaded with
- ModPlug as the music engine, it is converted to an S3M file. The
- S3M file is then loaded in all future incidences.
- Formats common to all engines are MOD, S3M, XM, IT, STM, MTM,
- 669, ULT, FAR, MED, DSM, OKT and AMF. All other formats
- (excluding WAV/OGG/SAM/GDM) are locked out of MZX by default.
- MED support is the most inconsistent between module engines,
- due to its multiple subversions and the engines' varying
- accuracy on dealing with them, so use of this format is not
- generally advised.
- MZX supports loop markers for WAVE and OGG files. WAVE formats
- with the "smpl" marker will be recognized, and forward loop
- only; OGG loops are supported with the LOOPSTART and LOOPLENGTH
- tags.
- <p class="helpcentered">Using Sound and Music in Your Own Games</p>
- There are three ways to utilize sound and music in your own
- games:
- 1- Select the default modules for each board (or mod *).
- 2- Edit the built-in speaker sfx tables.
- 3- Use Robots to play modules, SAMs/WAVs/OGGs, and speaker
- sfx.
- <p class="helpcentered">Selecting Default Modules for Each Board</p>
- This is perhaps the easiest method to get music in your games.
- Simply make sure that the proper module files are in the
- current directory, or in a subdirectory of the current
- directory, and use Alt+N to select music for a board. Press
- Alt+N to turn it back off again. To set it to play the same
- music as the last board (mod *), press Shift+8 or the numpad's
- asterisk key.
- <a class="helplink" href="#EDITINGK.HLP__AltN">Details on Alt+N</a>
- <p class="helpcentered">Editing the Built-in Speaker SFX</p>
- To edit the built-in speaker sound effect tables, use Alt+F.
- The format for them is discussed later in this section.
- <a class="helplink" href="#EDITINGK.HLP__097">Details on Alt+F</a>
- <p class="helpcentered">Using Robots</p>
- Robotic has a large number of commands for playing modules,
- SAMs/WAVs/OGGs, and speaker sfx. A knowledge of Robotic basics
- is required, so see the following sections to learn about
- Robots.
- <a class="helplink" href="#ROBOTSWH.HLP__1st">Robots - What They Are and How to Use Them</a>
- <a class="helplink" href="#ROBOTICT.HLP__1st">Robotic Tutorial</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- The following sections discuss individual commands relating to
- sound and music.
- <a class="helplink" href="#COMMAND2.HLP___c6"><span class="fA ">CHANGE SFX # "string"</span></a>
- <a class="helplink" href="#COMMANDR.HLP___e2"><span class="fA ">END MOD</span></a>
- <a class="helplink" href="#COMMANDR.HLP___e4"><span class="fA ">END SAM</span></a>
- <a class="helplink" href="#COMMANDR.HLP___e3"><span class="fA ">END PLAY</span></a>
- <a class="helplink" href="#COMMAND2.HLP___j1"><span class="fA ">JUMP MOD ORDER #</span></a>
- <a class="helplink" href="#COMMANDR.HLP___m3"><span class="fA ">MOD "file"</span></a>
- <a class="helplink" href="#COMMAND2.HLP___m5"><span class="fA ">MOD FADE IN "file"</span></a>
- <a class="helplink" href="#COMMAND2.HLP___m6"><span class="fA ">MOD FADE OUT</span></a>
- <a class="helplink" href="#COMMAND2.HLP___m4"><span class="fA ">MOD FADE # #</span></a>
- <a class="helplink" href="#COMMAND2.HLP___m7"><span class="fA ">MOD SAM # #</span></a>
- <a class="helplink" href="#COMMANDR.HLP___p2"><span class="fA ">PLAY "string"</span></a>
- <a class="helplink" href="#COMMANDR.HLP___p3"><span class="fA ">PLAY SFX "string"</span></a>
- <a class="helplink" href="#COMMANDR.HLP___s1"><span class="fA ">SAM # "file"</span></a>
- <a class="helplink" href="#COMMANDR.HLP___sO"><span class="fA ">SFX #</span></a>
- <a class="helplink" href="#COMMAND2.HLP___v3"><span class="fA ">VOLUME #</span></a>
- <a class="helplink" href="#COMMAND2.HLP___w2"><span class="fA ">WAIT MOD FADE</span></a>
- <a class="helplink" href="#COMMAND2.HLP___w3"><span class="fA ">WAIT PLAY</span></a>
- <a class="helplink" href="#COMMANDR.HLP___w4"><span class="fA ">WAIT PLAY "string"</span></a>
- <p class="helpcentered">SAM Files in the Port</p>
- SAM files, formerly the only format for playing sounds in MZX,
- are directly supported. However, using OGGs or WAVs as the
- original source, if possible, is preferred as SAMs are low
- quality (~8KHz mono) compared to typical WAV and OGG quality
- settings. SAM support is mostly kept in for supporting older
- games, not for usage in designing games.
- <p class="helpcentered">Format for Sound Effects</p>
- The sound effects editor and Robotic PLAY commands all use the
- same format for playing sound effects. The format consists of
- a single string of characters, each character representing one
- note or command. Spaces are ignored, and capitalization is not
- important. Some knowledge of music is required to use the
- format effectively. The commands are:
- <span class="fA "> A B C D E F G</span>
- Plays the note stated, at the current octave and duration.
- The scale starts at C and continues DEFGAB before going up
- an octave. Use # and $ for sharps and flats, placing them
- after the note.
- <span class="fA "> # $</span>
- Sharps (#) or flats ($) the previous note. This does not
- affect any note other than the note directly before the sharp
- or flat. Constructs such as B# are allowed.
- <span class="fA "> 0 1 2 3 4 5 6</span>
- Sets the current octave. Octave 4 starts at middle C. The
- lower the number, the lower the notes.
- <span class="fA "> + -</span>
- Raises or lowers the current octave by 1, but only if
- possible. You cannot go below octave 0 or above octave 6.
- <span class="fA "> X</span>
- Plays a rest of the current duration. A rest is a period of
- silence.
- <span class="fA "> Z T S I Q H W</span>
- These letters change the current duration of notes and rests,
- I.E. the length of time each subsequent note is played. Each
- one is twice as long as the previous one, with Z being the
- fastest and W the slowest. Duration defaults to T. The
- counterparts to the durations follow:
- Z = sixty-fourth note
- T = <span class="fA ">T</span><span class="fF ">hirty-second note</span>
- S = <span class="fA ">S</span><span class="fF ">ixteenth note</span>
- I = e<span class="fA ">I</span><span class="fF ">ghth note</span>
- Q = <span class="fA ">Q</span><span class="fF ">uarter note</span>
- H = <span class="fA ">H</span><span class="fF ">alf note</span>
- W = <span class="fA ">W</span><span class="fF ">hole note</span>
- Duration (and octave) does not carry over from one string to
- the next.
- <span class="fA "> .</span>
- A dot will change the current duration to 150% that of usual.
- This is a permanent duration change and will only affect
- subsequent notes. Its use is similar to that of a dot in
- regular music, except that this dot affects multiple notes.
- <span class="fA "> !</span>
- An exclamation point will change the current duration to 33%
- that of usual. This is a permanent duration change and will
- only affect subsequent notes. Its use is similar to that of
- triplets in regular music, except it affects ALL subsequent
- notes.
- <span class="fA "> &</span>
- & is a very special command. It is used to play SAM/WAV/OGG
- files (digitized sounds) within an sfx string. It allows
- digitized sounds within the sound effects editor. The general
- format for & is as follows:
- <p class="helpcentered">"&FILENAME.WAV&4C"</p>
- This will play middle C using FILENAME.WAV. Duration is
- irrelevant. If nothing follows the last &, the effect will
- play at natural frequency. Multiple filenames can be used in
- the same PLAY command, but only the last one can have nothing
- following its last &.
- <span class="fA "> _</span>
- An underscore is usually used in conjunction with &. It
- turns off digitized sounds for the rest of the string, and
- ignores the rest of the string ONLY IF digitized music/sound
- is on. For example:
- <p class="helpcentered">"&SHOT.WAV&6F#_+C-C"</p>
- The above will play SHOT.WAV at 4.8KHz (F-sharp, 6th octave)
- if digitized sound is on, OTHERWISE it will play the normal
- shooting sound of "+C-C".
- <p class="helpcentered">Sound Effect Numbers</p>
- The PLAY SFX command in Robotic plays one of the built-in sound
- effects. The numerical values corresponding to these sound
- effects are listed below.
- 0 - Gem
- 1 - Magic Gem
- 2 - Health
- 3 - Ammo
- 4 - Coin
- 5 - Life
- 6 - Lo Bomb
- 7 - Hi Bomb
- 8 - Key
- 9 - Full Keys
- 10 - Unlock
- 11 - Can't Unlock
- 12 - Invis. Wall
- 13 - Forest
- 14 - Gate Locked
- 15 - Open Gate
- 16 - Invinco Start
- 17 - Invinco Beat
- 18 - Invinco End
- 19 - Door Locked
- 20 - Open Door
- 21 - Hurt
- 22 - Hurt (Lava)
- 23 - Death
- 24 - Game Over
- 25 - Gate Closing
- 26 - Push
- 27 - Transport
- 28 - Shoot
- 29 - Break
- 30 - Out of Ammo
- 31 - Ricochet
- 32 - Out of Bombs
- 33 - Place Bomb (Lo)
- 34 - Place Bomb (Hi)
- 35 - Switch Bomb Type
- 36 - Explosion
- 37 - Entrance
- 38 - Pouch
- 39 - Ring/Potion
- 40 - Empty Chest
- 41 - Chest
- 42 - Out of Time
- 43 - Fire Ouch
- 44 - Stolen Gem
- 45 - Enemy HP Down
- 46 - Dragon Fire
- 47 - Scroll/Sign
- 48 - Goop
- 49 - Unused
- <a class="helpanchor" name="SOUNDEFX.HLP__frq"> </a>
- <p class="helpcentered">SAM, OGG, MOD and WAV Frequencies</p>
- Sounds played using the SAM command in Robotic play at its
- "natural" frequency at value 0; if one wants to play the sound
- at a different pitch, a frequency value is needed. Frequencies
- corresponding to MOD file notes follow:
- --------------------------------------------
- | | C | C#| D | D#| E | F | F#| G | G#| A | A#| B |
- --------------------------------------------
- |Octave 1|856|808|762|720|678|640|604|570|538|508|480|453|
- --------------------------------------------
- |Octave 2|428|404|381|360|339|320|302|285|269|254|240|226|
- --------------------------------------------
- |Octave 3|214|202|190|180|170|160|151|143|135|127|120|113|
- --------------------------------------------
- |Octave 4|107|101| 95| 90| 85| 80| 75| 71| 67| 63| 60| 56|
- --------------------------------------------
- |Octave 5| 53| 50| 47| 45| 42| 40| 37| 35| 33| 31| 30| 28|
- --------------------------------------------
- The following table lists frequencies corresponding to PLAY
- statement notes:
- -------------------------------------------------
- |O|C |C# |D |D# |E |F |F# |G |G# |A |A# |B |
- -------------------------------------------------
- |0|3424|3232|3948|2880|2712|2560|2416|2280|2152|2032|1920|1812|
- -------------------------------------------------
- |1|1712|1616|1524|1440|1356|1280|1208|1140|1076|1016| 960| 906|
- -------------------------------------------------
- |2| 856| 808| 762| 720| 678| 640| 604| 570| 538| 508| 480| 453|
- -------------------------------------------------
- |3| 428| 404| 381| 360| 339| 320| 302| 285| 269| 254| 240| 226|
- -------------------------------------------------
- |4| 214| 202| 190| 180| 170| 160| 151| 143| 135| 127| 120| 113|
- -------------------------------------------------
- |5| 107| 101| 95| 90| 85| 80| 75| 71| 67| 63| 60| 56|
- -------------------------------------------------
- |6| 53| 50| 47| 45| 42| 40| 37| 35| 33| 31| 30| 28|
- -------------------------------------------------
- The following tables list how to play a Wave or OGG at its
- normal sound with PLAY statements:
- 48000Hz Wave/OGG --> 37
- 44100Hz Wave/OGG --> 41
- 32000Hz Wave/OGG --> 56
- 24000Hz Wave/OGG --> 75
- 22050Hz Wave/OGG --> 81
- 16000Hz Wave/OGG --> 112
- 12000Hz Wave/OGG --> 149
- 11025Hz Wave/OGG --> 162
- 08000Hz Wave/OGG --> 224
- To convert frequencies from MZX to real, use these formulae:
- Actual frequency = 1789682 / MZX frequency
- MZX frequency = 1789682 / actual frequency
- SAMs and WAVs converted from SAMs by older versions of MZX play
- at a natural frequency of 8363Hz.
- Finally, tracked modules have a normal frequency of 44100 Hz;
- other types such as OGG and WAV have normal frequencies at
- their recording rate (for example, a WAV encoded at 22050 Hz
- will play normally at the 22050 Hz setting). The frequency of a
- module can be controlled with the "mod_frequency" counter;
- changing the frequency mid-song can create a popping sound,
- especially while lowering frequency. The lowest allowed setting
- of mod_frequency is 16 Hz.
- <p class="helpcentered">Where to Get Module and Sound Files</p>
- These questions are answered in the Frequently Asked Questions
- section of help.
- <a class="helplink" href="#FAQ.HLP__1st">Frequently Asked Questions</a>
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="TOVERLAY.HLP">
- <a class="helpanchor" name="TOVERLAY.HLP__081"> </a>
- <p class="helpcentered"><span class="f9 ">Editing and Using the Overlay</span></p>
- The overlay is a simple but useful part of a board. If one
- looks at Floors and Fakes as a floor layer, and Walls as a
- central layer, the overlay is a ceiling layer. Basically, the
- overlay, when on, appears OVER anything on the board. The
- player, enemies, Robots, etc. all move underneath it; the only
- exceptions are sprites specifically set to go over it. The
- overlay is purely for show and graphical effects. For example,
- you could create archways that the player moves under, or have
- a score and lives display that is overlaid over the view at all
- times (by using Robotic). However, character 32 (empty space
- 99.99% of the time) is never part of the overlay. To emulate a
- space, use the wall character or make your own space character.
- This is very important to remember when putting text onto the
- overlay.
- The overlay is set on "Normal Overlay" mode by default. The
- editor will prevent you from editing the overlay if it is Off,
- since it will not be saved if it is. These are the available
- overlay modes:
- Off - No overlay is saved, none is shown.
- Normal - The overlay is shown normally, scrolling along with
- the rest of the board. Default for boards.
- Static - The overlay is shown, but it does not scroll with the
- board. It always shows the top left position.
- Transparent - The overlay is saved and can hold info, but is
- currently not shown.
- If the overlay is on, press Alt+O in the editor to edit it.
- This brings you to the overlay editor. The menu at the bottom
- of the screen will change, and you will have access to the
- following keys and options:
- <a class="helpanchor" name="TOVERLAY.HLP__074"><span class="fE ">Alt+B - Block</span></a>
- Press Alt+B to start block mode, then move the cursor to the
- opposite corner of a rectangular block and press Alt+B again.
- You can then select an action to perform upon the block. In all
- copy/move operations, the cursor marks the new UPPER LEFT
- corner.
- Copy block will allow you to duplicate the block by moving the
- cursor to a destination and pressing Enter.
- Copy block (repeated) is the same as Copy block but can allow
- copying of the same block to multiple places.
- Move block will allow you to move the block to a new location.
- Clear block will erase the contents of the block.
- Flip block will flip the block upside down.
- Mirror block will flip the block left to right.
- Paint block will change the entire block to the current color.
- Copy to board will copy the block to the given spot of the
- board. You can choose to place it as either Custom Block, Custom
- Floor, or Text.
- Copy to vlayer will copy the block to the given spot of the
- vlayer.
- Save as MZM will save the block as a layer-type MZM file.
- Destinations for Move and Copy can overlap the original block
- safely. Ctrl+Dir is especially helpful when doing a repeated
- copy block; it moves the cursor the width or height of the
- block, ensuring no overlap when pasting.
- Like normal Block functions, one can copy between boards by
- selecting the board when the editor prompts the user for the
- block's destination. Use the B key to select the destination
- board.
- <a class="helpanchor" name="TOVERLAY.HLP___C"><span class="fE ">C - Color</span></a>
- Press C to select a new current color from a menu. The thing
- under the cursor is not affected. One can jump to a color by
- typing its hex code in the color menu; for example, typing "0D"
- would jump to color 013 (background color 0, foreground color
- D).
- <a class="helpanchor" name="TOVERLAY.HLP___F"><span class="fE ">F - Fill</span></a>
- Press F to fill in an enclosed area with the current character
- and color. The area must be completely surrounded by characters
- other than the character beneath the cursor. For example, you
- can fill over a solid square of As with something else. The
- current fill command may not work right for very large and
- complex areas- In this case, you must move to the unfilled areas
- and press F to continue filling. However, this happens very
- rarely.
- <a class="helpanchor" name="TOVERLAY.HLP__AltO"><span class="fE ">Alt+O - Edit Overlay</span></a>
- Alt+O will exit overlay mode and return to editing the main
- board.
- <a class="helpanchor" name="TOVERLAY.HLP__AltS2"><span class="fE ">Alt+S - Show Level</span></a>
- Alt+S will toggle whether the level beneath the overlay is
- shown. Without the level, only the overlay is shown, and no
- board bits are seen through the holes in the overlay. However,
- it can be a good idea to show the level to see how it looks
- beneath the overlay.
- <a class="helpanchor" name="TOVERLAY.HLP__F1"><span class="fE ">F1 - Help</span></a>
- F1 will bring up context-relevant help. You can press F1 at
- almost any time.
- <a class="helpanchor" name="TOVERLAY.HLP__F2"><span class="fE ">F2 - Text</span></a>
- F2 will toggle text mode on and off. When text mode is on, Enter
- will go to the next line, and Backspace will delete going
- backwards. All printable characters will type in as text.
- <a class="helpanchor" name="TOVERLAY.HLP__Ar"><span class="fE ">Arrow - Move</span></a>
- The arrow keys will move the cursor. The edit window will scroll
- when necessary.
- <a class="helpanchor" name="TOVERLAY.HLP__AltAr"><span class="fE ">Alt+Arrow - Move 10</span></a>
- Alt with the arrow keys will move the cursor ten spaces at a
- time (or to the edge if under 10 spaces away in that direction).
- <a class="helpanchor" name="TOVERLAY.HLP__BkSp"><span class="fE ">Backspace - Delete</span></a>
- <a class="helpanchor" name="TOVERLAY.HLP__Del"><span class="fE ">Del - Delete</span></a>
- These two keys will delete any overlay under the cursor. The
- current character is not affected.
- <a class="helpanchor" name="TOVERLAY.HLP__End"><span class="fE ">End - L/R Corner</span></a>
- End will jump the cursor to the lower-right corner of the entire
- overlay.
- <a class="helpanchor" name="TOVERLAY.HLP__Enter2"><span class="fE ">Enter - Character</span></a>
- Enter will alter the current character on the overlay. Select it
- from a menu and then press Enter to confirm your choice.
- <a class="helpanchor" name="TOVERLAY.HLP__ESC"><span class="fE ">ESC - Exit/Cancel Mode</span></a>
- ESC will exit overlay mode. If you are in block, text, or draw
- mode, ESC will instead cancel the current mode and return to
- normal overlay editing.
- <a class="helpanchor" name="TOVERLAY.HLP__Home"><span class="fE ">Home - U/L Corner</span></a>
- Home will jump the cursor to the upper-left corner of the
- entire overlay.
- <a class="helpanchor" name="TOVERLAY.HLP__Ins"><span class="fE ">Ins - Grab</span></a>
- Ins will select the character and color under the cursor
- as the current. The actual character is not affected.
- <a class="helpanchor" name="TOVERLAY.HLP__Sp"><span class="fE ">Spacebar - Place</span></a>
- Spacebar will copy the current character and color to the
- location under the cursor. Other overlay will be deleted if it
- is under the cursor.
- <a class="helpanchor" name="TOVERLAY.HLP__Tab"><span class="fE ">Tab - Draw</span></a>
- Tab will toggle the current draw mode. When drawing is on, you
- will place a copy of the current character every time you move
- the cursor.
- <span class="fE ">P - Change Buffer Character</span>
- P will act much like Enter, but only change the character in the
- buffer; no character on the overlay is changed with this action.
- <a class="helpanchor" name="TOVERLAY.HLP__CtrZ"><span class="fE ">Ctrl+Z - Undo</span></a>
- <a class="helpanchor" name="TOVERLAY.HLP__CtrY"><span class="fE ">Ctrl+Y - Redo</span></a>
- Ctrl+Z will undo an action; Ctrl+Y will redo any previously
- undone action. Action depth is determined by config file
- settings, with 100 as default.
- The basic method of editing the overlay is to use C and Enter to
- select characters and colors, and use Space, arrows, and Tab to
- draw with them. Do not switch overlay mode to Off once you have
- drawn your overlay, or it may be permanently erased.
- The overlay and overlay mode can also be changed using Robotic;
- with Robotic, not only can one powerfully manipulate the
- overlay, but change the overlay's type, and also copy directly
- to the board or vlayer from the overlay (and vice versa). A
- knowledge of Robotic basics is required, so see the following
- sections to learn about Robots.
- <a class="helplink" href="#ROBOTSWH.HLP__1st">Robots- What They Are and How to Use Them</a>
- <a class="helplink" href="#ROBOTICT.HLP__1st">Robotic Tutorial</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- The following sections discuss individual commands relating to
- overlays.
- <a class="helplink" href="#COMMAND2.HLP___c4">CHANGE OVERLAY [color] [char] [color] [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___c5">CHANGE OVERLAY [color] [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___cJ">COPY BLOCK # # # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cL">COPY OVERLAY BLOCK # # # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cR">COPY OVERLAY BLOCK # # # # "@filename" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cS">COPY OVERLAY BLOCK "#x" "#y" # # "@filename" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cU">COPY OVERLAY BLOCK # # # # "$string" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cV">COPY OVERLAY BLOCK "#x" "#y" # # "$string" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cX">COPY OVERLAY BLOCK # # # # "#x" "#y"</a>
- <a class="helplink" href="#COMMAND2.HLP___cZ">COPY OVERLAY BLOCK "#x" "#y" # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cAA">COPY OVERLAY BLOCK "#x1" "#y1" # # "#x2" "#y2"</a>
- <a class="helplink" href="#COMMAND2.HLP___o2">OVERLAY ON</a>
- <a class="helplink" href="#COMMAND2.HLP___o3">OVERLAY STATIC</a>
- <a class="helplink" href="#COMMAND2.HLP___o4">OVERLAY TRANSPARENT</a>
- <a class="helplink" href="#COMMAND2.HLP___pE">PUT [color] [char] OVERLAY # #</a>
- <a class="helplink" href="#COMMAND2.HLP___w7">WRITE OVERLAY [color] "string" # #</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="SCROLLSS.HLP">
- <a class="helpanchor" name="SCROLLSS.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Signs and Scrolls in the Editor</span></p>
- Signs and scrolls are a simple way to get messages across in
- the game. Signs can be read multiple times; scrolls can be read
- once, then disappear. To place them in the editor, press F10 and
- select Sign or Scroll from the list. You must then edit the text
- of the sign or scroll.
- The Scroll editor is very simple. You can move the cursor among
- the different lines and characters. Type to insert text
- anywhere. Press Ins to toggle between insert mode (default)
- and overwrite mode, where typed characters will overwrite any
- characters already there. Backspace and delete work as normal,
- as do PageDown, PageUp, End, and Home. Finally, use Enter to
- start or insert new lines.
- Press ESC when you are done editing your sign or scroll. It will
- be placed at the current cursor position and will become the
- current object in the buffer. Note that although you can now
- copy the scroll freely, there is a limit of 255 scrolls and
- signs per board, but this limit shouldn't ever be a problem.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="DBGMODE.HLP">
- <a class="helpanchor" name="DBGMODE.HLP__dbg"> </a>
- <p class="helpcentered"><span class="f9 ">Debug Modes</span></p>
- The debug modes are powerful tools. MegaZeux contains two types
- of debug modes: the Counter Debug Mode and the Robotic
- Debugger.
- <p class="helpcentered">Counter Debug Mode</p><a class="helpanchor" name="DBGMODE.HLP__100"> </a>
- The counter debug mode - accessed by pressing F11 while running
- a world during playtesting in the editor - not only can pause
- all current MZX world action and display all of the counters
- and strings the world has set, but also can manipulate these
- values and even add new ones.
- The left side of the counter debug mode shows the current
- selection of counters/strings. Built-in counters ending with an
- asterisk (*) are read-only. Highlighting a counter/string and
- either clicking it or pressing Enter/Space while on it will
- bring up a box, allowing the value of the counter/string to be
- changed. Type in the desired new value, and press Enter to set
- the counter/string to the new value. Press Escape to cancel
- setting a new value.
- (PLEASE NOTE: Strings can only show and set its first 68
- characters when attempting to set a new value. If a string
- originally contained over 68 characters, none of the characters
- past the 68th will show in the value setting box, even when any
- of the first 68 characters are deleted. Simply choosing to set
- a value, while not doing anything else, will truncate the
- string down to its first 68 characters.)
- These counters and strings are organized into various lists,
- shown in the upper-right. Selecting one of these lists will
- display its contents in the left-side box. If a list has a plus
- sign next to it, it is a tree, and clicking on it or pressing
- Space or Enter will expand it to show any of that tree's
- sub-lists (if they exist). Click again to hide the sub-lists.
- The lists are as follows:
- <span class="fA ">Counters</span><span class="fF ">: Lists all user-defined counters, as well as status</span>
- counters (things like AMMO, HEALTH, etc) and menu counters,
- followed by their values. Expanding this tree will allow
- selection of lists sorted by starting character - individual A
- through Z lists contain only counters starting with their
- respective characters, and # does the same for everything else.
- Only the first 45 characters of a counter name will be shown.
- <span class="fA ">Strings</span><span class="fF ">: Lists all user-defined strings, followed by their</span>
- values. Expanding this tree will allow selection of lists
- sorted by starting character - individual A through Z lists for
- the respective characters, and # for everything else. Only the
- first 16 characters of a string name (including the $) and the
- first 40 characters of a string value will be shown.
- <span class="fA ">Sprites</span><span class="fF ">: Lists the global sprite counters and their values.</span>
- Expanding this list will allow selection of lists sorted by
- relevant sprite - "spr1","spr2", and so on. Each spr# list
- shows all of each sprite's relevant counters.
- <span class="fA ">Universal</span><span class="fF ">: Lists counters which persist throughout an entire</span>
- session of MegaZeux, as well as their values.
- <span class="fA ">World</span><span class="fF ">: Lists built-in world counters/strings and their values.</span>
- <span class="fA ">Board</span><span class="fF ">: Lists built-in board counters/strings and their values.</span>
- Also can expand to show lists of scrolls/signs (both under
- "Scrolls") and sensors, if any of these items exist on that
- board. For scrolls/signs, each list shows a "Scroll text" entry;
- if clicked or Enter is pressed while highlighted, it views that
- scroll's/sign's text as it would be if encountered in-game (i.e.
- in the currently-loaded charset, not the protected charset). For
- sensors, each list shows the sensor name and the Robot it
- messages.
- <span class="fA ">Robots</span><span class="fF ">: If directly highlighted, this option lists nothing.</span>
- However, expanding this tree will allow selection of lists
- sorted by the robot_id of the current board's Robots - starting
- with "0: <name>" for the Global, and continuing on for each
- Robot on the board. Each list displays that Robot's local
- counters and their values (as well as their robot_name
- strings).
- In addition, certain special values can be accessed in this
- menu.
- -The number of commands that the given Robot has processed is
- listed under its commands_total value.
- -The number of commands that the given Robot has executed in
- the current cycle is listed under its commands_cycle value.
- This value is read-only.
- -Whether the given Robot is locked or unlocked is denoted by
- the value of lockself (0 for unlocked, 1 for locked).
- Outside of directly displaying and setting values of counters
- and strings, the counter debug mode has several other tools at
- its disposal. They are given buttons in the lower-right corner,
- and are as follows:
- <span class="fA ">Search</span><span class="fF ">: Locates names and values in any of the counters/strings</span>
- listed in the counter debug mode. Type the desired search
- string and select from the given options, then press Enter. The
- search begins from the last highlighted line. This menu can be
- directly accessed with Ctrl+F, and an instant repeat of the
- last search can be done with Ctrl+R. Options:
- -Search names: Searches counter and string names.
- -Search values: Searches counter and string values.
- -Case sensitive: Returns results only if case matches.
- -Exact: Returns results only if the entire string or counter
- value matches (as opposed to if part of the string or counter
- value matches).
- -Reverse: Searches from bottom to top (as opposed to the
- default top to bottom).
- -Wrap search: If no results are found, starts from the opposite
- end and searches until a result is found or the original search
- location is reached.
- -Current list only: Only searches the current list. Child lists
- of the current list will not be searched.
- <span class="fA ">New</span><span class="fF ">: Creates a new counter or string with the given name. Its</span>
- value will be 0 for a new counter, and blank for a new string.
- If any counter or string already exists with the given name,
- this will be ignored and the original counter/string will keep
- its original value. You will not be notified of any such
- conflicts. This menu can be directly accessed with Alt+N.
- <span class="fA ">Toggle Empties</span><span class="fF ">: Sets whether counters with values of 0 and</span>
- blank strings are shown in the display lists. Defaults to Show
- (i.e. counters and strings with these values will be shown).
- Searching forces this setting to Show. This menu can be
- directly accessed with Alt+H.
- <span class="fA ">Export</span><span class="fF ">: Exports a text file list of SET commands that would set</span>
- the current user-defined counters and strings, and the built-in
- counters in the Counters parent list, to their current values.
- If overwriting a current file is chosen, MZX will ask for
- confirmation.
- In addition to its own considerable power, accessing the counter
- debug mode can allow access to the character editor (via Alt+C)
- or the palette editor (via Alt+E) for further manipulation and
- testing.
- <p class="helpcentered">The Robotic Debugger</p><a class="helpanchor" name="DBGMODE.HLP__101"> </a>
- Ever have problems with a Robot choking your game to a crawl?
- Can't figure out how someone else's code works from a simple
- lookthrough? Are your Robots just not interacting the way you'd
- planned? The Robotic Debugger might help. The Robotic Debugger
- can enable controlled line-by-line execution of Robots, or even
- halt Robot execution altogether.
- <a class="helpanchor" name="DBGMODE.HLP__102"> </a>
- Since stepping through code line-by-line can be very, very
- tedious if unneeded, the debugger only starts allowing such
- control after meeting given conditions. The conditions that
- tell the debugger when to begin stepping through lines are
- called breakpoints.
- MegaZeux does not provide default breakpoints (with one notable
- exception explained later), so suitable breakpoints must be
- created. Pressing Alt+F11 while in the editor or during an
- editor testplay will load the config screen for the Robotic
- Debugger.
- Breakpoints can be added by using Alt+N or Alt+A, or by clicking
- the "(new)" text. Breakpoints will activate stepping when
- characters in a line of code match a given string, preventing
- the line triggering the breakpoint from executing. Additionally,
- the breakpoint can be set to trigger only for Robots whose names
- contain the characters in another given string, or only when the
- condition is met on a given line number.
- A blank string can be set as a breakpoint. In this case, all
- lines running in Robots matching the given Robot name string
- will trigger the debugger, and all line numbers matching a given
- line number will likewise always trigger. However, leaving all
- string fields blank and line number at 0 will have no notable
- effect.
- String matches for breakpoints, like MegaZeux string comparisons
- in general, do not have to match case. Also, as implied, the
- string comparisons are not for the whole line or Robot name; the
- lines or names must merely contain the given strings.
- Similar to breakpoints are watchpoints. Watchpoints activate
- stepping as well, but are based off of the values of counters
- and strings, and only activate stepping after a relevant value
- is changed, not right when one is seen. Unlike with breakpoints,
- the watchpoint string has to exactly match (although case
- insensitive). Local counters can be watched as well as global
- counters; to watch local counters, check for rN.<counter>, where
- N is the robot_id, and <counter> is the relevant local counter
- name (without the angle brackets).
- Editing breakpoints/watchpoints is done by pressing Space.
- Deleting breakpoints/watchpoints is done by pressing Alt+D.
- The Robotic debugger defaults to off. Clicking the Enable
- Robotic Debugger button, or adding a breakpoint or watchpoint,
- activates the debugger from that point on. Once done editing
- breakpoints and watchpoints, click the Done button.
- In addition to user-defined breakpoints and watchpoints,
- MegaZeux also activates stepping through the debugger when Robot
- processing reaches very high amounts; if the debugger was
- currently off, hitting this condition forces it on. By default,
- this happens when a Robot executes over 2,000,000 commands in a
- single cycle, but this can be changed by changing the value of
- the COMMANDS_STOP counter.
- Once a breakpoint or watchpoint is hit, MegaZeux halts execution
- of all actions and opens up a menu. Actions, and the keys that
- activate them, are as follows:
- <span class="fA ">Continue</span><span class="fF ">: Stops stepping through code until the next</span>
- breakpoint/watchpoint is hit. (C or Escape)
- <span class="fA ">Step</span><span class="fF ">: Steps through the current line, executing it, and</span>
- prompts the user for further action at the next line. (S)
- <span class="fA ">Goto</span><span class="fF ">: Opens up a menu to send Robots to a given label. (G)</span>
- All Robots that match the given Name string (or all Robots for
- blank) will be sent to the given label. The Goto option will
- send the relevant Robots to the given label regardless of locked
- status; the Send option will act as a normal label send; the
- Send All option will act as a normal label send to all Robots.
- Select the "Send/send all ignores locked status?" option to have
- these ignore locked states as well.
- The strings given here do not have to be constants; expression
- outputs and interpolated strings will evaluate correctly for
- these values.
- <span class="fA ">Halt</span><span class="fF ">: Makes the Robot running the current line immediately</span>
- stop processing commands. Note that this does not permanently
- stop the Robot from processing commands in the future (e.g. due
- to being sent to a label); it merely prevents it from running
- its currently planned commands. (H)
- <span class="fA ">Halt All</span><span class="fF ">: Immediately makes ALL Robots stop processing</span>
- commands. (Alt+H)
- <span class="fA ">Counters</span><span class="fF ">: Opens up the Counter Debug Mode. (F11)</span>
- <span class="fA ">Breakpoints</span><span class="fF ">: Opens up the Robotic Debugger config. (Alt+F11)</span>
- The PgUp and PgDn keys can shift the debugger window to the top
- or bottom of the screen, respectively.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="ERRORMES.HLP">
- <a class="helpanchor" name="ERRORMES.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Error Messages</span></p>
- The following is a list of error messages in alphabetical
- order, which links to descriptions of the error and possible
- remedies. MegaZeux silently ignores many other possible errors.
- MegaZeux General Errors:
- <a class="helplink" href="#ERRORMES.HLP__era">Cannot decrypt write-protected world; check permissions</a>
- <a class="helplink" href="#ERRORMES.HLP__erb">Cannot overwrite the player- move it first</a>
- <a class="helplink" href="#ERRORMES.HLP__erc">Current renderer lacks advanced graphical features; features</a>
- <span class="fF ">disabled</span>
- <a class="helplink" href="#ERRORMES.HLP__erd">Directory rename failed.</a>
- <a class="helplink" href="#ERRORMES.HLP__ere">Error saving; file/directory may be write protected</a>
- <a class="helplink" href="#ERRORMES.HLP__erf">Error swapping to next world</a>
- <a class="helplink" href="#ERRORMES.HLP__erg">(Filename) already exists.</a>
- <a class="helplink" href="#ERRORMES.HLP__erh">File rename failed.</a>
- <a class="helplink" href="#ERRORMES.HLP__eri">Overlay mode is not on (see Board Info)</a>
- <a class="helplink" href="#ERRORMES.HLP__erj">Save would overwrite older world. Aborted.</a>
- <a class="helplink" href="#ERRORMES.HLP__erk">Windowing code bug</a>
- <a class="helplink" href="#ERRORMES.HLP__erl">You can only play this game via a swap from another game</a>
- MegaZeux Validation Errors:
- <a class="helplink" href="#ERRORMES.HLP__eva">Any extra scrolls/signs/robots were replaced</a>
- <a class="helplink" href="#ERRORMES.HLP__evb">Board @ (hex location) could not be found</a>
- <a class="helplink" href="#ERRORMES.HLP__evc">Board @ (hex location): found (#) robots; expected (#)</a>
- <a class="helplink" href="#ERRORMES.HLP__evd">Board @ (hex location): found (#) scrolls/signs; expected (#)</a>
- <a class="helplink" href="#ERRORMES.HLP__eve">Board @ (hex location): found (#) sensors; expected (#)</a>
- <a class="helplink" href="#ERRORMES.HLP__evf">Board @ (hex location) is irrecoverably truncated or corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__evg">Board @ (hex location) is truncated, but could be partially</a>
- <span class="fF ">recovered</span>
- <a class="helplink" href="#ERRORMES.HLP__evh">Board file is from a future version (version)</a>
- <a class="helplink" href="#ERRORMES.HLP__evi">Bytecode file (filename) failed validation check</a>
- <a class="helplink" href="#ERRORMES.HLP__evj">Cannot load password protected world</a>
- <a class="helplink" href="#ERRORMES.HLP__evk">File doesn't exist</a>
- <a class="helplink" href="#ERRORMES.HLP__evl">File is not a board file or is corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__evm">File is not an MZM or is corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__evn">File is not a valid .SAV file or is corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__evo">File is not a valid world file or is corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__evp">MZM contains runtime robots; dummying out</a>
- <a class="helplink" href="#ERRORMES.HLP__evq">MZM doesn't exist</a>
- <a class="helplink" href="#ERRORMES.HLP__evr">MZM from more recent version (version); dummying out robots</a>
- <a class="helplink" href="#ERRORMES.HLP__evs">MZM is missing robots or contains corrupt robot</a>
- <a class="helplink" href="#ERRORMES.HLP__evt">Post validation IO error occurred</a>
- <a class="helplink" href="#ERRORMES.HLP__evu">Robot @ (hex location) could not be found</a>
- <a class="helplink" href="#ERRORMES.HLP__evv">Robot @ (hex location) is truncated or corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__evw">.SAV files from newer versions of MZX (version) are not</a>
- <span class="fF ">supported</span>
- <a class="helplink" href="#ERRORMES.HLP__evx">.SAV files from older versions of MZX (version) are not</a>
- <span class="fF ">supported</span>
- <a class="helplink" href="#ERRORMES.HLP__evy">Scroll @ (hex location) is truncated or corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__evz">Sensor @ (hex location) is truncated or corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__ev1">This world may be password protected. Decrypt it?</a>
- <a class="helplink" href="#ERRORMES.HLP__ev2">Unknown error reading from file</a>
- <a class="helplink" href="#ERRORMES.HLP__ev3">Unknown error writing to file</a>
- <a class="helplink" href="#ERRORMES.HLP__ev4">World is from a more recent version (version)</a>
- <a class="helplink" href="#ERRORMES.HLP__ev5">World is from old version (version); use converter</a>
- MegaZeux Validation Errors (ZIP World Format):
- <a class="helplink" href="#ERRORMES.HLP__eza">Board # (number) is corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__ezb">Board # (number) is missing data:</a>
- <a class="helplink" href="#ERRORMES.HLP__ezc">Robot # (number) contains duplicates on board # (number)</a>
- <a class="helplink" href="#ERRORMES.HLP__ezd">Robot # (number) does not exist on board # (number)</a>
- <a class="helplink" href="#ERRORMES.HLP__eze">Robot # (number) exists on board # (number), but was not found</a>
- <a class="helplink" href="#ERRORMES.HLP__ezf">Robot # (number) on board # (number) is corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__ezg">Scroll # (number) on board # (number) is corrupt</a>
- <a class="helplink" href="#ERRORMES.HLP__ezh">Sensor # (number) on board # (number) is corrupt</a>
- MegaZeux Updater Errors:
- <a class="helplink" href="#ERRORMES.HLP__eua">Attempt to invoke self failed!</a>
- <a class="helplink" href="#ERRORMES.HLP__eub">Failed to back up manifest. Check permissions.</a>
- <a class="helplink" href="#ERRORMES.HLP__euc">Failed to change back to user directory.</a>
- <a class="helplink" href="#ERRORMES.HLP__eud">Failed to change into install directory.</a>
- <a class="helplink" href="#ERRORMES.HLP__eue">Failed to compute update manifests</a>
- <a class="helplink" href="#ERRORMES.HLP__euf">Failed to create (filename). Check permissions.</a>
- <a class="helplink" href="#ERRORMES.HLP__eug">Failed to create directories (path too long)</a>
- <a class="helplink" href="#ERRORMES.HLP__euh">Failed to create TCP client socket.</a>
- <a class="helplink" href="#ERRORMES.HLP__eui">Failed to identify applicable update version.</a>
- <a class="helplink" href="#ERRORMES.HLP__euj">Failed to initialize network layer.</a>
- <a class="helplink" href="#ERRORMES.HLP__euk">Failed to remove (filename). Check permissions.</a>
- <a class="helplink" href="#ERRORMES.HLP__eul">Failed to roll back manifest. Check permissions.</a>
- <a class="helplink" href="#ERRORMES.HLP__eum">Failed to prune directories (path too long)</a>
- <a class="helplink" href="#ERRORMES.HLP__eun">Transferred more than expected uncompressed size.</a>
- <a class="helplink" href="#ERRORMES.HLP__euo">Unknown stat() error occurred</a>
- <span class="f9 ">MZX General Errors</span>
- <a class="helpanchor" name="ERRORMES.HLP__era"><span class="fA ">Cannot decrypt write-protected world; check permissions</span></a>
- This can be caused by file errors or a hard disk space
- shortage. It can also result from an attempt to overwrite a
- read-only file.
- <a class="helpanchor" name="ERRORMES.HLP__erb"><span class="fA ">Cannot overwrite the player- move it first</span></a>
- The user attempted to place an object over the player. The
- player must be moved from its current location if something
- else is desired at that location.
- <a class="helpanchor" name="ERRORMES.HLP__erc"><span class="fA ">Current renderer lacks advanced graphical features; features</span></a>
- <span class="fA ">disabled</span>
- Certain graphics renderers (at present, the overlay2 renderer)
- are unable to utilize some newer features. Try running MegaZeux
- under a different renderer.
- <a class="helpanchor" name="ERRORMES.HLP__erd"><span class="fA ">Directory rename failed.</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__erh"><span class="fA ">File rename failed.</span></a>
- The user attempted to rename a directory or file, respectively,
- but failed. This could be due to trying to change a read-only
- file, trying to change a locked file, or due to some other
- error.
- <a class="helpanchor" name="ERRORMES.HLP__ere"><span class="fA ">Error saving; file/directory may be write protected</span></a>
- This can be caused by file errors or a hard disk space
- shortage. It can also result from an attempt to overwrite a
- read-only file or write to a directory without write
- permissions.
- <a class="helpanchor" name="ERRORMES.HLP__erf"><span class="fA ">Error swapping to next world</span></a>
- A Robotic command, SWAP to WORLD, was issued, but the stated
- world could not be found or otherwise could not be swapped to,
- due to version conflicts, file errors, etc.
- <a class="helpanchor" name="ERRORMES.HLP__erg"><span class="fA ">(Filename) already exists.</span></a>
- The user attempted to create a new file, but a file with that
- name already exists.
- <a class="helpanchor" name="ERRORMES.HLP__eri"><span class="fA ">Overlay mode is not on (see Board Info)</span></a>
- You cannot edit or copy to the Overlay if it is Off; go to
- Board Info and turn it to Normal, Static, or Transparent.
- <a class="helpanchor" name="ERRORMES.HLP__erj"><span class="fA ">Save would overwrite older world. Aborted.</span></a>
- A save was attempted in the debytecode version of MegaZeux that
- would overwrite a non-debytecode world file. Due to the present
- instability of debytecode, this is forcibly prevented.
- <a class="helpanchor" name="ERRORMES.HLP__erk"><span class="fA ">Windowing code bug</span></a>
- This is an internal error. Try to isolate the reason for the
- problem and notify the maintainer(s), as this error signifies a
- severe bug in MegaZeux.
- <a class="helpanchor" name="ERRORMES.HLP__erl"><span class="fA ">You can only play this game via a swap from another game</span></a>
- This error occurs when the user tries to play a game that has
- the option set to disallow normal gameplay. The world can only
- be played as a swap from another game. For example, this may be
- the second half of another game, or a separate world for
- showing the introduction.
- <span class="f9 ">MZX Validation Errors</span>
- <a class="helpanchor" name="ERRORMES.HLP__evc"><span class="fA ">Board @ (hex location): found (#) robots; expected (#)</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__evd"><span class="fA ">Board @ (hex location): found (#) scrolls/signs; expected (#)</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__eve"><span class="fA ">Board @ (hex location): found (#) sensors; expected (#)</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__eva"><span class="fA ">Any extra robots/scrolls/signs were replaced</span></a>
- MegaZeux found more instances of the given object than the
- world file indicated it had. All instances past the expected
- amount are tossed out.
- <a class="helpanchor" name="ERRORMES.HLP__evb"><span class="fA ">Board @ (hex location) could not be found</span></a>
- The MegaZeux world is indicating that there should be a board
- at the given location, but it is not actually in the world
- file.
- <a class="helpanchor" name="ERRORMES.HLP__evf"><span class="fA ">Board @ (hex location) is irrecoverably truncated or corrupt</span></a>
- The board at the given location is corrupt beyond repair and
- will be replaced with a blank board.
- <a class="helpanchor" name="ERRORMES.HLP__evg"><span class="fA ">Board @ (hex location) is truncated, but could be partially</span></a>
- <span class="fA ">recovered</span>
- Only part of the board was found, but what board info remained
- is placed at that location.
- <a class="helpanchor" name="ERRORMES.HLP__evh"><span class="fA ">Board file is from a future version (version)</span></a>
- Load of a board file from a more recent version of MegaZeux was
- attempted. You must use the version of MegaZeux listed or higher
- in order to import this board file.
- <a class="helpanchor" name="ERRORMES.HLP__evi"><span class="fA ">Bytecode file failed validation check</span></a>
- An attempt to load a bytecode file has failed validation checks
- and will not be loaded.
- <a class="helpanchor" name="ERRORMES.HLP__evj"><span class="fA ">Cannot load password protected world</span></a>
- Since MegaZeux 2.80, worlds that are password protected have to
- be stripped of the password to run. This error is seen when the
- user refuses to decrypt the password-protected file.
- <a class="helpanchor" name="ERRORMES.HLP__evk"><span class="fA ">File doesn't exist</span></a>
- An import of a file was attempted, but the file does not exist.
- <a class="helpanchor" name="ERRORMES.HLP__evl"><span class="fA ">File is not a board file or is corrupt</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__evm"><span class="fA ">File is not an MZM or is corrupt</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__evn"><span class="fA ">File is not a valid .SAV file or is corrupt</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__evo"><span class="fA ">File is not a valid world file or is corrupt</span></a>
- An import of the given type was halted due to being unrecognized
- as a valid file, or due to corruption.
- <a class="helpanchor" name="ERRORMES.HLP__evp"><span class="fA ">MZM contains runtime robots; dummying out</span></a>
- Load of an MZM containing Robots and saved during a running
- game was attempted. The Robots will be replaced with
- CustomBlock facsimiles, as if the file were loaded as a
- layer-type MZM.
- <a class="helpanchor" name="ERRORMES.HLP__evq"><span class="fA ">MZM doesn't exist</span></a>
- Loading an MZM file was attempted, but the given file does not
- exist.
- <a class="helpanchor" name="ERRORMES.HLP__evr"><span class="fA ">MZM from more recent version (version); dummying out robots</span></a>
- Load of an MZM file with Robots from a more recent version of
- MZX was attempted. The Robots will be replaced with CustomBlock
- facsimiles, as if the file were loaded as a layer-type MZM.
- <a class="helpanchor" name="ERRORMES.HLP__evs"><span class="fA ">MZM is missing robots or contains corrupt robot</span></a>
- The loaded MZM file indicates that a Robot should be at a
- certain location of the MZM, but found either no code or
- corrupt code.
- <a class="helpanchor" name="ERRORMES.HLP__evt"><span class="fA ">Post validation IO error occurred</span></a>
- The given file passed validation, but some other problem is
- preventing it from loading.
- <a class="helpanchor" name="ERRORMES.HLP__evu"><span class="fA ">Robot @ (hex location) could not be found</span></a>
- The board file indicates a Robot should be present at the given
- location, but no Robot exists there.
- <a class="helpanchor" name="ERRORMES.HLP__evv"><span class="fA ">Robot @ (hex location) is truncated or corrupt</span></a>
- The Robot at the given location is unrecoverable, and will be
- replaced with an empty Robot at that location.
- <a class="helpanchor" name="ERRORMES.HLP__evw"><span class="fA ">.SAV files from newer versions of MZX (version) are not</span></a>
- <span class="fA ">supported</span>
- <a class="helpanchor" name="ERRORMES.HLP__evx"><span class="fA ">.SAV files from older versions of MZX (version) are not</span></a>
- <span class="fA ">supported</span>
- The .SAV file the user attempted to load is a different format
- than the current version's .SAV and cannot be loaded.
- <a class="helpanchor" name="ERRORMES.HLP__evy"><span class="fA ">Scroll @ (hex location) is truncated or corrupt</span></a>
- The Scroll at the given location is unrecoverable, and will be
- replaced with an empty Scroll at that location.
- <a class="helpanchor" name="ERRORMES.HLP__evz"><span class="fA ">Sensor @ (hex location) is truncated or corrupt</span></a>
- The Sensor at the given location is unrecoverable, and will be
- replaced with a Sensor with default attributes at that location.
- <a class="helpanchor" name="ERRORMES.HLP__ev1"><span class="fA ">This world may be password protected. Decrypt it?</span></a>
- Worlds saved with password protection (some worlds made before
- MZX2.51s3.2) cannot natively run in MegaZeux. This prompt asks
- the user if they want to convert the world to a readable format.
- If Yes is chosen, the world is permanently decrypted and
- converted to a world file (with a world version unique to
- decrypted worlds). If No is chosen, the world is left alone and
- MZX keeps any currently-running world as its active world.
- <a class="helpanchor" name="ERRORMES.HLP__ev2"><span class="fA ">Unknown error reading from file</span></a>
- A file read was attempted, but MZX failed for some undetermined
- reason.
- <a class="helpanchor" name="ERRORMES.HLP__ev3"><span class="fA ">Unknown error writing to file</span></a>
- MZX attempted to write to a file, but failed for some
- undertermined reason.
- <a class="helpanchor" name="ERRORMES.HLP__ev4"><span class="fA ">World is from a more recent version (version)</span></a>
- The .MZX file you tried to load or import is from a more
- current version of MegaZeux. You must upgrade MegaZeux to the
- given version or higher to play this worldfile.
- <a class="helpanchor" name="ERRORMES.HLP__ev5"><span class="fA ">World is from old version (version); use converter</span></a>
- The user tried to load a .MZX file from version 1.00g, 1.01,
- 1.02, or 1.03 of MegaZeux. In order to use these worlds, they
- must first be converted to 2.51 format using the included
- VER1TO2 program. Run VER1TO2 without any command line arguments
- for further instructions.
- <span class="f9 ">MegaZeux Validation Errors (ZIP World Format):</span>
- <a class="helpanchor" name="ERRORMES.HLP__eza"><span class="fA ">Board # (number) is corrupt</span></a>
- The board with the given number is corrupt beyond repair.
- <a class="helpanchor" name="ERRORMES.HLP__ezb"><span class="fA ">Board # (number) is missing data:</span></a>
- The given board lacks data that its structure indicates it
- should have.
- <a class="helpanchor" name="ERRORMES.HLP__ezc"><span class="fA ">Robot # (number) contains duplicates on board # (number)</span></a>
- A Robot is found in multiple places in the given board's data.
- <a class="helpanchor" name="ERRORMES.HLP__ezd"><span class="fA ">Robot # (number) does not exist on board # (number)</span></a>
- A Robot should exist on the given board, according to the board
- data, but does not.
- <a class="helpanchor" name="ERRORMES.HLP__eze"><span class="fA ">Robot # (number) exists on board # (number), but was not found</span></a>
- A Robot exists on the given board, but the board data for that
- Robot is absent.
- <a class="helpanchor" name="ERRORMES.HLP__ezf"><span class="fA ">Robot # (number) on board # (number) is corrupt</span></a>
- The Robot on the board with the given number is corrupt beyond
- repair.
- <a class="helpanchor" name="ERRORMES.HLP__ezg"><span class="fA ">Scroll # (number) on board # (number) is corrupt</span></a>
- The Scroll on the board with the given number is corrupt beyond
- repair.
- <a class="helpanchor" name="ERRORMES.HLP__ezh"><span class="fA ">Sensor # (number) on board # (number) is corrupt</span></a>
- The Sensor on the board with the given number is corrupt beyond
- repair.
- <span class="f9 ">MZX Updater Errors</span>
- <a class="helpanchor" name="ERRORMES.HLP__eua"><span class="fA ">Attempt to invoke self failed!</span></a>
- This error occurs when MZX fails to reload itself after an
- update. This signifies a major bug in MegaZeux; please contact
- the maintainer(s).
- <a class="helpanchor" name="ERRORMES.HLP__eub"><span class="fA ">Failed to back up manifest. Check permissions.</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__euf"><span class="fA ">Failed to create (filename). Check permissions.</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__euk"><span class="fA ">Failed to remove (filename). Check permissions.</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__eul"><span class="fA ">Failed to roll back manifest. Check permissions.</span></a>
- MZX tried to write/delete a file from the working directory,
- but could not, likely due to the user's MZX working directory
- disallowing write access.
- <a class="helpanchor" name="ERRORMES.HLP__euc"><span class="fA ">Failed to change back to user directory.</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__eud"><span class="fA ">Failed to change into install directory.</span></a>
- These errors occur when MZX fails to change active directories
- during the updating process.
- <a class="helpanchor" name="ERRORMES.HLP__eue"><span class="fA ">Failed to compute update manifests</span></a>
- This error occurs when the hash check in a manifest file fails.
- This error can also appear if the download of the manifest file
- times out.
- <a class="helpanchor" name="ERRORMES.HLP__eug"><span class="fA ">Failed to create directories (path too long)</span></a>
- <a class="helpanchor" name="ERRORMES.HLP__eum"><span class="fA ">Failed to prune directories (path too long)</span></a>
- This error occurs when the pathnames of the subdirectories
- included in or deleted by the selected update are too long.
- <a class="helpanchor" name="ERRORMES.HLP__euh"><span class="fA ">Failed to create TCP client socket.</span></a>
- MZX failed to create a socket. This may be because the last one
- created is still in use. This can signify a major bug in
- MegaZeux; please contact the maintainer(s).
- <a class="helpanchor" name="ERRORMES.HLP__eui"><span class="fA ">Failed to identify applicable update version.</span></a>
- MZX could not find an update in the branch the user selected.
- Please check the update_branch_pin and update_host options in
- config.txt and make sure they are correct.
- <a class="helpanchor" name="ERRORMES.HLP__euj"><span class="fA ">Failed to initialize network layer.</span></a>
- MZX's networking code is unable to load. This signifies a major
- bug in MegaZeux; please contact the maintainer(s).
- <a class="helpanchor" name="ERRORMES.HLP__eun"><span class="fA ">Transferred more than expected uncompressed size.</span></a>
- The updater has sent the user more data than needed. The update
- may be corrupt.
- <a class="helpanchor" name="ERRORMES.HLP__euo"><span class="fA ">Unknown stat() error occurred</span></a>
- A fatal error outside of the ones mentioned occurred. Please
- contact the developer(s) if you see this error.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="SENSORSW.HLP">
- <a class="helpanchor" name="SENSORSW.HLP__094"> </a>
- <p class="helpcentered"><span class="f9 ">Sensors - What They Are and How to Use Them</span></p>
- Sensors have two real purposes. The first is to act as save
- points. The second is to interact with Robots as a hybrid of
- floor and object. The first use is simple - just set the board
- to "Save only on Sensors", and then the player can only save
- when standing on a sensor.
- The second use is more complex, and requires knowledge of
- Robotic. Sensors are like controllable CustomFloors (albeit
- CustomFloors that can be pushed by non-player objects). When
- creating one, give it a name and a character, then enter the
- name of a Robot with which it will interact. This use of sensors
- is easily replicable through Robotic now, so this use of sensors
- is deprecated. However, if one wants to use sensors, this
- information will easily help.
- Sensors interact with Robots using labels (messages) and SEND
- commands, just like Robots interact with each other. Any Robot
- can SEND a message to a sensor, but the sensor will only SEND
- messages to the Robot stated in its settings. If you entered a
- Robot of ALL, then it will SEND messages to all Robots. Unlike
- Robots, sensors cannot send to a dynamic name; for instance, it
- cannot be set to send to "&fest&ive" (whereas a Robot would
- properly send to "1ive" when "fest" is 1 and to "5ive" when
- "fest" is 5).
- <p class="helpcentered">Messages TO Sensors</p>
- The following messages can be sent to a sensor. A sensor can
- receive messages even when it is beneath the player.
- <span class="fE ">DIE</span>
- This will cause the sensor to disappear forever.
- <span class="fE ">CHAR'X'</span>
- This will cause the sensor to change its character to X.
- <span class="fE ">CHAR###</span>
- This will cause the sensor to change its character to that
- represented by the number ###, from 0 to 255.
- <span class="fE ">COLORxx</span>
- This will cause the sensor to change its color to the color
- represented by the code xx, a hexadecimal number from 00 to
- FF. The color coding is the same as used for Robotic commands,
- except without the "c" character. ?s are not allowed.
- <span class="fE ">N</span>
- <span class="fE ">S</span>
- <span class="fE ">E</span>
- <span class="fE ">W</span>
- This will cause the sensor to move north, south, east, or west,
- respectively. If the player is on top of the sensor, the player
- will move along with it. If the sensor tries to move towards
- the player, it will instead move beneath. If something pushable
- is in the direction of movement, the sensor will push it while
- moving if there is room.
- <p class="helpcentered">Messages FROM Sensors</p>
- Sensors will send Robots the following messages.
- <span class="fE ">SENSORON</span>
- This is sent when the player steps onto the sensor, when the
- sensor is told to move and it ends up beneath the player, or
- when something pushes the player onto the sensor.
- <span class="fE ">SENSORTHUD</span>
- This is sent when the sensor is told to move, but it is blocked.
- <span class="fE ">SENSORPUSHED</span>
- This is sent when something pushes the sensor.
- <p class="helpcentered">Notes on Sensors</p>
- Only the player can step onto a sensor; other things will push
- it. The sensor, when moving, will move UNDER the player if in
- the way, or will take the player with it if the player is on
- the sensor. Laying a bomb while on a sensor will destroy the
- sensor.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="ROBOTICR.HLP">
- <a class="helpanchor" name="ROBOTICR.HLP__087"> </a>
- <p class="helpcentered"><span class="f9 ">Robotic Reference Manual</span></p>
- Use the following help links to see your desired topic(s).
- <a class="helplink" href="#COMMANDS.HLP__1st">Command Syntax</a>
- <a class="helplink" href="#COMMANDR.HLP__1st">Command Reference</a>
- <a class="helplink" href="#USINGTHE.HLP__1st">Using the Editor</a>
- <a class="helplink" href="#THEGLOBL.HLP__gbl">The Global</a>
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors</a>
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helplink" href="#BUILTINL.HLP__1st">Built-in Labels</a>
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helplink" href="#COMMAND2.HLP__pre">Prefixes</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helplink" href="#COMMANDS.HLP__con">Conditions</a>
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helplink" href="#SMZXMODE.HLP__095">Super MZX Modes</a>
- <a class="helplink" href="#SUBROUTE.HLP__sub">Subroutines</a>
- <a class="helplink" href="#EXPRESS.HLP__exp">Expressions</a>
- <a class="helplink" href="#FILEACSS.HLP__fil">File Access</a>
- <a class="helplink" href="#SPRITES.HLP__spr">Sprites</a>
- <a class="helplink" href="#VLAYER.HLP__vla">The Vlayer</a>
- <a class="helplink" href="#MZM.HLP__mzm">Using MZMs</a>
- <a class="helplink" href="#TRIG.HLP__tri">Trigonometric Functions</a>
- <a class="helplink" href="#PROCESS.HLP__prc">Cycles and Board Scans - How MZX Processes Robots</a>
- <a class="helplink" href="#PARTIAL.HLP__par">Partial Character Sets</a>
- <a class="helplink" href="#BULLETTY.HLP__1st">Bullet Types</a>
- <a class="helplink" href="#CHANGECH.HLP__1st">CHANGE CHAR ID - The CHAR ID Table</a>
- <a class="helplink" href="#ROBOTSWH.HLP__1st">Robots - What They Are and How to Use Them</a>
- <a class="helplink" href="#ROBOTICT.HLP__1st">Robotic Tutorial</a>
- <a class="helplink" href="#BADPRACT.HLP__bad">Robotic Usages That Should be Avoided</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="COMMANDS.HLP">
- <a class="helpanchor" name="COMMANDS.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Command Syntax</span></p>
- Commands in Robotic must conform to a certain syntax:
- COMMAND [param] [param] ...
- COMMAND is the words or symbol that specifies exactly which
- command you are using. Params are the values used to supplement
- the command's function.
- <span class="fE ">"string" or "counter" or "label" or "Robot" or "file"</span>
- Strings are a series of characters surrounded by quotes.
- Counters are strings representing the name of a counter. Labels
- are strings representing the name of a label, a point within a
- Robot. Robots are strings representing the name of a Robot.
- Files are strings representing a file or folder on disk, always
- including the extension in the case of files. (Some string
- examples: "Hi", "Gems", "Label5", "*1230 +725", "robott.txt",
- etc.)
- The quotes can be left off if the string contains no spaces and
- if the string is not the same as any word found in any command
- or parameter, i.e. is a word that the editor could not mistake
- for a part of a command. MegaZeux will add the quotes for you if
- the string meets these criteria. For example, "fifty" and "HONK"
- will be auto-completed by MZX, but "Ammo", "N", "Goto", and "You
- died" have to have the quotes typed in manually.
- <span class="fE ">#</span>
- Numbers are allowed to be integers within the range of
- -2147483648 to 2147484647. Numbers can be replaced with a string
- representing the name of a counter at any time. Examples of
- legal numbers: 3200, -79k, .$FA9, "Ammo". They can also be
- represented in hexadecimal, using $xxxx format. In this case,
- xxxx can be any number from 0 to FFFF.
- Numbers can not directly be allowed to go past the 16-bit
- limits (-32768 to 32767) in Robotic commands, but this can be
- easily circumvented by using constant expressions. Constant
- expressions also allow larger hexadecimal numbers and octal
- numbers; please view the expressions section for more detail.
- Certain commands will limit numbers to the range of 0 to 255.
- <a class="helplink" href="#EXPRESS.HLP__exp">Expressions</a>
- <a class="helpanchor" name="COMMANDS.HLP__col"><span class="fE ">[color]</span></a>
- The format for colors is cXX, where X is 0-9, A-F, or ?. The
- first X represents the background color; the second X represents
- the foreground color. The numbers and symbols represent the
- following colors, by default:
- 0 Black <span class="f0 ">(color #0)</span>
- 1 Blue <span class="f1 ">(color #1)</span>
- 2 Green <span class="f2 ">(color #2)</span>
- 3 Cyan <span class="f3 ">(color #3)</span>
- 4 Red <span class="f4 ">(color #4)</span>
- 5 Purple <span class="f5 ">(color #5)</span>
- 6 Brown <span class="f6 ">(color #6)</span>
- 7 Lt. Gray <span class="f7 ">(color #7)</span>
- 8 Dk. Gray <span class="f8 bF ">(color #8)</span>
- 9 Lt. Blue <span class="f9 ">(color #9)</span>
- 10 Lt. Green <span class="fA ">(color #10)</span>
- 11 Lt. Cyan <span class="fB ">(color #11)</span>
- 12 Lt. Red <span class="fC ">(color #12)</span>
- 13 Lt. Purple <span class="fD ">(color #13)</span>
- 14 Yellow <span class="fE ">(color #14)</span>
- 15 White <span class="fF ">(color #15)</span>
- ? Any color/No change in color
- The UI uses its own set of protected colors, to prevent general
- color edits from harming usability.
- The use of ? is not always a logical option for some commands.
- When used, it signifies to replace it with the current color or
- ignore that part of the color for that command (or if used in
- IF statements, signifies to accept any value in that field).
- Colors may be selected from a menu within the Robot editor
- using F2. Colors can also be replaced with the name of a
- counter at any time. In this case, the value of the counter is
- BK*16+FG, where BK and FG are 0-15. To use ?, use the following
- values:
- 256+FG = c?X
- 272+BK = cX?
- 288 = c??
- A color of c?? will be inserted into commands when you do not
- put down anything for the color. Examples of legal colors: cF9,
- c02, c?5, c??, "Color".
- While detecting colors of ?? is generally an accepted practice,
- it's extremely discouraged to put colors of ?? or change to
- them, with the exception of Sprites.
- <a class="helplink" href="#BADPRACT.HLP__bad">Robotic Usages That Should be Avoided</a>
- <span class="fE ">[char]</span>
- Characters are a single character surrounded by apostrophes,
- e.g. 'X'. X can be any character except #0. A character can be
- selected from a menu in the Robot editor using F3. Numbers and
- counters can be used to represent characters as well, with
- values from 0 to 255 (other values will wrap around to be
- 0-255). Examples of legal characters - 'a', '', 20, "Count".
- Characters can also represent numbers, so typing in commands
- like INC "health" '5' will most likely yield _much_ different
- results than what was likely intended. However, for some usages
- this use of chars is vastly superior to any other method (such
- as when reading from the overlay onto strings).
- Certain characters must be inputted in specific ways to avoid
- problems with Robotic:
- \0 for character 0
- \t for tab (character 9)
- \n for newline (character 10)
- \r for carriage return (character 13)
- \" for quotation mark
- \\ for slash
-
- MZX handles these conversions for you when using F3.
- <a class="helpanchor" name="COMMANDS.HLP__dir"><span class="fE ">[dir]</span></a>
- Directions are used to denote a direction on the board. A
- direction is one of the following:
- NORTH (or N or UP)
- SOUTH (or S or DOWN)
- EAST (or E or RIGHT)
- WEST (or W or LEFT)
- IDLE
- NODIR
- ANYDIR
- RANDNS
- RANDEW
- RANDNE
- RANDNB
- RANDB
- SEEK
- FLOW
- RANDANY
- UNDER (or BENEATH)
- The four cardinal directions (N, S, E, W) are self-explanatory.
- Below are descriptions of the other directions.
- <span class="fB ">IDLE</span>
- No direction, as in the absence of any direction. Used with:
- <a class="helpanchor" name="COMMANDS.HLP___w5"><span class="fA ">WALK [dir]</span></a>
- <a class="helplink" href="#COMMANDS.HLP__con">Conditions</a>
- <span class="fB ">NODIR</span>
- No directions satisfy the condition. Used with:
- <a class="helplink" href="#COMMANDS.HLP__con">Conditions</a>
- <span class="fB ">ANYDIR</span>
- Any direction satisfies the condition. Used with:
- <a class="helplink" href="#COMMANDS.HLP__con">Conditions</a>
- <span class="fB ">RANDNS</span>
- Randomly either NORTH or SOUTH.
- <span class="fB ">RANDEW</span>
- Randomly either EAST or WEST.
- <span class="fB ">RANDNE</span>
- Randomly either NORTH or EAST.
- <span class="fB ">RANDNB</span>
- Randomly any direction where the Robot is not blocked by
- something.
- <span class="fB ">RANDB</span>
- Randomly any direction where the Robot is blocked.
- <span class="fB ">SEEK</span>
- The direction closest to the player. If the player is on a
- diagonal and is equally far away from the Robot vertically and
- horizontally, the direction will randomly be one of the two
- directions comprising the diagonal.
- <span class="fB ">FLOW</span>
- The direction that the Robot is currently walking.
- <span class="fB ">RANDANY</span>
- Randomly one of NORTH, SOUTH, EAST, or WEST.
- <span class="fB ">UNDER</span>
- The direction signifying whatever is BENEATH something, such
- as floors. Often used with:
- <a class="helpanchor" name="COMMANDS.HLP___l1"><span class="fA ">LAYBOMB [dir]</span></a>
- <a class="helpanchor" name="COMMANDS.HLP___l2"><span class="fA ">LAYBOMB HIGH [dir]</span></a>
- <a class="helplink" href="#COMMANDS.HLP__con">Conditions</a>
- Most directions can be used with the following modifying
- prefixes:
- <span class="fB ">OPP</span>
- The opposite direction. NORTH becomes SOUTH, etc.
- <span class="fB ">CW</span>
- The direction clockwise of the named direction. NORTH becomes
- EAST, etc.
- <span class="fB ">RANDP</span>
- Randomly a direction perpendicular to the named direction.
- NORTH becomes EAST or WEST, etc.
- <span class="fB ">RANDNOT</span>
- Randomly any direction OTHER than the given direction.
- <span class="fE ">[thing]</span>
- The name of any object from the editor, other than the player.
- Use the name from the object list, minus any punctuation or
- spaces. In addition to the things on the lists, you can use
- Lazer for any lazer walls shot by lazer guns or Robots, and
- OpenGate for a gate that has been opened. Examples of legal
- things: Gem, CustomFloor, LitBomb, Robot.
- <span class="fE ">[param]</span>
- A code representing the settings for a thing. (see above) The
- format is p# or p??. # is a hexadecimal code from 0 to FF. ??
- represents settings that you don't care about or shouldn't
- change. To enter parameter codes easily, use F4 in the Robot
- editor after you have typed in an object name. p?? will be
- inserted automatically any time you have a thing without a
- parameter. Counters can also be used as parameters, as can
- decimal numbers; to insert decimal numbers, place the number
- in the proper location, but without the "p" before it.
- p?? in an IF command will allow that command to accept all
- params.
- <span class="fE ">[item]</span>
- One of the following: TIME, SCORE, GEMS, AMMOS, LIVES, LOBOMBS,
- HIBOMBS, COINS, HEALTHS. Note the plural format; this
- distinguishes items from things.
- <span class="fE ">!<>=</span>
- A conditional for comparing two numbers, counters or strings:
- = or == Equal to
- < Less than
- > Greater than
- <= or =< Less than or equal to
- >= or => Greater than or equal to
- != or <> or >< Not equal to
- <a class="helpanchor" name="COMMANDS.HLP__con"><span class="fE ">[condition]</span></a>
- A word, sometimes followed by a direction, signifying a certain
- condition. Use in IF [condition] and IF NOT [condition] commands
- to test whether a condition is currently present.
- <span class="fB ">WALKING [dir]</span>
- Tests whether the Robot is currently walking in a given
- direction. IDLE, NODIR, and ANYDIR are allowed here.
- <span class="fB ">SWIMMING</span>
- Tests whether the Robot is currently in water.
- <span class="fB ">FIREWALKING</span>
- Tests whether the Robot is currently in either lava or fire.
- <span class="fB ">TOUCHING [dir]</span>
- Tests whether the player is next to the Robot in the given
- direction. NODIR and ANYDIR are allowed here.
- <span class="fB ">BLOCKED [dir]</span>
- Tests whether the Robot is blocked by something in the given
- direction. NODIR and ANYDIR are allowed here. This condition
- has a special mode: if the IF command has a REL PLAYER prefix
- before it, it will instead check next to the PLAYER for being
- blocked. If the IF command has a REL COUNTERS prefix before
- it, it will instead check next to the position pointed to by
- the counters XPOS and YPOS.
- <a class="helplink" href="#COMMAND2.HLP__pre">REL COUNTERS</a>
- <a class="helplink" href="#COMMAND2.HLP___r2">REL PLAYER</a>
- <span class="fB ">ALIGNED</span>
- Tests whether the player is aligned with the Robot either
- horizontally or vertically.
- <span class="fB ">ALIGNEDNS</span>
- <span class="fB ">ALIGNEDEW</span>
- Tests whether the player is aligned with the Robot, but only
- tests on the horizontal (EW) or vertical (NS) axis, not both
- at once.
- <span class="fB ">LASTSHOT [dir]</span>
- Tests whether the last direction the Robot was shot in was
- the given direction. For example, if the Robot had just been
- shot on the north side, then LASTSHOT NORTH would be true.
- <span class="fB ">LASTTOUCH [dir]</span>
- Similar to the above; tests whether the last direction the
- Robot was touched by the player is the given direction.
- <span class="fB ">RIGHTPRESSED</span>
- <span class="fB ">LEFTPRESSED</span>
- <span class="fB ">UPPRESSED</span>
- <span class="fB ">DOWNPRESSED</span>
- <span class="fB ">SPACEPRESSED</span>
- <span class="fB ">DELPRESSED</span>
- Tests whether the indicated key is currently being held down.
- <span class="fB ">MUSICON</span>
- Tests whether digitized music and sound effects are currently
- on.
- <span class="fB ">PCSFXON</span>
- Tests whether PC speaker sound effects are currently on.
- <span class="fE ">Miscellaneous</span>
- When typing in a command, the following symbols and words, as
- well as spaces, can be used freely. They have no effect on the
- final command and are only used to clarify its meaning.
- , (comma)
- ; (semicolon)
- A
- AN
- AND
- AS
- AT
- BY
- ELSE
- FOR
- FROM
- INTO
- IS
- OF
- THE
- THEN
- THERE
- THROUGH
- THRU
- TO
- WITH
- These will disappear from the line if "disassemble_extras" is
- set to 0 in the config file. See the config file for further
- details.
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <hr /></div>
- <div class="helpfile" id="STRINGS.HLP">
- <a class="helpanchor" name="STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <p class="helpcentered">Simple Strings</p>
- Generally, a string is a series of symbols within quotes, such
- as: "BUG", "Hi there!", and even "EA9 _" or "". There are
- two special aspects or features of strings that may be useful:
- color coding, and counter interpolation.
- <p class="helpcentered">Color</p>
- Used in Robotic commands *, %, ?, and &, strings can contain
- color codes. There are two color symbols: ~ for changing
- foreground, and @ for changing background. These should be
- followed by one of these characters:
- 0 Black (color 0) 8 Dk. Gray (color 8)
- 1 Blue (color 1) 9 Lt. Blue (color 9)
- 2 Green (color 2) A Lt. Green (color 10)
- 3 Cyan (color 3) B Lt. Cyan (color 11)
- 4 Red (color 4) C Lt. Red (color 12)
- 5 Purple (color 5) D Lt. Purple (color 13)
- 6 Brown (color 6) E Yellow (color 14)
- 7 Lt. Gray (color 7) F White (color 15)
-
- To show a ~, use ~~. To show a @, use @@.
- <p class="helpcentered">Counters</p>
- Strings can show the values of counters, using the counter name
- surrounded with &s. For example, if the player has 55 gems,
- "You have &GEMS& gems." will become "You have 55 gems." If you
- use &INPUT&, then the last inputted string will be shown. Use &&
- to show a true '&'. The above features are available in nearly
- ALL Robotic commands that use strings, including in the name of
- OTHER counters. (The sole exception is in label names.) This
- can be used to simulate array-like constructs.
- <p class="helpcentered">Robotic Usage of Strings</p>
- In Robotic, strings can be incredibly powerful. They can act
- like counters, but hold text information as well as numbers
- (however, counters are by far better-suited for number use).
- A Robotic string is any counter prefixed by a $ sign (e.g.
- "$string").
- Certain characters must be inputted in specific ways to avoid
- problems with Robotic:
- \0 for character 0 (this won't be parsed correctly in strings)
- \t for tab (character 9)
- \n for newline (character 10)
- \r for carriage return (character 13)
- \" for quotation mark
- \\ for slash
- <p class="helpcentered">Robotic Usage - Setting Strings</p>
- <span class="fB ">SET "$string" to "text"</span>
- Sets the given string to the given line of text.
- <span class="fB ">SET "$string" to "$string2"</span>
- Sets the given string to the contents of another string.
- <span class="fB ">SET "$string" to #</span>
- Sets the string to an integer value. Notice that DEC commands
- and other similar commands will not work arithmetically with
- strings but instead clip and append to the string.
- <p class="helpcentered">Robotic Usage - Outputting Strings</p>
- Anywhere you can output a counter, you can output a string.
- Simply encase the string name in ampersands. E.G.:
- <span class="fE ">SET "$woohoo" to "My favorite song!"</span>
- <span class="fE ">* "&$woohoo&"</span>
- Would output "My favorite song!" in the message row.
- There are several special things you can set strings to for
- certain functions. These are listed in the Counters section.
- <a class="helplink" href="#COUNTERS.HLP__stc">String Counters</a>
- <p class="helpcentered">Robotic Usage - Comparing Strings</p>
- String comparisons are case-insensitive unless stated otherwise.
- Allowed comparisons are to a line of text, to another string and
- to a number. However, the string is required to be the first
- item, and string counters such as "MOD_NAME", "BOARD_SCAN", etc.
- are not valid comparisons.
- Strings can be compared through these commands:
- <span class="fB ">IF "$string" = "value" then "label" (equality)</span>
- <span class="fB ">IF "$string" != "value" then "label" (inequality)</span>
- <span class="fB ">IF "$string" > "value" "label" (greater than)</span>
- <span class="fB ">IF "$string" < "value" "label" (less than)</span>
- <span class="fB ">IF "$string" >= "value" "label" (greater than or equal to)</span>
- <span class="fB ">IF "$string" <= "value" "label" (less than or equal to)</span>
- <span class="fB ">IF "$string" === "value" then "label" (case-sensitive equality)</span>
- Strings can also be compared using wildcards. There are two
- special wildcard characters: the ? character in the value being
- compared against matches any one character, while the %
- character matches any number of any characters (including zero).
- The wildcard commands are:
- <span class="fB ">IF "$string" ?= "value" then "label"</span>
- <span class="fB ">IF "$string" ?== "value" then "label" (case-sensitive)</span>
- Due to their use as a token, actual ? and % characters must be
- escaped to be checked for in wildcard comparisons. Use \\? and
- \\% to have values that check for literal use of these
- characters.
- <p class="helpcentered">Robotic Usage - Manipulating Strings</p>
- Firstly, strings can be offset and limited ("spliced").
- <span class="fB ">$strname#X</span><span class="fF "> will cap the string to X characters in length.</span>
- <span class="fB ">$strname+X</span><span class="fF "> will offset the start of the string by X</span>
- characters. Using a negative number will offset the start of
- the string backwards from the end of the string by X characters,
- with -1 as the end character.
- <span class="fB ">$strname+X#Y</span><span class="fF "> will offset the string by X characters and limit</span>
- the string to Y characters in length.
- Normally string splicing is used to read a given selection of a
- string; however, it can also be used for writing to parts of
- strings. When you set an offset when setting a string, the
- length of the string will not decrease, so you'll only
- manipulate a portion of the string. For instance:
- <span class="fB ">set "$str" "hello"</span>
- <span class="fB ">set "$str+1" "LOL"</span>
- Will cause $str to have the value "hLOLo".
- Writing to parts of strings with an offset also changes how the
- string limit works; any length cap will limit how much of the
- spliced-in material is inserted instead of limiting the string
- length in total. For instance:
- <span class="fB "> set "$str" "Baby steps."</span>
- <span class="fB "> set "$str+0#4" "Long journey."</span>
- Will cause $str to have the value "Long steps."
- <span class="fB ">$strname.X</span><span class="fF "> will manipulate the Xth character in a string</span>
- (starting from 0). When used for output, it will give the
- character value of the given character in a string. Any invalid
- numbers (past the terminator) are given a value of 0. This
- command works well with char immediates:
- E.G. SET "$string.0" 'S' . When setting the character in a
- string it will make the string length one larger than X, so be
- careful when using very large values.
- Using negative numbers will manipulate using the end of the
- string as its basis: -X will manipulate the Xth character from
- the end of the string, with -1 being the end character.
- <span class="fB ">$strname.X#Y</span><span class="fF "> will manipulate characters in the string from the</span>
- Xth character (starting from 0), up to character (X+Y-1). Y can
- be a number from 1 to 4; all other values for Y are clamped to
- fit this range. The string given or output acts as a number 8*Y
- bits in length.
- <span class="fB ">$str.length</span><span class="fF "> will give the length of the given string.</span>
- Secondly, strings can be clipped, appended or written to from
- the board or overlay.
- <span class="fB ">INC "$string" "$string2"</span>
- <span class="fB ">INC "$string" "text"</span>
- These two commands append another string's contents or text,
- respectively, to the end of a given string.
- <span class="fB ">DEC "$string" #</span>
- This command clips the given number of characters from the end
- of a string. # is treated as unsigned so using negative numbers
- will probably cause the length to go down to zero.
- <span class="fB ">COPY BLOCK x y w h "$string" t</span>
- <span class="fB ">COPY OVERLAY BLOCK x y w h "$string" t</span>
- These commands copy information from the board or overlay,
- respectively, to a given string. X and Y are the coordinates
- of the upper-left corner of the block; W and H are its width
- and height; T is the terminating character. For T, one can put
- in a counter with the param value of the desired terminator
- character or a char immediate in the form 'c' (not just the
- character itself). If "t" is 0 there will be no terminator.
- The letters are added from left to right and up to down until
- the terminator character is reached, or until the end of the
- given block is reached. If x and y begin with a pound sign (#),
- the string will instead be read from the vlayer.
- Please use this method of scanning strings instead of
- BOARD_SCAN.
- <p class="helpcentered">Robotic Usage - File Access</p>
- Finally, strings can be used for loading and saving several MZX
- file formats. The following formats can be loaded from a string:
- -Palettes with <span class="fB ">LOAD PALETTE "$string"</span>
- -Charsets with <span class="fB ">LOAD CHAR SET "$string"</span>
- -Robots with <span class="fB ">SET "$string" "LOAD_ROBOT"</span>
- -MZMs with <span class="fB ">PUT "@$string" image_file pNN x y</span>
- MZMs can be saved into a string via these methods:
- <span class="fB ">COPY BLOCK x y w h "@$string" p</span>
- <span class="fB ">COPY OVERLAY BLOCK x y w h "@$string" p</span>
- <span class="fB ">COPY (OVERLAY) BLOCK "#x" "#y" w h "@$string" m</span>
- String splicing is valid for string file operations.
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="COMMANDR.HLP">
- <a class="helpanchor" name="COMMANDR.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Command Reference</span></p>
- The following table is a list of all Robotic commands in
- MegaZeux. They are listed as help links, in alphabetical order.
- After the table are the actual command descriptions, in order
- of importance/difficulty. Note that because of its size, the
- command reference is split into two parts.
- <a class="helplink" href="#COMMANDR.HLP____1">% "string"</a>
- <a class="helplink" href="#COMMANDR.HLP____2">& "string"</a>
- <a class="helplink" href="#COMMANDR.HLP____3">* "string"</a>
- <a class="helplink" href="#COMMANDR.HLP____4">. "string"</a>
- <a class="helplink" href="#COMMANDR.HLP___4b">. "@string"</a>
- <a class="helplink" href="#COMMANDR.HLP____5">/ "string"</a>
- <a class="helplink" href="#COMMANDR.HLP____6">: "label"</a>
- <a class="helplink" href="#COMMANDR.HLP____7">? "counter" "label" "string"</a>
- <a class="helplink" href="#COMMANDR.HLP____8">? "label" "string"</a>
- <a class="helplink" href="#COMMANDR.HLP____9">[ "string"</a>
- <a class="helplink" href="#COMMAND2.HLP____0">| "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___a1">ABORT LOOP</a>
- <a class="helplink" href="#COMMAND2.HLP___a2">ASK "string"</a>
- <a class="helplink" href="#COMMAND2.HLP___a3">AVALANCHE</a>
- <a class="helplink" href="#COMMANDR.HLP___b1">BECOME [color] [thing] [param]</a>
- <a class="helplink" href="#COMMAND2.HLP___b2">BECOME NONLAVAWALKER</a>
- <a class="helplink" href="#COMMAND2.HLP___b3">BECOME NONPUSHABLE</a>
- <a class="helplink" href="#COMMAND2.HLP___b4">BECOME LAVAWALKER</a>
- <a class="helplink" href="#COMMAND2.HLP___b5">BECOME PUSHABLE</a>
- <a class="helplink" href="#COMMAND2.HLP___b6">BLIND #</a>
- <a class="helplink" href="#COMMAND2.HLP___b7">BOARD [dir] "string"</a>
- <a class="helplink" href="#COMMAND2.HLP___b8">BOARD [dir] NONE</a>
- <a class="helplink" href="#COMMAND2.HLP___b9">BULLETCOLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___b0">BULLETE [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___bA">BULLETN [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___bB">BULLETS [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___bC">BULLETW [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___c1">CENTER MESG</a>
- <a class="helplink" href="#COMMANDR.HLP___c2">CHANGE [color] [thing] [param] [color] [thing] [param]</a>
- <a class="helplink" href="#COMMAND2.HLP___c3">CHANGE CHAR ID # [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___c4">CHANGE OVERLAY [color] [char] [color] [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___c5">CHANGE OVERLAY [color] [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___c6">CHANGE SFX # "string"</a>
- <a class="helplink" href="#COMMAND2.HLP___c7">CHANGE THICK ARROW CHAR [dir] [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___c8">CHANGE THIN ARROW CHAR [dir] [char]</a>
- <a class="helplink" href="#COMMANDR.HLP___c9">CHAR [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___c0">CHAR EDIT [char] # # # # # # # # # # # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cA">CLEAR MESG</a>
- <a class="helplink" href="#COMMAND2.HLP___cB">CLIP INPUT</a>
- <a class="helplink" href="#COMMANDR.HLP___cC">COLOR [color]</a>
- <a class="helplink" href="#COMMANDR.HLP___cD">COLOR FADE OUT</a>
- <a class="helplink" href="#COMMANDR.HLP___cE">COLOR FADE IN</a>
- <a class="helplink" href="#COMMAND2.HLP___cF">COLOR INTENSITY # PERCENT</a>
- <a class="helplink" href="#COMMAND2.HLP___cG">COLOR INTENSITY # # PERCENT</a>
- <a class="helplink" href="#COMMAND2.HLP___cH">COPY # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cI">COPY [dir] [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___cJ">COPY BLOCK # # # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cK">COPY CHAR [char] [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___cL">COPY OVERLAY BLOCK # # # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cQ">COPY BLOCK # # # # "@filename" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cR">COPY OVERLAY BLOCK # # # # "@filename" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cS">COPY (OVERLAY) BLOCK "#x" "#y" # # "@filename" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cT">COPY BLOCK # # # # "$string" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cU">COPY OVERLAY BLOCK # # # # "$string" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cV">COPY (OVERLAY) BLOCK "#x" "#y" # # "$string" #</a>
- <a class="helplink" href="#COMMAND2.HLP___cW">COPY BLOCK # # # # "#x" "#y"</a>
- <a class="helplink" href="#COMMAND2.HLP___cX">COPY OVERLAY BLOCK # # # # "#x" "#y"</a>
- <a class="helplink" href="#COMMAND2.HLP___cY">COPY BLOCK "#x" "#y" # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cZ">COPY OVERLAY BLOCK "#x" "#y" # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___cAA">COPY (OVERLAY) BLOCK "#x1" "#y1" # # "#x2" "#y2"</a>
- <a class="helplink" href="#COMMANDR.HLP___cM">COPYROBOT "Robot"</a>
- <a class="helplink" href="#COMMANDR.HLP___cN">COPYROBOT # #</a>
- <a class="helplink" href="#COMMANDR.HLP___cO">COPYROBOT [dir]</a>
- <a class="helplink" href="#COMMANDR.HLP___cP">CYCLE #</a>
- <a class="helplink" href="#COMMANDR.HLP___d1">DEC "counter" #</a>
- <a class="helplink" href="#COMMANDR.HLP___d2">DEC "counter" RANDOM # #</a>
- <a class="helplink" href="#COMMAND2.HLP___dA">DEC "$string" #</a>
- <a class="helplink" href="#COMMANDR.HLP___d3">DIE</a>
- <a class="helplink" href="#COMMANDR.HLP___d4">DIE ITEM</a>
- <a class="helplink" href="#COMMAND2.HLP___d5">DISABLE MESG EDGE</a>
- <a class="helplink" href="#COMMAND2.HLP___d6">DISABLE SAVING</a>
- <a class="helplink" href="#COMMANDR.HLP___d7">DIVIDE "counter" #</a>
- <a class="helplink" href="#COMMANDR.HLP___d8">DOUBLE "counter"</a>
- <a class="helplink" href="#COMMANDR.HLP___d9">DUPLICATE SELF # #</a>
- <a class="helplink" href="#COMMANDR.HLP___d0">DUPLICATE SELF [dir]</a>
- <a class="helplink" href="#COMMANDR.HLP___e1">END</a>
- <a class="helplink" href="#COMMANDR.HLP___e2">END MOD</a>
- <a class="helplink" href="#COMMANDR.HLP___e3">END PLAY</a>
- <a class="helplink" href="#COMMANDR.HLP___e4">END SAM</a>
- <a class="helplink" href="#COMMANDR.HLP___e5">ENDGAME</a>
- <a class="helplink" href="#COMMANDR.HLP___e6">ENDLIFE</a>
- <a class="helplink" href="#COMMAND2.HLP___e7">ENABLE MESG EDGE</a>
- <a class="helplink" href="#COMMAND2.HLP___e8">ENABLE SAVING</a>
- <a class="helplink" href="#COMMAND2.HLP___e9">ENABLE SENSORONLY SAVING</a>
- <a class="helplink" href="#COMMAND2.HLP___e0">ENEMY BULLETCOLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___eA">ENEMY BULLETE [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___eB">ENEMY BULLETN [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___eC">ENEMY BULLETS [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___eD">ENEMY BULLETW [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___eE">EXCHANGE PLAYER POSITION</a>
- <a class="helplink" href="#COMMAND2.HLP___eF">EXCHANGE PLAYER POSITION #</a>
- <a class="helplink" href="#COMMAND2.HLP___eG">EXCHANGE PLAYER POSITION # DUPLICATE SELF</a>
- <a class="helplink" href="#COMMANDR.HLP___eH">EXPLODE #</a>
- <a class="helplink" href="#COMMAND2.HLP___f1">FIREWALKER #</a>
- <a class="helplink" href="#COMMAND2.HLP___f2">FILLHEALTH</a>
- <a class="helplink" href="#COMMAND2.HLP___f3">FLIP CHAR [char] [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___f4">FREEZETIME #</a>
- <a class="helplink" href="#COMMAND2.HLP___g1">GIVE # [item]</a>
- <a class="helplink" href="#COMMAND2.HLP___g2">GIVEKEY [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___g3">GIVEKEY [color] "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___g4">GO [dir] #</a>
- <a class="helplink" href="#COMMANDR.HLP___g5">GOTO "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___g6">GOTO "#return"</a>
- <a class="helplink" href="#COMMANDR.HLP___g7">GOTO "#top"</a>
- <a class="helplink" href="#COMMANDR.HLP___g8">GOTOXY # #</a>
- <a class="helplink" href="#COMMANDR.HLP___h1">HALF "counter"</a>
- <a class="helplink" href="#COMMANDR.HLP___i1">IF "counter" !<>= # "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i2">IF [condition] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i3">IF # # "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i4">IF [dir] PLAYER [color] [thing] [param] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i5">IF [color] [thing] [param] # # "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i6">IF [color] [thing] [param] [dir] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i7">IF ALIGNEDROBOT "Robot" "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i8">IF ANY [color] [thing] [param] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i9">IF FIRST STRING "string" "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___i0">IF NO [color] [thing] [param] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iA">IF NOT [color] [thing] [param] [dir] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iB">IF NOT [condition] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iC">IF PLAYER # # "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iD">IF STRING "string" "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iE">IF STRING MATCHES "string" "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iF">IF STRING NOT "string" "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iO">IF "$string" (equality) # "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iK">IF "$string" (equality) "text" "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iL">IF "$string" (equality) "$string2" "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iG">IF c?? Sprite_Colliding pNN # # "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iH">IF c?? Sprite p?? # # "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___iM">INC "$string" "text"</a>
- <a class="helplink" href="#COMMAND2.HLP___iN">INC "$string" "$string2"</a>
- <a class="helplink" href="#COMMANDR.HLP___iI">INC "counter" #</a>
- <a class="helplink" href="#COMMANDR.HLP___iJ">INC "counter" RANDOM # #</a>
- <a class="helplink" href="#COMMAND2.HLP___iP">INPUT STRING "string"</a>
- <a class="helplink" href="#COMMAND2.HLP___j1">JUMP MOD ORDER #</a>
- <a class="helplink" href="#COMMAND2.HLP___l1">LAYBOMB [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___l2">LAYBOMB HIGH [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___l3">LAZERWALL [dir] #</a>
- <a class="helplink" href="#COMMAND2.HLP___l4">LOAD CHAR SET "file"</a>
- <a class="helplink" href="#COMMAND2.HLP___l5">LOAD PALETTE "file"</a>
- <a class="helplink" href="#COMMAND2.HLP___l6">LOCKPLAYER</a>
- <a class="helplink" href="#COMMAND2.HLP___l7">LOCKPLAYER ATTACK</a>
- <a class="helplink" href="#COMMAND2.HLP___l8">LOCKPLAYER EW</a>
- <a class="helplink" href="#COMMAND2.HLP___l9">LOCKPLAYER NS</a>
- <a class="helplink" href="#COMMAND2.HLP___l0">LOCKSCROLL</a>
- <a class="helplink" href="#COMMANDR.HLP___lA">LOCKSELF</a>
- <a class="helplink" href="#COMMANDR.HLP___lB">LOOP #</a>
- <a class="helplink" href="#COMMANDR.HLP___lC">LOOP START</a>
- <a class="helplink" href="#COMMAND2.HLP___m1">MESSAGE ROW #</a>
- <a class="helplink" href="#COMMAND2.HLP___m2">MISSILECOLOR [color]</a>
- <a class="helplink" href="#COMMANDR.HLP___m3">MOD "file"</a>
- <a class="helplink" href="#COMMAND2.HLP___m4">MOD FADE # #</a>
- <a class="helplink" href="#COMMAND2.HLP___m5">MOD FADE IN "file"</a>
- <a class="helplink" href="#COMMAND2.HLP___m6">MOD FADE OUT</a>
- <a class="helplink" href="#COMMAND2.HLP___m7">MOD SAM # #</a>
- <a class="helplink" href="#COMMANDR.HLP___m8">MOD "*"</a>
- <a class="helplink" href="#COMMANDR.HLP___m9">MODULO "counter" #</a>
- <a class="helplink" href="#COMMAND2.HLP___m0">MOVE ALL [color] [thing] [param] [dir]</a>
- <a class="helplink" href="#COMMANDR.HLP___mA">MOVE PLAYER [dir]</a>
- <a class="helplink" href="#COMMANDR.HLP___mB">MOVE PLAYER [dir] "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___mC">MULTIPLY "counter" #</a>
- <a class="helplink" href="#COMMAND2.HLP___n1">NEUTRAL BULLETCOLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___n2">NEUTRAL BULLETE [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___n3">NEUTRAL BULLETN [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___n4">NEUTRAL BULLETS [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___n5">NEUTRAL BULLETW [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___o1">OPEN [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___o2">OVERLAY ON</a>
- <a class="helplink" href="#COMMAND2.HLP___o3">OVERLAY STATIC</a>
- <a class="helplink" href="#COMMAND2.HLP___o4">OVERLAY TRANSPARENT</a>
- <a class="helplink" href="#COMMANDR.HLP___p1">PERSISTENT GO "string"</a>
- <a class="helplink" href="#COMMANDR.HLP___p2">PLAY "string"</a>
- <a class="helplink" href="#COMMANDR.HLP___p3">PLAY SFX "string"</a>
- <a class="helplink" href="#COMMAND2.HLP___p4">PLAYER BULLETCOLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___p5">PLAYER BULLETE [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___p6">PLAYER BULLETN [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___p7">PLAYER BULLETS [char]</a>
- <a class="helplink" href="#COMMAND2.HLP___p8">PLAYER BULLETW [char]</a>
- <a class="helplink" href="#COMMANDR.HLP___p9">PLAYER CHAR [dir] [char]</a>
- <a class="helplink" href="#COMMANDR.HLP___p0">PLAYER CHAR [char]</a>
- <a class="helplink" href="#COMMANDR.HLP___pA">PLAYERCOLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___pB">PUSH [dir]</a>
- <a class="helplink" href="#COMMANDR.HLP___pC">PUT [color] [thing] [param] # #</a>
- <a class="helplink" href="#COMMANDR.HLP___pD">PUT [color] [thing] [param] [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___pE">PUT [color] [char] OVERLAY # #</a>
- <a class="helplink" href="#COMMANDR.HLP___pF">PUT [color] [thing] [param] [dir] PLAYER</a>
- <a class="helplink" href="#COMMANDR.HLP___pG">PUT PLAYER # #</a>
- <a class="helplink" href="#COMMANDR.HLP___pH">PUT PLAYER [dir]</a>
- <a class="helplink" href="#COMMANDR.HLP___pI">PUT "@FILENAME.XXX" Image_File [param] # #</a>
- <a class="helplink" href="#COMMANDR.HLP___pJ">PUT [color] Sprite [param] # #</a>
- <a class="helplink" href="#COMMAND2.HLP__pre">REL COUNTERS</a>
- <a class="helplink" href="#COMMAND2.HLP___r2">REL PLAYER</a>
- <a class="helplink" href="#COMMAND2.HLP___r3">REL SELF</a>
- <a class="helplink" href="#COMMAND2.HLP___r4">REL COUNTERS FIRST</a>
- <a class="helplink" href="#COMMAND2.HLP___r5">REL PLAYER FIRST</a>
- <a class="helplink" href="#COMMAND2.HLP___r6">REL SELF FIRST</a>
- <a class="helplink" href="#COMMAND2.HLP___r7">REL COUNTERS LAST</a>
- <a class="helplink" href="#COMMAND2.HLP___r8">REL PLAYER LAST</a>
- <a class="helplink" href="#COMMAND2.HLP___r9">REL SELF LAST</a>
- <a class="helplink" href="#COMMAND2.HLP___r0">RESETVIEW</a>
- <a class="helplink" href="#COMMAND2.HLP___rA">RESTORE "label" #</a>
- <a class="helplink" href="#COMMAND2.HLP___rB">RESTORE PLAYER POSITION</a>
- <a class="helplink" href="#COMMAND2.HLP___rC">RESTORE PLAYER POSITION #</a>
- <a class="helplink" href="#COMMAND2.HLP___rD">RESTORE PLAYER POSITION # DUPLICATE SELF</a>
- <a class="helplink" href="#COMMAND2.HLP___rE">ROTATECW</a>
- <a class="helplink" href="#COMMAND2.HLP___rF">ROTATECCW</a>
- <a class="helplink" href="#COMMANDR.HLP___s1">SAM # "file"</a>
- <a class="helplink" href="#COMMAND2.HLP___s2">SAVE PLAYER POSITION</a>
- <a class="helplink" href="#COMMAND2.HLP___s3">SAVE PLAYER POSITION #</a>
- <a class="helplink" href="#COMMAND2.HLP___s4">SCROLL CHAR [char] [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___s5">SCROLLARROW COLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___s6">SCROLLBASE COLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___s7">SCROLLCORNER COLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___s8">SCROLLPOINTER COLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___s9">SCROLLTITLE COLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___s0">SCROLLVIEW [dir] #</a>
- <a class="helplink" href="#COMMAND2.HLP___sA">SCROLLVIEW POSITION # #</a>
- <a class="helplink" href="#COMMANDR.HLP___sB">SEND # # "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___sC">SEND "Robot" "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___sD">SEND [dir] "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___sE">SEND [dir] PLAYER "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___sF">SET "counter" #</a>
- <a class="helplink" href="#COMMANDR.HLP___sG">SET "counter" RANDOM # #</a>
- <a class="helplink" href="#COMMANDR.HLP___sH">SET "$string" "text"</a>
- <a class="helplink" href="#COMMANDR.HLP___sI">SET "$string1" "$string2"</a>
- <a class="helplink" href="#COMMANDR.HLP___sJ">SET "$string" #</a>
- <a class="helplink" href="#COMMAND2.HLP___sK">SET COLOR # # # #</a>
- <a class="helplink" href="#COMMAND2.HLP___sL">SET EDGE COLOR [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___sM">SET MAXHEALTH #</a>
- <a class="helplink" href="#COMMAND2.HLP___sN">SET MESG COLUMN #</a>
- <a class="helplink" href="#COMMANDR.HLP___sO">SFX #</a>
- <a class="helplink" href="#COMMANDR.HLP___sP">SHOOT [dir]</a>
- <a class="helplink" href="#COMMANDR.HLP___sQ">SHOOTMISSILE [dir]</a>
- <a class="helplink" href="#COMMANDR.HLP___sR">SHOOTSEEKER [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___sS">SLOWTIME #</a>
- <a class="helplink" href="#COMMANDR.HLP___sT">SPITFIRE [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___sU">STATUS COUNTER # "counter"</a>
- <a class="helplink" href="#COMMAND2.HLP___sV">SWAP WORLD "file"</a>
- <a class="helplink" href="#COMMAND2.HLP___sW">SWITCH [dir] [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___t1">TAKE # [item]</a>
- <a class="helplink" href="#COMMAND2.HLP___t2">TAKE # [item] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___t3">TAKEKEY [color]</a>
- <a class="helplink" href="#COMMAND2.HLP___t4">TAKEKEY [color] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___t5">TELEPORT PLAYER "string" # #</a>
- <a class="helplink" href="#COMMAND2.HLP___t6">TRADE # [item] # [item] "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___t7">TRY [dir] "label"</a>
- <a class="helplink" href="#COMMAND2.HLP___u1">UNLOCKPLAYER</a>
- <a class="helplink" href="#COMMAND2.HLP___u2">UNLOCKSCROLL</a>
- <a class="helplink" href="#COMMANDR.HLP___u3">UNLOCKSELF</a>
- <a class="helplink" href="#COMMAND2.HLP___v1">VIEWPORT # #</a>
- <a class="helplink" href="#COMMAND2.HLP___v2">VIEWPORT SIZE # #</a>
- <a class="helplink" href="#COMMANDR.HLP___v3">VOLUME #</a>
- <a class="helplink" href="#COMMANDR.HLP___w1">WAIT #</a>
- <a class="helplink" href="#COMMAND2.HLP___w2">WAIT MOD FADE</a>
- <a class="helplink" href="#COMMAND2.HLP___w3">WAIT PLAY</a>
- <a class="helplink" href="#COMMANDR.HLP___w4">WAIT PLAY "string"</a>
- <a class="helplink" href="#COMMANDR.HLP___w5">WALK [dir]</a>
- <a class="helplink" href="#COMMAND2.HLP___w6">WIND #</a>
- <a class="helplink" href="#COMMAND2.HLP___w7">WRITE OVERLAY [color] "string" # #</a>
- <a class="helplink" href="#COMMAND2.HLP___z1">ZAP "label" #</a>
- <p class="helpcentered">Command Descriptions</p>
- <a class="helpanchor" name="COMMANDR.HLP____3"><span class="fA ">* "string"</span></a>
- This command displays the given string as a message on the
- message line, at the bottom of the screen by default. Using the
- newline char (\n) in this string will cause the message line to
- span another line underneath, allowing multi-line messages.
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMANDR.HLP____5"><span class="fA ">/ "string"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___p1"><span class="fA ">PERSISTENT GO "string"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___g4"><span class="fA ">GO [dir] #</span></a>
- Use / followed by a string to move the Robot around the board.
- The string must consist of a series of N, S, E, W, and I. NSEW
- will move the Robot in that direction, and I will wait for one
- cycle. One action is performed each cycle.
- Use PERSISTENT GO in the same way as /. However, if the Robot
- attempts to move in a given direction and it cannot, the Robot
- will wait until it can before moving on to the next symbol.
- Use GO to move in a single direction for a given number of
- spaces (limited to 255; higher numbers and negatives wrap).
- These commands can be used concurrently with <span class="fA ">WALK [dir]</span><span class="fF ">, </span>
- allowing Robots to move in double-speed steps. However, this
- can only happen when the commands are in the same cycle and if
- the given string/number for the moving command is small.
- <a class="helplink" href="#COMMANDR.HLP___w5">WALK [dir]</a>
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP____6"><span class="fA ">:</span><span class="fA "> "label"</span></a>
- A : is used to denote actual LABELS within a Robotic program.
- These labels are used as points within the program to branch
- to when a Robot receives a message from another Robot, goes to
- a label of its own, or otherwise receives an external message.
- Label names can be any length and consist of any characters.
- They are not case-sensitive, and they can not take interpreted
- counters (e.g. : "&label&").
- A Robot can have multiple labels with the same name. In these
- cases, the topmost of these labels in the Robot's code is the
- one that is triggered.
- There are several label names that are automatically jumped to
- under certain conditions. These are detailed in the Built-in
- Labels section.
- Labels starting with a pound sign/hash (#) are subroutines.
- See the Subroutine section for more information.
- <a class="helplink" href="#SUBROUTE.HLP__sub">Subroutines</a>
- <a class="helplink" href="#BUILTINL.HLP__1st">Built-in Labels</a>
- <a class="helpanchor" name="COMMANDR.HLP___g5"><span class="fA ">GOTO "label"</span></a>
- This will attempt to send the current Robot to the label
- given; if the label does not exist, this command does nothing.
- If the label begins with a # it will go to it as a subroutine.
- <a class="helpanchor" name="COMMANDR.HLP___g6"><span class="fA ">GOTO "#return"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___g7"><span class="fA ">GOTO "#top"</span></a>
- This will send the current Robot to the line after the
- next-highest subroutine call and to the line after the first
- subroutine call, respectively.
- <a class="helplink" href="#SUBROUTE.HLP__sub">Subroutines</a>
- <a class="helpanchor" name="COMMANDR.HLP___sC"><span class="fA ">SEND "Robot" "label"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sD"><span class="fA ">SEND [dir] "label"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sE"><span class="fA ">SEND [dir] PLAYER "label"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sB"><span class="fA ">SEND # # "label"</span></a>
- Use SEND to send another Robot to the label given. This is
- called "messaging" a Robot, and the label given is the
- "message". The target Robot can be given one of four ways,
- as listed above respectively:
- 1. State the target Robot's name. Use "ALL" in place of the
- Robot name to message all Robots (including the Robot doing the
- send). Set <span class="fA ">LOCKSELF</span><span class="fF "> beforehand to prevent sending to yourself</span>
- when sending to "ALL".
- 2. State the direction of the target Robot.
- 3. State the direction of the target Robot, relative to the
- player.
- 4. State the x,y coordinates of the target Robot.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helplink" href="#COMMANDR.HLP___lA">LOCKSELF</a>
- <a class="helpanchor" name="COMMANDR.HLP____9"><span class="fA ">[ "string"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP____2"><span class="fA ">& "string"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP____1"><span class="fA ">% "string"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP____8"><span class="fA ">? "label" "string"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP____7"><span class="fA ">? "counter" "label" "string"</span></a>
- Use these commands to bring up a message box during the game
- containing the given text. The message box will contain all
- consecutive lines using the commands [, &, %, or ?. Blank lines
- and labels will be skipped over. The box message commands are
- as follows:
- [ will simply display the given message.
- & will display the given message, centered within the box.
- % will display the given message, but will parse color codes.
- ? will display an option that will send the current Robot to
- the given label when selected. If a counter is included, the
- option will only be shown if the counter is NOT zero.
- All box-message commands can use ~ and @ color codes, EXCEPT
- for [. The advantage of [ is that it will be clipped to 64
- characters if it is too long, thereby preventing the display
- from being screwed up. The other commands are not clipped and,
- if too long, can mess up the current display. (No permanent
- damage is done, it just looks bad.)
- NOTE: Take care when using any of these commands in a loop (and
- be especially vigilant of possible unintended loops). Looping
- these commands without any WAITs or similar cycle-breaking
- commands (or repeatedly jumping to a label with said command)
- can cause the dialogue box to re-appear as soon as it is
- closed, making it very hard to resume normal action.
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMANDR.HLP____4"><span class="fA ">. "string"</span></a>
- This command does nothing. It is used for comments and other
- notes you may wish to make within your Robots. There is one
- exception - If "string" begins with a @. (see next) You may
- comment or de-comment lines of code automatically with the
- Ctrl+C command (comment mark). Comments can nonetheless have an
- actual effect on code speed, as they must be interpreted when
- encountered.
- <a class="helpanchor" name="COMMANDR.HLP___4b"><span class="fA ">. "@string"</span></a>
- If a comment's string begins with a @, then the rest of the
- string becomes the new name for the Robot. For example,
- "@Hiya" would name the Robot "Hiya". This clips at the first
- 14 characters of the string; for example, . "@Robothasanewname"
- would cut off and rename the Robot "Robothasanewna".
- <a class="helpanchor" name="COMMANDR.HLP___e1"><span class="fA ">END</span></a>
- This command ends the Robot's program. The Robot will not run
- any further commands until an external event affects it.
- <a class="helpanchor" name="COMMANDR.HLP___d3"><span class="fA ">DIE</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___d4"><span class="fA ">DIE ITEM</span></a>
- These commands destroy the Robot forever. DIE ITEM will also
- put the player at the location the Robot previously occupied,
- which is useful for creating Robots that simulate items.
- <a class="helpanchor" name="COMMANDR.HLP___w1"><span class="fA ">WAIT #</span></a>
- This command will cause the Robot to do absolutely nothing for
- a given number of cycles (limited to 255; values over this will
- wrap around).
- <a class="helpanchor" name="COMMANDR.HLP___c9"><span class="fA ">CHAR [char]</span></a>
- This command will change the Robot's character (appearance) to
- the character given.
- <a class="helpanchor" name="COMMANDR.HLP___cC"><span class="fA ">COLOR [color]</span></a>
- This command will change the Robot's color to the color given.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMANDR.HLP___sF"><span class="fA ">SET "counter" #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sG"><span class="fA ">SET "counter" RANDOM # #</span></a>
- These commands set a counter to a certain value. Counters are
- internal variables that can be changed through Robots. They are
- usually used for custom purposes, although there are many
- counters with pre-defined uses as well, such as "Gems". The
- RANDOM version will set the counter to a random number within
- the given range, inclusive.
- <a class="helpanchor" name="COMMANDR.HLP___sH"><span class="fA ">SET "$string" "text"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sI"><span class="fA ">SET "$string" "$string2"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sJ"><span class="fA ">SET "$string" number</span></a>
- These commands set strings to a certain value: a line of text,
- another string or a number, respectively.
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helpanchor" name="COMMANDR.HLP___iI"><span class="fA ">INC "counter" #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___d1"><span class="fA ">DEC "counter" #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___iJ"><span class="fA ">INC "counter" RANDOM # #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___d2"><span class="fA ">DEC "counter" RANDOM # #</span></a>
- These commands will increase or decrease a given counter or
- string by a given amount. The RANDOM versions will increase or
- decrease by a random number within the given range, inclusive.
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helpanchor" name="COMMANDR.HLP___i1"><span class="fA ">IF "counter" !<>= # "label"</span></a>
- This command tests to see if a given counter is equal to, less
- than, etc. another counter or value. If the conditional is met,
- the current Robot is sent to the given label. The following
- conditionals are allowed- = Equal, < Less than, > Greater than,
- <= Less than/equal, >= Greater than/equal, <> (also !=) Not
- equal.
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helpanchor" name="COMMANDR.HLP___cP"><span class="fA ">CYCLE #</span></a>
- This command changes the Robot's speed to one Robot cycle for
- every given number of update cycles. An update cycle is how
- often everything onscreen is updated, such as most enemies.
- Every time a given Robot gets to run commands is called a cycle
- in terms of that Robot; most commands can run several times in
- a single Robot cycle. (CYCLE # values are limited to 255;
- values over this will wrap around.)
- <a class="helpanchor" name="COMMANDR.HLP___e6"><span class="fA ">ENDLIFE</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___e5"><span class="fA ">ENDGAME</span></a>
- These commands will end the player's current life or the entire
- game, just as if the player died or lost all of its lives.
- <a class="helpanchor" name="COMMANDR.HLP___w5"><span class="fA ">WALK [dir]</span></a>
- This will cause the Robot to attempt to move one space in the
- given direction every cycle. Use a direction of IDLE to turn
- walking off.
- This can be used concurrently with <span class="fA ">GO [dir] #</span><span class="fF "> and its</span>
- relatives to make Robots move in double-speed steps.
- <a class="helplink" href="#COMMANDR.HLP___g4">GO [dir] #</a>
- <a class="helplink" href="#COMMANDR.HLP____5">/ "string"</a>
- <a class="helplink" href="#COMMANDR.HLP___p1">PERSISTENT GO "string"</a>
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP___sP"><span class="fA ">SHOOT [dir]</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sQ"><span class="fA ">SHOOTMISSILE [dir]</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sR"><span class="fA ">SHOOTSEEKER [dir]</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___sT"><span class="fA ">SPITFIRE [dir]</span></a>
- These four commands all shoot a weapon in the given direction:
- A bullet, a missile, a seeker, or shooting fire, respectively.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP___t7"><span class="fA ">TRY [dir] "label"</span></a>
- This will have the Robot attempt to move in the given
- direction. If it can, it will. If it can't, it will jump to the
- given label.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP___b1"><span class="fA ">BECOME [color] [thing] [param]</span></a>
- The Robot will end its program permanently, and instead become
- a specified object with a given color and parameter.
- NOTE: Becoming another Robot type will not destroy the program,
- but there are far better commands for doing this: <span class="fA ">BECOME</span>
- <span class="fA ">PUSHABLE</span><span class="fF "> and </span><span class="fA ">BECOME NONPUSHABLE</span><span class="fF ">.</span>
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helplink" href="#COMMAND2.HLP___b3">BECOME NONPUSHABLE</a>
- <a class="helplink" href="#COMMAND2.HLP___b5">BECOME PUSHABLE</a>
- <a class="helpanchor" name="COMMANDR.HLP___c2"><span class="fA ">CHANGE [color] [thing] [param] [color] [thing] [param]</span></a>
- All on-board objects of the first given type will become
- objects of the second given type.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMANDR.HLP___pC"><span class="fA ">PUT [color] [thing] [param] # #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___pD"><span class="fA ">PUT [color] [thing] [param] [dir]</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___pF"><span class="fA ">PUT [color] [thing] [param] [dir] PLAYER</span></a>
- This will put a given object somewhere onscreen. If anything
- else is in that spot and layer, it will be replaced with this
- object. (The exception is if the player is in the target
- location. In this case, nothing happens.) The target location
- can be given in one of three ways:
- 1. State the target x,y coordinates.
- 2. State the direction, relative to the Robot.
- 3. State the direction, relative to the player.
- Note that this command is not suitable for placing Robots. For
- moving a Robot, use <span class="fA ">GOTOXY # #</span><span class="fF ">; for placing a copy of a Robot,</span>
- use <span class="fA ">DUPLICATE SELF # #</span><span class="fF "> or </span><span class="fA ">DUPLICATE SELF [dir]</span><span class="fF ">.</span>
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP___m3"><span class="fA ">MOD "file"</span></a>
- This command loads the given module/OGG/WAV/SAM file as
- background music. These files also can be loaded from a
- subdirectory with the syntax of ""dir"\"file"" or
- ""dir"/"file"" (without the inner quotes). The biggest
- difference between MOD and SAM commands is that for a file
- loaded with MOD one can use related commands like VOLUME and
- MOD ORDER; the music loops as well.
- NOTE: placing * at the end of the filename will set the current
- mod to the given filename, but institute MOD "*" (see below) for
- subsequent board visits.
- <a class="helpanchor" name="COMMANDR.HLP___m8"><span class="fA ">MOD "*"</span></a>
- Sets the board's currently running music to "wildcard". This
- means that it will continue to play whatever was last playing.
- This setting does not "lock" the board's music to any one song;
- for instance, if 1.mod was playing on the last board, mod "*"
- will continue playing 1.mod, but if the player then goes to a
- board playing 2.mod and jumps back to the mod "*" board from
- there, 2.mod will continue playing, and 1.mod will not start.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMANDR.HLP___s1"><span class="fA ">SAM # "file"</span></a>
- Plays the given SAM/WAV/OGG/module file at a given frequency.
- These files also can be loaded from a subdirectory with the
- syntax of ""dir"\"file"" or ""dir"/"file"" (without the inner
- quotes). 0 plays the file at natural frequency. Music loaded
- with the SAM command will not loop.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMANDR.HLP___e2"><span class="fA ">END MOD</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___e4"><span class="fA ">END SAM</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___e3"><span class="fA ">END PLAY</span></a>
- Ends the playing of the current audio set by MOD "file",
- the current audio set by SAM # "file", or the currently playing
- PLAY statement (respectively).
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMANDR.HLP___d8"><span class="fA ">DOUBLE "counter"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___h1"><span class="fA ">HALF "counter"</span></a>
- Doubles or halves (rounding down) the value of the given
- counter, respectively.
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helpanchor" name="COMMANDR.HLP___mC"><span class="fA ">MULTIPLY "counter" #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___d7"><span class="fA ">DIVIDE "counter" #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___m9"><span class="fA ">MODULO "counter" #</span></a>
- Multiplies, divides, or performs a modulo on the value of the
- given counter by the given number (rounding down), and then sets
- the counter to the result.
- To modulo is to set to the remainder when dividing. Example: 7
- modulo 3 is equal to 1, since 7 divided by 3 gives a remainder
- of 1.
- NOTE: The modulo command may output different numbers compared
- to the modulo expression function; they may act differently
- when negative numbers are involved. For the modulo command, the
- output will give results similar to when both numbers are
- positive, but will simply have the sign of the dividend (i.e. a
- truncated modulo).
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helpanchor" name="COMMANDR.HLP___p2"><span class="fA ">PLAY "string"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___p3"><span class="fA ">PLAY SFX "string"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___w4"><span class="fA ">WAIT PLAY "string"</span></a>
- These all play sound effects, PC speaker notes, or a
- combination thereof. PLAY SFX will only play if there are no
- other notes currently playing, while PLAY will add its notes to
- the end of the current sound effects queue. WAIT PLAY will wait
- until the queue is almost empty before adding its notes.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMANDR.HLP___sO"><span class="fA ">SFX #</span></a>
- Plays the given built-in sound effect.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMANDR.HLP___eH"><span class="fA ">EXPLODE #</span></a>
- The Robot will explode, destroying it and its program forever.
- The radius of the explosion is stated in the command, with a
- maximum of 16.
- <a class="helpanchor" name="COMMANDR.HLP___cD"><span class="fA ">COLOR FADE OUT</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___cE"><span class="fA ">COLOR FADE IN</span></a>
- Fades the palette out to black or in to full color. Fading in
- will not work if you haven't faded out, and fades affect
- neither the current palette nor current intensities.
- <a class="helpanchor" name="COMMANDR.HLP___g8"><span class="fA ">GOTOXY # #</span></a>
- The Robot will go to the given x,y coordinates on the current
- board, destroying anything there that cannot go on the under
- layer. If the player is at those coordinates, the Robot ignores
- the command.
- <a class="helpanchor" name="COMMANDR.HLP___lC"><span class="fA ">LOOP START</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___lB"><span class="fA ">LOOP #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___a1"><span class="fA ">ABORT LOOP</span></a>
- These three commands define a loop, which is a sequence of
- commands to be repeated. LOOP START marks the start of a loop.
- LOOP # will loop back to LOOP START the given number of times.
- ABORT LOOP will jump out of the loop, to the command after LOOP
- #. The loop count is kept in the local counter "loopcount".
- Make sure your number in LOOP # is one less than the amount for
- which you actually want to loop, as the initial iteration
- before first hitting LOOP # is not counted in the number.
- NOTE: Using ABORT LOOP outside of the loop (that is, outside of
- any block of code starting with LOOP START and ending in
- LOOP #) is very highly unadvised and will most likely cause
- unintended effects.
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helpanchor" name="COMMANDR.HLP___mA"><span class="fA ">MOVE PLAYER [dir]</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___mB"><span class="fA ">MOVE PLAYER [dir] "label"</span></a>
- This attempts to move the player in the given direction. If the
- player is blocked, and the command contains a label, the Robot
- will jump to that label.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP___p0"><span class="fA ">PLAYER CHAR [char]</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___p9"><span class="fA ">PLAYER CHAR [dir] [char]</span></a>
- Changes the character (appearance) of the player. The second
- form allows you to change the appearance of one of the four
- facing directions at a time, while the first form changes all
- four directions at once.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP___pA"><span class="fA ">PLAYERCOLOR [color]</span></a>
- Changes the color of the player.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMANDR.HLP___pG"><span class="fA ">PUT PLAYER # #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___pH"><span class="fA ">PUT PLAYER [dir]</span></a>
- The player will go to the given x,y coordinates or in the given
- direction immediately relative to the Robot. If this is
- impossible, the command is ignored.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP___pI"><span class="fA ">PUT "@FILENAME.XXX" Image_File [param] # #</span></a>
- Places an MZM of the given filename. These files also can be
- loaded from a subdirectory with the syntax of ""@dir"\"file""
- or ""@dir"/"file"" (without the inner quotes). The @ is
- REQUIRED. The numbers mark the destination x,y coordinates of
- the MZM's upper-left corner; the parameter determines the
- placement of the MZM (00 = board, 01 = overlay, 02 = vlayer).
- See the MZM section for further details.
- <a class="helplink" href="#MZM.HLP__mzm">Using MZMs</a>
- <a class="helpanchor" name="COMMANDR.HLP___pJ"><span class="fA ">PUT [color] Sprite [param] # #</span></a>
- Puts a sprite on the board. The param number is the number of
- the sprite in hex (auto-converted from decimal). If the color
- is c?? then the sprite is drawn with its normal colors as seen
- on the board; otherwise, it's painted with the given colors.
- # # marks the x,y coordinates of the sprite's upper-left
- corner. See the Spites section for further details.
- <a class="helplink" href="#SPRITES.HLP__spr">Sprites</a>
- <a class="helpanchor" name="COMMANDR.HLP___lA"><span class="fA ">LOCKSELF</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___u3"><span class="fA ">UNLOCKSELF</span></a>
- Locks or unlocks, respectively, the current Robot. When a Robot
- is locked, no external messages will be acknowledged - Only
- internal GOTOs, etc. will be processed. (Built-in label calls
- to "thud" and "edge" are exceptions.)
- <a class="helpanchor" name="COMMANDR.HLP___v3"><span class="fA ">VOLUME #</span></a>
- Changes the volume of the MOD playing, from 0 (silent) to 255.
- This change is specific to the current board. The default when
- music is loaded is 255.
- <a class="helpanchor" name="COMMANDR.HLP___cM"><span class="fA ">COPYROBOT "Robot"</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___cN"><span class="fA ">COPYROBOT # #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___cO"><span class="fA ">COPYROBOT [dir]</span></a>
- The current Robot becomes an exact duplicate of the noted
- Robot, starting from the beginning of the noted Robot's code.
- Note that if the source Robot was previously ended with the END
- command, or was at the end of its program, the destination
- Robot will be in an ended state as well. The Robot to copy can
- be stated in one of three ways:
- 1. State the target Robot's name.
- 2. State the x,y coordinates of target Robot.
- 3. State the direction of target Robot.
- NOTE: Exact means just that, EXACT, down to the values of
- local counters. The only thing that will differ will be the
- robot_id. If one requires an group of objects differing only in
- name, COPYROBOT is unsuitable for this purpose because even the
- Robot name is copied.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMANDR.HLP___d9"><span class="fA ">DUPLICATE SELF # #</span></a>
- <a class="helpanchor" name="COMMANDR.HLP___d0"><span class="fA ">DUPLICATE SELF [dir]</span></a>
- The current Robot creates an exact duplicate of itself
- (including local counter values!) and places it at the noted
- x,y coordinates or relative direction. That Robot then begins
- its program at the first command.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <span class="fE ">The remaining Robotic commands are covered in another section.</span>
- <a class="helplink" href="#COMMAND2.HLP__1st">Command Reference Part II</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="COMMAND2.HLP">
- <a class="helpanchor" name="COMMAND2.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Command Reference Part II</span></p>
- <a class="helplink" href="#COMMANDR.HLP__1st">Command Reference (Part I)</a>
- <a class="helpanchor" name="COMMAND2.HLP___b9"><span class="fA ">BULLETCOLOR [color]</span></a>
- Changes the color of all bullets.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMAND2.HLP___p4"><span class="fA ">PLAYER BULLETCOLOR [color]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___e0"><span class="fA ">ENEMY BULLETCOLOR [color]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___n1"><span class="fA ">NEUTRAL BULLETCOLOR [color]</span></a>
- Changes the color of a specific type of bullet: Player, Enemy,
- or Neutral (ricocheted/Robot) bullets.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helplink" href="#BULLETTY.HLP__1st">Bullet Types</a>
- <a class="helpanchor" name="COMMAND2.HLP___bA"><span class="fA ">BULLETN [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___bB"><span class="fA ">BULLETS [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___b0"><span class="fA ">BULLETE [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___bC"><span class="fA ">BULLETW [char]</span></a>
- Changes the character (appearance) of one of the four
- directions of bullet, across all three types.
- <a class="helpanchor" name="COMMAND2.HLP___p6"><span class="fA ">PLAYER BULLETN [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___p7"><span class="fA ">PLAYER BULLETS [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___p5"><span class="fA ">PLAYER BULLETE [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___p8"><span class="fA ">PLAYER BULLETW [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___eA"><span class="fA ">ENEMY BULLETE [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___eB"><span class="fA ">ENEMY BULLETN [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___eC"><span class="fA ">ENEMY BULLETS [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___eD"><span class="fA ">ENEMY BULLETW [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___n3"><span class="fA ">NEUTRAL BULLETN [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___n4"><span class="fA ">NEUTRAL BULLETS [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___n2"><span class="fA ">NEUTRAL BULLETE [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___n5"><span class="fA ">NEUTRAL BULLETW [char]</span></a>
- Changes the character of one of the four directions of bullet,
- for one of the three types of bullet: Player, Enemy, or Neutral
- (ricocheted/Robot) bullets, respectively.
- <a class="helplink" href="#BULLETTY.HLP__1st">Bullet Types</a>
- <a class="helpanchor" name="COMMAND2.HLP___b5"><span class="fA ">BECOME PUSHABLE</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___b3"><span class="fA ">BECOME NONPUSHABLE</span></a>
- The Robot becomes a pushable or nonpushable Robot,
- respectively.
- <a class="helpanchor" name="COMMAND2.HLP___i2"><span class="fA ">IF [condition] "label"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___iB"><span class="fA ">IF NOT [condition] "label"</span></a>
- These test whether a given condition is present or not, and if
- it is, the first will jump to the given label. If it isn't, the
- second will jump to the given label. Conditions are covered in
- another section.
- <a class="helplink" href="#COMMANDS.HLP__con">Conditions</a>
- <a class="helpanchor" name="COMMAND2.HLP___i3"><span class="fA ">IF # # "label"</span></a>
- Jumps to the given label if the current Robot is at the x,y
- coordinates given.
- <a class="helpanchor" name="COMMAND2.HLP___i4"><span class="fA ">IF [dir] PLAYER [color] [thing] [param] "label"</span></a>
- Jumps to the given label if the given thing is the given
- direction relative to the player.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___i5"><span class="fA ">IF [color] [thing] [param] # # "label"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___i6"><span class="fA ">IF [color] [thing] [param] [dir] "label"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___iA"><span class="fA ">IF NOT [color] [thing] [param] [dir] "label"</span></a>
- Jumps to a label if a given thing is at the given x,y
- coordinates or to the immediate given direction of the current
- Robot. The third form jumps if the thing is NOT in the
- immediate given direction.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___i7"><span class="fA ">IF ALIGNEDROBOT "Robot" "label"</span></a>
- Jump to the given label if the current Robot is aligned either
- vertically or horizontally with the named Robot.
- <a class="helpanchor" name="COMMAND2.HLP___i8"><span class="fA ">IF ANY [color] [thing] [param] "label"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___i0"><span class="fA ">IF NO [color] [thing] [param] "label"</span></a>
- If there are ANY of a given thing with the given color and
- parameter on the current board, jumps to the given label. The
- second form triggers on the absence of the given thing.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMAND2.HLP___iC"><span class="fA ">IF PLAYER # # "label"</span></a>
- If the player is at the given x,y coordinates, jump to the given
- label.
- <a class="helpanchor" name="COMMAND2.HLP___g2"><span class="fA ">GIVEKEY [color]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___g3"><span class="fA ">GIVEKEY [color] "label"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___t3"><span class="fA ">TAKEKEY [color]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___t4"><span class="fA ">TAKEKEY [color] "label"</span></a>
- Attempts to give keys to or take keys from the player. The
- forms without labels will give or take the key if possible,
- otherwise they will do nothing. The forms with labels will jump
- to the labels if the Robot tries to give a key when the player
- has no room for keys, or if the Robot tries to take a key the
- player doesn't have.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMAND2.HLP___g1"><span class="fA ">GIVE # [item]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___t1"><span class="fA ">TAKE # [item]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___t2"><span class="fA ">TAKE # [item] "label"</span></a>
- Gives or takes a number of a certain item. If the player does
- not have enough of this type of item to take, nothing is taken.
- The third form jumps to a given label if the player doesn't have
- enough of the stated item.
- <a class="helpanchor" name="COMMAND2.HLP___t6"><span class="fA ">TRADE # [item] # [item] "label"</span></a>
- Gives the player a number of the first item and takes a number
- of the second item in exchange. If the player doesn't have
- enough of the second item, this command jumps to the given label
- and has no other effect. This command eases the writing of
- simple shops and vendors.
- Keep in mind that trades involving healths and lives can end up
- with either at 0, leading to potential deaths and endgames if
- the player has the exact amount of health/lives being traded
- away.
- <a class="helpanchor" name="COMMAND2.HLP___l6"><span class="fA ">LOCKPLAYER</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___l9"><span class="fA ">LOCKPLAYER NS</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___l8"><span class="fA ">LOCKPLAYER EW</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___l7"><span class="fA ">LOCKPLAYER ATTACK</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___u1"><span class="fA ">UNLOCKPLAYER</span></a>
- The first four commands lock the player, preventing the player
- from doing any moving and attacking (i.e. default shooting and
- bombing), from moving north or south, from moving east or west,
- or from attacking, respectively. The fifth command will clear
- all locks on the player, allowing free movement and attacking.
- These have no relation to the Board Info options "Can Bomb" and
- "Can Shoot". Player locking is local, only affecting the
- current board.
- Also, locking the player will not cause the relevant input to
- be ignored completely. MegaZeux will still detect that you are
- pressing keys, even if the Player is forbidden from responding
- to them, and will act accordingly. In short, even if a player
- is locked, Robots that take directional and space/delete inputs
- will still act the same.
- <a class="helpanchor" name="COMMAND2.HLP___b7"><span class="fA ">BOARD [dir] "string"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___b8"><span class="fA ">BOARD [dir] NONE</span></a>
- Changes the board exit in the given direction to lead to the
- given board or to nowhere.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMAND2.HLP___z1"><span class="fA ">ZAP "label" #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___rA"><span class="fA ">RESTORE "label" #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP____0"><span class="fA ">| "label"</span></a>
- ZAP will scan the Robotic program from the top down, changing
- a given number of instances of the stated label to ZAPPED
- labels. A ZAPPED label is inactive - it cannot be jumped to or
- sent to under any circumstance. This has two uses: It will
- prevent interference from a certain outside event, and it
- allows multiple instances of the same label. For example, you
- could have four SHOT labels in a row, ZAP one each time the
- Robot was shot, and jump back to normal code, but have a fifth
- SHOT label lead to an explosion.
- RESTORE will scan the Robotic program from the bottom up,
- changing a given number of the stated ZAPPED labels back to a
- normal label. Essentially, this means that the most recently
- ZAPPED labels are restored first. Both ZAP and RESTORE can have
- a number larger than the number of instances of the stated
- label. The final command, |, is a pre-ZAPPED label, allowing you
- to have labels in your Robotic programs that are already ZAPPED
- and inactive.
- <a class="helpanchor" name="COMMAND2.HLP__pre"><span class="fA ">REL COUNTERS</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___r2"><span class="fA ">REL PLAYER</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___r3"><span class="fA ">REL SELF</span></a>
- These are special types of commands, called PREFIXES. Prefixes
- don't do a thing by themselves, but when placed before another
- command that uses x,y coordinates, they change the origin of the
- x,y coordinate system for that ONE following command. REL
- COUNTERS moves the origin to the x,y location stated in the
- counters XPOS and YPOS. REL PLAYER moves the origin to the
- x,y of the player. REL SELF moves the origin to the x,y of the
- current Robot.
- The movement of the origin changes the (0,0) coordinates from
- the upper left of the board to somewhere else, effectively
- adding that x,y position to any coordinates entered. For
- example, if the Robot is at the (5,5) position and uses REL
- SELF on the coordinates (2,2), it will effectively act on
- coordinates (7,7). If the player is at the (7,2) position and a
- Robot uses REL PLAYER on coordinates (-3,6), the Robot will
- effectively act on coordinates (4,8).
- Let's look at some examples.
- <span class="fE ">PUT c0E GEM p?? 5 5</span>
- This places a gem at the x,y coordinates (5,5).
- <span class="fE ">REL PLAYER</span>
- <span class="fE ">PUT c0E GEM p?? 5 5</span>
- This places a gem 5 spaces to the right and 5 spaces below
- where the player currently is, or at the board edge if it is
- under 5 spaces to the right/below the player.
- <span class="fE ">REL SELF</span>
- <span class="fE ">PUT c0E GEM p?? -2 -3</span>
- This places a gem 2 spaces to the left and 3 spaces above
- where this Robot currently is, or at the board edge if it is
- under 2 spaces to the left or 3 spaces above the Robot.
- <span class="fE ">REL COUNTERS</span>
- <span class="fE ">PUT c0E GEM p?? 1 -4</span>
- This places a gem at the coordinates (XPOS+1,YPOS-4), or on a
- board edge if either of these coordinates would extend past the
- board. XPOS and YPOS are counters with amounts defined by the
- user before using this command.
- Prefixes only have an effect on the very next command. This
- includes comments.
- Prefixes also affect two other things. The built in counters
- THISX and THISY will be offset by a prefix, and the command
- IF [dir] BLOCKED will check next to the player or next to the
- position noted by the counters, if a prefix is present. See
- these for details.
- <a class="helpanchor" name="COMMAND2.HLP___r4"><span class="fA ">REL COUNTERS FIRST</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___r5"><span class="fA ">REL PLAYER FIRST</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___r6"><span class="fA ">REL SELF FIRST</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___r7"><span class="fA ">REL COUNTERS LAST</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___r8"><span class="fA ">REL PLAYER LAST</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___r9"><span class="fA ">REL SELF LAST</span></a>
- These prefixes are similar to the above prefixes, but they only
- affect the first or last x,y pair of coordinates in the next
- command. For example, COPY accepts two pairs of coordinates. If
- you precede it with the following:
- REL PLAYER FIRST
- REL SELF LAST
- Then the coordinates of the object being copied will be relative
- to the player, and the destination coordinates will be relative
- to the Robot. There is one other difference with these commands
- - REL COUNTERS FIRST works off of the counters FIRSTXPOS and
- FIRSTYPOS, and REL COUNTERS LAST works off of the counters
- LASTXPOS and LASTYPOS.
- <a class="helpanchor" name="COMMAND2.HLP___j1"><span class="fA ">JUMP MOD ORDER #</span></a>
- The current module jumps to the stated module order, if
- applicable. For example, JUMP MOD ORDER 3 will begin playing
- the third order in the module, which is the fourth section of
- the module. Sometimes your music editor will refer to this as
- the 'Pattern' or 'Track'.
- With OGG music and/or WAVs, this command makes a jump to the
- stated frame.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMAND2.HLP___l1"><span class="fA ">LAYBOMB [dir]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___l2"><span class="fA ">LAYBOMB HIGH [dir]</span></a>
- Places a bomb (high strength for the second form) next to the
- Robot in the given direction. Use a direction of UNDER or
- BENEATH to place the bomb underneath the Robot.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___l3"><span class="fA ">LAZERWALL [dir] #</span></a>
- The Robot shoots a lazer in the given direction, and the lazer
- has the color of the Robot and the duration given. The number of
- cycles the lazer is active is duration x 2.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___cH"><span class="fA ">COPY # # # #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___cI"><span class="fA ">COPY [dir] [dir]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___sW"><span class="fA ">SWITCH [dir] [dir]</span></a>
- Copies the thing at one location to another, with the location
- stated through x,y coordinates or directions relative to the
- current Robot. The third command will swap the things in the
- two directions.
- COPY can copy between different layers by using the appropriate
- prefixes. Prefix coordinate numbers with "+" to indicate
- overlay coordinates, and with "#" to indicate vlayer
- coordinates.
- NOTE: DO NOT normally use COPY # # # # to copy Robots; use
- DUPLICATE SELF or COPYROBOT. It is useful for copying by Robot
- id, however; use COPY rN.thisx and rN.thisy as the first pair
- of coordinates.
- Using COPY # # # # on a Robot will no longer cause the Robot
- copy to start where the parent left off, and will have new
- Robots start at the first line.
- <a class="helplink" href="#COUNTERS.HLP__rnc">Rn.<counter></a>
- <a class="helplink" href="#BADPRACT.HLP__bad">Robotic Usages That Should be Avoided</a>
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___cJ"><span class="fA ">COPY BLOCK # # # # # #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___cL"><span class="fA ">COPY OVERLAY BLOCK # # # # # #</span></a>
- Copies a block of things from one location on the board or
- overlay to another section. The first two numbers state the
- upper-left corner of the block to be copied, the second two
- numbers state the size of the block, and the third two numbers
- state the destination block's upper-left corner.
- COPY BLOCK and COPY OVERLAY BLOCK can copy from board to
- overlay and from overlay to board (respectively). The last two
- numbers must be prefixed by plus signs, like so:
- COPY BLOCK # # # # "+#" "+#"
- COPY OVERLAY BLOCK # # # # "+#" "+#"
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helpanchor" name="COMMAND2.HLP___cW">COPY BLOCK # # # # "#x" "#y"</a>
- <a class="helpanchor" name="COMMAND2.HLP___cX">COPY OVERLAY BLOCK # # # # "#x" "#y"</a>
- These commands copy from the board or overlay (respectively) to
- the vlayer. The first two numbers are the x,y coordinates of the
- upper-left corner of the block to be copied; the next two
- numbers are the respective width and height of the block; the
- "#x" and "#y" are the x,y coordinates of the destination block's
- upper-left corner. The pound sign in "#x" and "#y" MUST be
- included.
- <a class="helpanchor" name="COMMAND2.HLP___cY">COPY BLOCK "#x" "#y" # # # #</a>
- <a class="helpanchor" name="COMMAND2.HLP___cZ">COPY OVERLAY BLOCK "#x" "#y" # # # #</a>
- These commands similarly copy from the vlayer to the board or
- overlay (respectively).
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helplink" href="#VLAYER.HLP__vla">The Vlayer and Its Uses</a>
- <a class="helpanchor" name="COMMAND2.HLP___cAA">COPY (OVERLAY) BLOCK "#x1" "#y1" # # "#x2" "#y2"</a>
- This command copies a block from the vlayer and copies it onto
- a different spot on the vlayer. "#x1" and "#y1" are the x,y
- coordinates of the upper-left corner of the copied block; the
- next two numbers are the respective width and height of the
- copied area; "#x2" and "#y2" are the x,y coordinates of the
- destination block's upper-left corner. The pound sign in #x1",
- "#y1", "#x2" and "#y2" MUST be included.
- <a class="helplink" href="#VLAYER.HLP__vla">The Vlayer and Its Uses</a>
- <a class="helpanchor" name="COMMAND2.HLP___cQ"><span class="fA ">COPY BLOCK # # # # "@filename" #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___cR"><span class="fA ">COPY OVERLAY BLOCK # # # # "@filename" #</span></a>
- These commands copy from the board or overlay (respectively)
- to an MZM. The first two numbers are the x,y coordinates of the
- block's upper-left corner; # # is the respective width and
- height of the block; filename is the name of the file - the @
- is required. Finally, the last number determines the MZM type.
- 1 saves as layer; 0 saves as board. 0 is integral for copying
- non-graphical data (primarily Robots); 1 is proper for copying
- graphical data, as the block's appearance will stay as exactly
- as it was when saved.
- <a class="helplink" href="#MZM.HLP__mzm">Using MZMs</a>
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helpanchor" name="COMMAND2.HLP___cS"><span class="fA ">COPY (OVERLAY) BLOCK "#x" "#y" # # "@filename" #</span></a>
- These commands act much like the above two commands, but they
- copy from the vlayer to an MZM instead.
- <a class="helplink" href="#MZM.HLP__mzm">Using MZMs</a>
- <a class="helplink" href="#VLAYER.HLP__vla">The Vlayer and Its Uses</a>
- <a class="helpanchor" name="COMMAND2.HLP___cT"><span class="fA ">COPY BLOCK # # # # "$string" #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___cU"><span class="fA ">COPY OVERLAY BLOCK # # # # "$string" #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___cV"><span class="fA ">COPY (OVERLAY) BLOCK "#x" "#y" # # "$string" #</span></a>
- These commands copy information from the board, overlay, or
- vlayer (respectively) to a given string. The first two numbers
- are the x,y coordinates of the upper-left corner of the block;
- the third and fourth are its respective width and height; the
- last is the terminating character's char value (i.e. a number
- from 0-255). The operation will end before all characters in the
- given range are read if either the parameter matching the
- terminating character, or a parameter of p00, is found. For the
- vlayer command, the pound sign is REQUIRED.
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helpanchor" name="COMMAND2.HLP___s2"><span class="fA ">SAVE PLAYER POSITION</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___s3"><span class="fA ">SAVE PLAYER POSITION #</span></a>
- Saves the player's coordinates and board in one of eight
- internal slots (1-8). If no number is given, slot one is used.
- <a class="helpanchor" name="COMMAND2.HLP___rB"><span class="fA ">RESTORE PLAYER POSITION</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___rC"><span class="fA ">RESTORE PLAYER POSITION #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___rD"><span class="fA ">RESTORE PLAYER POSITION # DUPLICATE SELF</span></a>
- Relocates the player to the coordinates and board stored in
- the given slot, or slot number one if none is given. The third
- form also duplicates the current Robot where the player used to
- be; this Robot then starts its program at the first command.
- This command will do transition fades on activation, even if the
- destination is the same board.
- <a class="helpanchor" name="COMMAND2.HLP___eE"><span class="fA ">EXCHANGE PLAYER POSITION</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___eF"><span class="fA ">EXCHANGE PLAYER POSITION #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___eG"><span class="fA ">EXCHANGE PLAYER POSITION # DUPLICATE SELF</span></a>
- Exchanges the player's current coordinates and board with the
- coordinates and board stored in the given slot, or slot number
- one if none is given. The third form also duplicates the
- current Robot where the player used to be; this Robot then
- starts its program at the first command. This command will do
- transition fades on activation, even if the destination is the
- same board.
- <a class="helpanchor" name="COMMAND2.HLP___f2"><span class="fA ">FILLHEALTH</span></a>
- The player's health is filled to its maximum.
- <a class="helpanchor" name="COMMAND2.HLP___cA"><span class="fA ">CLEAR MESG</span></a>
- The message row, if currently displayed, disappears.
- <a class="helpanchor" name="COMMAND2.HLP___m1"><span class="fA ">MESSAGE ROW #</span></a>
- The message row is moved to the stated row, from 0 to 24.
- <a class="helpanchor" name="COMMAND2.HLP___sN"><span class="fA ">SET MESG COLUMN #</span></a>
- The message is displayed starting from the given column, from 0
- to 79. (The actual message will start at this location, not the
- message edge.)
- <a class="helpanchor" name="COMMAND2.HLP___c1"><span class="fA ">CENTER MESG</span></a>
- The message is centered on its row instead of being shown at a
- constant column. (see above)
- <a class="helpanchor" name="COMMAND2.HLP___l4"><span class="fA ">LOAD CHAR SET "file"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___l5"><span class="fA ">LOAD PALETTE "file"</span></a>
- Loads in the specified character set or palette, exported using
- Alt+X from the world editor. The new character set or palette
- is permanent and affects the entire world until a new one is
- loaded. These files also can be loaded from a subdirectory with
- the syntax of ""dir"\"file"" or ""dir"/"file"" (without the
- inner quotes).
- Character sets can be loaded to the middle of the current
- charset by prefixing the "file" name with +offset, where offset
- is a hexadecimal number, or @offset where offset is a decimal
- number. Up to 14 additional charsets can be loaded for use with
- unbound sprites. To set and access these, set the decimal
- offset number to (256*extra charset number); hexadecimal
- offsetting cannot access additional charsets. Naturally,
- offsets within these charsets can be set as well by adding the
- desired offset value to these numbers.
- These commands can also take string inputs in place of
- hard-coded filenames.
- <a class="helplink" href="#PARTIAL.HLP__par">Partial Character Sets</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMAND2.HLP___t5"><span class="fA ">TELEPORT PLAYER "string" # #</span></a>
- Teleports the player to the given board at the stated x,y
- coordinates. This happens instantaneously, even if this causes a
- move between boards.
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMAND2.HLP___c4"><span class="fA ">CHANGE OVERLAY [color] [char] [color] [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___c5"><span class="fA ">CHANGE OVERLAY [color] [color]</span></a>
- All of the stated character and color on the overlay are
- changed to the new character and color. The second form doesn't
- care about the character, only the color.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helpanchor" name="COMMAND2.HLP___m0"><span class="fA ">MOVE ALL [color] [thing] [param] [dir]</span></a>
- All instances of the stated thing with the color and parameter
- given are moved in the given direction.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___o1"><span class="fA ">OPEN [dir]</span></a>
- If there is a gate or door in the given direction, it will
- be opened. If the door is going to open towards the Robot, the
- Robot will be pushed out of the way if necessary and possible.
- It is suggested to wait a couple cycles before then continuing
- on through the door. (Gates aren't a problem.)
- If the gate or door is locked, it will be treated as if the
- player attempted to open it. This means that whether the door is
- opened or not depends on the player's held keys, and if the
- Robot unlocks the door, the player will lose the relevant key.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___m7"><span class="fA ">MOD SAM # #</span></a>
- Plays a sample (instrument) from the current module file. The
- first number states the frequency at which to play it; the
- second is the number of the sample, from 1 on.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMAND2.HLP___l0"><span class="fA ">LOCKSCROLL</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___u2"><span class="fA ">UNLOCKSCROLL</span></a>
- Locks or unlocks scrolling on the current board. When scrolling
- is locked, the view will remain showing the same thing, even if
- the player moves. The screen will not scroll.
- <a class="helpanchor" name="COMMAND2.HLP___c0"><span class="fA ">CHAR EDIT [char] # # # # # # # # # # # # # #</span></a>
- Changes the appearance of the given character, using a 14-number
- code of 8-bit numbers derived from which pixels are set per
- horizontal line. To insert these codes easily, use F5 in the
- Robot editor, select the desired character, and press ESC.
- <a class="helpanchor" name="COMMAND2.HLP___m5"><span class="fA ">MOD FADE IN "file"</span></a>
- Fades in the stated module/OGG/WAV music file, from 0 volume to
- 255 volume. These files also can be loaded from a subdirectory
- with the syntax of ""dir"\"file"" or ""dir"/"file"" (without
- the inner quotes).
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMAND2.HLP___m6"><span class="fA ">MOD FADE OUT</span></a>
- Fades out the current module/OGG/WAV music file, from the
- current volume to 0 volume. Although the mod will be inaudible,
- it will still be the current music file after the fade out.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMAND2.HLP___m4"><span class="fA ">MOD FADE # #</span></a>
- Fades the current module/OGG/WAV music file to a given volume
- at the given rate. The first number is the target volume, the
- second number is the speed at which to fade. All negative
- numbers and numbers over 255 will wrap around.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMAND2.HLP___m2"><span class="fA ">MISSILECOLOR [color]</span></a>
- Changes the color of all missiles fired from that point on.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMAND2.HLP___pB"><span class="fA ">PUSH [dir]</span></a>
- Pushes anything in the given direction one space forward, if
- the object in that direction is pushable. The Robot itself does
- not move.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___sL"><span class="fA ">SET EDGE COLOR [color]</span></a>
- Changes the color of the edging shown around the viewport.
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMAND2.HLP___sM"><span class="fA ">SET MAXHEALTH #</span></a>
- Changes the player's health limit, or maximum health rating.
- <a class="helpanchor" name="COMMAND2.HLP___w2"><span class="fA ">WAIT MOD FADE</span></a>
- Waits for the module/OGG/WAV music to finish its fading. (see
- MOD FADE IN, MOD FADE OUT, and MOD FADE)
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helplink" href="#COMMAND2.HLP___m5"><span class="fA ">MOD FADE IN "file"</span></a>
- <a class="helplink" href="#COMMAND2.HLP___m6"><span class="fA ">MOD FADE OUT</span></a>
- <a class="helplink" href="#COMMAND2.HLP___m4"><span class="fA ">MOD FADE # #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___w3"><span class="fA ">WAIT PLAY</span></a>
- Waits for all queued sound effects to finish playing.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMAND2.HLP___a2"><span class="fA ">ASK "string"</span></a>
- Brings up a dialog box asking the player a question. The player
- can select YES or NO. The Robot is then sent to either the YES
- or NO label, depending on the choice. If the player presses
- ESC, the NO label is used.
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMAND2.HLP___a3"><span class="fA ">AVALANCHE</span></a>
- Enacts the potion/ring effect, Avalanche, placing boulders
- randomly about the board. Often precedes the CHANGE c?? Boulder
- p?? to c?? Explosion p?? command.
- <a class="helplink" href="#BUILTINS.HLP__prx">Potion and Ring Effects</a>
- <a class="helpanchor" name="COMMAND2.HLP___b4"><span class="fA ">BECOME LAVAWALKER</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___b2"><span class="fA ">BECOME NONLAVAWALKER</span></a>
- Sets whether the current Robot can or cannot move on lava.
- Robots can always move over fire.
- <a class="helpanchor" name="COMMAND2.HLP___b6"><span class="fA ">BLIND #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___f1"><span class="fA ">FIREWALKER #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___f4"><span class="fA ">FREEZETIME #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___sS"><span class="fA ">SLOWTIME #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___w6"><span class="fA ">WIND #</span></a>
- The stated potion/ring effect activates for the given number of
- cycles. Potion/ring effects are global; that is, they affect the
- entire world. The only exception is the global Robot; FREEZETIME
- and SLOWTIME commands do not affect it.
- <a class="helplink" href="#THEGLOBL.HLP__gbl">The Global</a>
- <a class="helplink" href="#BUILTINS.HLP__prx">Potion and Ring Effects</a>
- <a class="helpanchor" name="COMMAND2.HLP___c3"><span class="fA ">CHANGE CHAR ID # [char]</span></a>
- Changes the character/color/number at the stated (numeric)
- location within the CHAR ID table. The CHAR ID table is
- internal and is covered in another section.
- <a class="helplink" href="#CHANGECH.HLP__1st">CHANGE CHAR ID - The CHAR ID Table</a>
- <a class="helpanchor" name="COMMAND2.HLP___c6"><span class="fA ">CHANGE SFX # "string"</span></a>
- The sound effect referenced by the given number is changed to
- the new string. The numbers refer to the sound events editable
- through ALT+F.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">Sound and Music</a>
- <a class="helpanchor" name="COMMAND2.HLP___c8"><span class="fA ">CHANGE THIN ARROW CHAR [dir] [char]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___c7"><span class="fA ">CHANGE THICK ARROW CHAR [dir] [char]</span></a>
- Changes the character used to represent thin arrows (for guns)
- or thick arrows (for pushers and spikes) for the specified
- direction.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___iP"><span class="fA ">INPUT STRING "string"</span></a>
- Asks the player to input a string, presenting the given string
- as a prompt. The inputted string is stored in memory. This
- string can be displayed within box messages or on the message
- row by using &INPUT& within a message. Inputted strings are
- local to the current board.
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMAND2.HLP___iD"><span class="fA ">IF STRING "string" "label"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___iF"><span class="fA ">IF STRING NOT "string" "label"</span></a>
- Jumps to the given label if the inputted string is or is not
- equal to the given string. Case is ignored.
- <a class="helpanchor" name="COMMAND2.HLP___iE"><span class="fA ">IF STRING MATCHES "string" "label"</span></a>
- If the string matches a given pattern, jump to the given label.
- (Case is ignored.) The pattern is a series of characters and
- symbols to match. Characters must match exactly. The following
- symbols apply:
- # matches any number from 0-9
- _ matches any letter from A-Z or a-z
- ? matches any character
- * matches the remainder of the input string
- <a class="helpanchor" name="COMMAND2.HLP___i9"><span class="fA ">IF FIRST STRING "string" "label"</span></a>
- If the first word in the inputted string (i.e. everything up
- to the first space (char 32) or end of input) matches the given
- string, jump to the given label.
- <a class="helpanchor" name="COMMAND2.HLP___cB"><span class="fA ">CLIP INPUT</span></a>
- This command chops off the first word of the inputted string
- (everything before and including the first instance of a
- space, aka char 32). For example, "Hello there" will now read
- in memory as "there".
- <a class="helpanchor" name="COMMAND2.HLP___iM"><span class="fA ">INC "$string" "text"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___iN"><span class="fA ">INC "$string" "$string2"</span></a>
- This command appends the given text or string to the end of a
- given string.
- <a class="helpanchor" name="COMMAND2.HLP___dA"><span class="fA ">DEC "$string" #</span></a>
- This command clips the given string by the amount of characters
- given. Decreasing by negative numbers will not add characters to
- the string.
- <a class="helpanchor" name="COMMAND2.HLP___iO"><span class="fA ">IF "$string" (equality) # "label"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___iK"><span class="fA ">IF "$string" (equality) "text" "label"</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___iL"><span class="fA ">IF "$string" (equality) "$string2" "label"</span></a>
- These commands jump to a given label if the string matches the
- given equality conditions (ONLY equal or not equal; others such
- as less than are automatically parsed as FALSE). These commands
- compare the given string to a number, a line of text, or
- another string respectively.
- <a class="helpanchor" name="COMMAND2.HLP___iG"><span class="fA ">IF c?? Sprite_Colliding pNN x y "label"</span></a>
- This command determines whether the sprite numbered NN is
- colliding at the location (x,y); if it is, the program goes to
- the given label.
- <a class="helpanchor" name="COMMAND2.HLP___iH"><span class="fA ">IF c?? Sprite pNN x y "label"</span></a>
- This command checks if the sprite numbered NN is currently at
- the location (x,y); if it is, the program goes to the given
- label. For multi-character sprites, the label is jumped to if
- any part of the sprite is at the given coordinates.
- <a class="helpanchor" name="COMMAND2.HLP___cF"><span class="fA ">COLOR INTENSITY # PERCENT</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___cG"><span class="fA ">COLOR INTENSITY # # PERCENT</span></a>
- The first command changes the intensity of the entire palette
- from 0 to 255 percent (100 percent is a palette's default). The
- second command only changes one color, stated by number.
- <a class="helpanchor" name="COMMAND2.HLP___cK"><span class="fA ">COPY CHAR [char] [char]</span></a>
- The character picture of the first character is copied to the
- second character.
- <a class="helpanchor" name="COMMAND2.HLP___d5"><span class="fA ">DISABLE MESG EDGE</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___e7"><span class="fA ">ENABLE MESG EDGE</span></a>
- Disables or enables the edging on the message row. When
- enabled, all messages have a space (char 32) tacked onto each
- end for display clarity. This is enabled by default.
- <a class="helpanchor" name="COMMAND2.HLP___d6"><span class="fA ">DISABLE SAVING</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___e8"><span class="fA ">ENABLE SAVING</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___e9"><span class="fA ">ENABLE SENSORONLY SAVING</span></a>
- Disables or enables manual saving on this board, or enables
- manual saving on sensors only.
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors</a>
- <a class="helpanchor" name="COMMAND2.HLP___f3"><span class="fA ">FLIP CHAR [char] [dir]</span></a>
- The character picture of the stated character is flipped
- vertically if the direction is north/south, or horizontally if
- the direction is east/west.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___o2"><span class="fA ">OVERLAY ON</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___o3"><span class="fA ">OVERLAY STATIC</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___o4"><span class="fA ">OVERLAY TRANSPARENT</span></a>
- Turns the overlay on (to normal mode), to static mode, or to
- transparent mode.
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helpanchor" name="COMMAND2.HLP___rE"><span class="fA ">ROTATECW</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___rF"><span class="fA ">ROTATECCW</span></a>
- Rotates all pushable items around the Robot in a clockwise or
- counter-clockwise direction, respectively. This is done in the
- same manner as a CW Rotate or CCW Rotate object.
- <a class="helpanchor" name="COMMAND2.HLP___s4"><span class="fA ">SCROLL CHAR [char] [dir]</span></a>
- The character picture of the stated character is scrolled one
- pixel in the given direction, with wraparound in effect. This
- command will not work as expected in SMZX modes.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___s5"><span class="fA ">SCROLLARROW COLOR [color]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___s6"><span class="fA ">SCROLLBASE COLOR [color]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___s7"><span class="fA ">SCROLLCORNER COLOR [color]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___s8"><span class="fA ">SCROLLPOINTER COLOR [color]</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___s9"><span class="fA ">SCROLLTITLE COLOR [color]</span></a>
- Changes the color used to represent a specific element of the
- Scroll and box-message system:
- ARROW = The arrows used to denote options
- BASE = The overall box and text color
- CORNER = The color of the corners of the box, and of the
- options in the option box at the bottom
- POINTER = The color of the pointers on the left and right
- TITLE = The color of the scroll/box title
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMAND2.HLP___s0"><span class="fA ">SCROLLVIEW [dir] #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___sA"><span class="fA ">SCROLLVIEW POSITION # #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___r0"><span class="fA ">RESETVIEW</span></a>
- The first two commands scroll the current view a number of
- spaces in one direction or until the given coordinates are in
- the upper-left corner. RESETVIEW resets the view to normal,
- showing the player in the center of the screen when possible.
- <a class="helplink" href="#COMMANDS.HLP__dir">Directions</a>
- <a class="helpanchor" name="COMMAND2.HLP___sK"><span class="fA ">SET COLOR # # # #</span></a>
- The given color (stated by the first number) is changed to the
- RGB values of the next three numbers. The RGB values must range
- from 0 to 63. These are the same numbers shown in the palette
- editor.
- <a class="helpanchor" name="COMMAND2.HLP___sU"><span class="fA ">STATUS COUNTER # "counter"</span></a>
- The status screen counter with the stated position # is changed
- to the given counter. Valid positions for status counters range
- from 1 (top slot) to 6 (bottom slot).
- Status counters have a name limit of 14 characters; if the given
- counter has a name over 14 characters long, this command will be
- ignored.
- <a class="helplink" href="#COUNTERS.HLP__1st">Counters, Built-in Counters and Local Counters</a>
- <a class="helpanchor" name="COMMAND2.HLP___sV"><span class="fA ">SWAP WORLD "file"</span></a>
- Transfers play to the first board in the stated world file.
- All counters, items, keys, strings, etc. are retained from the
- current world, and the target world starts fresh. The target
- file can be the same world that is currently running; this is a
- simple way to "reset" the world while keeping progress in the
- form of items and counters.
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helpanchor" name="COMMAND2.HLP___pE"><span class="fA ">PUT [color] [char] OVERLAY # #</span></a>
- <a class="helpanchor" name="COMMAND2.HLP___w7"><span class="fA ">WRITE OVERLAY [color] "string" # #</span></a>
- Puts the given color/character at the given coordinates on the
- overlay, or writes a message in the given color starting at the
- given coordinates on the overlay.
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helplink" href="#TOVERLAY.HLP__081">Editing and Using the Overlay</a>
- <a class="helplink" href="#COMMANDS.HLP__col">Colors</a>
- <a class="helpanchor" name="COMMAND2.HLP___v1"><span class="fA ">VIEWPORT # #</span></a>
- Moves the viewport's upper-left corner to the given screen
- coordinates. X ranges from 0 to 79, and Y ranges from 0 to 24.
- <a class="helpanchor" name="COMMAND2.HLP___v2"><span class="fA ">VIEWPORT SIZE # #</span></a>
- Changes the size of the viewport. X size must be from 1 to 80,
- and Y size must be from 1 to 25.
- <a class="helplink" href="#COMMANDR.HLP__1st">Command Reference (Part I)</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="BULLETTY.HLP">
- <a class="helpanchor" name="BULLETTY.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Bullet Types</span></p>
- There are three different types of bullets in MegaZeux: Player,
- Enemy, and Neutral. The player shoots Player bullets, enemies
- shoot Enemy bullets, and ricocheted bullets become Neutral
- bullets. A Robot can shoot any type of bullet, according to its
- BULLETTYPE counter, but it defaults to Neutral bullets.
-
- All fired Enemy bullets, even those shot from Robots, become
- Neutral bullets when the option "Enemies' bullets can hurt
- enemies" is set. Only pre-placed Enemy bullets will remain Enemy
- bullets in this case.
- Player bullets can only hurt enemies. Enemy bullets can only
- hurt the player. Neutral bullets can hurt either. Robots go to
- different labels when shot with each one, or to a generic SHOT
- label if there are none of the specific PLAYERSHOT, ENEMYSHOT,
- or NEUTRALSHOT labels.
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="CHANGECH.HLP">
- <a class="helpanchor" name="CHANGECH.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">CHANGE CHAR ID - The CHAR ID Table</span></p>
- The CHAR ID table has many uses. The first area of usage - the
- CHANGE CHAR ID # [char] command - basically changes the value
- (a character, color, or number) of a given type of item. These
- values correspond to the Global Chars or Damage tables from
- Global Info. The first number in the command states what is to
- change. (Note - if noted, the number corresponds to a color or
- damage. Otherwise, it is a character.) These numbers are also
- listed next to things in the Global Edit Chars menus.
- The second area - using the BOARD_ID, BIDx,y or UIDx,y counters
- - will change an actual item instead of that entry's value;
- i.e. these counters transform the actual item (and ONLY that
- item) at a specific pair of coordinates from one type to
- another.
- WARNING: Changing certain CHAR ID values will have decidedly
- special effects:
- <span class="fA ">*</span><span class="fF ">Changing the value of any Custom type will turn ALL of that</span>
- type into the given character; same with text.
- <span class="fA ">*</span><span class="fF ">There is a special exception to this, though. If the value is</span>
- (char) 255, then all items of that type act like Custom objects
- and assume a character based on their parameter (e.g. p01
- objects will use character 1). This can allow built-ins of the
- same type that display different characters in-game at the same
- time. Some built-ins may show interesting effects if set to
- this, such as gaining animation frames.
- <span class="fA ">*</span><span class="fF ">Changing the CHAR IDs of objects with animations or four</span>
- directional characters will fix ALL animations/chars of that
- object type to the given character.
- <span class="fA ">*</span><span class="fF ">It is inadvisable to use any UNUSED values.</span>
- <span class="fA ">*</span><span class="fF ">Using CHAR ID to change between actual items only works</span>
- with values <122. For example, changing something into Ice by
- setting BOARD_ID to 160 will not work, but setting BOARD_ID to
- 25 will. However, there is no such restriction with changing
- CHAR ID table values using CHANGE CHAR ID.
- <span class="fA ">*</span><span class="fF ">Damage values start at 327. Not all values are listed, because</span>
- technically you can assign damage values for things that cannot
- give damage (i.e. pretty much everything not listed in the
- table). If you really want to manipulate damage values for such
- items, to find the CHAR ID number for an item, just add 327 to
- it.
- Number Changes
- ------ -------
- 0 Space
- 1 Normal
- 2 Solid
- 3 Tree
- 4 Line
- 5 Custom Block
- 6 Breakaway
- 7 Custom Break
- 8 Boulder
- 9 Crate
- 10 Custom Push
- 11 Box
- 12 Custom Box
- 13 Fake
- 14 Carpet
- 15 Floor
- 16 Tiles
- 17 Custom Floor
- 18 Web
- 19 Thick Web
- 20 Still Water
- 21 N Water
- 22 S Water
- 23 E Water
- 24 W Water
- 25 Ice
- 26 Lava
- 27 Chest
- 28 Gem
- 29 Magic Gem
- 30 Health
- 31 Ring
- 32 Potion
- 33 Energizer
- 34 Goop
- 35 Ammo
- 36 Bomb
- 37 Lit Bomb
- 38 Explosion
- 39 Key
- 40 Lock
- 41 Door
- 42 Open Door
- 43 Stairs
- 44 Cave
- 45 CW Rotate
- 46 CCW Rotate
- 47 Gate
- 48 Open Gate
- 49 Transport
- 50 Coin
- 51 N Moving Wall
- 52 S Moving Wall
- 53 E Moving Wall
- 54 W Moving Wall
- 55 Pouch
- 56 Pusher
- 57 Slider NS
- 58 Slider EW
- 59 Lazer
- 60 Lazer Gun
- 61 Bullet
- 62 Missile
- 63 Fire
- 64 UNUSED
- 65 Forest
- 66 Life
- 67-70 Whirlpool Anim 1-4
- 71 Invis Wall
- 72 Ricochet Panel
- 73 Ricochet
- 74 Mine
- 75 Spike
- 76 Custom Hurt
- 77 Text
- 78 Shooting Fire
- 79 Seeker
- 80 Snake
- 81 Eye
- 82 Thief
- 83 Slimeblob
- 84 Runner
- 85 Ghost
- 86 Dragon
- 87 Fish
- 88 Shark
- 89 Spider
- 90 Goblin
- 91 Spitting Tiger
- 92 Bullet Gun
- 93 Spinning Gun
- 94 Bear
- 95 Bear Cub
- 96 UNUSED
- 97 Missile Gun
- 98 Sprite
- 99 Sprite Collision
- 100 Image File
- 101-121 UNUSED
- 122 Sensor
- 123 Pushable Robot
- 124 Robot
- 125 Sign
- 126 Scroll
- 127 Player
- 128-143 Thin Lines (Web) (see below)
- 144-159 Thick Lines (Thick Web, Lines) (see below)
- 160 Ice
- 161-163 Ice Anim 1-3
- 164-166 Lava Anim 1-3
- 167 Small Ammo (below 10)
- 168 Large Ammo (above or equal to 10)
- 169-175 Lit Bomb Anim 1-7
- 176-183 Energizer Color Anim 1-8
- 184-187 Explosion Colors 1-4
- 188 Horizontal Door
- 189 Vertical Door
- 190-193 CW Rotate Anim 1-4
- 194-197 CCW Rotate Anim 1-4
- 198-229 UNUSED
- 230-233 Transport N Anim 1-4
- 234-237 Transport S Anim 1-4
- 238-241 Transport E Anim 1-4
- 242-245 Transport W Anim 1-4
- 246-249 Transport All-Dir Anim 1-4
- 250 Thick Arrow N (Pusher/Spike)
- 251 Thick Arrow S (Pusher/Spike)
- 252 Thick Arrow E (Pusher/Spike)
- 253 Thick Arrow W (Pusher/Spike)
- 254 Thin Arrow N (Guns)
- 255 Thin Arrow S (Guns)
- 256 Thin Arrow E (Guns)
- 257 Thin Arrow W (Guns)
- 258-261 Horizontal Lazer Anim 1-4
- 262-265 Vertical Lazer Anim 1-4
- 266-271 Fire Anim 1-6
- 272-277 Fire Color Anim 1-6
- 278-281 Life Anim 1-4
- 282-285 Life Color Anim 1-4
- 286 Ricochet Panel \
- 287 Ricochet Panel /
- 288-289 Mine Anim 1-2
- 290-291 Shooting Fire Anim 1-2
- 292-293 Shooting Fire Color Anim 1-2
- 294-297 Seeker Anim 1-4
- 298-301 Seeker Color Anim 1-4
- 302-305 Whirlpool Color Anim 1-4
- 306-309 Player Bullets, NSEW
- 310-313 Neutral Bullets, NSEW
- 314-317 Enemy Bullets, NSEW
- 318-321 Player, NSEW
- 322 Player Color
- 323 Missile Color
- 324 Player Bullet Color
- 325 Neutral Bullet Color
- 326 Enemy Bullet Color
- 353 Lava Damage
- 365 Explosion Damage
- 386 Lazer Damage
- 388 Bullet Damage
- 389 Missile Damage
- 390 Fire Damage
- 402 Spike Damage
- 403 Custom Hurt Damage
- 405 Shooting Fire Damage
- 406 Seeker Damage
- 407 Snake Damage
- 410 Slimeblob Damage
- 411 Runner Damage
- 412 Ghost Damage
- 413 Dragon Damage
- 414 Fish Damage
- 415 Shark Damage
- 416 Spider Damage
- 417 Goblin Damage
- 418 Spitting Tiger Damage
- 421 Bear Damage
- 422 Bear Cub Damage
- To change a character, use the following form:
- <span class="fA ">CHANGE CHAR ID # [char]</span>
- # is the number corresponding to the character that you want to
- change, or a counter representing that number. [char] is the
- character (or counter representing the character) that you wish
- to change it to.
- To change a color, use the following form:
- <span class="fA ">CHANGE CHAR ID # [color]</span>
- # is the same as above, but corresponding to a color. [color]
- is the color or a counter representing the color that you wish
- to change it to.
- To change damage values, use a number or counter in place of
- the [char] or [color].
- After typing in a [color] or damage value, it may change to a
- character representation, but the value will still remain the
- same.
- To change line characters:
- Take the base number for the type of line you wish to change
- (128 for thin, 144 for thick) and add one of the following
- values to represent which sides are connected via other web or
- lines:
- 0 -
- 1 N
- 2 S
- 3 N S
- 4 E
- 5 E N
- 6 E S
- 7 E N S
- 8 W
- 9 W N
- 10 W S
- 11 W N S
- 12 W E
- 13 W E N
- 14 W E S
- 15 W E N S
- <a class="helplink" href="#COMMAND2.HLP___c3">CHANGE CHAR ID # [char]</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="BUILTINL.HLP">
- <a class="helpanchor" name="BUILTINL.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Built-in Labels</span></p>
- Robotic has many built-in labels (messages) that are activated
- on certain external events. Each label, and what triggers it,
- is listed below.
- Subroutine versions of most labels exist. If a built-in label
- has a subroutine version, [#] will be listed to the right of
- its name. If both forms exist, they will both be triggered,
- with the subroutine version being triggered first, and the
- normal version triggered as the subroutine is left.
- Special care is required when dealing with built-in subroutine
- labels; to prevent abuse of the stack, using LOCKPLAYER and/or
- ZAP to keep subroutine calls to an absolute minimum is highly
- advised. Subroutines themselves are explained in another
- section.
- <a class="helplink" href="#SUBROUTE.HLP__sub">Subroutines</a>
- <span class="fE ">TOUCH [#]</span>
- This is sent when the player touches the Robot, that is, when
- the player is next to it and tries moving into it. If the player
- is locked in that direction, this label is not sent.
- <span class="fE ">THUD [#]</span>
- This is sent when the Robot is walking and it runs into a
- non-pushable obstacle. This label is not sent when the obstacle
- is hit during a <span class="fE ">GO [dir] #</span><span class="fF "> or the </span><span class="fE ">/ "string"</span><span class="fF "> command. THUD</span>
- ignores LOCKSELF. This label will be constantly triggered if the
- condition persists.
- <a class="helplink" href="#COMMANDR.HLP___w5">WALK [dir]</a>
- <span class="fE ">EDGE [#]</span>
- This is sent when the Robot is walking and it runs into the
- edge of the board. If EDGE is not found, the Robot is sent to
- THUD. This label is not sent when the edge of the board is hit
- during the <span class="fE ">GO [dir] #</span><span class="fF "> or the </span><span class="fE ">/ "string"</span><span class="fF "> commands. EDGE</span>
- ignores LOCKSELF. This label will be constantly triggered if the
- condition persists.
- <a class="helplink" href="#COMMANDR.HLP___w5">WALK [dir]</a>
- <span class="fE ">BOMBED [#]</span>
- This is sent when the Robot is hit with an explosion.
- <span class="fE ">KEY? [#]</span>
- This is sent when the player presses the given key. ? should be
- replaced with the key to be scanned for. Characters a to z and 0
- to 9 work as expected. Shifted alphabetic characters will NOT
- work, and will actually scan as their non-shifted counterparts.
- Any other character that can be outputted directly, such as ";"
- or "*" or "=", will work, and "key " will detect the space bar.
- Other characters can be entered by pressing F3 and selecting
- them from the grid, but they are usually not guaranteed to work.
- Special-case characters that can work with KEY? are character 8
- (BackSpace), character 9 (Tab), character 27 (Esc), character
- 127 (Delete) and character 13 (Enter, though there's a better
- label just for this mentioned in the very next entry).
- There is another way to scan for key presses - using counters.
- They are called KEY_PRESSED, KEY, and KEY_CODE, and are detailed
- in the Miscellaneous Counters section of the help file.
- <a class="helplink" href="#COUNTERS.HLP__msc">Miscellaneous Counters</a>
- <span class="fE ">KEYENTER [#]</span>
- This is sent when the player presses the Enter key.
- <span class="fE ">INVINCO [#]</span>
- This is sent when the player grabs an energizer.
- <span class="fE ">PUSHED [#]</span>
- This is sent when a pushable Robot is pushed by something other
- than the player.
- <span class="fE ">ENEMYSHOT [#]</span>
- <span class="fE ">PLAYERSHOT [#]</span>
- <span class="fE ">NEUTRALSHOT [#]</span>
- One of these is sent when the Robot is shot, correlating to the
- type of bullet used. If the appropriate label is not found, the
- Robot is sent to SHOT instead.
- <span class="fE ">SHOT [#]</span>
- This is sent when the Robot is shot by a bullet and the more
- specific label cannot be found.
- <span class="fE ">PLAYERHIT [#]</span>
- This is sent when the player is shot with a bullet. If not
- found, the Robot is sent to PLAYERHURT instead.
- <span class="fE ">PLAYERHURT [#]</span>
- This is sent when the player is hurt by anything other than a
- bullet. Bullets send the Robot to PLAYERHIT, and only send it
- to PLAYERHURT if PLAYERHIT cannot be found.
- <span class="fE ">SPITFIRE [#]</span>
- This is sent when the Robot is hit with shooting fire.
- <span class="fE ">JUSTLOADED</span>
- This is sent when the world was just loaded or restored from a
- saved game. This is also sent upon swapping worlds; in that
- case, it will only trigger if no JUSTENTERED label is set.
- <span class="fE ">JUSTENTERED</span>
- This is sent when the board was just entered or the world was
- just started on this board. This is also sent upon swapping
- worlds; in that case, if no JUSTENTERED label is set,
- JUSTLOADED is triggered instead.
- <span class="fE ">SENSORON</span>
- This is sent by a Sensor when it is stepped upon by the player,
- or the Sensor moves beneath the player.
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors</a>
- <span class="fE ">SENSORTHUD</span>
- This is sent by a Sensor when it tries to move and is blocked.
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors</a>
- <span class="fE ">SENSORPUSHED</span>
- This is sent by a Sensor when it is pushed by something.
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors</a>
- <span class="fE ">LAZER [#]</span>
- This is sent when the Robot is hit with a lazer.
- <span class="fE ">GOOPTOUCHED [#]</span>
- This is sent when the player touches Goop.
- <span class="fE ">YES</span>
- This is sent when the YES button is selected in an ASK box.
- <span class="fE ">NO</span>
- This is sent when either the NO button is selected in an ASK
- box, or when ESC exits an ASK box.
- <a class="helplink" href="#COMMAND2.HLP___a2">ASK "string"</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#SENSORSW.HLP__094">Sensors</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="COUNTERS.HLP">
- <a class="helpanchor" name="COUNTERS.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Counters, Built-in Counters and Local Counters</span></p>
- Counters are built-in variables, or stored values with names.
- Each counter has a name, such as "Yellow" or "Apple Pies" or
- even "100". A counter can hold a value from -2147483648 to
- 2147483647, in most cases. A counter is "active" when it has a
- value other than 0. There can be a practically unlimited amount
- of active counters at any one time, in addition to the built-in
- counters. Counters retain values between different boards.
- Local counters, on the other hand, only hold their values for
- one Robot. These are useful because multiple Robots can set
- local counters with the exact same names without causing
- conflicts. There are several local counters explicitly reserved
- for use; these are the "local" & "local2" through "local32"
- counters.
- To display a counter's number, enclose the counter in
- ampersands. (e.g. &counter&). This displays the counter value
- in decimal. Sometimes hexadecimal is needed, like in certain
- MegaZeux commands. To output a counter number in hex, add a
- + to the front of the enclosed counter (e.g. &+hexcount&).
- Lastly, other MegaZeux commands might require a two-digit
- hex number; for these, add a # to the front of the enclosed
- counter (e.g. &#twodigithex&). Note that in this case, only the
- two most significant digits will be used (e.x. the number
- 'abcdef' becomes 'AB') and single-digit numbers will gain a
- trailing zero (e.x. the number '8' will become '08').
- Also, characters can be used as counters in commands. For
- example: SET "boom" to '0' would come out as SET "boom" to 48.
- It's quite a difference!
- The following is a list of built-in counters, which all have
- special meanings. There are four types of built-in counters:
- Global, which affect everything; Local, which are different for
- each Robot and require special handling for other Robots to
- manipulate; Board, which are specific to the current board; and
- Universal, which persist for the entire time MegaZeux is
- running. Some built-in counters are read-only; a few are
- write-only.
- MegaZeux utilizes a large number of built-in counters to
- maximize flexibility. For this reference, they have been
- divided into distinct sections.
- <a class="helplink" href="#COUNTERS.HLP__ply">Player Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__rob">Robot Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__brd">Board Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__mth">Mathematical Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__fac">File Access Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__spc">Sprite Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__stc">String Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__szc">Super MZX Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__cha">Character Edit Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__chu">Mouse Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__def">Defaults Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__vlc">Vlayer Counters</a>
- <a class="helplink" href="#COUNTERS.HLP__msc">Miscellaneous Counters</a>
- <p class="helpcentered">Player Counters</p><a class="helpanchor" name="COUNTERS.HLP__ply"> </a>
- <span class="fB ">GEMS, AMMO, LOBOMBS, HIBOMBS, COINS, LIVES, HEALTH</span>
- These contain the current number of the stated item that the
- player currently has.
- <span class="fB ">INVINCO</span>
- The number of cycles of invincibility the player currently has.
- <span class="fB ">SCORE</span>
- The player's current score.
- <span class="fB ">PLAYERLASTDIR</span>
- The last direction the player moved: 0 for none, or 1 2 3 4 for
- N S E W. Used to determine ice slippage and certain other
- effects.
- <span class="fB ">PLAYERFACEDIR</span>
- The direction the player is facing: 0 1 2 3 for N S E W. Used
- to determine which player character to display.
- <span class="fB ">PLAYERX (read-only)</span>
- <span class="fB ">PLAYERY (read-only)</span>
- The x or y coordinate of the player, respectively.
- <p class="helpcentered">Robot Counters</p><a class="helpanchor" name="COUNTERS.HLP__rob"> </a>
- <span class="fB ">PLAYERDIST (read-only, local)</span>
- The distance from the Robot to the player, in spaces. The sum
- of HORIZPLD and VERTPLD.
- <span class="fB ">HORIZPLD (read-only, local)</span>
- <span class="fB ">VERTPLD (read-only, local)</span>
- The horizontal or vertical distance from the Robot to the
- player, in spaces.
- <span class="fB ">THISX (read-only, local)</span>
- <span class="fB ">THISY (read-only, local)</span>
- The current X or Y coordinate of the Robot. Affected by
- prefixes - If a command that uses THISX and THISY is prefaced
- with a REL PLAYER command, THISX and THISY will be generated
- based on the player's current position. For example, if the
- player is at (2,2) and the Robot is at (5,5), THISX and THISY
- will be 3. If the player is at (8,8), THISX and THISY will be
- -3. If a command that uses THISX and THISY is prefaced with
- a REL COUNTERS command, THISX and THISY will be generated
- based on XPOS and YPOS. Basically, THISX and THISY will be
- set to THISX-XPOS and THISY-YPOS.
- <a class="helplink" href="#COMMAND2.HLP__pre">REL COUNTERS</a>
- <a class="helplink" href="#COMMAND2.HLP___r2">REL PLAYER</a>
- <span class="fB ">BULLETTYPE (local)</span>
- The current type of bullet shot by the Robot: 0 for Player, 1
- for Neutral, and 2 for Enemy. Technically, this counter can
- hold any number from 0 to 255, but only 0, 1 and 2 have
- defined behavior. The others essentially set the Robot to shoot
- Enemy bullets, if actually used to affect shot bullets.
- <a class="helplink" href="#BULLETTY.HLP__1st">Bullet Types</a>
- <span class="fB ">COMMANDS</span>
- The number of commands executed per cycle (40 is default). This
- number is global. It can severely slow MegaZeux if set too high
- and coupled with poor coding (especially busy loops lacking
- cycle-ending commands).
- <span class="fB ">LOOPCOUNT (local)</span>
- The counter used for looping commands in Robotic - LOOP START,
- LOOP #, and ABORT LOOP.
- <a class="helplink" href="#COMMANDR.HLP___lC">LOOP START</a>
- <span class="fB ">ROBOT_ID (read-only, local)</span>
- The internal ID of the Robot.
- <span class="fB ">RID<Robot name> (read-only)</span>
- <span class="fB ">ROBOT_ID_<Robot name> (read-only)</span>
- Both of these give the robot_id number of the given named
- Robot. In the case of multiple robots with the same name, the
- ID number corresponds to only one of them (the one with the
- largest robot_id). If no robots have the name, or if the name
- in question only belongs to the global Robot, -1 is given.
- BEWARE: The existence of this counter makes it impossible to
- use words which start with "rid" as counters. The port will NOT
- fall through and give the values of any counter that starts
- with "rid"; instead, it ends at -1 (since the Robot the counter
- is trying to find, like "dles" (for "riddles"), will most
- likely not exist). Older games will allow this, but only for
- compatibility reasons.
- <a class="helpanchor" name="COUNTERS.HLP__rnc"> </a>
- <span class="fB ">Rn.<counter></span>
- Contains the value of the given counter (without the angle
- brackets) in the Robot with the robot_id number n. If no Robot
- exists with this robot_id, the counter will return -1.
- <span class="fB ">THIS_COLOR (read-only, local)</span>
- <span class="fB ">THIS_CHAR (read-only, local)</span>
- The current color and character of the Robot, respectively.
- <span class="fB ">LAVA_WALK (local)</span>
- Controls whether the Robot can walk on lava or not. Setting
- this to 1 is the equivalent of using the BECOME LAVAWALKER
- command. Setting it to 0 is the same as BECOME NONLAVAWALKER.
- Like BULLETTYPE, this counter can hold any value from 0 to 255,
- but only 0 and 1 have defined behavior. This was a popular
- local counter before the local counters were plentiful, as most
- Robots didn't deal with lava.
- <a class="helplink" href="#COMMANDR.HLP___b4">BECOME LAVAWALKER</a>
- <span class="fB ">LOCAL (local)</span>
- <span class="fB ">LOCAL2 (local)</span>
- ..
- <span class="fB ">LOCAL32 (local)</span>
- The non-special local counters each Robot can use. In effect,
- any number can be used, not just 2-32; the counter accessed by
- it would be N%32 (so, for example, any change to "local0" would
- have the same effect as changing "local32"). LOCAL is the same
- as LOCAL1.
- <span class="fB ">GOOP_WALK (local)</span>
- Controls whether the Robot can walk on goop or not. A value of 0
- prevents walking on goop; a non-zero value allows it. This
- counter has an effective range of 0 to 255.
- <p class="helpcentered">Board Counters</p><a class="helpanchor" name="COUNTERS.HLP__brd"> </a>
- <span class="fB ">BOARD_ID</span>
- Reads or alters the CHAR ID value of the object located at
- "board_x" "board_y".
- <a class="helplink" href="#CHANGECH.HLP__1st">CHANGE CHAR ID - The CHAR ID Table</a>
- <span class="fB ">BOARD_PARAM</span>
- Reads or alters the parameter of the object located at
- "board_x" "board_y".
- <span class="fB ">BOARD_W (read-only, board)</span>
- <span class="fB ">BOARD_H (read-only, board)</span>
- The current board's width and height, respectively.
- <span class="fB ">TIME (board)</span>
- The current timer value, between 0 and the time limit for the
- current board. If there is no time limit set, setting this
- counter will cause the timer to tick down but turn off after it
- runs out.
- <span class="fB ">TIMERESET (board)</span>
- The time limit for the current board. 0 for no time limit.
- NOTE: This timer was erroneously called "TIMERSET" in some
- versions. MZX will NOT use TIMERSET as a synonym for this
- counter in current versions.
- <span class="fB ">SCROLLEDX (board, read-only)</span>
- <span class="fB ">SCROLLEDY (board, read-only)</span>
- The top-left corner of the screen's x or y coordinates,
- respectively.
- <span class="fB ">BOARD_X (board)</span>
- <span class="fB ">BOARD_Y (board)</span>
- <span class="fB ">BOARD_COLOR (read-only, board)</span>
- <span class="fB ">BOARD_CHAR (read-only, board)</span>
- Set BOARD_X and BOARD_Y to the x,y coordinates of a cell on the
- current board, and BOARD_COLOR and BOARD_CHAR will automatically
- hold the color and character values for that cell, respectively.
- One thing to note is that BOARD_COLOR will not take background
- color 0's transparency into account. For example, assuming
- default colors, if a white-on-black Robot walks onto a
- yellow-on-blue floor tile, the Robot appears as white-on-blue on
- the screen, but this counter will still report it as
- white-on-black instead of the displayed colors.
- <span class="fB ">BCHx,y (read-only, board)</span>
- Allows the reading of single characters to the board with
- regards to coordinates x,y; the comma must be included.
- <span class="fB ">BCOx,y (read-only, board)</span>
- Allows the reading of single colors to the board with regards
- to coordinates x,y; the comma must be included. Much like
- BOARD_COLOR, BCOx,y will not take transparency into account.
- <span class="fB ">BIDx,y (board)</span>
- Allows reading and writing of the CHAR ID of an object on the
- board at the coordinates x,y; the comma must be included.
- <span class="fB ">BPRx,y (board)</span>
- Allows reading and writing parameter values of an object on the
- board at the coordinates x,y; the comma must be included.
- <span class="fB ">UCHx,y (read-only, board)</span>
- Allows the reading of single characters on the under layer at
- the coordinates x,y; the comma must be included.
- <span class="fB ">UCOx,y (read-only, board)</span>
- Allows the reading of single colors on the under layer at the
- coordinates x,y; the comma must be included.
- <span class="fB ">UIDx,y (board)</span>
- Allows reading and writing of the CHAR ID of an object on the
- under layer at the coordinates x,y; the comma must be included.
- <span class="fB ">UPRx,y (board)</span>
- Allows reading and writing parameter values of an object on the
- under layer at the coordinates x,y; the comma must be included.
- All of the above four under layer counters will fail if any
- floor-type object (fake, floor, carpet, ice, lava, etc) is
- currently occupying the board layer at the given coordinates.
- <span class="fB ">OVERLAY_X (board)</span>
- <span class="fB ">OVERLAY_Y (board)</span>
- <span class="fB ">OVERLAY_CHAR (read-only, board)</span>
- <span class="fB ">OVERLAY_COLOR (read-only, board)</span>
- These work in the same way as the BOARD_xxx counters above, but
- deal with the overlay instead.
- <span class="fB ">OCHx,y (read-only, board)</span>
- Allows the reading of single characters on the overlay at the
- coordinates x,y; the comma must be included.
- <span class="fB ">OCOx,y (read-only, board)</span>
- Allows the reading of single colors on the overlay at the
- coordinates x,y; the comma must be included.
- <span class="fB ">OVERLAY_MODE (read-only, board)</span>
- Shows the state of the overlay. 0 is off, 1 is normal, 2 is
- static and 3 is transparent.
- <span class="fB ">MOD_FREQUENCY (board)</span>
- Controls the frequency (in Hz) of the currently playing module/
- OGG music. Note that this value is NOT saved by save files, so
- if necessary, it needs set again after a save gets loaded.
- <a class="helplink" href="#SOUNDEFX.HLP__frq">SAM, OGG, MOD and WAV Frequencies</a>
- <span class="fB ">MOD_ORDER (board)</span>
- Controls the current mod order of the currently playing mod.
- <span class="fB ">MOD_POSITION (board)</span>
- Controls the current row in tracked modules, or the current PCM
- sample in other types of audio files.
- <span class="fB ">MOD_LENGTH (read-only, board)</span>
- Displays the length of the currently playing mod. This counter's
- value shows number of rows for module files and number of
- samples for WAV/OGG files.
- <p class="helpcentered">Mathematical Counters</p><a class="helpanchor" name="COUNTERS.HLP__mth"> </a>
- <span class="fB ">ABSn</span>
- Gives the absolute value of the number n.
- <span class="fB ">SQRTn</span>
- Gives the integer approximation of the square root of n. Results
- are truncated, not rounded.
- <span class="fB ">MINx,y</span>
- Takes the numbers x and y and outputs the smaller number. The
- comma is required.
- <span class="fB ">MAXx,y</span>
- Takes the numbers x and y and outputs the larger number. The
- comma is required.
- <span class="fB ">MULTIPLIER</span>
- Multiplies values output by the normal trigonometric functions
- (sin, cos, tan) by the given number.
- <span class="fB ">DIVIDER</span>
- Divides the number given to the inverse trigonometric functions
- (asin, acos, atan) by the given number.
- <span class="fB ">C_DIVISIONS</span>
- Determines how many divisions the base circle in MegaZeux's
- trigonometric functions is divided.
- <span class="fB ">SINn</span>
- <span class="fB ">COSn</span>
- <span class="fB ">TANn</span>
- <span class="fB ">ASINn</span>
- <span class="fB ">ACOSn</span>
- <span class="fB ">ATANn</span>
- <span class="fB ">ARCTANdy,dx</span>
- Accesses MegaZeux's sine, cosine, tangent, inverse sine,
- inverse cosine, inverse tangent, and atan2 functions
- (respectively).
- <a class="helplink" href="#TRIG.HLP__tri">Trigonometric Functions</a>
- <p class="helpcentered">File Access Counters</p><a class="helpanchor" name="COUNTERS.HLP__fac"> </a>
- <span class="fB ">FREAD_OPEN (function)</span>
- <span class="fB ">FWRITE_OPEN (function)</span>
- Opens a file for reading from or writing to, respectively. The
- syntax is as such:
- set "file.ext" to "FREAD_OPEN"
- FREAD_OPEN will also read subdirectories with the given syntax:
- set "dir" to "FREAD_OPEN"
- <span class="fB ">FWRITE_MODIFY (function)</span>
- This opens an existing file for reading without overwriting it,
- starting at the beginning of the file.
- <span class="fB ">FWRITE_APPEND (function)</span>
- This opens a file for writing at the END of the file. Note that
- all FWRITE_POS functionality is ignored in this mode.
- <span class="fB ">FREAD_COUNTER (function)</span>
- Reads four bytes from the open file.
- <span class="fB ">FWRITE_COUNTER (function)</span>
- Writes four bytes to the open file.
- NOTE: The above two counters will have different functionality
- in worlds made before MZX 2.82 (in the old implementation, they
- use two bytes and are unsigned). This is purely for
- compatibility reasons.
- <span class="fB ">FREAD_POS</span>
- <span class="fB ">FWRITE_POS</span>
- The current reading or writing position of the accessed file.
- 0 is the beginning position; when no file is loaded, the
- relevant counter is -1. If set to -1, the position is set to the
- end of the file.
- <span class="fB ">FREAD_DELIMITER</span>
- <span class="fB ">FWRITE_DELIMITER</span>
- The character considered the terminator for fread and fwrite
- operations, respectively.
- <span class="fB ">FWRITE (function)</span>
- <span class="fB ">FREAD (function)</span>
- Writes strings to and read strings from, respectively, the open
- file.
- <span class="fB ">SAVE_ROBOT (function)</span>
- <span class="fB ">LOAD_ROBOT (function)</span>
- <span class="fB ">SAVE_ROBOTn (function)</span>
- <span class="fB ">LOAD_ROBOTn (function)</span>
- Saves or loads Robotic code to or from plaintext files,
- respectively. The first forms save/load the current Robot,
- while the second forms save/load the Robot with the Robot ID of
- the number n.
- With the LOAD_ROBOT functions, one can also load a string as a
- Robot instead of a text file.
- <span class="fB ">SAVE_BC (function)</span>
- <span class="fB ">LOAD_BC (function)</span>
- <span class="fB ">SAVE_BCn (function)</span>
- <span class="fB ">LOAD_BCn (function)</span>
- Saves or loads Robotic code to or from bitcode files,
- respectively. The first forms save/load the current Robot,
- while the second forms save/load the Robot with the Robot ID of
- the number n.
- Keep in mind that due to slated changes in MegaZeux, saving out
- Robots (in either text or bytecode form) is considered a
- deprecated function and may be removed entirely in the future.
- <span class="fB ">SAVE_GAME (function)</span>
- <span class="fB ">LOAD_GAME (function)</span>
- Saves or loads MZX savegames, respectively.
- <span class="fB ">SAVE_COUNTERS (function)</span>
- <span class="fB ">LOAD_COUNTERS (function)</span>
- Saves or loads MZX counter files, respectively.
- <a class="helplink" href="#FILEACSS.HLP__fil">File Access</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <p class="helpcentered">Sprite Counters</p><a class="helpanchor" name="COUNTERS.HLP__spc"> </a>
- <span class="fB ">SPR_CLISTn (read-only)</span>
- A list of flagged collisions after a collision test was
- performed. Values of n from 0 to (SPR_COLLISIONS - 1) are
- valid. If the foreground collided, SPR_CLIST0 is always set to
- -1 to indicate this.
- <span class="fB ">SPR_COLLISIONS (read-only)</span>
- The number of sprites/foreground collisions listed in
- SPR_CLISTn.
- <span class="fB ">SPR_NUM</span>
- When using p?? for a sprite this value is referenced. When
- IF c?? Sprite p?? X Y is used, SPR_NUM is used to match the
- highest sprite that's checked; i.e. it will check for all
- sprite parameters from p00 to SPR_NUM, and will return true on
- the first match.
- <span class="fB ">SPR_YORDER (write-only)</span>
- If set to 1, the sprites are drawn in order of lowest SPRn_CY
- value to highest. Otherwise, the sprites are drawn in order of
- their numbers.
- <span class="fB ">SPRn_CCHECK (write-only)</span>
- If set to 1, overlapping char 32s will not cause a collision
- between sprites or the foreground. If set to 2, char 32s and
- blank chars will also not collide, and blank characters will
- not be drawn. If set to 3, the given unbound sprite will undergo
- pixel-precise collision checks, and transparent colors will not
- cause a collision. Setting to 0 will cancel any previously set
- ccheck modes for that given sprite.
- <span class="fB ">SPRn_CWIDTH</span>
- <span class="fB ">SPRn_CHEIGHT</span>
- The dimensions of the collision box around a sprite. (X and Y
- dimensions, respectively)
- <span class="fB ">SPRn_CLIST (write-only)</span>
- Setting this counter to any value will perform a collision test
- on sprite n against its current location.
- <span class="fB ">SPRn_CX</span>
- <span class="fB ">SPRn_CY</span>
- The location, relative to the sprite's upper left corner, of
- the sprite's collision box (X and Y coordinates, respectively).
- <span class="fB ">SPRn_OFF (write-only)</span>
- Turns the given sprite off if it is on.
- <span class="fB ">SPRn_OVERLAID (write-only)</span>
- <span class="fB ">SPRn_OVERLAY (write-only)</span>
- If either is set to 1, these draw the given sprite n over the
- overlay as opposed to underneath. Note that this has different
- behavior depending on whether unbound sprites are present. If
- there are any unbound sprites active, all overlaid sprites will
- be drawn above all non-overlaid sprites (as well as over the
- overlay). If unbound sprites are not in use, overlaid sprites
- will be drawn above the overlay, but will otherwise respect the
- standard sprite draw order.
- <span class="fB ">SPRn_REFX</span>
- <span class="fB ">SPRn_REFY</span>
- Where the sprite's appearance is stored - either on the board
- or the vlayer (see SPRn_VLAYER). Whatever this looks like at
- this position is what the sprite will look like when drawn,
- including the colors if c?? is used when placing the sprite.
- <span class="fB ">SPRn_SETVIEW (write-only)</span>
- Setting this to 1 will cause the viewport to be centered around
- sprite n. This is useful for scrolling the screen, along with
- sprite based players.
- <span class="fB ">SPRn_STATIC (write-only)</span>
- If set to 1, makes given sprite n act static (like a static
- overlay, a static sprite always stays in a given position on
- the screen); if this is 0, the sprite scrolls with the board.
- SPRn_STATIC takes in SCROLLEDX and SCROLLEDY as collision
- reference points, as opposed to the normal x,y coordinates.
- <span class="fB ">SPRn_SWAP (write-only)</span>
- Swaps the given sprite n with the sprite number to which this
- function is set.
- <span class="fB ">SPRn_VLAYER (write-only)</span>
- If set to 1, the sprite is referenced from the vlayer instead
- of the board.
- <span class="fB ">SPRn_WIDTH</span>
- <span class="fB ">SPRn_HEIGHT</span>
- The dimensions of the sprite. (x and y dimensions,
- respectively.)
- <span class="fB ">SPRn_X</span>
- <span class="fB ">SPRn_Y</span>
- The current position of the sprite. This can be used to set the
- sprite outside the edges of the board, whereas PUT c?? Sprite
- p?? X Y disallows this.
- <span class="fB ">SPRn_UNBOUND</span>
- If set to 1, unbinds the given sprite n from the grid, making
- its coordinates refer to pixel positions instead of tile
- positions. Its dimensions (SPRn_HEIGHT, SPRn_WIDTH) and
- reference coordinates (SPRn_REFX, SPRn_REFY) will still be
- relative to tiles, but its current position (SPRn_X, SPRn_Y)
- and collision box counters (SPRn_CX, SPRn_CY, SPRn_CWIDTH,
- SPRn_CHEIGHT) will adhere to this change. See the Unbound
- Sprites section in the Sprites help for more information.
- <span class="fB ">SPRn_TCOL</span>
- Sets which color provides transparency for a given unbound
- sprite n. Setting to -1 disables transparency for that sprite.
- <span class="fB ">SPRn_OFFSET</span>
- Internally alters any number that refers to a character for a
- given sprite n. In the case of unbound sprites, this number will
- often be a multiple of 256 in order to access an extra charset,
- but offset values within char sets may also be used.
- <a class="helplink" href="#SPRITES.HLP__spr">Sprites</a>
- <p class="helpcentered">String Counters</p><a class="helpanchor" name="COUNTERS.HLP__stc"> </a>
- <span class="fB ">SET "$string" to "BOARD_NAME"</span>
- Sets the given string to the name of the current board.
- <span class="fB ">SET "$string" to "BOARD_SCAN"</span>
- Sets the given string to a line of characters read directly
- from the board starting at "board_x" "board_y" and terminating
- at an asterisk (char 42), any instance of char 0, or after 63
- characters (whichever comes first). This command is
- deprecated; please use copy block to strings instead.
- <span class="fB ">SET "$string" to "INPUT"</span>
- Sets the given string to any input placed for the "input
- string" command.
- <span class="fB ">SET "$string" to "MOD_NAME"</span>
- Sets the given string to the filename of the currently playing
- module.
- <span class="fB ">SET "$string" to "ROBOT_NAME"</span>
- Sets the given string to the name of the Robot this command
- is in.
- <span class="fB ">SET "$string" to "FREAD"</span>
- <span class="fB ">SET "$string" to "FREADn"</span>
- Sets the given string to the contents of the currently open
- file. FREAD stops at the terminator (*, or char 42, by default)
- or at the end of the file. FREADn reads the first n characters
- from the file. You can use FREAD with the #N string splicing
- format to read up to N characters while still terminating on
- the terminator.
- <span class="fB ">SET "$string" to "FWRITE"</span>
- <span class="fB ">SET "$string" to "FWRITEn"</span>
- Places the contents of the given string into the currently open
- file. FWRITE places the entire string, ending it with the
- terminator character (*, or char 42, by default), while FWRITEn
- only places the first n characters. If n goes over the string's
- length, the entire string (and nothing else like whitespace or
- garbage characters) will be placed.
- <p class="helpcentered">Super MZX Counters</p><a class="helpanchor" name="COUNTERS.HLP__szc"> </a>
- <span class="fB ">SMZX_MODE</span>
- Determines whether Super MZX mode is off (0), 1, 2, or 3.
- <span class="fB ">SMZX_Rn</span>
- <span class="fB ">SMZX_Bn</span>
- <span class="fB ">SMZX_Gn</span>
- Changes or reads the value of color n's red/blue/green value,
- respectively. These counters also work outside of SMZX modes;
- in normal mode, numbers 0-15 alter the normal palette while
- 16-31 alter the protected palette.
- <span class="fB ">SMZX_IDXx,y</span>
- Reads or sets the color of a tile with a given color x's yth
- color. For example, <span class="fE ">SET "SMZX_IDX191,0" to 50</span><span class="fF "> would set the</span>
- color number of the base color (color 0 out of 0-3) of a c1a
- (color 191) tile to color 50. This applies to SMZX mode 3 only,
- and only to renderers that support unbound sprites.
- Keep in mind that all re-ordered indices will be set to normal
- values when SMZX_MODE is changed.
- <span class="fB ">SMZX_INDICES (function)</span>
- Loads SMZX indices files. This only applies for SMZX Mode 3.
- <span class="fB ">SMZX_MESSAGE</span>
- Controls whether messages in the message row are displayed with
- SMZX characters and colors in SMZX modes. 1 is yes, 0 is no
- (displays in normal mode); the default value is 1.
- <span class="fB ">SMZX_PALETTE (read-only)</span>
- Loads a Super MZX palette. This counter is deprecated; please
- use load palette instead.
- <p class="helpcentered">Character Edit Counters</p><a class="helpanchor" name="COUNTERS.HLP__cha"> </a>
- <span class="fB ">CHAR_X</span>
- <span class="fB ">CHAR_Y</span>
- <span class="fB ">PIXEL</span>
- Set CHAR_X and CHAR_Y to a pixel location in the char set. You
- can then set the PIXEL counter to one of the following to edit
- the pixel:
- 0 Turns the pixel OFF
- 1 Turns the pixel ON
- 2 Toggles the pixel
- You can also read the counter to see the current state of the
- chosen pixel. A value of 1 denotes that the pixel is set, and 0
- if not.
- The pixel location system works on a 32 x 8 grid of characters,
- exactly like the 'Select Character' grid. Each character
- consists of fourteen rows of eight pixels, which gives us 256
- pixels across by 112 pixels down. Since we start counting at 0,
- the top-left pixel of the top-left character (char 0) would be
- 0,0. The bottom-right pixel of the bottom-right character
- (char 255) would be 255,111. However, these counters become
- worthless in SMZX modes.
- <a class="helplink" href="#CHAREDIT.HLP__079">The Character Editor</a>
- <span class="fB ">CHAR_BYTE</span>
- <span class="fB ">CHAR</span>
- <span class="fB ">BYTE</span>
- Set CHAR to a character (0-255) and BYTE to one of the fourteen
- bytes within the char (0-13). You can then read or write that
- byte using the CHAR_BYTE counter. Char_byte values range from
- 0-255, and the meaning of each char_byte setting changes between
- normal mode and SMZX modes. Normal MZX graphics mode sets bytes
- in binary (base 2); SMZX modes use quaternary (base 4).
- It helps to write the number in binary/quaternary first, then
- convert to decimal. Writing the numbers this way helps
- demonstrate that whatever is desired to be set is set. The
- values per pixel decrease going left to right.
- Examples:
- (Normal MZX mode, setting the third, fifth and seventh pixel)
- Binary: 00101010
- -------------
- |128|64|32|16|8|4|2|1|
- -------------
- | 0| 0| 1| 0|1|0|1|0|
- -------------
- Decimal: ((128*0)+(64*0)+(32*1)+(16*0)+(8*1)+(4*0)+(2*1)+(1*0))
- = 42
- Notice that the binary number shows which pixels are on, in
- order.
- (Super MZX Mode, setting first and second pixel to color 2,
- third to color 4 and fourth to color 1)
- Quaternary: 1130
- ------
- |64|16|4|1|
- ------
- | 1| 1|3|0|
- ------
- Decimal: ((64*1)+(16*1)+(4*3)+(1*0)) = 92
- Much like the binary numbers for normal MZX mode, the
- quaternary number shows what color each pixel is in order.
- Here, color values range from 0 to 3.
- <a class="helplink" href="#CHAREDIT.HLP__079">The Character Editor</a>
- <p class="helpcentered">Mouse Counters</p><a class="helpanchor" name="COUNTERS.HLP__chu"> </a>
- <span class="fB ">MOUSEX</span>
- <span class="fB ">MOUSEY</span>
- Reads/sets the mouse cursor's x or y-coordinates (respectively)
- relative to the screen in characters.
- <span class="fB ">MOUSEPX</span>
- <span class="fB ">MOUSEPY</span>
- Reads/sets the mouse cursor's x or y-coordinates (respectively)
- in pixels. Always scales to terms of 640x350, regardless of the
- actual resolution or current SMZX mode.
- <span class="fB ">MBOARDX (read-only, board)</span>
- <span class="fB ">MBOARDY (read-only, board)</span>
- Reads the mouse cursor's x or y-coordinates (respectively)
- relative to the board.
- <span class="fB ">BUTTONS (read-only)</span>
- Reads which mouse buttons are currently being pressed. The
- counter value is based as follows:
- 0 for no input pressed
- +1 for left button
- +2 for right button
- +4 for middle button
- +8 for wheel up
- +16 for wheel down
- +32 for wheel left
- +64 for wheel right
- +128 for extra button 1
- +256 for extra button 2
- E.G., left by itself would output 1, and left+middle would
- output 5 (1 + 4).
- <span class="fB ">CURSORSTATE</span>
- Determines whether the default mouse cursor is on or off (0 is
- off, 1 (or any non-zero value) is on - defaults to off).
- <p class="helpcentered">Defaults Counters</p><a class="helpanchor" name="COUNTERS.HLP__def"> </a>
- <span class="fB ">ENTER_MENU</span>
- Determines whether the built-in status window is loaded when
- the enter key is pressed. 1 (or any non-zero value) is yes, 0
- is no. The default is 1 (yes). If on the title screen, this
- counter is ignored unless in standalone mode.
- <span class="fB ">ESCAPE_MENU</span>
- Determines whether the built-in game exit dialog is loaded when
- the escape key is pressed. 1 (or any non-zero value) is yes, 0
- is no. The default is 1 (yes). If on the title screen, this
- counter is ignored unless in standalone mode.
- <span class="fB ">HELP_MENU</span>
- Determines whether the built-in help window is loaded when the
- F1 key is pressed. 1 (or any non-zero value) is yes, 0 is no.
- The default is 1 (yes). The help menu is still accessible from
- other default dialogs (such as the file menus) unless in
- standalone mode. If on the title screen, this counter is ignored
- unless in standalone mode.
- <span class="fB ">F2_MENU</span>
- Determines whether the built-in MegaZeux options window is
- loaded when the F2 key is pressed. 1 (or any non-zero value) is
- yes, 0 is no. The default is 1 (yes). If on the title screen,
- this counter is ignored unless in standalone mode.
- <span class="fB ">LOAD_MENU</span>
- Determines whether the built-in MegaZeux loadgame window is
- loaded when the F4 key is pressed. 1 (or any non-zero value) is
- yes, 0 is no. The default is 1 (yes). If on the title screen,
- this counter is ignored unless in standalone mode.
- <span class="fB ">BIMESG (write-only)</span>
- Controls built-in game messages (e.g. the message given when
- touching goop); 1 (or any non-zero value) is on while 0 is off.
- The default is 1 (on).
- <span class="fB ">SPACELOCK (write-only)</span>
- Controls whether holding space locks player movement. If 1 (or
- any non-zero value), the player will be locked into place when
- space is held; if 0, the player can move freely when space is
- held, but will be unable to shoot bullets. The default is 1
- (on).
- <p class="helpcentered">Vlayer Counters</p><a class="helpanchor" name="COUNTERS.HLP__vlc"> </a>
- <span class="fB ">VLAYER_WIDTH</span>
- <span class="fB ">VLAYER_HEIGHT</span>
- Sets the width and height of the vlayer, respectively. The
- defaults are 256 for VLAYER_WIDTH and 128 for VLAYER_HEIGHT.
- Setting one will automatically set the other to the maximum
- possible for the current vlayer_size.
- <span class="fB ">VLAYER_SIZE</span>
- Sets the maximum size of the vlayer. The default is 32768.
- Making this larger won't change the values of VLAYER_WIDTH or
- VLAYER_HEIGHT but shrinking it may shrink both - height first,
- then width.
- <span class="fB ">VCHx,y</span>
- Allows reading and writing of single characters to the vlayer
- at the coordinates x,y; the comma must be included.
- <span class="fB ">VCOx,y</span>
- Allows reading and writing of single colors to the vlayer with
- at the coordinates x,y; the comma must be included.
- <a class="helplink" href="#VLAYER.HLP__vla">The Vlayer and Its Uses</a>
- <p class="helpcentered">Miscellaneous Counters</p><a class="helpanchor" name="COUNTERS.HLP__msc"> </a>
- <span class="fB ">MZX_SPEED</span>
- The current game speed (1-16) of MegaZeux. MZX_SPEED 1 is
- processor-bound and executes as many cycles per second as
- possible. Other speeds execute cycles according to this
- formula:
- <span class="fE ">62.5 / (MZX_SPEED - 1) = cycles per second</span>
- Once the speed is set with this counter, the player cannot
- change the speed in the F2 menu until MZX_SPEED is set to 0.
- Setting MZX_SPEED to 0 will not affect the current speed.
- MZX_SPEED will revert back to the default value listed in the
- configuration file upon loading a different game.
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- <span class="fB ">COMMANDS_STOP</span>
- A special counter active only while playtesting in the editor.
- COMMAND_STOP will activate stepping in the Robotic debugger,
- even if the debugger was currently disabled, once the number of
- commands any specific Robot executes in a single cycle exceeds
- COMMAND_STOP's value. By default, COMMAND_STOP holds a value of
- 2000000.
- <span class="fB ">EXIT_GAME</span>
- If this counter is set to a non-zero value, the current
- MegaZeux world will exit to the title screen. This counter does
- nothing on the title screen unless in standalone mode, and if
- standalone mode is ran without a title screen, this counter will
- cause MegaZeux to exit entirely.
- <span class="fB ">PLAY_GAME</span>
- If this counter is set to a non-zero value when MZXRun is in
- standalone mode and on the title screen, the game will be
- started. Instances outside of the title screen and outside of
- MZXRun will be ignored.
- <span class="fB ">CURRENT_COLOR</span>
- <span class="fB ">RED_VALUE</span>
- <span class="fB ">GREEN_VALUE</span>
- <span class="fB ">BLUE_VALUE</span>
- When CURRENT_COLOR is set between 0 and 31 (between 0 and 255
- in Super MZX modes), the other three counters contain the red,
- green and blue values of that color.
- <a class="helplink" href="#SMZXMODE.HLP__095">Super MegaZeux Modes</a>
- <a class="helplink" href="#PALEEDIT.HLP__093">The Palette Editor</a>
- <span class="fB ">INPUT (board)</span>
- The numerical value of the last string inputted.
- <a class="helplink" href="#COMMAND2.HLP___iP">INPUT STRING "string"</a>
- <span class="fB ">INPUTSIZE (board)</span>
- The size, in characters, of the last string inputted.
- <a class="helplink" href="#COMMAND2.HLP___iP">INPUT STRING "string"</a>
- <span class="fB ">DATE_DAY (read-only)</span>
- <span class="fB ">DATE_MONTH (read-only)</span>
- <span class="fB ">DATE_YEAR (read-only)</span>
- Contain the current day, month and year respectively, based on
- the system clock.
- <span class="fB ">TIME_HOURS (read-only)</span>
- <span class="fB ">TIME_MINUTES (read-only)</span>
- <span class="fB ">TIME_SECONDS (read-only)</span>
- Contain the current hour, minute and second respectively, based
- on the system clock, in 24-hour format.
- <span class="fB ">INT</span>
- <span class="fB ">BIT_PLACE</span>
- <span class="fB ">INT2BIN</span>
- Used to manipulate bits within a counter. Set INT to the number
- or counter you wish to edit. Set BIT_PLACE to a number between
- 0 and 15 (which correspond to the bits in a 16-bit signed
- counter), and then set INT2BIN to one of the following to edit
- the bit:
- 1 Sets the bit ON
- 2 Sets the bit OFF
- 3 Toggles the bit
- The edited value is placed into the INT counter. You can also
- read the INT2BIN counter to see the current state of the bit.
- This method of bit manipulation is heavily deprecated in favor
- of expressions (especially considering it only works on 16 bits
- instead of the current 32). Follow the link below to read more.
- <a class="helplink" href="#EXPRESS.HLP__exp">Expressions</a>
- <span class="fB ">KEY_PRESSED (read-only)</span>
- <span class="fB ">KEY</span>
- <span class="fB ">KEY_CODE (read-only)</span>
- KEY_PRESSED lists whether any key (each referenced by a number)
- is currently being held down; for example, on a typical
- keyboard, if the spacebar is being pressed the value of
- key_pressed will be 32. This set of keycodes is the same as the
- ones required for joystick support. Results are unsigned, so
- checking for negative numbers will not work. "Autorepeat stall"
- affects KEY_PRESSED, so if you hold down a key you will get the
- value, then get zeros for a period, then get the values again.
- This is useful for many applications.
- KEY acts like KEY_PRESSED, but lacks autorepeat stall, returns
- uppercase letter values, and retains its value until another key
- is pressed.
- KEY_CODE acts similar to KEY_PRESSED but has different keycodes.
- Its keycode set is more limited, making KEY_PRESSED generally
- preferable.
- <span class="fB ">KEYn (read-only)</span>
- <span class="fB ">KEY_RELEASE (read-only)</span>
- KEYn checks whether the key with the keycode n is pressed; 1
- means yes, 0 means no. KEY_RELEASE tests whether a key is
- released. These display/use the same keycodes as KEY_CODE, but
- do not cause an autorepeat stall. Results are unsigned, so
- checking for negative numbers will not work.
- <span class="fB ">RANDOM_SEED0 (universal)</span>
- <span class="fB ">RANDOM_SEED1 (universal)</span>
- These counters allow reading and controlling MegaZeux's random
- seed. RANDOM_SEED0 controls the low 32 bits of the seed, while
- RANDOM_SEED1 controls the high 32 bits. The random seed is not
- retained by save files.
- <span class="fB ">MAX_SAMPLES</span>
- Sets number of samples that can play at once. -1 sets no limit,
- 0 mutes all samples; -1 is the default setting. The actual
- sample limit will be the smaller of the limit set by this
- counter and the limit set by the max_simultaneous_samples config
- file setting. PC Speaker emulated sounds are unaffected.
- <span class="fB ">XPOS</span>
- <span class="fB ">YPOS</span>
- The X or Y-coordinates (respectively) used by the REL COUNTERS
- command.
- <a class="helplink" href="#COMMAND2.HLP__pre">REL COUNTERS</a>
- <span class="fB ">FIRSTXPOS</span>
- <span class="fB ">FIRSTYPOS</span>
- The X or Y-coordinates (respectively) used by the REL COUNTERS
- FIRST command.
- <a class="helplink" href="#COMMAND2.HLP___r4">REL COUNTERS LAST</a>
- <span class="fB ">LASTXPOS</span>
- <span class="fB ">LASTYPOS</span>
- The X or Y-coordinates (respectively) used by the REL COUNTERS
- LAST command.
- <a class="helplink" href="#COMMAND2.HLP___r7">REL COUNTERS LAST</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="USINGTHE.HLP">
- <a class="helpanchor" name="USINGTHE.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Using the Editor</span></p>
- The Robotic editor is quite simple to use. After selecting your
- Robot's character and name, you will enter the editor screen.
- There are three major sections to the editor screen: The top
- box, showing current statistics; the middle box, showing the
- Robot's program with the current line highlighted in the
- center; and the bottom box, showing the available editing
- commands.
- To edit the Robot, you enter lines just as in editing scrolls.
- Use up and down or PageUp and PageDown to scroll between lines,
- and use Enter at the end of a line to insert new blank lines.
- Pressing Enter in the middle of a line will remove everything
- to the right of the cursor and place it onto a new, following
- line. Press Backspace at the beginning of a line to place its
- contents onto the preceding line (this be ignored if there is
- not enough space).
- After you enter a line, it will be checked for proper syntax.
- If it passes, it will be reformatted and redisplayed, and you
- can then enter another line; if it does not, it will be marked
- as ignored. The reformatting is unpreventable - Since MegaZeux
- tokenizes Robotic lines to conserve space, all irrelevant
- information such as extra spaces is lost. The editor attempts
- to print the lines in a visually pleasing manner.
- All lines other than the current line will have the various
- elements such as strings and numbers highlighted in different
- colors. cXX-type color codes will be shown as their actual
- color. The current line is shown in a solid color and color
- codes are shown in the usual cXX format.
- The following keys are active within the Robotic editor:
- <a class="helplink" href="#USINGTHE.HLP___ar">F1 - Help</a>
- <a class="helplink" href="#USINGTHE.HLP___br">F2 - Color</a>
- <a class="helplink" href="#USINGTHE.HLP___cr">F3 - Character</a>
- <a class="helplink" href="#USINGTHE.HLP___dr">F4 - Parameter</a>
- <a class="helplink" href="#USINGTHE.HLP___er">F5 - Char Edit</a>
- <a class="helplink" href="#USINGTHE.HLP___fr">F6-F10 - Macros</a>
- <a class="helplink" href="#USINGTHE.HLP___gr">F12 - Take Screenshot</a>
- <a class="helplink" href="#USINGTHE.HLP___hr">Alt+B OR Alt+Enter - Block Action</a>
- <a class="helplink" href="#USINGTHE.HLP___ir">Alt+E OR Alt+End - Mark Block End</a>
- <a class="helplink" href="#USINGTHE.HLP___jr">Alt+H - Hide Help / Borders</a>
- <a class="helplink" href="#USINGTHE.HLP___kr">Alt+I - Import</a>
- <a class="helplink" href="#USINGTHE.HLP___lr">Alt+M - Configure Macro</a>
- <a class="helplink" href="#USINGTHE.HLP___mr">Alt+O - Edit Single Line Macros</a>
- <a class="helplink" href="#USINGTHE.HLP___nr">Alt+S OR Alt+Home - Mark Block Top</a>
- <a class="helplink" href="#USINGTHE.HLP___or">Alt+U - Unmark Block</a>
- <a class="helplink" href="#USINGTHE.HLP___pr">Alt+V - Verify</a>
- <a class="helplink" href="#USINGTHE.HLP___qr">Alt+X - Export</a>
- <a class="helplink" href="#USINGTHE.HLP___rr">Alt+BackSpace - Delete Entire Line</a>
- <a class="helplink" href="#USINGTHE.HLP___sr">Alt+Ins OR Alt+P - Paste</a>
- <a class="helplink" href="#USINGTHE.HLP___tr">Ctrl+F - Search</a>
- <a class="helplink" href="#USINGTHE.HLP___ur">Ctrl+H - Replace</a>
- <a class="helplink" href="#USINGTHE.HLP___vr">Ctrl+R - Repeat Search/Replace</a>
- <a class="helplink" href="#USINGTHE.HLP___wr">Ctrl+G - Goto Position</a>
- <a class="helplink" href="#USINGTHE.HLP___xr">Ctrl+I/D/C - Mark Line</a>
- <a class="helplink" href="#USINGTHE.HLP___yr">Ctrl+BackSpace - Delete Previous Word</a>
- <a class="helplink" href="#USINGTHE.HLP___zr">Ctrl+LeftArrow - Jump to Previous Word</a>
- <a class="helplink" href="#USINGTHE.HLP___1r">Ctrl+RightArrow - Jump to Next Word</a>
- <a class="helplink" href="#USINGTHE.HLP___2r">Esc - Exit Robotic Editor</a>
- On Mac platforms, any command that uses the Alt key can take 
- (the command key) instead.
- <a class="helpanchor" name="USINGTHE.HLP___ar"><span class="fE ">F1 - Help</span></a>
- Use F1 to bring up context-sensitive help at any time.
- <a class="helpanchor" name="USINGTHE.HLP___br"><span class="fE ">F2 - Color</span></a>
- F2 will bring up a menu of colors. Select one and press Enter to
- insert a cXX color code into the current line corresponding to
- that color.
- <a class="helpanchor" name="USINGTHE.HLP___cr"><span class="fE ">F3 - Character</span></a>
- F3 will bring up a menu of characters. Select one and press
- Enter to insert that character into the current line. No quotes
- or apostrophes are added.
- <a class="helpanchor" name="USINGTHE.HLP___dr"><span class="fE ">F4 - Parameter</span></a>
- If you have just typed in the name of a thing, such as Ammo,
- F4 will allow you to select settings for it in order to insert
- a pXX parameter code.
- <a class="helpanchor" name="USINGTHE.HLP___er"><span class="fE ">F5 - Char Edit</span></a>
- Use F5 to insert series of numbers corresponding to character
- pictures, for use with the Robotic CHAR EDIT command.
- <a class="helpanchor" name="USINGTHE.HLP___fr"><span class="fE ">F6-F10 - Macro</span></a>
- F6 through F10 will insert short macros, customizable using
- Alt+O. If you have an extended macro set for these an input
- window for it will come up (see Configure Macro for more
- details).
- <a class="helpanchor" name="USINGTHE.HLP___gr"><span class="fE ">F12 - Take Screenshot</span></a>
- Pressing F12 will make a 640x350 screenshot (in PNG format by
- default) in the working directory, using the software renderer.
- The file naming starts from "screen0".
- <a class="helpanchor" name="USINGTHE.HLP___hr"><span class="fE ">Alt+B OR Alt+Enter - Block Action</span></a>
- Allows you to perform an action on the current block of lines.
- Possible actions are: Copy to the OS's clipboard, Cut to the
- OS's clipboard (copy it and then delete it), Clear from memory,
- or Export to a text file on disk. If no block is currently
- highlighted, the actions will take effect on the current line.
- Alt+Enter is the old and deprecated hotkey, left in to ease use
- for long-time users.
- <a class="helpanchor" name="USINGTHE.HLP___nr"><span class="fE ">Alt+S OR Alt+Home - Mark Block Top</span></a>
- <a class="helpanchor" name="USINGTHE.HLP___ir"><span class="fE ">Alt+E OR Alt+End - Mark Block End</span></a>
- Alt+S/E will mark the top or bottom of a block of lines. You
- can then perform various block actions on these lines. The
- marked lines are highlighted. Alt+Home and Alt+End are the old
- and deprecated hotkeys, left in to ease use for long-time
- users.
- <a class="helpanchor" name="USINGTHE.HLP___jr"><span class="fE ">Alt+H - Hide Help / Borders</span></a>
- Alt+H toggles the horizontal borders and help key reference.
- <a class="helpanchor" name="USINGTHE.HLP___kr"><span class="fE ">Alt+I - Import</span></a>
- Use Alt+I to import a text file or bytecode file into the
- current Robot. The new lines will be inserted into the current
- program, starting from the current line.
- <a class="helpanchor" name="USINGTHE.HLP__lr_"><span class="fE ">Alt+M - Configure Macro</span></a>
- Alt+M will load a box where you list the name of an extended
- macro to be configured (for example, type "1" to edit macro_1).
- After choosing a macro to edit, you will be able to set the
- various variables for the macro. Select OK to place the macro,
- Cancel to go back to the editor without placing the macro, and
- Default to change all values to their defaults.
- <a class="helpanchor" name="USINGTHE.HLP___mr"><span class="fE ">Alt+O - Edit Single Line Macros</span></a>
- You can change the values of the five single-line macros here.
- Use ^ for Enter in the macros. If there is an extended macro in
- place of macros 1-5, it will override any single-line macro also
- set for that macro.
- <a class="helplink" href="#CONFGINI.HLP__1st">The Config File</a>
- <a class="helpanchor" name="USINGTHE.HLP___or"><span class="fE ">Alt+U - Unmark Block</span></a>
- The current block is unmarked.
- <a class="helpanchor" name="USINGTHE.HLP___pr"><span class="fE ">Alt+V - Verify</span></a>
- Use Alt+V to determine if there are any invalid lines in the
- robot, and if there are what their errors are. Each invalid line
- can be set to I (ignore), D (delete) or C (comment), which will
- be applied if the user selects OK. Only the first 256 errors
- will be listed.
- <a class="helpanchor" name="USINGTHE.HLP___qr"><span class="fE ">Alt+X - Export</span></a>
- Use Alt+X to export either the current block or the entire
- Robot program to a text file or bytecode file on disk. If saved
- as text, one can then edit the program outside of MegaZeux or
- use the text file in other ways.
- <a class="helpanchor" name="USINGTHE.HLP___rr"><span class="fE ">Alt+BackSpace - Delete Entire Line</span></a>
- The currently selected line is blanked. The empty line itself
- will remain.
- <a class="helpanchor" name="USINGTHE.HLP___sr"><span class="fE ">Alt+Ins OR Alt+P - Paste</span></a>
- Alt+Ins or Alt+P will paste in the block last copied to the
- internal clipboard. The clipboard used is the OS clipboard, and
- as such is preserved between Robots and even between worlds.
- <a class="helpanchor" name="USINGTHE.HLP___tr"><span class="fE ">Ctrl+F - Search</span></a>
- Use Ctrl+F to activate the Search menu. After inputting a string
- to find in the Search box and choosing options, the Robotic
- editor will search for the term starting from the current line
- and jump to the first string that matches.
- Wrap will ensure every line of the code is checked (otherwise
- all code above the current line will be ignored) and Case
- Sensitive will require the search string and the results match
- case exactly before giving results.
- <a class="helpanchor" name="USINGTHE.HLP__+ur"><span class="fE ">Ctrl+H - Replace</span></a>
- Use Ctrl+H to activate the Replace menu. The Search box takes
- the text to be changed, and the Replace box takes the text that
- replaces it. Replace only changes the first seen instance of the
- searched text, with the search starting from the current line.
- Replace All changes all of them at once. Once completed, the
- Robotic editor will jump to the last line changed by a replace
- action (if any).
- Wrap will ensure every line of the code is checked (otherwise
- all code above the current line will be ignored) and Case
- Sensitive will require any string matching the search string to
- also match case before being replaced.
- <a class="helpanchor" name="USINGTHE.HLP___vr"><span class="fE ">Ctrl+R - Repeat Search/Replace</span></a>
- Use Ctrl+R after a Search or Replace action to repeat the
- action.
- <a class="helpanchor" name="USINGTHE.HLP___wr"><span class="fE ">Ctrl+G - Goto Position</span></a>
- Use Ctrl+G to jump to the given Robotic line/column (if too
- high of a number is given, the editor will jump to the last
- possible line/column).
- <a class="helpanchor" name="USINGTHE.HLP___xr"><span class="fE ">Ctrl+I/D/C - Mark Line</span></a>
- These commands mark the current invalid line as to be ignored,
- deleted, or commented out upon editor exit, respectively. If
- the line is valid Ctrl + C will turn it into a comment
- (truncating the end of the line if commenting would make the
- line exceed 241 characters). Note that comment-marking a
- comment will immediately strip the line.
- <a class="helpanchor" name="USINGTHE.HLP___yr"><span class="fE ">Ctrl+BackSpace - Delete Previous Word</span></a>
- Use Ctrl+BackSpace to delete the word to the left of the cursor.
- <a class="helpanchor" name="USINGTHE.HLP___zr"><span class="fE ">Ctrl+LeftArrow - Jump to Previous Word</span></a>
- Use Ctrl+LeftArrow to jump to the beginning of the previous
- word in the current line.
- <a class="helpanchor" name="USINGTHE.HLP___1r"><span class="fE ">Ctrl+RightArrow - Jump to Next Word</span></a>
- Use Ctrl+RightArrow to jump to the beginning of the next word
- in the current line. If on the last word of the line, this
- command jumps to the end of the line.
- <a class="helpanchor" name="USINGTHE.HLP___2r"><span class="fE ">Esc - Exit Robotic Editor</span></a>
- This key will exit the Robotic Editor, unless any lines are
- marked as invalid.
- The statistics line across the top of the Robot editor shows
- the current line number, the current column within the line, the
- size of the Robot program versus the maximum size this Robot can
- reach, and the Robot's X/Y position.
- Use ESC to exit the Robot editor when you are done editing your
- Robot program.
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="ROBOTSWH.HLP">
- <a class="helpanchor" name="ROBOTSWH.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Robots - What They Are and How to Use Them</span></p>
- Robots are the heart and soul of MegaZeux. Nearly anything you
- could want to do in MegaZeux - anything you see done in a
- MegaZeux game, many things you didn't know were possible - can
- be done with MegaZeux's Robots.
- Robots are programmed in their own programming language, called
- Robotic. Robotic is a fairly simple language to learn, but
- somewhat moderate to completely master. It is somewhere along
- the lines of BASIC, although more complex. If you've ever used
- Epic Megagame's ZZT, Robotic is vastly more complex than
- ZZT-OOP, although there are vague similiarities. There's a
- kludge or two dozen to get really powerful things working, but
- you'll get used to them.
- To place a Robot in the editor, press F10 and select Robot. (You
- can also select Pushable Robot if you want things to be able to
- push the Robot.) Then name the Robot and select a character to
- represent it. You are then brought to the Robot editor, where
- you can program the Robot in Robotic.
- Robots are limited to the board, and there can be 255 of them on
- each board. They can be pretty large - 2MB in size, enough code
- space to create extraordinarily complex (or convoluted)
- programs. There is an exception: the Global Robot, which is
- outside of the board and runs at all times.
- <a class="helplink" href="#ROBOTICT.HLP__1st">Robotic Tutorial</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <hr /></div>
- <div class="helpfile" id="ROBOTICT.HLP">
- <a class="helpanchor" name="ROBOTICT.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">Robotic Tutorial</span></p>
- Robotic has a few concepts that you must understand before you
- begin to program in it. You can skip this if you want, but it
- will help you learn Robotic much faster. A large portion of
- this will be obvious to anybody who has ever programmed in any
- language or used computers extensively.
- <p class="helpcentered">Commands</p>
- You can have one command per line. A command is an instruction
- to MegaZeux or the Robot telling it to do something. A program
- is a series of commands that are ran right after another.
- <p class="helpcentered">Parameters</p>
- A parameter is the part of the command that can change, such
- as numbers or colors. They specify how the command should be
- run or what it should affect. For example, in the command:
- WAIT 6
- WAIT is the command, and 6 is the parameter. Many commands have
- multiple parameters. Parameters are often specified using #,
- "string", or [color] [char], etc.
- <p class="helpcentered">Labels</p>
- A label is a point in a Robotic program that has been given a
- name. It is used as a reference point so the Robot can return
- to that point at any time, to allow actions like repeating
- sections of commands (looping) or reactions to certain events.
- Labels are written as follows - : "label"
- <p class="helpcentered">Messages</p>
- A message is something one Robot sends to another, or an
- external event sends to a Robot, to tell it to do something.
- This involves jumping to the label corresponding to that
- message. For example, a Robot can tell another Robot to
- "Bounce"; That Robot will now be executing commands starting
- at the label : "Bounce" .
- <p class="helpcentered">Coordinates</p>
- x,y coordinates are a pair of numbers representing a point on
- the current board. (0,0) is the upper-left corner of the board,
- and the first coordinate increases while going right, while the
- second increases while going down. You can find coordinates
- easily at the bottom of the screen when help is hidden, by
- pressing Alt+Y, or by pressing F6 in the game (only in editor
- playthroughs). x,y coordinates can be negative, but this is
- uncommon and used for special purposes only (e.g. using REL
- commands).
- <p class="helpcentered">Strings</p>
- A string is a series of letters or characters, inside quotes.
- For example, "STRING", "Booga!", "-21_Trees-", or "[[]]".
- <p class="helpcentered">Characters</p>
- A character is a single symbol, letter, number, punctuation
- mark, space, graphic, etc. All things are viewed as single
- characters. When using single characters in Robotic, they must
- be enclosed in apostrophes- e.g. 'X'. Certain characters must
- be inputted in specific ways to avoid problems with Robotic:
- \0 for character 0 (this won't work in strings, but will work
- for single chars)
- \t for tab (character 9)
- \n for newline (character 10)
- \r for carriage return (character 13)
- \" for quotation mark
- \\ for slash
- <p class="helpcentered">Colors</p>
- A color is a code representing a background/foreground color
- pair. They follow the format cXX, where X is 0-9, A-F or ?
- (which stands for any color). To enter color codes easily, use
- F2 in the Robot editor. The exact format of color codes is
- covered in another section.
- A quirk to keep in mind: any entity with a background color of 0
- will display the background color of anything beneath it.
- <p class="helpcentered">Directions</p>
- Directions represent one of the four cardinal directions of
- NORTH, SOUTH, EAST, or WEST. They can be abbreviated to N, S,
- E, and W. There are other directions, but these are the most
- commonly used.
- Hopefully you understood the above material, as knowledge of it
- is essential to program in Robotic. If you don't quite grasp
- it, you can return to it later, but you will need to understand
- it eventually.
- <p class="helpcentered">Your First Robotic Program: HELLO WORLD!</p>
- First, open the Editor and create a Robot. Then open the
- Robot's programming box by pressing Enter twice while the Robot
- is highlighted.
- Now, type the following into the editor:
- <span class="fE ">* "HELLO WORLD!"</span>
- <span class="fE ">end</span>
- Here's what each line does.
- <span class="fE ">* "HELLO WORLD!"</span>
- The * command puts whatever text is in the parentheses on the
- bottom of the screen. (Actually, it's the given message row
- line, which is the bottom by default.) All Robotic code starts
- immediately, so this particular statement happens right as the
- board with this Robot is loaded.
- <span class="fE ">end</span>
- This ends the code. It is good practice to include the END
- command even when you don't think you need it; leaving the END
- command out can cause some problems such as text glitches or,
- worse, the running of any and all code after where you want
- your Robot to stop!
- That was really simple, wasn't it? Now let's step up to
- something a bit bigger.
- <p class="helpcentered">Your Second Robotic Program</p>
- Create a Robot in the editor, and give it the following
- program:
- <span class="fE ">: "start"</span>
- <span class="fE ">GO NORTH 2</span>
- <span class="fE ">GO SOUTH 2</span>
- <span class="fE ">GOTO "start"</span>
- Now test the world. As you can see, this program makes the
- Robot move up and down. Let's analyze it line by line.
- <span class="fE ">: "start"</span>
- As we know, this is a label. It marks the beginning of the
- program.
- <span class="fE ">GO NORTH 2</span>
- This quite plainly tells the Robot to move north two spaces.
- <span class="fE ">GO SOUTH 2</span>
- This tells the Robot to move south two spaces.
- <span class="fE ">GOTO "start"</span>
- GOTO tells the Robot to jump to a label. In this case, the
- Robot returns to the label "start", effectively restarting its
- code. This particular Robot will be executing these lines of
- code for the entirety of the game, or until destroyed.
- Pretty easy so far, huh? You will probably find that Robotic's
- basics are easy to grasp. Let's try something a little more
- complex.
- <p class="helpcentered">Your Third Robotic Program</p>
- Try the following Robot program:
- <span class="fE ">: "loop"</span>
- <span class="fE ">/ "NNEESSWW"</span>
- <span class="fE ">GOTO "loop"</span>
- <span class="fE ">: "touch"</span>
- <span class="fE ">* "Hello!"</span>
- <span class="fE ">CHAR 'X'</span>
- <span class="fE ">END</span>
- Testing will show you that this Robot runs around in a small
- square. Now try touching it. If you can catch it, the Robot
- will change to an X and greet you! Let's look at this program.
- <span class="fE ">: "loop"</span>
- A label.
- <span class="fE ">/ "NNEESSWW"</span>
- The / command tells the Robot to move along a given path. The
- path is represented with a string of the letters N, S, E, W,
- and I. NSEW represent the four cardinal directions, while I
- tells the Robot to wait for a bit before continuing. Our path
- tells the Robot to go north twice, east twice, south twice, and
- west twice, forming a square path.
- <span class="fE ">GOTO "loop"</span>
- The Robot will now return to the "loop" label, continuing in a
- square path forever. Without an outside stimulus, the Robot
- will never do anything else.
- <span class="fE ">: "touch"</span>
- Another label, but this one is special. When the player touches
- a Robot, by standing next to it and pressing against it, the
- Robot is sent the message "touch". The following commands will
- be run when the player touches the Robot.
- <span class="fE ">CHAR 'X'</span>
- This tells the Robot to assume the appearance of character X.
- Make sure that the X is in apostrophes ' and NOT quotes ".
- <p class="helpcentered">Robot Interaction</p>
- Let's get some Robots to interact with each other. Put two
- Robots on a board, right next to each other. Name the left one
- Lefty, and give it this program:
- <span class="fE ">: "dance"</span>
- <span class="fE ">/ "WWWEEE"</span>
- <span class="fE ">SEND "Righty" to "dance"</span>
- <span class="fE ">END</span>
- Name the right one Righty, and give it this program:
- <span class="fE ">END</span>
- <span class="fE ">: "dance"</span>
- <span class="fE ">/ "EEEWWW"</span>
- <span class="fE ">SEND "Lefty" to "dance"</span>
- <span class="fE ">END</span>
- Now test this board out. You will see a silly pair of dancing
- Robots, as they bump each other left and right. Let's examine
- their programs more closely.
- Since Righty has an END command as the first line, he isn't
- going to be doing anything until told; so, we look at Lefty.
- It's nothing we haven't seen, except for the SEND command.
- <span class="fE ">SEND "Robot" to "message"</span>
- The SEND command allows one Robot to send messages to another,
- telling it what to do. In this case, Lefty will tell Righty to
- "dance", sending Righty to the label "dance".
- Knowing this, the behavior of the two Robots should be clear.
- Each one, in turn, moves away and back again, then it tells
- the other one to do this. This repeats ad infinitum.
- For a little practice, see if you can get them each to display
- a message at the start of their dance step. Make the messages
- different for each Robot.
- <p class="helpcentered">Some New Commands</p>
- The following Robot will demonstrate some new commands and
- features.
- <span class="fE ">GIVE 6 AMMOS</span>
- <span class="fE ">GIVE 5 HIBOMBS</span>
- <span class="fE ">END</span>
- <span class="fE ">: "shot"</span>
- <span class="fE ">COLOR c2C</span>
- <span class="fE ">[ "OKAY, I GET THE POINT. I NEED MORE IRON"</span>
- <span class="fE ">[ "...and now a liver transplant :<"</span>
- <span class="fE ">zap "shot" 1</span>
- <span class="fE ">END</span>
- <span class="fE ">: "shot"</span>
- <span class="fE ">IF "AMMO" = 0 "lecture"</span>
- <span class="fE ">[ "...cut it out. =("</span>
- <span class="fE ">END</span>
- <span class="fE ">: "bombed"</span>
- <span class="fE ">. "Check this out..."</span>
- <span class="fE ">. "(editor) I'm not impressed."</span>
- <span class="fE ">* "ARRGHFRRAGGH I'M ALLERGIC TO BEING BOMBED"</span>
- <span class="fE ">DIE</span>
- <span class="fE ">END</span>
- <span class="fE ">: "touch"</span>
- <span class="fE ">* "Please leave me alone :/"</span>
- <span class="fE ">WAIT 10</span>
- <span class="fE ">SHOOT SEEK</span>
- <span class="fE ">END</span>
- <span class="fE ">: "lecture"</span>
- <span class="fE ">[ "Did you REALLY have to use all of your shots."</span>
- <span class="fE ">END</span>
- Test this Robot out, bombing, shooting, and touching it. The
- new commands and labels are explained below.
- <span class="fE ">GIVE 6 AMMOS</span>
- Sensibly enough, this gives the player 6 units of ammo.
- <span class="fE ">GIVE 5 HIBOMBS</span>
- This gives the player 5 high-strength bombs.
- <span class="fE ">: "shot"</span>
- When the Robot is shot by a bullet, it is sent this message.
- <span class="fE ">COLOR c2C</span>
- This changes the Robot's color. The c2C represents Lt. Red on
- Red. To enter colors, press F2 in the Robot editor and select
- the color you want. The appropriate cXX code will be typed in
- for you.
- <span class="fE ">[ "OKAY, I GET THE POINT. I NEED MORE IRON"</span>
- <span class="fE ">[ "...and now a liver transplant :<"</span>
- The [ command is slick for a default. When encountered, all
- consecutive [ commands are put together to form one long
- message, which is then displayed in a Scroll-like window.
- It can be scrolled and viewed by the player.
- <span class="fE ">ZAP "shot" 1</span>
- The ZAP command tells the Robot to ignore a certain number of
- labels with the given name - in this case, the first "shot"
- label. The ZAP command always starts from the top. Using the
- ZAP command lets programmers give out different reactions for
- going to the same label. In this case, we get to go to the
- second "shot" label after we went to the first.
- <span class="fE ">IF "AMMO" = 0 "lecture"</span>
- The IF command will jump to a label (in this case, one called
- "lecture") if the given condition is met, and will continue to
- the next line if not met. In this case, it will check to see if
- the AMMO counter is 0. The AMMO counter is a built-in counter
- MZX uses to represent how many units of ammo the player holds.
- <span class="fE ">: "bombed"</span>
- When the Robot is bombed, or otherwise hit by an explosion,
- it is sent this message.
- <span class="fE ">. "Check this out..."</span>
- <span class="fE ">. "(editor) I'm not impressed."</span>
- Notice how this message was not shown in any way. The . command
- is used for comments, i.e. messages that are not to be shown.
- They are good for your own reference, so you know what you were
- trying to do with this Robot, or so you can keep notes of
- important things.
- <span class="fE ">DIE</span>
- This command destroys the Robot forever.
- <span class="fE ">WAIT 10</span>
- WAIT causes the Robot to stop and sit for an amount of time.
- The time is in number of cycles (in this case, 10 cycles). A
- cycle is the amount of time it takes to update the board once,
- moving all the enemies and bullets, etc. Robots can run at
- different speeds; the default is cycle 1 (fastest, runs every
- real cycle) unless a cycle command is placed inside the Robot.
- <span class="fE ">SHOOT SEEK</span>
- The Robot will shoot a bullet in the indicated direction (in
- this case, the direction the player is in).
- <p class="helpcentered">Conclusion</p>
- You now should know enough Robotic for simple programs. Even
- more importantly, you should be able to scan the Robotic
- reference manual, including the command reference, and be able
- to learn many new commands. There are loads of important
- commands and concepts in the command reference that we have not
- yet mentioned, such as TELEPORT PLAYER, strings, file access,
- expressions, sprites, and the COPY class of statements. It is
- recommended that you at least skim each of the Robotic reference
- manual sections.
- Make sure you (eventually) read over every part of the
- reference manual, as there are many sections not covered in the
- tutorials. Especially of interest will be advanced topics like
- "The Vlayer and Its Uses", "Using MZMs", "Subroutines",
- "Debug Modes", and most newer help file additions.
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="THEGLOBL.HLP">
- <a class="helpanchor" name="THEGLOBL.HLP__gbl"> </a>
- <p class="helpcentered"><span class="f9 ">The Global</span></p>
- The global Robot is a special-case Robot; it is always present
- on every board of the game. It is immobile (technically off the
- board, but listed as at (-1,-1)), has a ROBOT_ID of 0, and
- cannot be destroyed or changed into another object, even
- through deliberate attempts to do so such as the EXPLODE
- command. All other traits of Robots, such as 2MB of Robot
- memory, reserved local counters and the ability to be copied,
- apply to the global.
- The global is accessed either through pressing G to access the
- Global Settings menu and then clicking Edit Global Robot, or by
- simply pressing Alt+G on the editor screen.
- The global is important because it not only exists on all
- boards, but also continues its state across boards. This allows
- for easy management of continuous global engines such as an
- inventory, status bars, and sidescrolling control, among
- other possibilities. If the global did not exist, a copy of the
- engine would be needed on every board, and the states of each
- such Robot would be separate (possibly leading to management
- problems).
- Certain commands (as hinted above) are worthless in the global.
- Obvious commands such as BECOME, EXPLODE, COLOR/CHAR and all
- command forms that take a relative direction (like LAYBOMB and
- DUPLICATE SELF [dir]) will be ignored. DIE, DIE ITEM and GOTOXY
- # # are completely ignored as well.
- Finally, the global is the only Robot that ignores FREEZETIME
- and SLOWTIME states. This is extremely handy in creating the
- ability to pause and unpause a MegaZeux game, among other
- things.
- <a class="helplink" href="#COMMAND2.HLP___f4">FREEZETIME #</a>
- <a class="helplink" href="#COMMAND2.HLP___sS">SLOWTIME #</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="BADPRACT.HLP">
- <a class="helpanchor" name="BADPRACT.HLP__bad"> </a>
- <p class="helpcentered"><span class="f9 ">Robotic Usages That Should be Avoided</span></p>
- There are several coding pitfalls in Robotic; while some are
- complex in nature, others can be easily avoided. In general,
- clean and efficient code is the least likely to cause
- unexpected errors as well as the easiest to repair. Listed here
- are several practices to avoid, as well as proper replacements.
- <span class="fc ">BAD: Creating anything with c?? or p??</span>
- Anything that has an undefined value will use a default
- that may be undesirable. The correct action would therefore
- be to define the object's color and parameter values. c?? and
- p?? generally exist for the sake of Robotic comparisons and
- conditional branching, not for being applied to actual
- objects.
- Sprites are an exception regarding color, since they refer to
- a set of placed characters with their own colors.
- <span class="f9 ">GOOD: Putting in set values for colors and parameters when</span>
- <span class="f9 ">placing objects.</span>
- <span class="fc ">BAD: Using global counters for temporary or localized work.</span>
- There are several counters that are Robot-specific and don't
- eat up global counter space. local through local32 per Robot
- should be enough for almost everyone, and the local counters
- can be written to and read by other robots as well (using the
- rN.local# counter form). If global temp counters are used in
- a Robot with several copies on the board, you will most likely
- run into problems. Unfortunately, using local counters can
- come at the cost of minor readability, since local counters
- cannot be given descriptive names.
- <span class="f9 ">GOOD: Using local counters for temporary or localized work.</span>
- <span class="fC ">BAD: Breaking a subroutine without returning or entering the</span>
- <span class="fC ">middle of a subroutine.</span>
- <span class="f9 ">GOOD: Fully finishing and starting subroutines.</span>
- This is especially important for built-in labels which can
- trigger very rapidly, such as #keyN.
- <span class="fc ">BAD: Using a high amount of if statements regarding one</span>
- <span class="fC ">variable.</span>
- <span class="f9 ">GOOD: Using "label&number&" as the destination label in IF</span>
- <span class="f9 ">statements regarding one variable.</span>
- <span class="fC ">BAD: Looping without using cycle-ending commands of any kind.</span>
- Looping without CYCLE 1 or WAIT 1 in idle loops is more
- severe than one might think. Coupled with the "commands"
- counter set to a high number, loops without CYCLE 1 or WAIT 1
- can absolutely choke a game's speed, especially idle loops,
- and potentially FREEZE YOUR GAME.
- <span class="f9 ">GOOD: Including CYCLE 1 or WAIT 1 in every loop except loops</span>
- <span class="f9 ">that are designed to get a finite length task done as</span>
- <span class="f9 ">quickly as possible.</span>
- You should add a CYCLE 1 or WAIT 1 for any loop that
- constantly checks for events (such as keypresses or board
- status).
-
- <span class="fC ">BAD: Setting the COMMANDS value to maximum.</span>
- It's generally unneeded, and a loop without a cycle-ending
- command coupled with this change is a guaranteed way to cause
- freezes in MZX. MZX has safeguards for when this happens, but
- it is still very undesirable.
- <span class="f9 ">GOOD: Setting the COMMANDS counter to a reasonably high value.</span>
- Your code can utilize the extra processing speed higher
- commands-per-cycle allows, and if a loop without a
- cycle-ending command is accidentally created, it becomes
- apparent without requiring severe intervention.
- <span class="fc ">BAD: Ending Robots with a label.</span>
- <span class="f9 ">GOOD: Ending Robots with the END command.</span>
- It's debatable whether putting END after commands that
- destroy the Robot (e.g. DIE, EXPLODE #) is necessary, but it
- is still recommended in order to prevent a habit of leaving
- it out in less redundant places.
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="SUBROUTE.HLP">
- <a class="helpanchor" name="SUBROUTE.HLP__sub"> </a>
- <p class="helpcentered"><span class="f9 ">Subroutines</span></p>
- Subroutines are returnable labels, in essence. After the
- subroutine actions finish, the Robotic goes to the line right
- after the subroutine call. Anywhere a label can be used, a
- subroutine can be called.
- Another way to think about it is a label with a place marker.
- Going to this label marks your previous place; when done, the
- program goes straight to the place marker and returns where it
- left off.
- Subroutines are accessed by using the # sign as the first
- letter. For example: <span class="fe ">goto "#example"</span><span class="ff "> would call the</span>
- subroutine at the label "#example". To return to the next
- command after the call use <span class="fe ">goto "#return"</span><span class="ff ">.</span>
- In addition, one can go to the first subroutine's return
- position using <span class="fe ">goto "#top"</span><span class="ff ">.</span>
- A quick example of subroutines:
- <span class="fE ">* "YE SHALL NOT PASS UNLESS YOU GIVE ME SPACE."</span>
- <span class="fE ">goto "#spacewait"</span>
- <span class="fE ">* "THAT'S BETTER BUT YOU'RE STILL HERE. _CORRECT THIS_"</span>
- <span class="fE ">goto "#spacewait"</span>
- <span class="fE ">* "THANKS FOR YOUR COMPLIANCE!"</span>
- <span class="fE ">wait 25</span>
- <span class="fE ">* "YOUR PASS WILL ARRIVE IN 6 TO 8 WEEKS! or now! byebyebye"</span>
- <span class="fE ">set "PASS" to 1</span>
- <span class="fE ">die</span>
- <span class="fE ">end</span>
- <span class="fE ">: "#spacewait"</span>
- <span class="fE ">: "spaceheld"</span>
- <span class="fE ">cycle 1</span>
- <span class="fE ">. "If space is held down, progress no further."</span>
- <span class="fE ">. "We want to force space to be pressed each time."</span>
- <span class="fE ">if spacepressed "spaceheld"</span>
- <span class="fE ">: "notspaceloop"</span>
- <span class="fE ">cycle 1</span>
- <span class="fE ">if not spacepressed "notspaceloop"</span>
- <span class="fE ">goto "#return"</span>
- When sending other robots to subroutines the behavior is
- slightly different. Because the robot is pre-empted
- (interrupted) it will return to the same command it was at
- before going to the subroutine, not the instruction after.
- When using subroutines, especially with easily triggerable
- conditions, it is important to try to make sure that every
- subroutine send ends in a #return, or that every set of
- subroutine sends ends in a #top. The built-in labels can be
- especially problematic, as some can trigger rapidly in a short
- period of time. State management with LOCKSELF and/or ZAP is
- crucial.
- NOTE: Unlike older versions of MegaZeux, it is no longer needed
- to initialize the stack, so don't get confused looking at older
- examples of code and seeing odd statements like <span class="fe ">. "#*-1-2-3"</span><span class="ff ">.</span>
- These statements are now treated as comments, and you should
- mentally treat them the same way.
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="EXPRESS.HLP">
- <a class="helpanchor" name="EXPRESS.HLP__exp"> </a>
- <p class="helpcentered"><span class="f9 ">Expressions</span></p>
- Expressions in MegaZeux allow users to set counters or a
- displayed number to a mathematical expression. The possible
- inputs are: counters, constants, or a combination. Any
- expression in MegaZeux is bound in quotation marks and
- parentheses. For example, an expression adding 5 and 3 would
- be done in MegaZeux by inputting "(5 + 3)".
- Counters can be used inside expressions using single quotes or
- ampersands like so: "(&five& + 'three')".
- Unlike in many other programming languages, MegaZeux does not
- follow a strict order of operations. Items in parentheses take
- precedence, with other operator precedence solely determined by
- their position (from left to right).
- For example, "(5 - 4 * 20 / (21 - 16))" would evaulate to 4.
- 5 - 4 evaluates to 1; 1 * 20 evaluates to 20; 20 / (21 - 16)
- first evaluates to 20 / 5, which becomes 4.
- Whitespace between operators is not necessary. (5+3) is as valid
- as (5 + 3).
- MegaZeux cannot decipher directly nested ampersands or single
- quotes; such will cause MegaZeux to misinterpret your
- expression in different ways, depending on which you used.
- Therefore, using expressions for nesting is another benefit.
- Example: We set "r" to 1, "in" to 8 and "out18" to 11. We want
- to output the value of "out18".
- "(&out&&r&in&&)" would output (0r&in&).
- "('out'r''in'')" would output ('out'r''in'')
- "('out('r')('in')')" would output the desired result - 11.
- Nesting is limited only to the amount one can put in a single
- editor line - 241 characters.
- In expressions, the following operators may be used:
- Binary operators (value-argument-value):
- + Addition
- - Subtraction
- * Multiplication
- / Division
- % Modulo
- ^ Exponent (A^B is A to the Bth order/power)
- >> Bitshift Right (logical, not arithmetic)
- << Bitshift Left (logical, not arithmetic)
- >>> Signed Shift Right (arithmetic)
- > Greater Than
- < Less Than
- >= Greater Than or Equal To
- <= Less Than or Equal To
- = Equal To
- != Not Equal To
- a Bitwise AND (not logical AND)
- o Bitwise OR (not logical OR)
- x Bitwise XOR (not logical XOR)
- <span class="fE ">+ Addition</span><span class="fF ">: Outputs the sum of the two given values. (3+2)</span>
- would return 5.
- <span class="fE ">- Subtraction</span><span class="fF ">: Outputs the difference of the two given values.</span>
- (3-2) would return 1.
- <span class="fE ">* Multiplication</span><span class="fF ">: Outputs the product of the two given values.</span>
- (3*2) would return 6.
- <span class="fE ">/ Division</span><span class="fF ">: Outputs the quotient of the two given values.</span>
- (3/2) would return 1. Note that any fractional values will be
- truncated, i.e. have the decimal part of the number thrown out.
- <span class="fE ">% Modulo</span><span class="fF ">: Outputs the remainder of the two given values, when</span>
- both values are positive. (5%3) would return 2. The modulo
- expression function and the modulo command may output different
- results if any number involved is negative; unlike the command,
- the modulo expression function uses a floored modulo.
- To explain, if the dividend is negative, than the result will
- be the divisor minus the remainder (e.g. (-5%3) would return
- 1); if the divisor is negative, than the result will be the
- additive inverse of the difference of the divisor and the
- remainder (e.g. (5%-3) would return -1); if BOTH are negative,
- the result will be the additive inverse of the remainder (e.g.
- (-5%-3) would return -2).
- <span class="fE ">^ Exponent</span><span class="fF ">: Outputs the result of taking the first number to</span>
- the power of the second number. (3^2) would return 9.
- <span class="fE ">>> Bitshift Right</span><span class="fF ">: Shifts the first number rightward by [second</span>
- number] of bits. Info shifted off of the boundaries will NOT
- wrap around. Using an 8-bit counter for clarity's sake, (5>>2)
- would turn 5 [00000101] into 1 [00000001] by shifting two bits
- rightward.
- <span class="fE "><< Bitshift Left</span><span class="fF ">: Shifts the first number leftward by [second</span>
- number] of bits. Info shifted off of the boundaries will NOT
- wrap around. Using an 8-bit counter for clarity's sake, (5<<2)
- would turn 5 [00000101] into 20 [00010100] by shifting two bits
- leftward.
- <span class="fE ">>>> Signed Shift Right</span><span class="fF ">: Also known as Arithmetic Right Shift.</span>
- Shifts the first number rightward by [second number] of bits,
- but unlike normal bitshift right, shifts in whatever number was
- in the leftmost bit instead of always shifting in 0s. Info
- shifted off of the boundaries still will not wrap around. Using
- an 8-bit counter for clarity's sake, (5>>>2) would turn 5
- [00000101] into 1 [00000001], while (-5>>>2) would turn -5
- [11111011] into -2 [11111110].
- <span class="fE ">> Greater Than</span><span class="fF ">: If the first number is greater than the second</span>
- number, outputs 1 (TRUE); otherwise, outputs 0 (FALSE). (3>2)
- would return 1, (2>2) would return 0.
- <span class="fE ">< Less Than</span><span class="fF ">: If the first number is less than the second</span>
- number, outputs 1 (TRUE); otherwise, outputs 0 (FALSE). (3<2)
- would return 0, as would (2<2).
- <span class="fE ">>= Greater Than or Equal To</span><span class="fF ">: If the first number is either</span>
- greater than or equal to the second number, outputs 1 (TRUE);
- otherwise, outputs 0 (FALSE). (3>=2) would return 1, as would
- (2>=2).
- <span class="fE "><= Less Than or Equal To</span><span class="fF ">: If the first number is either less</span>
- than or equal to the second number, outputs 1 (TRUE);
- otherwise, outputs 0 (FALSE). (3<=2) would return 0, (2<=2)
- would return 1.
- <span class="fE ">= Equal To</span><span class="fF ">: If the first number is the same value as the second</span>
- number, outputs 1 (TRUE); otherwise, outputs 0 (FALSE). (3=2)
- would return 0, (2=2) would return 1.
- <span class="fE ">!= Not Equal To</span><span class="fF ">: If the first number is a different value</span>
- compared to the second number, outputs 1 (TRUE); otherwise,
- outputs 0 (FALSE). (3!=2) would return 1, (2!=2) would return
- 0.
- <span class="fE ">a = Bitwise AND</span><span class="fF ">: Performs a bitwise AND operation on the two</span>
- given values; i.e. compares the bits of each value and sets to
- 1 each bit that is 1 in both numbers. Using an 8-bit counter
- for clarity's sake, (5a3) would return 1, as 5 [00000101] and 3
- [00000011] has only the bit in the ones place set in both
- numbers, leaving 1 [00000001].
- <span class="fE ">o = Bitwise OR</span><span class="fF ">: Performs a bitwise OR operation on the two</span>
- given values; i.e. compares the bits of each value and sets to
- 1 each bit that is 1 in either number. Using an 8-bit counter
- for clarity's sake, (5o3) would return 7, as 5 [00000101] and
- 3 [00000011] have bits set in the fours, twos, and ones places
- among them, leaving 7 [00000111].
- <span class="fE ">x = Bitwise XOR</span><span class="fF ">: Performs a bitwise XOR operation on the two</span>
- given values; i.e. compares the bits of each value and sets to
- 1 each bit that is different between numbers. Using an 8-bit
- counter for clarity's sake, (5x3) would return 6, as 5
- [00000101] and 3 [00000011] have different bits set in the
- fours and the twos places, leaving 6 [00000110].
- Unary operators (operator followed by value):
- <span class="fE ">- Unary Negation</span><span class="fF ">: returns the negative value of the operand</span>
- (two's complement); i.e. reverses the sign of a number. (-10)
- would return -10.
- <span class="fE ">~ Bitwise Negation</span><span class="fF ">: returns the bitwise NOT value of the</span>
- operand (one's complement); i.e. changes each bit in a number.
- Using an 8-bit counter for clarity's sake, (~10) [00001010]
- would return -11. [11110101]
- Ternary operators (value - operator token - value - operator
- token - value):
- <span class="fE ">?: Conditional Operator</span><span class="fF ">: Evaluates expressions based on the</span>
- value of the first given expression. This operator is often
- simply called the ternary operator. If the expression to the
- left of the question mark is non-zero, the expression between
- the question mark and colon is evaluated; otherwise, the
- expression to the right of the colon is evaluated. For example,
- If "local" is 35, SET "local" ('local'<60?'local'+2:'local'+1)
- would set the value of "local" to 37, as the first expression
- evaluates to 1 and the second expression ('local'+2) is then
- evaluated.
- Special usages:
- -Using a constant expression "(n)" is the only way to directly
- use numbers over 32767 or under -32768. This can not be changed
- due to the way the world file format is coded. This is also the
- only way to use octal (base 8) and full-sized hexadecimal
- numbers; octal numbers always begin with a 0 (ex: 01745) and hex
- numbers begin with 0x (ex: 0xDEAF).
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="FILEACSS.HLP">
- <a class="helpanchor" name="FILEACSS.HLP__fil"> </a>
- <p class="helpcentered"><span class="f9 ">File Access</span></p>
- MegaZeux allows somewhat unwieldy but powerful file access
- abilities. File access can do things that no other tools of
- MegaZeux can do, such as create high score tables or preserve
- and unlock game options without needing a save. An MZX world
- can access any file in its own directory or deeper, including
- for charset, palette, sound and MZM loading commands; access of
- folders outside of this range is forbidden.
- MegaZeux has some ways of saving standard formats in-game:
- <span class="fA ">SET "file.txt" to "SAVE_ROBOT"</span>
- <span class="fA ">SET "file.txt" to "LOAD_ROBOT"</span>
- <span class="fA ">SET "file.txt" to "SAVE_ROBOTn"</span>
- <span class="fA ">SET "file.txt" to "LOAD_ROBOTn"</span>
- These commands can save Robotic code to text files and import
- text files into a Robot. The first forms use the current Robot,
- while the second forms use the Robot with the given Robot ID n.
- For LOAD_ROBOT(n), string inputs are also accepted in place of
- hard-coded file names.
- <span class="fA ">SET "file.bc" to "SAVE_BC"</span>
- <span class="fA ">SET "file.bc" to "LOAD_BC"</span>
- <span class="fA ">SET "file.bc" to "SAVE_BCn"</span>
- <span class="fA ">SET "file.bc" to "LOAD_BCn"</span>
- These commands can save Robotic code to files in bitcode format
- and import bitcode files into a Robot. The first forms use the
- current Robot, while the second forms use the Robot with the
- given Robot ID n. Bitcode is much more compact than plain text,
- but cannot be easily read by the human eye.
- Note that for loading Robotic code via LOAD_ROBOT(n) or
- LOAD_BC(n), any and all local counters previously set in the
- Robot will retain their value.
- <span class="fA ">SET "file.sav" to "SAVE_GAME"</span>
- <span class="fA ">SET "file.sav" to "LOAD_GAME"</span>
- These commands save or load MZX savegames, respectively.
- <span class="fA ">SET "file.sav" to "SAVE_COUNTERS"</span>
- <span class="fA ">SET "file.sav" to "LOAD_COUNTERS"</span>
- These commands respectively save or load a counters file.
- Counter files only contain counter and string data and do not
- require version checks. Saving will dump the current contents
- of the current world's counters and strings; loading will set
- the current world's counter and string values to the values
- given in the file.
- <span class="fA ">SET "file.palidx" to "SMZX_INDICES"</span>
- This command loads an SMZX indices file. SMZX indices are
- essentially miniature palettes and will only load in SMZX Mode
- 3.
- MegaZeux can manipulate any type of file with certain Robotic
- commands. There are some basic things to remember when using
- file access.
- -A file can only be read or written to at one time, never both.
- This means you can't select the same file to be the current
- "FREAD_OPEN" and "FWRITE_OPEN" targets.
- -Only one file can be read to and one can be written to at the
- same time.
- -Writing and reading operations change the current fwrite and
- fread positions.
- -The writing and reading position is set to 0 (the beginning
- position of a file) when a file is loaded, unless the
- FWRITE_APPEND command is chosen.
- -There is a special character called the terminator (char #42,
- '*', by default) placed at the end of a write when a string is
- written to a file with FWRITE. This character ends an FREAD to
- a string when encountered (the terminator character itself will
- not be in the string output). However, using FWRITEn will not
- place a terminator, and FREADn will ignore any terminator
- characters encountered.
- -Lastly, files need to be closed when the current task is
- finished. Otherwise, the file remains open and causes problems.
- To close a file, use SET "" to "FREAD_OPEN" to close a file for
- reading and SET "" to "FWRITE_OPEN" to close a file for
- writing.
- Here are the file writing commands at your disposal.
- <span class="fA ">SET "file.xxx" to "FREAD_OPEN"</span>
- This command loads a file for reading.
- <span class="fA ">SET "file.xxx" to "FWRITE_OPEN"</span>
- This command creates a new file for writing; if a file by this
- name already exists, it is overwritten.
- <span class="fA ">SET "file.xxx" to "FWRITE_MODIFY"</span>
- This command opens an existing file for reading without
- overwriting it, starting at the beginning of the file.
- <span class="fA ">SET "file.xxx" to "FWRITE_APPEND"</span>
- This command opens a file for writing at the END of the file.
- Please note that FWRITE_POS settings will not work in this
- mode.
- <span class="fA ">SET "FREAD_POS" to #</span>
- <span class="fA ">SET "FWRITE_POS" to #</span>
- These commands change the current reading or writing position
- of the accessed files. The position is in DECIMAL, not
- hexadecimal, and the first position is 0; when no file is
- loaded, the relevant counter is -1. To seek the end of a file,
- set to -1.
- <span class="fA ">SET "dir" to "FREAD_OPEN"</span>
- This command opens subdirectories for reading (by using the name
- of the subdirectory by itself, e.g. <span class="fA ">SET "directory" to</span>
- "FREAD_OPEN"<span class="fF ">); FREAD will then list the names of files in the</span>
- directory, with each read position being a different filename.
- Note that the files are not guaranteed to be read in any
- specific order.
- <span class="fA ">SET "FREAD_DELIMITER" to #</span>
- <span class="fA ">SET "FWRITE_DELIMITER" to #</span>
- These commands change the character considered the terminator;
- the FREAD command changes which character is detected as the
- terminator, and the FWRITE command changes which character is
- written as the terminator.
- <span class="fA ">SET "counter" to "FREAD_COUNTER"</span>
- Reads from the open file to a counter. This will grab four
- bytes instead of the normal one (treated as signed; the
- resulting range is from -2147483648 to 2147483647).
- <span class="fA ">SET "FWRITE_COUNTER" to "counter"</span>
- Writes from a counter to the open file. This will write the
- full counter instead of simply the first byte (treated as
- signed; the resulting range is from -2147483648 to 2147483647).
- <span class="fA ">SET "FWRITE" to "counter"</span>
- <span class="fA ">SET "$string" to "FWRITE"</span>
- <span class="fA ">SET "$string" to "FWRITEn"</span>
- <span class="fA ">SET "counter" to "FREAD"</span>
- <span class="fA ">SET "$string" to "FREAD"</span>
- <span class="fA ">SET "$string" to "FREADn"</span>
- These commands write values to and read values from,
- respectively, the open file relative to the FREAD_POS or
- FWRITE_POS counters. FWRITE and FREAD, when used with counters,
- only write one byte at a time (from 0-255).
- The SET "$string" to "FWRITEn" and "FREADn" commands will write
- the first n characters (relative to FREAD_POS or FWRITE_POS)
- from the file to the given string or read the first n
- characters from the string into the open file, respectively.
- Using <span class="fA ">SET "$string.N" to "FWRITE(n)"</span><span class="fF "> will ensure that the</span>
- string will be at least N characters long when written.
- FWRITE and FREAD, when used with counters, can be substituted
- by FWRITE_COUNTER and FREAD_COUNTER to read in longer values
- at a time (four bytes as opposed to one).
- Another use of file commands (which takes more work, but not
- much) is verifying whether a file exists. To do this, a
- programmer would type:
- <span class="fE ">SET "file.xxx" to "FREAD_OPEN"</span>
- <span class="fE ">SET "FREAD_POS" to -1</span>
- <span class="fE ">IF "FREAD_POS" >= 0 "existslabel"</span>
- If the file does not exist, "FREAD_POS" will read -1; if it
- does exist, "FREAD_POS" will be the number of characters in the
- file (0 or higher). Setting "FREAD_POS" or "FWRITE_POS" to -1
- is called "file end seeking" and is also very helpful for
- finding the length of the file, as well as for placing stuff at
- the end of a file.
- Here's a quick example of file access.
- <span class="fE ">SET "example.txt" to "FWRITE_OPEN"</span>
- <span class="fE ">SET "$zoosound" to "ROAAAAR"</span>
- <span class="fE ">SET "$zoosound" to "FWRITE"</span>
- <span class="fE ">DEC "FWRITE_POS" by 1</span>
- <span class="fE ">. "This line backs us up one space so that the terminator</span>
- <span class="fE ">. "character will be overwritten, allowing us to display the"</span>
- <span class="fE ">. "whole contents of the file."</span>
- <span class="fE ">SET "$ender" to " (click)"</span>
- <span class="fE ">SET "$ender" to "FWRITE"</span>
- <span class="fE ">SET "" to "FWRITE_OPEN"</span>
- <span class="fE ">. "We're closing the file because we're going to read from it."</span>
- <span class="fE ">SET "example.txt" to "FREAD_OPEN"</span>
- <span class="fE ">ASK "Want to play your animal sounds tape?"</span>
- <span class="fE ">END</span>
- <span class="fE ">: "yes"</span>
- <span class="fE ">SET "$tape" to "FREAD"</span>
- <span class="fE ">* "&$tape&"</span>
- <span class="fE ">WAIT for 30</span>
- <span class="fE ">ZAP "yes" 1</span>
- <span class="fE ">ASK "Want to play it again?"</span>
- <span class="fE ">END</span>
- <span class="fE ">: "yes"</span>
- <span class="fE ">SET "" to "FREAD_OPEN"</span>
- <span class="fE ">. "Switching tasks for the same file again."</span>
- <span class="fE ">SET "example.txt" to "FWRITE_OPEN"</span>
- <span class="fE ">. "We're wiping the file clean."</span>
- <span class="fE ">SET "$winder" to "bzz-bz-zipfwip--(clik) "</span>
- <span class="fE ">SET "$winder" to "FWRITE"</span>
- <span class="fE ">DEC "FWRITE_POS" by 1</span>
- <span class="fE ">SET "$tape" to "FWRITE"</span>
- <span class="fE ">SET "" to "FWRITE_OPEN"</span>
- <span class="fE ">SET "example.txt" to "FREAD_OPEN"</span>
- <span class="fE ">ZAP "yes" 1</span>
- <span class="fE ">: "yes"</span>
- <span class="fE ">SET "FREAD_POS" to 0</span>
- <span class="fE ">. "We're forcing the beginning position because we want to"</span>
- <span class="fE ">. "read all of the file every possible time, not just the"</span>
- <span class="fE ">. "first time."</span>
- <span class="fE ">SET "$tape" to "FREAD"</span>
- <span class="fE ">* "&$tape&"</span>
- <span class="fE ">WAIT for 30</span>
- <span class="fE ">ASK "Want to play it again?"</span>
- <span class="fE ">END</span>
- <span class="fE ">: "no"</span>
- <span class="fE ">SET "" to "FREAD_OPEN"</span>
- <span class="fE ">END</span>
- This Robot will display first a roar and the sound of a tape
- player clicking off before it asks if you want to play the tape
- again. If no, the file is closed and the program ended. If yes,
- rewinding tape sounds are stuck on the front of the text. The
- player can then choose to re-view this text until "No" is
- chosen.
- <a class="helplink" href="#COUNTERS.HLP__fac">File Access Counters</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="SPRITES.HLP">
- <a class="helpanchor" name="SPRITES.HLP__spr"> </a>
- <p class="helpcentered"><span class="f9 ">Sprites</span></p>
- Sprites allow the designer to have interactive entities on the
- board composed of several characters. A sprite is a block of
- characters drawn on the board or the vlayer that is then
- displayed on the board, either beneath or above the overlay.
- The biggest benefit of sprites is that they are cohesive;
- unlike use of several Robots, there is absolutely no chance of
- the sprite falling apart.
- There are up to 256 available sprites (in total, not per board),
- and sprites are controlled in the following ways:
- -Through sprite specific counters named SPRn_value
- -Through control counters for all of the sprites
- -Through commands for placing sprites and testing for collision
- To setup a sprite you must set the SPRn_REFX / REFY / WIDTH /
- HEIGHT counters to define where the sprite's characters are and
- what its size is. (SPRn_REFX and SPRn_REFY are the coordinates
- for the upper-left corner of the reference characters, which are
- the characters a sprite uses for its appearance.) Then you use:
- <span class="fA ">PUT cXX sprite pNN x y</span>
- where NN is the number of the sprite in hexadecimal (if you
- write NN without the p in decimal it will be automatically
- converted). If cXX is c?? then the sprite is drawn with the
- colors of the reference characters, otherwise it's painted with
- the given colors.
- So, for example, to make a 2x2 sprite, you could base its
- reference characters on the board from the position (10, 10),
- assign it to sprite number 15, then have it drawn at position
- (40, 5). The Robotic for this is as follows:
- <span class="fA ">SET "spr15_refx" 10</span>
- <span class="fA ">SET "spr15_refy" 10</span>
- <span class="fA ">SET "spr15_width" 2</span>
- <span class="fA ">SET "spr15_height" 2</span>
- <span class="fA ">PUT c?? sprite p0f 40 5</span>
- You can then move the sprite around by changing spr15_x and
- spr15_y. For example, using:
- <span class="fA ">INC "spr15_x" 1</span>
- <span class="fA ">DEC "spr15_y" 1</span>
- will move the sprite to the northeast by 1.
- As with the overlay, any instance of char 32 in the sprite will
- not be shown, instead displaying the next underlying layer.
- Also, if the reference characters change, the sprite's
- characters will change to match, as will colors of a c?? sprite.
- Now that you have sprites set up and displayed, you can do
- collision tests. These check if moving sprites will cause
- collision (i.e. overlapping) with either the foreground (i.e.
- customblocks) or with other sprites. This way, you can prevent
- sprites from moving on top of walls or on top of other
- characters, or allow a sprite to damage another one when
- striking.
- This is done by using the following command:
- <span class="fA ">IF c?? sprite_colliding pNN x y "collision"</span>
- This will go to the label "collision" if moving the sprite x by
- y from its current position will cause it to collide with
- something. If anything besides c?? is used then (x, y) are
- absolute board coordinates instead.
- If collision is gone to, then the spr_clistN counters will be
- set to what it collided with and spr_collisions will be set to
- the number of things that the sprite collided with. If the
- sprite will have collided with the foreground, spr_clist0 will
- be set to -1. If for instance, the sprite also collided with
- sprites 2 and 3 spr_collisions will be set to 3 and spr_clist1
- will be 2, spr_clist2 will be 3. The values of spr_clistN with
- values of n greater than spr_collisions - 1 are undefined.
- Sprites can be set to ignore certain types of blocks in
- collision checks by setting the sprN_ccheck value of a given
- sprite N. In addition, setting a sprite's ccheck value to 2 will
- cause blank characters in a sprite from being shown, much like
- char 32.
- sprN_static uses the SCROLLEDX and SCROLLEDY counters instead
- of absolute board coordinates for determining collisions.
- Sprites can also have modified collision boxes, instead of them
- being limited to covering the sprite. Use the SPRn_CX/SPRn_CY
- counters to set the respective x,y coordinates of the upper-left
- corner of the collision box, and use SPRn_CWIDTH/SPRn_CHEIGHT to
- set its respective width and height (in tiles).
- Since sprites are global, they will persist upon changing
- boards. Since the vlayer is global as well, using the vlayer to
- reference characters (by setting the SPRn_VLAYER counter to 1)
- will keep sprite characters consistent between boards.
- <p class="helpcentered"><span class="f9 ">Unbound Sprites</span></p>
- Unbound sprites are sprites with special implementations,
- allowing significantly greater precision and access to extra
- character sets. They have their own setup, their own quirks, and
- their own unique restrictions.
- A sprite can be set as unbound by setting the SPRn_UNBOUND
- counter to 1 for a given sprite number n. Once this is done, the
- sprite becomes "unbound" from the tile grid and immediately
- starts using pixels as reference for the collision box (SPRn_CX,
- SPRn_CY, SPRn_CWIDTH, SPRn_CHEIGHT) and sprite location (SPRn_X,
- SPRn_Y). Other attributes, such as reference location and sprite
- dimensions, are left in terms of tiles. Essentially, this means
- that sprite control and collision checks can now be easily
- pixel-based.
- (If, for whatever reason, a sprite is given tile-based x/y
- parameters and placed before setting as an unbound sprite, the
- sprite will not adjust its x/y location in pixels to match and
- will keep the literal x/y values, adjusting them to be in terms
- of pixels instead of tiles once the unbound status is set.)
- On top of pixel-based manipulation, unbound sprites have
- extended display options at their disposal. Unlike other
- sprites, unbound sprites are allowed access to up to 14 "extra"
- character sets.
- First, one must place characters in the extra locations.
- This can be done in two ways: with the LOAD CHAR SET command or
- the CHAR EDIT command. With LOAD CHAR SET, extra character sets
- can be loaded into their proper places by using the @ prefix to
- load it into proper positions. The first extra character set
- begins at position 256, the second at 512, the third at 768, and
- so on. (One could also load a character set file that is much
- larger than normal to fill these positions.) CHAR EDIT can
- manipulate individual characters of an extra charset by being
- given similar numbers, but the command cannot take them
- directly; one must feed it a counter with the desired number
- instead.
- Second, the sprite must be set to access these charsets. This is
- done by setting an offset for that sprite using the SPRn_OFFSET
- counter. For example, setting SPR0_OFFSET to 256 will change all
- character references done by sprite 0 to the first extra
- character set.
- As this process implies, each unbound sprite is still limited to
- one character set's worth of characters - 256 - simultaneously.
- However, different unbound sprites can accept different offsets
- and display their sets of characters at the same time, resulting
- in up to 3840 different characters loaded at once (not counting
- the system set).
- In addition to access to larger numbers of characters, unbound
- sprites can provide transparency effects on a per-sprite basis,
- instead of merely treating certain characters as transparent.
- Each unbound sprite has its own transparent color, which is set
- with the SPRn_TCOL counter. All pixels of that color in that
- unbound sprite will not display, and instead show the next
- underlying layer.
- When assigned a ccheck value with SPRn_CCHECK, an unbound sprite
- will only apply its personal ccheck value in collision tests
- instead of the value of the sprite that initiated the check. In
- addition, unbound sprites can use a special ccheck value (3) to
- ignore transparent colors in collision checks.
- Finally, SMZX modes do not affect unbound sprite movement and
- manipulation. This fact can be exploited to overlap SMZX sprites
- and potentially raise detail to normal MZX mode levels while
- retaining much of SMZX's palette benefits.
- Unfortunately, unbound sprites cannot be used with all MZX
- renderers. At present, the overlay2 renderer is incompatible
- with unbound sprites.
- See the Sprite Counters and Robotic sections for other features
- of sprites not noted here.
- <a class="helplink" href="#COUNTERS.HLP__spc">Sprite Counters</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="SMZXMODE.HLP">
- <a class="helpanchor" name="SMZXMODE.HLP__095"> </a>
- <p class="helpcentered"><span class="f9 ">Super MegaZeux Modes</span></p>
- Super MZX modes (a.k.a. SMZX) allow richer color options at the
- expense of halved horizontal resolution. The number of colors
- per character doubles to four, while the number of total max
- colors on-screen at one time squares to 256. However, each mode
- works differently and has different limitations and uses.
- In the editor, F11 switches between display modes. To set Super
- MZX modes in a game, use the <span class="fA ">set "smzx_mode" # </span><span class="fF ">Robotic</span>
- command, where # is the SMZX mode (0 to revert to normal mode).
- Super MZX mode 1 is the simplest mode and the easiest mode to
- use. SMZX mode 1 simply blends the foreground and background
- colors to get the third and fourth character colors. It is
- obviously limited (this mode only allows editing of the 16
- base colors) but is useful for anti-aliasing and shading
- effects.
- Super MZX mode 2 is the most difficult mode to use, although it
- has its benefits. It allows considerable control over the
- palette and allows for some overlay and sprite translucency
- effects. All 256 colors can be individually manipulated, and
- each color also represents a subpalette of four colors that is
- used by a character when an object is assigned that color.
- The four colors (values in hex) are determined as such:
- -Color I is the background color number as the first and second
- digits. (For example, if background color is 5, the hex number
- of color I is 55.)
- -Color II is the foreground color number as the first digit
- and the background color number as the second. (For example, if
- foreground color is 10 and background color is 5, the hex
- number of color II is A5.)
- -Color III is the background color number as the first digit and
- the foreground color number as the second. (For example, if
- background color is 5 and foreground color is 10, the hex
- number of color III is 5A.)
- -Color IV is the foreground color number as the first and
- second digit. (For example, if foreground color is 10, the hex
- number of color IV is AA.)
- Super MZX mode 3 is the best for dynamic usage of the palette,
- and the easiest to edit in general. By default, its four colors
- are determined around a base value in hex (background color
- number as first digit, foreground color number as second). Color
- I's number is the base, II's is base+1, III's is base+2, and
- IV's is base+3. The numbers wrap around (so if your base is, for
- example, FF, color II would be 00).
- However, one can also directly change each value, disregarding
- these rules. This essentially allows 256 user-defined
- subpalettes of four colors each. These overrides, called SMZX
- indices, are loaded and saved out separately from the normal
- palette. These changes can only apply for renderers that can
- show unbound sprites.
- Character editing in Super MZX modes is noticeably different.
- While the character set can be edited in MegaZeux's internal
- character editor, certain changes occur. 1-4 selects the
- desired color; space no longer toggles between colors (it
- always sets here); right click no longer clears; clear mode is
- gone.
- Palette editing for SMZX modes is also accommodated by MZX's
- palette editor. However, the user needs to be in the relevant
- SMZX mode before loading the palette editor.
- On top of direct editing through the editor, SMZX palettes can
- be changed on the fly with Robotic. The counters for SMZX
- palettes are:
- <span class="fB ">SMZX_Rn</span>
- <span class="fB ">SMZX_Bn</span>
- <span class="fB ">SMZX_Gn</span>
- Manipulation of these counters can change or read the value of
- color n's red/blue/green value, respectively. n ranges from 0
- to 255.
- The SMZX indices can also be directly read or changed with the
- <span class="fB ">SMZX_IDXx,y</span><span class="fF "> counter. x is the palette color ranging from 0</span>
- to 255; y is one of the given color's indices ranging from 0 to
- 3.
- Lastly, SMZX palettes and character sets can be loaded and
- saved like any other palette or character set. SMZX indices must
- be loaded in a special manner in Robotic:
- <span class="fE ">SET "filename" "SMZX_INDICES"</span><span class="fF ">. </span>
- There is a deprecated way to load an SMZX palette in Robotic
- (SET "filename" "smzx_palette") due to constraints DOS imposed,
- but it is no longer necessary.
- <a class="helplink" href="#COUNTERS.HLP__szc">Super MZX Counters</a>
- <a class="helplink" href="#PALEEDIT.HLP__093">The Palette Editor</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#CHAREDIT.HLP__079">The Character Editor</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="VLAYER.HLP">
- <a class="helpanchor" name="VLAYER.HLP__vla"> </a>
- <p class="helpcentered"><span class="f9 ">The Vlayer and Its Uses</span></p>
- The vlayer is an extra, global graphical layer, but it is never
- directly seen in a game. It can only hold character and color
- info. The vlayer acts like a workspace allowing copying from/to
- overlay, copying from/to MZMs, copying between places in the
- vlayer, reading/writing individual graphical data to/from the
- vlayer, and reading strings from the vlayer.
- Another important aspect of the vlayer is the ability to
- reference a sprite to the vlayer. This allows indirect display
- of the vlayer through display of sprites. This can be
- exploited to create the semblance of an extra overlay layer.
- The vlayer defaults to 32768 characters large (256x128); its
- size can be as large as roughly 16.7 million characters (2^24).
- While in the editor, press Alt+V to enter the Vlayer Editor. The
- vlayer editor accepts the following commands:
- <a class="helpanchor" name="VLAYER.HLP__074"><span class="fE ">Alt+B - Block</span></a>
- Press Alt+B to start block mode, then move the cursor to the
- opposite corner of a rectangular block and press Alt+B again.
- You can then select an action to perform upon the block. In all
- copy/move operations, the cursor marks the new UPPER LEFT
- corner.
- Copy block will allow you to duplicate the block by moving the
- cursor to a destination and pressing Enter.
- Copy block (repeated) is the same as Copy block but can allow
- copying of the same block to multiple places.
- Move block will allow you to move the block to a new location.
- Clear block will erase the contents of the block.
- Flip block will flip the block upside down.
- Mirror block will flip the block left to right.
- Paint block will change the entire block to the current color.
- Copy to board will copy the block to the given spot of the
- board. You can choose to place it as either Custom Block, Custom
- Floor, or Text.
- Copy to overlay will copy the block to the given spot of the
- overlay.
- Save as MZM will save the block as a layer-type MZM file.
- Destinations for Move and Copy can overlap the original block
- safely. Ctrl+Dir is especially helpful when doing a repeated
- copy block; it moves the cursor the width or height of the
- block, ensuring no overlap when pasting.
- Like normal Block functions, one can copy between boards by
- selecting the board when the editor prompts the user for the
- block's destination. Use the B key to select the destination
- board.
- <a class="helpanchor" name="VLAYER.HLP___C"><span class="fE ">C - Color</span></a>
- Press C to select a new current color from a menu. The thing
- under the cursor is not affected. One can jump to a color by
- typing its hex code in the color menu; for example, typing "0D"
- would jump to color 013 (background color 0, foreground color
- D).
- <a class="helpanchor" name="VLAYER.HLP___F"><span class="fE ">F - Fill</span></a>
- Press F to fill in an enclosed area with the current character
- and color. The area must be completely surrounded by characters
- other than the character beneath the cursor. For example, you
- can fill over a solid square of As with something else. The
- current fill command may not work correctly for very large and
- complex areas - in this case, you must move to the unfilled
- areas and press F to continue filling. However, this happens
- very rarely.
- <a class="helpanchor" name="VLAYER.HLP__AltV"><span class="fE ">Alt+V - Exit Vlayer Editor</span></a>
- Alt+V will exit vlayer mode and return to editing the main
- board.
- <a class="helpanchor" name="VLAYER.HLP__103"><span class="fE ">Alt+P - Size</span></a>
- Alt+P will open the vlayer size menu. From here, one can change
- the dimensions of the vlayer; if the vlayer is shrank in one or
- both dimensions, the user will be asked for confirmation. Any
- characters removed by shrinking vlayer dimensions are lost, and
- any dimension settings that would cause the vlayer to go over
- its maximum size will be limited to the largest size possible by
- reducing the smallest given dimension until the vlayer is within
- size limits (if both given dimensions are the same size, width
- is reduced). Changing the size of the vlayer will clear the undo
- history of the vlayer.
- <a class="helpanchor" name="VLAYER.HLP__F1"><span class="fE ">F1 - Help</span></a>
- F1 will bring up context-relevant help. You can press F1 at
- almost any time.
- <a class="helpanchor" name="VLAYER.HLP__F2"><span class="fE ">F2 - Text</span></a>
- F2 will toggle text mode on and off. When text mode is on, Enter
- will go to the next line, and Backspace will delete going
- backwards. All printable characters will type in as text.
- <a class="helpanchor" name="VLAYER.HLP__Ar"><span class="fE ">Arrow - Move</span></a>
- The arrow keys will move the cursor. The edit window will scroll
- when necessary.
- <a class="helpanchor" name="VLAYER.HLP__AltAr"><span class="fE ">Alt+Arrow - Move 10</span></a>
- Alt with the arrow keys will move the cursor ten spaces at a
- time (or to a vlayer edge if it is under 10 spaces away in that
- direction).
- <a class="helpanchor" name="VLAYER.HLP__BkSp"><span class="fE ">Backspace - Delete</span></a>
- <a class="helpanchor" name="VLAYER.HLP__Del"><span class="fE ">Del - Delete</span></a>
- These two keys will delete everything under the cursor. The
- current character is not affected.
- <a class="helpanchor" name="VLAYER.HLP__End"><span class="fE ">End - L/R Corner</span></a>
- End will jump the cursor to the lower-right corner of the entire
- vlayer.
- <a class="helpanchor" name="VLAYER.HLP__Enter2"><span class="fE ">Enter - Character</span></a>
- Enter will alter the current character on the vlayer. Select it
- from a menu and then press Enter to confirm your choice.
- <a class="helpanchor" name="VLAYER.HLP__ESC"><span class="fE ">ESC - Exit/Cancel Mode</span></a>
- ESC will exit vlayer mode. If you are in block, text, or draw
- mode, ESC will instead cancel the current mode and return to
- normal vlayer editing.
- <a class="helpanchor" name="VLAYER.HLP__Home"><span class="fE ">Home - U/L Corner</span></a>
- Home will jump the cursor to the upper-left corner of the
- entire vlayer.
- <a class="helpanchor" name="VLAYER.HLP__Ins"><span class="fE ">Ins - Grab</span></a>
- Ins will select the character and color under the cursor
- as the current. The actual character is not affected.
- <a class="helpanchor" name="VLAYER.HLP__Sp"><span class="fE ">Spacebar - Place</span></a>
- Spacebar will copy the current character and color to the
- location under the cursor. Other characters will be deleted if
- they are under the cursor.
- <a class="helpanchor" name="VLAYER.HLP__Tab"><span class="fE ">Tab - Draw</span></a>
- Tab will toggle the current draw mode. When drawing is on, you
- will place a copy of the current character every time you move
- the cursor.
- <a class="helpanchor" name="VLAYER.HLP__CtrG"><span class="fE ">Ctrl+G - Goto Position</span></a>
- Ctrl+G will pop up a window, displaying target x,y coordinates.
- Set the coordinates by either typing in or selecting the
- desired X and Y values, and select OK to go to those coordinates
- on the vlayer. Choosing Cancel or pressing Escape cancels.
- <span class="fE ">P - Change Buffer Character</span>
- P will act much like Enter, but only change the character in the
- buffer. No character on the vlayer is changed with this action.
- <span class="fE ">Alt+Z - Clear (Vlayer)</span>
- Alt+Z will clear the vlayer entirely. You will be asked for
- confirmation. Clearing the vlayer will clear the vlayer undo
- history as well.
- <a class="helpanchor" name="VLAYER.HLP__CtrZ"><span class="fE ">Ctrl+Z - Undo</span></a>
- <a class="helpanchor" name="VLAYER.HLP__CtrY"><span class="fE ">Ctrl+Y - Redo</span></a>
- Ctrl+Z will undo an action; Ctrl+Y will redo any previously
- undone action. Action depth is determined by config file
- settings, with 100 as default.
- ---
- On top of being modifiable in the editor, the vlayer can be
- changed in a running MZX world with Robotic. To manipulate the
- vlayer in Robotic, "#n" is used instead of pure numbers in copy
- commands. For example, if copying a 2x2 block from (6,6) of the
- board to (0,0) of the vlayer is wanted, the command would be:
- <span class="fE ">COPY BLOCK 6 6 2 2 "#0" "#0"</span>
- Here are the vlayer copy functions:
- Board to vlayer: <span class="fA ">COPY BLOCK x1 y1 w h "#x2" "#y2"</span>
- Overlay to vlayer: <span class="fA ">COPY OVERLAY BLOCK x1 y1 w h "#x2" "#y2"</span>
- Vlayer to board: <span class="fA ">COPY BLOCK "#x1" "#y1" w h x2 y2</span>
- Vlayer to overlay: <span class="fA ">COPY OVERLAY BLOCK "#x1" "#y1" w h x2 y2</span>
- In the commands below, <span class="fe ">COPY BLOCK</span><span class="ff "> and </span><span class="fe ">COPY OVERLAY BLOCK</span>
- are interchangeable.
- Vlayer to MZM:
- <span class="fA ">COPY (OVERLAY) BLOCK "#x1" "#y1" w h "@name.mzm" m</span>
- Vlayer to string:
- <span class="fA ">COPY (OVERLAY) BLOCK "#x1" "#y1" w h "$stringN" c</span>
- Vlayer to itself:
- <span class="fA ">COPY (OVERLAY) BLOCK "#x1" "#y1" w h "#x2" "#y2"</span>
- There are several ways to give the vlayer working coordinates:
- Pure numbers - <span class="fE ">"#xxx"</span>
- Counter value - <span class="fE ">"#&counter&"</span>
- Expressions - <span class="fE ">"#('counter' + x)"</span>
- MZMs can be placed on the vlayer by using p02. Example:
- <span class="fE ">PUT "@visuals.mzm" image_file p02 x y</span>
- Reading and writing single characters or colors from the vlayer
- requires the vch and vco counters.
- For reading and writing characters use <span class="fE ">"vchX,Y"</span><span class="fF ">.</span>
- For reading and writing colors use <span class="fE ">"vcoX,Y"</span><span class="fF ">.</span>
- For example:
- <span class="fE ">SET "vch10,10" '+'</span><span class="ff "> sets the vlayer char at (10,10) to a plus</span>
- sign.
- <span class="fE ">SET "vco10,10" 15</span><span class="ff "> sets the vlayer color at (10,10) to white on</span>
- black.
- <span class="fE ">SET "temp" "vch10,10"</span><span class="ff "> sets temp to whatever the character at</span>
- (10,10) of the vlayer is.
- Vlayer size can be changed by setting the counter "vlayer_size"
- to the desired length of the vlayer. Doing this only sets the
- maximum size; the actual vlayer will not be this large unless
- the vlayer's dimensions are changed. All attempts to set the
- vlayer's size above the maximum will be ignored.
- To change the vlayer's dimensions in Robotic, use the counters
- "vlayer_width" and "vlayer_height". When one dimension is
- given, the other becomes as large as possible to fill the given
- vlayer. For example, if one has a vlayer 50000 characters large
- and sets vlayer_height to 499, the vlayer's width will become
- 100 characters wide (for a total vlayer size of 49900
- characters).
- All bad values of vlayer_size, vlayer_height and vlayer_width
- (0 and below) will be changed to 1.
- Remember that the vlayer is global. If many vlayers are wanted,
- liberal usage of MZM saving and loading can help get around this
- problem.
- <a class="helplink" href="#COUNTERS.HLP__vlc">Vlayer Counters</a>
- <a class="helplink" href="#STRINGS.HLP__1st">Strings, Special Formatting, and Their Place in Robotic</a>
- <a class="helplink" href="#MZM.HLP__mzm">Using MZMs</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="MZM.HLP">
- <a class="helpanchor" name="MZM.HLP__mzm"> </a>
- <p class="helpcentered"><span class="f9 ">Using MZMs</span></p>
- MZM files are rough equivalents of the ANSI files used in older
- MZX versions. MZMs, however, are much more powerful and can
- store much more information. MZMs can be up to 65535 x 65535
- tiles in size. MZMs are useful for easy access of reused
- graphics and reused, multi-Robot entities.
- MZMs come in two modes: "board" and "layer".
- * Board mode saves color, param, ID, and under information.
- However, it cannot save the player, scrolls or sensors.
- Board mode can save Robots and most built-ins; MZMs saved
- in the editor will save fresh robots, while MZMs saved
- in-game keep the Robots' current states.
- * Layer mode saves only color and char information.
- Any information not saveable will be replaced by a customblock
- facsimile.
- When loading a board MZM file to the overlay or vlayer, the
- character used is the parameter stored. Outside of customblocks
- and related, different characters could appear due to different
- param settings (especially built-ins and Robots).
- One can save MZMs in the editor; use the block action function.
- MZMs saved in the editor from the board are saved as board;
- from the overlay and vlayer, MZMs are always saved as layer.
- Robotic methods of saving MZMs are:
- <span class="fA ">COPY BLOCK x y w h "@filename" p</span>
- <span class="fA ">COPY OVERLAY BLOCK x y w h "@filename" p</span>
- <span class="fA ">COPY (OVERLAY) BLOCK "#x" "#y" w h "@filename" m</span>
- X/Y are the coordinates of the block's upper-left corner; w/h
- are the width and height of the block; filename is the name of
- the file (the @ is required); finally, p determines the MZM
- type. 1 saves as layer; 0 saves as board. 0 is integral for
- copying non-graphical data (especially Robots); 1 is proper for
- copying graphical data, as the block's appearance will stay as
- exactly as it was when saved. The last case is for saving from
- the vlayer to MZM. The x,y coordinates MUST be in "#x" "#y"
- format, and the m MUST exist. Any valid MZX string can take the
- place of a filename, but the @ prefix is still required.
- Unlike with board MZMs containing Robots saved in the editor,
- loading board MZMs containing runtime Robots in the editor is
- unsupported. Any such Robot will be replaced with a customblock
- fascimilie. If you want any such MZMs to be fully loaded, they
- must also be loaded at runtime.
- The Robotic method of loading MZMs is:
- <span class="fA ">PUT "@filename" image_file pNN x y</span>
- filename is the name of the MZM file (after the required @),
- x and y are the upper-left corner's coordinates, and NN is 00
- for board, 01 for overlay, 02 for vlayer. Again, any valid
- string can take the place of a filename if preceded by the
- required @ prefix.
- Finally, MZMs will neither be saved nor loaded if at the edge
- of a board.
- <a class="helplink" href="#USINGTHE.HLP___g">Alt+B OR Alt+Enter - Block action</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="TRIG.HLP">
- <a class="helpanchor" name="TRIG.HLP__tri"> </a>
- <p class="helpcentered"><span class="f9 ">Trigonometric Functions</span></p>
- Trigonometry can simplify some complex engines, and MegaZeux
- can access several trigonometric functions with fair precision.
- However, accessing trigonometric functions in MegaZeux requires
- some setup.
- Because MegaZeux works solely with integers, you need to set
- the counter "multiplier" to determine how the non-integer
- working value is converted. For example, if your function
- has a value of .86602 and "multiplier" is set to 10000, the
- resulting value would be 8660. Results are always truncated
- (that is, have everything to the right of the decimal removed).
- The default value for the "multiplier" counter is 10000.
- The counter "c_divisions" determines the precision of the trig
- functions by determining how many times the circle is divided.
- Sensible values for this include 360 (degree precision), 21600
- (arc-minute precision) and 1296000 (arc-second precision). The
- default value for the "c_divisions" counter is 360.
- The "divider" counter works solely on inverse trigonometric
- functions. Its effect is to divide the number passed to an
- inverse function before it is calculated. For example, if you
- have "divider" set to 100 and try to calculate "acos50", MZX
- will calculate the arccosine of .50 (50 divided by 100),
- outputting 60 degrees. The default value for the "divider"
- counter is 10000.
- These are the trig functions MegaZeux can directly utilize.
- <span class="fA ">SIN - sine</span>
- <span class="fA ">COS - cosine</span>
- <span class="fA ">TAN - tangent</span>
- <span class="fA ">ASIN - arcsine (inverse sine)</span>
- <span class="fA ">ACOS - arccosine (inverse cosine)</span>
- <span class="fA ">ATAN - arctangent (inverse tangent, takes signs into account)</span>
- <span class="fA ">ARCTAN - atan2 (special form of arctangent, takes two values</span>
- <span class="fA ">in the form of ARCTANdy,dx ("dy" is the first input, "dx" the</span>
- <span class="fA ">second))</span>
- NOTE: The inverse functions output degrees, not radians.
- To use the counters you put the unit number after the counter
- name. Here's an example. To display the cosine of 30 degrees
- with degree-based precision, the needed line would be:
- <span class="fE ">* "&cos30&"</span>
- Trig functions can also take expressions and counters. However,
- counters can only be inserted through expressions; a construct
- like "&sinlocal&" will not work, but "&sin('local')&" will.
- <a class="helplink" href="#COUNTERS.HLP__mth">Mathematical Counters</a>
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="PROCESS.HLP">
- <a class="helpanchor" name="PROCESS.HLP__prc"> </a>
- <p class="helpcentered"><span class="f9 ">Cycles and Board Scans - How MZX Processes Robots</span></p>
- Knowing MZX's commands is important for coding, obviously, but
- knowing how and when they get executed can be just as
- paramount.
- After executing code in the global Robot, MegaZeux executes
- Robotic code by scanning the board from the top-leftmost Robot
- first, then proceeding from left-to-right, jumping down to the
- beginning of the next line when at the end of its current line,
- and ending at the Robot in the bottom-right corner. This action
- is called a BOARD SCAN. MegaZeux then does a clean-up scan in
- reverse to catch certain actions. This complete act of scanning
- a board and executing any Robotic commands is called a CYCLE,
- and when a Robot completes all of its commands for that cycle,
- it's called ENDING A CYCLE for that Robot. After a cycle is
- executed, the display is updated, so MegaZeux's internal frame
- rate is essentially the same rate as the number of cycles
- executed per second.
- By default, MegaZeux will run up to 40 commands per Robot in a
- cycle. Setting the COMMANDS counter can set the number of
- commands processed per Robot per cycle to be lower or
- (significantly) higher. Some commands, however, have the ability
- to end processing prematurely; these are called cycle-ending
- commands. When the COMMANDS value is very high, MegaZeux can end
- up consuming large amounts of processing power in a single
- cycle. Cycle-ending commands can limit the number of commands
- processed in a cycle to only what is necessary. Otherwise, very
- high COMMANDS values can potentially slow down MegaZeux or even
- cause MegaZeux to trigger safeguards that prevent it from
- freezing.
- The two commands that are best suited for ending the cycle are
- WAIT 1 and CYCLE 1, due to their very low amounts of side
- effects. While WAIT 1 is preferred in most cases, there is a
- subtle difference between processing the two due to a quirk with
- reverse scan detailed later in this section.
- As a simple rule of thumb, commands that move anything on the
- board generally end a cycle, especially moving the player,
- though this is not always the case.
- The amount of cycles MegaZeux processes per second is set by the
- MZX_SPEED value. Speed 1 is completely processor-bound and will
- execute as many cycles per second as possible. Other speeds
- process cycles according to this formula:
- <span class="fE ">62.5 / (MZX_SPEED - 1) = cycles per second</span>
- Simplified, this means that MegaZeux can be set to consistent
- rates ranging from 62 & 1/2 cycles per second (speed 2) all the
- way down to 4 & 1/6 cycles per second (speed 16).
- The CYCLE command dictates how often a Robot is active. By
- default, Robots will execute commands on every cycle, but the
- CYCLE command can cause a Robot to spend a certain number of
- cycles idling before executing commands. Robots can go from
- executing 1 out of every 1 cycles (i.e. every cycle) to 1 out
- of every 255.
- Special care should be given to the scan that happens in reverse
- to clean up certain actions. This scan ensures that if a Robot
- sends a Robot that has already executed its commands to a label,
- then the target Robot can actually be sent to the proper label.
- Certain commands in the target Robot - specifically, the
- cycle-ending commands that can act across multiple cycles - can
- cause that Robot to execute the new label commands in the very
- same cycle. The global Robot is exempt from this process.
- Commands that can prompt this behavior are:
- <a class="helplink" href="#COMMANDR.HLP____5">/ "string"</a>
- <a class="helplink" href="#COMMANDR.HLP___e1">END</a>
- <a class="helplink" href="#COMMANDR.HLP___g4">GO [dir] #</a>
- <a class="helplink" href="#COMMANDR.HLP___t7">TRY [dir] "label"</a>
- <a class="helplink" href="#COMMANDR.HLP___w1">WAIT #</a>
- For more detailed information about what commands end cycles and
- when, read cycles_and_commands.txt in the additional
- documentation.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="PARTIAL.HLP">
- <a class="helpanchor" name="PARTIAL.HLP__par"> </a>
- <p class="helpcentered"><span class="f9 ">Partial Character Sets</span></p>
- Partial character sets are smaller than full sets, as the name
- definitely implies, but they only overwrite the characters they
- are told to when loaded. This leaves the rest of the characters
- intact. Heavy animations and changes that keep part of the
- character set intact (such as the alphanumeric characters) are
- two issues best tackled with partial character sets.
- One can save a partial character set in the editor by selecting
- a starting character value (aka "offset") and a length value.
- These fields show up when you export a character set, under the
- filename input.
- To load partial character sets into your current set, you have
- two options. You can firstly load it as you would a normal
- character set; this replaces all characters from the start of
- the target character set until the end of the partial set.
- Secondly, you can load the partial set into a non-0 position of
- the target character set. In the editor, this can be done by
- setting the offset field in the import character dialog, under
- the filename input. The @xxxx prefix allows this in Robotic;
- xxxx is the number (in decimal) of the first character to
- replace in the target character set.
- <a class="helplink" href="#ROBOTICR.HLP__087">Robotic Reference Manual</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="UPDATER.HLP">
- <a class="helpanchor" name="UPDATER.HLP__099"> </a>
- <p class="helpcentered"><span class="f9 ">The MegaZeux Updater</span></p>
- Modern MegaZeux versions on supported platforms, such as
- Windows, have the ability to update MegaZeux from MegaZeux
- itself. The updater can be set to run by pressing either F7 or U
- on any title screen, and can also be configured to check for
- updates every launch in config.txt settings.
- MegaZeux checks the sites listed under the config.txt settings,
- in order. By default, the updater checks the Stable branch of
- MegaZeux, but can be set in config.txt to other branches (such
- as Unstable or Debytecode).
- If a host reports back that your version of MegaZeux is current,
- the next host can be checked to see if they differ.
- If a new version of MegaZeux is detected, MegaZeux offers the
- user these choices:
- -Upgrading to the new version using the "Upgrade" button.
- -Updating the current version to whatever minor "refreshed"
- version may exist (where the version number remains the same,
- but a small issue or two not caught before release is fixed)
- using the "Update Old" button.
- -Cancelling out of the update process with the "Cancel" button.
- No changes are made.
-
- Once the option is chosen, MegaZeux lists what files will be
- added, changed, or deleted by the pending update. At this point,
- the user can still cancel out of updating with the Escape key.
- Pressing Enter at this point begins the updating process.
- The updater will then attempt to download the necessary files
- for the update. The download indicator lists the current file
- being downloaded, its size in bytes, and current file number
- out of total files to be downloaded. If all files are properly
- downloaded, MegaZeux will apply the update and notify the user
- of a restart. Click "OK" and MegaZeux will restart, fully
- updated.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="NEWINVER.HLP">
- <a class="helpanchor" name="NEWINVER.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">NEW in MegaZeux!</span></p>
- February 20th, 2019 - MZX 2.91j
- Here's a huge collection of bugfixes and a couple of features
- that needed to be split off from 2.92.
- Features: every release has an HTML copy of the help file now,
- the editor keeps separate board/overlay/vlayer buffers now, and
- anyone who still uses scrolls/sensors can view their info in the
- counter debugger. The global volume settings use an exponential
- curve now, range from 0 to 10, and have updated UI elements.
- Fixes in this release include: the updater won't complain about
- mzx_help.fil anymore, the NDS and 3DS ports have keyboards that
- work again, several bugs that would lead to worlds/saves with
- "Robot # does not exist on board #" errors have been fixed, and
- several crashes have been fixed.
- USERS
- + A complete HTML copy of the MegaZeux help file is now packaged
- with releases for all platforms. It can be found in the docs/
- folder.
- + Nvidia and AMD switchable graphics drivers should now detect
- MegaZeux and MZXRun properly on Windows.
- + The editor now remembers the contents of the buffer when
- switching between board, overlay, and vlayer editing. For
- example, if a robot is selected on the board before switching
- to overlay mode, the robot will still be in the buffer when
- the user switches back to board mode.
- + The editor now remembers the last filename for importing and
- exporting MZM, MZB, CHR, PAL, and PALIDX files.
- + Scrolls and sensors can now be viewed in the counter debugger.
- They can be found by expanding the Board list (when present).
- + Readded "#version 110" directives to all GLSL shaders, fixing
- warnings on some Intel HD drivers. OpenGL ES builds should now
- comment out these directives.
- + Fixed bug where using Modify+Grab on built-ins could clear the
- floor under the built-in.
- + Fixed bug where key repeat wouldn't work for any text field in
- the NDS/3DS/Wii ports. This also affected the robot editor in
- Wii builds.
- + Fixed NDS touch screen support. Touching the screen no longer
- acts like escape and the keyboard properly works again.
- + Fixed a bug where the NDS keyboard would drop keypresses on
- games not running at speed 2.
- + The counter debugger now correctly displays the value of
- local0.
- + Fixed a bug where the counter debugger would not reopen to
- the correct robot local# value.
- + MZX now attempts to retry removal of an old file when updating
- if deletion fails initially. Error messages related to the
- failed deletion of "mzx_help.fil" or "assets/help.fil" are now
- suppressed as they are caused by a bug in older MZX versions.
- + The help file is now closed before the updater restarts MZX.
- + Fixed crash bug that could occur when removing old files after
- an update.
- + Improved manifest validity checks.
- + Fixed board editor crash caused by invalid thing IDs.
- + Player movement key repeat no longer resets when the player is
- locked. It will reset for a direction only when the arrow key
- corresponding to that direction is released. This fixes a bug
- in Brotherhood where the player would move at a fraction of
- the speed they were supposed to while swimming.
- + Added version checking for legacy IF c?? Sprite behavior. In
- versions 2.82b and prior, c?? would make this command ignore
- the provided param and use SPR_NUM instead. This fixes Project
- MoveZig.
- + Fixed spelling error in missile param dialog.
- + Switching boards in the editor now properly translates the new
- board's mod name, fixing cases where board mods would restart
- sometimes.
- + Fixed a bug where the current board mod wouldn't play after
- starting a listening mod, testing, returning to the editor,
- and then disabling the listening mod.
- + Replaced the linear volume setting curve with an exponential
- curve to make lower volumes less loud. The volume settings can
- now be set from 0 to 10 instead of from 1 to 8.
- + The config file setting pc_speaker_on=0 no longer prevents
- turning on PC speaker SFX at runtime.
- + Added temporary workaround for numpad 5 key detection when
- numlock is disabled.
- + "Forest to floor" and "Collect bombs" are properly enabled
- again for new boards by default. This fix doesn't alter config
- settings or saved .editor.cnf defaults.
- + The "Downver. world (MZX)" option in the "Export as" dialog
- is now completely highlighted when selected. (Lancer-X)
- + Starting MegaZeux with "startup_editor=1" no longer loads the
- default palette over the startup world's palette.
- + The move block action and undo/redo operations should now
- preserve the element beneath the player.
- + Fixed crashes caused by using block actions or COPY BLOCK on
- the player while the player is standing on a sensor.
- + Fixed several bugs where editor block actions and the commands
- COPY/COPY BLOCK would not check for the player or clean up
- robots/scrolls/sensors. Worlds/saves saved after these bugs
- occured could display "Robot # does not exist on board"
- errors when loaded.
- + The DUPLICATE SELF x y and DUPLICATE SELF dir commands now
- properly check for the player before attempting to duplicate
- a robot. This fixes a bug where MZX could create saves with
- "Robot # does not exist on board" errors.
- + Fixed a crash that could occur when importing a new board.
- + Fixed a bug where the 3DS onscreen keyboard would send key
- releases instead of key presses.
- + The 3DS onscreen keyboard now returns shifted chars when shift
- is active.
- + Fixed a bug where the libxmp implementation of MOD_ORDER and
- JUMP MOD ORDER could not restart the current order.
- + Fixed a crash with the libxmp implementation of MOD_POSITION
- when providing an out-of-bounds value.
- + Fixed a bug where Ctrl+[key] shortcuts would not work while a
- dialog list element was active on the Wii.
- + Fixed a bug where setting the board mod/charset/palette could
- truncate the first letter of the path on the Wii.
- + "mask_midchars" no longer masks the non-text char 127.
- + The message box title and the command [ now properly display
- the graphic for char 9 instead of a tab.
- + Added newline escaping to robot, counter, and string names in
- the counter debugger to work around formatting bugs.
- DEVELOPERS
- + Added the hlp2html utility, which can be used to convert
- WIPHelp.txt into web and printable HTML files.
- + Updated to latest NDS ARM7 template.
- + Updated SDL2 for Windows release builds to SDL 2.0.9.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- December 9th, 2018 - MZX 2.91i
- A small release with a bunch of fixes for bugs introduced mostly
- within the past few versions. Other highlights: joysticks should
- be hot pluggable now and Alt shortcuts now also work with the
- command key in Mac builds.
- USERS
- + MZX now properly detects when joysticks are connected and
- disconnected at runtime for platforms using SDL 2.
- + Fixed bug where the robot editor would open with the cursor at
- the end of the line instead of the start of the line.
- + Fixed a bug where the robot box could display using MZX mode
- but SMZX colors if opened on the first frame SMZX was enabled.
- + The built-in text box title should display correctly again in
- SMZX modes.
- + Fixed regression where keys could trigger wrong "keyN" labels.
- + Alt+F2 can now be used to open the settings dialog.
- + Mac users can now optionally use command in place of alt.
- + Improved editor cursor color selection for SMZX modes 2 and 3.
- DEVELOPERS
- + Fixed make test for SDL 1.2 builds.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- November 14th, 2018 - MZX 2.91h
- A minor release primarily focused on improving counter/string
- lookups and fixing bugs in the robot editor and counter debug
- menu.
- USERS
- + auto_glsl correctly switches to glsl on startup now.
- + Fix bug where "(editor)" wouldn't always display in the
- caption when editing.
- + The single line macro dialog now allows the full size of the
- single line macros to be edited. This fixes a crash caused by
- having a macro configured to be longer than the edit box could
- display.
- + Setting a counter to a string no longer duplicates the entire
- string in memory.
- + Fixed faulty BOARD_X and BOARD_Y bounding for values greater
- than the board width or height. Fixes potential crashes with
- BOARD_CHAR, BOARD_COLOR, BOARD_ID, and BOARD_PARAM.
- + The value of SPR_YORDER is now correctly displayed in the
- counter debug menu.
- + Improved the performance of the counter debug search.
- + Fixed cosmetic counter debug menu issue where the the "String"
- tree appeared to be expandable/collapsable when empty.
- + Fixed faulty substring searching algorithm used in the counter
- debug menu search and for breakpoints.
- + Added "Search" and "Cancel" buttons to the counter debug menu
- search so it can be used with the mouse.
- + When testing from the editor, if "__test.mzx" exists MegaZeux
- will now choose a numbered name for this world backup (e.g.
- "__test2.mzx") instead of potentially overwriting work.
- + Fixed bug where six-digit line numbers would display in the
- robot editor incorrectly.
- + Inserting text in the robot editor using the F2/F3/F4/F5
- shortcuts can no longer exceed the line length limit, fixing
- related crashes.
- + Using F5 in the robot editor generates decimal numbers instead
- of hex numbers now.
- + Fixed robot editor bug where pressing delete at the end of a
- line wouldn't join lines unless the current line was empty.
- + Restored the ability to use the F7/F8 cheats outside of the
- editor. This feature was broken in 2.91g. To enable cheats
- outside of the editor, the config option "allow_cheats" must
- now be set to "mzxrun" or 1. The former will enable them for
- MZXRun only (same as from 2.82b to 2.91f) and the latter will
- enable them for both executables (same as the -t flag in DOS
- versions).
- + Fixed bounding bug on the "board_default_width" and
- "board_default_height" config file options.
- + Separated robot editor "Search and Replace" dialog into a
- "Search" dialog and a "Replace" dialog. Both dialogs are
- smaller in size than the original. The order of the elements
- in these dialogs has also been altered to be more user-
- friendly. The hotkey for the new replace dialog is Ctrl+H.
- + Fixed Ctrl+R repeating for the "Replace All" robot editor
- search operation. Previously, it would act like "Replace".
- + Canceling the robot editor search/replace menus no longer
- disables the repeat feature.
- + Searching in the robot editor now properly preserves the case
- of the search string if case sensitive search is disabled.
- + Fixed bug where toggling the robot debugger position wouldn't
- take effect immediately.
- + Exiting the editor with the "startup_editor" config setting
- enabled should no longer inappropriately close MZX.
- + Selecting "tile" for the char editor import mode works again.
- + The bounds for the main editor charset import/export offsets
- and size have been increased to allow for extended charset
- values.
- + Fixed the "KEY?" labels for keys that no longer have a unicode
- representation in SDL2.
- + Fixed SET "$string" "FWRITE#" bug where, if # exceeded the
- length of $string, the output would be clipped to the wrong
- length.
- + The missile color ID char is now correctly set back to its
- default value when a new world is created from the editor.
- DEVELOPERS
- + Cleaned up the counter debug menu code.
- + Switched from uthash to a modified version of khash for
- counter and string lookups. Counters/strings now consume less
- memory and counter/string lookups should perform slightly
- better on most platforms.
- + Replaced toupper/tolower in memcasecmp and substring searching
- with a lookup table-based implementation of tolower.
- + Refactored the following contexts to use the main loop: robot
- editor, intake, thing menu. For compatibility purposes the old
- intake still exists, but all robot editor hacks have been
- removed from it.
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- October 7th, 2018 - MZX 2.91g
- This bugfix release fixes various minor-to-moderate bugs in
- various areas of MegaZeux. The title/game update code has gone
- through a fairly major overhaul and several parts of MegaZeux
- have been combined to use the same loop. The conversion of
- MegaZeux's interfaces to be compatible with this loop is an
- ongoing process expected to occur over several versions.
- USERS
- + Added "allow_screenshots" config file option. Setting this
- option to 0 will disable the built-in screenshot feature.
- + The F12 key can now be detected by Robotic.
- + Loading saves from the title screen no longer resets TIME.
- + Loading saves from the title screen no longer erroneously
- changes the player restart position.
- + Swapping worlds now sets the correct TIME and player restart
- position values.
- + Fixed a bug where the fade out effect from COLOR FADE OUT
- would be reset after any Robotic dialog.
- + Undo for overlay and vlayer mouse drawing now works properly.
- + Mouse drawing in the editor now draws smooth lines instead of
- lines with gaps.
- + Fixed move block bug when the source and destination both
- overlapped the player.
- + Palette editor component entry now accepts most of the same
- inputs as dialog number boxes.
- + The board name in the caption now updates to reflect the
- current board while testing.
- + Fixed bug where TIME would either decrement normally or not
- decrement at all while the slow time effect was active.
- + Added compatibility for pre-port endgame teleport behavior.
- In DOS versions of MZX, the endgame teleport would disable
- itself after being triggered for the first time and any
- following endgame would instead trigger a game over.
- + Reduced stutter in NDS and 3DS main screen scrolling.
- + Fixed a bug where creating a string MZM would not correctly
- set the string's length for preexisting strings.
- + Fixed a bug where loading robot source code from a string
- wouldn't work correctly with the robot debugger.
- + The help system is now accessible from the main menu and game
- menu.
- + The settings screen is now accessible from the main menu, game
- menu, editor, and palette editor.
- + The shortcut Ctrl+F2 can be used to open the settings screen
- from anywhere the settings screen is accessible. This shortcut
- works even if F2 is used for a different feature and will also
- ignore the value of the F2_MENU counter.
- + Fix a crash that would occur decrypting a world with a
- password exactly 15 chars long.
- + The label for the INPUT STRING command should no longer be
- able to overflow outside of the window.
- + Fix a crash that would occur attempting to open the help file
- from the world decryption confirm dialog.
- + Fix bug where saved layer MZMs and board MZMs without robots
- would have useless extra data at the end of the file.
- + Scroll contents properly display game colors during gameplay.
- + An error message is now displayed for failed board exports.
- + Enabled writing zip data descriptors on the 3DS to decrease
- saving time.
- - The "password protected" error message has been removed as it
- was redundant with the confirmation dialog following it.
- - The "disassemble_extras" and "disassemble_base" options no
- longer affect Robotic output during gameplay. SAVE_ROBOT will
- always output extra words and base 10 numbers regardless of
- user configuration.
- DEVELOPERS
- + Implemented a main event loop to replace the various separate
- event loops scattered around MegaZeux. See core.h and core.c
- for more info.
- + Refactored the following contexts to use the main loop:
- titlescreen, gameplay, main menu, game menu, editor, palette
- editor.
- + When enabled, the debug FPS display will now update from any
- interface using the main loop. If fullscreen mode is active,
- the FPS display will now appear in the top-left corner of the
- screen for any main loop interface aside from the editor.
- + The --disable-screenshots config.sh option can be used to
- disable screenshot support. This allows platforms that don't
- use render_layer.c to stop building and linking it.
- + Cleaned up m_show()/m_hide() overuse.
- + Replaced all uses of "bool" with "boolean" to avoid potential
- C/C++ compatibility issues.
- - Removed most old/unused source code in contrib/unzip, src/old,
- and src/vfs.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- September 17th, 2018 - MZX 2.91f
- A bugfix release focusing primarily on renderers, the 3DS and
- Wii ports, and the Makefile build system. Highlights: the 3DS
- port should perform better now, the Wii port's GX renderer has
- been restored, the 'darwin' platform has more Unix-like options
- now, and several crashes have been fixed.
- USERS
- + The config setting 'audio_buffer' can also be specified with
- 'audio_buffer_samples' now. The default value for this setting
- is now 1024 (instead of 4096).
- + Fixed a crash that could occur in the counter debugger.
- + Fixed a crash that occurs when attempting to add a watchpoint
- for robot local counters, loopcount, etc. Using these counters
- as watchpoints will watch the global robot's instances of
- these variables (for other robots, use e.g. r#.local1).
- + Using SMZX_INDICES or LOAD_ROBOT on an unset string no longer
- causes a crash.
- + png2smzx is now properly bundled with Linux builds.
- + Improved the performance of loading partial charsets for the
- glsl, opengl2, and 3DS renderers. Other renderers were not
- affected by this issue.
- + Fix opengl2 unbound sprite regression introduced in 2.91e.
- + The opengl2 renderer now correctly draws unbound sprites
- containing chars with a transparent foreground color.
- + 3DS renderer optimizations. (asie)
- + 3DS screen focusing now mimics the NDS port's behavior. (asie)
- + Fixed bug where games could fail to open files on some
- platforms if the paths contained duplicate slashes. (asie)
- + Added a Wii software layer renderer. This renderer can be
- selected with "video_output = xfb" in the config file.
- + Wii GX renderer optimizations.
- + Added layer rendering support to the GX renderer.
- + The Wii GX renderer now uses the gl_vsync config option to
- toggle vsync. For the Wii, this feature is on by default.
- Disabling it may increase the framerate of some games but may
- also cause other problems.
- + The loading bar on console platforms now redraws the screen
- less often.
- DEVELOPERS
- + GAMESDIR/BINDIR/SHAREDIR now properly apply PREFIX when they
- are not explicitly set by config.sh.
- + LIBDIR is now user-definable like BINDIR et al. Variations
- such as "lib64" currently must be explicitly provided for
- platforms that still use them.
- + Remove src folder from CFLAGS to fix a bug where system
- includes could be mistaken for MegaZeux headers. All includes
- of MegaZeux headers must be done using relative paths now.
- + Fixed include bugs for X11 and Carbon clipboard handlers.
- + Makefile now attempts to respect the prefix when running
- sdl-config, sdl2-config, and libpng-config.
- + Renamed the "darwin" config.sh platform to "darwin-dist".
- + Added "darwin" and "darwin-devel" config.sh platforms. These
- act like Mac OS X versions of the "unix" and "unix-devel"
- options.
- + The darwin-dist build system and instructions are now somewhat
- more clear and robust.
- + Fixed a bug where zlib wouldn't necessarily be linked to
- png2smzx.
- + Renderers will now use render_layer to draw the text_video
- fallback if no render_graph function is present.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- September 3rd, 2018 - MZX 2.91e
- Bugfix release fixing some crashes, port bugs, and some other
- significant issues affecting a variety of things.
- USERS
- + Fixed bug where loading a board charset would also clear all
- of the extended charsets.
- + Fixed bug where loading a default charset in the editor would
- also clear all of the extended charsets.
- + Loading a 2.91 world when a renderer with no layer support is
- active no longer triggers an error message.
- + Fixed a memory corruption bug in the non-SDL Wii port caused
- by faulty threading code.
- + Fixed crash that could occur when updating a board undo frame.
- + Fixed crash when changing to a board with overlay disabled in
- overlay editing mode.
- + Fixed a bug where the protected charset could get cleared for
- renderers without layer rendering support.
- + Enabled C99-compliant stdio functions for mingw, fixing at
- least one crash bug and possibly improving performance.
- + The NDS port now attempts to detect argv[0].
- + The 3DS port now attempts to detect argv[0] and otherwise will
- start in /3ds/megazeux instead of /.
- + The 3DS port .3dsx file is now located in /3ds/megazeux.
- + The MOVE PLAYER [dir] and MOVE PLAYER [dir] [label] commands
- now update the commands cycle and commands total values.
- + Fixed a bug where MZX and checkres wouldn't accept some
- DEFLATE-related ZIP flags.
- + checkres no longer crashes on failing to open a resource zip.
- + The window caption now updates correctly when using either of
- the overlay renderers.
- + Update checking will now display an error instead of silently
- hiding the updater when the updater fails to initialize.
- + Fixed an issue where UIs would execute redundant frames.
- + Fixed a bug where string comparison would not order strings of
- different lengths correctly. (GreaseMonkey)
- DEVELOPERS
- + Code style has been cleaned up in numerous files.
- + Moved GLSL shaders from assets/shaders/ to assets/glsl/.
- + Added missing GPL headers to GLSL shaders and added slightly
- better documentation to them.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- July 12th, 2018 - MZX 2.91d
- This is a minor bugfix release to get a handful of fixes out
- primarily concerning the updater. The NDS/3DS/PSP/Wii ports now
- include a copy of Caverns of Zeux.
- USERS
- + Added timeouts to updater network operations.
- + Fixed bug where the updater would retry downloads without
- regard to the status code.
- + The updater is now force-disabled for all non-Windows
- platforms in config.sh.
- + Fixed bug where breakpoints could trigger on the wrong line.
- + Amended VOLUME/MOD FADE # # bounding to clamp values in port
- versions. DOS versions will still wrap between 0 and 255.
- + Added DOS compatibility fix for sprN_off.
- + Window caption is now properly updated when loading a world
- from an unedited world in the editor.
- + Fixed bug where ".." would change to the current directory if
- the current path ended in a path separator.
- - Removed undocumented support for "title.cnf", "game.cnf", and
- "editor.cnf" config files, which would have been loaded from
- the same directory as the main config (not to be confused with
- world-specific config files, which are still supported).
- DEVELOPERS
- + The MSYS2 buildscripts have been overhauled to work with the
- new devkitPro pacman repositories.
- + Added config options to select vorbis, tremor, tremor-lowmem,
- or to disable ogg vorbis file support. The 3DS and Wii ports
- now use tremor instead of tremor-lowmem.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- March 4th, 2018 - MZX 2.91c
- This release contains an assortment of bugfixes ranging from
- player clone fixes to obscure compatibility patches. A handful
- of updater issues have been fixed (or at least addressed).
- MegaZeux can now automatically check for updates on startup on
- Windows platforms. This behavior can be configured, and by
- default will simply leave a message in the window caption.
- USERS
- + MegaZeux can now automatically run the updater on startup
- on applicable platforms. This can be configured with the
- 'update_auto_check' config file option.
- + Fixed a bug where several .MOD variants stopped working with
- libxmp enabled.
- + Sound effects in subdirectories can now be used in the SFX
- editor.
- + Fixed a bug where checkres would fail on legacy worlds with
- very long custom SFX.
- + Checkres no longer ignores the SFX tables of 2.90+ worlds.
- + Fixed a bug where interpolated expressions containing ternary
- operators could terminate counter names early.
- + Fixed faulty IF ANY compatibility behavior.
- + Fixed a bug where FWRITE functions could change the case of
- user-defined filenames when creating new files on non-Windows
- platforms.
- + SMZX mode 1 palettes are now exported correctly as 16 colors
- instead of as 256 colors.
- + Fixed subtly inconsistent timing in certain built-ins.
- + Fixed bug where wind and transporters could clone the player.
- + MegaZeux now restarts correctly in paths containing spaces
- when the updater is run.
- + Subroutines in pre-port MZX worlds now always return to the
- command after the subroutine was sent.
- + Typed color components now wrap from the maximum value to zero
- like dialog number inputs, and pressing minus will now negate
- the input number.
- + Copying chars in the char editor between regular and SMZX
- screen modes now works properly.
- + Fixed a crash that could occur when placing things on a vlayer
- larger than the current board.
- + Sharks and SpittingTigers with firing rates greater than 4 now
- retain their firing rate when edited.
- + Fixed a bug where world decryption could crash. (Revvy)
- + If the glsl renderer is selected by default, the detection of
- a software opengl driver will result in falling back to
- software. (Lancer-X)
- + Fixed a bug in the GLSL renderer where an additional window is
- created if the OpenGL version is low enough to cause a
- fallback to software. (Lancer-X)
- DEVELOPERS
- + Added .MZX-based unit testing system. Run with "make test".
- See testworlds/README.md for more information.
- + The default renderer is now auto_glsl, which turns into glsl
- if not using a blacklisted opengl driver. (Lancer-X)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- January 6, 2018 - MZX 2.91b
- Here's a fairly significant update for MegaZeux 2.91, fixing
- several major Robotic, audio, and editor related bugs, as well
- as issues that mostly affected Linux platforms. Also of note is
- the updated MSVC and Xcode support by Spectere.
- USERS
- + Added the config file option "editor_thing_menu_places". When
- set to 0, selecting an object from the thing menus (F3-F10)
- will place the object in the buffer but not on the board.
- Defaults to 1.
- + Fixed a bug where MZMs could sometimes fail to load in the
- editor.
- + MZMs loaded in the editor now behave correctly when undone.
- + Fixed bug where GOOP_WALK wouldn't always be 0 when loading
- old worlds.
- + Values of GOOP_WALK greater than 1 no longer cause issues.
- + Board time limits greater than 255 are no longer truncated
- when saving worlds/saves.
- + Fixed bug where "robot not found" errors could result from
- using backspace on robots in the editor.
- + Fixed backwards string inequality evaluation.
- + String inequality compares are now endian-safe.
- + Fixed a bug where certain mods (e.g. FR_TOWER.MOD, Neve.s3m)
- could repeat to the wrong order after reaching the end.
- + Fixed a bug where certain .it channels could partially ignore
- the volume command.
- + Setting mod_position in libxmp now works for positions in the
- middle of orders (NoSuck).
- DEVELOPERS
- + Updated MSVC for Visual Studio 2017. (Spectere)
- + Added xcode support. (Spectere)
- + "make clean" now deletes ccv. (pgimeno)
- + Fixed creeping CRLF usage. (Lachesis, pgimeno, Spectere)
- + Fixed a bug where the MSYS2 build scripts could inadvertently
- include non-portable SDL2 binaries in Windows builds.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- November 22, 2017 - MZX 2.91
- This release introduces mostly new editor features, but also a
- a few Robotic features to note. It also fixes over 30 bugs.
- MegaZeux now features a palette editor for SMZX modes 2 and 3,
- and worlds can be saved and loaded in SMZX mode. The char editor
- has been changed to allow preview palettes (mostly to aid with
- SMZX editing), and can now access the extended character sets.
- The new vlayer editor allows the vlayer to be edited directly.
- On the Robotic side of things, LOAD_COUNTERS actually works now,
- SMZX mode 3 indices can be loaded from a file, the message line
- can be configured to use normal MZX mode in SMZX modes, and new
- string features such as simple wildcard matching and negative
- offsets have been added. String support has been improved to
- disallow invalid or nonsense string splices that previously had
- undefined behavior.
- Additionally, asie's new Nintendo 3DS port has been merged into
- MZX, and optional SDL support has been added for the Wii.
- FEATURES
- + Added SMZX_INDICES special counter to load SMZX indices. This
- counter works with either a filename or a string, e.g.
- set "file.palidx" "SMZX_INDICES", and will do nothing outside
- of mode 3.
- + Added MOD_LENGTH counter. The value of this counter is length
- of the current playing music in rows for modules, or in
- samples for PCM audio.
- + Added MAX_SAMPLES counter. When set, MegaZeux will limit the
- maximum number of samples that will play simultaneously. Set
- to -1 to disable the sample limit.
- + Added 'max_simultaneous_samples' config file option. This
- behaves the same as the MAX_SAMPLES counter, but applies
- globally.
- + Added SMZX_MESSAGE counter. When set to 0 with SMZX active,
- messages will display in normal MZX mode instead of SMZX
- using the first 16 colors of the SMZX palette.
- + Added 'random_seed#' counters to read and write the random
- seed, 32 bits at a time (random_seed0 controls the low 32 bits
- and random_seed1 controls the high 32 bits. (Lancer-X)
- + Added a case-sensitive string equality operator:
- IF "$string" === "ABC" then "label".
- + Added wildcard-matching string equality operators:
- IF "$string" ?= "a?%" then "label"
- IF "$string" ?== "a?%" then "label" (case-sensitive).
- The character '?' will match exactly one of any character in
- $string, and '%' will match any number of any character in
- $string (including no characters).
- + Added negative indexing for strings, e.g. SET "$string.-X" 32.
- This manipulates the string at the Xth character starting from
- the end of the string (with -1 for the final character).
- + Added negative offsets for strings, e.g. SET "$string+-X" "a".
- + Added multiple character indexing for strings. When a length
- is provided with a string index, e.g. SET "$string.X#Y" 12345,
- the characters at positions X, X+1, ..., X+Y-1 will be treated
- as a single 8*Y bit number. This works for values of Y between
- 1 and 4, with 4 characters providing the same functionality as
- a counter.
- + The palette editor and character editor are now accessible
- while testing. Press Alt+E or Alt+C respectively to access
- them from the counter debugger.
- + Extended the palette editor to SMZX modes 2 and 3. The updated
- palette editor allows the editing of all 256 SMZX mode 2/3
- colors and editing color indices for SMZX 3.
- + Component numbers can now be typed in the palette editor by
- clicking the component name or its number, e.g. clicking "Red"
- allows you to type a red value.
- + SMZX indices can now be imported/exported while editing in
- mode 3 using import/export palette.
- + Added a new vlayer editor. In the world editor, press Alt+V to
- switch to the vlayer editor. The vlayer is something like an
- invisible global overlay that can be used to store and
- retrieve graphical data through Robotic. See the editor help
- and the Robotic reference manual for more details.
- + Added color selection to the character editor. Press C to
- choose a color to preview and edit chars with, and press Alt+C
- to revert back to the default grey.
- + Added extended charset support to the char editor. Extended
- charsets can be selected during char selection. Note that in
- gameplay these chars can be accessed only by unbound sprites.
- + Selected blocks of chars with a height greater than one
- (before selecting a subdivision) are now properly supported.
- Using -/+ with these selections will move in a tiled manner,
- with no overlap between chars in "tiles". Charsets can also be
- exported/imported using this tiling behavior.
- + The -/+ keys now behave the same in the char selection screen
- as they do in the char editor.
- + The character editor help now covers several shortcuts that
- were previously missing (Alt+B, Shift+Arrows, etc...).
- + The undo/redo shortcuts in the character editor are now Ctrl+Z
- for undo and Ctrl+Y for redo.
- + Added undo/redo functionality to the world editor. Use Ctrl+Z
- to undo changes to the board/overlay/vlayer and Ctrl+Y to
- redo.
- + The default editor undo history stack size has been extended
- to 100 levels.
- + The editor will now prompt the user to create a new starting
- board when opened. If a new board is created, the global first
- board will be set to the new board and the title board will be
- renamed.
- + Saved positions now have confirmation dialogs. Saved positions
- are saved to/loaded from the editor.cnf file for each world.
- + Pressing Enter/Return on the overlay (and vlayer) now acts the
- same as on the board, changing both the buffer and the current
- layer being edited.
- + Pressing P on the overlay (and vlayer) now acts the same as on
- the board, changing the character in the buffer but NOT on the
- current layer. This is equivalent to the original overlay
- behavior for Enter.
- + Block tiling movement (Ctrl+Arrows) now works with most block
- actions, and does not require an initial block placement to
- activate.
- + Restoring its DOS functionality, Alt+D now toggles the default
- colors of built-in types in the editor. When disabled,
- built-ins placed from thing menus will use the buffer color
- instead of their default colors, and a red dot will appear on
- the right side of the status bar.
- + Color selection now supports typing in the hex value of a
- color/subpalette to select the given color/subpalette. For
- example, typing "4c" will select background color 4 and
- foreground color 12.
- + Readded the downver utility.
- - Removed the undocumented Shift+F7 shortcut in the editor. This
- shortcut was redundant with F11.
- FIXES
- + Fixed a bug that would cause Linux binaries to fail to find
- most resources.
- + Fixed a bug where loading a save from the titlescreen, exiting
- gameplay to a world that doesn't exist, and then loading a
- second save would corrupt the counter and string hash tables.
- + Fixed crash that would occur when loading a saved position on
- the same board referring to out-of-bounds coordinates.
- + Fixed a freeze that could occur opening the counter debugger
- to an empty list or searching for a counter in an empty list.
- + LOAD_COUNTERS now works as intended.
- + Fixed a bug where key repeat would be prematurely terminated
- when releasing a key while holding another key.
- + Attempting to open the robot validator with no errors will no
- longer crash MegaZeux.
- + Backspace now mirrors delete in overlay mode instead of
- affecting the board.
- + Moving an overlay block partially out of bounds in the editor
- will now correctly clear the block's original position.
- + The color selector will now correctly display SMZX palettes in
- SMZX mode instead of the default char 254.
- + Fixed bug where the mouse cursor would vanish after using the
- robot debugger configuration dialog in the editor.
- + Fixed a bug where the counter debugger could sometimes display
- behind the robot debugger after exiting the counter debugger.
- + Undo in the char editor now works correctly with the mouse.
- + The char editor no longer forces the screen to SMZX mode 1
- when editing in SMZX modes 2 or 3.
- + Fixed screen corruption bug when resizing the char editor in
- SMZX modes.
- + Fixed a bug where multichar editing wouldn't correctly wrap to
- the start of the charset.
- + The editing area outside of the current board is now correctly
- drawn when SMZX is enabled.
- + The viewport is now correctly drawn when SMZX is enabled and
- the UI or unbound sprites are active.
- + The editor bar no longer appears while SMZX is enabled in view
- mode.
- + Messages are now drawn correctly in SMZX mode.
- + Fixed bug where centering the viewport could change the width
- and height of the viewport.
- + Unbound sprites are now clipped correctly against the viewport
- when the viewport origin is not 0,0. (Lancer-X)
- + The VLAYER_SIZE counter now clears new vlayer area added when
- it is increased. This applies only to 2.91+ worlds.
- + The VLAYER_WIDTH and VLAYER_HEIGHT counters now preserve data
- on the vlayer when set. This applies only to 2.91+ worlds.
- + Fixed several bugs with string length and offset parsing that
- would allow invalid string accesses to work in certain cases.
- + COPY BLOCK $string now works correctly with string splices.
- + Fixed a bug where saving and loading 2.90X files wouldn't work
- on the Nintendo DS.
- + Fixed a bug where mouse clicks would carry through from the UI
- into games.
- + Invalid gl_scaling_shader values should no longer appear as
- the current loaded scaler.
- + MegaZeux now falls back to the default scaling shader when a
- selected scaling shader fails to compile.
- + Blank sprite chars are now drawn when ccheck is 3. (Lancer-X)
- + The sprite color is used with ccheck 3 collisions. (Lancer-X)
- + When spr_yorder is enabled, sprites with the same (sprN_y +
- sprN_cy) value are now consistently ordered by their sprite
- numbers.
- + The collision rectangles of ccheck 3 sprites now constrained
- to the sprite dimensions (Lancer-X).
- + MZX no longer crashes when a line of length 512 characters or
- longer is pasted into the robot editor.
- + Fixed a crash bug when trying to swap a sprite with an
- invalid sprite index.
- DEVELOPERS
- + Added Nintendo 3DS port. (asiekierka)
- + Added "make uninstall" option to the Linux makefile.
- + Added devkitPro portlibs paths to the NDS and Wii Makefiles.
- - Removed the depackers and non-MegaZeux formats from libxmp.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- September 4, 2017 - MZX 2.90d
- Here's another bugfix release. This is mostly assorted small
- fixes, but there are also a couple of major fixes here: first,
- the ternary operator now works correctly when nested both with
- and without expressions, and second, sprN_setview does not break
- in conjunction with certain unbound sprites. Additionally, SAMs
- will not be converted to WAV files anymore (and are now natively
- supported) and the robot debugger config is accessible from the
- editor.
- FEATURES
- + The current MegaZeux version is now visible from the enter
- menu on the title screen. This is to assist identifying the
- version on platforms that don't respect window title changes
- or have no window border.
- + Updated checkres.bat and checkres documentation.
- + The robot debugger configuration screen is now accessible from
- the editor via Alt+F11.
- + Removed SAM to WAV converter. MegaZeux now has native SAM
- support. (asiekierka)
- + Added crt-wave.frag, updated crt.frag. (astral)
- FIXES
- + Fixed a bug where MegaZeux would crash when editing a robot
- with an invalid IF command operator.
- + Fixed a bug where the ternary operator would fail to find the
- correct colon when the middle term contained a second ternary
- operator in a nested expression.
- + Nested ternary operators should now behave as expected.
- + Fixed a bug where the built-in cursor would disappear after
- exiting testing with EXIT_GAME.
- + Fixed a bug where the listening mod would not restart after
- exiting testing.
- + Fixed a bug where the robot debugger would not wrap long lines
- of Robotic code correctly.
- + Attempting to save a world in a write-protected location
- correctly displays an error message again.
- + Fixed a bug where key repeat would not work when scrolling
- through the counter debugger tree list.
- + checkres will no longer report empty filenames as dependencies
- e.g. SET "" TO "FWRITE_OPEN".
- + The -q flag in checkres will now correctly output filenames
- instead of nothing.
- + Fixed a bug where sprN_setview would scroll the viewport to
- the wrong side of the screen if the sprite is unbound and is
- close to the top or left edge of the board. (Lancer-X)
- DEVELOPERS
- + Fixed PSP and NDS ports. (asiekierka)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- July 25, 2017 - MZX 2.90c
- This is a small fix release mostly cleaning up issues from the
- previous release.
- Notable fixes include a crash on certain instances of string
- interpolation into counters/labels/text. Playing mods as sound
- effects works again, and the audio_sample_rate config file
- option now works correctly.
- This release also includes support for loading save files from
- MegaZeux 2.84X and experimental editor behavior for handling
- board charsets and palettes.
- FEATURES
- + Save files from 2.84X worlds can now be loaded.
- + The editor can be configured to automatically load board
- charsets and palettes now. Use the 'editor_load_board_assets'
- config file option to enable this behavior. This behavior is
- disabled by default. Note that this will OVERWRITE THE CURRENT
- WORLD CHARSET AND PALETTE and your changes will NOT be saved
- automatically.
- + GLSL is now the default renderer. (Lancer-X)
- FIXES
- + Fixed bug where --disable-modular builds would fail to link.
- + Fixed bug with libxmp integration where mods could not be
- played as sound effects.
- + Fixed bug with libxmp integration where MZX would assume
- audio_sample_rate was 44100, causing mods to play at incorrect
- pitches with other rates.
- + Fixed bug where editor config file options would be ignored at
- the command line.
- + Fixed bug where string interpolation into a label/counter name
- could cause MZX to crash with very long strings.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- July 16, 2017 - MZX 2.90b
- It's been two weeks, so here's a bugfix release for MZX 2.90.
- There isn't a whole lot that's new to talk about.
- Firstly, the palette editor has gone through an overhaul. This
- is mostly internal preparation for an eventual SMZX palette
- editor, but the new features include the partial restoration of
- mouse input (which was removed in 2.80X), the addition of color
- sliders, the ability to hide the palette editor help, and two
- new colorspaces (HSL and CIELAB) to aid in the selection of
- palette colors.
- Next, the robot debugger introduced in 2.90 has new features.
- You can now set "watchpoints" to watch the status of particular
- variables, and you can send labels/goto from the robot debugger.
- The robot debugger config screen has been visually improved, and
- line number breakpoints can be defined. Another notable feature
- is that KEY_PRESSED and KEY_CODE values are now displayed in the
- debug window during gameplay.
- libxmp is now the default sound engine for modules, fixing a
- longstanding bug where certain S3Ms would have muted channels.
- GDM modules are now supported by MZX again. If you notice any
- inaccuracies with mod files, please report them to the tracker.
- Fixed bugs include a major overhaul of the glsl shaders for
- compatibility with almost any system, various sprite, text box,
- and input bugs, a crash fix when MZMs were saved from out of
- bounds board locations, and a bug where opening worlds or
- testing from the editor could cause MegaZeux to exit.
- FEATURES
- + The "shaders/extra" folder is now "shaders/scalers". The
- default vertex shader is still located in the shaders folder.
- + The default scaling shader can now be set in the config file
- using the gl_scaling_shader option. If not defined, MegaZeux
- will load assets/shaders/scalers/semisoft.frag.
- + The robot debugger now supports monitoring the values of
- counters and strings. Use the config menu/breakpoint editor to
- add watchpoints; when the debugger detects a change in a
- watchpoint counter/string AFTER a command has been executed,
- the robot debugger will open.
- + The robot debugger can now send robots labels. Use 'G' or
- select 'Goto' in the robot debugger to use this feature. The
- name and label inputs support expression parsing and string/
- counter interpolation.
- + The robot debugger can now use line numbers in breakpoints.
- + The palette editor help can now be hidden with Alt+H. The
- default behavior for this can be set in the config file. The
- palette editor help is visible by default.
- + The palette editor's mouse functionality has been improved.
- Behavior when clicking the palette has been restored, and
- component sliders have been added.
- + The palette editor now supports alternate color spaces.
- + The debug window now displays the last key_code (green) and
- key_pressed (magenta) values detected during gameplay. These
- values are located in the bottom right corner of the window.
- + The default fullscreen resolution for scalable renderers is
- now 1280,720. The default fullscreen resolution for 'software'
- is still 640,480. The default aspect ratio is now 'modern'.
- + The checkres utility has been updated to support 2.90X worlds,
- worlds in subdirectories of zip archives, multiple input files
- to test, and the ability to specify secondary directories and
- zips to search (e.g. for games with separate music zips).
- BUGFIXES
- + Fixed a bug where certain "keyN" labels, such as "key$", would
- not work correctly.
- + Integer comparisons between numbers greater than 2^31-1 apart
- now work correctly. (Lancer-X)
- + The palette editor now displays the SMZX mode 1 palette
- correctly.
- + Sprite collisions now correctly ignore the sprite's visual
- width and height.
- + Blank lines are no longer skipped when copy-pasting text into
- the robot editor. (Lancer-X)
- + Fixed a bug where key presses in dialogs could be detected in
- games, and keypresses could still carry between other dialogs.
- + [ message boxes now use the same screen mode as everything
- else. Same with scrolls. (Lancer-X)
- + spr#_setview now works with unbound sprites. It's pretty nasty
- as the viewport can't scroll with pixel precision, but the new
- behavior should still be better than the old. (Lancer-X)
- + Fixed a bug affecting certain Intel HD Graphics cards and the
- GLSL renderer that appears to have been around since that
- renderer was first introduced. (Lancer-X)
- + Fixed a bug where the numeric numpad keys were inappropriately
- translated to regular keys based on numlock when they were
- read from KEY_PRESSED. This behavior is now locked to worlds
- from 2.82X through 2.84X.
- + Fixed a bug where warping the mouse on one axis would snap the
- mouse to the nearest pixel on the other axis, causing problems
- for upscaled windows.
- + Fixed a bug where mouse control would not respect video_ratio
- settings aside from "stretch".
- * Fixed a bug where MZX would attempt to load certain invalid
- worlds that should have been caught by validation.
- + Copy block to MZM no longer crashes when the MZM is partially
- overlapping the board edge. (Lancer-X)
- + Fixed bug where MegaZeux would sometimes exit immediately on
- loading a game or would immediately exit testing.
- DEVELOPERS
- + libxmp is now the default module sound engine. Use "make xmp"
- to make and install libxmp if it is not available on your
- platform.
- + Mac OS X portability improved. (Spectere and Why-Fi)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- June 29, 2017 - MZX 2.90
- Hey, it's been a while! Didn't mean to keep everyone waiting.
- To make up for it as much as possible, we've prepared an extra
- special release of MegaZeux here for you. Yeah, you!
- I don't even know where to start with this release, as there's
- simply a lot to talk about. MZX's world formats and rendering
- architecture have gone through major overhauls, and a multitude
- of bugs have been fixed (60+). Particularly the MZX UI graphical
- glitch that occurred when an SMZX mode was enabled.
- Some notable new features are unbound sprites (MZX's new native
- pixel precision support), loading character sets/palettes/source
- code/MZMs from strings, saving MZMs to strings, a new Robotic
- debugger, the SAVE_COUNTERS and LOAD_COUNTERS function counters,
- options to help create standalone game releases, the ability to
- assign character sets/palettes to a board to load on entry, and
- resetting boards on entry. The size limit of Robotic bytecode
- has been increased to 2MB.
- Other important mentions: MegaZeux has been updated to use
- SDL 2.0 and libmodplug 0.8.9.0. The SAVE_WORLD function counter
- has been permanently removed. The downver utility has been
- temporarily discontinued, as adapting it to this release would
- have been a considerable amount of work. Instead, there is a new
- option in the Export menu in the editor to export a 2.84 world.
- Enjoy, and try not to get overwhelmed by all of the new stuff!
- FEATURES
- + Added a built-in robot debugger. See the Debug Mode section of
- the help file for details.
- + Added the COMMANDS_STOP special counter to MegaZeux. When a
- robot executes a number of commands exceeding this value while
- testing, the robot debugger will be enabled automatically and
- will open. During regular gameplay, it will be ignored. The
- default value of COMMANDS_STOP is 2000000.
- + The counter debugger now remembers its previous position after
- being reopened.
- + Added commands_cycle and commands_total variables to the Robot
- section of the counter debugger. See the Debug Mode section of
- the help file for details.
- + Certain types specified as 255 on the char ID table are now
- treated as Custom* types when placed and selected in the
- editor. If you switched a type to char ID 255 in a game that
- already had that type, the parameters will not be changed
- (and the types will still be char 0 if they were already
- placed in the world). When making a type a Custom* type from
- the global chars dialog, it will appear visually different in
- the list and in the character selection window, and also ask
- for confirmation.
- + The enter menu can be closed with escape now.
- + In the editor, the Backspace key now removes the top layer
- and brings the under layer to the top, as a compliment to Del.
- This does not affect the text entry behavior.
- + Seeking in the String section of the counter debugger will now
- ignore the $ prefix.
- + Tentative joypad POV hat support added: joyNhat = U, D, L, R
- + The BUTTONS counter has been extended to support the mouse
- wheel and X1/X2 buttons.
- + Strings can now be used in the LOAD PALETTE "file" command in
- place of a file name, i.e. LOAD PALETTE "$string+10".
- + Strings can now be used in the LOAD CHAR SET "file" command in
- place of a file name, i.e. LOAD CHAR SET "@240$chars".
- + Strings can now be used for the special counter LOAD_ROBOT in
- place of a file name, i.e. set "$str" "LOAD_ROBOT".
- + Strings can now be used for saving and loading MZMs in place
- of a file name, i.e. put "str" image_file... (Lancer-X)
- + Added ESCAPE_MENU counter. When set to 0, this counter will
- prevent pressing escape from opening the exit gameplay menu.
- This will not affect any other escape menus in MZX, and the
- exit gameplay menu can still be opened by other means, such as
- ALT+F4, CTRL+C, the window close button, etc.
- + Added EXIT_GAME function counter. When set to anything but 0,
- this will cause MegaZeux to exit to the title screen. This has
- no effect on the title screen.
- + Added the ternary operator (?:) to expressions. If the value
- to the left of ? is not equal to zero, the expression between
- the ? and the : will be evaluated. If the value to the left of
- ? is equal to zero, the expression to the right of : will be
- evaluated.
- + Added SAVE_COUNTERS and LOAD_COUNTERS special counters. These
- will save and load files containing every counter and string
- from the world they're used in, respectively. These files are
- not version checked, and may be used like save files.
- + Robots now keep their robot IDs after reloading saves.
- + Added standalone mode. The config parameters standalone_mode
- and no_titlescreen can now be used (from MZXRun only) to
- create standalone versions of MZX with the ability to fully
- customise the player's experience. See config.txt for details.
- (Lancer-X)
- + The minimal help bar now displays robot memory and the current
- board mod when contextually appropriate.
- + The minimal help options for the board and robot editors are
- now enabled by default.
- + Shaders can now be changed from the F2 menu when using the
- GLSL renderer. The user can select a fragment shader from the
- assets/shaders/extra/ directory. If a matching vertex shader
- exists, it will be loaded alongside the fragment shader.
- Otherwise, MZX will fall back to the default vertex shader.
- + On Linux and Mac OS X the configuration file will be copied
- into the user's home directory and given the name
- .megazeux-config if it is not already present. This config
- file will then be used instead of the global one. (Lancer-X)
- + Added unbound sprites. Sprites can be unbound from the grid by
- setting spr#_unbound to 1. Their coordinates will now refer to
- the sprite's location in pixels, not tiles. spr#_width,
- height, refx and refy still refer to chars; however, spr#_x,
- y, cx, cy, cwidth and cheight are all in pixels. Unbound
- sprites do not work with all renderers; currently, out of the
- renderers available on the PC platforms, the overlay2 renderer
- lacks this functionality. (Lancer-X)
- + Unbound sprites do not let char 32 or blank characters (when
- in ccheck 2) through like regular sprites do. Instead, set
- spr#_tcol to a color that will be transparent when the unbound
- sprite is drawn. (Lancer-X)
- + Unbound sprites can make use of additional hidden charsets.
- There are an additional 14 charsets beyond the default that
- can be modified through using load char set or char edit.
- (e.g. load char set "@256charset.chr")
- A sprite can be set to refer to these later chars with the
- spr#_offset counter. The offset value is then added to each
- char in the sprite. You can use this to refer to higher char
- sets.
- (e.g. set "spr0_offset" 256)
- Offset values can also be set to locations within a char set.
- (Lancer-X)
- + To allow you to access the extended charsets, the option to
- load char set now takes up to 4 digits, rather than merely 3.
- The + option still only allows 2 hex digits. (Lancer-X)
- + The colors used by tiles of a given color # in SMZX mode 3
- can now be rebound using the "smzx_idx#,#" counters.
- (e.g. set "smzx_idx7,0" 32)
- Now if you put down a c07 tile, all 00 pixels will refer to
- color 32 (as opposed to color 0 in SMZX mode 2 or color 7 in
- SMZX mode 1). These values are reset whenever the SMZX mode is
- changed. Once again, this is only available to renderers that
- support unbound sprites. (Lancer-X)
- + Edited worlds now retain their world version until resaved.
- Before, they would lose their world version after testing.
- + Added world version display to the debug window.
- + Added GOOP_WALK counter for robots.
- + Added "Reset board on entry" parameter for boards. When set,
- the board will reset to its original state when the board is
- entered during gameplay. This setting can be saved as a board
- default.
- + Added "Load charset on entry" parameter for boards. When set,
- MegaZeux will load the selected charset file when the board
- is entered during gameplay. This setting can be saved as a
- board default.
- + Added "Load palette on entry" parameter for boards. When set,
- MegaZeux will load the selected palette file when the board
- is entered during gameplay. This setting can be saved as a
- board default.
- + Maximum robot size has been increased from 64kb to 2mb.
- (Lancer-X)
- + Debytecode: the LOAD_SOURCE_FILE special counter can now be
- used to load and compile a robot program from source code.
- This can be used with either a file or a string as input.
- + Debytecode: the robot editor's import robot menu now supports
- loading legacy source code.
- BUGFIXES
- + Fixed crash bug when using ALT+Z (Clear Board).
- + Fixed crash bug when attempting to view the help file in the
- updater.
- + Fixed crash bug when attempting to use SMZX_R/G/B with out-of-
- range indexes.
- + Fixed crash on exit when the config file did not explicitly
- specify update hosts.
- + Fixed memory leak involving bounds-breaking FREADn calls.
- + Fixed counter debugger issue where counters and strings
- starting with chars over 'Z' would cause everything in their
- section to be placed into the '#' list.
- + Dialog window labels can not be put into focus by clicking
- them with the mouse anymore.
- + Dialog windows closed by pressing escape will now close only
- on a new press instead of whenever the key is held.
- + Load (F4)/quickload (F10) on invalid save files in-game leaves
- the current game running instead of exiting to the titlescreen
- or editor.
- + Fixed issue where counter debugger would display wrong values
- for the robot LOCAL counters.
- + Fixed robot editor issue where global robot coords would be
- reloaded as 65535.
- + Fixed issue where board defaults would be reset after leaving
- testing until the world was manually reloaded.
- + Fixed issue where the Board Info dialog would not close when
- 'Cancel' was selected.
- + Fixed bug where chars 254 and 255 would not be reverted back
- to their defaults via F4/F5.
- + Fixed bug where player would move onto goop when walking into
- enemys on top of goop.
- + Fixed bug where 'enter' would be detected in loaded save files
- when loading from a title screen.
- + Fixed issue where MZX was using the world file version instead
- of the internal MZX version when saving MZMs and determining
- whether it could load MZMs both within the editor and in game.
- + Changed the caption behavior in the world editor as to refresh
- only when board values are synchronized.
- + Fixed bug where, when exiting gameplay, the world would keep
- running on the title screen if MegaZeux lost read access to
- the world file.
- + Fixed minor bug where trying to load a nonexistant mod would
- change MOD_NAME's output while the previous mod still played.
- + Fixed a Windows-only bug, where attempting to load a Robotic
- file in the Robot Editor or with LOAD_ROBOT would not load the
- entire file if the file contained 0x1A (char 26).
- + Fixed a bug where the lazer animation would fail to complete.
- + Fixed bug where the VOLUME # and MOD FADE # # inputs could go
- out of range, resulting in ear-piercing white noise. Inputs
- now wrap between 0 and 255 for compatibility reasons.
- + Fixed bug where certain unicode values could crash MZX in the
- character selection dialog.
- + Fixed bug where : "keyN" would not work on the Pandora.
- + Fixed a bug where FREAD could create a string larger than the
- maximum string size.
- + In the sprite section of the counter debugger, the spr_clistN
- values were incorrectly labelled as "spr_collisionN". Fixed.
- + Fixed counter debugger crash when selecting certain strings
- containing escaped values.
- + Added compatibility for the cycle-ending SHOOT, SHOOTMISSILE,
- SHOOTSEEKER, and SPITFIRE commands from MegaZeux 2.83.
- + Fixed crash bug when attempting to use file counters with
- paths equal to or longer than 512 chars in length. MegaZeux
- will now ignore such paths.
- + Fixed bug where MZX would crash with out-of-bounds joystick
- key mappings.
- + Fixed a bug where robots could not push the SliderNS type to
- the south.
- + Fixed a bug where a robot using #return or #top multiple times
- within a single command could cause a crash.
- + Fixed a port regression where IF ANY would continue to iterate
- over the board after finding a match, potentially triggering
- multiple subroutines, #return, or #top labels.
- + Fixed a bug where MZM error messages could repeat indefinitely
- and lock up MZX.
- + Fixed a bug where the (#)PUSHED label would not be sent to the
- first object in a row of pushed objects if that object was a
- robot.
- + Fixed support for PPC Linux builds. (Insidious)
- + Fixed a bug where a robot sent a subroutine would restart the
- command it was executing upon #return if the command was a
- multi-cycle command. This fix applies to worlds saved in 2.90
- and later only.
- + Fixed a bug where ALT+F4 would cause menus to open instead of/
- in addition to triggering an exit event.
- + Fixed a bug where subdirectory mods with different types of
- slashes in their names would fail to be recognized as the same
- mod.
- + Fixed a bug where SMZX palette intensities were not saved.
- + Made the opengl2 and glsl renderers endian-correct. (Lancer-X)
- + Fixed a bug where keystrokes were getting lost during event
- processing. (Lancer-X)
- + The UI now uses the regular MZX mode and the protected palette
- when playing SMZX games. This is only available to renderers
- that support unbound sprites. (Lancer-X)
- + Changing from SMZX mode 1 to 0 correctly restores the palette.
- (Lancer-X)
- + Fixed a bug where the tree list in the counter debugger would
- rapidly scroll through elements when clicked.
- + Fixed a bug where the updater, on failing to receive data from
- the server, would consume large amounts of CPU before timing
- out. (Lancer-X)
- + Fixed various bugs related to the pushing of sensors.
- (Lancer-X)
- + Fixed a bug where MZX would crash in some cases when testing
- after adding/importing new boards into a world.
- + Made KEY a board counter <=2.70. Also added masking <=2.62 to
- make Oath Demo work again. (Lancer-X)
- + Bullet types shot by robots clamped to 0-2. (Lancer-X)
- + SAVE_GAME and SAVE_WORLD now happen at the end of a cycle, not
- immediately. (Lancer-X)
- + SAVE_WORLD no longer exists. (Lancer-X)
- + Labels at the end of a program no longer get randomly sorted
- first and stop the actual first instance of that label being
- called. This fixes a bug in the Dark Corner 'Zane' demo.
- (Lancer-X)
- + Copy and copy block in pre-port MZX games now preserves the
- state of any robots copied. (Lancer-X)
- + Copying and pasting robot code with LF line endings on Windows
- now works. (Lancer-X)
- + MegaZeux can now be exited during an infinite loop. (Lancer-X)
- + Fixed a bug where SAVE_GAME on the first cycle of a board
- would cause the game to be faded out on load. This still
- affects legacy worlds. (Lancer-X)
- + Fixed a bug where trying to create new counters called "fread"
- or "fread_counter" in the counter debugger would cause the
- file being read to advance.
- + Fixed a bug where the numpad was unable to be used to control
- the player, despite being identical to the cursor keys for
- every other situation. (Lancer-X)
- + Fixed a bug where pre-port worlds could play any number of
- concurrent samples. This makes portions of Bernard the Bard
- quite cacophonous. (Lancer-X)
- + Fixed a bug where per-game config files could set options they
- weren't supposed to be able to.
- DEVELOPERS
- + Fixed linking bug when attempting to make a modular build of
- MegaZeux in Debian/armhf. -fPIC is now enabled for modular
- builds on all platforms. (Insidious, ajs)
- + Added SDL 2.0 support. At the moment, the overlay renderers
- are not accelerated by SDL 2.0 and may be slower than their
- SDL 1.2 counterparts. Other minor inconsistencies may exist
- between the two versions. (ajs)
- + Keycode help diagram replaced with an HTML file (from the
- older PNG file). This will make future updates much easier.
- + Updated NDS, Wii and PSP ports to latest devkitpro toolchains.
- + Updated libmodplug to version 0.8.9.0. (asiekierka)
- + Added experimental libxmp support. (asiekierka)
- + Added experimental libopenmpt support. (asiekierka)
- + New rendering architecture that mostly sits alongside the old
- rendering architecture. There is a new function implemented by
- supporting renderers: render_layer(). This provides a layer
- in a similar form to the text_video array in graphics and
- expects that to be drawn on the screen. This is called once
- for each layer that is drawn- this means the board, overlay,
- UI and sprites. Each layer can have a different SMZX mode,
- although at the moment this is only used to allow the UI to
- remain in regular MZX mode while the game or editor is in SMZX
- mode. The render_layer() function is only called if it is
- implemented by the renderer and if there is something on the
- screen that can only be drawn by the renderer (e.g. unbound
- sprites, or UI elements in an SMZX game) (Lancer-X)
- + LibSDL2 support is now the default. It can still be disabled
- by passing --disable-libsdl2 to config.sh. (Lancer-X)
- <a class="helplink" href="#284CLOG.HLP__284">New in Versions 2.84 to 2.84c</a>
- <a class="helplink" href="#2823CLOG.HLP__283">New in Versions 2.82 to 2.83</a>
- <a class="helplink" href="#281CLOG.HLP__281">New in Versions 2.81 to 2.81h</a>
- <a class="helplink" href="#280CLOG.HLP__280">New in Versions 2.80 to 2.80h</a>
- <a class="helplink" href="#OLDERVER.HLP__260">New in Versions 2.60 to 2.70</a>
- <a class="helplink" href="#OLDESVER.HLP__201">New in Versions 2.01 to 2.60</a>
- <a class="helplink" href="#NEWIN200.HLP__1st">New in Version 2.00</a>
- <a class="helplink" href="#ANCENVER.HLP__1xx">New in Versions Through 1.03</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="284CLOG.HLP">
- <a class="helpanchor" name="284CLOG.HLP__284"> </a>
- <p class="helpcentered"><span class="f9 ">New in Versions 2.84 to 2.84c</span></p>
- December 24, 2012 - MZX 2.84c
- Hey all, new version of MegaZeux here! And hopefully without any
- crashes this time around! Haha yeah right.
- The most notable thing this release (besides fixed crash bugs,
- as usual) is the new counter debugger! Give it a try and tell us
- what you think!
- Counter binary search has been replaced with a hash table in
- versions of MegaZeux for most platforms. This has resulted in
- slightly faster counter lookups, and MUCH faster creation of
- counters, since MegaZeux doesn't have to keep the list ordered.
- The hash table is turned off for NDS builds for now due to tight
- memory constraints.
- Otherwise, most of the new features are editor enhancements and
- modifications. Notable mentions are reordering the board list
- with 'M' and a custom undo history size.
- FEATURES
- + The functionality of the F11 counter/string debugger has been
- expanded to include sprites, robots, and miscellaneous world
- and board variables. The ability to modify many of these vars
- is limited and a large portion are read-only. In addition, you
- may add new counters and strings, hide empty counters/strings
- (does not affect built-in variables), and search by name and
- contents. Export is still limited to counters and strings.
- + Max string length has been increased from 1MiB (1048576 bytes)
- to 4MiB (4194304 bytes).
- + Board mods may now be selected from subdirectories of the game
- folder in the ALT+N dialog.
- + The title bar now displays the world and editing board/robot
- names based on context.
- + Fire Burns Space and Fire Burns Forever are off by default.
- + You may now specify the size of the undo history in the char
- editor, and the history affects the entire char set. Undo is
- still ALT+U, redo is now ALT+R.
- + You may now use the -/+ keys in the world editor to move to
- the previous/next boards in the board list, and Shift+Arrows
- to change to the boards linked by board edge.
- + You may now move the current board anywhere in the board list
- with M. You may not move the title screen board.
- + View mode in the board editor (V) will start from the current
- location of the screen now rather than at the top-left corner.
- + Config file options for default board settings added, as well
- as the ability to save these per-world from the editor.
- + Ctrl+G - Goto board position at X,Y.
- + png2smzx now requires less arguments and has an option to skip
- a char (generally char 32 will be useful to skip).
- + Debytecode: The robotic editor now asks for a confirmation to
- save the program on exit.
- BUGFIXES
- + Fixed a bug in the 'glsl' renderer that caused the cursor
- color to be ignored (always white). This caused the cursor to
- not be visible if shown on a white background. (ajs)
- + Setting $string.length will not cause memory corruption now.
- In addition, its pre-2.84 behavior of intentionally allocating
- the string past the set length has been restored, but the
- length itself will still be set to the correct value.
- + Added bounds check to INC "$string" "value". Attempts to
- increase a string past its maximum length (4 MiB, or 4194304
- bytes) will now fail.
- + Fixed MegaZeux crash that could sometimes occur when a string
- was increased by itself.
- + Fixed MegaZeux crash that could occur when exiting the editor
- to a world file that failed validation.
- + Rolled string->storage_space into string->name to prevent
- buffer overflow errors and crashes. (Mr_Alert)
- + Fixed crash that would occur when attempting to type in a dir
- in the ALT+N dialog.
- + Fixed a bug where copy block $string would apply REL twice.
- + Thanatos Insignia (DoZ Q1 2011, 98485) will now play without
- freezing both normally AND after loading a save. Robots will
- not be incorrectly versioned with the save format magic now.
- + Fixed bug where ALT+M wouldn't always edit non-stored types.
- + Fixed bug where ! could not be used as a substitute for
- + Fixed a bug where tab-draw and block actions would carry
- between board and overlay editing. ALT+O now sets the drawing
- mode back to normal on a switch.
- + ALT+M now edits the overlay instead of the board while editing
- the overlay.
- + Quick-load (F10 during gameplay) will not work if the load
- menu (F4) has been disabled with the LOAD_MENU counter.
- + Fixed a bug where the listening mod directory would stay the
- same as the directory the editor was opened in.
- + The listening mod now continues to play after world and board
- changes, and also after the board mod has been changed by
- ALT+N or Shift+8/*.
- + LOAD_GAME will not incorrectly trigger JUSTENTERED anymore.
- + Palette/intensity changes made on the same cycle as a teleport
- player command are now properly taken into account. This fixes
- a game-stopping regression in Sponkgo's Legendary Journey
- where leaving the second stage's bonus area would leave the
- color intensity at 0.
- + SMZX mode is now disabled when leaving the editor if it was
- enabled in the editor via F11.
- + Fixed potential crash bug where robot bytecode files were not
- being validated before being loaded with LOAD_BC.
- + Fixed minor message box bug dating back to DOS where a message
- box starting with an unavailable option would begin with the
- cursor on a blank line.
- + Fixed crash that happened when typing over bounds while
- renaming a file in a file manager dialog. File and directory
- renaming now use a popup dialog akin to ALT+N.
- + Files with names longer than 55 chars may now be selected in
- file managers. The limit for typing in a file name is still 55
- chars. You may not enter a blank line as a file name anymore.
- + Fixed segfault when attempting to read THIS_COLOR for the
- global robot. It will now always return -1.
- DEVELOPERS
- + Overhauled txt2hlp. Error messages now differentiate between
- hyperlinks and labels and will take the display chars and &
- into account. Eventually, the goal should be to get rid of
- txt2hlp altogether and have MZX load straight from the .txt
- file.
- + Added compile option to use uthash for counter/string lookups
- as opposed to binary search. Ideally, this will vastly improve
- lookup speeds for large numbers of counters/strings, but will
- consume more memory. (thanks to Lancer-X for the modified
- uthash header file)
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- June 20, 2012 - MZX 2.84b
- Less than three weeks after the last one, MegaZeux 2.84b is
- here a few weeks early to fix a key regression regarding the
- use of REL commands with the COPY x y dx dy command. While
- several new features have been added, this release was mostly
- about rooting out as many crash bugs from MegaZeux as possible.
- An official public beta release of debytecode has been pushed
- off once again due to time constraints.
- Most notable as far as new features go, pressing 'E' while a
- game's title screen is running will now take you directly to
- that world in the editor. A blank new world may still be
- created with 'F8', and now with the 'N' key. The function key
- corresponding to the new 'E' functionality is 'F9'.
- A major new aspect of this version, which could be seen as a
- bugfix or as a new feature, is MegaZeux's ability to validate
- the MZX, MZB, MZM, and SAV file formats. Validation has been
- rigorously tested and refined, and a comprehensive list of most
- world files that fail any check is available on the MZX Wiki.
- File load crashes and force-quit "Out of memory" errors in
- these instances are nearly a thing of the past.
- One final major change regards the file manager dialogs (Load /
- Save Game, etc). These dialogs have been internally overhauled
- to avoid permanent directory changes unless a valid world or
- save file has been loaded. If any bugs are experienced using
- these, they should be reported to the MZX Bug Tracker.
- FEATURES
- + Pressing 'E' or 'F9' on a title screen will now open the
- current world for editing. Press 'N' or 'F8' to create a new
- world.
- + Multiple hosts may now be defined in config.txt. Update
- attempts will be carried out in the order they are defined.
- + A startup path may be defined in config.txt ("startup_path").
- + Specifying the backup filename with a directory, ex.
- "backup/file", will now silently attempt to create the
- directory if it does not exist.
- + MZM3 is now forward compatible (robots will be dummied out).
- BUGFIXES
- + World validation has been strengthened, preventing
- disasterous loads of most non-world files. Mostly
- intact/valid worlds, such as HUNTDRAK.MZX, can be loaded --
- corrupt/missing boards will be replaced with blank boards,
- corrupt robots will be replaced by robots with empty
- programs, and so on. If more robots/scrolls/signs are found
- on a board than their data suggests there should be, the
- extras will be replaced with customblocks. Back up the
- version of the world with errors in this instance, as the
- robots' code or scroll text may still be salvageable from the
- world data.
- + Fixed a long-standing memory corruption bug in the shoot
- command introduced by the port.
- + Mac OS X: MegaZeux now uses /Users/[username] as the default
- starting directory. Apps previously would always start at the
- filesystem root. (ajs)
- + Fixed dangerous crash-causing bug where the editor would not
- chdir back to the correct directory after testing.
- + MegaZeux, after saving a world to a new directory, now chdirs
- to the new current world file's directory.
- + Changed behavior where a failed save file load would fade the
- still-running world out of focus. MegaZeux now leaves the
- world in focus.
- + All failed world/save loads leave the current world running
- and in the same working directory.
- + When startup_file is defined as a directory at the command
- line, MZX chdirs to the directory instead of attempting to
- open it as a world file. In the config file, the directory
- is pruned off since there's a new config option for the
- startup path.
- + Fixed regression where the rel commands would be ignored for
- board to board copy x y dx dy.
- + Updated MZX_SPEED in the counter debugger, where it was still
- getting clamped from 1 to 9.
- + COLOR FADE IN and COLOR FADE OUT (and all built-in uses of
- them) now correctly respect any COLOR INTENSITY changes made
- before they are used.
- + In file selection dialogs, when attempting to make a
- directory that already exists with ALT+N, MZX now shows the
- correct file name and does not force the user to quit
- MegaZeux.
- + In file selection dialogs, when pressing ALT+D with a
- directory selected, MZX now correctly prompts to delete the
- selected directory instead of a file.
- + The option to import world files in the board editor now
- correctly takes the world version into account.
- + Savegame MZMs loaded into the editor now have their robots
- dummied out for safety purposes.
- + Fixed bug where INPUT STRING would not terminate lines longer
- than 71 chars after clipping them.
- + INPUT STRING and ASK do not allow either tabs (INPUT only) or
- line breaks (both) anymore.
- + Fixed bug where putting a scroll/sign in the editor buffer
- and then selecting something else could cause a crash on
- leaving the editor.
- + Temporary fix for MSVC bug where all window dialogs would
- freeze. (MZXGiant)
- + Temporary fix: board block actions will not corrupt robot
- source code in DBC anymore. (MZXGiant)
- DEVELOPERS
- + Switched debian prereq. and darwin libpng12 to libpng,
- switched darwin and default ldflags to use '--ldflags'
- instead of '--libs'.
- + Darwin CC/CXX compiler can now be specified on the command
- line. (ajs)
- + Cleaned up broken ifeq structure in darwin Makefile.in so
- ARCHes other than i686 can be built.
- + Updated MSVC dirent.h to the latest version (MZXGiant)
- + Added updated MSVC dependencies. (MZXGiant)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- June 01, 2012 - MZX 2.84
- The first version of MegaZeux to be released in two and a half
- years, this time with a vast number of bugfixes, several new
- features, and hopefully no new bugs.
- There's a new port to the Pandora platform from Exophase. There
- are no binaries for this platform yet, as ajs has not had time
- to set up the cross-compiler. Same goes for Android.
- Another major (internal) change this time around is that
- Exophase's experimental "debytecode" language modification has
- been merged. This still has some major bugs open against it,
- and missing features, so I won't be doing official releases
- yet. You can add support for this feature by passing
- "--enable-debytecode" to config.sh on all platforms.
- Thanks to Terryn, Exophase and MZXGiant for their contributions
- and to Lancer-X, Old-Sckool and Lachesis who reported and
- tracked the majority of bugs this time round.
- FEATURES
- + Added experimental port to Pandora. See arch/pandora/README
- for more information. (Exophase)
- + Directories may now be opened with FREAD_OPEN. This
- functionality can be used in conjunction with FREAD_POS and
- SET "$str" FREAD. FREAD will set the string to "" when it has
- reached the end of the file listing.
- + MZX_SPEED can now be set up to 16 by a robot or from the F2
- dialog menu. (Lachesis)
- + Numbers can now be temporarily backspaced past their minimum
- value to make typing a new number more intuitive in dialogs.
- (Lachesis)
- + Chars 0 and 255 can now be selected from the Edit Chars
- submenu of the Global Info menu. Using char 255 on a kind
- that would have previously denied it now gives a warning
- dialog. (Lachesis)
- + New Counter: SPACELOCK represents the default space
- functionality for the built-in player. Setting this counter
- to 0 disables it, allowing the player to move as normal when
- space is pressed. Setting it back to 1 enables it again.
- Defaults to 1. (Lachesis)
- + New Counter: FREAD_DELIMITER allows you to change the
- terminating char for the string FREAD function. The
- terminating char still defaults to '*'. A complementary
- FWRITE_DELIMITER function has been added as well. (Lachesis)
- + New Counter: ARCTANdy,dx takes two values and returns the
- angle with corrected quadrants as an alternative to using
- ATANdy with DIVIDER as dx, which was less intuitive and never
- documented properly. (Lachesis)
- + New Counters: MINv1,v2 and MAXv1,v2 return the minimum or
- maximum value between two inputs, respectively. Chain several
- of these in an expression or a loop for more arguments.
- (Lachesis)
- + New Counters: bchX,Y; bcoX,Y; bidX,Y; and bprX,Y are new
- shorthand access counters for BOARD_CHAR, BOARD_COLOR,
- BOARD_ID, and BOARD_PARAM. The same limitations to those
- counters apply to the new ones. (Lachesis)
- + New Counters: uchX,Y; ucoX,Y; uidX,Y; and uprX,Y are new
- shorthand access counters for the board's under layer. The
- same limitations apply to these as to their board
- counterparts. Additionally, these counters will fail if the
- same spot on the normal board is occupied by a floor-type
- (space, [dir]water, lava, fake, etc...). (Lachesis)
- + New Counters: ochX,Y and ocoX,Y are new shorthand access
- counters for the overlay. Like OVERLAY_CHAR and
- OVERLAY_COLOR, these are read-only to discourage the user
- from writing to these instead of using the much faster PUT
- [color] [char] OVERLAY [x] [y]. (Lachesis)
- + Pressing ALT+G from the world editor now goes directly to the
- Global Robot without having to skip through the Global Info
- menu. (Lachesis)
- + MZM3 has been enabled for 2.84 and all following versions.
- The difference between MZM3 and MZM2 is that MZM3 stores a
- copy of the world version, allowing the robot format to
- change. (Lachesis)
- + COPY can now take + and # prefixes to its arguments. COPY
- BLOCK and COPY OVERLAY BLOCK can now take + prefixes to their
- first set of coordinates. (Lachesis)
- + Subroutine versions of TOUCH, BOMBED, INVINCO, PUSHED,
- PLAYERSHOT, NEUTRALSHOT, ENEMYSHOT, SHOT, PLAYERHIT, LAZER,
- SPITFIRE, GOOPTOUCHED, PLAYERHURT, KEY[char], KEYENTER, THUD,
- and EDGE have been added. These should ALWAYS be used in
- conjunction with LOCKSELF/ZAP and #RETURN or #TOP to keep the
- robot stack under control. Please remember that THUD and
- EDGE ignore LOCKSELF and their subroutine versions must be
- ZAPped. JUSTENTERED, JUSTLOADED, and the sensor labels have
- been excluded from this due to various reasons. (Lachesis)
- BUGFIXES
- + Fixed a bug where LOAD_ROBOT or LOAD_BC would not reset the
- stack pointer for newly loaded programs. This could cause
- crashes if a robot popped the stack in the new program.
- + Fixed a bug where range checking of BOARD_X and BOARD_Y would
- sometimes not be done correctly, leading to crashes.
- + Strings in the debug menu list no longer interpret any color
- codes they may contain.
- + Fixed a bug where a string would not be interpreted correctly
- if it used a '.' character in a splice parameter expression.
- Expressions such as IF "$str#('$str2.length'-4)" = "blah"
- THEN "label" will now work correctly.
- + Fixed negative sprN_cheight et al from crashing. (Exophase)
- + Placement of objects on the player will be blocked with an
- error dialog like DOS versions, instead of silently failing
- after setup. (MZXGiant)
- + Fixed a bug where LOAD_ROBOT would not properly parse lines
- of imported code that had leading whitespace. (MZXGiant)
- + Fixed an integer wrapping bug in debytecode, disallowed
- numeric literals outside of the bounds of a signed short.
- (MZXGiant)
- + Fixed a bug that would corrupt the UI palette if "set color"
- was run against a color index over 15. (MZXGiant)
- + If either board dimension is less than the editor viewport,
- the character and colors used to indicate space outside of
- the board are taken from protected sets. In game, they are
- taken from the game's sets.
- + Increase limit on difference for RANDOM "A" TO "B" to
- UINT_MAX rather than INT_MAX - 1 as it was previously. Since
- the entire range represented by a counter is now usable,
- there are no cases where RANDOM will "break".
- + Fixed avalanche rings and potions to limit boulder placement
- to 1/18, matching the AVALANCHE command.
- + Fixed corruption and possible crashes when using VIEWPORT
- SIZE to set the viewport to a size less than 80x25 but
- greater than the current board dimensions. The viewport will
- now always be clamped to board size.
- + Fixed incorrectly changing horizontal mouse position on
- setting MOUSEY. (Mr_Alert)
- + Fixed overflow into protected character set when "Revert
- to..." is selected in the character editing dialog.
- (MZXGiant)
- + Music and SFX now mute when the updater launches and are
- restored when it is complete. (MZXGiant)
- + Fixed odd string behaviour when copying between strings that
- happen to be stored close to each other in memory. This fixes
- a regression introduced by the "crash when pasting to and
- from the same string" fix in 2.82b.
- + The size/offset parameters for strings can now be specified
- in either order (#+ vs +#) and will behave correctly.
- + Reverted bogus cycle-ending behaviour for SHOOT,
- SHOOTMISSILE, SHOOTSEEKER and SPITFIRE.
- + Improved cycle-ending compatibility with MZX versions prior
- to 2.80. Fixes games such as Kya's Sword and Stones & Roks
- II.
- + Restored shark's ability to move in goop.
- + MZX now clears SPR_YORDER upon loading a new world.
- + When transitioning between boards, MZX now compares the
- module filenames of the source and destination boards
- case-insensitively. A difference in case will no longer cause
- the board module to be incorrectly restarted.
- + Fixed rare rendering corruption in the load game dialog.
- + Fixed a bug where SEND "robot" TO "#return" could corrupt the
- program counter of the target robot if it had a stack pointer
- of zero.
- + Fixed some security issues with SMZX_PALETTE and LOAD_BC
- counters.
- + MZX now only lists/opens regular files or symlinks to regular
- files in file dialogs. Special files are now ignored.
- + Opening directories with FWRITE_OPEN is now rejected properly
- on all platforms.
- + Fixed a bug where a file would be re-opened for read/write,
- even if the file was missing or an I/O error occurred before
- saving.
- + Fixed a bug where MZX could occasionally crash due to label
- list corruption when copying robots from heap locations
- greater than 2^32 bytes apart (only affected 64bit builds).
- + Stopped SET "var" <command> from assembling. Some invalid
- uses of command tokens were already being ignored, but this
- was just luck.
- + Sprites with color c?? (inherited "natural" colors) will
- correctly inherit the colors of special characters such as
- the player and other self-colored built-ins.
- + Debytecode's legacy expression converter should use
- is_string() instead of its own (buggy) hand-rolled version.
- Fixes crash when converting CoAZ.
- + The editor no longer incorrectly clamps the intelligence of
- sharks, spitting tigers and spiders to <=4, and no longer
- clamps the HP of dragons to <=4. (Lancer-X)
- + MZX now accepts SET EDGE COLOR "string" in addition to SET
- EDGE COLOR c??.
- + Fixed NDS port initialization on DSi devices. (asiekierka)
- + Fixed a bug in the joystick code where centering an axis
- clears the previous axis button. (iamgreaser)
- + Fixed a bug that allowed vlayer->board COPY BLOCK to
- overwrite the player. Blocks that would overwrite the player
- are now ignored.
- + Fixed a 2.81e regression that allowed SENDs to self to ignore
- LOCKSELF.
- + Setting $str.length now makes $str the length specified.
- (Lachesis)
- + Caps Lock no longer interferes with dialog box text input.
- (Lachesis)
- + Increasing the size of a string with $str.length, $str.N, or
- with a splice now wipes old string data with char 32s.
- + Dialogs (especially "Exit gameplay - Are you sure?") now
- require the user to have actually hit ESC to close, making
- escaping busyloops and message loops much easier. (Lachesis)
- + Added a compatibility fix for different label caching in 2.80
- through 2.83 that allowed constructs such as : "LABEL" / SEND
- "ALL" "LABEL" on an unlocked robot to continue instead of
- getting caught in a loop. The altered label caching caused
- #98485 Thanatos Insignia to lock up in an unescapable
- busyloop in GIT versions. (Lachesis)
- + MOD "[lead-in file]*" now works properly. In previous
- versions of the port, this construct would result in the
- lead-in file failing to play and the wildcard mod restarting
- when the player re-entered and re-exited the board.
- (Lachesis)
- + Fixed a bug where mod "*" would cause the mod to restart when
- entering another board with the same playing mod. (Lachesis)
- + ALT+D (Default palette) now requires a confirmation.
- (Lachesis)
- + The COMMANDS counter is now saved as a 32-bit variable.
- (Lachesis)
- + The LOOPCOUNT counter has been moved to save-only data and is
- now saved as a 32-bit variable. (Lachesis)
- + Fixed a bug where not all whirlpools were being considered as
- such, notably during the transport board scan. (Lachesis)
- + The abilities of PLAY "&file&" to play at multiple
- frequencies and to parse multiple files have been restored.
- (Lachesis)
- + As of MZX 2.84, BOARD_COLOR will now ignore the under color
- of any object with a BG color of 0 that is on top of
- something. Worlds that relied on this between 2.80 and 2.83
- are unaffected. (Lachesis)
- + Setting BIMESG to 0 will now disable Game Over's
- auto-centering of the message row. (Lachesis)
- + The DIVIDER counter's documentation has been updated to
- explain its true purpose.
- + Fixed an editor bug where canceling a world load could cause
- MZX to forget the filename of the current world. (Lachesis)
- + Pressing ALT+M in the world editor now edits anything with
- parameters, not just Robots, Signs/Scrolls, and Sensors.
- DEVELOPERS
- + Source tarballs are now generated in XZ (LZMA2) format.
- + Make hlp2txt utility work correctly on Windows platforms.
- + Updated and repaired MSVC project for Visual Studio 2010.
- (MZXGiant)
- + Win32 binaries are built ASLR-capable (via pefix).
- + Version control was changed from SVN to Git; the repo is at:
- http://github.com/ajs1984/megazeux
- + The EGL backend now supports Mesa's EGL implementation on
- X11.
- + Imported libmodplug 0.8.8.4 and rebased all patches.
- + Introduced SOCKS4/4a/5 support transparently into the network
- layer. (MZXGiant)
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <a class="helplink" href="#2823CLOG.HLP__283">New in Versions 2.82 to 2.83</a>
- <a class="helplink" href="#281CLOG.HLP__281">New in Versions 2.81 to 2.81h</a>
- <a class="helplink" href="#280CLOG.HLP__280">New in Versions 2.80 to 2.80h</a>
- <a class="helplink" href="#OLDERVER.HLP__260">New in Versions 2.60 to 2.70</a>
- <a class="helplink" href="#OLDESVER.HLP__201">New in Versions 2.01 to 2.60</a>
- <a class="helplink" href="#NEWIN200.HLP__1st">New in Version 2.00</a>
- <a class="helplink" href="#ANCENVER.HLP__1xx">New in Versions Through 1.03</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="2823CLOG.HLP">
- <a class="helpanchor" name="2823CLOG.HLP__283"> </a>
- <p class="helpcentered"><span class="f9 ">New in Versions 2.82 to 2.83</span></p>
- December 29, 2009 - MZX 2.83
- It's been a year since the last release, due in part to my
- reduced free time, and less contribution from other developers
- in 2009. I'd also like to believe that 2.82b was such a good
- release, there was no need to rush.
- There's over 30 bugs fixed this time. A few features I had to
- withhold for 2.82b have been added; sample loop markers and
- some changes to the board file format necessitated the bump to
- 2.83. Logicow's GLSL renderer has finally made it in (various
- bits had to be re-written to extend portability to other
- platforms).
- There's a new (semi-complete) Android port this time; I hope to
- complete it, and provide binaries for Android 2.0 phones, in
- 2.83b.
- Thanks go out to the usual suspects -- Terryn, Mr_Alert,
- Logicow, kvance, Lancer-X, revvy and Exophase -- for supporting
- development this year.
- USERS
- + Added support for loop markers in WAV and OGG files. The WAV
- loop support uses the "smpl" chunk used by ModPlug Tracker
- and Wavosaur among others. Only the first loop is used, and
- only forward looping is supported. The OGG loop support uses
- the "LOOPSTART" and "LOOPLENGTH" tags as used by RPG Maker
- VX. (Mr_Alert)
- + Added OpenGL Shader Language (glsl) renderer which uses
- shaders to render and scale the video. This renderer is
- compatible with Open GL >=2.0 and Open GL-ES 2.0 video cards
- only. A variety of shader programs have been provided and
- these can be customized. Performance of all MZX modes
- (including SMZX) is excellent. (Logicow, ajs)
- + Files will no longer be silently overwritten by save dialogs
- if the user enters an existing filename without the default
- extension. (revvy)
- + The string editor in the counter debug menu (F11) now escapes
- newlines and backslashes to prevent UI corruption.
- + Fixed a bug where the LOAD_GAME counter handler could
- continue to use the old board state after load, causing
- crashes. (Lancer-X)
- + Fixed a bug where status counters containing numbers >6
- characters would cause MegaZeux to crash or behave strangely.
- + Fixed a bug in the robot editor's find/replace function that
- caused crashes when replacing a string with another longer
- string, with a replacement at the end of a line.
- + Programmatically writing to a read-only "built-in" counter
- will no longer allocate it general heap space. This prevents
- writes from showing up in the F11 counter debugger that are
- inaccessible from robotic.
- + Fixed a bug that caused the SMZX mode 3 palette to become
- corrupted upon entering the char editor (the editor would
- re-write colours 2-4 and not restore them from backup
- correctly).
- + Fixed a bug where a robot program would never progress if the
- subroutine stack was popped more times than it was pushed
- (via return or top).
- + On UNIX platforms a desktop/menu entry is now installed by
- default, using the existing icon. (Sci-freak)
- + Clamp score to >= 0 if world <= 2.70. Fixes "Gates: The
- Puzzles" and possibly other old titles depending on this
- behavior. (Exophase)
- + Fullscreen modes will now automatically use your current
- desktop resolution if using any hardware renderer (i.e. not
- the default software renderer). To get the old behaviour back
- you must set fullscreen_resolution explicitly.
- + Fixed a bug where web and thick web would be treated the
- same.
- + Fixed a bug in the updater where modified/replaced files
- would be considered for deletion.
- + Fixed a bug on case-sensitive filesystems where saving a
- game, world or MZM could fail to overwrite any existing file
- by the same name (if matched case insensitively).
- + MZX no longer applies masking to chars 32-127 in signs or
- scrolls when playing a world. Previously, even the
- mask_midchars option would have no effect on the display of
- signs or scrolls. This has been broken since 2.80g.
- + Re-worked board editor's Alt+H option to provide minimal
- editor (one row) status info, rather than completely hiding
- the help.
- + The checkres utility now checks the global robot for missing
- resources too.
- + Chests can be added with Hi Bombs (omission noted by zzo38).
- + Fix IF c?? Sprite p?? # # "label" so that a non-wildcard
- parameter is respected (previously it would always just check
- sprite 0).
- + NDS port updated from dsmzx2 release. (kvance, ajs)
- + Updated SDL to 1.2.14 in Windows x86, Windows x64 and Mac OS
- X builds.
- + Security checks are no longer applied to filenames in module
- or sample playback in "listening only" modes in the editor.
- + Module volume is applied immediately before playback upon
- switching boards. This prevents one cycle of audio "leaking"
- at the wrong volume.
- + Prevent crash with negative string clip where clip + offset =
- 0. Clip is now correctly limited to total string length.
- + Help file is now optional for MZXRun, even with
- CONFIG_HELPSYS=1 builds.
- + Fixed crash when robot editor macros expanded other macros.
- + The lock icon is no longer missing from the Items THING menu
- (F4).
- + A world to start up with can now be passed to MegaZeux
- without the startup_file= prefix. This makes megazeux
- consistent with other applications.
- + SHOOT, SHOOTMISSILE, SHOOTSEEKER and SPITFIRE now end the
- cycle, to restore compatibility with pre-port MZX and fix
- games such as Kya's Sword and Stones & Roks II.
- + Have IF [dir] PLAYER [color] [thing] [param] "label"
- interpret SEEK direction wrt robot coordinates, rather than
- player coordinates. Other directions are not affected.
- + Zapping a label at the end of a robot program will no longer
- corrupt the robot list (which usually caused crashes).
- + Entering lines in the robot editor with leading or trailing
- spaces will be trimmed before the line is compiled.
- + The single quote characters encasing S_CHARACTER parameters
- in the robot editor will now use the protected (GUI) charset
- rather than the game one.
- + Added a "system_mouse" config.txt option that allows the
- mouse cursor to be replaced with the system mouse cursor,
- rather than being drawn by MegaZeux.
- + Disallowed placing player clones with SET "board_id" 127.
- + Relaxed file name limit on board MOD file. The board MOD can
- now be as long as the limit imposed by file dialog's input
- box (previously limited to 12 characters).
- + Truncation of currently open input/output file names will now
- only occur at MAX_PATH bytes (typically 512 characters). The
- previous limit was 13 characters.
- + Relaxed limit of INPUT string and bottom ("*") messages from
- 80 characters to ROBOT_MAX_TR (512) characters. In the case
- of bottom messages this can be usefully exploited to ~200
- characters.
- + Progress meter will be shown for world decrypt on console
- platforms.
- + Fixed a bug where a malformatted BMP header would be written
- (length too short, didn't include dummy channel in BMP
- palette). (Mr_Alert)
- + Optimized audio locking; do file I/O outside of critical
- sections to decrease stalling, particularly on platforms with
- slow I/O. (Mr_Alert)
- + Added support for MacOS 10.6 (Snow Leopard) and removed
- support for 10.3.
- + Loading a save game from robotic will now correctly restore
- intensities to their saved values.
- + Copy/pasting a block either with COPY BLOCK or the editor,
- where the copy would exceed the limit on robots/signs/scrolls
- /sensors, will no longer place junk at the target
- co-ordinates. Instead, the object's background will be copied
- in isolation.
- + Pasting from the clipboard, expanding a macro, or importing
- .txt or .bc files that would cause a robot to exceed the 64k
- limit now has the operation ignored at the point it exceeds
- the limit, rather than adding an unlimited number of
- unrecognized lines.
- DEVELOPERS
- + MZXRun compilation can now be disabled. Compilation of
- pre-2.82b style non-modular builds requires
- `--disable-modular --disable-mzxrun'.
- + Disabling SDL can now be done with --disable-sdl and the
- resulting configuration will automatically disable any
- SDL-dependent components. This is useless to anybody except
- developers doing new ports.
- + Game directory, utility directory and resource directories
- can now be specified and will be respected on "make install".
- (Sci-freak, ajs)
- + Added experimental port to Android. See arch/android/README
- for more information.
- + Ported opengl1 and opengl2 renderers to OpenGL ES 1.x and
- glsl renderer to OpenGL ES 2.0, used increasingly by mobile
- devices.
- + Removed SDL dependency from NDS port. It only used it for
- timing and stuffed events.
- + On Windows platforms, binaries are processed with the `pefix'
- in-tree tool to eliminate data section differences in
- programs with identical texts. This minimizes the amount of
- content required to be sent for updates.
- + Updated Wii port: improved audio and video support, added USB
- mouse support, numerous optimizations and improved file
- selector. (Mr_Alert)
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- December 29, 2008 - MZX 2.82b
- This release contains plenty of important bug fixes, ranging
- from regressions such as the broken command-line editor macro
- expansion to third party bugs like the Windows "directx" SDL
- video driver breakage.
- There are also some new ports and features. MegaZeux now runs
- on the Wii (port by Mr_Alert) and AmigaOS 4.x (port by myself
- and Spot from os4depot). The Windows x64 port has matured
- immensely and can now be considered stable. MacOS X builds now
- have clipboard support. The hardware stretching renderers now
- have a couple of fixed aspect ratio modes.
- The biggest feature of this release is the introduction of a
- portable network layer, which is currently being tested by the
- new built-in updater (F7/U).
- Internally, MegaZeux is now modularized and builds as several
- DLL and EXE files, which should make redesigning parts like the
- help system and editor a little easier, as well as allowing us
- to ship a "mzxrun" executable for the first time since 2.69c.
- This "mzxrun" executable is now used by a majority of the
- console ports.
- Contributions from Revvy, Mr_Alert, Terryn and Exophase have
- helped make this another solid release.
- USERS
- + Writing to $str.length (which previously did undefined
- things) will now truncate or enlarge the string to the size
- specified.
- + Removed filename size limit for FWRITE_MODIFY and
- FWRITE_APPEND. (Revvy)
- + Added support to the checkres tool to check worlds in
- non-local directories. (Revvy)
- + Fixed an old bug with saving games and worlds from Robotic
- where a board could be prematurely "optimized", renumbering
- robot IDs within the same cycle. For commands like DIE this
- could cause unpredictable behaviour or simply crashes (if
- invoked in the same cycle). As a special case, end the cycle
- if either of these SET specials are used.
- + Mistaken or malicious file I/O such as set "$test" to
- "fread(-1>>1)" will no longer crash MegaZeux. The read size
- will be truncated to a contextual maximum for the current
- file.
- + Fixed a crash using "fwrite0" in conjunction with an empty
- string.
- + Fixed a bug where checking sprite_collisions on a disabled
- target sprite would unconditionally trigger (regardless of
- whether a collision was present or not).
- + Un-grouped the handling of the KEY and KEYn counters so that
- different compatibility checks can be applied to either
- counter. Fixes "Bocco Chronicles 1" and probably several
- other titles.
- + Fixed a crash when using RIDn or ROBOT_ID_n in the same cycle
- as DIE for another robot positioned earlier in the board
- scan.
- + Fixed poor sanity checks on BOARD_ID counter writes. Illegal
- character IDs such as -1 can no longer be used to bypass the
- check (causing subsequent crashes).
- + Windows builds now use a patched version of SDL 1.2.13
- containing a fix for the directx+F10 issue.
- + Fixed a bug where one robot could send another robot to
- "#return", with an address outside its program. In such
- cases, the robot will now terminate.
- + An "mzxrun" binary is now shipped alongside the
- editor-capable MZX binary.
- + Fixed TIME/TIMERESET overflows with very large values. Board
- timeout is now programmatically limited to 32767, which is
- consistent with the Board Info control.
- + Clamped CHAR_X/CHAR_Y properly so that negative numbers can
- no longer be used to corrupt the editor charset and
- potentially other process memory.
- + Fixed recent breakage of SHIFT+F{1,2,3,4} so that the
- percentage of time spent displaying the original character
- and the '!' are equal.
- + Removed some bogus handling of lines containing "only" ';',
- ',' or ' '.
- + Honor user's robot character selection if they are holding
- shift when pressing return or space (would previously always
- return char 247).
- + Backspacing a line and then expanding a macro no longer
- restores the original line contents immediately after the
- expansion.
- + MacOS 10.x clipboard support (via Cocoa Pasteboard). Alt+Ins
- can be entered with Fn+Alt+Numpad0 on a Macbook or Powerbook
- keyboard.
- + Robot editor S_CHARACTER fields no longer bogusly escape
- characters such as ". In addition, rendering glitches are no
- longer encountered when using the ' S_CHARACTER (which is
- completely reasonable).
- + Fixed robot editor glitches where the game charset SPACE
- would be used in places where the protected UI charset should
- be used instead.
- + The introductory help message is displayed if the load dialog
- is cancelled prior to loading a game. Hopefully the screen is
- now never totally blank.
- + The F7/F8 cheats can now be used freely in MZXRun (in
- MegaZeux proper they remain usable only in editor tests).
- + Saving to a directory above the MegaZeux startup directory,
- then attempting to save to this location again, will no
- longer crash MegaZeux. Instead, the parent directory will be
- changed into before the dialog is displayed.
- + Fixed numerous crash bugs with the scroll editor; it should
- be relatively usable now.
- + Writing to $str+0 is no longer interpreted in the same way as
- a plain write to $str. Instead, it behaves like writes to
- non-zero offsets (as more of a paste than a replace).
- + Display of current X,Y position of robot in the robot editor
- status bar.
- + Fixed directory rename so that it no longer displays garbage
- and/or crashes MegaZeux (Alt+R to rename a directory in any
- file picker).
- + In the robot editor, lines can now be split at a midpoint
- with enter and two consecutive lines merged together with
- backspace. (Exophase)
- + Fixed use of status counter 6 and display of status counters
- in general, which has been broken since 2.80.
- + Fixed swapping to encrypted worlds if initially the user
- decides to not decrypt the world. Previously, this would
- either crash, or loop forever.
- + When using the OpenGL or overlay renderers, in either
- windowed or fullscreen mode, the aspect ratio can now be
- preserved as either 4:3 (most similar to DOS) or 64:35 (most
- similar to the port). The display will be letterboxed or
- margins applied as appropriate. See the "video_ratio"
- configuration option for more information.
- + Fixed a bug on some systems where numlock could not be used
- as a key, only as a flag. The numlock "key" is now masked out
- of "key_code" and similar; hopefully this won't break any
- games.
- + Restored the meter widget from the old DOS MZX for use with
- the world loader and saver routines. This reassures users,
- especially on consoles, where loading a world can take a long
- time. (Mr_Alert)
- + On Windows, directx.bat now passes %cd% through to `start' so
- that features such as the updater continue to work.
- (MZXGiant)
- + Pasting into a string with set "$str+N" with an N >
- str.length will no longer crash MZX.
- + "Exit to DOS" is now "Exit MegaZeux" to reflect the
- multi-platform nature of the program.
- + Setting a substring size to zero with $string#0 will no
- longer return the whole string; it will instead return the
- empty string.
- + Accessing a substring with an offset >= $string.length will
- no longer return the last character from the string; it will
- instead return the empty string.
- + Writing beyond MAX_STRING_LEN (1MB) or using negative offsets
- (which has the same effect) no longer crashes. Instead, the
- write is ignored.
- + Fixed crash when pasting to and from the same string,
- specifically in conjunction with $str+offset.
- - Removed the legacy "force_resolution" option which was
- replaced long ago by the more accurate
- "fullscreen_resolution" option.
- DEVELOPERS
- + Ported to OpenSolaris. You need to install `SUNWxorg-headers'
- if you want X11 clipboard support.
- + Removed dependency on SDL_image on non-win32 platforms when
- enabling the icon branding feature (see pngops.c).
- + Ported to AmigaOS. You need to install the clib2 version of
- libSDL and miniGL, and the build system assumes you are using
- a cross compiler.
- + Added experimental port to the Wii. See arch/wii/README for
- more information. (Mr_Alert)
- + get_path() in util.c now returns <0 for failure, or the
- length of the path for the given file. (Revvy)
- + Added the make time WHOLE_PROGRAM=1 flag which enables
- compilation of the core binary in GCC's "-fwhole-program
- --combine" mode. This makes all symbols static and improves
- optimization, somewhat like MSVC's LTO does.
- + Added a valgrind.supp file to suppress bugs in third party
- libraries when valgrinding MegaZeux.
- + Cleaned up all the ports and documented making new ports. The
- platforms "linux", "solaris" and "obsd" are now called
- "unix", and the "linux-static" platform is now "unix-devel"
- and available on all UNIX derivatives/clones.
- + Added a special hack to enable linking with --as-needed for
- DT_NEEDED link optimization for GNU ld platforms.
- + Updated MSVC projects. Fixed all warnings emitted by MSVC
- 2008, and implemented icon support with existing mingw
- resource files.
- + Now uses the GNU ld "debuglink" feature on all platforms to
- enable shipping of a side-by-side symbol package. Optimized
- release builds can now be debugged with minimal user effort.
- + MegaZeux now provides the option for "modular" linkage,
- factoring out the "core", "editor" and "network" features to
- shared objects that other binaries can link against. This
- feature works on the unix, mingw, amiga and darwin ports.
- + Added RPM .spec file. Capable of building (at least) Fedora
- 10 RPMs.
- - Removed HOST_CC feature for cross compilation; since the
- utilities now intimately depend on the MZX runtime, they must
- be built with the same compiler.
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- June 10, 2008 - MZX 2.82
- Despite the increase in minor version, this release mostly
- targets bug and regression fixes. However, there ARE some
- additional new features, such as the introduction of the
- LOAD_MENU and mouse pixel counters, and refinement of the
- {FREAD,FWRITE}_COUNTER counters. (There are several other
- smaller features that are documented in the changelog.)
- SAVs from older worlds (requiring compatibility hacks) no
- longer fail to play (Darkness, etc. are affected). We've also
- done a good bit to fix compatibility with 2.70 and older.
- A new tool, "checkres", is now routinely packaged, allowing you
- to check your games for missing resource files (PALs, CHRs,
- etc.) before passing them on to other people. This should be
- especially handy for DoZ game submissions.
- The Nintendo DS port (Kevin Vance's "DsMZX") has been merged
- into this release. I'll provide binaries for GP2X, PSP and NDS
- this time, but I can't guarantee they'll work.
- Both of the snags from the last DoZ have been addressed -- the
- help system should no longer crash and the Block Action crashes
- should be reduced in frequency. However, there are still issues
- with pasting in the robot editor that remain unfixed (they're
- just really hard to reproduce). With your bug reports, I look
- forward to fixing this.
- As usual, thanks go out to Revvy and Mr_Alert for their
- contributions to the bug-fixing effort, and to Terryn for his
- unwavering dedication to creating and organising bug reports,
- and for testing our bug fixes.
- USERS
- + Fixed and improved quality of the half-width renderer for the
- GP2X port (Mr_Alert).
- + The numpad now works correctly when numlock is disabled. Keys
- are no longer ignored by the MZX editor, and games should
- recognize them as before.
- + Added a tool, "checkres", which extracts all resources from a
- MegaZeux world or board file and lists them (or lists only
- those which are not found in the game directory). ZIP files
- are also supported (to a more limited extent). (ajs & Revvy,
- ideas from Exophase & Terryn).
- + Removed the bogus "F1 for Help" option from error dialogs,
- and finally got rid of the "** BETA **" banner on title
- boards in play mode.
- + Obsoleted support for the AMS, DBM, DMF, MDL, MT2, PSM, PTM
- and UMX module formats. As noted for several versions in the
- help file, these are not loadable by MikMod. It is extremely
- unlikely any game uses these obscure formats, but denying
- their use is now enforced (at a robotic level).
- + Fixed crash when writing to an MZX string at an illegal
- offset (< 0).
- + Fixed returning from a subroutine invoked by a jump from a
- MZX text box class command so that it no longer skips the
- next impending line (after the text box).
- + Assembled single non-alphanum/punctuation characters as
- bytecode CHARACTER instead of bytecode STRING. Fixes bogus
- auto-quoting for commands like SCROLL CHAR (Revvy).
- + Switched the Win32 package back to using the "windib" SDL
- video driver, instead of the "directx" SDL video driver. The
- windib.bat file has been replaced with directx.bat, which has
- opposing semantics.
- + SAM/GDMs with converted WAV/S3M counterparts of zero length
- will be automatically re-converted. This hack can be used to
- procedurally regenerate WAV files from SAMs, or transparently
- work around on-disk corruption.
- + Strings are now limited to a maximum length of 1M. I'm open
- to suggestions over a better limit, but there must be a limit
- (set "$string.X" notation grows a string arbitrarily, so
- robotic can crash MZX when a string is resized beyond a
- reasonable limit).
- + Strings, when grown, will fill gaps with ' ' instead of
- garbage. This can be useful when the string grows after using
- the set "$string.X" notation; the rest of the string is no
- longer garbage, allowing the debugger to be used.
- + A robot that does a "put c?? Thing p?? [dir] player" and
- overwrites itself will no longer leak commands. Instead, if
- the robot overwrites itself, its program will end.
- + Fixed message edges always showing up black, instead of
- whatever color 0 is. (Revvy)
- + Changed starting/max health and lives minimum to 1 instead of
- 0. (Revvy)
- + Some help system (F1) bugs have been fixed, hopefully
- mitigating some of the crashes people have been seeing.
- + Fixed a bug on Linux where fclose() on a robot-opened file
- could, on world reload, occassionally crash (due to a stale
- handle). Fixes loading Taoyarin saves multiple times in a
- row.
- + The new option "gl_vsync" has been added to allow the SDL
- "flip on vsync" in the OpenGL renderers to be forcibly
- enabled or disabled. This fixes a problem where speed 1 would
- only be as fast as the video refresh rate.
- + Setting the music volume to 0 (when using the ModPlug engine)
- now ensures that no music is audible. Previously, setting the
- volume to 0 would be equivalent to setting the volume to 1,
- which was still audible.
- + Upon exiting the initial load screen, and not entering the
- editor, the screen is now updated. This fixes rendering
- glitches in the MZX game window when overlapping the window
- with another, at the slight expense of CPU time.
- + If loading a save game from the title screen (or when no
- world has been loaded) MZX no longer sends JUSTENTERED to all
- robots. This restores compatibility with MZX 2.70 and is
- consistent with loading a save from another board.
- + Counters with 10 digits and a negative sign are no longer
- truncated in the debug menu.
- + Correctly clamped (rather than truncating) the value passed
- through to a SET COLOR. Restores compatibility with 2.70, and
- fixes Xenogenesis.
- + Improved clipboard copy behaviour on Linux. Some actions are
- still mysteriously broken.
- + Fixed replacing with a blank string in conjunction with the
- replace all Ctrl+F action in the robot editor. The cursor can
- now no longer become negative, fixing numerous possible
- crashes on search/replace.
- + Fixed loading the intrinsic SMZX palette when switching to
- SMZX modes from a game not in the same directory as the
- "smzx.pal" file.
- + Reloading a world that requires switching between SMZX and
- non-SMZX modes will now respect the world's intrinsic palette
- on the title screen. Fixes problems loading non-SMZX games
- after having an SMZX game loaded.
- + Clamped array offsets on boards. Some older MZX worlds are
- corrupted and have the endgame_{x,y} coordinates outside of
- the limits of the endgame board. Fixes "Fourth Power".
- + Where possible, versioned all counters that the port
- understands. This ensures that in the unlikely case that a
- game made with an older version of MZX (actually, with an
- older world magic) uses a counter that did not exist in that
- game's era, the port will no longer try to interpret it.
- Previously, only rid? and key? were versioned.
- + SAV files will now be stamped with the world magic of the
- world they were loaded from. This allows compatibility hacks
- to apply to SAV files as they would to worlds (ajs, Terryn,
- Mr_Alert).
- + Added LOAD_MENU counter like ENTER_MENU, F2_MENU et al. to
- allow control (from Robotic) over whether the LOAD_MENU can
- be brought up.
- + Made FREAD_COUNTER and FWRITE_COUNTER read in a DOS dword
- (32bit) instead of a DOS word (16bit). This allows modern
- post-port MZX counters to be fully represented in files.
- Compatibility with older worlds is preserved.
- + Added a new config option "board_editor_hide_help" which
- changes the default hide setting of the help text on the
- primary board editor.
- + Numerous fixes for bugs found by valgrind. (Nightwatch)
- + Icon support is now fixed and works on all platforms. On
- Windows, the icon cannot currently be changed (it is loaded
- from the EXE's resource section). Use ResHacker if you really
- want to change it.
- + Fixed a bug where either LOAD_ROBOTn or LOAD_BCn (where n was
- equal to ROBOT_ID) would alter the robot's line number rather
- than completely restart it. Due to complexities in robot
- context, this lead to the first line being skipped.
- + Added a new tool "downver" which supports drag-and-drop
- downgrading of a world or board from the version of MZX it is
- packaged with to the previous version of MZX. This tool may
- be unsafe to use -- be careful.
- + Fixed a bug in the robotic assembler which would
- occassionally emit corrupt programs with SAVE_ROBOT. These
- programs, if loaded by LOAD_ROBOT, could cause a crash.
- + Added a config.txt (or command line) option "startup_editor"
- which, if set to a non-zero value, will start MegaZeux in the
- editor with a blank world.
- + Fixed a bug where a robot's WALK processing, on entering a
- transporter, could allow subsequent commands (such as GO) to
- corrupt the board. WALK now ends the cycle in the special
- case that a robot goes through a transporter.
- + You can now directly import bytecode into the robot editor
- via the Alt+I menu. The extension for the bytecode file must
- be .bc for it to be loaded.
- + A game loading SAVs via the LOAD_GAME counter will no longer
- crash MZX if the SAV attempted is from an incompatible
- version of MZX, or in any way corrupted.
- + Fixed a crash when auto-completing lines that were greater
- than 241 characters in length after completion.
- + Added mouse pixel counters MOUSEPX and MOUSEPY. (Mr_Alert)
- + Commenting a line of maximum length (241 characters) can no
- longer grow the length of the line beyond this limit.
- + Fixed a bug causing the software renderer to fail to center
- when using a boxed fullscreen resolution. Also fixes a bug
- where the PSP platform would ignore an override of the
- force_bpp option. (Mr_Alert)
- + Fixed a bug causing macros loaded from config.txt to be
- expanded incorrectly. Relatedly, fixed a bug where #<string>
- in the robot exitor would "disappear" on entry, if there was
- no correspondingly named macro.
- DEVELOPERS
- + Builds no longer initialize the SDL audio subsystem if audio
- is permanently disabled with --disable-audio.
- + Added fixes for OpenBSD to allow PNG screenshots and X11
- clipboard support to work. Tested with OpenBSD 4.2 and
- GCC 3.3.5.
- + Updated Win32 builds with SDL 1.2.13.
- + Build and package two utilities, txt2hlp (for helpfile
- generation) and checkres, on Win32.
- + Dependencies are now correctly tracked in the build system.
- Modifying a header will automatically regenerate the minimal
- set of object files that depend on this header.
- + Out of the box MSVC support. The file "msvc.zip" in the root
- of the source package now provides a Visual Studio 2005
- project and pre-compiled dependencies. There may be stability
- issues with the resulting binary. See also the documentation
- in arch/msvc/README.txt.
- + The Nintendo DS port (a.k.a. 'dsmzx') has been merged. This
- is the most exotic port thus far, and adds features such as
- player focus (on the second display). Sound isn't working
- yet, and large games still won't play (due to lack of
- memory). See docs/nds.txt for more information. (kvance)
- + Many stack-heavy functions have been de-bloated and allocate
- large storage on the heap (if performance is not critical).
- This helps out platforms with a small, fixed stack size (such
- as NDS).
- + The built-in help system can now be disabled for embedded
- platforms. The startup check for the help file will not be
- performed if the help system is disabled, and so this file
- can be omitted from distributions.
- + The package.sh script now supports OS X, PSP, GP2X and NDS
- packaging.
- + The OS X port no longer requires Xcode. The new build system
- and package.sh can create a universal Application and
- corresponding DMG file. The new infrastructure deprecates the
- old macosx.zip method.
- + Most of the internal dependency on SDL has been removed.
- Therefore, MZX can be built (but not yet work) without SDL
- present. The only remaining component to convert is MikMod,
- but this can be disabled, so port authors can start using the
- feature right away (see config.sh). (Mr_Alert)
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <a class="helplink" href="#284CLOG.HLP__284">New in Versions 2.84 to 2.84c</a>
- <a class="helplink" href="#281CLOG.HLP__281">New in Versions 2.81 to 2.81h</a>
- <a class="helplink" href="#280CLOG.HLP__280">New in Versions 2.80 to 2.80h</a>
- <a class="helplink" href="#OLDERVER.HLP__260">New in Versions 2.60 to 2.70</a>
- <a class="helplink" href="#OLDESVER.HLP__201">New in Versions 2.01 to 2.60</a>
- <a class="helplink" href="#NEWIN200.HLP__1st">New in Version 2.00</a>
- <a class="helplink" href="#ANCENVER.HLP__1xx">New in Versions Through 1.03</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="281CLOG.HLP">
- <a class="helpanchor" name="281CLOG.HLP__281"> </a>
- <p class="helpcentered"><span class="f9 ">New in Versions 2.81 to 2.81h</span></p>
- December 8, 2007 - MZX 2.81h
- Another bugfix release with a couple of new features, in time
- for the Winter 2007 Dualstream Day of Zeux. The major new
- features of this release are automatic module renaming in the
- editor, PNG screenshots and many improvements to MZX on
- embedded platforms (like PSP and DS).
- MegaZeux can now be compiled in MZXRun mode (like the old DOS
- implementation) and by disabling features such as unnecessary
- renderers and audio support, can be made approximately 70%
- smaller.
- Thanks again to Terryn for relentlessly tracking down many
- serious bugs; we've tried to fix all the issues that have crept
- up in the last 5 months.
- Thanks too to Exophase, Mr_Alert and Wervyn for contributing to
- this release; your time and help is invaluable.
- Happy Holidays!
- USERS
- + Added a more lenient WAV file loader so that ModPlug isn't
- relied on as much to play malformed WAV files (mostly old SAM
- conversions) (Mr_Alert).
- + Added SCORE and mzx_speed to the counter debugger
- (Mr_Alert, ajs).
- + Added a 16-bit software renderer and a half-width renderer
- for the GP2X port (Mr_Alert).
- + Made the mouse cursor in the "opengl2" renderer look more
- like the mouse cursor in the other renderers (Mr_Alert).
- + Setting vlayer_size, vlayer_width or vlayer_height to values
- less than or equal to zero would crash MegaZeux. Limited the
- smallest vlayer size to 1x1.
- + Setting vlayer_width or vlayer_height to a value larger than
- vlayer_size would crash MegaZeux. Limited the largest size of
- either dimension to a maximum of vlayer_size.
- + If selecting a module with a non 8.3 filename, MZX will now
- ask you if you want to rename it to 8.3, and do so in an
- intelligent way. This means that music can be selected in the
- editor and correctly saved (Wervyn).
- + The OpenBSD compiler detected some serious string bugs in
- MegaZeux. These have now been fixed and should eliminate some
- more potential crashes.
- + Fixed a bug where an ENERGIZER item or use of the INVINCO
- counter would cause the original player color to be corrupted
- at the end of the colour blitz.
- + Fixed a long-standing bug where set "$string" to "FWRITEn"
- would be cheerfully ignored.
- + Fixed a bug where a corrupt robot list could crash MegaZeux
- (e.g. the list from Star Quest from DoZ'02).
- + FEATURE: Screenshots are now saved in a palettized PNG file
- format. For platforms without libpng, PNG support can be
- compiled out, and BMP will be used instead.
- + Fixed a bug where changing boards in the editor could
- sometimes corrupt memory, later causing a crash (either
- testing or coming out of testing a board).
- + Fixed a sensor bug that happens when a sensor can't go
- anywhere it is told to, and the player is on it (Exophase).
- + Fixed using ABORT LOOP in some situations. Using it outside
- of a loop still has undefined semantics and this has been
- documented in the help file (Exophase).
- + Setting a board option below its numeric limit is no longer
- possible (Exophase).
- + Fixed problems with going over Robot name character limits
- using the .@ command (Exophase).
- + Fixed problems with LOAD_ROBOT freezing on a robot with no
- newline at the end of the file.
- + Fixed a problem with "Replace All" in the robotic editor that
- could sometimes cause a line to exceed 240 characters and
- crash the editor.
- + Fixed a problem with "Replace" in the robotic editor which
- could cause a line to temporarily become 241 characters and
- then truncate silently to 240 characters.
- + Fixed a bug that caused the original game palette to be lost
- when testing a game in the editor that switched between
- Regular/SMZX1 and SMZX2/3 modes. MegaZeux should now try much
- harder to preserve the user palette, regardless of game
- edits.
- + Fixed a bug causing board switching to not correctly alter
- the x,y viewport scroll leading to the display of raw memory
- and potential crashes, with differently sized boards.
- + Fixed stack corruption caused by SCROLL CHAR SOUTH, detected
- by Ubuntu's SSP (Stack Smashing Protection) enabled binary.
- DEVELOPERS
- + Made the build system less verbose by default (like Linux).
- This should help make warnings (due to coding errors) easier
- to identify. If you don't like the new syntax, or need the
- command debug, you can build with "make V=1".
- + Updated Win32 builds with SDL 1.2.12.
- + Rewrote the build system to not use recursive Makefiles.
- Variable propagation was starting to be a problem, and
- recursive designs are generally discouraged.
- + Refactored the graphics rendering code to modularize the
- renderers and reduce code duplication (Mr_Alert).
- + GDM2S3M switched over to use inttypes.h instead of home-brew
- types.
- + MegaZeux now compiles on OpenBSD (and probably other BSDs).
- + Made all unnecessary global symbols static. This should
- improve compiler optimisations and correctness (Mr_Alert,
- ajs).
- + Fixed compilation of MegaZeux against SDL 1.3 SVN. However,
- this SDL version is still in development, and MegaZeux does
- not work correctly when compiled against it.
- + MegaZeux now builds with the experimental MINGW-x64 branch,
- enabling x64 binaries for Windows.
- + MegaZeux now builds with MSVC if you apply the patch from
- contrib/,megazeux-r326-replace-c99-variable-arrays-with-
- malloc-free.diff . This patch is required for MSVC because it
- makes non-compiler-specific changes (which involve converting
- from C99 variable length arrays to malloc/free) which are
- slower and should not be used with competent C99 compilers
- like GCC. Microsoft Visual C++ Express Edition 2005 was used
- to build libogg, libvorbis, libsdl and MegaZeux itself. Only
- 32bit builds were tested.
- + MegaZeux now has size optimisations which can reduce binary
- size when features are disabled. For example, all renderers
- can now be disabled, and when module engines are disabled,
- audio will not export any symbols.
- + The entire audio subsystem can now be disabled. This further
- reduces binary size on embedded platforms. However, SFX
- editing still remains enabled (though useless) until editor
- modularity is implemented.
- + The PSP port is now officially supported, and compiles out of
- the box. See docs/psp.txt.
- + Renamed macos platform "darwin", to reflect its true nature
- (use Xcode to build as a real Application, instead of just a
- UNIX binary). Also fixed some bogosities with robo_ed's X11
- includes on OS 10.5.
- + The editor can now be disabled, a la MZXRUN from the old DOS
- versions. Configure with --disable-editor to shrink MZX by
- about 150k.
- + MegaZeux can now be compiled with size optimisations
- (--optimize-size to config.sh) for a 20% space saving.
- + MegaZeux's core now builds with -W (basically all GCC
- warnings) plus some additional warnings that aren't switched
- on by this flag. All warnings have been fixed.
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- July 4, 2007 - MZX 2.81g
- Again, no significant new features have been introduced in this
- release. However, there have been many essential bugfixes,
- including improved compatibility with games made in older
- versions of MegaZeux.
- Additionally, improvements have been made to the opengl2 and
- overlay2 renderers, improving performance for most users. A
- port of MegaZeux to the GP2X console has been added. MegaZeux
- has been backported to C (rather than C++) and can operate
- correctly on a CPU without a floating-point unit.
- Particular thanks go out to Mr_Alert (for his valuable bug
- fixes), Lancer-X (for fixing what I was too lazy to) and Terryn
- (for finding many annoying bugs that nobody else could).
- USERS
- + Fixed a bug in the audio code. The linear resampler was not
- taking volume into account, which broke changing the volume
- of samples (WAV and Vorbis) which cannot natively alter their
- volumes.
- + Fixed a regression in the overlay editor caused by the new
- editor space semantics.
- + Screenshots are now rendered to a separate texture using the
- 8bit software renderer. This means that the hardware scalers
- will not affect the quality of the screenshot. It also fixes
- a bug when using opengl2, which would dump only a white
- screen.
- + Temporarily reverted a bugfix that broke Zeux IV - Forest of
- Ruin. I'm not dropping the bugfix, I just can't immediately
- see what's wrong.
- + Fixed a bug where setting the viewport to negative
- coordinates would crash MegaZeux. There was code to handle
- this, but it was wrong.
- + Fixed a bug that permitted the mouse y coordinate to be
- warped to row 25, which does not exist. This bug caused some
- of the renderers to crash, and the software renderer to draw
- in memory it did not possess.
- + Fixed a bug where games made before 2.68 could have available
- the "key?" counters, unsupported in that version. This caused
- collisions with counters with the key? name used with
- inc/dec/mul/div/mod. Fixes "Doom Keep".
- + Imported libmodplug 0.8.4, which adds MIDI/PAT and ABC format
- support, fixes some bugs in the mixer, and should build on
- more platforms.
- NOTE: MID files currently cannot be selected in the editor,
- because they do not play correctly.
- + Improved the performance of the "opengl2" renderer, by
- removing the convoluted 3D drawing commands and replacing
- them with 2D ones. Reduced the quad count by using an
- intermediary 80x25 texture. MegaZeux now depends on fewer GL
- features. [LogiCow]
- + Introduced an "fsafegets" to work around problems where
- robots exported by a Windows version of MegaZeux would not
- load on other platforms. This was due to differing EOL style
- and broke at least one game (Termination).
- + Renamed "force_resolution" to "fullscreen_resolution" to
- better match its semantics with the scaling renderers. The
- new name is less accurate for software render modes, but most
- people using software will not want to change it from the
- default anyway.
- + Fixed a bug where the variable-length string allocator would
- prematurely bail out when reading a string (of indeterminate
- length) from a file with the set "$var" to "FREAD" syntax.
- + Fixed a bug where more than 256 errors would crash the
- robotic checker.
- + Improved performance of the overlay2 (faster) renderer
- (Mr_Alert).
- + Made the transparent overlay "really" transparent when used
- in conjunction with sprites (Mr_Alert).
- + Fixed a bug reported by Mr_Alert where MZX would not handle
- short, non-looping mods in the editor. The editor would try
- to destroy the mod again, even after the callback had
- destroyed it (premature termination).
- + Fixed a bug with SWAP WORLD where file translation would
- occur but the result would mistakenly not be used. This broke
- some uses of SWAP WORLD on non-Windows platforms (Mr_Alert).
- + Fixed a bug where using JUMP to MOD ORDER right after
- switching boards would fail due to the board music not having
- been loaded yet (Mr_Alert).
- + Fixed a bug where games made before 2.80 would inadvertently
- trigger "PLAYERHURT" due to using the SET command to reduce
- the amount of health (Mr_Alert).
- + Fixed a bug where player clones were generated when entering
- transports during FREEZETIME (Lancer-X).
- + Debug menu is now eradicated on leaving the editor
- (Lancer-X).
- + Debug menu is now properly painted over when the board size
- is < the editor viewport. Fixes various graphical glitches
- (Lancer-X).
- + Fixed a crash bug when playing older MZX games from read-only
- media (such as a CD) or where file-system permissions
- prohibited creating SAM conversions (Lancer-X).
- + Fixed bug where certain file formats would not be
- automatically converted if their extensions were mixed or
- upper case (e.g. OGG/SAM/GDM).
- + Restored functionality of "if lasttouch DIR" which has been
- broken since MZX 2.02.
- + Fixed a bug where attempting to decrypt a read-only world
- file would result in a crash (Mr_Alert).
- + Fixed several bugs where an error loading a world file would
- result in crashes in several different situations (Mr_Alert).
- + Fixed a bug where a robot using the BECOME command to change
- into a PushableRobot or vice versa would freeze (Mr_Alert).
- + Fixed memory leaks in the file selection dialog, the counter
- debugger, the collision list and the global robot (Mr_Alert).
- + Updated counter list (see docs/counter_list.txt in the
- source) (Terryn).
- + Fixed a bug where pressing escape when editing the effect of
- a ring or potion would result in an invalid parameter which
- would later cause a crash if edited again (Mr_Alert).
- + Fixed a bug in which robot-driven text boxes using option
- commands (the ? command) could overflow by two characters and
- spill over the side (Lancer-X).
- + Fixed the list box searching mechanism (used in the file
- manager and F11 counter list) and made the existing function
- more understandable. (Lancer-X).
- + Fixed a bug in which the message string given to the 'ask'
- command could spill over. Now, the 'ask' dialog resizes if
- possible, and clips when no further resizing can be performed
- (Lancer-X).
- + Clipped the 'input string' message properly, to prevent
- similar overflow.
- + Fixed a bug with the EXPLODE, DIE, DIE ITEM and BECOME
- commands when used with the global robot (would clear the
- global robot, eventually corrupting memory when in the
- editor). Presumably, these commands are bogus for the global
- robot, and have been disabled.
- DEVELOPERS
- + Rewrote config.sh to use POSIX sh compatible functions, so
- that there is no dependency on the BASH interpreter.
- Surprisingly, some distributions still don't enable BASH by
- default (using csh, ash or zsh instead).
- + Ported most of MegaZeux back to C. Many more changes were
- required than I anticipated; MZX was using more C++ features
- than I expected. The only exception is audio.cpp, which
- cannot be ported back to C because it uses ModPlug's C++
- classes directly (but I plan to split this file up shortly).
- NOTE: The changes required were enormous, so I might have
- introduced some weird bugs! Please test!
- + Enabled GCC's -W flag for even more warnings, switching off
- unused parameter warnings (useful for delegates). Mostly
- typing fixes, but it found a bug in string handling.
- + No longer suppresses char-subscript warnings, and fixed up
- any remaining abuses in the tree.
- + Added manpages for 'megazeux' and other binaries for the
- Debian packages. Complied with the Debian packaging
- guidelines by providing a copyright note, listing significant
- contributors to MegaZeux.
- + Added support to the build system for supporting icons
- modularly. See contrib/icons/README for more information.
- + The debug build (make DEBUG=1) now enables GCC 4.x's stack
- protector. This breaks compatibility with GCC 3.x, but you
- can just remove the flag if you don't want to use it (the
- stack protector will improve stack corruption detection and
- provide more usable debug traces).
- + Custom Random() implementation to provide a more uniform
- number distribution. Factored out for future (better)
- implementations.
- + The audio backend (audio.cpp) has been modularised to support
- the use of mikmod instead of modplug. This should enable
- ports of MZX to platforms without an FPU, and improve
- performance on platforms with weak FPUs.
- + Added GP2X port to config.sh, based on work done by Simon
- Parzer.
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- January 30, 2007 - MZX 2.81f
- This release is mostly about the new renderers, the first of
- which was introduced in the previous version. There's also a
- few important bugfixes, and a lot of internal tidy-up work. I'd
- like to thank Mr_Alert, Quantum P. and LogiCow for contributing
- to this release. Thanks guys.
- USERS
- + Renamed the force_32bpp config option to force_bpp, in
- preparation for 16bit OpenGL render modes. This option now
- takes 8, 16 or 32. 16 is reportedly broken on Windows, so
- stick to 32 for now.
- + Added infrastructure for "pluggable" renderers. This code
- isn't perfect, but it's far better than the mess in 'e'.
- Defaults to the 'software' render mode.
- + Added Logicow's alternative OpenGL renderer. For more
- information about this renderer, see config.txt. NOTE: This
- code may be buggy! Please test!
- + Added Mr Alert's YUV overlay renderers. One does full YUV
- macropixel approximation, the other (faster) render does
- chroma supersampling. See config.txt for more information.
- NOTE: This code may be buggy! Please test!
- + Simplified Exophase's OpenGL renderer present in 'e', and
- fixed a few bugs that caused it to not work for some people.
- + Really made MegaZeux use 'directx' by default on Windows. The
- code in 'e' was non-functional. Use 'windib.bat' to run
- MegaZeux with the SDL windib driver.
- + The OpenGL renderers now have a 'filter' option that allows
- you to choose linear (where pixels are interpolated, looks
- "blurred") or nearest (where nearest-neighbour approximation
- occurs, looks "sharp").
- + Mouse warping was broken when using any of the hardware
- renderers. There should be code in there now to take account
- of this (thanks Mr_Alert).
- + Added an option 'editor_spaces_replace' which allows you to
- revert MZX's space overwrite behavior to the semantics of 'd'
- (the feature was removed in 'e'). By default, the behavior is
- unchanged (the same as 'e').
- + F6 (the debug menu) can now no longer be enabled anywhere but
- in the editor Alt-T test mode. In 'e', it was possible to
- enable on the title screen, but could not be enabled in a
- game. Like the cheats, this option is now visible only in
- test mode.
- + Fixed a bug where the global robot could be exited via some
- legal commands, in an abnormal fashion. The bug resulted in
- all the code up to the offending command being executed over
- and over.
- + Fixed a bug in the audio code. The linear resampler was not
- taking volume into account, which broke changing the volume
- of samples (WAV and Vorbis) which cannot natively alter their
- volumes.
- + Fixed a regression in the overlay editor caused by the new
- editor space semantics.
- + Temporarily reverted a bugfix that broke Zeux IV - Forest of
- Ruin. I'm not dropping the bugfix, I just can't immediately
- see what's wrong.
- + Screenshots are now rendered to a separate texture using the
- 8bit software renderer. This means that the hardware scalers
- will not affect the quality of the screenshot. It also fixes
- a bug when using opengl2, which would dump only a white
- screen.
- - The force_height_multiplier option has been removed. A lot of
- code wasn't properly designed to handle it, there have been
- mouse warp bugs with it for years, and nobody seems to use
- it. If people want stretching, they can choose one of the
- four hardware renderers to achieve this.
- - Removed the 'lame/1337' menu feature.
- DEVELOPERS
- + OpenGL can now be disabled via config.sh. This allows
- MegaZeux ebuilds to be constructed on systems that do not
- have any form of OpenGL support. (Although MZX runtime loads
- the OpenGL library, 'e' required the headers to build
- correctly. This is now no longer the case.)
- + On Windows, due to an ATi driver bug, I have provided a means
- of linking directly to opengl32.dll, instead of relying on
- the dynamic loader. This reduces binary portability, but
- fixes many bug reports of being unable to fullscreen on ATi
- video cards. See OPENGL_LINKING for more information.
- + Improved support for cross compiling with mingw32 on Linux,
- combined the win32 Makefile with this new support.
- + Rewrote the config.sh script. All of the options have
- changed, and the broken platform auto-detection has been
- removed. See ./config.sh for more information.
- + Rejigged MegaZeux's headers so that they can be used in both
- C and C++ mode. Renamed fsafeopen.cpp to fsafeopen.c.
- Hopefully by 'g' most of MegaZeux should be ported back to C,
- instead of the "C++" it is now.
- + Fixed up the 'txt2hlp' utility which Terryn has been using a
- version of to build the internal MZX help system. This binary
- is built in the source distribution, but it is not
- distributed with the MegaZeux binaries.
- + Moved some antiquated Greg code out into 'old'. No attempt
- has been made to make it compile, it is provided purely for
- reference.
- + For the windows binaries, "windib.bat" is now generated by
- package.sh and auto-generated for the name of the MegaZeux
- executable.
- + Updated Xcode package from Quantum P. (see macosx.zip).
- + Fixed an invalid assumption in config.sh where /bin/sh was
- chosen as the shell script interpreter. This should have been
- /bin/bash, as 'sh' is not required to support functions,
- which config.sh uses.
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- January 19, 2007 - MZX 2.81e
-
- + Made grabbing in the editor not combine background color
- - only uses "special" in game colors for player. tell me if
- anything ends up being weird because of this.
- + Possibly fixed an obscure bug where moving something happened
- immediately if it was sent to a label by a robot further
- east/south than it and it moved north or west (has to do with
- the way robots are reverse scanned). Tell me if this changed
- any behavior for the worse and I'll change it back or try to
- work out something new.
- + Added GDMs to ctrl + n; this will, of course, auto convert
- and play the s3m.
- + Added ability to preset player locked status from board
- settings.
- + Instead added ability to debug variables (counters and
- strings) ingame with F11. There's also an option to export
- the current variables to Robotic program that sets them.
- + Fixed bug where moving a block with the player into an
- overlapping region leaves a space where the player was.
- + Fixed bug with a robot indirectly sending itself to a
- subroutine via send all or send name causing it to loop the
- send.
- + Added compatability hacks for key# prior to MZX 2.69 worlds
- and ridNAME falling through in MZX 2.70 and earlier worlds.
- + F6, F7, F8, and F11 debug/cheat keys only work in editing
- mode now (as things were prior to the port) You can still
- save/load in the editor so if you want all of these things
- you can play the game from the start there.
- + Space in the editor no longer deletes something of similar
- type that is beneath; not sure what the point of this was
- anyway.
- + Fixed bug causing cursor to clipped be out of bounds in SMZX
- char editor if changing to smaller multichar edit region.
- + Accidentally messed up screen centering in fullscreen for
- 32bpp mode, fixed.
- + Added hardware scaling option. You can now supply a window
- resolution besides 640x350 and allow for window resizing if
- hardware scaling is on; this will also scale fullscreen
- output to fill the entire screen. This can slow down
- rendering somewhat.
- + Fixed bug causing flip block to crash in the editor.
- + Made blocked directions relative to the player for put dir
- player.
- + Fixed bug where putting something to a direction relative the
- player overwriting the robot could crash MZX.
- + Fixed ability to input in input boxes by clicking on their
- question string.
- + Removed the bogus patch to Modplug and correctly fixed it in
- the build system.
- + Added 'debian' subdirectory for building Debian and Ubuntu
- upstream packages. Hopefully MegaZeux will be in the primary
- pool in a few months.
- + Added OS X xcode project files (see 'macosx.zip'). Fixed many
- bugs relating to endian that caused MegaZeux to be buggy on
- big-endian architectures (like PPC). Credit goes to Quantum P
- for finding these bugs and engineering high quality
- solutions.
- + Made 'directx' the default video render again on Windows.
- NOTE: This overrides the default SDL behaviour, but will not
- be applied if you set SDL_VIDEODRIVER yourself.
- + Repaired the 'linux-static' target so that it no longer
- includes a system C++ library, which caused unpredictable
- results on distros without a static version.
- + Fixed a locking bug with the audio code that caused hangs at
- startup on OS X. Also provided a mutex implementation using
- GNU pthreads as a temporary workaround for an SDL bug on the
- Linux platform.
- + Added PlayStation Portable (PSP) port. This code was written
- by Exophase and is highly experimental. It may not work at
- all for you. Please see docs/build.txt for more information
- regarding this port.
- + Fixed mouse movement from being affected by height_multiplier
- when not in fullscreen mode.
- + Fixed height_multiplier config.txt option allowing you to
- enter really stupid values (like negatives, 0, and values too
- large for the resolution).
- + Added in an extra video mode check to stop MZX from crashing
- on video modes that the video card can not reproduce.
- + Fixed Avalanche to a constant placement rate of 1/18 (this
- caused MZX to deliver an uneven number of boulders, and to
- crash with certain board sizes).
- + Fixed sprite collision box to stop MZX from crashing when
- stupid values are entered.
- + Fixed setting the viewport size to weird values like some old
- MZX games do.
- + Default fullscreen resolution is now 640x480; this can be
- changed in config.txt .
- + The config.txt option force_32bpp is now enabled by default.
- + Seeking with mod_position when using a .WAV file as
- background music fixed (thanks Mr_Alert).
- - Removed ability to change SMZX mode ingame (F11).
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- December 10, 2006 - MZX 2.81d
- NOTE: This release was made by Alistair Strachan (ajs) and not
- by Exophase. As such, any problems present in this
- release that were not present in 2.81c should be reported
- directly to ajs.
- + Fixed a compilation failure on Linux, due to SDL no longer
- depending on libX11. Now we manually link X11 into MZX if
- necessary.
- + Various build system improvements, fixing bugs in the
- prefixing of dependencies.
- + New libmodplug 0.8 imported, fixing many endian problems on
- big-endian machines, integrating all of our local patches to
- 0.7.
- + Fixed bug causing MZX to freeze when starting up on Win9x
- machines.
- + Fixed a warning generated by GCC 4.1.
- + Updated the GPL boilerplates project-wide to the newest FSF
- address.
- + Fixed a string range check causing an obscure crash in
- certain games.
- + Updated the build.txt documentation.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- December 14, 2005 - MZX 2.81c
- + Oops, accidentally broke shift + F2. Fixed that.
- + Also accidentally broke &+counter& for full hex
- representation. Fixed.
- + Fixed memory leak problem with playing certain WAVs in a
- loop.
- + Fixed inconsistency of bad viewport sizes behaving
- differently on current versions from old DOS versions.
- + Accidentally broke joystick stuff in config.txt (has to do
- with way configure options were being read), fixed.
- + Fixed bug causing crash when loading MZBs larger than the
- current board size.
- + Made cursor hidden in alt + V in editor.
- + String comparison failed with nulls in the strings, fixed.
- Also should be slightly more optimal.
- + Fixed bug when using negative numbers for
- if sprite_colliding "counter".
- + Fixed math operations (inc, dec, etc) not working on string
- indeces.
- + Added ability to force screen to 32bpp. Fixes some slight
- rendering issues, and if you have problems with fullscreen
- let me know if this helps (try it without first though). See
- force_32bpp in config.txt.
- + Fixed sprite clipping bug with respect to overlay.
- + Fixed bug where pressing enter on things besides robots,
- scrolls/signs, or sensors in the editor would clear whatever
- was underneath it.
- + Accidentally broke SFX with optional PC speaker chains
- (played both, should only play PC speaker when digital music
- is off, fixes Bernard the Bard).
- + Made last character in char selection for F3 and alt + C
- remembered (note that they're remembered in two different
- places for both).
- + Accidentally broke life animations, fixed.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- November 26, 2005 - MZX 2.81b
- + Fixed inability to make proper .savs of worlds with strings.
- (they'd crash when loaded..)
- + Fixed PC speaker audio bug causing a constant high pitched
- noise to be played instead of PC speaker audio sometimes.
- + Fixed some issues with long pathnames.
- + Fixed a bug causing Caverns to crash in recent versions (long
- story, it was most likely due to an error in ver1to2).
- + Now when you set mzx_speed in a game you can no longer change
- the speed from the F2 menu. Setting mzx_speed to 0 reallows
- this (and doesn't set the speed).
- + When loading a game its speed is now set to the speed MZX
- started with (whatever's in config.txt, or the default of 4).
- + Added backup_ext config.txt option to specify the extension
- of backup files (default is .mzx).
- + Fixed backup_interval for config.txt possibly being broken.
- + Fixed a bug messing up the death board on some old MZX games
- (like Nick Brick 2)
- + Escaped more things and made displays always in escaped form
- for certain character sequences. It should be impossible to
- type non-escaped forms. The following should be used:
- \0 for 0 (this probably won't work in strings, but in chars
- should)
- \t for tab (character 9)
- \n for newline (character 10)
- \r for carriage return (character 13)
- \" for double quote
- \\ for slash
- + Copy + paste on escaped character won't unescape them
- anymore.
- + Fixed error message for invalid lines in Robotic.
- + Fixed inability to import text files from other directories.
- + Huge overhaul of the source (proper types for things,
- directions, equalities, conditions, chest items, and
- potions), if anything is suddenly broken now let me know.
- + Made scrolls/signs only display text (letters, numbers, etc).
- in the default char set. That should be enough for now.
- + Added mousewheel support for robot editor and robot box
- display.
- + Fixed inability to load MZMs from other directories in the
- editor.
- + Wrapped audio stuff in proper mutex, hopefully this fixes
- some issues (like crashing when changing mod_frequency a
- lot).
- + Long current directory paths no longer write out too much in
- the file loader (instead the last bit is shown with a ...
- prefixing the beginning)
- + Decided to be nice and make board_scan not crash. Don't use
- it. It's only there to make one legacy game work. If you use
- it I will personally scold you. And don't tell other people
- to use it (that means you CJA). Use
- copy block x y w h "$str" t
- instead. If you don't know what that means read the help
- file, it explains everything.
- + Removed ability to copy + paste after changing board
- dimensions of the source under any circumstances (alt + R,
- alt + Z, import world, import board).
- + Fixed appearance of ghosts in F10 menu.
- + Prevented char editor from counting moving the cursor as an
- undo step if nothing was actually drawn.
- + Made pressing escape on initial char selection/board
- selection/param selection for things cause it to cancel
- placing anything.
- + Made it impossible to set board width/height to 0 again
- (oops).
- + Made starting lives and starting health take effect
- immediately for the first alt + t.
- + Added ability to play OGG from alt + l (but not the other
- mods, don't want to clutter that up).
- + Made it so if no note follows an embedded SAM in a play
- string it's played at native frequency.
- + Accidentally made loading worlds in the editor not change the
- current directory, fixed that.
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- November 20, 2005 - MZX 2.81
- + Fixed a bug where MZX world/save names > 12 chars could cause
- weird things to happen (like doors breaking).
- + Fixed problems with help file/charsets loading when loading
- MZX outside of the directory MZX is in. This should fix file
- associations on Windows as well.
- + Changed board selector so when board 0 is "(no board)" it
- doesn't actually refer to the title but to no board.
- + Made import world not overwrite the title string.
- + Fixed bug that causes crash when trying to flood fill an area
- with the color it already is in the SMZX char editor.
- + Redid audio engine. Everything is unified now, meaning that
- anything you can use as a mod you can use as a sam and
- vice-versa.
- + The new audio engine uses its own master resampler that has
- three interpolation modes - see config.txt for more
- information.
- + sam 0 filename will play a file at its native frequency (note
- that SAMs that have been converted from WAVs are set to be
- played at 8363Hz).
- + Added support for OGG vorbis audio files.
- + Fixed bug causing SFX volume control in F2 menu to not work.
- + Removed limitation on number of SAMs that can be played
- simultaneously.
- + Fixed bug where the mouse got "stuck" in the black border
- edges of non 640x350 fullscreen resolutions.
- + Fixed issues with message boxes being part default palette
- part current palette, they now always use the current
- palette.
- + Added mod_position counter. What these actually set/return is
- dependant on the type of file loaded. Modules use the current
- row, OGGs use the current PCM sample.
- + Added mod_frequency counter. There are a few things to note
- here: Modules have a "nominal" frequency of 44.1KHz. Other
- data types have their own nominal frequency to prevent output
- from sounding differently depending on the audio_sample_rate
- in config.txt. For OGGs and WAVs the nominal frequency is the
- one the file is encoded at. Changing the frequency can cause
- a noticeable one time popping sound, so it might not be
- desirable to slide it. This is much more prominent with
- lowering the frequency than raising it. This value is capped
- so it can't reach below 16.
- + Changed alt + L to play back at natural frequency instead of
- 8363Hz.
- + Fixed bug causing sensor deletion while the player is on top
- to destroy the player.
- + Fixed bug causing imported boards to possibly crash after
- being tested.
- + Fixed bug causing save_game and save_world to not work if a
- file with the given name isn't already present.
- + Changed function counter matching removing restriction on
- number of digits for parameters. 10+ digit inputs should no
- longer fail (for instance, abs-123456789)
- + Made counter/string names internally variable length instead
- of a fixed 14 chars. There is now no longer a name length
- limitation.
- + Changed alt+8 for mod * to just * in the hotkey listing.
- + Fixed crash when referencing (by param) sprites > 256.
- + The string system has been redone. Strings are now
- dynamically sized and don't have an artificial maximum
- length. Writing to string.N will guarantee that the size of
- the string becomes at least N, while reading in this way will
- return 0 if out of bounds to maintain the illusion of null
- termination. Be careful when using this.
- + $str.length returns the length of string $str (this is faster
- than iterating through it to find when chars hit 0).
- + Vlayer is dynamically sized. The vlayer_width/vlayer_height
- counters still work as per usual, but the vlayer_size counter
- has been added to adjust the maximum size. The default is
- 32768.
- + Fixed bug not allowing things to move over goop.
- + Fixed bugs causing current directory to be changed when
- importing things from other directories.
- + Properly implemented support for volume "string".
- + Fixed a few commands not working when they should from the
- global robot (such as put to dir of player).
- + Fixed a bug where going to a label at the end of a robot
- would treat it as if it's the first of its name in a sequence
- of labels.
- + Fixed a bug involving moving the a block with the player not
- moving what was underneath the player.
- + New help file, thanks MUCHLY to Terryn for pulling off this
- enormous effort! (This is what you're reading from.)
- - Save files from 2.80 are not compatible due to several
- changes in the save format.
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <a class="helplink" href="#284CLOG.HLP__284">New in Versions 2.84 to 2.84c</a>
- <a class="helplink" href="#2823CLOG.HLP__283">New in Versions 2.82 to 2.83</a>
- <a class="helplink" href="#280CLOG.HLP__280">New in Versions 2.80 to 2.80h</a>
- <a class="helplink" href="#OLDERVER.HLP__260">New in Versions 2.60 to 2.70</a>
- <a class="helplink" href="#OLDESVER.HLP__201">New in Versions 2.01 to 2.60</a>
- <a class="helplink" href="#NEWIN200.HLP__1st">New in Version 2.00</a>
- <a class="helplink" href="#ANCENVER.HLP__1xx">New in Versions Through 1.03</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="280CLOG.HLP">
- <a class="helpanchor" name="280CLOG.HLP__280"> </a>
- <p class="helpcentered"><span class="f9 ">New in Versions 2.80 to 2.80h</span></p>
- June 6, 2005 - MZX 2.80h
- + Fixed a bug which could cause crashes when quitting the game.
- + Fixed some bugs when changing boards and other things that
- can cause duplicate players.. I think.
- + Fixed a bug that could cause crashes when adding boards.
- + Improved response time in editor for slower computers/high
- load situations.
- + Fixed some endian issues with the GUI.
- + Fixed some crash when moving the mouse cursor around in the
- editor.
- + Fixed bug where you if you had a robot whose name is the same
- as the global robot it wouldn't get messages (fixes yoyo in
- Weirdness).
- + Fixed debug box not moving with text input.
- + Fixed bug with duplicate player appearing when killed and a
- new one can't be put at 0, 0.
- + Added copy/paste for outside of MZX to/from the robot editor.
- It only works in Windows and X11, and functionality may be
- limited in X11 right now (currently seems to work in native
- X11 apps and GTK 2.6 apps but not earlier GTK or QT, also try
- shift + insert to paste).
- + Fixed bug in resizing involving overlay blanking.
- + Fixed clear messages/projectiles not working (and damaging
- the game instead).
- + Fixed behavior of P key in editor for wildweasel.
- + Fixed random in Robotic not correctly swapping the range if
- they're given in the wrong order.
- + Fixed clip length in [ messages.
- + Fixed crash when changing volume without a game loaded.
- + Redid internal GUI system, fixes some minor things.
- + New file loading/saving window - press del to delete a
- file/dir, alt + n to create a new directory, alt + r to
- rename a file/dir.
- + Added PC speaker volume control to F2 settings and
- config.txt.
- + Fixed yet another crash bug with resizing boards.
- + Fixed inability to type * in text placement in the editor
- (although this adds inability to turn on mod * while F2 is
- on...).
- + Added ctrl + n in the editor to load a module for listening
- only (won't set the current board's module, and will let you
- choose ones from different directories).
- + Fixed crash on macros with more variables than can be
- displayed in their configuration.
- + Fixed bug that causes char selection cursor to reset to 0 on
- unhandled keys (and continuously do so for lock keys).
- + Tweaked ctrl + dir in text entry boxes.
- + Added gdm2s3m in-tree to the contrib/ directory. gdm2s3m no
- longer needs to be installed on the system before compiling
- mzx.
- + Improved the build system to automatically build .c and .cpp
- files with compound system CFLAGS/CXXFLAGS, respectively.
- + Made package.sh automatically ship the source package with a
- Makefile.dist to warn the user that they need to run
- config.sh before 'make'.
- + Rectified inconsistency in source copyrights.
- + Added multi-character editor. Select multiple keys in the
- character selection with shift. The char editor also now has
- the ability to perform operations (delete, copy, scroll, etc)
- on subblocks. Hold down shift or press alt + b to highlight a
- region (press escape to remove the latter). Blocks copied
- like this will be pasted to where the cursor is at. Other
- small things in chareditor tweaked/changed... No longer press
- tab to toggle through set/clear/toggle draw modes, instead
- tab for set mode and shift + tab for clear (no more toggle).
- Mouse behavior is modified as well. In non-SMZX left click
- sets, right click clears. Shift + F2 will cut a block (clear
- + copy).
- alt + x/alt + i can now be used to import/export partial
- charsets while in the char editor. You can do so for several
- in series: put a # in the name of the charset then set the
- First for the first number # will be replaced with and the
- Count value to indicate how many in series to work with. For
- instance, saving s#.chr with first = 0, count = 3, starting
- at offset 100, with a 2x2 char selection will save charsets
- s0.chr from 100, s1.chr from 104, s2.chr from 108, and
- s3.chr from 112.
- *** NOTE *** Series import/export will only work correctly
- with char selections that are one in height (they can still
- be split up another way in the editor itself). If you want to
- use partial charsets on your edits, it's important that you
- select all the chars in a row.
- + Made characters for the editor/GUI use another charset that's
- protected. Please notify me if any characters are incorrect.
- Modify mzx_edit.chr to change this charset. The same thing
- goes for colors. It doesn't work for SMZX, which also might
- look a bit different in the editor...
- + Added option (defaults on) to protect chars 32-127 in input
- boxes and strings in the robot editor.
- + Mouse warping goes to middle instead of top corner now, so
- there isn't a bias towards moving up.
- + Hopefully fixed another bug with the cursor and changing
- boards...
- + Fixed module looping problem in modplug...
- + Added libmodplug 0.7 with both patches (see contrib/)
- in-tree. Removes system dependency on libmodplug.
- + Made auto-backup on by default. (3 count)
- + Made if touching idle, beneath always false instead of like
- nodir.
- + Fixed bug that caused bad things to happen if you pressed too
- many different keys too rapidly.
- + Made mouse wheel emulate up/down in dialog boxes and list
- menu.
- + Added ctrl + backspace to intake (delete previous word).
- + Made modulo operator use floored instead of truncated mod
- (uses positive remainder instead of negative).
- + Fixed crash when testing after using ctrl + z to clear a
- board.
- + Fixed bug where sending other robots to subroutines caused
- the return address to be to the next instruction like local
- subroutine calling works.
- + Fixed bug where going to a label on the last line of the
- robot could screw the game up.
- + Fixed a bug where the editor froze if you tried to fill the
- board with players. (eheh...)
- + Fixed a bug that could cause crashes when sending all sensors
- something.
- + Fixed some crashes when exporting/saving fails.
- + Fixed import world's ability to go over the board limit and
- cause crashes.
- + Allowed input of decimal numbers for params.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- April 1, 2005 - MZX 2.80g
- + Fixed crash on alt + x in robot editor.
- + Fixed missing line on alt + h in robot editor.
- + Introduced incorrect enter action in robot editor (didn't
- reset to beginning of the line), fixed.
- + Fixed garbage appearing when moving from a larger to smaller
- board and being outside of that board's scroll region.
- + Fixed bug that could cause glitches/crashing when resizing
- the board.
- + Fixed error with global next option not retaining the three
- checkmark options correctly.
- + Added work around so that move block moves the player (won't
- move it on inter-board moves).
- + Fixed bad palette loading for Linux introduced in 2.80e or f
- or something
- + Made it so block highlighting doesn't highlight the debug
- window.
- + Made the debug window move if necessary when home/end is
- pressed.
- + Added autorepeat buffering so previous keys can be resumed.
- + Fixed bug with swap world possibly not working (crashing??)
- off Windows.
- + Fixed more problems with garbage/crashes when resizing with
- the cursor in a position causing the scroll to go off the
- edge.
- + Fixed incorrect text cursor offset with
- force_height_multiplier on.
- + Redid way directories are loaded internally so you can load
- dirs with over 4096 entries now. Might be faster (unsure)
- + Chest contents list menu looked funny, fixed.
- + Changed default.spl to smzx.pal so you can load it more
- sanely.
- + Export block wasn't getting the last selected line. Fixed.
- + Hacked scroll editor so it wouldn't crash when removing
- lines. Scroll code either needs to be 100% overhauled or
- replaced by robots somehow...
- + Fixed config files not being closed.
- + Added include file option for config files. Use it like this:
- include "config file"; e.g., "include subconfig.cnf" will
- load subconfig.cnf's options.
- + Fixed freadN not terminating strings.
- + Fixed graphical glitch when using the mouse in the char
- selector.
- + Fixed save games crashing when they can't load fopened files.
- + Fixed some other problems with save games and fopened files.
- + Accidentally had title screen running a bit slow...
- + Value strings starting with ( not parsed as an expression if
- they don't end with the ).
- + Fixed problem with key_code being triggered for keys that
- aren't in-game.
- + Added extended macros. This allows for parameter based macros
- to be entered in the robot editor via a window or by command.
- See macro.txt for more information.
- + Fixed player cloning after flip/mirror and player placing.
- + Added random seeding that was mysteriously missing...
- + Finally added drive changing for Windows builds.
- + Fixed mousex/mousey for resolutions other than 640x350 (only
- applies to fullscreen).
- + Fixed crash on weird invalid death/endgame boards...
- + % and & messages clip correctly now.
- + Fixed potential crash on double closing the files.
- + Fixed crash bugs with placing sensors and maybe scrolls.
- + Fixed sending sensors when you have robots of the same name
- (fixes Weirdness chapter 1).
- - Removed the unimplemented if player dir and if not player dir
- commands from RASM.
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- December 26, 2004 - MZX 2.80f
- + Fixed a bug that could cause crashes when auto-quoting params
- in the robot editor (eg, set x 1 -> set "x" to 1).
- + Fixed a bug that could crash the robot editor if you added a
- new line prior to the first line of a marked block, then did
- an action on it.
- + Fixed a bug where clearing the first and only line could
- cause it to appear as if it hadn't been cleared at all.
- + Unified global and global next parameter setting so that
- nothing is lost between first/next but information can be
- cancelled without application.
- + Fixed E/S block markers appearing in the robot editor when
- they should be off the screen.
- + Left click position in robot editor mysteriously disappeared
- after having been added somewhere after 2.80d. Re-added.
- + Added option to hide the hotkeys help and horizontal border
- in the robot editor with alt + h. Also added a config.txt
- option to have it default this way.
- + Search/replace in the robot editor. ctrl + f to find or
- replace/replace all, ctrl + r to repeat either search or
- replace (depending the last one you did, if you cancelled
- this does nothing).
- + The load_game counter sequence was broken; fixed.
- + Hopefully fixed all means of overrunning the current line max
- length in the robot editor...
- + Fixed robot editor validation not showing every 13th line.
- + Fixed aesthetic problem with validation report...
- + Fixed crash with setting message column less than 0.
- + A couple things added for 2.80e mysteriously disappeared in
- source handling. Re-added.
- + Changed max board size prevention to auto resize the lower
- dimension to the max that can be handled with the higher
- (ex, 30000x25000 becomes 30000x559).
- + Added flood fill to char editors (alt + f).
- + Added single depth undo to char editors (alt + u).
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- December 19, 2004 - MZX 2.80e
- + Fixed a bug causing problems with static overlay if a
- non-overlaid sprite is displayed so it's clipped off the edge
- of the screen.
- + Fixed a bug in the display of c?x color boxes in the F2 menu
- in the robot editor.
- + Fixed a bug that caused incorrect thisx/thisy for one cycle
- after copyblock.
- + Fixed a bug preventing calls to nonexistent subroutines from
- passing that point in the robot.
- + Fixed crash on sam 0 "file".
- + Fixed a bug where loading new SFX may not correctly overwrite
- previous ones.
- + Fixed a bug where you could only load/unload so many mods
- before MZX couldn't load anymore.. same bug as the SAMs but
- went unnoticed!
- + Fixed a bug that caused you to be infinitely stuck in the
- global settings dialog box when you press previous on the
- next page.
- + Fixed a bug where going to next then exiting would not save
- the changes from the previous page.
- + Fixed a bug that could cause crashes while ending modules.
- + Fixed a bug that could do the same kind of thing with sams.
- + Fixed an allocation bug when loading MZX worlds that could
- lead to crashes.
- + Fixed a bug that caused MZX to crash if you interpolated an
- expression with a value equal to or greater than 1 billion.
- + Fixed a bug where mixing ccheck1/2 with sprites from board
- and vlayer could cause problems (that's the short version of
- the explanation, I'll spare you the long one).
- + Fixed a bug that could cause certain old MZX games to crash
- after the title screen
- + Somewhere broke missiles between 2.80c and 2.80d. Fixed.
- + Fixed error in lit bomb anim sequence setup in char ID
- editor.
- + Reworked a lot of robot editor code; adding/deleting lines
- while marked areas are active should work more naturally now
- and it's hopefully no longer possible to crash it in the same
- ways it was previously.
- + Fixed crash when setting mesg row to less than 0.
- + Fixed mouse presses not working in the robot editor.
- + Made MZX ignore alt + tab so you can safely switch in your WM
- without it triggering...
- + Added numerical key entry for number boxes. Use 0-9 to add to
- the most significant digit and backspace to take it away.
- + Added config.txt option to make MZX pause when key focus is
- lost (when clicking on another window, perhaps) or when it's
- minimized. Music will still continue.
- + Added save/load position to the editor. Works for loads
- in between boards as well. Press ctrl + num to save to slots
- 0 through 9 and alt + num to load from that slot. Please
- press shift + 8 or the numpad * key instead of alt + 8 to set
- mod wildcard.
- + Fixed a further bug that could cause playing samples to
- crash.
- + Added config file option to revert the robot editor to the
- default palette when loaded.
- + Fixed bug in shoot command.
- + Fixed error when making save name in editor but cancelling.
- + Auto-backup - see config.txt for details.
- + Joystick key mapping - see config.txt for details.
- + You can now load game-specific config files by creating
- game.cnf for the corresponding game.cnf (for instance,
- caverns.cnf). This is mainly useful for joystick key mapping.
- Note that these settings will NOT go away if another game is
- loaded that doesn't have a .cnf.
- + Alt+enter finally works as block action in the robot editor.
- + Loading a .mzx/.sav from another directory indirectly (via
- command-line or robotic) will now actually change the current
- working directory.
- + Fixed bug that crashed MZX with ctrl + i in the robot editor.
- - Fixed maximum board size to about 16.7 million tiles (128MB)
- for now.
- - MZX now ignores the mouse scroll wheel instead of
- interpreting it as a click.
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- October 9, 2004 - MZX 2.80d
- + Fixed cursor going invisible when escaping from import in the
- editor.
- + Fixed robot editor entry when pressing OK on global info.
- + Fixed lack of name for MZB import/export (any MZB's exported
- in prior beta versions still won't have a name).
- + Fixed some problems with setting the mouse position.
- + Fixed problem with exits not bringing you all the way to the
- edge if width over 400 or height over 200.
- + Fixed bug that cleared too much when increasing both width
- and height while resizing the board.
- + Fixed problem with 1 char shortcut commands with spaces
- immediately after them.
- + Fixed problems with load_robot and load_bc (caused crashes
- and infinite loops).
- + Optimized RASM heavily (this should be most noticeable when
- doing a lot of external robot loading from text files).
- + Fixed inability to use absolute paths in loading a game from
- command line.
- + Fixed lastshot/lasttouch conditions with directions not
- working.
- + Fixed char editor in robots not going into SMZX mode when
- proper.
- + Cleaned up source code so it passes -Wall without complaint
- and in the process corrected some glaring code errors that
- may have corrected random problems.
- + File opening broken in 2.80c, fixed.
- + Implemented MZM2 saving and loading and rewrote mzm.cpp (if
- anything is changed or fixed regarding MZMs, attribute it to
- this). MZM2s can be of larger dimensions, smaller filesize
- for same amount of data, and can store robots.
- + Fixed bug that could cause MZX to crash when making new
- strings.
- + Block operations to overlay when overlay was off caused
- crashes - fixed.
- + Fixed a problem with sprite ccheck2 against other sprites.
- + Optimized function counter lookups a bit; speed gain for all
- counter accesses (especially ones that begin with certain
- characters such as _).
- + Fixed disassembly error with ' ' character.
- + Fixed assembly error where condition extended dir (such as
- blocked opp seek) was not getting compiled with the dir
- extension.
- + Fixed editor bug where the param was not being cleared when
- overwriting things by double placement.
- + Fixed inability to use counters with
- playercolor/bulletcolor/missilecolor.
- + Added ability to use counters in place of p?? in the robot
- editor. Note - even though this expands functionality of the
- editor this does not require a version number change because
- the worlds will still be playable in older MZX versions (and
- will display correctly in the robot editor - you simply won't
- be able to correctly edit the commands).
- + Mouse correctly limited to screen edges now.
- + Fixed inability to overwrite robots with pushable robots and
- vice-versa, as well as scrolls with signs and vice-versa.
- + Possibly fixed problem with windowing error when editing
- global robot (?).
- + Fixed disappearing cursor after color selection box with
- mouse (and other places?).
- + Fixed bug in sprite clipping that caused some to be clipped
- off inappropriately.
- + Made board_id/board_param counters readable.
- + Added bound checks for all counters using
- board_x/board_y/overlay_x/overlay_y.
- + Fixed potential direction corruption bug causing directions
- not to work sometimes even if they display correctly in the
- robot editor.
- + Fixed copy overlay to MZM copying to overlay too.
- + Fixed a bug where debug window could display the wrong amount
- of robot mem and potentially even crash MZX.
- + Fixed help_menu counter not doing anything (durr).
- + Changed sprite draw order so they're drawn underneath the
- message bar, debug box, and time remaining display.
- + Changed put p?? in Robotic so it will put default params if
- available.
- + Fixed a bug that could cause copies from overlay to vlayer to
- not end up at the correct destination.
- + Fixed a bug where c?x and cx? would not display correctly in
- the robot editor.
- + Optimized copy blocks a bit using variable length arrays
- instead of malloc.
- - Removed ability to put robots, scrolls/signs, and sensors
- (with the put command in Robotic).
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- August 16, 2004 - MZX 2.80c
- + Fixed issues with the commands counter not being reset.
- + Color intensity now gets reset when you enter the editor
- + SAMs got cut off sometimes now.. fixed.
- + Fixed bug where loading a world with empty boards could
- change the starting, endgame, and death boards.
- + Fixed bug where you could text enter off the bottom of the
- board, causing problems.
- + Fixed bug involving cutting/clearing the entire robot in the
- robot editor while not at the first line.
- + Fixed robot name entry for global robot not disappearing on
- small boards.
- + Fixed bug where you could duplicate the player by holding
- down a direction as a saved game loads.
- + Fixed bug where you could go to line 0 in the robot editor.
- + Saving an MZM now auto-adds the .mzm extension...
- + Fixed black screen on quicksave.
- + Fixed bug where opening a file didn't close the old one if
- one was open (so it'd eventually crash MZX).
- + Changed Alt+backspace behavior in intake so it doesn't exit.
- + Added clipping for refx/refy/width/height for sprites (less
- than 0 at initialization, greater than board width/height at
- draw).
- + Fixed direction parsing for move all.
- + Fixed bug where creating things on top of the player would
- use a slot for robots/scrolls/signs/sensors instead of just
- copy to the buffer.
- + Added ability to use chars as immediates in Robotic commands
- (ie, set "$str.0" 'a').
- + Added options to enable oversampling and specify resampling
- mode in the config file (higher quality audio).
- + Building with patched modplug that fixes loading 2-channel
- mods outputted by FT2. If you're building yourself, see
- build.txt.
- + Fixed inability to mouse click in alt + h mode.
- + Fixed ability to mouse click outside of board range.
- + Should work better for Linux users; case insensitivity for
- file opens has been added.
- + Fixed close bug that was affecting Linux builds (may affect
- more).
- + Keypad enter works where normal enter works now.
- + Fixed disappearing cursor when cancelling out of abandon
- changes box when loading a new world in the editor.
- + Fixed problems when loading/saving robots outside of ID range
- (do not hardcode ID's people).
- + Fixed problem with NO BOARD exits being set to something else
- when empty boards were being stripped or when worlds were
- being imported.
- + Fixed bug where auto-decrypting worlds didn't work if the XOR
- value was negative.
- + Fixed problem with rid not working the first cycle.
- + Fixed inability to interpolate (with &&'s) counter names
- larger than 14.
- + Added new robot mem counter in debug box (only kb precise,
- rounds up).
- + Fixed ability to clone the player on non-title board after
- testing.
- + Lengthened size of mod name buffers.
- + Fixed bug where send x y doesn't work from the global robot.
- + Fixed a few bugs that could cause MZX to crash.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- August 11, 2004 - MZX 2.80b
- + Made it possible for robots to move through teleporters.
- + Fixed bug with pressing shift in text entry boxes.
- + Made it so alt + tab does not switch draw modes in editor.
- + Fixed a disassembly error for color intensity N percent
- command.
- + Fixed problem with looping on mods that do not loop
- explicitly.
- + Fixed alt + dir scrolling in the char editor.
- + Fixed not being able to click the rightmost char in the char
- editor.
- + Re-added unmark (alt + u) to robot editor (mysteriously
- disappeared??).
- + Fixed key label so it returns proper unicode values.
- + The player and pushable robots can now be pushed by the push
- command.
- + Fixed bug where you could clone the player by switching
- boards.
- + Fixed bug where you could either turn off overlay or switch
- to boards that don't have it while in overlay edit mode...
- + Fixed bug where remains of debug window would not be cleared
- in editor if the board width is too small.
- + Fixed bug where turning off the menu with a board too small
- would mess things up.
- + Fixed bug where run lengths were saved one too large... this
- could fix stability problems in at least occasional cases
- (with saved worlds or save games, at least).
- + Fixed placing solid things beneath robots (like bombs).
- + Added support for a keyboard plus in the char editors.
- + Fixed previous button in SFX editor.
- + Made robot name box disappear when robot char box comes up...
- + Fixed bug where mods restart after pressing P if they're the
- same mod as what was playing before.
- + Fixed problem with changing params (with P) in the editor.
- + Fixed bug where null boards were not being pruned from old
- worlds upon load.
- + Made file name saving box larger (for saving games and
- worlds).
- + Fixed bug where default (100%) palette intensity values would
- not be applied to the palette a game loads with.
- + Fixed bug where exporting char sets that are full size caused
- a 0 byte charset to be exported (8bit wraparound).
- + Added support for forms such as :line.
- + Fixed sporadic incompletion of strings without trailing
- quotes at the end of the line.
- + Fixed bug where clearing/cutting the last line of a robot
- crashed MZX.
- + F4 in robot editor now works more generally.
- + Made line numbers in robot editor error report start at 1.
- + Added ctrl + G to go to a line in the robot editor (ala
- nano).
- + Made it possible to change a robot's color in the editor
- + Fixed bug where spitfire, seekers, and missiles didn't hurt
- something immediate adjacent to whatever shot it.
- + Fixed editing of spitfires.
- + Made default speed 4 again (5, bleh).
- + Re-added quicksave/quickload.
- + Re-added F8 clear (always works - be careful).
- + Fixed autorepeat problems for spacepressed/delpressed.
- + Wrapped around sprite values so LogiCow's bad code would work
- (HTMCIAB).
- + Cleared block commands in between board changing and other
- things like that.
- + Fixed bug where MZX would crash if put dir player overwrote
- the robot doing it.
- + Fixed bug where playing SAMs would eventually crash MZX
- + Fixed some mod * problems (hopefully?).
- + Fixed bug where pasting blocks over the edge of the board in
- the editor would cause MZX to crash.
- + Uses new GDM2S3M source that fixes some bugs. If your
- converted GDM's have problems, delete the S3Ms it generated.
- - Removed export text in the board editor. Don't think anyone
- wanted it...
-
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- August 9, 2004 - First release, MZX 2.80 BETA
- + All ASM files have been rewritten to ANSI C compliant C++;
- this mainly involves the mammoth game2.asm.
- + Everything graphics related has been replaced with an SDL
- driven engine, including text mode rendering (also capable of
- rendering SMZX modes).
- + All keyboard and mouse events are now also handled by an SDL
- driven engine. All internal keyboard/mouse routines use SDL
- keycodes; no attempt was made to convert to MZX's old format
- at this level.
- + All world/board/robot loading and saving code has been
- entirely rewritten and is more modular now.
- + All robot handling code has been rewritten from scratch, and
- is more sane/efficient now (allocation, message sending,
- sensors, etc.)
- + All counter handling code has also been rewritten from
- scratch. This includes the functionality of builtin and
- "function" counters. It also includes a new string framework.
- + The robot interpreter has been almost entirely rewritten.
- + The main game playing code (game.cpp) has been almost
- entirely rewritten.
- + All module/sample playing code has been rewritten to use
- modplug and SDL. PC speaker effects are emulated.
- + The main part of the editor (edit.cpp) has been almost
- entirely rewritten.
- + The robot editor has been entirely rewritten, utilizing a
- modified (fixed) version of RASM (released by me over a year
- ago)
- + All other source files (for instance, window handling code,
- scroll displaying, char editor, etc.) have been largely
- overhauled, some to more of a degree than others. At the
- very least, everything has been reformatted and made to work
- with the new systems.
- + key_pressed and key_code now return unsigned chars instead of
- signed, so if the game checks for negative values, it won't
- work. The same goes for reading back characters for strings.
- + Boards may now be as large as 32767x32767. Please do not make
- boards this large. :)
- + You may now have up to 250 boards.
- + Boards may have up to 255 robots, 255 scrolls, and 255
- sensors.
- + There is no robot memory per board limit. However, individual
- robots may only be up to 64k large. If you include the global
- robot, this means that you effectively can have up to 16MB of
- robot memory per board.
- + The same applies to scrolls, which have separate memory
- spaces and may only be up to 64k in length each (so you could
- have almost 16MB of scroll text per board, but who would want
- that??).
- + The robot stack need not be initialized, and will be
- dynamically resized as necessary (useful for recursion). This
- refers to lines such as
- . "#*-1-2-3-4-5-6-7-8"
- at the beginning of robots. They're no longer necessary or
- useful (they will be ignored, like any other comment).
- + You may have a virtually unlimited number of counters active.
- The theoretical limit is some 4 billion. The effective limit
- depends on memory available.
- + The same goes for strings, which may now have any name, so
- long as it begins with a dollar sign ($). The same
- conventions regarding strings in 2.68+ still apply (see
- 268_info.txt for more information).
- + Local2 and local3 no longer have dangerous side-effects.
- Local4 through local32 are also available per-robot now.
- + The following are now natively supported: XM, S3M, MOD, MED,
- MTM, STM, IT, 669, ULT, WAV, DSM, FAR, AMS, MDL, OKT, DMF,
- PTM, DBM, AMF, MT2, PSM, J2B, and UMX.
- + You can now perform repeated copies by selecting "Copy
- (repeated)" from the block command window. This will cause
- you to repeat the copy indefinitely until you press escape.
- Also, after the first paste is made, you may press ctrl +
- direction to move in steps that are the size of the copy (you
- really have to try it to get a good idea of what I mean).
- + Press alt + H to hide/unhide the menu/information occupying
- the bottom 6 lines of the screen.
- + Right click is similar to pressing insert (grabs whatever's
- under the cursor).
- + Exporting char sets now gives direct options to set the
- size/offset for partial charsets. The old format (prefixing
- the name) will not work.
- + For saving files, you may make filenames larger and use mixed
- case (as opposed to all caps).
- + Now when you import worlds their exits will actually work.
- + Loading worlds results in all empty boards and empty
- robots/scrolls/sensors within the boards being removed. When
- you delete a board, you won't be presented with a gap in the
- board list anymore.
- + You may once again select ASCII as a default charset and
- revert to it in the char editor. You may also select a
- default SMZX charset.
- + Anywhere you can enter a line of text you can now press ctrl
- + left and ctrl + right to go to the previous/next word.
- + This isn't totally limited to the editor, but now everywhere
- a selection box shows up (such as for files, boards, items)
- you can press multiple keys to seek to a specific entry.
- Furthermore, in file selection boxes you can press backspace
- to go up a directory.
- + The SMZX char editor has been changed quite a bit. First, to
- use, you must be in SMZX modes 1-3 (toggle using F11). Within
- the editor, press keys 1 through 4 to change the "current
- color." You can place this color with space, and you can
- toggle repeated placement on/off using tab (sorry, no
- clear/toggle in this mode, they got in the way far more than
- they helped). You now move in increments of 1 char naturally
- instead of "half chars." Right click grabs the current
- "color" underneath the cursor.
- + You are now able to type invalid code within a robotic line.
- You will see that it's invalid due to the way the line is
- color coded. If you try to escape while any lines are invalid
- or if you press alt + V, a window will be brought up
- describing the nature of all erroneous lines. It will also
- let you mark each line to be deleted or commented out on
- exit. If all invalid lines are marked with anything besides
- ignore, you can exit safely. You may also mark invalid lines
- using ctrl + I, D, and C (to mark as ignore, delete, and
- comment respectively). ctrl + C may also be used to comment
- out a normal line, and then uncomment.
- + alt + O is still available, but you may only change macros
- here (see the config file for the other rarely used options).
- This does give you more room to modify macros, though. They
- may be up to 64 characters in length, and you may set up to
- around 45 or so in this window. (To get larger, you'll have
- to use the config file.).
- + Command line params have changed.
- + MegaZeux configuration information is now stored in a file
- called config.txt.
- - There are some slight discrepancies in robot size; if you
- highlight the last line then leave it, it will register as a
- compilation of that line. Yet, when you exit, the line will
- be discarded, so this addition is not permanent. This
- shouldn't be problematic.
- - alt + enter and alt + escape no longer work; use the
- alternatives (alt + b and alt + u).
- - You cannot click on help options to make it happen (for
- instance, you can't click on L:Load and expect it to bring up
- the load window).
- - You cannot import or export ANS files. Use MZM instead.
- - Some things that worked in the DOS version only worked due to
- chance, such as there being default (but valid) values for
- sprite widths or heights and thus sprites could be displayed
- before new values were set. They will not work here.
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <a class="helplink" href="#284CLOG.HLP__284">New in Versions 2.84 to 2.84c</a>
- <a class="helplink" href="#2823CLOG.HLP__283">New in Versions 2.82 to 2.83</a>
- <a class="helplink" href="#281CLOG.HLP__281">New in Versions 2.81 to 2.81h</a>
- <a class="helplink" href="#OLDERVER.HLP__260">New in Versions 2.60 to 2.70</a>
- <a class="helplink" href="#OLDESVER.HLP__201">New in Versions 2.01 to 2.60</a>
- <a class="helplink" href="#NEWIN200.HLP__1st">New in Version 2.00</a>
- <a class="helplink" href="#ANCENVER.HLP__1xx">New in Versions Through 1.03</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="OLDERVER.HLP">
- <a class="helpanchor" name="OLDERVER.HLP__260"> </a>
- <p class="helpcentered"><span class="f9 ">New in Versions 2.60 to 2.70</span></p>
- **NEW in 2.70***
- + Robotic code now loadable and savable to files, either to
- text files or compact but human-unreadable bytecode files.
- Other robots' code can be written to or read as well.
- + Defaults changed to more accepted values.
- + The swap world bug should be fixed. You should now be able to
- swap worlds back and forth with no trouble.
- + "atan" now works with any input/output value.
- + The "load_game" command now should work without any problems.
- + It should now be easier to compile MZX from the source.
- + It's not really a bug fix, but the palette is now returned to
- its original colors.
- + Robots can now 'put' things underneath themselves: eg. put
- c04 carpet p?? under.
- + The title screen menu now works: e.g. the menu you get when
- pressing 'Enter' on the title screen.
- + "key_pressed" now returns the twos-complement of the key
- value, i.e. the one used for :key?
- + The mouse can scroll across the whole screen after a screen
- refresh / transition to/from SMZX mode.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- **NEW in 2.69c***
- + Sprite limit expanded from 64 to 256.
- + New sprite flag added: sprN_ccheck mode 2.
- + Vlayer added. This is a virtual, unseen layer 32767 in size
- used to store graphical data.
- + World loading and saving through Robotic now possible.
- + Special class fwrite_modify; this allows editing of a file as
- opposed to overwriting.
- + File end seeking added.
- + Char file offsetting added.
- + File seeking added to editor.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- ***NEW in 2.69b***
- + Fixed the fwrite_append problem RoSS mentioned.
- + Fixed the string problem Nanobot mentioned.
- + Added ridNAME as an alternative to robot_id_NAME.
- + Added mouse_mx and mouse_my to determine mouse motion in
- "mickey" units.
- + Added two local counters "local2" and "local3", local2 uses
- walk_dir and is_locked (so walking and locking will affect
- it), local3 uses last_shot_dir and last_touch_dir (so
- shooting and being touched will affect it).
- + Added the builtin string "robot_name" to determine the name
- of the robot invoking it.
- + Reverted back to BWSB 1.20a again, in the hopes that it will
- alleviate swap world crashing a bit.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- ***NEW in 2.69***
- + if "$stringN" = "literal" should now work.
- + Embedding && or () in names for save/load files for MZM
- saving and the like should work now.
- + Expressions won't be activated in pre-2.68 games, meaning if
- they used the constructs which would be valid expressions
- they should be okay.
- + More minutiae.
- + key_code, a more useful key_pressed alternative, added.
- + SMZX mode 1 returns.
- + SMZX mode 2 added.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- ***NEW in 2.68***
- + Expressions added.
- + Trigonometric capabilities added.
- + MZM file capabilities added.
- + Board and overlay can now copy block to each other.
- + Saving and loading of SAV files through Robotic added.
- + String commands totally redone.
- + Now, instead of using value/sqrt_value/abs_value you may use
- a value with the counter directly as such:
- * sqrtN
- * absN
- + fread_pos/fwrite_pos and page should work correctly now; when
- you increase the pos it should bump up the page too.
- + pixel_x, pixel_y, char were broken in 2.65; fixed in 2.68
- + strings had some bugs in 2.62b+, should be fixed now because
- of a separate implementation.
- + MZX Robot files are now saved to save files, so if you have a
- read and/or write file open and the game is saved, if the
- game is loaded the file will be restored at the position it
- was at.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- ***NEW in 2.65***
- + Shows current mod playing in debug window
- + Misc new counters: (ro = read only, wo = write only)
- * fread_counter (ro), fwrite_counter (wo): reads/writes a full
- counter from file
- * board_w (ro), board_h (ro): returns current board
- width/height
- * robot_id_(name) (ro): returns the ID number of robot "name"
- * r(number).(counter) (ro): returns the value of the local
- counter for the robot with the given ID. Note that you
- cannot write to another robot's counter.
- + You can now save partial charsets in the editor.
- + Sprites added; limit set at 64 global.
- + Counters now representable in hex.
- + Subroutines added.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- ***NEW in 2.62***
- + Strings added; limited to ten strings.
- + "mod_order" counter: reports the current order (that is,
- pattern) the playing module is at. Used in conjunction with
- the jump mod order command it can be used to save/restore a
- mod position between boards...
- - MZX 2.62 files are no longer forward compatible. That means
- that a file made in MZX 2.62 will NOT work in any previous
- versions (but it WILL work in future versions, so long as
- they set the version string correctly).
- - The string reading from files may not work correctly on the
- first read (that is, it might truncate the first character of
- the string). For this reason put a junk string in the first
- part of the file and read it first.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- ***NEW in 2.61***
- + Game speeds have been normalized.
- + Original startup color scheme implemented!
- + Redocumentation of a few features left undocumented.
- - Password protection has been fully removed.
- <p class="helpcentered">***</p>
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <a class="helplink" href="#284CLOG.HLP__284">New in Versions 2.84 to 2.84c</a>
- <a class="helplink" href="#2823CLOG.HLP__283">New in Versions 2.82 to 2.83</a>
- <a class="helplink" href="#281CLOG.HLP__281">New in Versions 2.81 to 2.81h</a>
- <a class="helplink" href="#280CLOG.HLP__280">New in Versions 2.80 to 2.80h</a>
- <a class="helplink" href="#OLDESVER.HLP__201">New in Versions 2.01 to 2.60</a>
- <a class="helplink" href="#NEWIN200.HLP__1st">New in Version 2.00</a>
- <a class="helplink" href="#ANCENVER.HLP__1xx">New in Versions Through 1.03</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="OLDESVER.HLP">
- <a class="helpanchor" name="OLDESVER.HLP__201"> </a>
- <p class="helpcentered"><span class="f9 ">New in Versions 2.01 to 2.60</span></p>
- <span class="fE ">2.60 release:</span>
- + File access
- + Menu activation/deactivation
- + Current key pressed detection
- + Easy access to all 16 bits of a counter
- + Pixel editing of a char set
- + Single Byte editing of a char.
- + Real player distance
- + :key# added: gives twos-compliment of key value.
- - SMZX removed.
- - inter robot targeting removed.
- - Random color startup removed.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">2.51ak1.0 release:</span>
- + Added Numerous new Counters
- + Added new inter robot targeting system
- + Added new SMZX mode, dynamic resolution setting
- + Fixed fatal crash when taking a picture, also increased
- the number of picture you can take to 99
- + Removed Built-in ASCII charset
- + Added Random color start up
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">2.51s3.2 release:</span>
- + Removed password protection
- + Added new counter BIMesg to turn off built-in messages
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">2.51s3.1 release:</span>
- + Fixed damage table, now works correctly
- + Fixed unworking Alt+s
- + Fixed screenshot name
- + Fixed strange missile color when firing
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">2.51s3 release:</span>
- + Fixed bug involving savegame name being overwritten by mod
- name
- + Fixed overlay transparency weirdness. Now, background of
- lower layer will ALWAYS show through if background of
- overlay is 0
- + Added in kev's refresh screen support. Press Alt+w on the
- title screen or editor screen, and = in the game(don't ask,
- has to do with mzx's keyboard handler). Use this if your
- charset gets corrupted in windows.
- + Screen shot saving rotates file name(starts with screen0.pcx)
- + Fixed bug involving incorrect loading of mzx health etc.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">2.51s3final release:</span>
- + Fixed bug involving mod * settings being lost when loading
- + Should have fixed ems problems some were reporting, if not,
- just try to get more conventional memory. Enclosed document
- (convmem.txt) should help you.
- + Fixed a bug involving direction checking.
- + Pressing ']' at most any time will now save a screenshot to
- screen.pcx
- + Pressing Alt+8 in the editor will set the current mod to *.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">2.5.1s2beta release:</span>
- + Added MOD "*", which allows a board to use whatever module
- the previous board was using; this necessitated a change in
- the .SAV file format (still need changes in the editor UI
- to access this feature outside of Robotic)
- + inmate's semantics for MOD "SOMETHIN.MOD*" aren't
- immediately possible, although a rough hack is in already
- + char edits are now not displayed until the beginning of the
- next cycle; the deferred display should eliminate a lot of
- flickering
- + an (at least partial) fix for the infamous UNDER bug
- + MOUSEX, MOUSEY and BUTTONS are now buffered.
- + more sane magic handling
- + can load MZX 2.51 and 2.51S1 worlds, but will only save
- 2.5.1spider2 format
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">2.51s1beta release:</span>
- + Increased counters to 1000.
- + Added following counters: (ro) is read only, (r&w) is read +
- write
- * (r&w) MOUSEX, MOUSEY - Location of mouse cursor over the
- screen.
- * (ro) BUTTONS - Status of the buttons (none=0,left=1,
- right=2,both=3)
- * (ro) MBOARDX, MBOARDy - Location of mouse cursor over the
- board.
- * (ro) SCROLLEDX, SCROLLEDY - Length the screen has been
- scrolled in each direction.
- * (ro) PLAYERX, PLAYERY - Location of the player
- * (r&w) CURSORSTATE - Turns on & off the hardware cursor
- (0= off, 1= on, 0 default)
- + Added new independent counter like LOOPCOUNT, named LOCAL,
- it's now possible for a robot to search the screen or
- something without wasting a counter.
- + New .MZX and .SAV formats for MZX2.51S1.
- + .SAV files from 2.51S1 are incompatible with 2.51, and
- vice-versa
- + 2.51S1 is capable of loading 2.51 .MZX world files.
- - 2.51 is not capable of loading .MZX files created or opened &
- saved in 2.51S1
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <p class="helpcentered"><span class="fE ">NEW in version 2.51: ALL NEW music/sound code! 32-channels;</span></p><p class="helpcentered"><span class="fE ">bug-free; support for stereo, 16-bit, GUS, and PAS-16;</span></p><p class="helpcentered"><span class="fE ">support for many formats and effects; up to four</span></p><p class="helpcentered"><span class="fE ">simultaneous sound effects!</span></p>
- Note that the new music support requires that you CONVERT all
- non-MOD files using the included program, 2GDM. See 'MegaZeux's
- Sound System' for details on the NEW music system.
- <a class="helplink" href="#SOUNDEFX.HLP__1st">MegaZeux's Sound System</a>
- Note- This is a direct translation from the file WHATSNEW.251,
- included with MegaZeux. If you haven't used version 1.03 or
- before, you probably won't understand much of this list.
- <span class="fE ">New in version 2.51: (quick fix before I do 3.00!)</span>
- * Bug where moving north or west towards a board that is
- larger than 100 tiles in a dimension may not work properly
- fixed.
- * Bugs in 2GDM.EXE preventing proper conversion of some S3Ms
- fixed.
- * A rare bug preventing internal MOD conversion fixed.
- * "Error opening MOD" will no longer appear during normal
- gameplay.
- * Exporting ANSis now adds a color to the end returning text
- to normal grey.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.50:</span>
- * FOR ALL YOU 2.07 USERS- THE MAJOR UPGRADE is the new sound
- code! Support for stereo, 16-bit, more cards, 4 sound
- effects channels, 32 music channels, higher quality, and
- faster sound code! Less bugs! More formats supported! All
- non-MOD files MUST be converted to GDM using the included
- 2GDM.EXE program. Formats supported- MOD (up to 32 channels),
- WOW/OCT/NST, S3M, 669, and MTM.
- * Volume controls (overall and SAM) added to F2-Settings (saved
- in .CFG file)
- * SAMs play at 2x volume.
- * MTM support added to 2GDM.EXE. Other formats aren't added
- because they aren't needed (not used often enough) or in the
- case of XM, because they support too many advanced features
- that MZX does not support. Partial XM support MAY be added
- later.
- * Many minor bug fixes in 2GDM.EXE's conversion routines.
- * Internal MOD conversion (in MegaZeux) sped up considerably.
- * For all those that upgraded from 2.07, see 2.49g and 2.48b
- WHATS-NEW for more stuff, including a couple interesting
- new Robotic features
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.49g:</span>
- * New Import function added- You can import an ANSi to any
- position on the board.
- * Full SAM sound effect support as in the original 2.07 version
- (but using the new MOD code for up to 4 simultaneous
- channels)
- * The OPEN Robotic command will now push the Robot out of the
- way if the door would be blocked by the robot.
- * REL PLAYER and REL COUNTERS now affects the THISX/THISY
- counters (giving the distance FROM the player/counters TO
- the Robot) and the prefixes also affect the IF [dir] BLOCKED
- command, allowing you to check for blocked status next to
- the player or an arbitrary position.
- * [ box message statements now clip their message to 64
- characters (the maximum) on display. Note that all other
- box-message statements are NOT clipped!
- * Color codes are allowed in ? and & box message statements
- * Invalid sound card settings no longer cause a lock-up
- * You can hold down the mouse button to cycle through RGB
- values in the palette editor
- * Changing something to an explosion no longer can cause weird
- colors
- * What's New section of help sorted by version
- * Placing a robot over the player is prevented with a warning
- * The "Alt+N- Music" lights up properly in the editor now
- * When changing from a larger board to a smaller board, you
- can no longer accidentally have the cursor outside of the
- board size.
- * GUS owners don't need to enter # of SFX channels, since
- MegaZeux cannot support GUS sound effects anyways.
- * File boxes (loading MODs, worlds, etc.) can now hold as
- many filenames as memory allows.
- * GUS setup shown properly on configuration screen
- * 2GDM.EXE rewritten- In THIS release, it can only convert
- MOD, NST, WOW, OCT, 669, and S3M files! The final (2.50)
- release will have support for the remaining file formats.
- It is being rewritten to fix many small bugs and make it
- smaller and faster, as well as possibly add more file
- formats.
- * 2GDM.EXE- F00 effect in MODs deleted during conversion
- * 2GDM.EXE- Bad effects S8x, S0x, and Xxx deleted during S3M
- conversion
- * 2GDM.EXE now works properly from other directories
- * INTERNAL MOD loading support. You can now load MODs, NSTs,
- WOWs, and OCTs from within the game without having to
- convert them to GDM first. The only exception is 15-
- instrument MODs- they must first be converted. Note that
- all other formats, such as S3M, 669, etc. must still be
- converted. NST/WOW/OCT support was only added because they
- are extremely similar to MODs, and MODs were required for
- backward compatibility.
- * Insert doesn't display those "Lo bomb selected" messages,
- etc. if the player is Attack Locked or settings say he
- cannot bomb.
- * Minor bugs in ANSi import corrected. (problem fixed- caused
- errors on import of ANSis with more or the same number of
- lines as the current board size maximum)
- * "Ammo <10" and "Ammo >9" entries in Global Chars changed to
- "Small Ammo" and "Large Ammo" to prevent confusion.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.48b:</span>
- * ALL NEW music code! Features include faster, NO BUGs, 32
- channels, more formats supported (sorry, no MID or XM) etc.
- * Bug where selecting "(no board)" to add a board caused an
- error if that wasn't the first "(no board)" on the list.
- * Bug where if a robot line entered consisted of only
- semicolons, spaces, and commas, it would screw up that
- robot's program, fixed.
- * Command line options (-port,-dma,-irq) added for setting
- sound card parameters. Only needed if auto-detection fails.
- * Minor help corrections.
- * Save/load during testing in editor disabled.
- * Pressing \ no longer causes problems during gameplay.
- * Bug where "Restart board" for death option in global
- options didn't function properly on first board, nor did
- restart-if-zapped. (fixed)
- * Filling in the overlay no longer locks up if you fill over
- something of the same color and picture.
- * Overlay no longer messed up when resizing board.
- * Lock up on Import World removed.
- * Setting the counter "INVINCO" to 0 works properly.
- * Hopefully fixed rare lockups after robot box messages.
- * Added confirmation for board deletion in editor.
- * All included worlds are NO LONGER password protected. (The
- old password was "megahertz".)
- * Minor bugs in passage search algorithms corrected.
- * Obscure bug involving REL prefixes if used in "infinite-
- loop" type constructs (fixed)
- * In editor- Alt+Dir to move 10 spaces now works as expected
- with draw mode on. (IE it will draw in ALL 10 spaces)
- * Bug where passages on screens wider than 256 spaces didn't
- work properly. (fixed)
- * Bug where fire-to-player's-right would lock up and kill him
- FIXED.
- * Counters can be used in ALL strings in &COUNTER& notation.
- For example, SEND "ROBOT" "LABEL&COUNTER&" will replace
- &COUNTER& with a number. This works for ALL strings -
- counter names, labels, robots, etc. See Robotic help for
- details.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.07:</span>
- * Labels and NON-valid counter-regulated options in robot box
- messages are not blank lines; Instead they are just removed
- from the message.
- * Passage (stairs/caves/whirlpools) search algorithm
- corrected.
- * Digitized sample SFX works properly with the note B now.
- * Bug where getting multiple energizers in a row screwed up
- player's color is fixed.
- * Bug where chests with invinco potions will die when taken
- is fixed.
- * Filling in editor, with a robot/scroll/sensor over itself,
- is now handled properly.
- * Whee!! More minor help typos fixed.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.06:</span>
- * Yet more cursor safeguards inserted. (Where do you GET
- these problems!? :)
- * Saving a game no longer asks for overwrite confirmation if
- the file doesn't really exist.
- * Help and tutorial- Minor textual errors fixed
- * Save dialog boxes only allow entry of 12 characters now,
- instead of 13.
- * Help file can be accessed from any directory.
- * -l cmd line option will no longer cause a loading error with
- an oversized filename. (it will instead be ignored)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.05:</span>
- * Cursor bug fixed. (If it isn't, then get a new BIOS! :p)
- * MegaZeux now utilizes overlaid code, for almost 50k core
- memory savings.
- * LOCKSCROLL cmd fixed
- * Moving into the lower-right corner of full-size boards no
- longer warps you to the upper-left corner.
- * SET COLOR and COLOR INTENSITY don't blow up if the color is
- not from 0 to 16.
- * Code for activating 16 background colors is now shorter and
- uses BIOS calls for compatibility.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.04:</span>
- * Slight modifications to Robotic Tutorial (help file)
- * Sending a robot a message, when it hadn't done anything yet
- that turn, activates it immediately. This helps with
- synchronized activities, such as large, multi-robot
- creatures.
- * Alt+Numerics feature of BIOS keyboard routine DISABLED (IE
- Alt+3 will no longer break to DOS)
- * Counters' code optimized.
- * The temp file <span class="fE ">DITRSZ.TMP created when resizing a board is</span>
- now deleted when finished.
- * a KEYBOARD CODE kink was worked out (hopefully got 'em
- all...)
- * Made printer code more general (should work on any printer
- in text mode)
- * PALETTE BUG on some SVGA cards FIXED. (black now looks like
- black) If it still isn't, please notify me.
- * HOME and END will jump to the top/bottom of a box
- message/help/scroll.
- * PgUp/PgDn/Mouse navigation work properly in box
- messages/help/scrolls
- * HOME and END in dialogs works properly now- Unless you are
- editing a number, they will jump to the FIRST item and the
- NEXT or OK button, respectively. In a string, they will
- still jump to the start/end unless you are already there,
- then they will jump to the proper dialog location.
- * Robots (especially when there are lots of them) sped up.
- * DUPLICATE SELF and COPY ROBOT cmds sped up some, except when
- used by global robot.
- * Palette intensities reset when going into editor after the
- title screen changes them.
- * MODULO "str" # will no longer crash if # is 0.
- * Extreme palette activity no longer causes snow or (on EGA)
- screen breakup. Palette activity also sped up.
- * Bug fixed- If a SAM/MOD command had to free up board memory
- (showing the little "freeing up board memory..." meter) then
- that robot stopped running.
- * Bug fixed- If the robot changed it's surroundings (IE
- Putting a SPACE to it's NORTH) and then did a RANDNB or
- RANDB, the new surroundings weren't always taken into
- consideration.
- * DIVIDE ERROR crash/bug fixed. (It was related to usage of
- RANDNB and RANDB)
- * CHAR "A" vs. CHAR 'A' question added to F.A.Q.
- * README.TXT changed- Boot disk/support info added.
- * Help on cmd ."@string" corrected.
- * SPEED defaults to 4 (settings) and is saved in MEGAZEUX.CFG.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.03:</span>
- * Intensity of palette (and other stuff?) now resets after a
- test game.
- * Messed-up black color on certain graphics cards- Attempted
- to fix.
- * Minor bug in VER1TO2.EXE fixed
- * Robot section of Tutorial corrected (the descriptor scrolls)
- * Speeds based on real time (IE speed 3 will be the same on
- ANY computer, unless the computer itself is so slow that it
- forces a slower speed.)
- * CAVERNS has game over screen fixed
- * MOVE PLAYER [dir] "label" command now works properly.
- (Before, the label was almost always ignored)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.02:</span>
- * Bugs with Enter in text mode on small boards fixed
- * Bugs with slime fixed
- * If you have screen faded out (COLOR FADE OUT) and go to
- another screen, it no longer fades it in for you
- automatically.
- * HELP.DOC- CHANGE CHAR ID section fixed
- * Fill really does now fill properly on boards larger than
- 127x127. :)
- * Sped up sensor interactions somewhat
- * Fixed problems with boards not scrolling with the player,
- in the game on over-sized boards. Run FIX.EXE in all
- directories containing version 2.01 or 2.00 .MZX/.MZB files.
- * Nothing can give you negative coins, gems, etc. (such as
- thieves)
- * Minor robot speed improvements
- * Turning Music Off (Settings in Game) really keeps it
- off... :)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <span class="fE ">New in version 2.01:</span>
- * Sensor command CHAR'X' fixed
- * TAKEing health now counts as hurting the player for the
- :playerhurt label
- * Can load help from any drive/directory
- * Copy block in editor now properly clips the block's
- destination
- * Move block in editor now properly clips the block's
- destination
- * ."@new_robot_name" command added
- * If the player runs up against a player bullet, it won't
- hurt him
- * JUSTENTERED, JUSTLOADED, and GOOPTOUCHED labels fixed
- * UNLOCKSCROLL and locked scrolling in general fixed
- * Global info now properly sets endgame/death boards
- * Robot ASK command works properly now
- * Help- internet address/address validity date corrected
- * Help- CHANGE CHAR ID help section- added note about how the
- numbers are also listed in the Global Edit Chars menus
- * ENTER can now exit robot box messages/scrolls
- * Message line (bottom) shows color correctly
- * EXCHANGE/RESTORE w/DUPLICATE SELF fixed
- * Attempted to fix cursor problems in editor. If it doesn't
- work now, then I have no solution, as I use documented BIOS
- routines with many safegaurds.
- * Minor speed improvements
- * Minor size reduction
- * Fill in editor now works with board sizes over 127x127
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <a class="helplink" href="#284CLOG.HLP__284">New in Versions 2.84 to 2.84c</a>
- <a class="helplink" href="#2823CLOG.HLP__283">New in Versions 2.82 to 2.83</a>
- <a class="helplink" href="#281CLOG.HLP__281">New in Versions 2.81 to 2.81h</a>
- <a class="helplink" href="#280CLOG.HLP__280">New in Versions 2.80 to 2.80h</a>
- <a class="helplink" href="#OLDERVER.HLP__260">New in Versions 2.60 to 2.70</a>
- <a class="helplink" href="#NEWIN200.HLP__1st">New in Version 2.00</a>
- <a class="helplink" href="#ANCENVER.HLP__1xx">New in Versions Through 1.03</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="NEWIN200.HLP">
- <a class="helpanchor" name="NEWIN200.HLP__1st"> </a>
- <p class="helpcentered"><span class="f9 ">New in Version 2.00:</span></p>
- * All code has been rewritten or at least stepped through line
- by line, except for the music code.
- * New user interface style and startup screen. Lots of neat
- little items like shadows, nicer colors, etc. Mostly
- aesthetic but nice. Mouse support also improved.
- * Keyboard code rewritten (again) All Alt+lock, shift-lock,
- and ctrl+lock problems, as well as most other keyboard
- problems, should not be a problem anymore. You may have to
- use the -keyb2 command line option. If a key locks, tap it
- a couple times.
- * No flicker- The game engine now page flips.
- * Better string input- ANYWHERE you can enter a string, you
- can now move with the cursors and insert in the middle...
- * Better character selection box- Shows all the characters.
- * New default character set- Much nicer, more general use
- characters.
- * Now detects processor to avoid lock ups on an old 8086/8088.
- If an invalid graphics card is found, DOS services are used
- for printing.
- * Different command line options. (use -? to get info on them)
- * Context sensitive help.
- * Bombs and Sensors under the player no longer mess up floors,
- etc.
- * CHANGEing something to lava, fire, etc. now works correctly.
- * Transporting onto a Sensor works properly.
- * New conditions- MUSICON and PCSFXON
- * Changing things to spaces CLEARS them, to avoid screwing up
- floors.
- * Restart position not changed during a save/load
- * Label- :playerhurt for when player is hurt, not sent on
- invincible hurts
- * Maximum Robot commands per cycle is 40, not 25
- * Global Robot runs normally in freeze/slow time
- * Choice of 100x100, 200x50, 400x25, 80x125, or 60x166 for
- each board.
- * Character editor remembers character you were editing.
- * Robo-P renamed to Robotic
- * Scrolls now allow proper use of mouse, pgup, and pgdn.
- * Scrollborder became Scrollcorner.
- * :gooptouched auto label added, for when the player touches
- Goop.
- * Messages like "You got a red key" are now "You got a key" so
- palette fiddling won't make strange words. :)
- * Within Robotic messages (box/line) a &INPUT& will be
- replaced by the exact text of the currently inputted string
- * Notes in play of same freq. won't run together
- * Explosions won't destroy entrances, lava, water, ice, or
- goop
- * Robots are stopped from firing if there is already a bullet
- of the same dir/type in that dir.
- * Other things will push the player ONTO a Sensor.
- * The above will trigger the SENSORON label.
- * If player is on an entrance without having been there before
- the update, use it. (I.E. can now be pushed onto entrances)
- * Teleporting or walking onto a screen and starting on a
- Sensor will trigger the SENSORON label
- * Non-players/puzzle pieces now transport properly.
- * PLAYERLASTDIR (0-4) and PLAYERFACEDIR (0-3) as counters.
- * Points for killing enemies (3) and points for rings/potions
- (5)
- * Way to disable edging spaces on message row- ENABLE MESG
- EDGE, DISABLE MESG EDGE.
- * Cmds- LOOP START, LOOP # TIMES, ABORT LOOP, uses Robot
- counter LOOPCOUNT
- * Counter limit increased to 50 plus built-in.
- * New passage search order- 1) Same type, same color 2) Same
- color 3) Same type, same foreground 4) Same foreground 5)
- Same type 6) Default player position
- * Palette import/export
- * If the starting board is deleted, change starting board to
- title.
- * "Sets of five" numerical input actually increase by fives
- * Holding the mouse button on a numeric arrow button cycles
- the num.
- * Removed the "." Directory from file menus
- * Six (not four) status counters.
- * CHANGE blah p?? blah p?? (notice the p?? added for the first
- thing)
- * Doors, if can't move, don't advance in anim. I.E., doors
- won't get "stuck" if they are blocked.
- * PERSISTENT GO command, like /"nsew" but WAITS to move if
- blocked.
- * No chest message on empty.
- * Startup "help" screen on first use.
- * Explosions Leave Empty doesn't mess up ANY floors, etc.
- * Much better fill routine.
- * Entering a non-cmd with the first character as a [, ., :,
- etc. automatically formats it. Leading and trailing spaces
- and quotes are cleared first.
- * Save/Load game/etc. are accessed through F-keys in the game.
- * Removed special menu for Alt+M (modify) in editor
- * In editor, keeps track of whether world has been modified.
- * Ceiling layer - non-interactive, but overlays things and
- looks neat. Included in editor- Edit, display toggle.
- Robots - changing it by character, copying areas of it, and
- filling an area of it by cmd or string (I.E. set area to "A
- string") Char of 32 is see-thru. Layer during game can be on,
- off, or static (I.E. not Scrolling, just showing upper left
- portion).
- * Robot commands to change the mode of saving.
- * Limit any one Robot/Scroll to 31k.
- * Allow placing shooting fire in editor.
- * Make all enemies without speed arguments move 1/2 their
- speed.
- * Player CANNOT be overwritten, you must place him anew to
- move him.
- * First line of Robot now shows if it is a box mesg.
- * Speed 1 in game does NOT page flip, for speed.
- * Inputted strings allow input of spaces.
- * Time limits- Out of time zaps to entrance automatically,
- THEN RESETS TIMER. Counter TIMERESET holds reset value for
- timer, and the TIME counter holds the current time.
- * MOD code has only an error on no memory. Errors for loading
- MODs and SAMs (I.E. not enough memory) are active if the
- debug menu (F6) is shown. SAMs have errors for file errors/
- out of memory. These errors are always in the editor/testing
- games.
- * First test of a game doesn't give GAME OVER.
- * Sound effects aren't cut off across screens.
- * Placing a bomb while upon a passage no longed warps to title.
- * Sensors are pushable by things other than the player.
- * New Sensor-activated label- SENSORPUSHED, when the Sensor is
- pushed, with or without the player on it.
- * Label- JUSTENTERED when the player just entered the screen
- or the game is started. (NOT restored)
- * Command- Can lock/unlock board Scrolling temporarily-
- LOCKSCROLL, UNLOCKSCROLL.
- * IF ALIGNEDROBOT "Robot" "label"
- * Damage editing- Changing the amount of damage things
- inflict.
- * Load title screen directly when loading game for title.
- Prevents music on first board from playing, and saves time.
- * New Robot-specific auto-counters- (read only) THISX, THISY.
- * Anywhere a number can go in a Robotic command, a counter can
- too. Wherever there is a number, character, or color, you
- can use a counter name in quotes instead.
- * Cmd line- load MZX file. (-lxxxxxxxx.MZX)
- * Config file for options, ask "OK?" on startup. Removed all
- config cmd line options.
- * Cmd- SCROLLVIEW X Y. (upper left hand corner is specified)
- Based off of current player position.
- * Cmd- SWAP TO WORLD "world.mzx" as if starting the world up.
- Skips any title screen. (you could put a message there) The
- other world can have a "Only play from swap" option set.
- * Quicksave key in game- Saves without asking for filename and
- confirmation.
- * Quickload key in game- Same idea.
- * Option (default off) on world to clear messages, bullets,
- and spitfires from a screen when exited.
- * Label JUSTLOADED sent to as soon as the game is started or
- restored. (including the title screen and actual playing)
- * Shows character number on char edit and char selection.
- * Shows color number on color selection.
- * Multiple spots to SAVE/RESTORE/EXCHANGE PLAYER POSITION. (8)
- * RESTORE/EXCHANGE PLAYER POSITION with the option to
- duplicate the Robot to take his place. When the player moves
- back, the Robot is, of course, deleted.
- * Remove RANDOM POS/SIZE options.
- * Allow labels to interrupt in a Robot's box-message code and
- have the message still show uninterrupted.
- * Show a pic of the item next to it in the THINGS menus.
- * Different bullet pics/colors for player, neutral, and enemy
- bullets.
- * Status shown counters won't show if the value is 0.
- * Prefixes that affect only the first or last x y pair of a
- command. (REL COUNTERS LAST, REL SELF FIRST, etc.)
- * Mod fading commands (background)
- * Allow lives/health to max out at 65535.
- * Score as a counter.
- * Maximum of 150 boards. (not 127)
- * Cmd- COPY BLOCK x y x y x y.
- * Label for SpitFire hitting a Robot- "spitfire"
- * Label for Lazer hitting a Robot- "lazer"
- * Cmd- CLIP INPUT (chops first word + spaces off of input)
- * Cmd- IF FIRST INPUT "str" "label"
- * KEY1 through KEY9 labels. (like KEYA thru KEYZ)
- * Allow viewport sizes down to 1x1.
- * PUSH Robot command- push things to dir without moving there.
- * ONE global Robot. (No ID) Stored separate from a board, and
- is active on ALL boards.
- * Robots- Allow importing of a character into a CHAR EDIT
- command.
- * Robots- Have SCROLL CHAR, FLIP CHAR, and COPY CHAR commands.
- * Full backward compatibility w/old MegaZeux via a conversion
- program. (VER1TO2.EXE)
- * Editable built-in sfx. (including to digitized)
- * Elements- Goop, which is like Water from ZZT.
- * EGA/VGA palette editor, with easy fading. Commands- COLOR
- INTENSITY # PERCENT, COLOR INTENSITY "counter" PERCENT,
- COLOR FADE IN, COLOR FADE OUT, SET COLOR # TO r g b, SET
- COLOR # TO INTENSITY # PERCENT, SET COLOR "counter" TO
- INTENSITY "counter" PERCENT. (note- the FADE OUT/IN cmds
- are "quick" fades, IE not in the bk, but they actually
- stall the game a bit. They also end the current cycle.)
- * Display counters within strings, IE. * "You have &GEMS&
- gems." (use && for &)
- * Robot command- LOAD CHAR SET "file.chr"
- * New default characters for global chars and char set.
- * When adding another board, copy most of the options (can
- attack, etc.) from the current board, including MOD file.
- * Edit ANY character/color from Global Chars.
- * Char editor- Revert to ASCII, Revert to MegaZeux, changed
- REVERSE to NEGATIVE.
- * Alt+Y Debug info LABELs each line.
- * Block command- Paint (w/color).
- * Board editor- Scroll when cursor is five spaces from the
- edge.
- * Fade in/out between screens and program areas.
- * Ice does NOT keep pushing you against something. If you are
- blocked, cease movement.
- * Make sound test available in editor as an option, from the
- sound effects editing screen.
- * Can't test a save-locked game w/o pw, and it no longer locks
- up from this.
- * REMOVED Scroll coloring on line by line. (using ! codes)
- * Export .ANS file.
- * Energizer will return player color to old color.
- * Capture and throw away ctrl+C, PrintScreen, SysRq, and
- Pause.
- * Return in editor at end of program can now add a blank line.
- * Allow marking of a section of Robot, in lines. You can now
- Copy, Cut, Clear, or Paste blocks.
- * Remove useless "pro" mode.
- * Robot commands- DIVIDE, MULTIPLY, MODULO.
- * Different player pics per direction.
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <a class="helplink" href="#284CLOG.HLP__284">New in Versions 2.84 to 2.84c</a>
- <a class="helplink" href="#2823CLOG.HLP__283">New in Versions 2.82 to 2.83</a>
- <a class="helplink" href="#281CLOG.HLP__281">New in Versions 2.81 to 2.81h</a>
- <a class="helplink" href="#280CLOG.HLP__280">New in Versions 2.80 to 2.80h</a>
- <a class="helplink" href="#OLDERVER.HLP__260">New in Versions 2.60 to 2.70</a>
- <a class="helplink" href="#OLDESVER.HLP__201">New in Versions 2.01 to 2.60</a>
- <a class="helplink" href="#ANCENVER.HLP__1xx">New in Versions Through 1.03</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- <div class="helpfile" id="ANCENVER.HLP">
- <a class="helpanchor" name="ANCENVER.HLP__1xx"> </a>
- <p class="helpcentered"><span class="f9 ">New in Versions Through 1.03</span></p>
- 1.03 release: QUICK FIXES, LIMITED DISTRIBUTION
- * TELEPORT command fixed
- * Gives error on attempt to test pw-protected world
- * "Explosions leave Empty" won't screw up floors, etc. (except
- web)
- * Placing a bomb over an entrance no longer warps to the title
- screen
- * INPUT STRING allows input of spaces
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- 1.02 release: NEW:
- * Miscellaneous help errors fixed
- * Miscellaneous errors in Caverns fixed
- * Miscellaneous speed/efficiency code updated
- * AVALANCHE fully fixed, now can be entered into a robot
- * Timing code fixed (may fix some problems)
- * Slight modification to keyboard code (may fix some problems)
- * Added -keyboard2 option
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- 1.01 release: FIRST "NON-BETA" RELEASE:
- * JUMP MOD ORDER 'num' has now been documented.
- * AVALANCE corrected to AVALANCHE.
- * Robot command GO DIR "LABEL" fixed.
- * Some minor help errors fixed.
- * Fixed bug where a BECOME THING command, if becoming a space,
- fake, or other "under"-type object, would not erase anything
- already under the robot.
- * REL TO PLAYER and REL TO SELF now work with the TELEPORT
- command.
- * If a robot (from WALKing) is sent to the EDGE label and none
- exists, it then attempts to find a THUD label as well.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- 1.00g release: FIRST PUBLIC RELEASE:
- * Removed ALL joystick support- Didn't work, couldn't get it
- to.
- * PW protect- lot simpler, faster, and easier to hack. :)
- * GLOBAL INFO- Toggleable game over music (you should correct
- this in all your pre-1.00g games)
- * Fixed misc. bugs in games. SOMEONE NEEDS TO TEST THEM ALL
- AGAIN FROM START TO FINISH.
- * Strings w/o quotes that begin with C or P are not
- capitilized funny.
- * Settings box no longer turns off music.
- * Alt-A in editor (param) gives error if there is not a legal
- "thing".
- * ALLIGNED fixed to ALIGNED (spelling error inherited from
- ZZT)
- * Fixed bug where if slow time or freeze time was active when
- player touched a door, player was copied.
- * Help- fixed slight bugs
- * Fixed minor problems in Caverns, Forest, and Chronos
- * MOD not required for SAM
- * Level not speeded up if MOD not playing
- * MOD not require a speed command (speed properly done)
- * Help uses Alt-P to print
- * Speed defaults to 3 not 4
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- 6th beta release: NEW:
- * Fixed bug where slow/stop effects didn't work on title.
- * Fixed bug in command MOVE PLAYER where it would occasionally
- create junk.
- * Fixed bug in robot editor where if "Show Colors" option
- (Alt-O) was off, any color with a ? for the second digit
- showed an incorrect first digit- cV? for cF?, etc.
- * The direction UNDER now works with the PUT thing dir PLAYER
- command.
- * Dir/drive support added to loading MZX fileboxes.
- * HELP IS IN ONE FILE- MZX_HELP.PKG (note- memory minimum is
- still maintained.)
- * Fixed bug where fire could hurt you indirectly even if
- lavawalker was in effect.
- * Fixed bug where nothing (except player) could push a
- pushable robot head on. (only if it was in a string of
- things to push)
- * Fixed bug where shooting fire would destroy entrances.
- * Fixed bug in Put commands that would erase before placing,
- so putting things over a fake or floor erased the
- fake/floor. (etc)
- * Change command- Didn't change params properly if you were
- changing between like objects (IE text to text) Also made
- more robust against attempts to change things to
- robots/scrolls/signs/sensors/players.
- * Put commands- Made more robust against attempts to put
- robots/scrolls/signs/sensors/players.
- * Fixed bug where no player on a board would really mean no
- player!
- * With Shift-F1 through Shift-F4 in editor, the key used to
- stop the flashing is not interpreted but ignored.
- * Sensor/Robot interactions! (See help)
- * PageUp will change menus in the editor now. (along with
- PageDown)
- * Removed all refrences (except in file format) to double
- speed robots and projectiles. Code increase is not worth it.
- * RANDB, RANDNB directions added!
- * Misc. help corrections and bug fixes, finished help. (except
- for minor changes)
- * Alt-O (options) no longer clears the command line at the
- bottom
- * Character insert in robot editor now inserts the characters
- corresponding to 10 and 13.
- * If you select base 16 in Alt-O options (robot editor) then
- ALL numbers are shown in hex, including when editing the
- line. (previously, the current line was shown in base 10 at
- all times.)
- * Chronos-Stasis finished. (not tested outside of myself)
- * Forest of Ruin finished except for ending. (see above)
- * Repeat (F4) and Delete line (Alt-D) added to robot editor
- * Copy, Cut, and Paste line (Alt-C/T/P) added to robot editor
- (note- paste REPLACES current line)
- * Export robot (Alt-X) added to editor. Exporting from current
- line or top of program both supported.
- * Import robot (Alt-I) added to editor. Importing only looks
- for *.TXT in the filebox. Import always REPLACES the current
- robot program.
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- 5th beta release: NEW:
- * Fixed bug in teleport command where screen was not updated
- if player ended up in the same position.
- * Fixed bug where mouse didn't select right item on game menu
- * Fixed bug where adding a new robot/scroll/sensor when the
- current item was a robot/scroll/sensor would reset the color
- to lt.grey
- * Caverns all finished (hope I got all the bugs)
- * The DEF.COLORS option doesn't reset when changing/adding
- boards now
- * SAM now works right...
- * In fact, added new code for MOD and VOC- a LOT less "out of
- mem" or "error loading" errors.
- * Fixed bug with locked doors (not locks, but real doors)
- * Saving games and files is MUCH faster in almost all
- circumstances. Save meter more accurate as well.
- * Board import/export fixed- robots/scrolls/sensors were
- messed up
- * Pgdn, Pgup, Ctrl/Alt Home, Ctrl/Alt End added to robot
- editor.
- * Ctrl/Alt Left + Right used to jump 10 chars in character
- selection boxes.
- * Save area in character editor (F-2 and F-3) stays the same
- between calls to the character editor, including when
- loading games.
- * Character editor shows not only current char pic, but those
- of the three chars before and three chars after as well.
- * Fixed bug where a robot with no program would majorly mess
- up things.
- * Misc. bug fixes, help typos, and optimizations.
- !ADDED 14 COMMANDS (all commands finished)
- !ADDED 2 DIRECTIONS (randp, randnot)
- * Help brings up Robot Table of Contents within robot editor
- * Quotes not required around strings of one word not matching
- any reserved word, IE a word used for ANYTHING else,
- anywhere. They are added automaticaly, though.
- * EDITOR OPTIONS in robot editor (Alt-O) Choose number base,
- upper case or lower case, and whether to display colors.
- * Bug fixed in editor- Now colors like c7? (with ? at end)
- work right.
- * Calibrate Joystick button added to Game options (F2) Tony-
- See if this helps.
- * Speeded up certain file operations. This MAY fix the
- "lockup" bug when accessing Help during a MOD- I think that
- the lockup may of been just a really slow file access.
- * Added X position indicator to bottom left of robot window,
- to facilate creating box messages that aren't too long.
- * Fixed bug that allowed entering ANY character at the mixing
- rate prompt.
- * INPUT STRING, IF STRING "str" "label", IF STRING NOT "str"
- "label" robot commands added.
- * UNDER/BENEATH direction added to IF dir PLAYER thing "label"
- command.
- * Clarified options at startup- Music device became Device for
- Digitized Music and Sound.
- * Added four more mixing rates. Choose from 7500 up to 25000
- in jumps of 2500. (eight rates total)
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- 4th beta release: NEW:
- * Note- SAVE GAME FORMAT CHANGED. Delete all your .SAV files.
- .MZX file format NOT changed- compatibility still
- maintained.
- * Scroll border/etc. colors changable using robot commands-
- SCROLLBASE COLOR, SCROLLBORDER COLOR, etc. (see help)
- * Removed Alt-Minus and Alt-Plus keys in editor- Useless and
- dangerous. (they were only for testing purposes.)
- * Various bug fixes
- * Joystick support- UNTESTED! Tony- I need feedback!
- * Mixing rate options at startup.
- * A warning is given and verification is necessary if you try
- to save a .MZX file over an already existing file.
- * You can now choose from some additional music output
- devices.
- * Help is in seperate files, MZX*.HLP, to save memory. (lots!)
- * I FINALLY THINK THE MEMORY AND FILE CODE WORKS PERFECT!
- Except for speed. Something to work on...
- * Char editor shows values of bytes along left side, for use
- with robot command CHAR EDIT.
- * Yet more help
- * Robot editor! See the top box for keys to use (Import/eXport
- not implemented yet)
- * Robots as well! See Help, Robo-P Reference, Command
- Reference, and look at commands for help using them. Some
- are not done yet.
- * Video mode returns to default VGA mode (text 16x9) on exit
- * File lists sorted
- * Directory support and DRIVE support in file boxes WAS added,
- but was taken out due to problems since changing the current
- directory makes it almost impossible to find the current
- .MZX file to read boards from.
- * Custom Critical Error Handler (no dos grey messages if the
- drive is invalid or something like that)
- * Password displayed as *'s when inputting, except on
- protection menu. (Do YOU think it should be *'s on
- protection menu? 'T'? CP?)
- * Enemys-hurt-enemys option added (GLOBAL info, SPEC. button)
- * "Show Robots" option added (Shift F2)
- * More help added
- * Fixed sensor bug (The player couldn't move onto it in most
- cases)
- * Fixed a bug where if you tried to Grab something via the
- Modify menu and the current thing was a scroll, sign, or
- robot that had no copy anywhere else on the current board,
- then the memory allocated to that object was not freed.
- (whew!)
- * A few more optimizations
- * Mouse disapears after a certain period of time of non-use
- * Boulders from the AVALANCHE potion, and explosions from the
- BLAST potion can't appear over an entrance anymore
- * Fixed some bugs in Text Export
- * Removed .BIN import- Waste of program space
- * Made ALL options (protection, ANSi import) available in
- unregistered- now registration is only for the games
- * Removed "suicide key" from game. Think about how it could
- screw up carefully planned cinemas, story sequences, etc.
- * Mouse support in character editor
- * Test function added
- * Speeded up saves and board switches
- * Slowed down all file access (okay, so it's not a feature,
- but it's more reliable, as is memory management as well)
- * Made save meter more accurate
- * BLOCK COMMANDS! (in editor)
- * ZZT board import (not perfectly accurate, but...)
- * Bug fixed where games with the title screen title at maximum
- length would mess up the file list box
- * MOD (SB & speaker) support! (& SAM)
- * Explosion-meets-player bug fixed
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- 3rd beta release: NEW:
- * Full mouse support (except in character editing)
- * No "pointer" mouse...
- * Scrolls and sensors
- * Robot code (memory management) mostly transparent to user
- * GLOBAL Info- Death & endgame options
- * GLOBAL Info- Removed "Health Only/Lives Only" options
- * CW/CCW support
- * Sound always the same speed
- * Bug fixes and optimizations
- * Status Info added
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- 2nd beta release: NEW:
- * Cmd line options
- * Mouse support (not finished)
- * -Bios option
- * Hopefully fixed Tony's graphics bugs (try it with and
- without -bios)
- * Bug fixes
- * Tutorial.mzx has creatures/guns sections
- * Fixed/better/changed keyboard routines
- * Optimized code
- <a class="helplink" href="#NEWINVER.HLP__1st">NEW in MegaZeux!</a>
- <a class="helplink" href="#284CLOG.HLP__284">New in Versions 2.84 to 2.84c</a>
- <a class="helplink" href="#2823CLOG.HLP__283">New in Versions 2.82 to 2.83</a>
- <a class="helplink" href="#281CLOG.HLP__281">New in Versions 2.81 to 2.81h</a>
- <a class="helplink" href="#280CLOG.HLP__280">New in Versions 2.80 to 2.80h</a>
- <a class="helplink" href="#OLDERVER.HLP__260">New in versions 2.60 to 2.70</a>
- <a class="helplink" href="#OLDESVER.HLP__201">New in versions 2.01 to 2.60</a>
- <a class="helplink" href="#NEWIN200.HLP__1st">New in version 2.00</a>
- <a class="helplink" href="#MAIN.HLP__072">Table of Contents</a>
- <hr /></div>
- </div>
- </body>
- </html>
|